@sma1lboy/kobe 0.7.39 → 0.7.41

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/cli/index.js +179 -163
  2. package/package.json +1 -1
package/dist/cli/index.js CHANGED
@@ -1,104 +1,104 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var nL=Object.defineProperty;var dL=(f)=>f;function iL(f,J){this[f]=dL.bind(null,J)}var jf=(f,J)=>{for(var Y in J)nL(f,Y,{get:J[Y],enumerable:!0,configurable:!0,set:iL.bind(J,Y)})};var k=(f,J)=>()=>(f&&(J=f(f=0)),J);var pX=import.meta.require;import{basename as lL}from"path";function aL(f){let J="";for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="*")if(f[Y+1]==="*")J+=".*",Y++;else J+="[^/]*";else if(z==="?")J+="[^/]";else if(z&&"\\^$.|+()[]{}".includes(z))J+=`\\${z}`;else J+=z}return new RegExp(`^${J}$`)}function _X(f,J){let Y;try{Y=aL(f)}catch{return!1}return Y.test(J)||Y.test(lL(J))}var vQ=()=>{};var f9={};jf(f9,{prevVendorWithin:()=>mQ,nextVendorWithin:()=>ZY,nextVendor:()=>$L,isBuiltinVendor:()=>Q1,coerceVendorId:()=>iY,BUILTIN_VENDORS:()=>dY,ALL_VENDORS:()=>cf});function Q1(f){return f==="claude"||f==="codex"||f==="copilot"}function $L(f){let J=cf.indexOf(f);return cf[(J+1)%cf.length]??cf[0]}function ZY(f,J){if(f.length===0)return J;let Y=f.indexOf(J);return f[(Y+1)%f.length]??f[0]??J}function mQ(f,J){if(f.length===0)return J;let Y=f.indexOf(J);if(Y<0)return f[f.length-1]??J;return f[(Y-1+f.length)%f.length]??J}function iY(f){let J=f?.trim();return J&&J.length>0?J:"claude"}var dY,cf;var K1=k(()=>{dY=["claude","codex","copilot"],cf=[...dY]});var oX;var J9=k(()=>{oX={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.39",description:"TUI orchestrator for Claude Code (codename)",type:"module",packageManager:"bun@1.3.13",bin:{kobe:"dist/cli/index.js"},files:["dist/cli","dist/web-ui","dist/*.wav","README.md","LICENSE"],publishConfig:{access:"public"},repository:{type:"git",url:"git+https://github.com/Sma1lboy/kobe.git"},homepage:"https://github.com/Sma1lboy/kobe#readme",bugs:{url:"https://github.com/Sma1lboy/kobe/issues"},engines:{bun:">=1.3.11"},scripts:{dev:"env KOBE_DEV=1 bun --preload @opentui/solid/preload --conditions=browser ./src/cli/index.ts","dev:sandbox":"mkdir -p .dev-sandbox/home && env KOBE_DEV=1 KOBE_HOME_DIR=$PWD/.dev-sandbox/home KOBE_TMUX_SOCKET=kobe-sandbox bun --preload @opentui/solid/preload --conditions=browser ./src/cli/index.ts","dev:sandbox:reset":"env KOBE_TMUX_SOCKET=kobe-sandbox bun ./src/cli/index.ts kill-sessions","dev:version":"bash ../../scripts/dev-version.sh",build:"bun run scripts/build.ts","build:with-web":"bun run build",compile:"bun run scripts/compile.ts",typecheck:"tsc --noEmit","check-i18n":"bun run scripts/check-i18n.ts",test:"bun run test:fast && bun run test:socket","test:fast":"vitest run --passWithNoTests","test:socket":"KOBE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=1 --passWithNoTests","test:behavior":"KOBE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --passWithNoTests",bench:"vitest bench --run",lint:"biome check .",knip:"knip-bun",postinstall:"bun run scripts/check-preview-deps.ts || true",prepublishOnly:"bun run typecheck && bun run build"},"//":"biome.json + bunfig.toml live at the monorepo root since they apply repo-wide; bun.lock also lives at root (workspace-shared).",dependencies:{"@ansi-tools/parser":"^1.0.15","@opentui/core":"0.2.4","@opentui/solid":"0.2.4",ws:"^8.18.0","solid-js":"1.9.13"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.11","@tsconfig/bun":"1.0.10","@types/bun":"1.3.14","@types/node":"25.6.2",knip:"^6.14.2","kobe-web":"workspace:*","node-pty":"^1.1.0",typescript:"5.8.2",vitest:"2.1.9"},trustedDependencies:[]}});import{createHash as Y9}from"crypto";import{homedir as pL}from"os";import{join as lY}from"path";function z9(){return process.env.KOBE_DEV==="1"}function OJ(){return process.env.KOBE_HOME_DIR??pL()}function ef(){return lY(OJ(),".kobe")}function m1(){return lY(OJ(),".config","kobe","state.json")}function _L(){return lY(ef(),"settings")}function G9(){return lY(_L(),"keybindings.yaml")}function cQ(){return lY(ef(),"issue-assets")}function sX(f,J,Y){let z=Y9("sha1").update(`${J}@${f}:${Y??22}`).digest("hex").slice(0,16);return lY(ef(),"ssh",`${z}.sock`)}function X9(f){let J=Y9("sha1").update(f).digest("hex").slice(0,16);return lY(ef(),"worktree-init",J)}var lf=()=>{};var q9={};jf(q9,{repoSlug:()=>aY,releasePageUrl:()=>aQ,recommendedGlobalInstallCommand:()=>iQ,isNewerSemver:()=>nQ,fetchReleaseSummaries:()=>tL,fetchReleaseNotesRange:()=>lQ,fetchReleaseNotes:()=>sL,compareSemver:()=>tX,checkLatestVersion:()=>wG,UPDATE_SCRIPT_URL:()=>eX,UPDATE_COMMAND:()=>hJ,PACKAGE_NAME:()=>dQ,CURRENT_VERSION:()=>s0});function aY(){let f=oX.repository?.url;if(!f)return null;let J=f.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!J||!J[1]||!J[2])return null;return`${J[1]}/${J[2]}`}function iQ(){return`npm install -g ${dQ}@latest`}async function oL(f){let J=new AbortController,Y=setTimeout(()=>J.abort(),fZ);try{let z=f.replace("/","%2F"),G=await fetch(`https://registry.npmjs.org/${z}/latest`,{signal:J.signal,headers:{accept:"application/json"}});if(!G.ok)return null;let X=await G.json();if(typeof X.version!=="string")return null;return X.version}catch{return null}finally{clearTimeout(Y)}}function nQ(f,J){return tX(f,J)>0}function tX(f,J){let Y=(X)=>X.split("-")[0]??X,z=Y(f).split(".").map((X)=>Number.parseInt(X,10)),G=Y(J).split(".").map((X)=>Number.parseInt(X,10));for(let X=0;X<3;X++){let q=z[X]??0,Q=G[X]??0;if(Number.isNaN(q)||Number.isNaN(Q))return 0;if(q>Q)return 1;if(q<Q)return-1}return 0}async function wG(f={}){let J=process.env.KOBE_FAKE_UPDATE;if(J)return{current:s0,latest:J,hasUpdate:nQ(J,s0)};if(z9()&&!f.force)return null;let Y=await oL(dQ);if(!Y)return null;return{current:s0,latest:Y,hasUpdate:nQ(Y,s0)}}function Z9(f){if(typeof f!=="string")return null;return f.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function sL(f){let J=aY();if(!J)return null;let Y=`v${f}`,z=new AbortController,G=setTimeout(()=>z.abort(),fZ);try{let X=await fetch(`https://api.github.com/repos/${J}/releases/tags/${Y}`,{signal:z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!X.ok)return null;let q=await X.json();if(typeof q.body!=="string"||typeof q.html_url!=="string")return null;return{body:q.body,url:q.html_url,version:f}}catch{return null}finally{clearTimeout(G)}}async function lQ(f){let J=aY();if(!J)return[];let Y=f.limit??100,z=new AbortController,G=setTimeout(()=>z.abort(),fZ);try{let X=await fetch(`https://api.github.com/repos/${J}/releases?per_page=${Y}`,{signal:z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!X.ok)return[];let q=await X.json();if(!Array.isArray(q))return[];return q.map((Q)=>{let H=Z9(Q.tag_name);if(!H||typeof Q.html_url!=="string"||typeof Q.body!=="string")return null;if(tX(H,f.current)<=0)return null;if(tX(H,f.latest)>0)return null;return{version:H,url:Q.html_url,body:Q.body}}).filter((Q)=>Q!==null)}catch{return[]}finally{clearTimeout(G)}}async function tL(f=12){let J=aY();if(!J)return[];let Y=new AbortController,z=setTimeout(()=>Y.abort(),fZ);try{let G=await fetch(`https://api.github.com/repos/${J}/releases?per_page=${f}`,{signal:Y.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return[];let X=await G.json();if(!Array.isArray(X))return[];return X.map((q)=>{let Q=Z9(q.tag_name);if(!Q||typeof q.html_url!=="string")return null;return{version:Q,url:q.html_url}}).filter((q)=>q!==null)}catch{return[]}finally{clearTimeout(z)}}function aQ(f){let J=aY();if(!J)return null;return`https://github.com/${J}/releases/tag/v${f}`}var s0,dQ,eX="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",hJ,fZ=3000;var U1=k(()=>{J9();lf();s0=oX.version,dQ=oX.name;hJ=`curl -fsSL ${eX} | sh`});import{spawn as eL,spawnSync as fM}from"child_process";import{existsSync as H9}from"fs";import{mkdir as JM,readFile as YM,readdir as zM}from"fs/promises";function $Y(f){return`'${f.replace(/'/g,"'\\''")}'`}function GM(f){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(f)?f:$Y(f)}function j9(f){return f.map($Y).join(" ")}function XM(f,J){let Y=j9(f);return J?`cd ${$Y(J)} && ${Y}`:Y}function ZM(f){if(!f)return"";let J=Object.entries(f).filter(([Y])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(Y));if(J.length===0)return"";return`${J.map(([Y,z])=>`${Y}=${$Y(z)}`).join(" ")} `}function hG(f,J={}){let Y=["ssh"];if(J.tty)Y.push("-tt");if(J.batch)Y.push("-o","BatchMode=yes");if(Y.push("-o","ControlMaster=auto","-o",`ControlPath=${f.controlPath}`,"-o","ControlPersist=300"),Y.push("-o","StrictHostKeyChecking=accept-new"),f.port)Y.push("-p",String(f.port));if(f.auth.kind==="key"&&f.auth.keyPath)Y.push("-i",f.auth.keyPath);return Y.push(`${f.user}@${f.host}`),Y}function W9(f,J={}){return new Promise((Y)=>{let[z,...G]=f,X="",q="",Q=!1,H=(V)=>{if(Q)return;Q=!0,Y({stdout:X,stderr:q,exitCode:V})},B;try{B=eL(z??"",G,{cwd:J.cwd,env:J.env,shell:!1,signal:J.signal})}catch{H(-1);return}B.stdout?.setEncoding("utf8"),B.stdout?.on("data",(V)=>{X+=V}),B.stderr?.setEncoding("utf8"),B.stderr?.on("data",(V)=>{q+=V}),B.on("error",()=>H(-1)),B.on("close",(V)=>H(V??-1))})}class JZ{isRemote=!1;run(f,J={}){return W9(f,{cwd:J.cwd,env:J.env?{...process.env,...J.env}:process.env,signal:J.signal})}async exists(f){return H9(f)}existsSync(f){return H9(f)}async mkdirp(f){await JM(f,{recursive:!0})}async readFile(f){try{return await YM(f,"utf8")}catch{return null}}async readdir(f){try{return await zM(f)}catch{return[]}}wrapCommand(f){return f}ensureReady(){}}class uz{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(f,J=B9,Y){this.spec=f;this.spawn=J;this.spawnAsync=Y??(this.spawn===B9?qM:async(z,G)=>this.spawn(z,G))}ensureReady(){if(this.masterUp)return;if(this.spawn([...hG(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let J=[...hG(this.spec,{batch:this.spec.auth.kind!=="password"}),"-fN"];if(this.spec.auth.kind==="password"){let Y=this.spec.auth.getPassword();if(Y!=null){this.spawn(["sshpass","-e",...J],{SSHPASS:Y}),this.masterUp=!0;return}}this.spawn(J),this.masterUp=!0}async run(f,J={}){this.ensureReady();let Y=`${ZM(J.env)}${j9(f)}`,z=J.cwd?`cd ${$Y(J.cwd)} && ${Y}`:Y;return this.spawnAsync([...hG(this.spec,{batch:!0}),z],void 0,{signal:J.signal})}async exists(f){return(await this.run(["test","-e",f])).exitCode===0}existsSync(f){return this.ensureReady(),this.spawn([...hG(this.spec,{batch:!0}),XM(["test","-e",f])]).exitCode===0}async mkdirp(f){await this.run(["mkdir","-p",f])}async readFile(f){let J=await this.run(["cat",f]);return J.exitCode===0?J.stdout:null}async readdir(f){let J=await this.run(["ls","-1A",f]);if(J.exitCode!==0)return[];return J.stdout.split(`
4
- `).filter((Y)=>Y.length>0)}wrapCommand(f,J={}){let Y=J.cwd?`cd ${$Y(J.cwd)} && ${f}`:f;return`${hG(this.spec,{tty:J.tty}).map(GM).join(" ")} ${$Y(Y)}`}}var B9=(f,J)=>{let[Y,...z]=f,G=fM(Y??"",z,{env:J?{...process.env,...J}:process.env,encoding:"utf8",shell:!1});return{stdout:G.stdout??"",stderr:G.stderr??"",exitCode:G.status??-1}},qM=(f,J,Y)=>W9(f,{env:J?{...process.env,...J}:process.env,signal:Y?.signal});var $Q=()=>{};import{spawnSync as QM}from"child_process";import{platform as HM}from"os";function V9(f,J,Y){return{service:BM,account:Y?`${J}@${f}:${Y}`:`${J}@${f}`}}function pQ(f=rQ){return f.platform()==="darwin"}function K9(f,J,Y=rQ){if(Y.platform()!=="darwin")return!1;let{exitCode:z}=Y.run(["security","add-generic-password","-U","-s",f.service,"-a",f.account,"-w",J]);return z===0}function YZ(f,J=rQ){if(J.platform()!=="darwin")return null;let{stdout:Y,exitCode:z}=J.run(["security","find-generic-password","-s",f.service,"-a",f.account,"-w"]);if(z!==0)return null;return Y.replace(/\n$/,"")}var rQ,BM="kobe-remote-ssh";var _Q=k(()=>{rQ={run(f){let[J,...Y]=f,z=QM(J??"",Y,{encoding:"utf8",shell:!1});return{stdout:z.stdout??"",exitCode:z.status??-1}},platform(){return HM()}}});import{mkdirSync as jM,readFileSync as WM,renameSync as VM,writeFileSync as KM}from"fs";import{dirname as UM}from"path";function nf(){try{let f=WM(m1(),"utf8"),J=JSON.parse(f);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return{}}function U9(f){let J=m1();jM(UM(J),{recursive:!0});let Y=`${J}.tmp`;KM(Y,JSON.stringify(f,null,2),"utf8"),VM(Y,J)}function Ez(f){let J=nf();if(f(J)!==!1)U9(J);return J}function rY(f){return Ez((J)=>{for(let[Y,z]of Object.entries(f))if(z===void 0)delete J[Y];else J[Y]=z;return})}function D9(f){U9(f)}var pY=k(()=>{lf()});var qY={};jf(qY,{statePath:()=>LM,setRepoInitOverride:()=>MM,setPersistedString:()=>af,resolveRepoRoot:()=>PJ,resolveMainRepoRoot:()=>DM,removeSavedRepo:()=>FM,remoteRepoKey:()=>A9,normalizeSavedRepos:()=>sQ,isRemoteRepoKey:()=>D1,isRemoteProjectsEnabled:()=>eQ,getSavedRepos:()=>c1,getRepoInitOverride:()=>tQ,getRemoteRepos:()=>JH,getRemoteRepoConfig:()=>mJ,getPersistedString:()=>kf,getCustomEngineIds:()=>oQ,addSavedRepo:()=>vJ,addRemoteRepo:()=>YH});import{spawnSync as M9}from"child_process";import{realpathSync as L9}from"fs";function PJ(f){if(D1(f))return f;let J=M9("git",["rev-parse","--show-toplevel"],{cwd:f,encoding:"utf8",shell:!1});if(J.status!==0)return f;let Y=(J.stdout??"").trim();if(!Y)return f;try{if(L9(f)===L9(Y))return f}catch{}return Y}function DM(f){if(D1(f))return f;let J=M9("git",["worktree","list","--porcelain"],{cwd:f,encoding:"utf8",shell:!1});if(J.status!==0)return PJ(f);return(J.stdout??"").split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim()||PJ(f)}function LM(){return m1()}function zZ(f){let J=f.savedRepos;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string")}function c1(){return zZ(nf())}function kf(f){let J=nf()[f];return typeof J==="string"?J:void 0}function af(f,J){rY({[f]:J})}function oQ(){let f=nf().customEngineIds;if(!Array.isArray(f))return[];return f.filter((J)=>typeof J==="string"&&J.trim().length>0)}function vJ(f){let J=PJ(f),Y={added:!1,path:J,total:0};return Ez((z)=>{let G=zZ(z);if(G.includes(J))return Y={added:!1,path:J,total:G.length},!1;z.savedRepos=[...G,J],Y={added:!0,path:J,total:G.length+1};return}),Y}function sQ(){let f=c1(),J=new Set,Y=[],z=!1;for(let G of f){let X=PJ(G);if(X!==G)z=!0;if(J.has(X)){z=!0;continue}J.add(X),Y.push(X)}if(!z)return;rY({savedRepos:Y})}function F9(f){let J=f.repoConfigs;if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function O9(f){if(!f||typeof f!=="object")return{};let J=f;return{initScript:typeof J.initScript==="string"&&J.initScript.length>0?J.initScript:void 0,initPrompt:typeof J.initPrompt==="string"&&J.initPrompt.length>0?J.initPrompt:void 0}}function tQ(f){return O9(F9(nf())[PJ(f)])}function MM(f,J){let Y=PJ(f),z={};return Ez((G)=>{let X={...F9(G)},q=O9(X[Y]),Q=J.initScript===void 0?q.initScript:J.initScript||void 0,H=J.initPrompt===void 0?q.initPrompt:J.initPrompt||void 0;if(z={...Q?{initScript:Q}:{},...H?{initPrompt:H}:{}},!z.initScript&&!z.initPrompt){let{[Y]:B,...V}=X;G.repoConfigs=V}else X[Y]=z,G.repoConfigs=X;return}),z}function FM(f){let J={removed:!1,path:f,total:0};return Ez((Y)=>{let z=zZ(Y);if(!z.includes(f))return J={removed:!1,path:f,total:z.length},!1;Y.savedRepos=z.filter((G)=>G!==f),J={removed:!0,path:f,total:z.length-1};return}),J}function D1(f){return f.startsWith("ssh://")}function eQ(){return nf()["experimental.remoteProjects"]===!0}function A9(f,J,Y){return Y?`ssh://${J}@${f}:${Y}`:`ssh://${J}@${f}`}function fH(f){let J=f.remoteRepos;if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function mJ(f){return fH(nf())[f]??null}function JH(){return fH(nf())}function YH(f){let J=A9(f.host,f.user,f.port),Y=!1;return Ez((z)=>{let G={...fH(z)};G[J]=f,z.remoteRepos=G;let X=zZ(z);if(Y=!X.includes(J),Y)z.savedRepos=[...X,J];return}),{key:J,added:Y}}var gf=k(()=>{lf();pY()});var C9={};jf(C9,{runAddRemote:()=>gM,parseRemoteFlags:()=>R9});import{createInterface as OM}from"readline";function R9(f){let J={};for(let Y=0;Y<f.length;Y++){let z=f[Y];switch(z){case"--host":J.host=f[++Y];break;case"--user":J.user=f[++Y];break;case"--path":J.path=f[++Y];break;case"--port":{let G=Number(f[++Y]);if(!Number.isInteger(G)||G<=0)t1(`invalid --port "${f[Y]}"`);J.port=G;break}case"--key":{let G=f[Y+1];if(G&&!G.startsWith("-"))J.key={present:!0,path:G},Y++;else J.key={present:!0};break}case"--password":J.password=!0;break;case"--help":case"-h":process.stdout.write(g9),process.exit(0);break;default:t1(`unknown flag "${z}"`)}}return J}function t1(f){process.stderr.write(`kobe add --remote: ${f}
3
+ var iL=Object.defineProperty;var lL=(f)=>f;function aL(f,J){this[f]=lL.bind(null,J)}var jf=(f,J)=>{for(var Y in J)iL(f,Y,{get:J[Y],enumerable:!0,configurable:!0,set:aL.bind(J,Y)})};var k=(f,J)=>()=>(f&&(J=f(f=0)),J);var _X=import.meta.require;import{basename as $L}from"path";function rL(f){let J="";for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="*")if(f[Y+1]==="*")J+=".*",Y++;else J+="[^/]*";else if(z==="?")J+="[^/]";else if(z&&"\\^$.|+()[]{}".includes(z))J+=`\\${z}`;else J+=z}return new RegExp(`^${J}$`)}function oX(f,J){let Y;try{Y=rL(f)}catch{return!1}return Y.test(J)||Y.test($L(J))}var nQ=()=>{};var X9={};jf(X9,{prevVendorWithin:()=>dQ,nextVendorWithin:()=>qY,nextVendor:()=>pL,isBuiltinVendor:()=>H1,coerceVendorId:()=>iY,BUILTIN_VENDORS:()=>dY,ALL_VENDORS:()=>cf});function H1(f){return f==="claude"||f==="codex"||f==="copilot"}function pL(f){let J=cf.indexOf(f);return cf[(J+1)%cf.length]??cf[0]}function qY(f,J){if(f.length===0)return J;let Y=f.indexOf(J);return f[(Y+1)%f.length]??f[0]??J}function dQ(f,J){if(f.length===0)return J;let Y=f.indexOf(J);if(Y<0)return f[f.length-1]??J;return f[(Y-1+f.length)%f.length]??J}function iY(f){let J=f?.trim();return J&&J.length>0?J:"claude"}var dY,cf;var U1=k(()=>{dY=["claude","codex","copilot"],cf=[...dY]});var sX;var Z9=k(()=>{sX={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.41",description:"TUI orchestrator for Claude Code (codename)",type:"module",packageManager:"bun@1.3.13",bin:{kobe:"dist/cli/index.js"},files:["dist/cli","dist/web-ui","dist/*.wav","README.md","LICENSE"],publishConfig:{access:"public"},repository:{type:"git",url:"git+https://github.com/Sma1lboy/kobe.git"},homepage:"https://github.com/Sma1lboy/kobe#readme",bugs:{url:"https://github.com/Sma1lboy/kobe/issues"},engines:{bun:">=1.3.11"},scripts:{dev:"env KOBE_DEV=1 bun --preload @opentui/solid/preload --conditions=browser ./src/cli/index.ts","dev:sandbox":"mkdir -p .dev-sandbox/home && env KOBE_DEV=1 KOBE_HOME_DIR=$PWD/.dev-sandbox/home KOBE_TMUX_SOCKET=kobe-sandbox bun --preload @opentui/solid/preload --conditions=browser ./src/cli/index.ts","dev:sandbox:reset":"env KOBE_TMUX_SOCKET=kobe-sandbox bun ./src/cli/index.ts kill-sessions","dev:version":"bash ../../scripts/dev-version.sh",build:"bun run scripts/build.ts","build:with-web":"bun run build",compile:"bun run scripts/compile.ts",typecheck:"tsc --noEmit","check-i18n":"bun run scripts/check-i18n.ts",test:"bun run test:fast && bun run test:socket","test:fast":"vitest run --passWithNoTests","test:socket":"KOBE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=1 --passWithNoTests","test:behavior":"KOBE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --passWithNoTests",bench:"vitest bench --run",lint:"biome check .",knip:"knip-bun",postinstall:"bun run scripts/check-preview-deps.ts || true",prepublishOnly:"bun run typecheck && bun run build"},"//":"biome.json + bunfig.toml live at the monorepo root since they apply repo-wide; bun.lock also lives at root (workspace-shared).",dependencies:{"@ansi-tools/parser":"^1.0.15","@opentui/core":"0.2.4","@opentui/solid":"0.2.4",ws:"^8.18.0","solid-js":"1.9.13"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.11","@tsconfig/bun":"1.0.10","@types/bun":"1.3.14","@types/node":"25.6.2",knip:"^6.14.2","kobe-web":"workspace:*","node-pty":"^1.1.0",typescript:"5.8.2",vitest:"2.1.9"},trustedDependencies:[]}});import{createHash as q9}from"crypto";import{homedir as oL}from"os";import{join as lY}from"path";function Q9(){return process.env.KOBE_DEV==="1"}function OJ(){return process.env.KOBE_HOME_DIR??oL()}function ef(){return lY(OJ(),".kobe")}function c1(){return lY(OJ(),".config","kobe","state.json")}function sL(){return lY(ef(),"settings")}function H9(){return lY(sL(),"keybindings.yaml")}function iQ(){return lY(ef(),"issue-assets")}function tX(f,J,Y){let z=q9("sha1").update(`${J}@${f}:${Y??22}`).digest("hex").slice(0,16);return lY(ef(),"ssh",`${z}.sock`)}function B9(f){let J=q9("sha1").update(f).digest("hex").slice(0,16);return lY(ef(),"worktree-init",J)}var lf=()=>{};var W9={};jf(W9,{repoSlug:()=>aY,releasePageUrl:()=>pQ,recommendedGlobalInstallCommand:()=>$Q,isNewerSemver:()=>lQ,fetchReleaseSummaries:()=>fM,fetchReleaseNotesRange:()=>rQ,fetchReleaseNotes:()=>eL,compareSemver:()=>eX,checkLatestVersion:()=>wG,UPDATE_SCRIPT_URL:()=>fZ,UPDATE_COMMAND:()=>hJ,PACKAGE_NAME:()=>aQ,CURRENT_VERSION:()=>s0});function aY(){let f=sX.repository?.url;if(!f)return null;let J=f.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!J||!J[1]||!J[2])return null;return`${J[1]}/${J[2]}`}function $Q(){return`npm install -g ${aQ}@latest`}async function tL(f){let J=new AbortController,Y=setTimeout(()=>J.abort(),JZ);try{let z=f.replace("/","%2F"),G=await fetch(`https://registry.npmjs.org/${z}/latest`,{signal:J.signal,headers:{accept:"application/json"}});if(!G.ok)return null;let X=await G.json();if(typeof X.version!=="string")return null;return X.version}catch{return null}finally{clearTimeout(Y)}}function lQ(f,J){return eX(f,J)>0}function eX(f,J){let Y=(X)=>X.split("-")[0]??X,z=Y(f).split(".").map((X)=>Number.parseInt(X,10)),G=Y(J).split(".").map((X)=>Number.parseInt(X,10));for(let X=0;X<3;X++){let q=z[X]??0,Q=G[X]??0;if(Number.isNaN(q)||Number.isNaN(Q))return 0;if(q>Q)return 1;if(q<Q)return-1}return 0}async function wG(f={}){let J=process.env.KOBE_FAKE_UPDATE;if(J)return{current:s0,latest:J,hasUpdate:lQ(J,s0)};if(Q9()&&!f.force)return null;let Y=await tL(aQ);if(!Y)return null;return{current:s0,latest:Y,hasUpdate:lQ(Y,s0)}}function j9(f){if(typeof f!=="string")return null;return f.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function eL(f){let J=aY();if(!J)return null;let Y=`v${f}`,z=new AbortController,G=setTimeout(()=>z.abort(),JZ);try{let X=await fetch(`https://api.github.com/repos/${J}/releases/tags/${Y}`,{signal:z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!X.ok)return null;let q=await X.json();if(typeof q.body!=="string"||typeof q.html_url!=="string")return null;return{body:q.body,url:q.html_url,version:f}}catch{return null}finally{clearTimeout(G)}}async function rQ(f){let J=aY();if(!J)return[];let Y=f.limit??100,z=new AbortController,G=setTimeout(()=>z.abort(),JZ);try{let X=await fetch(`https://api.github.com/repos/${J}/releases?per_page=${Y}`,{signal:z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!X.ok)return[];let q=await X.json();if(!Array.isArray(q))return[];return q.map((Q)=>{let H=j9(Q.tag_name);if(!H||typeof Q.html_url!=="string"||typeof Q.body!=="string")return null;if(eX(H,f.current)<=0)return null;if(eX(H,f.latest)>0)return null;return{version:H,url:Q.html_url,body:Q.body}}).filter((Q)=>Q!==null)}catch{return[]}finally{clearTimeout(G)}}async function fM(f=12){let J=aY();if(!J)return[];let Y=new AbortController,z=setTimeout(()=>Y.abort(),JZ);try{let G=await fetch(`https://api.github.com/repos/${J}/releases?per_page=${f}`,{signal:Y.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return[];let X=await G.json();if(!Array.isArray(X))return[];return X.map((q)=>{let Q=j9(q.tag_name);if(!Q||typeof q.html_url!=="string")return null;return{version:Q,url:q.html_url}}).filter((q)=>q!==null)}catch{return[]}finally{clearTimeout(z)}}function pQ(f){let J=aY();if(!J)return null;return`https://github.com/${J}/releases/tag/v${f}`}var s0,aQ,fZ="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",hJ,JZ=3000;var D1=k(()=>{Z9();lf();s0=sX.version,aQ=sX.name;hJ=`curl -fsSL ${fZ} | sh`});import{spawn as JM,spawnSync as YM}from"child_process";import{existsSync as K9}from"fs";import{mkdir as zM,readFile as GM,readdir as XM}from"fs/promises";function $Y(f){return`'${f.replace(/'/g,"'\\''")}'`}function ZM(f){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(f)?f:$Y(f)}function D9(f){return f.map($Y).join(" ")}function qM(f,J){let Y=D9(f);return J?`cd ${$Y(J)} && ${Y}`:Y}function QM(f){if(!f)return"";let J=Object.entries(f).filter(([Y])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(Y));if(J.length===0)return"";return`${J.map(([Y,z])=>`${Y}=${$Y(z)}`).join(" ")} `}function hG(f,J={}){let Y=["ssh"];if(J.tty)Y.push("-tt");if(J.batch)Y.push("-o","BatchMode=yes");if(Y.push("-o","ControlMaster=auto","-o",`ControlPath=${f.controlPath}`,"-o","ControlPersist=300"),Y.push("-o","StrictHostKeyChecking=accept-new"),f.port)Y.push("-p",String(f.port));if(f.auth.kind==="key"&&f.auth.keyPath)Y.push("-i",f.auth.keyPath);return Y.push(`${f.user}@${f.host}`),Y}function L9(f,J={}){return new Promise((Y)=>{let[z,...G]=f,X="",q="",Q=!1,H=(V)=>{if(Q)return;Q=!0,Y({stdout:X,stderr:q,exitCode:V})},B;try{B=JM(z??"",G,{cwd:J.cwd,env:J.env,shell:!1,signal:J.signal})}catch{H(-1);return}B.stdout?.setEncoding("utf8"),B.stdout?.on("data",(V)=>{X+=V}),B.stderr?.setEncoding("utf8"),B.stderr?.on("data",(V)=>{q+=V}),B.on("error",()=>H(-1)),B.on("close",(V)=>H(V??-1))})}class YZ{isRemote=!1;run(f,J={}){return L9(f,{cwd:J.cwd,env:J.env?{...process.env,...J.env}:process.env,signal:J.signal})}async exists(f){return K9(f)}existsSync(f){return K9(f)}async mkdirp(f){await zM(f,{recursive:!0})}async readFile(f){try{return await GM(f,"utf8")}catch{return null}}async readdir(f){try{return await XM(f)}catch{return[]}}wrapCommand(f){return f}ensureReady(){}}class uz{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(f,J=U9,Y){this.spec=f;this.spawn=J;this.spawnAsync=Y??(this.spawn===U9?HM:async(z,G)=>this.spawn(z,G))}ensureReady(){if(this.masterUp)return;if(this.spawn([...hG(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let J=[...hG(this.spec,{batch:this.spec.auth.kind!=="password"}),"-fN"];if(this.spec.auth.kind==="password"){let Y=this.spec.auth.getPassword();if(Y!=null){this.spawn(["sshpass","-e",...J],{SSHPASS:Y}),this.masterUp=!0;return}}this.spawn(J),this.masterUp=!0}async run(f,J={}){this.ensureReady();let Y=`${QM(J.env)}${D9(f)}`,z=J.cwd?`cd ${$Y(J.cwd)} && ${Y}`:Y;return this.spawnAsync([...hG(this.spec,{batch:!0}),z],void 0,{signal:J.signal})}async exists(f){return(await this.run(["test","-e",f])).exitCode===0}existsSync(f){return this.ensureReady(),this.spawn([...hG(this.spec,{batch:!0}),qM(["test","-e",f])]).exitCode===0}async mkdirp(f){await this.run(["mkdir","-p",f])}async readFile(f){let J=await this.run(["cat",f]);return J.exitCode===0?J.stdout:null}async readdir(f){let J=await this.run(["ls","-1A",f]);if(J.exitCode!==0)return[];return J.stdout.split(`
4
+ `).filter((Y)=>Y.length>0)}wrapCommand(f,J={}){let Y=J.cwd?`cd ${$Y(J.cwd)} && ${f}`:f;return`${hG(this.spec,{tty:J.tty}).map(ZM).join(" ")} ${$Y(Y)}`}}var U9=(f,J)=>{let[Y,...z]=f,G=YM(Y??"",z,{env:J?{...process.env,...J}:process.env,encoding:"utf8",shell:!1});return{stdout:G.stdout??"",stderr:G.stderr??"",exitCode:G.status??-1}},HM=(f,J,Y)=>L9(f,{env:J?{...process.env,...J}:process.env,signal:Y?.signal});var _Q=()=>{};import{spawnSync as BM}from"child_process";import{platform as jM}from"os";function M9(f,J,Y){return{service:WM,account:Y?`${J}@${f}:${Y}`:`${J}@${f}`}}function sQ(f=oQ){return f.platform()==="darwin"}function F9(f,J,Y=oQ){if(Y.platform()!=="darwin")return!1;let{exitCode:z}=Y.run(["security","add-generic-password","-U","-s",f.service,"-a",f.account,"-w",J]);return z===0}function zZ(f,J=oQ){if(J.platform()!=="darwin")return null;let{stdout:Y,exitCode:z}=J.run(["security","find-generic-password","-s",f.service,"-a",f.account,"-w"]);if(z!==0)return null;return Y.replace(/\n$/,"")}var oQ,WM="kobe-remote-ssh";var tQ=k(()=>{oQ={run(f){let[J,...Y]=f,z=BM(J??"",Y,{encoding:"utf8",shell:!1});return{stdout:z.stdout??"",exitCode:z.status??-1}},platform(){return jM()}}});import{mkdirSync as VM,readFileSync as KM,renameSync as UM,writeFileSync as DM}from"fs";import{dirname as LM}from"path";function nf(){try{let f=KM(c1(),"utf8"),J=JSON.parse(f);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return{}}function O9(f){let J=c1();VM(LM(J),{recursive:!0});let Y=`${J}.tmp`;DM(Y,JSON.stringify(f,null,2),"utf8"),UM(Y,J)}function Ez(f){let J=nf();if(f(J)!==!1)O9(J);return J}function rY(f){return Ez((J)=>{for(let[Y,z]of Object.entries(f))if(z===void 0)delete J[Y];else J[Y]=z;return})}function A9(f){O9(f)}var pY=k(()=>{lf()});var cJ={};jf(cJ,{statePath:()=>OM,setRepoInitOverride:()=>AM,setPersistedString:()=>af,resolveRepoRoot:()=>PJ,resolveMainRepoRoot:()=>FM,removeSavedRepo:()=>zH,remoteRepoKey:()=>k9,normalizeSavedRepos:()=>JH,isRemoteRepoKey:()=>f1,isRemoteProjectsEnabled:()=>GH,isGitRepo:()=>MM,getSavedRepos:()=>O1,getRepoInitOverride:()=>YH,getRemoteRepos:()=>XH,getRemoteRepoConfig:()=>mJ,getPersistedString:()=>kf,getCustomEngineIds:()=>fH,addSavedRepo:()=>vJ,addRemoteRepo:()=>ZH});import{spawnSync as eQ}from"child_process";import{realpathSync as g9}from"fs";function PJ(f){if(f1(f))return f;let J=eQ("git",["rev-parse","--show-toplevel"],{cwd:f,encoding:"utf8",shell:!1});if(J.status!==0)return f;let Y=(J.stdout??"").trim();if(!Y)return f;try{if(g9(f)===g9(Y))return f}catch{}return Y}function MM(f){if(f1(f))return!1;let J=eQ("git",["rev-parse","--is-inside-work-tree"],{cwd:f,encoding:"utf8",shell:!1});return J.status===0&&(J.stdout??"").trim()==="true"}function FM(f){if(f1(f))return f;let J=eQ("git",["worktree","list","--porcelain"],{cwd:f,encoding:"utf8",shell:!1});if(J.status!==0)return PJ(f);return(J.stdout??"").split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim()||PJ(f)}function OM(){return c1()}function GZ(f){let J=f.savedRepos;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string")}function O1(){return GZ(nf())}function kf(f){let J=nf()[f];return typeof J==="string"?J:void 0}function af(f,J){rY({[f]:J})}function fH(){let f=nf().customEngineIds;if(!Array.isArray(f))return[];return f.filter((J)=>typeof J==="string"&&J.trim().length>0)}function vJ(f){let J=PJ(f),Y={added:!1,path:J,total:0};return Ez((z)=>{let G=GZ(z);if(G.includes(J))return Y={added:!1,path:J,total:G.length},!1;z.savedRepos=[...G,J],Y={added:!0,path:J,total:G.length+1};return}),Y}function JH(){let f=O1(),J=new Set,Y=[],z=!1;for(let G of f){let X=PJ(G);if(X!==G)z=!0;if(J.has(X)){z=!0;continue}J.add(X),Y.push(X)}if(!z)return;rY({savedRepos:Y})}function R9(f){let J=f.repoConfigs;if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function C9(f){if(!f||typeof f!=="object")return{};let J=f;return{initScript:typeof J.initScript==="string"&&J.initScript.length>0?J.initScript:void 0,initPrompt:typeof J.initPrompt==="string"&&J.initPrompt.length>0?J.initPrompt:void 0}}function YH(f){return C9(R9(nf())[PJ(f)])}function AM(f,J){let Y=PJ(f),z={};return Ez((G)=>{let X={...R9(G)},q=C9(X[Y]),Q=J.initScript===void 0?q.initScript:J.initScript||void 0,H=J.initPrompt===void 0?q.initPrompt:J.initPrompt||void 0;if(z={...Q?{initScript:Q}:{},...H?{initPrompt:H}:{}},!z.initScript&&!z.initPrompt){let{[Y]:B,...V}=X;G.repoConfigs=V}else X[Y]=z,G.repoConfigs=X;return}),z}function zH(f){let J={removed:!1,path:f,total:0};return Ez((Y)=>{let z=GZ(Y);if(!z.includes(f))return J={removed:!1,path:f,total:z.length},!1;if(Y.savedRepos=z.filter((G)=>G!==f),f1(f)){let G=XZ(Y);if(f in G){let X={...G};delete X[f],Y.remoteRepos=X}}J={removed:!0,path:f,total:z.length-1};return}),J}function f1(f){return f.startsWith("ssh://")}function GH(){return nf()["experimental.remoteProjects"]===!0}function k9(f,J,Y){return Y?`ssh://${J}@${f}:${Y}`:`ssh://${J}@${f}`}function XZ(f){let J=f.remoteRepos;if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function mJ(f){return XZ(nf())[f]??null}function XH(){return XZ(nf())}function ZH(f){let J=k9(f.host,f.user,f.port),Y=!1;return Ez((z)=>{let G={...XZ(z)};G[J]=f,z.remoteRepos=G;let X=GZ(z);if(Y=!X.includes(J),Y)z.savedRepos=[...X,J];return}),{key:J,added:Y}}var Af=k(()=>{lf();pY()});var b9={};jf(b9,{runAddRemote:()=>CM,parseRemoteFlags:()=>y9});import{createInterface as gM}from"readline";function y9(f){let J={};for(let Y=0;Y<f.length;Y++){let z=f[Y];switch(z){case"--host":J.host=f[++Y];break;case"--user":J.user=f[++Y];break;case"--path":J.path=f[++Y];break;case"--port":{let G=Number(f[++Y]);if(!Number.isInteger(G)||G<=0)t1(`invalid --port "${f[Y]}"`);J.port=G;break}case"--key":{let G=f[Y+1];if(G&&!G.startsWith("-"))J.key={present:!0,path:G},Y++;else J.key={present:!0};break}case"--password":J.password=!0;break;case"--help":case"-h":process.stdout.write(N9),process.exit(0);break;default:t1(`unknown flag "${z}"`)}}return J}function t1(f){process.stderr.write(`kobe add --remote: ${f}
5
5
 
6
- ${g9}`),process.exit(2)}async function AM(f){let J=OM({input:process.stdin,output:process.stdout,terminal:!0}),Y=process.stdout,z=!1,G=Y._writeToOutput?.bind(Y);return Y._writeToOutput=(X)=>{if(!z||!G)process.stdout.write(X)},process.stdout.write(f),z=!0,new Promise((X)=>{J.question("",(q)=>{if(z=!1,G)Y._writeToOutput=G;process.stdout.write(`
7
- `),J.close(),X(q)})})}async function gM(f){if(!eQ())t1("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let J=R9(f);if(!J.host)t1("--host is required");if(!J.user)t1("--user is required");if(!J.path)t1("--path (remote base path) is required");if(J.key&&J.password)t1("choose ONE of --key or --password, not both");if(!J.key&&!J.password)t1("an auth method is required: --key [path] or --password");let Y;if(J.password){if(!pQ())t1("--password needs the macOS keychain (unsupported on this platform)");let X=V9(J.host,J.user,J.port),q=await AM(`Password for ${J.user}@${J.host}: `);if(q.length===0)t1("empty password");if(!K9(X,q))t1("failed to store the password in the keychain");Y={kind:"password",keychainRef:X}}else Y={kind:"key",keyPath:J.key?.path};let{key:z,added:G}=YH({host:J.host,user:J.user,port:J.port,basePath:J.path,auth:Y});console.log(G?`added remote project ${z} (base ${J.path})`:`updated remote project ${z} (base ${J.path})`),await RM(J,Y)}async function RM(f,J){if(J.kind==="password"&&!pQ())return;let Y=J.kind==="key"?{kind:"key",keyPath:J.keyPath}:{kind:"password",getPassword:()=>YZ(J.keychainRef)},z={host:f.host,user:f.user,port:f.port,auth:Y,controlPath:sX(f.host,f.user,f.port)};process.stdout.write("checking connection\u2026 ");try{if((await new uz(z).run(["test","-d",f.path])).exitCode===0)console.log("ok");else console.log(`reachable, but base path "${f.path}" is not a directory (you can create it later)`)}catch(G){console.log(`could not connect (${G instanceof Error?G.message:String(G)})`),console.log("the project is saved; fix the host/credentials and it will connect on first use.")}}var g9;var k9=k(()=>{lf();$Q();_Q();gf();g9=`Usage: kobe add --remote --host <host> --user <user> --path <basePath>
6
+ ${N9}`),process.exit(2)}async function RM(f){let J=gM({input:process.stdin,output:process.stdout,terminal:!0}),Y=process.stdout,z=!1,G=Y._writeToOutput?.bind(Y);return Y._writeToOutput=(X)=>{if(!z||!G)process.stdout.write(X)},process.stdout.write(f),z=!0,new Promise((X)=>{J.question("",(q)=>{if(z=!1,G)Y._writeToOutput=G;process.stdout.write(`
7
+ `),J.close(),X(q)})})}async function CM(f){if(!GH())t1("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let J=y9(f);if(!J.host)t1("--host is required");if(!J.user)t1("--user is required");if(!J.path)t1("--path (remote base path) is required");if(J.key&&J.password)t1("choose ONE of --key or --password, not both");if(!J.key&&!J.password)t1("an auth method is required: --key [path] or --password");let Y;if(J.password){if(!sQ())t1("--password needs the macOS keychain (unsupported on this platform)");let X=M9(J.host,J.user,J.port),q=await RM(`Password for ${J.user}@${J.host}: `);if(q.length===0)t1("empty password");if(!F9(X,q))t1("failed to store the password in the keychain");Y={kind:"password",keychainRef:X}}else Y={kind:"key",keyPath:J.key?.path};let{key:z,added:G}=ZH({host:J.host,user:J.user,port:J.port,basePath:J.path,auth:Y});console.log(G?`added remote project ${z} (base ${J.path})`:`updated remote project ${z} (base ${J.path})`),await kM(J,Y)}async function kM(f,J){if(J.kind==="password"&&!sQ())return;let Y=J.kind==="key"?{kind:"key",keyPath:J.keyPath}:{kind:"password",getPassword:()=>zZ(J.keychainRef)},z={host:f.host,user:f.user,port:f.port,auth:Y,controlPath:tX(f.host,f.user,f.port)};process.stdout.write("checking connection\u2026 ");try{if((await new uz(z).run(["test","-d",f.path])).exitCode===0)console.log("ok");else console.log(`reachable, but base path "${f.path}" is not a directory (you can create it later)`)}catch(G){console.log(`could not connect (${G instanceof Error?G.message:String(G)})`),console.log("the project is saved; fix the host/credentials and it will connect on first use.")}}var N9;var S9=k(()=>{lf();_Q();tQ();Af();N9=`Usage: kobe add --remote --host <host> --user <user> --path <basePath>
8
8
  [--port N] [--key [path] | --password]
9
9
 
10
10
  Register an SSH-backed project. Worktrees + the engine run on <host> under
11
11
  <basePath>. Choose ONE auth: --key [path] (ssh-agent when path omitted) or
12
12
  `+`--password (prompted, stored in the OS keychain \u2014 never in state.json).
13
- `});function N9(f){return typeof f==="string"&&CM.includes(f)}var PG=(f)=>f,Sf="claude",CM;var S1=k(()=>{CM=["backlog","in_progress","in_review","done","canceled","error"]});function kM(f,J){let Y="",z=f;for(let G=J-1;G>=0;G--){let X=z%32;Y="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[X]+Y,z=(z-X)/32}return Y}function S9(f){let J=new Uint8Array(f);crypto.getRandomValues(J);let Y=Array(f);for(let z=0;z<f;z++)Y[z]=(J[z]??0)&31;return Y}function NM(f){for(let J=f.length-1;J>=0;J--){let Y=f[J]??0;if(Y<31)return f[J]=Y+1,!0;f[J]=0}return!1}function yM(f){let J="";for(let Y of f)J+="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Y]??"0";return J}function I9(f=Date.now()){let J;if(f===y9){let Y=b9.slice();if(!NM(Y))J=S9(16);else J=Y}else J=S9(16);return y9=f,b9=J,kM(f,10)+yM(J)}var y9=-1,b9;var T9=k(()=>{b9=Array(16).fill(0)});var zH={};jf(zH,{TaskIndexStore:()=>xz});import{mkdir as bM,open as SM,readFile as IM,rename as TM,unlink as u9}from"fs/promises";import{homedir as uM}from"os";import{dirname as EM,join as E9}from"path";class xz{homeDir;kobeDir;path;tmpPath;cache={version:QY,tasks:[]};loaded=!1;listeners=new Set;saveChain=Promise.resolve();constructor(f={}){this.homeDir=f.homeDir??uM(),this.kobeDir=E9(this.homeDir,".kobe"),this.path=E9(this.kobeDir,"tasks.json"),this.tmpPath=`${this.path}.tmp`}subscribe(f){if(this.listeners.add(f),this.loaded)try{f(this.cache.tasks.slice())}catch(J){console.error("[kobe TaskIndexStore] listener threw on subscribe:",J)}return()=>{this.listeners.delete(f)}}get filePath(){return this.path}get stateDir(){return this.kobeDir}async load(){let f;try{f=await IM(this.path,"utf8")}catch(Y){if(Y.code==="ENOENT")return this.cache={version:QY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot();throw Y}let J;try{J=JSON.parse(f)}catch(Y){return console.warn(`[kobe] tasks.json at ${this.path} is corrupted (${Y.message}); recovering with empty index. The stale file is left in place.`),this.cache={version:QY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot()}return this.cache=xM(J,this.path),this.loaded=!0,this.notifyListeners(),this.snapshot()}async save(){this.assertLoaded();let f=this.saveChain.then(()=>this.doSave());return this.saveChain=f.catch(()=>{}),f}async doSave(){await bM(EM(this.path),{recursive:!0});let f=this.snapshot(),J=`${JSON.stringify(f,null,2)}
14
- `,Y=await SM(this.tmpPath,"w",420);try{await Y.writeFile(J,"utf8"),await Y.sync()}finally{await Y.close()}await TM(this.tmpPath,this.path)}get(f){return this.assertLoaded(),this.cache.tasks.find((J)=>J.id===f)}list(){return this.assertLoaded(),this.cache.tasks.slice()}async create(f){this.assertLoaded();let J=new Date().toISOString(),Y={archived:!1,vendor:f.vendor??Sf,...f,id:PG(I9()),createdAt:J,updatedAt:J};return this.cache.tasks.push(Y),await this.save(),this.notifyListeners(),Y}async update(f,J){this.assertLoaded();let Y=this.cache.tasks.findIndex((H)=>H.id===f);if(Y<0)throw Error(`task not found: ${f}`);let z=this.cache.tasks[Y];if(!z)throw Error(`task not found: ${f}`);let{id:G,createdAt:X,...q}=J,Q={...z,...q,id:z.id,createdAt:z.createdAt,updatedAt:new Date().toISOString()};return this.cache.tasks[Y]=Q,await this.save(),this.notifyListeners(),Q}async move(f,J,Y){this.assertLoaded();let z=this.cache.tasks.find((L)=>L.id===f);if(!z)throw Error(`task not found: ${f}`);let G=Y?.length?Y:this.cache.tasks.map((L)=>L.id),X=G.indexOf(String(f));if(X<0)throw Error(`task not movable in current group: ${f}`);let q=G[X+J];if(!q)return z;let Q=this.cache.tasks.findIndex((L)=>L.id===f),H=this.cache.tasks.findIndex((L)=>L.id===q);if(Q<0||H<0||Q===H)return z;let[B]=this.cache.tasks.splice(Q,1);if(!B)return z;let V=Q<H?H-1:H,j=J>0?V+1:V,U={...B,updatedAt:new Date().toISOString()};return this.cache.tasks.splice(j,0,U),await this.save(),this.notifyListeners(),U}async reorder(f){this.assertLoaded();let J=f.map((G)=>{let X=this.cache.tasks.findIndex((Q)=>Q.id===G.id);if(!(X>=0?this.cache.tasks[X]:void 0))throw Error(`task not found: ${G.id}`);return{idx:X,position:G.position}}),Y=!1,z=new Map;for(let{idx:G,position:X}of J){let q=this.cache.tasks[G];if(!q||q.position===X)continue;if(!z.has(G))z.set(G,q);this.cache.tasks[G]={...q,position:X},Y=!0}if(!Y)return;try{await this.save()}catch(G){for(let[X,q]of z)this.cache.tasks[X]=q;throw G}this.notifyListeners()}async archive(f,J="done"){return this.update(f,{status:J})}async remove(f){this.assertLoaded();let J=this.cache.tasks.findIndex((Y)=>Y.id===f);if(J<0)return;this.cache.tasks.splice(J,1),await this.save(),this.notifyListeners()}async _unlinkForTests(){try{await u9(this.path)}catch(f){if(f.code!=="ENOENT")throw f}try{await u9(this.tmpPath)}catch(f){if(f.code!=="ENOENT")throw f}this.cache={version:QY,tasks:[]},this.loaded=!1}assertLoaded(){if(!this.loaded)throw Error("TaskIndexStore: call load() before any other method")}snapshot(){return{version:QY,tasks:this.cache.tasks.slice()}}notifyListeners(){if(this.listeners.size===0)return;let f=this.cache.tasks.slice();for(let J of this.listeners)try{J(f)}catch(Y){console.error("[kobe TaskIndexStore] listener threw on notify:",Y)}}}function xM(f,J){if(!f||typeof f!=="object"||Array.isArray(f))return console.warn(`[kobe] tasks.json at ${J} is not an object; recovering with empty index.`),{version:QY,tasks:[]};let Y=f,z=Y.version;if(z!==void 0&&z!==1&&z!==2&&z!==3)return console.warn(`[kobe] tasks.json at ${J} has unsupported version=${String(z)}; recovering with empty index.`),{version:QY,tasks:[]};let G=Array.isArray(Y.tasks)?Y.tasks:[],X=[];for(let q of G){let Q=wM(q);if(Q)X.push(Q);else console.warn(`[kobe] dropping malformed task entry from ${J}: ${JSON.stringify(q)}`)}return{version:QY,tasks:X}}function wM(f){if(!f||typeof f!=="object")return null;let J=f;if(typeof J.id!=="string"||typeof J.title!=="string"||typeof J.repo!=="string"||typeof J.branch!=="string"||typeof J.worktreePath!=="string"||typeof J.status!=="string"||typeof J.createdAt!=="string"||typeof J.updatedAt!=="string")return null;if(!cM(J.status))return null;let Y=typeof J.archived==="boolean"?J.archived:!1,z=J.kind==="main"?"main":"task",G=z==="main"?J.status==="in_progress"||J.status==="done"?"backlog":J.status:J.status==="done"&&!Y?"in_progress":J.status;return{id:PG(J.id),title:J.title,repo:J.repo,branch:J.branch,worktreePath:J.worktreePath,status:G,archived:Y,pinned:typeof J.pinned==="boolean"?J.pinned:!1,kind:z,vendor:iY(typeof J.vendor==="string"?J.vendor:void 0),prStatus:hM(J.prStatus),...typeof J.position==="number"&&Number.isFinite(J.position)?{position:J.position}:{},...typeof J.modelEffort==="string"&&J.modelEffort.length>0?{modelEffort:J.modelEffort}:{},createdAt:J.createdAt,updatedAt:J.updatedAt}}function hM(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let J=f;if(!PM(J.provider)||!vM(J.lifecycle)||!mM(J.checkState))return;return{provider:J.provider,lifecycle:J.lifecycle,checkState:J.checkState,...typeof J.number==="number"&&Number.isFinite(J.number)?{number:J.number}:{},...typeof J.url==="string"?{url:J.url}:{},...typeof J.title==="string"?{title:J.title}:{},...typeof J.baseRef==="string"?{baseRef:J.baseRef}:{},...typeof J.headRef==="string"?{headRef:J.headRef}:{},...typeof J.reviewDecision==="string"?{reviewDecision:J.reviewDecision}:{},...typeof J.mergeable==="string"?{mergeable:J.mergeable}:{},...typeof J.lastCheckedAt==="string"?{lastCheckedAt:J.lastCheckedAt}:{},...typeof J.lastError==="string"?{lastError:J.lastError}:{}}}function PM(f){return f==="github"||f==="gitlab"||f==="bitbucket"||f==="unknown"}function vM(f){return f==="creating"||f==="open"||f==="ready_to_merge"||f==="merged"||f==="closed"||f==="unknown"}function mM(f){return f==="none"||f==="pending"||f==="passing"||f==="failing"||f==="unknown"}function cM(f){return f==="backlog"||f==="in_progress"||f==="in_review"||f==="done"||f==="canceled"||f==="error"}var QY=3;var vG=k(()=>{S1();K1();T9()});function x9(f){let J=f.auth,Y=J.kind==="key"?{kind:"key",keyPath:J.keyPath}:{kind:"password",getPassword:()=>YZ(J.keychainRef)};return{host:f.host,user:f.user,port:f.port,auth:Y,controlPath:sX(f.host,f.user,f.port)}}function wz(f){let J=mJ(f);if(!J)return new JZ;return new uz(x9(J))}function cJ(f){for(let J of Object.values(JH()))if(f===J.basePath||f.startsWith(`${J.basePath}/`))return new uz(x9(J));return new JZ}function w9(f){return f&&D1(f)?f:void 0}function GZ(f){let J=cJ(f);return J.isRemote||J.existsSync(f)}function If(f){return cJ(f).isRemote?OJ():f}var e1=k(()=>{lf();gf();$Q();_Q()});var XZ;var h9=k(()=>{XZ=class XZ extends Error{args;cwd;exitCode;stdout;stderr;constructor(f,J,Y){super(`git ${f.join(" ")} (cwd=${J}) exited with code ${Y.exitCode}: ${Y.stderr.trim()||Y.stdout.trim()}`);this.name="GitCommandError",this.args=f,this.cwd=J,this.exitCode=Y.exitCode,this.stdout=Y.stdout,this.stderr=Y.stderr}}});import{createHash as nM}from"crypto";import v9 from"fs";import I1 from"path";function m9(f){if(!I1.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return I1.join(ef(),dM,rM(f))}function c9(f){if(!I1.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[m9(f),...aM.map((J)=>I1.join(f,J))]}function n9(f,J){if(!J||/[/\\\0]/.test(J))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(J)}`);return I1.join(m9(f),J)}async function d9(f){if(D1(f)){let Y=mJ(f)?.basePath;if(!Y)return[];return wz(f).readdir(l9(Y))}let J=new Set;for(let Y of c9(f))try{for(let z of v9.readdirSync(Y,{withFileTypes:!0}))if(z.isDirectory())J.add(z.name)}catch{}return[...J]}function GH(f,J){if(!I1.isAbsolute(f)||!I1.isAbsolute(J))return null;let Y=P9(J);for(let z of c9(f)){let G=P9(z),X=I1.relative(G,Y);if(X!==""&&!X.startsWith("..")&&!I1.isAbsolute(X))return z}return null}function i9(f,J){return GH(f,J)!==null}function l9(f){return`${$M(f)}/.kobe/worktrees`}function a9(f,J){if(!J||/[/\\\0]/.test(J))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(J)}`);return`${l9(f)}/${J}`}function $M(f){return f.length>1&&f.endsWith("/")?f.replace(/\/+$/,""):f}function P9(f){try{return v9.realpathSync(f)}catch{return I1.resolve(f)}}function rM(f){let Y=(I1.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=nM("sha1").update(I1.resolve(f)).digest("hex").slice(0,12);return`${Y}-${z}`}var dM="worktrees",iM=".kobe/worktrees",lM=".claude/worktrees",aM;var XH=k(()=>{lf();e1();gf();aM=[iM,lM]});var p9={};jf(p9,{GitWorktreeManager:()=>ZZ});import r9 from"fs";import fJ from"path";class ZZ{execDeps;constructor(f=pM){this.execDeps=f}ctxFor(f){let J=this.execDeps.remoteBasePath(f);return J?{exec:this.execDeps.execForRepo(f),dir:J,remote:!0}:{exec:this.execDeps.execForRepo(f),dir:f,remote:!1}}async runGit(f,J,Y){if(!Y.cwd)throw Error("runGit(): cwd is required; refusing to inherit from process.cwd()");let z=await f.run(["git",...J],{cwd:Y.cwd,env:Y.env}),G={stdout:z.stdout,stderr:z.stderr,exitCode:z.exitCode};if(G.exitCode!==0&&!Y.allowFail)throw new XZ(J,Y.cwd,G);return G}async create(f,J,Y,z){let G=this.ctxFor(f);if(HY("repo",G.dir),HY("path",Y),!J)throw Error("create(): branch must be a non-empty string");if(await G.exec.exists(Y)){let H=await this.tryDescribe(G,Y);if(H){if(H.branch!==J)throw Error(`worktree at ${Y} is on branch '${H.branch}', refusing to hijack to '${J}'`);return H}throw Error(`create(): ${Y} exists but is not a registered git worktree`)}await G.exec.mkdirp(fJ.dirname(Y));let q=await this.branchExists(G,J)?["worktree","add",Y,J]:z?["worktree","add","-b",J,Y,z]:["worktree","add","-b",J,Y];await this.runGit(G.exec,q,{cwd:G.dir});let Q=await this.tryDescribe(G,Y);if(!Q)throw Error(`create(): git reported success but ${Y} is not a worktree`);if(Q.branch!==J)throw Error(`create(): post-condition failed \u2014 expected branch '${J}' at ${Y}, got '${Q.branch}'`);return Q}async createForTask(f){let J=this.execDeps.remoteBasePath(f.repo),Y=J?a9(J,f.slug):n9(f.repo,f.slug);return this.create(f.repo,f.branch,Y,f.baseRef)}async remove(f,J){HY("path",f);let Y=this.execDeps.execForPath(f),z=J?.force===!0;if(!await Y.exists(f)){let q=await this.findRepoFor(Y,f);if(q)await this.runGit(Y,["worktree","prune"],{cwd:q,allowFail:!0});return}let G=await this.findRepoFor(Y,f);if(!G)throw Error(`remove(): ${f} is not a git worktree`);if(!z){if(await this.isDirty(f))throw Error(`remove(): refusing to remove dirty worktree at ${f} (pass { force: true } to override)`)}let X=z?["worktree","remove","--force",f]:["worktree","remove",f];await this.runGit(Y,X,{cwd:G}),await this.runGit(Y,["worktree","prune"],{cwd:G,allowFail:!0})}async list(f){let J=this.ctxFor(f);HY("repo",J.dir);let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),z=ZH(Y.stdout),G=[];for(let X of z){if(!X.path)continue;let q=J.remote?$9(J.dir,X.path):GH(f,X.path);if(!q)continue;if(!X.branch||X.detached)continue;let Q=mG(q),H=mG(X.path),B=fJ.relative(Q,H),V=fJ.join(q,B),j=await this.isDirty(X.path);G.push({path:V,branch:X.branch,head:X.head??"",dirty:j})}return G}async listAll(f){let J=this.ctxFor(f);HY("repo",J.dir);let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),z=ZH(Y.stdout),G=J.remote?J.dir:mG(J.dir),X=[];for(let q of z){if(!q.path)continue;if(q.bare)continue;if(!q.branch||q.detached)continue;if((J.remote?q.path:mG(q.path))===G)continue;let Q=await this.isDirty(q.path);X.push({path:q.path,branch:q.branch,head:q.head??"",dirty:Q,kobeManaged:J.remote?$9(J.dir,q.path)!==null:i9(f,q.path),lastActivityMs:await this.lastActivityMs(J.exec,q.path)})}return X.sort((q,Q)=>Q.lastActivityMs-q.lastActivityMs),X}async lastActivityMs(f,J){try{let Y=await this.runGit(f,["log","-1","--format=%ct"],{cwd:J}),z=Number.parseInt(Y.stdout.trim(),10);if(Number.isFinite(z)&&z>0)return z*1000}catch{}if(!f.isRemote)try{return r9.statSync(J).mtimeMs}catch{}return 0}async isDirty(f){HY("path",f);let J=this.execDeps.execForPath(f);return(await this.runGit(J,["status","--porcelain"],{cwd:f})).stdout.length>0}async currentBranch(f){HY("path",f);let J=this.execDeps.execForPath(f),z=(await this.runGit(J,["rev-parse","--abbrev-ref","HEAD"],{cwd:f})).stdout.trim();if(!z||z==="HEAD")throw Error(`currentBranch(): ${f} is in detached-HEAD state`);return z}async renameBranch(f,J,Y){if(HY("path",f),J===Y)return;let z=this.execDeps.execForPath(f),G=await this.findRepoFor(z,f);if(!G)throw Error(`renameBranch(): ${f} is not a git worktree`);await this.runGit(z,["branch","-m",J,Y],{cwd:G})}async tryDescribe(f,J){let Y=await this.runGit(f.exec,["worktree","list","--porcelain"],{cwd:f.dir}),z=ZH(Y.stdout),G=(Q)=>f.remote?Q:mG(Q),X=G(J),q=z.find((Q)=>Q.path&&G(Q.path)===X);if(!q||!q.path||!q.branch||q.detached)return null;return{path:J,branch:q.branch,head:q.head??"",dirty:await this.isDirty(q.path)}}async branchExists(f,J){let Y=`refs/heads/${J}`;return(await this.runGit(f.exec,["show-ref","--verify","--quiet",Y],{cwd:f.dir,allowFail:!0})).exitCode===0}async findRepoFor(f,J){try{let Y=await this.runGit(f,["rev-parse","--git-common-dir"],{cwd:J,allowFail:!0});if(Y.exitCode!==0)return null;let z=Y.stdout.trim();if(!z)return null;let G=fJ.isAbsolute(z)?z:fJ.resolve(J,z);return fJ.basename(G)===".git"?fJ.dirname(G):G}catch(Y){if(Y instanceof XZ)return null;throw Y}}}function ZH(f){let J=[],Y=null;for(let z of f.split(`
15
- `)){let G=z.replace(/\r$/,"");if(G===""){if(Y)J.push(Y);Y=null;continue}if(!Y)Y={};if(G.startsWith("worktree "))Y.path=G.slice(9);else if(G.startsWith("HEAD "))Y.head=G.slice(5);else if(G.startsWith("branch ")){let X=G.slice(7);Y.branch=X.startsWith("refs/heads/")?X.slice(11):X}else if(G==="detached")Y.detached=!0;else if(G==="bare")Y.bare=!0}if(Y)J.push(Y);return J}function $9(f,J){let Y=`${f.replace(/\/+$/,"")}/.kobe/worktrees`;return J===Y||J.startsWith(`${Y}/`)?Y:null}function HY(f,J){if(!J||!fJ.isAbsolute(J))throw Error(`${f} must be an absolute path, got: ${JSON.stringify(J)}`)}function mG(f){try{return r9.realpathSync(f)}catch{return fJ.resolve(f)}}var pM;var qH=k(()=>{e1();gf();h9();XH();pM={execForRepo:wz,execForPath:cJ,remoteBasePath(f){return mJ(f)?.basePath??null}}});function _9(f){let J=String(f),Y=J.length-1;return hf.context.id+(Y?String.fromCharCode(96+Y):"")+J}function BH(f){hf.context=f}function _M(){return{...hf.context,id:hf.getNextContextId(),count:0}}function _Y(f,J){let Y=Kf,z=e0,G=f.length===0,X=J===void 0?z:J,q=G?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:X?X.context:null,owner:X},Q=G?()=>f(()=>{throw Error("Dispose method must be an explicit argument to createRoot function")}):()=>f(()=>$f(()=>BY(q)));YJ.afterCreateOwner&&YJ.afterCreateOwner(q),e0=q,Kf=null;try{return F1(Q,!0)}finally{Kf=Y,e0=z}}function r(f,J){J=J?Object.assign({},HZ,J):HZ;let Y={value:f,observers:null,observerSlots:null,comparator:J.equals||void 0};{if(J.name)Y.name=J.name;if(J.internal)Y.internal=!0;else if(GW(Y),YJ.afterCreateSignal)YJ.afterCreateSignal(Y)}let z=(G)=>{if(typeof G==="function")if(j0&&j0.running&&j0.sources.has(Y))G=G(Y.tValue);else G=G(Y.value);return WH(Y,G)};return[XW.bind(Y),z]}function s9(f,J,Y){let z=iG(f,J,!0,T1,Y);if(Pz&&j0&&j0.running)df.push(z);else oY(z)}function AJ(f,J,Y){let z=iG(f,J,!1,T1,Y);if(Pz&&j0&&j0.running)df.push(z);else oY(z)}function zf(f,J,Y){zW=qF;let z=iG(f,J,!1,T1,Y),G=nG&&u1(nG);if(G)z.suspense=G;if(!Y||!Y.render)z.user=!0;H1?H1.push(z):oY(z)}function U0(f,J,Y){Y=Y?Object.assign({},HZ,Y):HZ;let z=iG(f,J,!0,0,Y);if(z.observers=null,z.observerSlots=null,z.comparator=Y.equals||void 0,Pz&&j0&&j0.running)z.tState=T1,df.push(z);else oY(z);return XW.bind(z)}function JF(f){return f&&typeof f==="object"&&"then"in f}function VZ(f,J,Y){let z,G,X;if(typeof J==="function")z=f,G=J,X=Y||{};else z=!0,G=f,X=J||{};let q=null,Q=QH,H=null,B=!1,V=!1,j="initialValue"in X,U=typeof z==="function"&&U0(z),L=new Set,[O,M]=(X.storage||r)(X.initialValue),[R,S]=r(void 0),[a,N]=r(void 0,{equals:!1}),[g,C]=r(j?"ready":"unresolved");if(hf.context){if(H=hf.getNextContextId(),X.ssrLoadFrom==="initial")Q=X.initialValue;else if(hf.load&&hf.has(H))Q=hf.load(H)}function y(T,Q0,p,D0){if(q===T){if(q=null,D0!==void 0&&(j=!0),(T===Q||Q0===Q)&&X.onHydrated)queueMicrotask(()=>X.onHydrated(D0,{value:Q0}));if(Q=QH,j0&&T&&B)j0.promises.delete(T),B=!1,F1(()=>{j0.running=!0,_(Q0,p)},!1);else _(Q0,p)}return Q0}function _(T,Q0){F1(()=>{if(Q0===void 0)M(()=>T);C(Q0!==void 0?"errored":j?"ready":"unresolved"),S(Q0);for(let p of L.keys())p.decrement();L.clear()},!1)}function z0(){let T=nG&&u1(nG),Q0=O(),p=R();if(p!==void 0&&!q)throw p;if(Kf&&!Kf.user&&T)s9(()=>{if(a(),q){if(T.resolved&&j0&&B)j0.promises.add(q);else if(!L.has(T))T.increment(),L.add(T)}});return Q0}function t(T=!0){if(T!==!1&&V)return;V=!1;let Q0=U?U():z;if(B=j0&&j0.running,Q0==null||Q0===!1){y(q,$f(O));return}if(j0&&q)j0.promises.delete(q);let p,D0=Q!==QH?Q:$f(()=>{try{return G(Q0,{value:O(),refetching:T})}catch(g0){p=g0}});if(p!==void 0){y(q,void 0,QZ(p),Q0);return}else if(!JF(D0))return y(q,D0,void 0,Q0),D0;if(q=D0,"v"in D0){if(D0.s===1)y(q,D0.v,void 0,Q0);else y(q,void 0,QZ(D0.v),Q0);return D0}return V=!0,queueMicrotask(()=>V=!1),F1(()=>{C(j?"refreshing":"pending"),N()},!1),D0.then((g0)=>y(D0,g0,void 0,Q0),(g0)=>y(D0,void 0,QZ(g0),Q0))}Object.defineProperties(z0,{state:{get:()=>g()},error:{get:()=>R()},loading:{get(){let T=g();return T==="pending"||T==="refreshing"}},latest:{get(){if(!j)return z0();let T=R();if(T&&!q)throw T;return O()}}});let Y0=e0;if(U)s9(()=>(Y0=e0,t(!1)));else t(!1);return[z0,{refetch:(T)=>YF(Y0,()=>t(T)),mutate:M}]}function KZ(f){return F1(f,!1)}function $f(f){if(!hz&&Kf===null)return f();let J=Kf;Kf=null;try{if(hz)return hz.untrack(f);return f()}finally{Kf=J}}function O1(f,J,Y){let z=Array.isArray(f),G,X=Y&&Y.defer;return(q)=>{let Q;if(z){Q=Array(f.length);for(let B=0;B<f.length;B++)Q[B]=f[B]()}else Q=f();if(X)return X=!1,q;let H=$f(()=>J(Q,G,q));return G=Q,H}}function f1(f){zf(()=>$f(f))}function mf(f){if(e0===null)console.warn("cleanups created outside a `createRoot` or `render` will never be run");else if(e0.cleanups===null)e0.cleanups=[f];else e0.cleanups.push(f);return f}function UZ(){return Kf}function YF(f,J){let Y=e0,z=Kf;e0=f,Kf=null;try{return F1(J,!0)}catch(G){DZ(G)}finally{e0=Y,Kf=z}}function zF(f){if(j0&&j0.running)return f(),j0.done;let J=Kf,Y=e0;return Promise.resolve().then(()=>{Kf=J,e0=Y;let z;if(Pz||nG)z=j0||(j0={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),z.done||(z.done=new Promise((G)=>z.resolve=G)),z.running=!0;return F1(f,!1),Kf=e0=null,z?z.done:void 0})}function e9(f,J){let Y=iG(()=>$f(()=>{return Object.assign(f,{[eM]:!0}),f(J)}),void 0,!0,0);return Y.props=J,Y.observers=null,Y.observerSlots=null,Y.name=f.name,Y.component=f,oY(Y),Y.tValue!==void 0?Y.tValue:Y.value}function GW(f){if(e0){if(e0.sourceMap)e0.sourceMap.push(f);else e0.sourceMap=[f];f.graph=e0}if(YJ.afterRegisterGraph)YJ.afterRegisterGraph(f)}function gJ(f,J){let Y=Symbol("context");return{id:Y,Provider:QF(Y,J),defaultValue:f}}function u1(f){let J;return e0&&e0.context&&(J=e0.context[f.id])!==void 0?J:f.defaultValue}function GF(f){let J=U0(f),Y=U0(()=>jH(J()),void 0,{name:"children"});return Y.toArray=()=>{let z=Y();return Array.isArray(z)?z:z!=null?[z]:[]},Y}function XW(){let f=j0&&j0.running;if(this.sources&&(f?this.tState:this.state))if((f?this.tState:this.state)===T1)oY(this);else{let J=df;df=null,F1(()=>BZ(this),!1),df=J}if(Kf){let J=this.observers;if(!J||J[J.length-1]!==Kf){let Y=J?J.length:0;if(!Kf.sources)Kf.sources=[this],Kf.sourceSlots=[Y];else Kf.sources.push(this),Kf.sourceSlots.push(Y);if(!J)this.observers=[Kf],this.observerSlots=[Kf.sources.length-1];else J.push(Kf),this.observerSlots.push(Kf.sources.length-1)}}if(f&&j0.sources.has(this))return this.tValue;return this.value}function WH(f,J,Y){let z=j0&&j0.running&&j0.sources.has(f)?f.tValue:f.value;if(!f.comparator||!f.comparator(z,J)){if(j0){let G=j0.running;if(G||!Y&&j0.sources.has(f))j0.sources.add(f),f.tValue=J;if(!G)f.value=J}else f.value=J;if(f.observers&&f.observers.length)F1(()=>{for(let G=0;G<f.observers.length;G+=1){let X=f.observers[G],q=j0&&j0.running;if(q&&j0.disposed.has(X))continue;if(q?!X.tState:!X.state){if(X.pure)df.push(X);else H1.push(X);if(X.observers)qW(X)}if(!q)X.state=T1;else X.tState=T1}if(df.length>1e6){if(df=[],oM)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return J}function oY(f){if(!f.fn)return;BY(f);let J=WZ;if(fW(f,j0&&j0.running&&j0.sources.has(f)?f.tValue:f.value,J),j0&&!j0.running&&j0.sources.has(f))queueMicrotask(()=>{F1(()=>{j0&&(j0.running=!0),Kf=e0=f,fW(f,f.tValue,J),Kf=e0=null},!1)})}function fW(f,J,Y){let z,G=e0,X=Kf;Kf=e0=f;try{z=f.fn(J)}catch(q){if(f.pure)if(j0&&j0.running)f.tState=T1,f.tOwned&&f.tOwned.forEach(BY),f.tOwned=void 0;else f.state=T1,f.owned&&f.owned.forEach(BY),f.owned=null;return f.updatedAt=Y+1,DZ(q)}finally{Kf=X,e0=G}if(!f.updatedAt||f.updatedAt<=Y){if(f.updatedAt!=null&&"observers"in f)WH(f,z,!0);else if(j0&&j0.running&&f.pure){if(!j0.sources.has(f))f.value=z;j0.sources.add(f),f.tValue=z}else f.value=z;f.updatedAt=Y}}function iG(f,J,Y,z=T1,G){let X={fn:f,state:z,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:J,owner:e0,context:e0?e0.context:null,pure:Y};if(j0&&j0.running)X.state=0,X.tState=z;if(e0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if(e0!==fF)if(j0&&j0.running&&e0.pure)if(!e0.tOwned)e0.tOwned=[X];else e0.tOwned.push(X);else if(!e0.owned)e0.owned=[X];else e0.owned.push(X);if(G&&G.name)X.name=G.name;if(hz&&X.fn){let q=X.fn,[Q,H]=r(void 0,{equals:!1}),B=hz.factory(q,H);mf(()=>B.dispose());let V,j=()=>zF(H).then(()=>{if(V)V.dispose(),V=void 0});X.fn=(U)=>{if(Q(),j0&&j0.running){if(!V)V=hz.factory(q,j);return V.track(U)}return B.track(U)}}return YJ.afterCreateOwner&&YJ.afterCreateOwner(X),X}function dG(f){let J=j0&&j0.running;if((J?f.tState:f.state)===0)return;if((J?f.tState:f.state)===cG)return BZ(f);if(f.suspense&&$f(f.suspense.inFallback))return f.suspense.effects.push(f);let Y=[f];while((f=f.owner)&&(!f.updatedAt||f.updatedAt<WZ)){if(J&&j0.disposed.has(f))return;if(J?f.tState:f.state)Y.push(f)}for(let z=Y.length-1;z>=0;z--){if(f=Y[z],J){let G=f,X=Y[z+1];while((G=G.owner)&&G!==X)if(j0.disposed.has(G))return}if((J?f.tState:f.state)===T1)oY(f);else if((J?f.tState:f.state)===cG){let G=df;df=null,F1(()=>BZ(f,Y[0]),!1),df=G}}}function F1(f,J){if(df)return f();let Y=!1;if(!J)df=[];if(H1)Y=!0;else H1=[];WZ++;try{let z=f();return XF(Y),z}catch(z){if(!Y)H1=null;df=null,DZ(z)}}function XF(f){if(df){if(Pz&&j0&&j0.running)ZF(df);else ZW(df);df=null}if(f)return;let J;if(j0){if(!j0.promises.size&&!j0.queue.size){let{sources:z,disposed:G}=j0;H1.push.apply(H1,j0.effects),J=j0.resolve;for(let X of H1)"tState"in X&&(X.state=X.tState),delete X.tState;j0=null,F1(()=>{for(let X of G)BY(X);for(let X of z){if(X.value=X.tValue,X.owned)for(let q=0,Q=X.owned.length;q<Q;q++)BY(X.owned[q]);if(X.tOwned)X.owned=X.tOwned;delete X.tValue,delete X.tOwned,X.tState=0}t9(!1)},!1)}else if(j0.running){j0.running=!1,j0.effects.push.apply(j0.effects,H1),H1=null,t9(!0);return}}let Y=H1;if(H1=null,Y.length)F1(()=>zW(Y),!1);else YJ.afterUpdate&&YJ.afterUpdate();if(J)J()}function ZW(f){for(let J=0;J<f.length;J++)dG(f[J])}function ZF(f){for(let J=0;J<f.length;J++){let Y=f[J],z=j0.queue;if(!z.has(Y))z.add(Y),Pz(()=>{z.delete(Y),F1(()=>{j0.running=!0,dG(Y)},!1),j0&&(j0.running=!1)})}}function qF(f){let J,Y=0;for(J=0;J<f.length;J++){let z=f[J];if(!z.user)dG(z);else f[Y++]=z}if(hf.context){if(hf.count){hf.effects||(hf.effects=[]),hf.effects.push(...f.slice(0,Y));return}BH()}if(hf.effects&&(hf.done||!hf.count))f=[...hf.effects,...f],Y+=hf.effects.length,delete hf.effects;for(J=0;J<Y;J++)dG(f[J])}function BZ(f,J){let Y=j0&&j0.running;if(Y)f.tState=0;else f.state=0;for(let z=0;z<f.sources.length;z+=1){let G=f.sources[z];if(G.sources){let X=Y?G.tState:G.state;if(X===T1){if(G!==J&&(!G.updatedAt||G.updatedAt<WZ))dG(G)}else if(X===cG)BZ(G,J)}}}function qW(f){let J=j0&&j0.running;for(let Y=0;Y<f.observers.length;Y+=1){let z=f.observers[Y];if(J?!z.tState:!z.state){if(J)z.tState=cG;else z.state=cG;if(z.pure)df.push(z);else H1.push(z);z.observers&&qW(z)}}}function BY(f){let J;if(f.sources)while(f.sources.length){let Y=f.sources.pop(),z=f.sourceSlots.pop(),G=Y.observers;if(G&&G.length){let X=G.pop(),q=Y.observerSlots.pop();if(z<G.length)X.sourceSlots[q]=z,G[z]=X,Y.observerSlots[z]=q}}if(f.tOwned){for(J=f.tOwned.length-1;J>=0;J--)BY(f.tOwned[J]);delete f.tOwned}if(j0&&j0.running&&f.pure)QW(f,!0);else if(f.owned){for(J=f.owned.length-1;J>=0;J--)BY(f.owned[J]);f.owned=null}if(f.cleanups){for(J=f.cleanups.length-1;J>=0;J--)f.cleanups[J]();f.cleanups=null}if(j0&&j0.running)f.tState=0;else f.state=0;delete f.sourceMap}function QW(f,J){if(!J)f.tState=0,j0.disposed.add(f);if(f.owned)for(let Y=0;Y<f.owned.length;Y++)QW(f.owned[Y])}function QZ(f){if(f instanceof Error)return f;return Error(typeof f==="string"?f:"Unknown error",{cause:f})}function JW(f,J,Y){try{for(let z of J)z(f)}catch(z){DZ(z,Y&&Y.owner||null)}}function DZ(f,J=e0){let Y=o9&&J&&J.context&&J.context[o9],z=QZ(f);if(!Y)throw z;if(H1)H1.push({fn(){JW(z,Y,J)},state:T1});else JW(z,Y,J)}function jH(f){if(typeof f==="function"&&!f.length)return jH(f());if(Array.isArray(f)){let J=[];for(let Y=0;Y<f.length;Y++){let z=jH(f[Y]);if(Array.isArray(z))if(z.length<32768)J.push.apply(J,z);else for(let G=0;G<z.length;G++)J.push(z[G]);else J.push(z)}return J}return f}function QF(f,J){return function(z){let G;return AJ(()=>G=$f(()=>{return e0.context={...e0.context,[f]:z.value},GF(()=>z.children)}),void 0,J),G}}function YW(f){for(let J=0;J<f.length;J++)f[J]()}function BF(f,J,Y={}){let z=[],G=[],X=[],q=0,Q=J.length>1?[]:null;return mf(()=>YW(X)),()=>{let H=f()||[],B=H.length,V,j;return H[jZ],$f(()=>{let L,O,M,R,S,a,N,g,C;if(B===0){if(q!==0)YW(X),X=[],z=[],G=[],q=0,Q&&(Q=[]);if(Y.fallback)z=[HF],G[0]=_Y((y)=>{return X[0]=y,Y.fallback()}),q=1}else if(q===0){G=Array(B);for(j=0;j<B;j++)z[j]=H[j],G[j]=_Y(U);q=B}else{M=Array(B),R=Array(B),Q&&(S=Array(B));for(a=0,N=Math.min(q,B);a<N&&z[a]===H[a];a++);for(N=q-1,g=B-1;N>=a&&g>=a&&z[N]===H[g];N--,g--)M[g]=G[N],R[g]=X[N],Q&&(S[g]=Q[N]);L=new Map,O=Array(g+1);for(j=g;j>=a;j--)C=H[j],V=L.get(C),O[j]=V===void 0?-1:V,L.set(C,j);for(V=a;V<=N;V++)if(C=z[V],j=L.get(C),j!==void 0&&j!==-1)M[j]=G[V],R[j]=X[V],Q&&(S[j]=Q[V]),j=O[j],L.set(C,j);else X[V]();for(j=a;j<B;j++)if(j in M){if(G[j]=M[j],X[j]=R[j],Q)Q[j]=S[j],Q[j](j)}else G[j]=_Y(U);G=G.slice(0,q=B),z=H.slice(0)}return G});function U(L){if(X[j]=L,Q){let[O,M]=r(j,{name:"index"});return Q[j]=M,J(H[j],O)}return J(H[j])}}}function HW(f,J){if(jF){if(hf.context){let Y=hf.context;BH(_M());let z=e9(f,J||{});return BH(Y),z}}return e9(f,J||{})}function qZ(){return!0}function HH(f){return!(f=typeof f==="function"?f():f)?{}:f}function VF(){for(let f=0,J=this.length;f<J;++f){let Y=this[f]();if(Y!==void 0)return Y}}function LZ(...f){let J=!1;for(let q=0;q<f.length;q++){let Q=f[q];J=J||!!Q&&JJ in Q,f[q]=typeof Q==="function"?(J=!0,U0(Q)):Q}if(tM&&J)return new Proxy({get(q){for(let Q=f.length-1;Q>=0;Q--){let H=HH(f[Q])[q];if(H!==void 0)return H}},has(q){for(let Q=f.length-1;Q>=0;Q--)if(q in HH(f[Q]))return!0;return!1},keys(){let q=[];for(let Q=0;Q<f.length;Q++)q.push(...Object.keys(HH(f[Q])));return[...new Set(q)]}},WF);let Y={},z=Object.create(null);for(let q=f.length-1;q>=0;q--){let Q=f[q];if(!Q)continue;let H=Object.getOwnPropertyNames(Q);for(let B=H.length-1;B>=0;B--){let V=H[B];if(V==="__proto__"||V==="constructor")continue;let j=Object.getOwnPropertyDescriptor(Q,V);if(!z[V])z[V]=j.get?{enumerable:!0,configurable:!0,get:VF.bind(Y[V]=[j.get.bind(Q)])}:j.value!==void 0?j:void 0;else{let U=Y[V];if(U){if(j.get)U.push(j.get.bind(Q));else if(j.value!==void 0)U.push(()=>j.value)}}}}let G={},X=Object.keys(z);for(let q=X.length-1;q>=0;q--){let Q=X[q],H=z[Q];if(H&&H.get)Object.defineProperty(G,Q,H);else G[Q]=H?H.value:void 0}return G}function Zf(f){let J="fallback"in f&&{fallback:()=>f.fallback};return U0(BF(()=>f.each,f.children,J||void 0),void 0,{name:"value"})}function X0(f){let J=f.keyed,Y=U0(()=>f.when,void 0,{name:"condition value"}),z=J?Y:U0(Y,void 0,{equals:(G,X)=>!G===!X,name:"condition"});return U0(()=>{let G=z();if(G){let X=f.children;return typeof X==="function"&&X.length>0?$f(()=>X(J?G:()=>{if(!$f(z))throw KF("Show");return Y()})):X}return f.fallback},void 0,{name:"value"})}var hf,oM=!0,sM=(f,J)=>f===J,JJ,tM,jZ,eM,HZ,o9=null,zW,T1=1,cG=2,fF,QH,e0=null,j0=null,Pz=null,hz=null,Kf=null,df=null,H1=null,WZ=0,YJ,eI,t9,nG,HF,jF=!1,WF,KF=(f)=>`Attempting to access a stale value from <${f}> that could possibly be undefined. This may occur because you are reading the accessor returned from the component at a time where it has already been unmounted. We recommend cleaning up any stale timers or async, or reading from the initial condition.`,BW;var Wf=k(()=>{hf={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return _9(this.context.count)},getNextContextId(){return _9(this.context.count++)}};JJ=Symbol("solid-proxy"),tM=typeof Proxy==="function",jZ=Symbol("solid-track"),eM=Symbol("solid-dev-component"),HZ={equals:sM},zW=ZW,fF={},QH={},YJ={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[eI,t9]=r(!1);HF=Symbol("fallback");WF={get(f,J,Y){if(J===JJ)return Y;return f.get(J)},has(f,J){if(J===JJ)return!0;return f.has(J)},set:qZ,deleteProperty:qZ,getOwnPropertyDescriptor(f,J){return{configurable:!0,enumerable:!0,get(){return f.get(J)},set:qZ,deleteProperty:qZ}},ownKeys(f){return f.keys()}};BW={hooks:YJ,writeSignal:WH,registerGraph:GW};if(globalThis)if(!globalThis.Solid$$)globalThis.Solid$$=!0;else console.warn("You appear to have multiple instances of Solid. This can lead to unexpected behavior.")});function UF(f,J){switch((f??"").toUpperCase()){case"MERGED":return"merged";case"CLOSED":return"closed";case"OPEN":return(J??"").toUpperCase()==="APPROVED"?"ready_to_merge":"open";default:return"unknown"}}function DF(f){let J=(f.status??"").toUpperCase(),Y=(f.conclusion??"").toUpperCase(),z=(f.state??"").toUpperCase();if(J&&J!=="COMPLETED")return"pending";if(Y){if(Y==="SUCCESS"||Y==="NEUTRAL"||Y==="SKIPPED")return"passing";return"failing"}if(z==="SUCCESS")return"passing";if(z==="PENDING"||z==="EXPECTED")return"pending";if(z==="FAILURE"||z==="ERROR")return"failing";return"unknown"}function LF(f){if(!f||f.length===0)return"none";let J=!1,Y=!1;for(let z of f){let G=DF(z);if(G==="failing")return"failing";if(G==="pending")J=!0;else if(G==="passing")Y=!0}if(J)return"pending";if(Y)return"passing";return"unknown"}function WW(f,J){if(!f||typeof f.number!=="number")return null;return{provider:"github",lifecycle:UF(f.state,f.reviewDecision),checkState:LF(f.statusCheckRollup),number:f.number,url:f.url,title:f.title,baseRef:f.baseRefName,headRef:f.headRefName,reviewDecision:f.reviewDecision||void 0,mergeable:f.mergeable||void 0,lastCheckedAt:J}}function MZ(f,J){if(f===J)return!0;if(!f||!J)return!1;return f.provider===J.provider&&f.lifecycle===J.lifecycle&&f.checkState===J.checkState&&f.number===J.number&&f.url===J.url&&f.title===J.title&&f.baseRef===J.baseRef&&f.headRef===J.headRef&&f.reviewDecision===J.reviewDecision&&f.mergeable===J.mergeable}var jW="number,url,title,state,baseRefName,headRefName,reviewDecision,mergeable,statusCheckRollup";var VH,KH,UH,DH="DIRTY_WORKTREE",LH,MH;var FH=k(()=>{VH=class VH extends Error{from;to;taskId;constructor(f,J,Y){super(`illegal transition for task ${Y}: ${f} -> ${J}`);this.from=f;this.to=J;this.taskId=Y;this.name="IllegalTransitionError"}};KH=class KH extends Error{constructor(f){super(`task not found: ${f}`);this.name="TaskNotFoundError"}};UH=class UH extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};LH=class LH extends Error{taskId;constructor(f){super(`${DH}: task ${f} worktree has uncommitted or untracked changes`);this.taskId=f;this.name="DirtyWorktreeError"}};MH=class MH extends Error{taskId;cause;constructor(f,J){super(`failed to remove worktree for task ${f}: ${J instanceof Error?J.message:String(J)}`);this.taskId=f;this.cause=J;this.name="WorktreeRemoveFailedError"}}});function VW(f){if(typeof f!=="string")return"";let J=f.replace(/\s+/g," ").trim();if(J.length===0)return"";let Y=[...J];if(Y.length<=40)return J;return`${Y.slice(0,40).join("")}\u2026`}function FZ(f,J){let Y=f.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,32),z=J.slice(-6).toLowerCase();return`kobe/${Y||"task"}-${z}`}var KW;var UW=k(()=>{KW=["aardvark","addax","adder","agouti","albatross","alpaca","anaconda","anchovy","anglerfish","anole","anteater","antelope","ape","argali","armadillo","avocet","axolotl","baboon","badger","banteng","barracuda","basilisk","bass","bat","beagle","bear","beaver","bee","beetle","beluga","betta","bison","blackbird","blenny","bluebird","bluegill","boar","bobcat","bonito","bovid","buffalo","bullfrog","bunting","bushbuck","butterfly","buzzard","caiman","camel","canary","capybara","caracal","cardinal","caribou","carp","cassowary","caterpillar","catfish","chameleon","chamois","char","cheetah","chickadee","chimp","chinchilla","chipmunk","chough","cicada","civet","clam","clownfish","cobra","cockatoo","condor","coot","copperhead","coral","cormorant","cougar","coyote","crab","crane","crawfish","crayfish","cricket","crocodile","crow","cuckoo","curlew","cuttlefish","deer","dikdik","dingo","dolphin","donkey","dormouse","dotterel","dove","dragonfly","dromedary","duck","dugong","dunlin","eagle","echidna","eel","egret","eider","eland","elephant","elk","emu","ermine","falcon","fawn","ferret","finch","firefly","flamingo","flounder","fox","frog","gadwall","gannet","gaur","gazelle","gecko","gemsbok","gerbil","gharial","gibbon","gnu","goat","goby","godwit","goldfish","goose","gopher","goral","gorilla","goshawk","grackle","grasshopper","grayling","grebe","grouse","guanaco","guillemot","guineafowl","guppy","halibut","hammerhead","hamster","hare","harrier","hartebeest","hawk","hedgehog","heron","herring","hippo","hornbill","hornet","horse","hummingbird","hyena","ibex","ibis","iguana","impala","indri","jacana","jackal","jaguar","jay","jellyfish","jerboa","junco","kakapo","kangaroo","kestrel","killdeer","kingfisher","kinglet","kite","kiwi","koala","kookaburra","krait","krill","kudu","ladybug","lamprey","langur","lapwing","lark","lemming","lemur","leopard","limpet","lion","lionfish","lizard","llama","lobster","locust","loon","lorikeet","loris","lynx","macaque","macaw","mackerel","magpie","mallard","mamba","mammoth","manatee","mandrill","manta","mantis","marlin","marmoset","marmot","marten","meerkat","merganser","mink","minnow","mole","mongoose","monitor","monkey","moose","moth","mouflon","mouse","mudpuppy","mule","muntjac","musk","muskox","muskrat","mussel","mustang","narwhal","newt","nightingale","numbat","nuthatch","nyala","ocelot","octopus","okapi","opossum","orangutan","orca","oriole","oryx","osprey","ostrich","otter","owl","oyster","oystercatcher","paca","panda","pangolin","panther","parakeet","parrot","parrotfish","partridge","peafowl","pelican","penguin","perch","petrel","pheasant","pigeon","pika","pike","pintail","pipefish","platypus","plover","pollock","pony","porcupine","porpoise","possum","ptarmigan","puffin","puma","pupfish","python","quail","quetzal","quokka","quoll","rabbit","raccoon","rail","rat","rattler","raven","ray","redpoll","reindeer","remora","rhino","roadrunner","robin","rook","sable","sailfish","salamander","salmon","sandpiper","sardine","scallop","scaup","scorpion","seahorse","seal","serval","shark","shearwater","shrew","shrike","shrimp","siskin","sitatunga","skate","skink","skua","skunk","sloth","smelt","snail","snipe","solenodon","sparrow","spider","springbok","squid","squirrel","starfish","starling","stilt","stingray","stoat","stork","sunbird","sunfish","swallow","swan","swift","swordfish","tahr","takin","tamarin","tanager","tapir","tarantula","tarpon","tarsier","teal","tenrec","terrapin","tern","tetra","thrasher","thrush","tiger","toad","tortoise","toucan","treecreeper","treefrog","trout","tuatara","tuna","turkey","turtle","urchin","urial","vicuna","viper","vole","vulture","wagtail","wallaby","walleye","walrus","warbler","warthog","waterbuck","weasel","wildebeest","wolf","wolverine","wombat","woodcock","woodpecker","wrasse","wren","yak","zebra","zebu","zorilla"]});class OH{activeSlugs;random;pool;pendingByRepo=new Map;chain=Promise.resolve();constructor(f,J={}){this.activeSlugs=f;if(this.random=J.random??Math.random,this.pool=J.pool??KW,this.pool.length===0)throw Error("SlugAllocator: animal pool cannot be empty")}async allocate(f){let J=this.chain,Y;this.chain=new Promise((z)=>{Y=z}),await J;try{return await this.pickLocked(f)}finally{Y()}}commit(f,J){this.deletePending(f,J)}cancel(f,J){this.deletePending(f,J)}async pickLocked(f){let J=await this.occupiedSlugs(f),Y=this.pool.filter((G)=>!J.has(G));if(Y.length>0){let G=Y[Math.floor(this.random()*Y.length)];return this.addPending(f,G),G}let z=this.pool[Math.floor(this.random()*this.pool.length)];for(let G=2;;G++){let X=`${z}-v${G}`;if(!J.has(X))return this.addPending(f,X),X}}async occupiedSlugs(f){let J=new Set(this.pendingByRepo.get(f)??[]);for(let Y of this.activeSlugs(f))if(Y)J.add(Y);for(let Y of await d9(f))J.add(Y);return J}addPending(f,J){let Y=this.pendingByRepo.get(f);if(!Y)Y=new Set,this.pendingByRepo.set(f,Y);Y.add(J)}deletePending(f,J){let Y=this.pendingByRepo.get(f);if(!Y)return;if(Y.delete(J),Y.size===0)this.pendingByRepo.delete(f)}}var DW=k(()=>{UW();XH()});var FW={};jf(FW,{PLACEHOLDER_TASK_TITLE:()=>RJ,Orchestrator:()=>OZ});import{realpathSync as MF}from"fs";import{basename as FF,resolve as OF}from"path";function LW(f){return mJ(f)?.basePath??f}class OZ{store;worktrees;slugs;tasksAcc;setTasks;activeTaskAcc;setActiveTaskSig;unsubscribeStore;worktreeLocks=new Map;mainTaskLocks=new Map;constructor(f){this.store=f.store,this.worktrees=f.worktrees,this.slugs=new OH((X)=>this.store.list().filter((q)=>q.repo===X&&q.kind!=="main").map((q)=>{return q.worktreePath.match(/([^/\\]+)[/\\]*$/)?.[1]??""}).filter((q)=>q.length>0));let[J,Y]=r(this.store.list());this.tasksAcc=J,this.setTasks=(X)=>Y(()=>X);let[z,G]=r(null);this.activeTaskAcc=z,this.setActiveTaskSig=(X)=>G(()=>X),this.unsubscribeStore=this.store.subscribe((X)=>{this.setTasks(X.slice())})}async init(){}activeTaskSignal(){return this.activeTaskAcc}async setActiveTask(f){let J=f===null?null:String(f);if(this.setActiveTaskSig(J),J&&this.store.get(J))await this.store.update(J,{})}tasksSignal(){return this.tasksAcc}subscribeTasks(f){return this.store.subscribe(f)}dispose(){this.unsubscribeStore()}listTasks(){return this.store.list()}getTask(f){return this.store.get(f)}async createTask(f){if(!f.repo)throw Error("createTask: repo is required");let J=(f.title??RJ).trim()||RJ,Y=await this.store.create({repo:f.repo,title:J,branch:f.branch??"",worktreePath:"",status:"backlog",kind:"task",vendor:f.vendor??Sf,...f.modelEffort?{modelEffort:f.modelEffort}:{}});if(f.baseRef)this.pendingBaseRefs.set(Y.id,f.baseRef);return Y}async ensureMainTask(f){let{repo:J,key:Y}=MW(f),z=this.store.list().find((q)=>q.kind==="main"&&MW(q.repo).key===Y);if(z)return z;let G=this.mainTaskLocks.get(Y);if(G)return G;let X=(async()=>{return await this.store.create({repo:J,title:AF(J),branch:"",worktreePath:LW(J),status:"backlog",kind:"main",vendor:Sf})})();this.mainTaskLocks.set(Y,X);try{return await X}finally{this.mainTaskLocks.delete(Y)}}async ensureWorktree(f){let J=this.requireTask(f);if(J.kind==="main")return LW(J.repo);if(J.worktreePath)return J.worktreePath;let Y=this.worktreeLocks.get(J.id);if(Y)return await Y,this.requireTask(J.id).worktreePath;let z=(async()=>{let X=await this.slugs.allocate(J.repo);try{let q=J.branch||FZ(J.title,J.id),Q=this.pendingBaseRefs.get(J.id),H=await this.worktrees.createForTask({repo:J.repo,slug:X,branch:q,baseRef:Q});this.slugs.commit(J.repo,X),this.pendingBaseRefs.delete(J.id),await this.store.update(J.id,{worktreePath:H.path,branch:q})}catch(q){throw this.slugs.cancel(J.repo,X),q}})();this.worktreeLocks.set(J.id,z);try{await z}finally{this.worktreeLocks.delete(J.id)}return this.requireTask(J.id).worktreePath}async setTitle(f,J){let Y=J.trim();if(!Y)throw Error("setTitle: title is required (empty or whitespace-only rejected)");let z=this.requireTask(f);if(z.title===Y)return;await this.store.update(z.id,{title:Y}),await this.followBranchToTitle(z,Y)}async followBranchToTitle(f,J){if(f.kind==="main"||!f.worktreePath)return;if(f.branch!==FZ(RJ,f.id))return;let Y=FZ(J,f.id);if(Y===f.branch)return;try{await this.setBranch(f.id,Y)}catch(z){console.error(`[kobe] follow-branch-to-title failed for ${f.id}:`,z)}}async setBranch(f,J){let Y=J.trim();if(!Y)throw Error("setBranch: branch is required (empty or whitespace-only rejected)");let z=this.requireTask(f);if(z.kind==="main")throw Error("setBranch: a main task tracks the repo's own branch; rename it with git directly");if(z.branch===Y)return;if(z.worktreePath)await this.worktrees.renameBranch(z.worktreePath,z.branch,Y);await this.store.update(z.id,{branch:Y})}async setVendor(f,J){let Y=this.requireTask(f);if(Y.vendor===J)return;await this.store.update(Y.id,{vendor:J})}async setPinned(f,J){let Y=this.requireTask(f);if(Y.kind==="main")return;let z=J??!Y.pinned;if((Y.pinned??!1)===z)return;await this.store.update(Y.id,{pinned:z})}async moveTask(f,J){let Y=this.requireTask(f);if(Y.kind==="main")return;let z=this.store.list().filter((G)=>(G.kind??"task")!=="main"&&G.archived===Y.archived&&(G.pinned??!1)===(Y.pinned??!1)).map((G)=>String(G.id));await this.store.move(Y.id,J,z)}async setArchived(f,J){let Y=this.requireTask(f);if(Y.kind==="main")return;let z=J??!Y.archived;if(Y.archived===z)return;await this.store.update(Y.id,{archived:z})}async reorderTasks(f){if(f.length===0)return;for(let J of f){if(this.requireTask(J.taskId).kind==="main")throw Error(`cannot reorder a main task: ${J.taskId}`);if(!Number.isFinite(J.position))throw Error(`position must be a finite number: ${J.taskId}`)}await this.store.reorder(f.map((J)=>({id:J.taskId,position:J.position})))}async setStatus(f,J){let Y=this.requireTask(f);if(Y.status===J)return;if(Y.status==="done"&&J==="error"||Y.status==="error"&&J==="done")throw new VH(Y.status,J,Y.id);await this.store.update(Y.id,{status:J})}async setPRStatus(f,J){let Y=this.requireTask(f);if(MZ(Y.prStatus,J??void 0))return;await this.store.update(Y.id,{prStatus:J??void 0})}async deleteTask(f,J){let Y=this.store.get(f);if(!Y)return;if(Y.kind==="main")throw new UH;let z=J?.force===!0;if(Y.worktreePath){if(!z){let G=!1;try{G=await this.worktrees.isDirty(Y.worktreePath)}catch{}if(G)throw new LH(Y.id)}try{await this.worktrees.remove(Y.worktreePath,{force:z})}catch(G){throw new MH(Y.id,G)}}await this.store.remove(Y.id),this.pendingBaseRefs.delete(Y.id),this.worktreeLocks.delete(Y.id)}async discoverAdoptableWorktrees(f){if(!f)throw Error("discoverAdoptableWorktrees: repo is required");let J=await this.worktrees.listAll(f),Y=new Set(this.store.list().filter((z)=>z.worktreePath).map((z)=>vz(z.worktreePath)));return J.filter((z)=>!Y.has(vz(z.path)))}async adoptWorktree(f){if(!f.repo)throw Error("adoptWorktree: repo is required");if(!f.worktreePath)throw Error("adoptWorktree: worktreePath is required");let J=vz(f.worktreePath),Y=this.adoptLocks.get(J);if(Y)return Y;let z=this.adoptWorktreeLocked(f,J);this.adoptLocks.set(J,z);try{return await z}finally{this.adoptLocks.delete(J)}}async adoptWorktreeLocked(f,J){let Y=this.store.list().find((Q)=>Q.worktreePath&&vz(Q.worktreePath)===J);if(Y){if(f.ifExists==="return")return Y;throw Error(`adoptWorktree: ${f.worktreePath} is already adopted as a task`)}let G=(await this.worktrees.listAll(f.repo)).find((Q)=>vz(Q.path)===J);if(!G)throw Error(`adoptWorktree: ${f.worktreePath} is not an adoptable git worktree of ${f.repo} (unknown, detached, or the main checkout)`);let X=f.branch?.trim()||G.branch,q=(f.title??FF(G.path)).trim()||RJ;return this.store.create({repo:f.repo,title:q,branch:X,worktreePath:G.path,status:"backlog",kind:"task",vendor:f.vendor??Sf})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(f){let J=this.store.get(f);if(!J)throw new KH(String(f));return J}}function AF(f){let J=f.split(/[/\\]/).filter(Boolean);return J.length>0?J[J.length-1]??f:f}function MW(f){let J=PJ(f);return{repo:J,key:D1(J)?J:vz(J)}}function vz(f){try{return MF(f)}catch{return OF(f)}}var RJ="(new task)";var lG=k(()=>{Wf();gf();S1();FH();DW()});function AZ(f){return f.remoteVersion>=f.localMin&&f.localVersion>=f.remoteMin}function OW(f,J){if(!f)return!1;return f!==J}function RF(f){return typeof f==="string"&&gF.has(f)}function AW(f){if(!Array.isArray(f))return null;let J=new Set;for(let Y of f)if(RF(Y))J.add(Y);return J.size>0?J:null}function zJ(f){return{id:f.id,title:f.title,repo:f.repo,branch:f.branch,worktreePath:f.worktreePath,kind:f.kind??"task",status:f.status,archived:f.archived,pinned:f.pinned??!1,vendor:f.vendor,prStatus:f.prStatus,position:f.position,modelEffort:f.modelEffort,createdAt:f.createdAt,updatedAt:f.updatedAt}}function aG(f){return`${JSON.stringify(f)}
16
- `}var n1=3,jY=2,AH,gF;var sY=k(()=>{AH=["task.snapshot","issue.snapshot","active-task","update","engine-state","ui-prefs","keybindings","task.jobs","worktree.changes","session.deliver"],gF=new Set(AH)});import{createHash as CF}from"crypto";import{homedir as gZ,tmpdir as kF}from"os";import{join as tY}from"path";function NF(f){return CF("sha1").update(f).digest("hex").slice(0,8)}function RH(f,J,Y,z){if(Buffer.byteLength(f,"utf8")<=gH)return f;let G=NF(J),X=z===void 0?"":`-${z}`,q=tY(kF(),`kobe-${G}-${Y}${X}.sock`);if(Buffer.byteLength(q,"utf8")<=gH)return q;throw Error(`kobe socket path exceeds ${gH} bytes even after fallback: ${q}`)}function CJ(f){let J=process.env.KOBE_DAEMON_SOCKET_PATH;if(J&&J.length>0)return J;let Y=f??process.env.KOBE_HOME_DIR;if(Y&&Y.length>0)return RH(tY(Y,".kobe","daemon.sock"),Y,"daemon");let z=process.env.XDG_RUNTIME_DIR;if(z&&z.length>0)return RH(tY(z,"kobe.sock"),z,"daemon");let G=gZ();return RH(tY(G,".kobe","daemon.sock"),G,"daemon")}function nJ(f=process.env.KOBE_HOME_DIR??gZ()){let J=process.env.KOBE_DAEMON_PID_PATH;if(J&&J.length>0)return J;return tY(f,".kobe","daemon.pid")}function RZ(f=process.env.KOBE_HOME_DIR??gZ()){return tY(f,".kobe","daemon.log")}function gW(f=process.env.KOBE_HOME_DIR??gZ()){return tY(f,".kobe","client.log")}var gH=100;var mz=()=>{};import{appendFile as RW,mkdir as yF}from"fs/promises";import{dirname as bF}from"path";function CZ(f){NW=f}function SF(f){if(f instanceof Error)return{message:f.message,stack:f.stack};let J;try{J=typeof f==="string"?f:JSON.stringify(f)}catch{J=String(f)}return{message:J}}function yW(f,J,Y=new Date){return`[${Y.toISOString()}] client ${NW} [${f}] pid=${process.pid}: ${J}
17
- `}function IF(){if(CW)return;CW=!0;try{process.stderr.write(`[kobe] client log write failed; continuing without it
18
- `)}catch{}}function bW(f){let J=gW();kW=kW.then(async()=>{try{await RW(J,f)}catch(Y){if(Y?.code==="ENOENT")await yF(bF(J),{recursive:!0}),await RW(J,f);else throw Y}}).catch(()=>IF())}function dJ(f,J){bW(yW(f,J))}function WY(f,J){let Y=SF(J);bW(yW(f,Y.stack??Y.message))}var NW="client",CW=!1,kW;var eY=k(()=>{mz();kW=Promise.resolve()});import{connect as TF}from"net";import{StringDecoder as uF}from"string_decoder";class d1{socketPath;socket=null;buffer="";nextId=1;pending=new Map;handlers=new Map;lifecycleHandlers=new Map;connecting=null;disposed=!1;constructor(f){this.socketPath=f}connect(){if(this.socket)return Promise.resolve();if(this.disposed)return Promise.reject(Error("daemon client disposed"));if(this.connecting)return this.connecting;let f=this.openSocket();this.connecting=f;let J=()=>{if(this.connecting===f)this.connecting=null};return f.then(J,J),f}get isDisposed(){return this.disposed}close(){this.disposed=!0,this.socket?.end(),this.socket=null,this.failPending()}forceDisconnect(){let f=this.socket;if(!f)return;this.socket=null,f.destroy(),this.failPending()}failPending(){if(this.pending.size===0)return;let f=Error("daemon connection closed");for(let J of this.pending.values())J.reject(f);this.pending.clear()}on(f,J){let Y=this.handlers.get(f);if(!Y)Y=new Set,this.handlers.set(f,Y);return Y.add(J),()=>{if(Y?.delete(J),Y?.size===0)this.handlers.delete(f)}}onChannel(f,J){return this.on(f,(Y)=>J(Y.payload))}subscribe(f={}){let J={};if(f.channels)J.channels=f.channels;if(f.role)J.role=f.role;return this.request("subscribe",J)}onLifecycle(f,J){let Y=this.lifecycleHandlers.get(f);if(!Y)Y=new Set,this.lifecycleHandlers.set(f,Y);return Y.add(J),()=>{if(Y?.delete(J),Y?.size===0)this.lifecycleHandlers.delete(f)}}async request(f,J){await this.connect();let Y=this.socket;if(!Y)throw Error("daemon connection is not open");let z=String(this.nextId++),G=new Promise((X,q)=>{this.pending.set(z,{resolve:(Q)=>X(Q),reject:q})});return Y.write(aG({type:"request",id:z,name:f,payload:J})),G}openSocket(){return new Promise((f,J)=>{let Y=TF(this.socketPath);this.socket=Y;let z=()=>{Y.off("error",G),f()},G=(q)=>{if(Y.off("connect",z),this.socket===Y)this.socket=null;J(q)};Y.once("connect",z),Y.once("error",G);let X=new uF("utf8");this.buffer="",Y.on("data",(q)=>this.onData(X.write(q))),Y.on("close",()=>this.onSocketClose(Y))})}onSocketClose(f){if(this.socket!==f)return;this.socket=null,this.failPending(),this.emitLifecycle("close")}emitLifecycle(f){for(let J of this.lifecycleHandlers.get(f)??[])try{J()}catch(Y){console.error(`[kobe] lifecycle handler for "${f}" threw:`,Y)}}onData(f){this.buffer+=f;let J=this.buffer.indexOf(`
13
+ `});function ZZ(f){return f.remoteVersion>=f.localMin&&f.localVersion>=f.remoteMin}function I9(f,J){if(!f)return!1;return f!==J}function yM(f){return typeof f==="string"&&NM.has(f)}function T9(f){if(!Array.isArray(f))return null;let J=new Set;for(let Y of f)if(yM(Y))J.add(Y);return J.size>0?J:null}function e1(f){return{id:f.id,title:f.title,repo:f.repo,branch:f.branch,worktreePath:f.worktreePath,kind:f.kind??"task",status:f.status,archived:f.archived,pinned:f.pinned??!1,vendor:f.vendor,prStatus:f.prStatus,position:f.position,modelEffort:f.modelEffort,createdAt:f.createdAt,updatedAt:f.updatedAt}}function PG(f){return`${JSON.stringify(f)}
14
+ `}var n1=3,QY=2,qH,NM;var _Y=k(()=>{qH=["task.snapshot","issue.snapshot","active-task","update","engine-state","ui-prefs","keybindings","task.jobs","worktree.changes","session.deliver"],NM=new Set(qH)});import{createHash as bM}from"crypto";import{homedir as qZ,tmpdir as SM}from"os";import{join as oY}from"path";function IM(f){return bM("sha1").update(f).digest("hex").slice(0,8)}function HH(f,J,Y,z){if(Buffer.byteLength(f,"utf8")<=QH)return f;let G=IM(J),X=z===void 0?"":`-${z}`,q=oY(SM(),`kobe-${G}-${Y}${X}.sock`);if(Buffer.byteLength(q,"utf8")<=QH)return q;throw Error(`kobe socket path exceeds ${QH} bytes even after fallback: ${q}`)}function AJ(f){let J=process.env.KOBE_DAEMON_SOCKET_PATH;if(J&&J.length>0)return J;let Y=f??process.env.KOBE_HOME_DIR;if(Y&&Y.length>0)return HH(oY(Y,".kobe","daemon.sock"),Y,"daemon");let z=process.env.XDG_RUNTIME_DIR;if(z&&z.length>0)return HH(oY(z,"kobe.sock"),z,"daemon");let G=qZ();return HH(oY(G,".kobe","daemon.sock"),G,"daemon")}function nJ(f=process.env.KOBE_HOME_DIR??qZ()){let J=process.env.KOBE_DAEMON_PID_PATH;if(J&&J.length>0)return J;return oY(f,".kobe","daemon.pid")}function QZ(f=process.env.KOBE_HOME_DIR??qZ()){return oY(f,".kobe","daemon.log")}function u9(f=process.env.KOBE_HOME_DIR??qZ()){return oY(f,".kobe","client.log")}var QH=100;var xz=()=>{};import{appendFile as E9,mkdir as TM}from"fs/promises";import{dirname as uM}from"path";function HZ(f){h9=f}function EM(f){if(f instanceof Error)return{message:f.message,stack:f.stack};let J;try{J=typeof f==="string"?f:JSON.stringify(f)}catch{J=String(f)}return{message:J}}function P9(f,J,Y=new Date){return`[${Y.toISOString()}] client ${h9} [${f}] pid=${process.pid}: ${J}
15
+ `}function xM(){if(x9)return;x9=!0;try{process.stderr.write(`[kobe] client log write failed; continuing without it
16
+ `)}catch{}}function v9(f){let J=u9();w9=w9.then(async()=>{try{await E9(J,f)}catch(Y){if(Y?.code==="ENOENT")await TM(uM(J),{recursive:!0}),await E9(J,f);else throw Y}}).catch(()=>xM())}function dJ(f,J){v9(P9(f,J))}function HY(f,J){let Y=EM(J);v9(P9(f,Y.stack??Y.message))}var h9="client",x9=!1,w9;var sY=k(()=>{xz();w9=Promise.resolve()});import{connect as wM}from"net";import{StringDecoder as hM}from"string_decoder";class d1{socketPath;socket=null;buffer="";nextId=1;pending=new Map;handlers=new Map;lifecycleHandlers=new Map;connecting=null;disposed=!1;constructor(f){this.socketPath=f}connect(){if(this.socket)return Promise.resolve();if(this.disposed)return Promise.reject(Error("daemon client disposed"));if(this.connecting)return this.connecting;let f=this.openSocket();this.connecting=f;let J=()=>{if(this.connecting===f)this.connecting=null};return f.then(J,J),f}get isDisposed(){return this.disposed}close(){this.disposed=!0,this.socket?.end(),this.socket=null,this.failPending()}forceDisconnect(){let f=this.socket;if(!f)return;this.socket=null,f.destroy(),this.failPending()}failPending(){if(this.pending.size===0)return;let f=Error("daemon connection closed");for(let J of this.pending.values())J.reject(f);this.pending.clear()}on(f,J){let Y=this.handlers.get(f);if(!Y)Y=new Set,this.handlers.set(f,Y);return Y.add(J),()=>{if(Y?.delete(J),Y?.size===0)this.handlers.delete(f)}}onChannel(f,J){return this.on(f,(Y)=>J(Y.payload))}subscribe(f={}){let J={};if(f.channels)J.channels=f.channels;if(f.role)J.role=f.role;return this.request("subscribe",J)}onLifecycle(f,J){let Y=this.lifecycleHandlers.get(f);if(!Y)Y=new Set,this.lifecycleHandlers.set(f,Y);return Y.add(J),()=>{if(Y?.delete(J),Y?.size===0)this.lifecycleHandlers.delete(f)}}async request(f,J){await this.connect();let Y=this.socket;if(!Y)throw Error("daemon connection is not open");let z=String(this.nextId++),G=new Promise((X,q)=>{this.pending.set(z,{resolve:(Q)=>X(Q),reject:q})});return Y.write(PG({type:"request",id:z,name:f,payload:J})),G}openSocket(){return new Promise((f,J)=>{let Y=wM(this.socketPath);this.socket=Y;let z=()=>{Y.off("error",G),f()},G=(q)=>{if(Y.off("connect",z),this.socket===Y)this.socket=null;J(q)};Y.once("connect",z),Y.once("error",G);let X=new hM("utf8");this.buffer="",Y.on("data",(q)=>this.onData(X.write(q))),Y.on("close",()=>this.onSocketClose(Y))})}onSocketClose(f){if(this.socket!==f)return;this.socket=null,this.failPending(),this.emitLifecycle("close")}emitLifecycle(f){for(let J of this.lifecycleHandlers.get(f)??[])try{J()}catch(Y){console.error(`[kobe] lifecycle handler for "${f}" threw:`,Y)}}onData(f){this.buffer+=f;let J=this.buffer.indexOf(`
19
17
  `);while(J!==-1){let Y=this.buffer.slice(0,J);if(this.buffer=this.buffer.slice(J+1),Y.trim().length>0)this.onLine(Y);J=this.buffer.indexOf(`
20
- `)}}onLine(f){let J;try{J=JSON.parse(f)}catch(z){WY("client-frame",z);return}if(J.type==="event"){this.emit(J);return}if(J.type!=="response")return;let Y=this.pending.get(J.id);if(!Y)return;if(this.pending.delete(J.id),J.error){let z=Error(J.error.message);if(J.error.name)z.name=J.error.name;Y.reject(z)}else Y.resolve(J.payload)}emit(f){for(let J of this.handlers.get(f.name)??[])J(f);for(let J of this.handlers.get("*")??[])J(f)}}var $G=k(()=>{sY();eY()});function kZ(f){return EF.includes(f)}function SW(f,J,Y){switch(J){case"session-start":case"session-end":return"idle";case"turn-start":return"running";case"turn-complete":return"turn_complete";case"turn-failed":return Y?.failure==="rate_limit"||Y?.failure==="billing"?"rate_limited":"error";case"awaiting-input":return Y?.waiting==="permission"?"permission_needed":"running"}}var EF;var NZ=k(()=>{EF=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function xF(){let f=process.env.KOBE_ENGINE_STATE_TTL_MS;if(f===void 0)return IW;let J=Number(f);return Number.isFinite(J)&&J>0?J:IW}class CH{bus;staleMs;now;activity=new Map;constructor(f,J=xF(),Y=()=>Date.now()){this.bus=f;this.staleMs=J;this.now=Y}report(f,J,Y){let z=this.activity.get(f);if(z?.lapse)clearTimeout(z.lapse);let G=SW(z?.state,J,Y),X=this.now(),q={state:G,detail:Y,at:X};if(G!=="idle"&&G!=="turn_complete")q.lapse=setTimeout(()=>{let Q=this.activity.get(f);if(Q&&Q.at===X)this.publishIdle(f)},this.staleMs),q.lapse.unref?.();this.activity.set(f,q),this.bus.publish("engine-state",this.payload(f,q))}clearTask(f){let J=this.activity.get(f);if(J?.lapse)clearTimeout(J.lapse);if(this.activity.delete(f),J)this.bus.publish("engine-state",{taskId:f,state:"idle",at:this.now()})}snapshotByTask(){let f={};for(let[J,Y]of this.activity)f[J]=this.payload(J,Y);return f}currentNonIdle(){let f=[];for(let[J,Y]of this.activity)if(Y.state!=="idle")f.push(this.payload(J,Y));return f}close(){for(let f of this.activity.values())if(f.lapse)clearTimeout(f.lapse);this.activity.clear()}publishIdle(f){let J={state:"idle",at:this.now()};this.activity.set(f,J),this.bus.publish("engine-state",this.payload(f,J))}payload(f,J){return{taskId:f,state:J.state,...J.detail?{detail:J.detail}:{},at:J.at}}}var IW=600000;var TW=k(()=>{NZ()});import{spawnSync as wF}from"child_process";import{existsSync as hF,statSync as PF}from"fs";import{homedir as vF}from"os";import rG from"path";async function uW(f=mF){let J=[],Y=(B)=>{if(!B)return;return J.push(B),f.fileExists(B)?B:void 0},z=f.which("claude");if(z){if(J.push(`which:${z}`),f.fileExists(z))return z}let G=f.home(),X=Y(rG.join(G,".claude","local","claude"));if(X)return X;let q=f.env("NVM_BIN");if(q){let B=Y(rG.join(q,"claude"));if(B)return B}let Q=rG.join(G,".nvm","versions","node"),H=f.readdir(Q).sort().reverse();for(let B of H){let V=Y(rG.join(Q,B,"bin","claude"));if(V)return V}for(let B of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude","/bin/claude"]){let V=Y(B);if(V)return V}for(let B of[".local/bin/claude",".npm-global/bin/claude",".yarn/bin/claude",".bun/bin/claude","bin/claude"]){let V=Y(rG.join(G,B));if(V)return V}throw new yZ(J)}var yZ,mF;var EW=k(()=>{yZ=class yZ extends Error{checkedPaths;constructor(f){super(`Claude Code binary not found. Checked: ${f.join(", ")}. Ensure 'claude' is on PATH, or install at ~/.claude/local/claude.`);this.name="ClaudeBinaryNotFoundError",this.checkedPaths=f}};mF={fileExists(f){try{return PF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return vF()},which(f){let J=process.platform==="win32"?"where":"which",Y=wF(J,[f],{encoding:"utf8"});if(Y.status!==0)return;let z=Y.stdout.split(`
21
- `).map((G)=>G.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("claude:")&&z.includes("aliased to")){let G=z.split("aliased to")[1]?.trim();return G&&hF(G)?G:void 0}return z},readdir(f){try{return pX("fs").readdirSync(f)}catch{return[]}}}});import{spawnSync as cF}from"child_process";import{existsSync as nF,statSync as dF}from"fs";import{homedir as iF}from"os";import xW from"path";async function wW(f=lF){let J=[],Y=(q)=>{if(!q)return;return J.push(q),f.fileExists(q)?q:void 0},z=f.which("codex");if(z){if(J.push(`which:${z}`),f.fileExists(z))return z}let G=f.home();for(let q of["/opt/homebrew/bin/codex","/usr/local/bin/codex","/usr/bin/codex","/bin/codex"]){let Q=Y(q);if(Q)return Q}let X=f.env("NVM_BIN");if(X){let q=Y(xW.join(X,"codex"));if(q)return q}for(let q of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let Q=Y(xW.join(G,q));if(Q)return Q}throw new bZ(J)}var bZ,lF;var hW=k(()=>{bZ=class bZ extends Error{checkedPaths;constructor(f){super(`Codex CLI binary not found. Checked: ${f.join(", ")}. Ensure 'codex' is on PATH (e.g. \`brew install codex\` or the official installer).`);this.name="CodexBinaryNotFoundError",this.checkedPaths=f}};lF={fileExists(f){try{return dF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return iF()},which(f){let J=process.platform==="win32"?"where":"which",Y=cF(J,[f],{encoding:"utf8"});if(Y.status!==0)return;let z=Y.stdout.split(`
22
- `).map((G)=>G.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("codex:")&&z.includes("aliased to")){let G=z.split("aliased to")[1]?.trim();return G&&nF(G)?G:void 0}return z},readdir(f){try{return pX("fs").readdirSync(f)}catch{return[]}}}});import{spawnSync as aF}from"child_process";import{existsSync as $F,statSync as rF}from"fs";import{homedir as pF}from"os";import VY from"path";async function PW(f=_F){let J=[],Y=(V)=>{if(!V)return;return J.push(V),f.fileExists(V)?V:void 0},z=f.which("copilot");if(z){if(J.push(`which:${z}`),f.fileExists(z))return z}let G=f.platform()==="win32"?["copilot.exe","copilot.cmd","copilot"]:["copilot"],X=(V)=>{if(!V)return;for(let j of G){let U=Y(VY.join(V,j));if(U)return U}return};for(let V of["/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin"]){let j=X(V);if(j)return j}let q=f.env("NVM_BIN"),Q=X(q);if(Q)return Q;let H=f.home(),B=[VY.join(H,".npm-global/bin"),VY.join(H,".local/bin"),VY.join(H,".bun/bin"),VY.join(H,"bin")];if(f.platform()==="win32"){let V=f.env("APPDATA"),j=f.env("LOCALAPPDATA");if(B.unshift(VY.join(H,"AppData/Roaming/npm")),V)B.unshift(VY.join(V,"npm"));if(j)B.unshift(VY.join(j,"npm"))}for(let V of B){let j=X(V);if(j)return j}throw new SZ(J)}var SZ,_F;var vW=k(()=>{SZ=class SZ extends Error{checkedPaths;constructor(f){super(`GitHub Copilot CLI binary not found. Checked: ${f.join(", ")}. Ensure 'copilot' is on PATH (for example \`npm install -g @github/copilot\` or \`brew install copilot-cli\`).`);this.name="CopilotBinaryNotFoundError",this.checkedPaths=f}};_F={fileExists(f){try{return rF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return pF()},which(f){let J=process.platform==="win32"?"where":"which",Y=aF(J,[f],{encoding:"utf8"});if(Y.status!==0)return;let z=Y.stdout.split(`
23
- `).map((G)=>G.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("copilot:")&&z.includes("aliased to")){let G=z.split("aliased to")[1]?.trim();return G&&$F(G)?G:void 0}return z},platform(){return process.platform}}});import{readFileSync as oF,statSync as sF}from"fs";import{homedir as tF}from"os";import KY from"path";function eF(f,J){let Y=f("CLAUDE_CONFIG_DIR")?.trim();if(Y)return KY.join(Y,".claude.json");return KY.join(J,".claude.json")}function f3(f,J){let z=f("CODEX_HOME")?.trim()??KY.join(J,".codex");return KY.join(z,"auth.json")}function J3(f,J){let z=f("COPILOT_HOME")?.trim()??KY.join(J,".copilot");return KY.join(z,"config.json")}function Y3(f){let J=f.split(".");if(J.length!==3)return null;let Y=J[1];if(!Y)return null;let z=Y.replace(/-/g,"+").replace(/_/g,"/"),G=z+"=".repeat((4-z.length%4)%4);try{let X=Buffer.from(G,"base64").toString("utf8"),q=JSON.parse(X);return typeof q==="object"&&q!==null?q:null}catch{return null}}async function TZ(f){try{return{found:!0,path:await f()}}catch(J){if(J instanceof yZ||J instanceof bZ||J instanceof SZ)return{found:!1,error:"not found on PATH"};return{found:!1,error:J instanceof Error?J.message:String(J)}}}async function mW(f){return(await Promise.all([["claude",()=>f.findClaudeBinary()],["codex",()=>f.findCodexBinary()],["copilot",()=>f.findCopilotBinary()]].map(async([z,G])=>(await TZ(G)).found?z:null))).filter((z)=>z!==null)}function z3(f=cz){if(f!==cz)return mW(f);if(IZ)return IZ;let J=mW(f).catch((Y)=>{throw IZ=null,Y});return IZ=J,J}async function iJ(f=cz){return[...await z3(f),...oQ()]}async function uZ(f=cz){let J=await TZ(()=>f.findClaudeBinary()),Y=eF(f.env,f.home()),z;try{z=f.readFile(Y)}catch(H){return{binary:J,account:{kind:"none"},accountError:`read ${Y}: ${H instanceof Error?H.message:String(H)}`}}if(z===null)return{binary:J,account:{kind:"none"}};let G;try{G=JSON.parse(z)}catch(H){return{binary:J,account:{kind:"none"},accountError:`parse ${Y}: ${H instanceof Error?H.message:String(H)}`}}let X=G?.oauthAccount;if(!X||typeof X!=="object")return{binary:J,account:{kind:"none"}};let q=X,Q=typeof q.emailAddress==="string"?q.emailAddress:void 0;if(!Q)return{binary:J,account:{kind:"none"}};return{binary:J,account:{kind:"oauth",email:Q,organization:typeof q.organizationName==="string"?q.organizationName:void 0,displayName:typeof q.displayName==="string"?q.displayName:void 0,billingType:typeof q.billingType==="string"?q.billingType:void 0}}}async function EZ(f=cz){let J=await TZ(()=>f.findCodexBinary()),Y=f3(f.env,f.home()),z;try{z=f.readFile(Y)}catch(B){return{binary:J,account:{kind:"none"},accountError:`read ${Y}: ${B instanceof Error?B.message:String(B)}`}}if(z===null)return{binary:J,account:{kind:"none"}};let G;try{G=JSON.parse(z)}catch(B){return{binary:J,account:{kind:"none"},accountError:`parse ${Y}: ${B instanceof Error?B.message:String(B)}`}}let X=G??{},q=X.tokens,Q=typeof q?.id_token==="string"?q.id_token:void 0;if(Q){let B=Y3(Q);if(!B)return{binary:J,account:{kind:"none"},accountError:"codex id_token: malformed JWT"};let V=typeof B.email==="string"?B.email:void 0,j=B["https://api.openai.com/auth"],U=typeof j==="object"&&j!==null&&!Array.isArray(j)?j:void 0,L=typeof U?.chatgpt_plan_type==="string"?U.chatgpt_plan_type:void 0;if(V)return{binary:J,account:{kind:"chatgpt",email:V,plan:L}};return{binary:J,account:{kind:"none"},accountError:"codex id_token: no email claim"}}let H=X.OPENAI_API_KEY;if(typeof H==="string"&&H.length>0)return{binary:J,account:{kind:"apikey"}};return{binary:J,account:{kind:"none"}}}async function xZ(f=cz){let J=await TZ(()=>f.findCopilotBinary());for(let X of["COPILOT_GITHUB_TOKEN","GH_TOKEN","GITHUB_TOKEN"])if(f.env(X)?.trim())return{binary:J,account:{kind:"token",source:X}};let Y=J3(f.env,f.home()),z;try{z=f.readFile(Y)}catch(X){return{binary:J,account:{kind:"none"},accountError:`read ${Y}: ${X instanceof Error?X.message:String(X)}`}}if(z===null)return{binary:J,account:{kind:"none"}};let G;try{G=JSON.parse(z)}catch(X){return{binary:J,account:{kind:"none"},accountError:`parse ${Y}: ${X instanceof Error?X.message:String(X)}`}}if(!kH(G))return{binary:J,account:{kind:"none"}};if(cW(G,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:J,account:{kind:"oauth"}};return{binary:J,account:{kind:"none"}}}function kH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function cW(f,J,Y=0){if(Y>4||!kH(f))return!1;for(let[z,G]of Object.entries(f)){if(J.includes(z)&&typeof G==="string"&&G.length>0)return!0;if(kH(G)&&cW(G,J,Y+1))return!0}return!1}var cz,IZ=null;var fz=k(()=>{gf();EW();hW();vW();cz={readFile(f){try{sF(f)}catch(J){if(J.code==="ENOENT")return null;throw J}return oF(f,"utf8")},env(f){return process.env[f]},home(){return tF()},findClaudeBinary(){return uW()},findCodexBinary(){return wW()},findCopilotBinary(){return PW()}}});function nW(f){if(typeof f==="string")return f.length>0?[{type:"text",text:f}]:[];if(!Array.isArray(f))return[];let J=[];for(let Y of f){if(typeof Y==="string"){if(Y.length>0)J.push({type:"text",text:Y});continue}if(!Y||typeof Y!=="object")continue;let z=Y;if(z.type==="text"&&typeof z.text==="string"){J.push({type:"text",text:z.text});continue}if(z.type==="tool_use"){J.push({type:"tool_call",callId:typeof z.id==="string"?z.id:"",name:typeof z.name==="string"?z.name:"",input:z.input});continue}if(z.type==="tool_result"){J.push({type:"tool_result",callId:typeof z.tool_use_id==="string"?z.tool_use_id:"",output:z.content,isError:z.is_error===!0});continue}if(z.type==="thinking"&&typeof z.thinking==="string")J.push({type:"thinking",text:z.thinking})}return J}function dW(f){return f.isMeta===!0||f.isCompactSummary===!0}function iW(f){if(f.length===0)return!1;for(let J of f){if(J.type!=="text")return!1;let Y=J.text.trim();if(!Y.startsWith("<command-name>")&&!Y.startsWith("<command-message>")&&!Y.startsWith("<local-command"))return!1}return!0}import{appendFile as qu,mkdir as Qu,readFile as G3,readdir as NH,stat as X3,unlink as Hu,writeFile as Bu}from"fs/promises";import{homedir as lW}from"os";import wZ from"path";function q3(f){return f.replace(/[/.]/g,"-")}async function pG(f){if(!f)return[];let J=wZ.join(lW(),".claude","projects",q3(f)),Y;try{Y=await NH(J)}catch{return[]}let z=[];for(let G of Y){if(!G.endsWith(".jsonl"))continue;let X=wZ.join(J,G),q=0;try{q=(await X3(X)).mtimeMs}catch{}z.push({sessionId:G.slice(0,-6),path:X,mtimeMs:q})}return z.sort((G,X)=>X.mtimeMs-G.mtimeMs),z}async function aW(f){return(await pG(f))[0]?.mtimeMs??0}async function $W(f,J=Z3){let Y=J.projectsDir(),z=await J.readdir(Y);for(let G of z){let X=wZ.join(Y,G,`${f}.jsonl`),q;try{q=await J.readFile(X)}catch{continue}return Q3(H3(q,f))}return[]}function Q3(f){return f.map((J,Y)=>({msg:J,idx:Y})).sort((J,Y)=>{if(J.msg.timestamp<Y.msg.timestamp)return-1;if(J.msg.timestamp>Y.msg.timestamp)return 1;return J.idx-Y.idx}).map((J)=>J.msg)}function H3(f,J){let Y=[];for(let z of f.split(`
24
- `)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!yH(X))continue;let q=B3(X,J);if(q)Y.push(q)}return Y}function B3(f,J){if(dW(f))return null;let Y=yH(f.message)?f.message:f,z=Y.role;if(z!=="user"&&z!=="assistant"&&z!=="system")return null;if(!("content"in Y))return null;let G=nW(Y.content);if(z==="user"&&iW(G))return null;let X=typeof f.timestamp==="string"?f.timestamp:new Date().toISOString(),q=typeof f.sessionId==="string"?f.sessionId:J,Q=j3(Y.usage);return Q?{role:z,blocks:G,timestamp:X,sessionId:q,usage:Q}:{role:z,blocks:G,timestamp:X,sessionId:q}}function j3(f){if(!yH(f))return;let J=typeof f.input_tokens==="number"?f.input_tokens:void 0,Y=typeof f.output_tokens==="number"?f.output_tokens:void 0;if(J===void 0||Y===void 0)return;let z=typeof f.cache_read_input_tokens==="number"?f.cache_read_input_tokens:void 0,G=typeof f.cache_creation_input_tokens==="number"?f.cache_creation_input_tokens:void 0;return{input_tokens:J,output_tokens:Y,...z!==void 0?{cache_read_input_tokens:z}:{},...G!==void 0?{cache_creation_input_tokens:G}:{}}}function yH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var Z3;var bH=k(()=>{Z3={projectsDir(){return wZ.join(lW(),".claude","projects")},async readdir(f){try{return await NH(f)}catch{return[]}},async readFile(f){return await G3(f,"utf8")},async pathExists(f){try{return await NH(f),!0}catch{return!1}}}});import{fileURLToPath as pW}from"url";function Cf(){if(import.meta.url.endsWith(".js"))return["kobe"];let J=pW(new URL("./index.ts",import.meta.url)),Y=pW(import.meta.resolve("@opentui/solid/preload"));return[process.execPath,"--preload",Y,"--conditions=browser",J]}var lJ=()=>{};function SH(f,J={}){if(J.bareSafe&&W3.test(f))return f;return`'${f.replace(/'/g,"'\\''")}'`}function hZ(f,J={}){return f.map((Y)=>SH(Y,J)).join(" ")}var W3;var IH=k(()=>{W3=/^[A-Za-z0-9_/.:=-]+$/});function sG(f){return`kobe-hidden-${f.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function oW(f){let J=Number.parseInt(f.replace(/^@/,""),10);return Number.isFinite(J)&&J>=0?1000+J:1000}function zz(f){if(!Number.isFinite(f))return Jz;return Math.max(V3,Math.min(K3,Math.round(f)))}function rJ(f){if(!Number.isFinite(f))return null;return Math.max(U3,Math.min(D3,Math.round(f)))}function Xf(f){return SH(f)}function g1(f){return hZ(f)}function R1(f){return`${f}; __rc=$?; [ "$__rc" -ne 0 ] && printf '${"\\n \u26A0 Engine exited (code %s). Check Settings \u2192 Engines, fix the launch command, then press R to relaunch.\\n\\n"}' "$__rc"; exec "\${SHELL:-/bin/sh}"`}function TH(f){return`'${f.replace(/'/g,"'\\''")}'`}function sW(){return`clear; printf ${TH("\\n No task selected\\n\\n Press N to create a task, or pick one on the left.\\n\\n")}; exec "\${SHELL:-/bin/sh}"`}function tW(f,J){let Y=R1(f),z=J?.initScript?.trim();if(!z)return Y;let G=["{",z,"}"].join(`
25
- `);if(J?.markerPath){let X=TH(J.markerPath),q=TH(L3(J.markerPath));return[`if [ ! -f ${X} ]; then`,G,`if [ $? -eq 0 ]; then mkdir -p ${q} && : > ${X}; fi`,"fi",Y].join(`
18
+ `)}}onLine(f){let J;try{J=JSON.parse(f)}catch(z){HY("client-frame",z);return}if(J.type==="event"){this.emit(J);return}if(J.type!=="response")return;let Y=this.pending.get(J.id);if(!Y)return;if(this.pending.delete(J.id),J.error){let z=Error(J.error.message);if(J.error.name)z.name=J.error.name;Y.reject(z)}else Y.resolve(J.payload)}emit(f){for(let J of this.handlers.get(f.name)??[])J(f);for(let J of this.handlers.get("*")??[])J(f)}}var vG=k(()=>{_Y();sY()});function BZ(f){return PM.includes(f)}function m9(f,J,Y){switch(J){case"session-start":case"session-end":return"idle";case"turn-start":return"running";case"turn-complete":return"turn_complete";case"turn-failed":return Y?.failure==="rate_limit"||Y?.failure==="billing"?"rate_limited":"error";case"awaiting-input":return Y?.waiting==="permission"?"permission_needed":"running"}}var PM;var jZ=k(()=>{PM=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function vM(){let f=process.env.KOBE_ENGINE_STATE_TTL_MS;if(f===void 0)return c9;let J=Number(f);return Number.isFinite(J)&&J>0?J:c9}class BH{bus;staleMs;now;activity=new Map;constructor(f,J=vM(),Y=()=>Date.now()){this.bus=f;this.staleMs=J;this.now=Y}report(f,J,Y){let z=this.activity.get(f);if(z?.lapse)clearTimeout(z.lapse);let G=m9(z?.state,J,Y),X=this.now(),q={state:G,detail:Y,at:X};if(G!=="idle"&&G!=="turn_complete")q.lapse=setTimeout(()=>{let Q=this.activity.get(f);if(Q&&Q.at===X)this.publishIdle(f)},this.staleMs),q.lapse.unref?.();this.activity.set(f,q),this.bus.publish("engine-state",this.payload(f,q))}clearTask(f){let J=this.activity.get(f);if(J?.lapse)clearTimeout(J.lapse);if(this.activity.delete(f),J)this.bus.publish("engine-state",{taskId:f,state:"idle",at:this.now()})}snapshotByTask(){let f={};for(let[J,Y]of this.activity)f[J]=this.payload(J,Y);return f}currentNonIdle(){let f=[];for(let[J,Y]of this.activity)if(Y.state!=="idle")f.push(this.payload(J,Y));return f}close(){for(let f of this.activity.values())if(f.lapse)clearTimeout(f.lapse);this.activity.clear()}publishIdle(f){let J={state:"idle",at:this.now()};this.activity.set(f,J),this.bus.publish("engine-state",this.payload(f,J))}payload(f,J){return{taskId:f,state:J.state,...J.detail?{detail:J.detail}:{},at:J.at}}}var c9=600000;var n9=k(()=>{jZ()});import{spawnSync as mM}from"child_process";import{existsSync as cM,statSync as nM}from"fs";import{homedir as dM}from"os";import mG from"path";async function d9(f=iM){let J=[],Y=(B)=>{if(!B)return;return J.push(B),f.fileExists(B)?B:void 0},z=f.which("claude");if(z){if(J.push(`which:${z}`),f.fileExists(z))return z}let G=f.home(),X=Y(mG.join(G,".claude","local","claude"));if(X)return X;let q=f.env("NVM_BIN");if(q){let B=Y(mG.join(q,"claude"));if(B)return B}let Q=mG.join(G,".nvm","versions","node"),H=f.readdir(Q).sort().reverse();for(let B of H){let V=Y(mG.join(Q,B,"bin","claude"));if(V)return V}for(let B of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude","/bin/claude"]){let V=Y(B);if(V)return V}for(let B of[".local/bin/claude",".npm-global/bin/claude",".yarn/bin/claude",".bun/bin/claude","bin/claude"]){let V=Y(mG.join(G,B));if(V)return V}throw new WZ(J)}var WZ,iM;var i9=k(()=>{WZ=class WZ extends Error{checkedPaths;constructor(f){super(`Claude Code binary not found. Checked: ${f.join(", ")}. Ensure 'claude' is on PATH, or install at ~/.claude/local/claude.`);this.name="ClaudeBinaryNotFoundError",this.checkedPaths=f}};iM={fileExists(f){try{return nM(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return dM()},which(f){let J=process.platform==="win32"?"where":"which",Y=mM(J,[f],{encoding:"utf8"});if(Y.status!==0)return;let z=Y.stdout.split(`
19
+ `).map((G)=>G.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("claude:")&&z.includes("aliased to")){let G=z.split("aliased to")[1]?.trim();return G&&cM(G)?G:void 0}return z},readdir(f){try{return _X("fs").readdirSync(f)}catch{return[]}}}});import{spawnSync as lM}from"child_process";import{existsSync as aM,statSync as $M}from"fs";import{homedir as rM}from"os";import l9 from"path";async function a9(f=pM){let J=[],Y=(q)=>{if(!q)return;return J.push(q),f.fileExists(q)?q:void 0},z=f.which("codex");if(z){if(J.push(`which:${z}`),f.fileExists(z))return z}let G=f.home();for(let q of["/opt/homebrew/bin/codex","/usr/local/bin/codex","/usr/bin/codex","/bin/codex"]){let Q=Y(q);if(Q)return Q}let X=f.env("NVM_BIN");if(X){let q=Y(l9.join(X,"codex"));if(q)return q}for(let q of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let Q=Y(l9.join(G,q));if(Q)return Q}throw new VZ(J)}var VZ,pM;var $9=k(()=>{VZ=class VZ extends Error{checkedPaths;constructor(f){super(`Codex CLI binary not found. Checked: ${f.join(", ")}. Ensure 'codex' is on PATH (e.g. \`brew install codex\` or the official installer).`);this.name="CodexBinaryNotFoundError",this.checkedPaths=f}};pM={fileExists(f){try{return $M(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return rM()},which(f){let J=process.platform==="win32"?"where":"which",Y=lM(J,[f],{encoding:"utf8"});if(Y.status!==0)return;let z=Y.stdout.split(`
20
+ `).map((G)=>G.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("codex:")&&z.includes("aliased to")){let G=z.split("aliased to")[1]?.trim();return G&&aM(G)?G:void 0}return z},readdir(f){try{return _X("fs").readdirSync(f)}catch{return[]}}}});import{spawnSync as _M}from"child_process";import{existsSync as oM,statSync as sM}from"fs";import{homedir as tM}from"os";import BY from"path";async function r9(f=eM){let J=[],Y=(V)=>{if(!V)return;return J.push(V),f.fileExists(V)?V:void 0},z=f.which("copilot");if(z){if(J.push(`which:${z}`),f.fileExists(z))return z}let G=f.platform()==="win32"?["copilot.exe","copilot.cmd","copilot"]:["copilot"],X=(V)=>{if(!V)return;for(let j of G){let U=Y(BY.join(V,j));if(U)return U}return};for(let V of["/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin"]){let j=X(V);if(j)return j}let q=f.env("NVM_BIN"),Q=X(q);if(Q)return Q;let H=f.home(),B=[BY.join(H,".npm-global/bin"),BY.join(H,".local/bin"),BY.join(H,".bun/bin"),BY.join(H,"bin")];if(f.platform()==="win32"){let V=f.env("APPDATA"),j=f.env("LOCALAPPDATA");if(B.unshift(BY.join(H,"AppData/Roaming/npm")),V)B.unshift(BY.join(V,"npm"));if(j)B.unshift(BY.join(j,"npm"))}for(let V of B){let j=X(V);if(j)return j}throw new KZ(J)}var KZ,eM;var p9=k(()=>{KZ=class KZ extends Error{checkedPaths;constructor(f){super(`GitHub Copilot CLI binary not found. Checked: ${f.join(", ")}. Ensure 'copilot' is on PATH (for example \`npm install -g @github/copilot\` or \`brew install copilot-cli\`).`);this.name="CopilotBinaryNotFoundError",this.checkedPaths=f}};eM={fileExists(f){try{return sM(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return tM()},which(f){let J=process.platform==="win32"?"where":"which",Y=_M(J,[f],{encoding:"utf8"});if(Y.status!==0)return;let z=Y.stdout.split(`
21
+ `).map((G)=>G.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("copilot:")&&z.includes("aliased to")){let G=z.split("aliased to")[1]?.trim();return G&&oM(G)?G:void 0}return z},platform(){return process.platform}}});import{readFileSync as fF,statSync as JF}from"fs";import{homedir as YF}from"os";import jY from"path";function zF(f,J){let Y=f("CLAUDE_CONFIG_DIR")?.trim();if(Y)return jY.join(Y,".claude.json");return jY.join(J,".claude.json")}function GF(f,J){let z=f("CODEX_HOME")?.trim()??jY.join(J,".codex");return jY.join(z,"auth.json")}function XF(f,J){let z=f("COPILOT_HOME")?.trim()??jY.join(J,".copilot");return jY.join(z,"config.json")}function ZF(f){let J=f.split(".");if(J.length!==3)return null;let Y=J[1];if(!Y)return null;let z=Y.replace(/-/g,"+").replace(/_/g,"/"),G=z+"=".repeat((4-z.length%4)%4);try{let X=Buffer.from(G,"base64").toString("utf8"),q=JSON.parse(X);return typeof q==="object"&&q!==null?q:null}catch{return null}}async function DZ(f){try{return{found:!0,path:await f()}}catch(J){if(J instanceof WZ||J instanceof VZ||J instanceof KZ)return{found:!1,error:"not found on PATH"};return{found:!1,error:J instanceof Error?J.message:String(J)}}}async function _9(f){return(await Promise.all([["claude",()=>f.findClaudeBinary()],["codex",()=>f.findCodexBinary()],["copilot",()=>f.findCopilotBinary()]].map(async([z,G])=>(await DZ(G)).found?z:null))).filter((z)=>z!==null)}function qF(f=wz){if(f!==wz)return _9(f);if(UZ)return UZ;let J=_9(f).catch((Y)=>{throw UZ=null,Y});return UZ=J,J}async function iJ(f=wz){return[...await qF(f),...fH()]}async function LZ(f=wz){let J=await DZ(()=>f.findClaudeBinary()),Y=zF(f.env,f.home()),z;try{z=f.readFile(Y)}catch(H){return{binary:J,account:{kind:"none"},accountError:`read ${Y}: ${H instanceof Error?H.message:String(H)}`}}if(z===null)return{binary:J,account:{kind:"none"}};let G;try{G=JSON.parse(z)}catch(H){return{binary:J,account:{kind:"none"},accountError:`parse ${Y}: ${H instanceof Error?H.message:String(H)}`}}let X=G?.oauthAccount;if(!X||typeof X!=="object")return{binary:J,account:{kind:"none"}};let q=X,Q=typeof q.emailAddress==="string"?q.emailAddress:void 0;if(!Q)return{binary:J,account:{kind:"none"}};return{binary:J,account:{kind:"oauth",email:Q,organization:typeof q.organizationName==="string"?q.organizationName:void 0,displayName:typeof q.displayName==="string"?q.displayName:void 0,billingType:typeof q.billingType==="string"?q.billingType:void 0}}}async function MZ(f=wz){let J=await DZ(()=>f.findCodexBinary()),Y=GF(f.env,f.home()),z;try{z=f.readFile(Y)}catch(B){return{binary:J,account:{kind:"none"},accountError:`read ${Y}: ${B instanceof Error?B.message:String(B)}`}}if(z===null)return{binary:J,account:{kind:"none"}};let G;try{G=JSON.parse(z)}catch(B){return{binary:J,account:{kind:"none"},accountError:`parse ${Y}: ${B instanceof Error?B.message:String(B)}`}}let X=G??{},q=X.tokens,Q=typeof q?.id_token==="string"?q.id_token:void 0;if(Q){let B=ZF(Q);if(!B)return{binary:J,account:{kind:"none"},accountError:"codex id_token: malformed JWT"};let V=typeof B.email==="string"?B.email:void 0,j=B["https://api.openai.com/auth"],U=typeof j==="object"&&j!==null&&!Array.isArray(j)?j:void 0,L=typeof U?.chatgpt_plan_type==="string"?U.chatgpt_plan_type:void 0;if(V)return{binary:J,account:{kind:"chatgpt",email:V,plan:L}};return{binary:J,account:{kind:"none"},accountError:"codex id_token: no email claim"}}let H=X.OPENAI_API_KEY;if(typeof H==="string"&&H.length>0)return{binary:J,account:{kind:"apikey"}};return{binary:J,account:{kind:"none"}}}async function FZ(f=wz){let J=await DZ(()=>f.findCopilotBinary());for(let X of["COPILOT_GITHUB_TOKEN","GH_TOKEN","GITHUB_TOKEN"])if(f.env(X)?.trim())return{binary:J,account:{kind:"token",source:X}};let Y=XF(f.env,f.home()),z;try{z=f.readFile(Y)}catch(X){return{binary:J,account:{kind:"none"},accountError:`read ${Y}: ${X instanceof Error?X.message:String(X)}`}}if(z===null)return{binary:J,account:{kind:"none"}};let G;try{G=JSON.parse(z)}catch(X){return{binary:J,account:{kind:"none"},accountError:`parse ${Y}: ${X instanceof Error?X.message:String(X)}`}}if(!jH(G))return{binary:J,account:{kind:"none"}};if(o9(G,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:J,account:{kind:"oauth"}};return{binary:J,account:{kind:"none"}}}function jH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function o9(f,J,Y=0){if(Y>4||!jH(f))return!1;for(let[z,G]of Object.entries(f)){if(J.includes(z)&&typeof G==="string"&&G.length>0)return!0;if(jH(G)&&o9(G,J,Y+1))return!0}return!1}var wz,UZ=null;var tY=k(()=>{Af();i9();$9();p9();wz={readFile(f){try{JF(f)}catch(J){if(J.code==="ENOENT")return null;throw J}return fF(f,"utf8")},env(f){return process.env[f]},home(){return YF()},findClaudeBinary(){return d9()},findCodexBinary(){return a9()},findCopilotBinary(){return r9()}}});function s9(f){if(typeof f==="string")return f.length>0?[{type:"text",text:f}]:[];if(!Array.isArray(f))return[];let J=[];for(let Y of f){if(typeof Y==="string"){if(Y.length>0)J.push({type:"text",text:Y});continue}if(!Y||typeof Y!=="object")continue;let z=Y;if(z.type==="text"&&typeof z.text==="string"){J.push({type:"text",text:z.text});continue}if(z.type==="tool_use"){J.push({type:"tool_call",callId:typeof z.id==="string"?z.id:"",name:typeof z.name==="string"?z.name:"",input:z.input});continue}if(z.type==="tool_result"){J.push({type:"tool_result",callId:typeof z.tool_use_id==="string"?z.tool_use_id:"",output:z.content,isError:z.is_error===!0});continue}if(z.type==="thinking"&&typeof z.thinking==="string")J.push({type:"thinking",text:z.thinking})}return J}function t9(f){return f.isMeta===!0||f.isCompactSummary===!0}function e9(f){if(f.length===0)return!1;for(let J of f){if(J.type!=="text")return!1;let Y=J.text.trim();if(!Y.startsWith("<command-name>")&&!Y.startsWith("<command-message>")&&!Y.startsWith("<local-command"))return!1}return!0}import{appendFile as LT,mkdir as MT,readFile as QF,readdir as WH,stat as HF,unlink as FT,writeFile as OT}from"fs/promises";import{homedir as fW}from"os";import OZ from"path";function jF(f){return f.replace(/[/.]/g,"-")}async function cG(f){if(!f)return[];let J=OZ.join(fW(),".claude","projects",jF(f)),Y;try{Y=await WH(J)}catch{return[]}let z=[];for(let G of Y){if(!G.endsWith(".jsonl"))continue;let X=OZ.join(J,G),q=0;try{q=(await HF(X)).mtimeMs}catch{}z.push({sessionId:G.slice(0,-6),path:X,mtimeMs:q})}return z.sort((G,X)=>X.mtimeMs-G.mtimeMs),z}async function JW(f){return(await cG(f))[0]?.mtimeMs??0}async function YW(f,J=BF){let Y=J.projectsDir(),z=await J.readdir(Y);for(let G of z){let X=OZ.join(Y,G,`${f}.jsonl`),q;try{q=await J.readFile(X)}catch{continue}return WF(VF(q,f))}return[]}function WF(f){return f.map((J,Y)=>({msg:J,idx:Y})).sort((J,Y)=>{if(J.msg.timestamp<Y.msg.timestamp)return-1;if(J.msg.timestamp>Y.msg.timestamp)return 1;return J.idx-Y.idx}).map((J)=>J.msg)}function VF(f,J){let Y=[];for(let z of f.split(`
22
+ `)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!VH(X))continue;let q=KF(X,J);if(q)Y.push(q)}return Y}function KF(f,J){if(t9(f))return null;let Y=VH(f.message)?f.message:f,z=Y.role;if(z!=="user"&&z!=="assistant"&&z!=="system")return null;if(!("content"in Y))return null;let G=s9(Y.content);if(z==="user"&&e9(G))return null;let X=typeof f.timestamp==="string"?f.timestamp:new Date().toISOString(),q=typeof f.sessionId==="string"?f.sessionId:J,Q=UF(Y.usage);return Q?{role:z,blocks:G,timestamp:X,sessionId:q,usage:Q}:{role:z,blocks:G,timestamp:X,sessionId:q}}function UF(f){if(!VH(f))return;let J=typeof f.input_tokens==="number"?f.input_tokens:void 0,Y=typeof f.output_tokens==="number"?f.output_tokens:void 0;if(J===void 0||Y===void 0)return;let z=typeof f.cache_read_input_tokens==="number"?f.cache_read_input_tokens:void 0,G=typeof f.cache_creation_input_tokens==="number"?f.cache_creation_input_tokens:void 0;return{input_tokens:J,output_tokens:Y,...z!==void 0?{cache_read_input_tokens:z}:{},...G!==void 0?{cache_creation_input_tokens:G}:{}}}function VH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var BF;var KH=k(()=>{BF={projectsDir(){return OZ.join(fW(),".claude","projects")},async readdir(f){try{return await WH(f)}catch{return[]}},async readFile(f){return await QF(f,"utf8")},async pathExists(f){try{return await WH(f),!0}catch{return!1}}}});import{fileURLToPath as GW}from"url";function Cf(){if(import.meta.url.endsWith(".js"))return["kobe"];let J=GW(new URL("./index.ts",import.meta.url)),Y=GW(import.meta.resolve("@opentui/solid/preload"));return[process.execPath,"--preload",Y,"--conditions=browser",J]}var lJ=()=>{};function UH(f,J={}){if(J.bareSafe&&DF.test(f))return f;return`'${f.replace(/'/g,"'\\''")}'`}function AZ(f,J={}){return f.map((Y)=>UH(Y,J)).join(" ")}var DF;var DH=k(()=>{DF=/^[A-Za-z0-9_/.:=-]+$/});function iG(f){return`kobe-hidden-${f.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function ZW(f){let J=Number.parseInt(f.replace(/^@/,""),10);return Number.isFinite(J)&&J>=0?1000+J:1000}function Jz(f){if(!Number.isFinite(f))return eY;return Math.max(LF,Math.min(MF,Math.round(f)))}function rJ(f){if(!Number.isFinite(f))return null;return Math.max(FF,Math.min(OF,Math.round(f)))}function Xf(f){return UH(f)}function g1(f){return AZ(f)}function R1(f){return`${f}; __rc=$?; [ "$__rc" -ne 0 ] && printf '${"\\n \u26A0 Engine exited (code %s). Check Settings \u2192 Engines, fix the launch command, then press R to relaunch.\\n\\n"}' "$__rc"; exec "\${SHELL:-/bin/sh}"`}function LH(f){return`'${f.replace(/'/g,"'\\''")}'`}function qW(){return`clear; printf ${LH("\\n No task selected\\n\\n Press N to create a task, or pick one on the left.\\n\\n")}; exec "\${SHELL:-/bin/sh}"`}function QW(f,J){let Y=R1(f),z=J?.initScript?.trim();if(!z)return Y;let G=["{",z,"}"].join(`
23
+ `);if(J?.markerPath){let X=LH(J.markerPath),q=LH(AF(J.markerPath));return[`if [ ! -f ${X} ]; then`,G,`if [ $? -eq 0 ]; then mkdir -p ${q} && : > ${X}; fi`,"fi",Y].join(`
26
24
  `)}return[G,Y].join(`
27
- `)}function L3(f){let J=f.lastIndexOf("/");return J<=0?".":f.slice(0,J)}function _W(f){return`cd ${Xf(f)} && while :; do clear; printf "\\033[1m# %s\\033[0m\\n\\n" ${Xf(f)}; git status --short --branch 2>/dev/null | sed 's/^/ /' || true; printf "\\n"; if command -v lsd >/dev/null 2>&1; then lsd --tree --git -I node_modules -I .git --depth 2 .; elif command -v eza >/dev/null 2>&1; then eza --tree --git -L 2 -I 'node_modules|.git' .; elif command -v tree >/dev/null 2>&1; then tree -L 2 -I 'node_modules|.git'; else ls -la; fi; sleep 2; done`}function eW(f){let J=Xf(f.worktree),Y=Xf(f.relPath),z=f.cliInvocation.map(Xf).join(" "),G=`cd ${J} && if ! git diff --quiet HEAD -- ${Y} 2>/dev/null; then git diff HEAD -- ${Y} | { delta --paging=always 2>/dev/null || less -R; }; else bat --style=plain --paging=always ${Y} 2>/dev/null || \${PAGER:-less} ${Y} 2>/dev/null || cat ${Y}; fi`;return`${z} ops --worktree ${J} --preview ${Y} || { ${G}; }`}function fV(f){return`${g1([...f.cliInvocation,"update-page"])}`}function JV(f){let J=f.opener??"open";return[`tmux -L ${Xf(f.tmuxSocket)} capture-pane -Jp -t '#{pane_id}' -S -500`,`grep -oiE 'https?://[^ "'\\''()<>]+'`,"awk '!seen[$0]++'","{ command -v fzf >/dev/null && fzf --reverse || tail -1; }",`xargs -I{} ${J} {}`].join(" | ")}function DY(f,J={}){let Y=[...f,"tasks"];if(J.initialTaskId)Y.push("--initial-task-id",J.initialTaskId);return g1(Y)}function nz(f){if(f.taskId&&f.claudePaneId){let J=f.cliInvocation.map(Xf).join(" "),Y=f.vendor?` --vendor ${Xf(f.vendor)}`:"";return`KOBE_FILETREE_WATCH=1 ${J} ops --task-id ${Xf(f.taskId)} --worktree ${Xf(f.cwd)} --target-pane ${Xf(f.claudePaneId)}${Y} || { ${_W(f.cwd)}; }`}return _W(f.cwd)}var Jz=32,i1="tasks",Yz="claude",GJ="ops",XJ="shell",_G="workspace_aux",uH=4,ZJ="@kobe_hidden_shell_pane",A1="@kobe_hidden_tasks_pane",UY="@kobe_zen_panes",oG="@kobe_zen",aJ="@kobe_tasks_width",V3=16,K3=120,PZ=60,tG=50,Gz="@kobe_right_width_pct",$J="@kobe_ops_height_pct",U3=10,D3=90;var qJ=k(()=>{IH()});import{mkdir as M3,readFile as F3,writeFile as O3}from"fs/promises";import{dirname as A3}from"path";function g3(f){if(typeof f!=="string")return"other";if(f==="rate_limit"||f==="overloaded")return"rate_limit";if(f==="billing_error")return"billing";return"other"}function kJ(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}async function C3(f){try{let J=JSON.parse(await F3(f,"utf8"));return kJ(J)?J:{}}catch{return{}}}function k3(f){if(!kJ(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>kJ(J)&&typeof J.command==="string"&&J.command.includes(EH))}function N3(f){if(!kJ(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>kJ(J)&&typeof J.command==="string"&&R3.some((Y)=>J.command.includes(Y)))}function y3(f,J){let{hooks:Y,...z}=f,{WorktreeCreate:G,...X}=kJ(Y)?Y:{},Q=(Array.isArray(G)?G:[]).filter((B)=>!k3(B));if(J!==null)Q.push({hooks:[{type:"command",command:J}]});let H={...X};if(Q.length>0)H.WorktreeCreate=Q;return Object.keys(H).length>0?{...z,hooks:H}:{...z}}function b3(f=Cf()){let J={};for(let{event:Y,matcher:z,verb:G}of vZ){let q={hooks:[{type:"command",command:g1([...f,"hook",G])}]};if(z)q.matcher=z;J[Y]=[q]}return J}function YV(f,J,Y=Cf()){let{hooks:z,...G}=f,X=kJ(z)?{...z}:{},q=J?b3(Y):{};for(let{event:Q}of vZ){let B=(Array.isArray(X[Q])?X[Q]:[]).filter((V)=>!N3(V));if(J&&Array.isArray(q[Q]))B.push(...q[Q]);if(B.length>0)X[Q]=B;else delete X[Q]}return Object.keys(X).length>0?{...G,hooks:X}:{...G}}function S3(f=Cf()){return{PostToolUse:[{matcher:"Bash",hooks:[{type:"command",command:g1([...f,"hook",EH])}]}]}}function I3(f){if(!kJ(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>kJ(J)&&typeof J.command==="string"&&J.command.includes(EH))}function zV(f,J,Y=Cf()){let{hooks:z,...G}=f,X=kJ(z)?{...z}:{},q="PostToolUse",H=(Array.isArray(X.PostToolUse)?X.PostToolUse:[]).filter((B)=>!I3(B));if(J)H.push(...S3(Y).PostToolUse);if(H.length>0)X.PostToolUse=H;else delete X.PostToolUse;return Object.keys(X).length>0?{...G,hooks:X}:{...G}}class xH{vendor="claude";supportsHooks(){return!0}activityDetailFromPayload(f,J){if(f==="turn-failed")return{failure:g3(J.error_type)};if(f==="awaiting-input")return{waiting:"permission"};return}supportsWorktreeSync(){return!0}async installActivityHooks(f){await this.editSettings(f,(J)=>YV(J,!0))}async removeActivityHooks(f){await this.editSettings(f,(J)=>YV(J,!1))}async removeWorktreeSyncHook(f){await this.editSettings(f,(J)=>y3(J,null))}async installWorktreeWatchHook(f){await this.editSettings(f,(J)=>zV(J,!0))}async removeWorktreeWatchHook(f){await this.editSettings(f,(J)=>zV(J,!1))}async editSettings(f,J){try{let Y=await C3(f),z=J(Y);if(JSON.stringify(z)===JSON.stringify(Y))return;await M3(A3(f),{recursive:!0}),await O3(f,`${JSON.stringify(z,null,2)}
28
- `)}catch{}}}var vZ,Cu,R3,EH="worktree-created";var GV=k(()=>{lJ();qJ();vZ=[{event:"SessionStart",verb:"session-start"},{event:"UserPromptSubmit",verb:"turn-start"},{event:"Stop",verb:"turn-complete"},{event:"StopFailure",verb:"turn-failed"},{event:"Notification",matcher:"permission_prompt",verb:"awaiting-input"},{event:"SessionEnd",verb:"session-end"}],Cu=vZ.map((f)=>f.event);R3=vZ.map((f)=>g1(["hook",f.verb]))});function wH(f){if(typeof f==="string")return f.length>0?[{type:"text",text:f}]:[];if(!Array.isArray(f))return[];let J=[];for(let Y of f){if(typeof Y==="string"){if(Y.length>0)J.push({type:"text",text:Y});continue}if(!T3(Y))continue;let z=typeof Y.type==="string"?Y.type:void 0;if(z==="input_text"||z==="output_text"){let G=typeof Y.text==="string"?Y.text:"";if(G.length>0)J.push({type:"text",text:G});continue}if(z)J.push({type:"text",text:`[codex: ${z}]`})}return J}function T3(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function XV(f){if(f.length===0)return!1;for(let J of f){if(J.type!=="text")return!1;let Y=(J.text??"").trim();if(!u3(Y)&&!E3(Y))return!1}return!0}function u3(f){return f.startsWith("<environment_context>")&&f.endsWith("</environment_context>")}function E3(f){return f.startsWith("# AGENTS.md instructions for ")&&f.includes(`
25
+ `)}function AF(f){let J=f.lastIndexOf("/");return J<=0?".":f.slice(0,J)}function XW(f){return`cd ${Xf(f)} && while :; do clear; printf "\\033[1m# %s\\033[0m\\n\\n" ${Xf(f)}; git status --short --branch 2>/dev/null | sed 's/^/ /' || true; printf "\\n"; if command -v lsd >/dev/null 2>&1; then lsd --tree --git -I node_modules -I .git --depth 2 .; elif command -v eza >/dev/null 2>&1; then eza --tree --git -L 2 -I 'node_modules|.git' .; elif command -v tree >/dev/null 2>&1; then tree -L 2 -I 'node_modules|.git'; else ls -la; fi; sleep 2; done`}function HW(f){let J=Xf(f.worktree),Y=Xf(f.relPath),z=f.cliInvocation.map(Xf).join(" "),G=`cd ${J} && if ! git diff --quiet HEAD -- ${Y} 2>/dev/null; then git diff HEAD -- ${Y} | { delta --paging=always 2>/dev/null || less -R; }; else bat --style=plain --paging=always ${Y} 2>/dev/null || \${PAGER:-less} ${Y} 2>/dev/null || cat ${Y}; fi`;return`${z} ops --worktree ${J} --preview ${Y} || { ${G}; }`}function BW(f){return`${g1([...f.cliInvocation,"update-page"])}`}function jW(f){let J=f.opener??"open";return[`tmux -L ${Xf(f.tmuxSocket)} capture-pane -Jp -t '#{pane_id}' -S -500`,`grep -oiE 'https?://[^ "'\\''()<>]+'`,"awk '!seen[$0]++'","{ command -v fzf >/dev/null && fzf --reverse || tail -1; }",`xargs -I{} ${J} {}`].join(" | ")}function VY(f,J={}){let Y=[...f,"tasks"];if(J.initialTaskId)Y.push("--initial-task-id",J.initialTaskId);return g1(Y)}function hz(f){if(f.taskId&&f.claudePaneId){let J=f.cliInvocation.map(Xf).join(" "),Y=f.vendor?` --vendor ${Xf(f.vendor)}`:"";return`KOBE_FILETREE_WATCH=1 ${J} ops --task-id ${Xf(f.taskId)} --worktree ${Xf(f.cwd)} --target-pane ${Xf(f.claudePaneId)}${Y} || { ${XW(f.cwd)}; }`}return XW(f.cwd)}var eY=32,i1="tasks",fz="claude",fJ="ops",JJ="shell",nG="workspace_aux",MH=4,YJ="@kobe_hidden_shell_pane",A1="@kobe_hidden_tasks_pane",WY="@kobe_zen_panes",dG="@kobe_zen",aJ="@kobe_tasks_width",LF=16,MF=120,gZ=60,lG=50,Yz="@kobe_right_width_pct",$J="@kobe_ops_height_pct",FF=10,OF=90;var zJ=k(()=>{DH()});import{mkdir as gF,readFile as RF,writeFile as CF}from"fs/promises";import{dirname as kF}from"path";function NF(f){if(typeof f!=="string")return"other";if(f==="rate_limit"||f==="overloaded")return"rate_limit";if(f==="billing_error")return"billing";return"other"}function gJ(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}async function bF(f){try{let J=JSON.parse(await RF(f,"utf8"));return gJ(J)?J:{}}catch{return{}}}function SF(f){if(!gJ(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>gJ(J)&&typeof J.command==="string"&&J.command.includes(FH))}function IF(f){if(!gJ(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>gJ(J)&&typeof J.command==="string"&&yF.some((Y)=>J.command.includes(Y)))}function TF(f,J){let{hooks:Y,...z}=f,{WorktreeCreate:G,...X}=gJ(Y)?Y:{},Q=(Array.isArray(G)?G:[]).filter((B)=>!SF(B));if(J!==null)Q.push({hooks:[{type:"command",command:J}]});let H={...X};if(Q.length>0)H.WorktreeCreate=Q;return Object.keys(H).length>0?{...z,hooks:H}:{...z}}function uF(f=Cf()){let J={};for(let{event:Y,matcher:z,verb:G}of RZ){let q={hooks:[{type:"command",command:g1([...f,"hook",G])}]};if(z)q.matcher=z;J[Y]=[q]}return J}function WW(f,J,Y=Cf()){let{hooks:z,...G}=f,X=gJ(z)?{...z}:{},q=J?uF(Y):{};for(let{event:Q}of RZ){let B=(Array.isArray(X[Q])?X[Q]:[]).filter((V)=>!IF(V));if(J&&Array.isArray(q[Q]))B.push(...q[Q]);if(B.length>0)X[Q]=B;else delete X[Q]}return Object.keys(X).length>0?{...G,hooks:X}:{...G}}function EF(f=Cf()){return{PostToolUse:[{matcher:"Bash",hooks:[{type:"command",command:g1([...f,"hook",FH])}]}]}}function xF(f){if(!gJ(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>gJ(J)&&typeof J.command==="string"&&J.command.includes(FH))}function VW(f,J,Y=Cf()){let{hooks:z,...G}=f,X=gJ(z)?{...z}:{},q="PostToolUse",H=(Array.isArray(X.PostToolUse)?X.PostToolUse:[]).filter((B)=>!xF(B));if(J)H.push(...EF(Y).PostToolUse);if(H.length>0)X.PostToolUse=H;else delete X.PostToolUse;return Object.keys(X).length>0?{...G,hooks:X}:{...G}}class OH{vendor="claude";supportsHooks(){return!0}activityDetailFromPayload(f,J){if(f==="turn-failed")return{failure:NF(J.error_type)};if(f==="awaiting-input")return{waiting:"permission"};return}supportsWorktreeSync(){return!0}async installActivityHooks(f){await this.editSettings(f,(J)=>WW(J,!0))}async removeActivityHooks(f){await this.editSettings(f,(J)=>WW(J,!1))}async removeWorktreeSyncHook(f){await this.editSettings(f,(J)=>TF(J,null))}async installWorktreeWatchHook(f){await this.editSettings(f,(J)=>VW(J,!0))}async removeWorktreeWatchHook(f){await this.editSettings(f,(J)=>VW(J,!1))}async editSettings(f,J){try{let Y=await bF(f),z=J(Y);if(JSON.stringify(z)===JSON.stringify(Y))return;await gF(kF(f),{recursive:!0}),await CF(f,`${JSON.stringify(z,null,2)}
26
+ `)}catch{}}}var RZ,xT,yF,FH="worktree-created";var KW=k(()=>{lJ();zJ();RZ=[{event:"SessionStart",verb:"session-start"},{event:"UserPromptSubmit",verb:"turn-start"},{event:"Stop",verb:"turn-complete"},{event:"StopFailure",verb:"turn-failed"},{event:"Notification",matcher:"permission_prompt",verb:"awaiting-input"},{event:"SessionEnd",verb:"session-end"}],xT=RZ.map((f)=>f.event);yF=RZ.map((f)=>g1(["hook",f.verb]))});function AH(f){if(typeof f==="string")return f.length>0?[{type:"text",text:f}]:[];if(!Array.isArray(f))return[];let J=[];for(let Y of f){if(typeof Y==="string"){if(Y.length>0)J.push({type:"text",text:Y});continue}if(!wF(Y))continue;let z=typeof Y.type==="string"?Y.type:void 0;if(z==="input_text"||z==="output_text"){let G=typeof Y.text==="string"?Y.text:"";if(G.length>0)J.push({type:"text",text:G});continue}if(z)J.push({type:"text",text:`[codex: ${z}]`})}return J}function wF(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function UW(f){if(f.length===0)return!1;for(let J of f){if(J.type!=="text")return!1;let Y=(J.text??"").trim();if(!hF(Y)&&!PF(Y))return!1}return!0}function hF(f){return f.startsWith("<environment_context>")&&f.endsWith("</environment_context>")}function PF(f){return f.startsWith("# AGENTS.md instructions for ")&&f.includes(`
29
27
  <INSTRUCTIONS>
30
- `)&&f.endsWith("</INSTRUCTIONS>")}var ZV=()=>{};function qV(f,J={}){let Y=hH(f.input_tokens,0),z=hH(f.cached_input_tokens,0),G=hH(f.output_tokens,0),X=Math.max(0,Y-z);if(Y<=0&&G<=0&&z<=0)return;return{input_tokens:X,output_tokens:G,...z>0?{cache_read_input_tokens:z}:{},...x3(J.contextWindowTokens)?{context_window_tokens:J.contextWindowTokens}:{}}}function hH(f,J){return typeof f==="number"&&Number.isFinite(f)?f:J}function x3(f){return typeof f==="number"&&Number.isFinite(f)&&f>0}import{readFile as w3,readdir as h3,stat as P3,unlink as Tu}from"fs/promises";import{homedir as v3}from"os";import Xz from"path";async function cH(f=Zz){let J=f.sessionsDir(),Y=(await f.readdir(J)).sort().reverse(),z=[];for(let G of Y){let X=Xz.join(J,G),q=(await f.readdir(X)).sort().reverse();for(let Q of q){let H=Xz.join(X,Q),B=(await f.readdir(H)).sort().reverse();for(let V of B){let j=Xz.join(H,V),U=(await f.readdir(j)).filter((L)=>L.startsWith("rollout-")&&L.endsWith(".jsonl"));U.sort().reverse();for(let L of U)z.push(Xz.join(j,L))}}}return z}async function m3(f,J=Zz){if(!f)return;let Y=f.toLowerCase(),z=await cH(J);for(let G of z)if(Xz.basename(G).match(jV)?.[1]?.toLowerCase()===Y)return G;return}function c3(f){for(let J of f.split(`
31
- `)){let Y=J.trim();if(!Y)continue;try{let z=JSON.parse(Y);if(z.type==="session_meta")return z.payload?.cwd??""}catch{}return""}return""}async function WV(f,J){let Y=QV.get(J);if(!Y)Y=new Map,QV.set(J,Y);let z=Y.get(f);if(z!==void 0)return z;let G;try{G=await J.readFile(f)}catch{return null}let X=c3(G);if(X)Y.set(f,X);return X}async function VV(f,J=Zz){if(!f)return[];let Y=await cH(J),z=[],G=0;for(let X of Y){if(G>=n3)break;if(G++,await WV(X,J)!==f)continue;let q=Xz.basename(X).match(jV)?.[1];if(q)z.push(q)}return z.reverse()}async function nH(f,J=Zz){if(!f)return null;let Y=await cH(J),z=0;for(let G of Y){if(z>=d3)break;if(z++,await WV(G,J)!==f)continue;try{return{path:G,mtimeMs:(await J.stat(G)).mtimeMs}}catch{}}return null}async function KV(f,J=Zz){return(await nH(f,J))?.mtimeMs??0}async function UV(f,J=Zz){return(await i3(f,J)).messages}async function i3(f,J=Zz){let Y=await m3(f,J);if(!Y)return{messages:[]};let z;try{z=await J.readFile(Y)}catch{return{messages:[]}}let G=l3(a3(z,f)),X=o3(z);return{messages:G,...X?{usageMetrics:X}:{}}}function l3(f){return f.map((J,Y)=>({msg:J,idx:Y})).sort((J,Y)=>{if(J.msg.timestamp<Y.msg.timestamp)return-1;if(J.msg.timestamp>Y.msg.timestamp)return 1;return J.idx-Y.idx}).map((J)=>J.msg)}function a3(f,J){let Y=[];for(let z of f.split(`
32
- `)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!eG(X))continue;if(X.type!=="response_item")continue;let q=eG(X.payload)?X.payload:void 0;if(!q)continue;let Q=typeof X.timestamp==="string"?X.timestamp:new Date().toISOString(),H=$3(q,Q,J);if(H)Y.push(H)}return Y}function $3(f,J,Y){if(f.type==="message"){let z=f.role;if(z!=="user"&&z!=="assistant"&&z!=="system")return;let G=wH(f.content);if(z==="user"&&XV(G))return;return{role:z,blocks:G,timestamp:J,sessionId:Y}}if(f.type==="reasoning")return r3(f,J,Y);if(f.type==="function_call")return PH(f,J,Y,{name:mH(f.name,"function_call"),input:vH(f.arguments)});if(f.type==="custom_tool_call")return PH(f,J,Y,{name:mH(f.name,"custom_tool_call"),input:vH(f.input)});if(f.type==="tool_search_call")return PH(f,J,Y,{name:"tool_search_call",input:mZ(f,["type","call_id","status"])});if(f.type==="function_call_output"||f.type==="custom_tool_call_output")return HV(f,J,Y,vH(f.output));if(f.type==="tool_search_output")return HV(f,J,Y,mZ(f,["type","call_id"]));if(f.type==="web_search_call"||f.type==="image_generation_call"||f.type==="local_shell_call")return p3(f,J,Y);return}function r3(f,J,Y){let z=_3(f);if(z.length===0)return;return{role:"assistant",blocks:[{type:"thinking",text:z}],timestamp:J,sessionId:Y}}function PH(f,J,Y,z){let G=typeof f.call_id==="string"?f.call_id:void 0;if(!G)return;return{role:"assistant",blocks:[{type:"tool_call",callId:G,name:z.name,input:z.input}],timestamp:J,sessionId:Y}}function HV(f,J,Y,z){let G=typeof f.call_id==="string"?f.call_id:void 0;if(!G)return;return{role:"user",blocks:[{type:"tool_result",callId:G,output:z,isError:!1}],timestamp:J,sessionId:Y}}function p3(f,J,Y){let z=typeof f.type==="string"?f.type:"tool",G=typeof f.call_id==="string"&&f.call_id.length>0?f.call_id:`${z}:${J}`,X=mH(f.name,z),q=mZ(f,["type","call_id","status"]),Q=mZ(f,["type","call_id"]);return{role:"assistant",timestamp:J,sessionId:Y,blocks:[{type:"tool_call",callId:G,name:X,input:q},{type:"tool_result",callId:G,output:Q,isError:!1}]}}function _3(f){let J=BV(f.content);if(J.length>0)return J;let Y=typeof f.text==="string"?f.text:"";if(Y.length>0)return Y;return BV(f.summary)}function BV(f){if(typeof f==="string")return f;if(!Array.isArray(f))return"";let J=[];for(let Y of f){if(typeof Y==="string"){J.push(Y);continue}if(!eG(Y))continue;let z=typeof Y.text==="string"?Y.text:"";if(z.length>0)J.push(z)}return J.join("")}function mZ(f,J){let Y={};for(let[z,G]of Object.entries(f))if(!J.includes(z))Y[z]=G;return Y}function mH(f,J){return typeof f==="string"&&f.length>0?f:J}function vH(f){if(typeof f!=="string")return f;try{return JSON.parse(f)}catch{return f}}function o3(f){let J,Y=null;for(let z of f.split(`
33
- `)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!eG(X))continue;let q=typeof X.timestamp==="string"?s3(X.timestamp):null;if(X.type==="response_item")continue;if(X.type!=="turn.completed")continue;let Q=eG(X.usage)?X.usage:void 0;if(!Q)continue;let H=qV(Q);if(!H)continue;if(q!==null&&(Y===null||q>Y))Y=q,J=H;else if(Y===null)J=H}return J}function s3(f){let J=new Date(f).getTime();return Number.isFinite(J)?J:null}function eG(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var Zz,jV,QV,n3=200,d3=12;var dH=k(()=>{ZV();Zz={sessionsDir(){return Xz.join(v3(),".codex","sessions")},async readdir(f){try{return await h3(f)}catch{return[]}},async readFile(f){return await w3(f,"utf8")},stat:P3};jV=/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;QV=new WeakMap});function LV(f){if(!cZ(f))return;let J=cZ(f.modelMetrics)?f.modelMetrics:void 0;if(!J)return;let Y=0,z=0,G=0;for(let q of Object.values(J)){if(!cZ(q)||!cZ(q.usage))continue;Y+=nZ(q.usage.inputTokens,0),z+=nZ(q.usage.outputTokens,0),G+=nZ(q.usage.cacheReadTokens,0)}let X=nZ(f.currentTokens,0);if(Y===0&&z===0&&G===0&&X===0)return;return{input_tokens:Y,output_tokens:z,...G>0?{cache_read_input_tokens:G}:{},...X>0?{context_tokens:X}:{}}}function cZ(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function nZ(f,J){return typeof f==="number"&&Number.isFinite(f)?f:J}import{readFile as t3,readdir as e3,rm as fO,stat as JO}from"fs/promises";import{homedir as YO}from"os";import LY from"path";async function lH(f=qz){let J=LY.join(f.copilotDir(),"session-state");return(await f.readdir(J)).map((z)=>LY.join(J,z))}async function MV(f,J=qz){let Y=[];for(let z of await lH(J)){let G=await aH(z,J);if(G.cwd!==f)continue;Y.push({id:G.id??LY.basename(z),updatedAt:G.updatedAt??""})}return Y.sort((z,G)=>z.updatedAt.localeCompare(G.updatedAt)).map((z)=>z.id)}async function FV(f,J=qz){if(!f)return 0;let Y=0;for(let z of await lH(J)){if((await aH(z,J)).cwd!==f)continue;try{let{mtimeMs:X}=await J.stat(LY.join(z,"events.jsonl"));if(X>Y)Y=X}catch{}}return Y}async function zO(f,J=qz){let Y=await GO(f,J);if(!Y)return{messages:[]};let z=await J.readFile(LY.join(Y,"events.jsonl")).catch(()=>""),G=ZO(z,f);return{messages:G.messages,...G.usageMetrics?{usageMetrics:G.usageMetrics}:{}}}async function OV(f,J=qz){return(await zO(f,J)).messages}async function GO(f,J=qz){for(let Y of await lH(J)){if(LY.basename(Y)===f)return Y;let z=await aH(Y,J);if(z.id===f||z.name?.toLowerCase()===f.toLowerCase())return Y}return}async function aH(f,J=qz){let Y=await J.readFile(LY.join(f,"workspace.yaml")).catch(()=>"");return XO(Y)}function XO(f){let J={};for(let Y of f.split(`
34
- `)){let z=Y.match(/^([A-Za-z_]+):\s*(.*)$/);if(!z)continue;let G=z[1],X=z[2]??"";if(X.startsWith('"')&&X.endsWith('"'))X=X.slice(1,-1).replace(/\\"/g,'"');J[G]=X}return{id:J.id,cwd:J.cwd,name:J.name,updatedAt:J.updated_at,createdAt:J.created_at}}function ZO(f,J){let Y=[],z=new Map,G=J,X,q=null;for(let Q of f.split(`
35
- `)){let H=Q.trim();if(!H)continue;let B;try{B=JSON.parse(H)}catch{continue}if(!iH(B)||typeof B.type!=="string")continue;let V=typeof B.timestamp==="string"?B.timestamp:new Date().toISOString(),j=iH(B.data)?B.data:{};if(B.type==="session.start"){let U=typeof j.sessionId==="string"?j.sessionId:void 0;if(U)G=U;continue}if(B.type==="user.message"){let U=typeof j.content==="string"?j.content:"";if(!U)continue;if(!q)q=Buffer.from(U.slice(0,qO),"utf8").toString("utf8");Y.push({role:"user",blocks:[{type:"text",text:U}],timestamp:V,sessionId:G});continue}if(B.type==="assistant.message"){let U=[],L=typeof j.content==="string"?j.content:"";if(L)U.push({type:"text",text:L});let O=Array.isArray(j.toolRequests)?j.toolRequests:[];for(let M of O){if(!iH(M))continue;let R=typeof M.id==="string"?M.id:typeof M.toolCallId==="string"?M.toolCallId:"tool",S=typeof M.name==="string"?M.name:typeof M.toolName==="string"?M.toolName:"tool";U.push({type:"tool_call",callId:R,name:S,input:M.arguments??{}})}if(U.length>0)Y.push({role:"assistant",blocks:U,timestamp:V,sessionId:G});continue}if(B.type==="tool.execution_start"){let U=typeof j.toolCallId==="string"?j.toolCallId:void 0,L=typeof j.toolName==="string"?j.toolName:"tool";if(U)z.set(U,L);continue}if(B.type==="tool.execution_complete"){let U=typeof j.toolCallId==="string"?j.toolCallId:void 0;if(!U)continue;let L=z.get(U)??(typeof j.toolName==="string"?j.toolName:"tool"),O=j.result??(j.success===!1?{success:!1}:void 0);Y.push({role:"assistant",blocks:[{type:"tool_result",callId:U,output:O,isError:j.success===!1}],timestamp:V,sessionId:G});continue}if(B.type==="session.shutdown")X=LV(j)}return{messages:Y,usageMetrics:X,firstUserMessage:q}}function iH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var qz,qO=200;var AV=k(()=>{qz={copilotDir(){let f=process.env.COPILOT_HOME?.trim();if(f)return f;return LY.join(YO(),".copilot")},async readdir(f){try{return await e3(f)}catch{return[]}},async readFile(f){return await t3(f,"utf8")},stat:JO,async rm(f){await fO(f,{recursive:!0,force:!0})}}});function $H(f){return pf(f).createHookAdapter()}class fX{vendor;constructor(f){this.vendor=f}supportsHooks(){return!1}activityDetailFromPayload(){return}async installActivityHooks(){}async removeActivityHooks(){}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(){}async installWorktreeWatchHook(){}async removeWorktreeWatchHook(){}}var rH=k(()=>{MY()});import{readFile as gV}from"fs/promises";class dZ{supportsCompletionMarkers(){return!0}}function RV(f){return pf(f).createTurnDetector()}function jO(f,J="claude",Y=0){let z=null,G=0;for(let X of f.split(`
36
- `)){G++;let q=CV(X);if(!q)continue;let Q=NV(q.message)?q.message:q;if(Q.role!=="assistant")continue;if(!("content"in Q))continue;let H=kV(q,Y),B={id:`claude:${J}:${H}:${G}`,timestampMs:H,source:"claude"};if(!z||B.timestampMs>=z.timestampMs)z=B}return z}function WO(f,J="codex"){let Y=null,z=0;for(let G of f.split(`
37
- `)){z++;let X=CV(G);if(!X||X.type!=="turn.completed")continue;let q=kV(X,0),Q={id:`codex:${J}:${q}:${z}`,timestampMs:q,source:"codex"};if(!Y||Q.timestampMs>=Y.timestampMs)Y=Q}return Y}function CV(f){let J=f.trim();if(!J)return null;try{let Y=JSON.parse(J);return NV(Y)?Y:null}catch{return null}}function kV(f,J){let Y=typeof f.timestamp==="string"?Date.parse(f.timestamp):Number.NaN;return Number.isFinite(Y)?Y:J}function NV(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var HO,pH,BO,_H,iZ;var oH=k(()=>{bH();dH();MY();HO={listSessionFiles:(f)=>pG(f),readFile:(f)=>gV(f,"utf8")};pH=class pH extends dZ{deps;vendor="claude";cache=new Map;constructor(f=HO){super();this.deps=f}async latestCompletion(f){let J=await this.deps.listSessionFiles(f),Y=null,z=new Map;for(let G of J.slice(0,4)){let X=this.cache.get(G.path),q;if(X&&G.mtimeMs>0&&X.mtimeMs===G.mtimeMs)q=X.marker;else{let Q=await this.deps.readFile(G.path).catch(()=>"");q=jO(Q,G.path,G.mtimeMs)}if(z.set(G.path,{mtimeMs:G.mtimeMs,marker:q}),q&&(!Y||q.timestampMs>Y.timestampMs))Y=q}return this.cache=z,Y}};BO={findLatestRollout:(f)=>nH(f),readFile:(f)=>gV(f,"utf8")};_H=class _H extends dZ{deps;vendor="codex";cache=null;constructor(f=BO){super();this.deps=f}async latestCompletion(f){if(!f)return null;let J=await this.deps.findLatestRollout(f);if(!J)return null;if(this.cache&&this.cache.path===J.path&&J.mtimeMs>0&&this.cache.mtimeMs===J.mtimeMs)return this.cache.marker;let Y=await this.deps.readFile(J.path).catch(()=>"");if(!Y)return null;let z=WO(Y,J.path);return this.cache={path:J.path,mtimeMs:J.mtimeMs,marker:z},z}};iZ=class iZ extends dZ{vendor;constructor(f){super();this.vendor=f}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function MO(f){return{vendor:f,builtin:!1,displayName:f,defaultCommand:[f],history:VO,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new fX(f),createTurnDetector:()=>new iZ(f)}}function pf(f){return Q1(f)?LO[f]:MO(f)}var VO,KO,UO,DO,LO;var MY=k(()=>{K1();fz();bH();GV();dH();AV();rH();oH();VO={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},KO={async listSessionIdsForWorktree(f){return[...await pG(f)].sort((Y,z)=>Y.mtimeMs-z.mtimeMs).map((Y)=>Y.sessionId)},readHistory:(f)=>$W(f),latestTranscriptMtimeForWorktree:(f)=>aW(f)},UO={listSessionIdsForWorktree:(f)=>VV(f),readHistory:(f)=>UV(f),latestTranscriptMtimeForWorktree:(f)=>KV(f)},DO={listSessionIdsForWorktree:(f)=>MV(f),readHistory:(f)=>OV(f),latestTranscriptMtimeForWorktree:(f)=>FV(f)},LO={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:KO,detectAccount:(f)=>uZ(f),createHookAdapter:()=>new xH,createTurnDetector:()=>new pH},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:UO,detectAccount:(f)=>EZ(f),createHookAdapter:()=>new fX("codex"),createTurnDetector:()=>new _H},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:DO,detectAccount:(f)=>xZ(f),createHookAdapter:()=>new fX("copilot"),createTurnDetector:()=>new iZ("copilot")}}});function yV(f){let J=f.find((G)=>G.role==="user");if(!J)return"";let Y=J.blocks.filter((G)=>G.type==="text").map((G)=>G.text).join(" "),z=VW(Y);return z.length>0?Buffer.from(z,"utf8").toString("utf8"):z}async function dz(f,J=Sf){if(!f)return"";let{history:Y}=pf(J),z=await Y.listSessionIdsForWorktree(f);for(let G of z.slice(0,FO)){let X=yV(await Y.readHistory(G));if(X)return X}return""}async function bV(f,J){if(!J)return"";try{return yV(await pf(f).history.readHistory(J))}catch{return""}}var FO=8;var lZ=k(()=>{MY();S1()});function iz(f,J,Y){if(!J)return f;let z=wz(J);return z.ensureReady(),z.wrapCommand(f,{tty:!0,cwd:Y})}function _f(){let f=[];for(let J of["KOBE_HOME_DIR","KOBE_DAEMON_SOCKET_PATH","KOBE_TMUX_SOCKET"]){let Y=process.env[J];if(Y&&Y.length>0)f.push(`${J}=${Xf(Y)}`)}return f.length>0?`${f.join(" ")} `:""}var JX="@kobe_remote";var Qz=k(()=>{e1();qJ()});var XX={};jf(XX,{windowIsSurface:()=>kO,windowCount:()=>gO,tmuxSessionName:()=>Lf,tmuxCommandSequence:()=>tH,tmuxAvailable:()=>NJ,tmuxArgs:()=>Hz,tagPaneRole:()=>TV,tagClaudePane:()=>CO,switchClientBeforeKill:()=>bJ,setWindowOption:()=>AY,setSessionOption:()=>FY,sessionExists:()=>Hf,sendKeys:()=>$Z,sendKeyName:()=>GX,runTmuxSequenceCapturing:()=>YX,runTmuxSequence:()=>Pf,runTmuxCapturing:()=>d0,runTmux:()=>h0,paneIdByRole:()=>fB,newWindow:()=>HJ,killSession:()=>l1,globalTasksPaneWidth:()=>aZ,getSessionOptions:()=>C1,getSessionOption:()=>Bz,getServerOptions:()=>OY,getServerOption:()=>IV,ensureFallbackSession:()=>rZ,currentSessionName:()=>k1,claudePaneIdStrict:()=>$z,claudePaneId:()=>JB,capturePaneById:()=>rz,attachArgv:()=>az,SURFACE_WINDOW_OPTION:()=>YB,PANE_ROLE_OPTION:()=>zX,KOBE_TMUX_SOCKET:()=>QJ,KOBE_HOME_SESSION:()=>uV,CLAUDE_ROLE_OPTION:()=>RO,CHAT_TAB_SESSION_ID_OPTION:()=>yJ});import{homedir as OO}from"os";function Hz(...f){return["tmux","-L",QJ,...f]}function Lf(f){return`kobe-${f.replace(/[^A-Za-z0-9_-]/g,"")}`}function az(f){return Hz("attach-session","-t",`=${f}`)}async function sH(f){if(!f)return"";try{return await new Response(f).text()}catch{return""}}async function h0(f){try{let J=Bun.spawn(Hz(...f),{stdin:"ignore",cwd:lz,stdout:"ignore",stderr:"pipe"}),[Y,z]=await Promise.all([sH(J.stderr),J.exited]);if(z!==0&&Y.trim().length>0)console.error(`[kobe tmux] ${f.join(" ")} (${z}): ${Y.trim()}`);return z}catch{return 1}}async function AO(f){try{return await Bun.spawn(Hz(...f),{stdin:"ignore",cwd:lz,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function tH(f){let J=[];for(let Y of f){if(Y.length===0)continue;if(J.length>0)J.push(";");J.push(...Y)}return J}async function Pf(f){let J=tH(f);return J.length===0?0:h0(J)}async function d0(f){try{let J=Bun.spawn(Hz(...f),{stdin:"ignore",cwd:lz,stdout:"pipe",stderr:"pipe"}),[Y,z,G]=await Promise.all([sH(J.stdout),sH(J.stderr),J.exited]);if(G!==0&&z.trim().length>0)console.error(`[kobe tmux] ${f.join(" ")} (${G}): ${z.trim()}`);return{code:G,stdout:Y}}catch{return{code:1,stdout:""}}}async function YX(f){let J=tH(f);return J.length===0?{code:0,stdout:""}:d0(J)}async function NJ(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:lz,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function Hf(f){return await AO(["has-session","-t",`=${f}`])===0}async function gO(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return 0;return Y.split(`
38
- `).filter((z)=>z.trim().length>0).length}async function FY(f,J,Y){await h0(["set-option","-t",f,J,Y])}async function Bz(f,J){let{code:Y,stdout:z}=await d0(["show-options","-v","-t",f,J]);return Y===0?z.trim():""}async function C1(f,J){let Y=Object.fromEntries(J.map((X)=>[X,void 0])),{code:z,stdout:G}=await YX(J.map((X)=>["show-options","-q","-t",f,X]));if(z!==0)return Y;for(let X of G.split(`
39
- `)){let q=X.indexOf(" ");if(q<=0)continue;let Q=X.slice(0,q);if(Q in Y)Y[Q]=X.slice(q+1).trim()}return Y}async function IV(f){let{code:J,stdout:Y}=await d0(["show-options","-sqv",f]);return J===0?Y.trim():""}async function OY(f){let J=Object.fromEntries(f.map((G)=>[G,void 0])),{code:Y,stdout:z}=await YX(f.map((G)=>["show-options","-sq",G]));if(Y!==0)return J;for(let G of z.split(`
40
- `)){let X=G.indexOf(" ");if(X<=0)continue;let q=G.slice(0,X);if(q in J)J[q]=G.slice(X+1).trim()}return J}async function aZ(){let f=await IV(aJ),J=Number.parseInt(f,10);return Number.isFinite(J)&&J>0?zz(J):Jz}async function TV(f,J){await h0(["set-option","-p","-t",f,zX,J])}async function AY(f,J,Y){await h0(["set-window-option","-t",f,J,Y])}async function CO(f){await TV(f,eH)}async function fB(f,J,Y=!1){let{code:z,stdout:G}=await d0(["list-panes","-t",`=${f}`,"-F",`#{pane_id} #{${zX}}`]);if(z!==0)return"";let X="";for(let q of G.split(`
41
- `)){let[Q,H]=q.split("\t");if(!Q)continue;if(!X)X=Q.trim();if(H?.trim()===J)return Q.trim()}return Y?X:""}async function JB(f){return fB(f,eH,!0)}async function $z(f){return fB(f,eH,!1)}async function rz(f,J){if(!f)return"";let Y=["capture-pane","-t",f,"-p"];if(typeof J==="number"&&J>0)Y.push("-S",String(-J));let{code:z,stdout:G}=await d0(Y);return z===0?G:""}async function $Z(f,J){await h0(["send-keys","-t",f,"-l","--",J])}async function GX(f,J){await h0(["send-keys","-t",f,J])}async function HJ(f,J){let Y=["new-window","-t",`=${f}`,"-c",J.cwd];if(J.name)Y.push("-n",J.name);if(J.surface){Y.push("-P","-F","#{window_id}"),Y.push(J.command);let{code:z,stdout:G}=await d0(Y),X=G.trim();if(z===0&&X)await AY(X,YB,"1");return}Y.push(J.command),await h0(Y)}async function kO(f){let{code:J,stdout:Y}=await d0(["display-message","-t",f,"-p",`#{${YB}}`]);return J===0&&Y.trim()==="1"}async function k1(){let f=["display-message","-p"],J=process.env.TMUX_PANE;if(J&&J.length>0)f.push("-t",J);f.push("#{session_name}");let{code:Y,stdout:z}=await d0(f),G=z.trim();return Y===0&&G.length>0?G:null}async function l1(f){if(!f.startsWith("kobe-hidden-")){let J=sG(f);if(await Hf(J))await h0(["kill-session","-t",`=${J}`])}if(await Hf(f))await h0(["kill-session","-t",`=${f}`])}async function rZ(){let f=uV;if(await Hf(f)){if(await Bz(f,SV)==="tasks")return f;await h0(["kill-session","-t",`=${f}`])}let Y=(await d0(["new-session","-d","-s",f,"-c",lz,"-x","220","-y","50","-P","-F","#{pane_id}",sW()])).stdout.trim();if(Y){let z=await aZ(),X=(await d0(["split-window","-h","-b","-t",Y,"-l",`${z}`,"-c",lz,"-P","-F","#{pane_id}",R1(_f()+DY(Cf()))])).stdout.trim();if(X)await Pf([["set-option","-p","-t",X,zX,"tasks"],["select-pane","-t",X]])}return await FY(f,SV,"tasks"),f}async function bJ(f,J){if(await k1()!==f)return;if(J&&J!==f&&await Hf(J)){await h0(["switch-client","-t",`=${J}`]);return}let z=await rZ();await h0(["switch-client","-t",`=${z}`])}var QJ,lz,zX="@kobe_role",RO,eH="claude",yJ="@kobe_session_id",YB="@kobe_surface",uV="kobe-home",SV="@kobe_home";var Tf=k(()=>{lJ();Qz();qJ();QJ=process.env.KOBE_TMUX_SOCKET?.trim()||"kobe";lz=OO()||"/";RO=zX});async function NO(f,J=EV){let{code:Y,stdout:z}=await J.capture(["list-windows","-t",`=${f}`,"-F",`#{window_index} #{automatic-rename} #{${yJ}}`]);if(Y!==0)return[];let G=[];for(let X of z.split(`
42
- `)){let[q,Q,H]=X.split("\t"),B=Number.parseInt((q??"").trim(),10);if(!Number.isInteger(B))continue;G.push({index:B,sessionId:H?.trim()??"",autoRename:Q?.trim()??""})}return G}async function yO(f,J,Y){let{code:z,stdout:G}=await Y.capture(["show-window-options","-t",`=${f}:${J}`,"automatic-rename"]);return z===0&&/\boff\b/.test(G)}async function bO(f){let{code:J,stdout:Y}=await f.capture(["show-window-options","-g","automatic-rename"]);return J===0&&/\boff\b/.test(Y)}async function SO(f,J,Y,z){return await z.run(["rename-window","-t",`=${f}:${J}`,"--",Y])===0}async function xV(f,J=IO){let Y=0,z=null,G=async(X,q)=>{if(q.autoRename==="1")return!1;if(q.autoRename==="0"){if(z===null)z=await bO(J.runner);if(!z)return!0}return yO(X,q.index,J.runner)};for(let X of f.listTasks()){if(X.archived||X.kind==="main"||!X.worktreePath)continue;let q=Lf(X.id),Q=await NO(q,J.runner);if(Q.length===0)continue;let H=Q.reduce((V,j)=>Math.min(V,j.index),Number.POSITIVE_INFINITY),B=X.vendor??Sf;for(let V of Q)try{if(await G(q,V))continue;let j=V.sessionId?await J.titleFromSessionId(B,V.sessionId):V.index===H?await J.titleFromWorktree(X.worktreePath,B):"";if(j&&await SO(q,V.index,j,J.runner))Y++}catch{}}return Y}var EV,IO;var wV=k(()=>{lZ();Tf();S1();EV={capture:d0,run:h0};IO={runner:EV,titleFromSessionId:bV,titleFromWorktree:dz}});function PV(f){if(f instanceof Error)return f;let J;try{J=typeof f==="string"?f:JSON.stringify(f)}catch{J=String(f)}return Error(J)}function hV(f,J,Y=new Date){let z=PV(J);return`[${Y.toISOString()}] daemon ${f}: ${z.stack??`${z.name}: ${z.message}`}
43
- `}function TO(f,J,Y=new Date){let z=PV(J);return`[${Y.toISOString()}] daemon error [${f}]: ${z.stack??`${z.name}: ${z.message}`}
44
- `}function uf(f,J){process.stderr.write(TO(f,J))}function uO(f,J,Y=new Date){return`[${Y.toISOString()}] daemon [${f}]: ${J}
45
- `}function gY(f,J){process.stderr.write(uO(f,J))}function vV(f=(J)=>process.stderr.write(J)){if(zB||GB)return;zB=(J)=>f(hV("unhandledRejection",J)),GB=(J)=>f(hV("uncaughtException",J)),process.on("unhandledRejection",zB),process.on("uncaughtException",GB)}var zB,GB;async function EO(f,J=dz){let Y=[];for(let z of f.listTasks()){if(z.archived||z.title!==RJ||!z.worktreePath)continue;try{let G=await J(z.worktreePath,z.vendor??Sf);if(!G)continue;let X=f.getTask(z.id);if(!X||X.title!==RJ)continue;await f.setTitle(z.id,G),Y.push({id:z.id,title:G})}catch(G){uf("auto-title-poller",G)}}return Y}function mV(f,J=XB,Y){if(J<=0)return()=>{};let z=!1,X=setInterval(()=>{if(Y&&!Y())return;if(z)return;z=!0,EO(f).then(()=>xV(f)).catch((q)=>uf("auto-title-poller",q)).finally(()=>{z=!1})},J);return X.unref?.(),()=>clearInterval(X)}var XB=4000;var cV=k(()=>{lZ();lG();wV();S1()});class ZB{last=new Map;sinks=new Set;publish(f,J){this.last.set(f,J);let Y={channel:f,payload:J};for(let z of this.sinks)z(Y)}snapshot(){return[...this.last].map(([f,J])=>({channel:f,payload:J}))}onPublish(f){return this.sinks.add(f),()=>{this.sinks.delete(f)}}}function pZ(){return nf()[jz]===!0}var jz="experimental.autoStatus";var ZX=k(()=>{pY()});async function nV(f,J,Y=pZ){if(!Y())return"skipped";let z=f.getTask(J);if(!z)return"skipped";if((z.kind??"task")==="main"||z.archived)return"skipped";if(z.status!=="backlog")return"skipped";return await f.setStatus(J,"in_progress"),"moved"}var dV=k(()=>{ZX()});import{createHash as xO}from"crypto";import{homedir as wO}from"os";import CY from"path";function cO(){return CY.join(process.env.KOBE_HOME_DIR??wO(),".kobe")}function nO(f){let Y=(CY.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=xO("sha1").update(CY.resolve(f)).digest("hex").slice(0,12);return`${Y}-${z}`}function dO(f){if(!CY.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return CY.join(cO(),hO,nO(f))}function iO(f){if(!CY.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[dO(f),...mO.map((J)=>CY.join(f,J))]}function RY(f){return f.length>1&&f.endsWith("/")?f.slice(0,-1):f}function iV(f,J){return J===f||J.startsWith(`${f}/`)}function lV(f,J){let Y=RY(J),z,G=-1;for(let X of f){if(!X.worktreePath)continue;let q=RY(X.worktreePath);if(iV(q,Y)&&q.length>G)G=q.length,z=X.id}return z}function qB(f,J){let Y=RY(J),z,G=-1;for(let X of f){if(!X.repo)continue;let q=RY(X.repo);if(iV(q,Y)&&q.length>G)G=q.length,z=q}return z}function aV(f,J){let Y=RY(J),z=new Set,G=new Set;for(let X of f){if(X.repo)z.add(RY(X.repo));if(X.worktreePath)G.add(RY(X.worktreePath))}for(let X of z)for(let q of iO(X).map(RY)){let Q=`${q}/`;if(!Y.startsWith(Q))continue;let B=Y.slice(Q.length).split("/")[0];if(!B)continue;let V=`${Q}${B}`;if(G.has(V))return;return{repo:X,worktreePath:V}}return}var hO="worktrees",PO=".kobe/worktrees",vO=".claude/worktrees",mO;var $V=k(()=>{mO=[PO,vO]});function BB(f){return{message:f instanceof Error?f.message:String(f),name:f instanceof Error?f.name:void 0}}async function qX(f,J,Y,z){let G=f.get(J);if(!G)throw Error(`unknown daemon request: ${J}`);return G.handle(jB(Y),z)}function QX(){return new Map([{name:"hello",handle(J,Y){let z=typeof J.protocolVersion==="number"?J.protocolVersion:n1,G=typeof J.minProtocolVersion==="number"?J.minProtocolVersion:z;if(!AZ({localVersion:n1,localMin:jY,remoteVersion:z,remoteMin:G}))throw Error(`daemon is protocol v${n1} (min v${jY}); this client is v${z} (min v${G}). Upgrade your kobe.`);return{protocolVersion:n1,minProtocolVersion:jY,kobeVersion:s0,capabilities:[...AH],daemonPid:Y.daemon.pid,clientId:Y.clientId,tasks:Y.orch.listTasks().map(zJ)}}},{name:"daemon.status",handle(J,Y){return{daemonPid:Y.daemon.pid,kobeVersion:s0,uptimeMs:Date.now()-Y.daemon.startedAt.getTime(),startedAt:Y.daemon.startedAt.toISOString(),attachedClients:Y.daemon.guiCount(),taskCount:Y.orch.listTasks().length,socketPath:Y.daemon.socketPath,webPort:Y.daemon.webPort??null}}},{name:"daemon.stop",async handle(J,Y){return await Y.daemon.stopSoon(),{}}},{name:"task.list",handle(J,Y){return{tasks:Y.orch.listTasks().map(zJ)}}},{name:"task.get",handle(J,Y){let z=Of(J,"taskId"),G=Y.orch.getTask(z);if(!G)throw Error(`task not found: ${z}`);return{task:zJ(G)}}},{name:"task.create",async handle(J,Y){let z=Of(J,"repo"),G=await Y.orch.createTask({repo:z,title:a1(J,"title"),branch:a1(J,"branch"),baseRef:a1(J,"baseRef"),vendor:HB(J,"vendor"),modelEffort:a1(J,"effort")});return{taskId:G.id,task:zJ(G)}}},{name:"task.archive",async handle(J,Y){let z=Of(J,"taskId");return await Y.orch.setArchived(z,QB(J,"archived")),{}}},{name:"task.rename",async handle(J,Y){let z=Of(J,"taskId");return await Y.orch.setTitle(z,Of(J,"title")),{}}},{name:"task.setBranch",async handle(J,Y){let z=Of(J,"taskId");return await Y.orch.setBranch(z,Of(J,"branch")),{}}},{name:"task.setVendor",async handle(J,Y){let z=Of(J,"taskId"),G=HB(J,"vendor");if(!G)throw Error("task.setVendor: vendor is required");return await Y.orch.setVendor(z,G),{}}},{name:"task.delete",async handle(J,Y){let z=Of(J,"taskId");return await Y.orch.deleteTask(z,{force:QB(J,"force")}),Y.activity.clearTask(z),{}}},{name:"task.pin",async handle(J,Y){let z=Of(J,"taskId");return await Y.orch.setPinned(z,QB(J,"pinned")),{}}},{name:"task.move",async handle(J,Y){let z=Of(J,"taskId"),G=Of(J,"direction");if(G!=="up"&&G!=="down")throw Error("direction must be up or down");return await Y.orch.moveTask(z,G==="up"?-1:1),{}}},{name:"task.status",async handle(J,Y){let z=Of(J,"taskId"),G=Of(J,"status");if(!N9(G))throw Error("status must be a TaskStatus");let X=G==="done"?Y.orch.getTask(z):void 0,q=X?.status;if(await Y.orch.setStatus(z,G),G==="done"&&q!=="done"&&X)try{let Q=await Y.issues.mirrorTaskDone(X.repo,z);if(Q)Y.bus.publish("issue.snapshot",Q)}catch(Q){uf("issue-done-mirror",Q)}return{}}},{name:"task.reorder",async handle(J,Y){let z=J.moves;if(!Array.isArray(z)||z.length===0)throw Error("moves must be a non-empty array");if(z.length>500)throw Error("too many moves in one task.reorder batch (max 500)");let G=z.map((X)=>{if(typeof X!=="object"||X===null)throw Error("each move needs taskId and position");let q=X,Q=Of(q,"taskId"),H=q.position;if(typeof H!=="number"||!Number.isFinite(H))throw Error("position must be a finite number");return{taskId:Q,position:H}});return await Y.orch.reorderTasks(G),{}}},{name:"task.ensureMain",async handle(J,Y){let z=Of(J,"repo"),G=await Y.orch.ensureMainTask(z);return{task:zJ(G)}}},{name:"task.ensureWorktree",async handle(J,Y){let z=Of(J,"taskId");Y.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"running"});try{let G=await Y.orch.ensureWorktree(z);return Y.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"done"}),{worktreePath:G}}catch(G){throw Y.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"error",error:G instanceof Error?G.message:String(G)}),G}}},{name:"worktree.discoverAdoptable",async handle(J,Y){let z=Of(J,"repo");return{worktrees:await Y.orch.discoverAdoptableWorktrees(z)}}},{name:"worktree.adopt",async handle(J,Y){let z=await Y.orch.adoptWorktree({repo:Of(J,"repo"),worktreePath:Of(J,"worktreePath"),branch:a1(J,"branch"),vendor:HB(J,"vendor"),title:a1(J,"title"),ifExists:a1(J,"ifExists")==="return"?"return":"error"});return{task:zJ(z)}}},{name:"worktree.reconcile",async handle(J,Y){let z=Of(J,"cwd"),G=Of(J,"worktreePath"),X=qB(Y.orch.listTasks(),z)??qB(Y.orch.listTasks(),G);if(!X)return{adopted:!1};try{return{adopted:!0,taskId:(await Y.orch.adoptWorktree({repo:X,worktreePath:G,ifExists:"return"})).id}}catch(q){return uf("worktree-created",q),{adopted:!1}}}},{name:"task.setActive",async handle(J,Y){let z=a1(J,"taskId")??null;return await Y.orch.setActiveTask(z),Y.bus.publish("active-task",{taskId:z}),{}}},{name:"issue.list",async handle(J,Y){return Y.issues.list(Of(J,"repoRoot"))}},{name:"issue.mutate",async handle(J,Y){let z=await Y.issues.mutate(Of(J,"repoRoot"),J.op);return Y.bus.publish("issue.snapshot",z),z}},{name:"session.deliver",async handle(J,Y){let z=Of(J,"taskId"),G=Of(J,"text"),X=a1(J,"source");if(X!==void 0&&X!=="note"&&X!=="dispatcher")throw Error('source must be "note" or "dispatcher"');if(!Y.orch.getTask(z))throw Error(`task not found: ${z}`);return Y.bus.publish("session.deliver",{taskId:z,text:G,at:Date.now(),source:X??"dispatcher"}),{ok:!0}}},{name:"note.file",async handle(J,Y){let z=Of(J,"taskId"),G=Of(J,"text"),X=Y.orch.getTask(z);if(!X)throw Error(`task not found: ${z}`);let q=Y.orch.listTasks().find((H)=>(H.kind??"task")==="main"&&H.repo===X.repo&&!H.archived);if(!q||q.id===X.id)return{ok:!0,routed:!1};let Q=X.title||X.branch||z;return Y.bus.publish("session.deliver",{taskId:q.id,text:`[KOBE FIELD NOTE] from "${Q}" (task ${z}): ${G}`,at:Date.now(),source:"note"}),{ok:!0,routed:!0}}},{name:"engine.reportEvent",async handle(J,Y){let z=Of(J,"kind");if(!kZ(z))throw Error(`unknown engine event kind: ${z}`);let G=a1(J,"taskId"),X=a1(J,"cwd");if(!G&&X&&z==="session-start"){let H=aV(Y.orch.listTasks(),X);if(H)try{await Y.orch.adoptWorktree({repo:H.repo,worktreePath:H.worktreePath,ifExists:"return"})}catch(B){uf("worktree-autosync",B)}}let q=G??(X?lV(Y.orch.listTasks(),X):void 0);if(!q)return{};let Q=lO(J);if(Y.activity.report(q,z,Q),z==="turn-start")nV(Y.orch,q).then((H)=>{if(H==="moved")console.log(`[status-rules] task ${q} auto-moved backlog \u2192 in_progress`)}).catch((H)=>uf("status-rules",H));return{}}}].map((J)=>[J.name,J]))}function jB(f){if(!f||typeof f!=="object"||Array.isArray(f))return{};return f}function Of(f,J){let Y=f[J];if(typeof Y!=="string"||Y.length===0)throw Error(`${J} is required`);return Y}function a1(f,J){let Y=f[J];if(Y===void 0||Y===null||Y==="")return;if(typeof Y!=="string")throw Error(`${J} must be a string`);return Y}function QB(f,J){let Y=f[J];if(Y===void 0||Y===null)return;if(typeof Y!=="boolean")throw Error(`${J} must be a boolean`);return Y}function HB(f,J){let Y=a1(f,J);return Y&&Y.trim().length>0?Y:void 0}function lO(f){let J=f.detail;if(!J||typeof J!=="object"||Array.isArray(J))return;let Y=J,z={};if(Y.failure==="rate_limit"||Y.failure==="billing"||Y.failure==="other")z.failure=Y.failure;if(Y.waiting==="permission"||Y.waiting==="input")z.waiting=Y.waiting;if(typeof Y.note==="string")z.note=Y.note;return Object.keys(z).length>0?z:void 0}var _Z=k(()=>{NZ();dV();S1();U1();$V();sY()});import{execFile as aO}from"child_process";import{mkdir as $O,readFile as rO,realpath as rV,rename as pO,stat as _O,writeFile as oO}from"fs/promises";import{homedir as sO}from"os";import{dirname as tO,isAbsolute as eO,join as fA,resolve as pV}from"path";import{promisify as JA}from"util";function YA(f){return(f instanceof Error?f.message:String(f)).includes("not a git repository")}function sZ(f=process.env.KOBE_HOME_DIR??sO()){return fA(f,".kobe","issues.json")}function oV(f){return typeof f==="string"&&_V.includes(f)}function zA(f){if(f===null||typeof f!=="object"||Array.isArray(f))return null;let J=f;if(typeof J.id!=="number")return null;return{id:J.id,title:typeof J.title==="string"?J.title:"(untitled)",status:oV(J.status)?J.status:"open",created:typeof J.created==="string"?J.created:"",body:typeof J.body==="string"?J.body:"",taskId:typeof J.taskId==="string"?J.taskId:void 0}}function GA(){return{version:1,repos:{}}}function XA(){let f=new Date,J=String(f.getMonth()+1).padStart(2,"0"),Y=String(f.getDate()).padStart(2,"0");return`${f.getFullYear()}-${J}-${Y}`}async function ZA(f){let{stdout:J}=await LB("git",["-C",f,"rev-parse","--git-common-dir"]),Y=J.trim();return rV(eO(Y)?Y:pV(f,Y))}async function qA(f){let{stdout:J}=await LB("git",["-C",f,"rev-parse","--show-toplevel"]);return J.trim()}async function QA(f){let{stdout:J}=await LB("git",["-C",f,"worktree","list","--porcelain"]),Y=J.split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim();return Y?rV(Y):qA(f)}async function WB(f){if(typeof f!=="string"||f.length===0)throw Error("repoRoot is required");let J=pV(f);if(!(await _O(J).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[z,G]=await Promise.all([QA(J),ZA(J)]);return{repoRoot:z,repoKey:G}}catch(z){if(YA(z))throw Error("repoRoot is not a git repository");throw z}}async function VB(f){try{let J=JSON.parse(await rO(f,"utf8")),Y={};if(J.repos&&typeof J.repos==="object")for(let[z,G]of Object.entries(J.repos)){if(!G||typeof G!=="object")continue;let X=G;Y[z]={repoRoot:typeof X.repoRoot==="string"?X.repoRoot:"",nextId:typeof X.nextId==="number"?X.nextId:1,issues:Array.isArray(X.issues)?X.issues.map(zA).filter((q)=>q!==null):[]}}return{version:1,repos:Y}}catch(J){if(J.code==="ENOENT")return GA();throw J}}async function KB(f,J){await $O(tO(f),{recursive:!0});let Y=`${f}.tmp`;await oO(Y,`${JSON.stringify(J,null,2)}
46
- `,"utf8"),await pO(Y,f)}function UB(f,J){return{repoRoot:f,exists:J!==null,nextId:J?.nextId??1,issues:J?.issues??[]}}async function DB(f,J){let z=(oZ.get(f)??Promise.resolve()).then(J),G=z.then(()=>{return},()=>{return});return oZ.set(f,G),G.then(()=>{if(oZ.get(f)===G)oZ.delete(f)}),z}class tZ{path;constructor(f=sZ()){this.path=f}async list(f){let{repoRoot:J,repoKey:Y}=await WB(f);return DB(this.path,async()=>{let z=await VB(this.path),G=z.repos[Y]??null;if(G&&G.repoRoot!==J)G.repoRoot=J,await KB(this.path,z);return UB(J,G)})}async mirrorTaskDone(f,J){let{repoRoot:Y,repoKey:z}=await WB(f);if(!J)return null;return DB(this.path,async()=>{let G=await VB(this.path),X=G.repos[z];if(!X)return null;let q=X.issues.find((Q)=>Q.taskId===J);if(!q||q.status==="done")return null;return q.status="done",X.repoRoot=Y,await KB(this.path,G),UB(Y,X)})}async mutate(f,J){let{repoRoot:Y,repoKey:z}=await WB(f);if(!J||typeof J!=="object"||Array.isArray(J)||typeof J.type!=="string")throw Error("missing op");return DB(this.path,async()=>{let G=await VB(this.path),X=G.repos[z];if(!X)X={repoRoot:Y,nextId:1,issues:[]},G.repos[z]=X;X.repoRoot=Y;let q=J;if(q.type==="create"){if(typeof q.title!=="string"||q.title.trim().length===0)throw Error("create requires a non-empty title");if(q.body!==void 0&&typeof q.body!=="string")throw Error("body must be a string");X.issues=[{id:X.nextId,title:q.title,status:"open",created:XA(),body:typeof q.body==="string"?q.body:""},...X.issues],X.nextId+=1}else if(q.type==="setStatus"){if(typeof q.id!=="number")throw Error("setStatus requires a numeric id");if(!oV(q.status))throw Error(`invalid status: must be one of ${_V.join(", ")}`);let Q=X.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);Q.status=q.status}else if(q.type==="update"){if(typeof q.id!=="number")throw Error("update requires a numeric id");if(q.title!==void 0&&(typeof q.title!=="string"||q.title.trim().length===0))throw Error("title must be a non-empty string");if(q.body!==void 0&&typeof q.body!=="string")throw Error("body must be a string");let Q=X.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);if(typeof q.title==="string")Q.title=q.title;if(typeof q.body==="string")Q.body=q.body}else if(q.type==="link"){if(typeof q.id!=="number")throw Error("link requires a numeric id");if(typeof q.taskId!=="string"||q.taskId.length===0)throw Error("link requires a non-empty taskId");let Q=X.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);Q.taskId=q.taskId}else if(q.type==="unlink"){if(typeof q.id!=="number")throw Error("unlink requires a numeric id");let Q=X.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);Q.taskId=void 0}else if(q.type==="delete"){if(typeof q.id!=="number")throw Error("delete requires a numeric id");let Q=X.issues.filter((H)=>H.id!==q.id);if(Q.length===X.issues.length)throw Error(`no issue #${q.id}`);X.issues=Q}else throw Error(`unknown op type: ${q.type}`);return await KB(this.path,G),UB(Y,X)})}}var LB,_V,oZ;var MB=k(()=>{LB=JA(aO),_V=["open","doing","hold","done"];oZ=new Map});import{mkdirSync as HA,watch as BA}from"fs";import{basename as jA,dirname as WA}from"path";function eZ(f){if(f.debounceMs<=0)return()=>{};let J=WA(f.filePath),Y=new Set([jA(f.filePath),...f.matchBasenames??[]]),z=null,G=null,X=null,q=()=>{try{f.onTrigger()}catch(H){f.onError(H)}},Q=()=>{if(z)clearTimeout(z);z=setTimeout(()=>{z=null,q()},f.debounceMs),z.unref?.()};try{HA(J,{recursive:!0}),X=BA(J,(H,B)=>{let V=B===null?null:String(B);if(V!==null&&!Y.has(V))return;Q()}),X.on("error",f.onError)}catch(H){f.onError(H)}if(f.pollMs&&f.pollMs>0)G=setInterval(q,f.pollMs),G.unref?.();return()=>{if(z)clearTimeout(z),z=null;if(G)clearInterval(G),G=null;X?.close(),X=null}}var FB=()=>{};import{homedir as VA}from"os";import{basename as KA,join as UA}from"path";function AB(f=process.env.KOBE_HOME_DIR??VA()){return UA(f,".kobe","settings","keybindings.yaml")}function sV(f,J={}){let Y=J.debounceMs??OB;if(Y<=0)return()=>{};let z=J.path??AB(),G=KA(z),X=G.replace(/\.yaml$/,".yml"),q=0;return f.publish("keybindings",{rev:q}),eZ({filePath:z,matchBasenames:[G,X],debounceMs:Y,onTrigger:()=>{try{q+=1,f.publish("keybindings",{rev:q})}catch(H){uf("keybindings-watcher",H)}},onError:(H)=>uf("keybindings-watcher",H)})}var OB=200;var tV=k(()=>{FB()});class gB{clients;idleGraceMs;onIdleStop;schedule;log;cancelIdle=null;stopping=!1;constructor(f){this.clients=f.clients,this.idleGraceMs=f.idleGraceMs,this.onIdleStop=f.onIdleStop,this.schedule=f.schedule??DA,this.log=f.log??gY}guiCount(){let f=0;for(let J of this.clients())if(J.holdsLifetime)f++;return f}hasSubscribers(){for(let f of this.clients())if(f.subscribed)return!0;return!1}isStopping(){return this.stopping}markStopping(){this.stopping=!0,this.clearIdle()}guiAttached(){this.clearIdle()}clientDisconnected(f){if(f)this.maybeArm()}clearIdle(){if(this.cancelIdle)this.cancelIdle(),this.cancelIdle=null}maybeArm(){if(this.stopping||this.guiCount()>0)return;this.clearIdle(),this.log("idle",`last gui gone \u2014 arming ${this.idleGraceMs}ms idle-stop grace`),this.cancelIdle=this.schedule(()=>{if(this.cancelIdle=null,this.stopping||this.guiCount()>0)return;this.log("idle","grace elapsed with no gui \u2014 self-stopping"),this.onIdleStop()},this.idleGraceMs)}}var DA=(f,J)=>{let Y=setTimeout(f,J);return Y.unref?.(),()=>clearTimeout(Y)};var eV=()=>{};import{spawn as LA}from"child_process";function RB(f,J,Y,z){if(Y)return f+z.slowRetryMs;return J+Math.max(z.minIntervalMs,(J-f)*5)}function CB(f,J){return!f.inFlight&&J>=f.nextAllowedAt}function fq(f,J,Y,z){let G=Date.now();if(!CB(f,G))return!1;f.inFlight=!0;let X=new AbortController,q=setTimeout(()=>X.abort(),J.timeoutMs);return(async()=>{let Q,H=!1;try{Q=await Y(X.signal),H=!0}catch{}clearTimeout(q);let B=X.signal.aborted;if(f.nextAllowedAt=RB(G,Date.now(),B,J),f.inFlight=!1,H&&!B)z(Q)})(),!0}function BJ(f,J,Y){return new Promise((z)=>{let G="",X=!1,q=(H)=>{if(X)return;X=!0,z({status:H,stdout:G})},Q=LA(f,J.slice(),{cwd:Y.cwd,stdio:["ignore","pipe","ignore"],env:Y.env,signal:Y.signal,killSignal:"SIGKILL"});Q.stdout?.on("data",(H)=>{G+=String(H)}),Q.on("error",()=>q(null)),Q.on("close",(H)=>q(H))})}var HX=()=>{};function gA(f){if(f.archived)return!1;if(f.kind==="main")return!1;if(!f.branch||!f.worktreePath)return!1;if(D1(f.repo)||D1(f.worktreePath))return!1;return!0}async function RA(f,J){let Y=J.tickMs??Jq,z=[];for(let G of f.listTasks()){if(!gA(G)){J.schedule.delete(G.id);continue}let X=J.schedule.get(G.id)??0;if(J.now<X)continue;try{let q=await J.run(G.worktreePath,G.branch);if(q.kind==="empty"){J.schedule.set(G.id,J.now+MA);continue}let Q=WW(q.view,J.at),H=f.getTask(G.id);if(!H){J.schedule.delete(G.id);continue}if(!MZ(H.prStatus,Q??void 0))await f.setPRStatus(G.id,Q),z.push(G.id);let B=Q?.lifecycle==="merged"||Q?.lifecycle==="closed";J.schedule.set(G.id,J.now+(B?FA:Y))}catch(q){uf("pr-status-poller",q),J.schedule.set(G.id,J.now+Y)}}return z}function f7(f,J=Jq,Y,z=AA){if(J<=0)return()=>{};let G=new Map,X=!1,Q=setInterval(()=>{if(Y&&!Y())return;if(X)return;X=!0,RA(f,{run:z,now:Date.now(),at:new Date().toISOString(),schedule:G,tickMs:J}).catch((H)=>uf("pr-status-poller",H)).finally(()=>{X=!1})},J);return Q.unref?.(),()=>clearInterval(Q)}var Jq=30000,MA=300000,FA=600000,OA=1e4,AA=async(f,J)=>{let Y=new AbortController,z=setTimeout(()=>Y.abort(),OA);try{let G=await BJ("gh",["pr","view",J,"--json",jW],{cwd:f,signal:Y.signal});if(G.status!==0)return{kind:"empty"};let X=JSON.parse(G.stdout);return typeof X.number==="number"?{kind:"pr",view:X}:{kind:"empty"}}catch{return{kind:"empty"}}finally{clearTimeout(z)}};var J7=k(()=>{HX();gf()});import{readFileSync as CA}from"fs";import{homedir as kA}from"os";import{basename as NA,join as yA}from"path";function NB(f=process.env.KOBE_HOME_DIR??kA()){return yA(f,".config","kobe","state.json")}function Y7(f){let J={};try{let B=JSON.parse(CA(f,"utf8"));if(B&&typeof B==="object"&&!Array.isArray(B))J=B}catch{}let Y=typeof J.activeTheme==="string"&&J.activeTheme.length>0?J.activeTheme:"claude",z=J.transparentBackground===!0,G=typeof J.focusAccent==="string"&&SA.includes(J.focusAccent)?J.focusAccent:null,X=J.activeSortMode==="recent"?"recent":"default",q=J["tasksPane.keysCollapsed"]===!0,Q=typeof J["tasksPane.projectFilter"]==="string"&&J["tasksPane.projectFilter"].length>0?J["tasksPane.projectFilter"]:null,H=typeof J.locale==="string"&&J.locale.length>0?J.locale:"en";return{theme:Y,transparentBackground:z,focusAccent:G,locale:H,sortMode:X,keysCollapsed:q,projectFilter:Q}}function IA(f,J){return f.theme===J.theme&&f.transparentBackground===J.transparentBackground&&f.focusAccent===J.focusAccent&&f.locale===J.locale&&f.sortMode===J.sortMode&&f.keysCollapsed===J.keysCollapsed&&f.projectFilter===J.projectFilter}function z7(f,J={}){let Y=J.debounceMs??kB;if(Y<=0)return()=>{};let z=J.pollMs??bA,G=J.statePath??NB(),X=NA(G),q=Y7(G);return f.publish("ui-prefs",q),eZ({filePath:G,matchBasenames:[X],debounceMs:Y,pollMs:z,onTrigger:()=>{try{let H=Y7(G);if(IA(q,H))return;q=H,f.publish("ui-prefs",H)}catch(H){uf("ui-prefs-watcher",H)}},onError:(H)=>uf("ui-prefs-watcher",H)})}var kB=200,bA=250,SA;var G7=k(()=>{FB();SA=["primary","success","info"]});function yB(){return nf()[Wz]===!0}var Wz="experimental.dispatcher";var Yq=k(()=>{pY()});import{randomUUID as TA}from"crypto";function jJ(f){return`engineCommand.${f}`}function WJ(f){return`engineName.${f}`}function Vz(f){return kf(WJ(f))?.trim()||bB[f]||f}function BX(f){return pf(f??"claude").defaultCommand}function uA(f){let J=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g;for(let z=Y.exec(f);z!==null;z=Y.exec(f))J.push(z[1]??z[2]??z[3]??"");return J}function N1(f,J){let Y=f??"claude",z=kf(jJ(Y))?.trim(),G=(()=>{if(z){let X=uA(z);if(X.length>0)return X}return BX(Y)})();return EA(G,Y,J)}function EA(f,J,Y){let z=Y?.trim();if(!z)return f;let G=J??"claude";if(!pf(G).effortLevels?.includes(z))return f;if(G==="codex")return[...f,"-c",`model_reasoning_effort=${z}`];return f}function pz(f,J){if((J??"claude")!=="claude")return{argv:f,sessionId:null};if(f.some((z)=>xA.has(z)))return{argv:f,sessionId:null};let Y=TA();return{argv:[...f,"--session-id",Y],sessionId:Y}}function Kz(){let f=(J)=>/^[A-Za-z0-9_/.:=-]+$/.test(J)?J:`'${J.replace(/'/g,"'\\''")}'`;try{return[...Cf(),"api"].map(f).join(" ")}catch{return"kobe api"}}function wA(f,J=Kz()){return[`You are running inside kobe (a local multi-session task manager) as task ${f}.`,"kobe tracks a lifecycle status for this task on a board.","When you have COMPLETED the work requested in this session and verified it, report it by running:",` ${J} set-status --task-id ${f} --status in_review`,"Run it only when the work is genuinely done \u2014 never while you are asking the user a question, waiting for input, or mid-task.","Never set any other status value; everything beyond in_review is the user's decision."].join(`
47
- `)}function hA(f,J=Kz()){return["kobe shares hard-won discoveries between its parallel sessions as one-line field notes.","When you RESOLVE a non-obvious, repo-level gotcha (a build flag, a flaky test, an environment quirk, an API trap), file it:",` ${J} note --task-id ${f} --text "<one line: the verified conclusion>"`,"File only verified conclusions another session could act on \u2014 never progress logs, opinions, or details specific to your own task. A handful per session at most."].join(`
48
- `)}function PA(f,J=Kz(),Y={}){let z=[];if((Y.status??pZ)())z.push(wA(f,J));if((Y.notes??yB)())z.push(hA(f,J));return z.length>0?z.join(`
49
-
50
- `):null}function zq(f,J,Y,z={}){if(!Y)return f;if((J??"claude")!=="claude")return f;if(f.includes("--append-system-prompt")||f.includes("--append-system-prompt-file"))return f;let G=PA(Y,Kz(),z);if(!G)return f;return[...f,"--append-system-prompt",G]}function vA(f,J=Kz()){return[`You are running inside kobe (a local multi-session task manager) as this repository's DISPATCHER (task ${f}, the repo's main session).`,"kobe runs multiple worktree task sessions on this repo in parallel. When one of them resolves a non-obvious gotcha, it files a one-line field note; kobe forwards each note to you as a user message prefixed with [KOBE FIELD NOTE].","Your job is routing that knowledge, fully autonomously \u2014 never ask the user for permission:",` - See the fleet: \`${J} collect --repo .\` (status, running, change counts per task), or \`--task-ids id1,id2\` for specific tasks.`,` - Relay a note to a task that would benefit: \`${J} dispatch --task-id <id> --prompt "[dispatcher] FYI from <author task>: <note verbatim>"\`.`," - Relay to the in-flight tasks whose work plausibly touches the same area \u2014 and to nobody else. If no task benefits, do nothing."," - Never relay a note back to its author, never relay the same note to the same task twice, and keep relays verbatim with provenance \u2014 no summarizing, no embellishment.","Use ONLY the dispatch verb to message sessions \u2014 the `send` verb pastes via tmux and would spawn a DUPLICATE engine for web-hosted sessions. If dispatch fails, report the error in your own session and stop; do not fall back.","Take no action on merge conflicts between tasks \u2014 the board's conflict radar is display-only by design, and resolution timing belongs to the humans and the tasks themselves.","Never run git commands inside other tasks' worktrees."].join(`
51
- `)}function Gq(f,J,Y,z=yB){if(!Y||!z())return f;if((J??"claude")!=="claude")return f;if(f.includes("--append-system-prompt")||f.includes("--append-system-prompt-file"))return f;return[...f,"--append-system-prompt",vA(Y)]}var bB,xA;var E1=k(()=>{lJ();MY();ZX();Yq();gf();K1();bB=Object.fromEntries(dY.map((f)=>[f,pf(f).displayName]));xA=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});function _z(f){return Uz.includes(f)?f:"auto"}var Uz,X7,pJ="editor.kind",kY="editor.customCommand",Xq="auto";var Zq=k(()=>{Uz=["auto","vim","nvim","nano","emacs","custom"],X7=["nvim","vim","emacs","nano"]});function Lz(f){return f==="taskpanel"?"taskpanel":"chattab"}var _J="settings.surface",Dz="chattab";function x1(f=process.env){return{...f,...SB}}var SB;var NY=k(()=>{SB={GIT_OPTIONAL_LOCKS:"0"}});async function oz(f,J,Y={}){if(!f)return{stdout:"",stderr:"worktreePath is required",status:-1};let z=(Y.execForPath??cJ)(f),G=Y.timeoutMs&&Y.timeoutMs>0?new AbortController:null,X=!1,q=G?setTimeout(()=>{X=!0,G.abort()},Y.timeoutMs):null,Q;try{Q=await z.run(["git",...J],{cwd:f,env:SB,signal:G?.signal})}catch(H){if(q)clearTimeout(q);return{stdout:"",stderr:H instanceof Error?H.message:String(H),status:-1}}if(q)clearTimeout(q);if(X&&Q.exitCode===-1&&!Q.stderr)return{stdout:Q.stdout,stderr:`git ${J.join(" ")} timed out after ${Y.timeoutMs}ms`,status:-1};return{stdout:Q.stdout,stderr:Q.stderr,status:Q.exitCode}}function mA(f,J){if(!f||!J||J.startsWith("/"))return null;let Y=J.split("/");if(Y.some((z)=>z===".."))return null;return`${f.replace(/\/+$/,"")}/${Y.filter(Boolean).join("/")}`}async function Z7(f,J,Y={}){let z=mA(f,J);if(!z)return null;let G=(Y.execForPath??cJ)(f);try{return await G.readFile(z)}catch{return null}}var qq=k(()=>{e1();NY()});import{statSync as cA}from"fs";async function jX(f,J){let Y=await oz(f,J,{timeoutMs:nA}),z=Y.status??-1;return{ok:z===0,stdout:Y.stdout,stderr:Y.stderr,code:z}}function iA(f){switch(f){case"M":return"modified";case"A":return"added";case"D":return"deleted";case"R":return"renamed";case"C":return"copied";case"T":return"type changed";case"U":return"unmerged";case"?":return"untracked";default:return"changed"}}function q7(f){let J=new Map;if(!f)return J;let Y=f.split(/(?=^diff --git )/m);for(let z of Y){if(!z.startsWith("diff --git"))continue;let G=null,X=z.match(/^\+\+\+ b\/(.*)$/m);if(X&&X[1]!=="/dev/null")G=X[1];else{let q=z.match(/^diff --git a\/.* b\/(.*)$/m);if(q)G=q[1]}if(!G)continue;J.set(lA(G),z.endsWith(`
28
+ `)&&f.endsWith("</INSTRUCTIONS>")}var DW=()=>{};function LW(f,J={}){let Y=gH(f.input_tokens,0),z=gH(f.cached_input_tokens,0),G=gH(f.output_tokens,0),X=Math.max(0,Y-z);if(Y<=0&&G<=0&&z<=0)return;return{input_tokens:X,output_tokens:G,...z>0?{cache_read_input_tokens:z}:{},...vF(J.contextWindowTokens)?{context_window_tokens:J.contextWindowTokens}:{}}}function gH(f,J){return typeof f==="number"&&Number.isFinite(f)?f:J}function vF(f){return typeof f==="number"&&Number.isFinite(f)&&f>0}import{readFile as mF,readdir as cF,stat as nF,unlink as nT}from"fs/promises";import{homedir as dF}from"os";import zz from"path";async function NH(f=Gz){let J=f.sessionsDir(),Y=(await f.readdir(J)).sort().reverse(),z=[];for(let G of Y){let X=zz.join(J,G),q=(await f.readdir(X)).sort().reverse();for(let Q of q){let H=zz.join(X,Q),B=(await f.readdir(H)).sort().reverse();for(let V of B){let j=zz.join(H,V),U=(await f.readdir(j)).filter((L)=>L.startsWith("rollout-")&&L.endsWith(".jsonl"));U.sort().reverse();for(let L of U)z.push(zz.join(j,L))}}}return z}async function iF(f,J=Gz){if(!f)return;let Y=f.toLowerCase(),z=await NH(J);for(let G of z)if(zz.basename(G).match(AW)?.[1]?.toLowerCase()===Y)return G;return}function lF(f){for(let J of f.split(`
29
+ `)){let Y=J.trim();if(!Y)continue;try{let z=JSON.parse(Y);if(z.type==="session_meta")return z.payload?.cwd??""}catch{}return""}return""}async function gW(f,J){let Y=MW.get(J);if(!Y)Y=new Map,MW.set(J,Y);let z=Y.get(f);if(z!==void 0)return z;let G;try{G=await J.readFile(f)}catch{return null}let X=lF(G);if(X)Y.set(f,X);return X}async function RW(f,J=Gz){if(!f)return[];let Y=await NH(J),z=[],G=0;for(let X of Y){if(G>=aF)break;if(G++,await gW(X,J)!==f)continue;let q=zz.basename(X).match(AW)?.[1];if(q)z.push(q)}return z.reverse()}async function yH(f,J=Gz){if(!f)return null;let Y=await NH(J),z=0;for(let G of Y){if(z>=$F)break;if(z++,await gW(G,J)!==f)continue;try{return{path:G,mtimeMs:(await J.stat(G)).mtimeMs}}catch{}}return null}async function CW(f,J=Gz){return(await yH(f,J))?.mtimeMs??0}async function kW(f,J=Gz){return(await rF(f,J)).messages}async function rF(f,J=Gz){let Y=await iF(f,J);if(!Y)return{messages:[]};let z;try{z=await J.readFile(Y)}catch{return{messages:[]}}let G=pF(_F(z,f)),X=f3(z);return{messages:G,...X?{usageMetrics:X}:{}}}function pF(f){return f.map((J,Y)=>({msg:J,idx:Y})).sort((J,Y)=>{if(J.msg.timestamp<Y.msg.timestamp)return-1;if(J.msg.timestamp>Y.msg.timestamp)return 1;return J.idx-Y.idx}).map((J)=>J.msg)}function _F(f,J){let Y=[];for(let z of f.split(`
30
+ `)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!aG(X))continue;if(X.type!=="response_item")continue;let q=aG(X.payload)?X.payload:void 0;if(!q)continue;let Q=typeof X.timestamp==="string"?X.timestamp:new Date().toISOString(),H=oF(q,Q,J);if(H)Y.push(H)}return Y}function oF(f,J,Y){if(f.type==="message"){let z=f.role;if(z!=="user"&&z!=="assistant"&&z!=="system")return;let G=AH(f.content);if(z==="user"&&UW(G))return;return{role:z,blocks:G,timestamp:J,sessionId:Y}}if(f.type==="reasoning")return sF(f,J,Y);if(f.type==="function_call")return RH(f,J,Y,{name:kH(f.name,"function_call"),input:CH(f.arguments)});if(f.type==="custom_tool_call")return RH(f,J,Y,{name:kH(f.name,"custom_tool_call"),input:CH(f.input)});if(f.type==="tool_search_call")return RH(f,J,Y,{name:"tool_search_call",input:CZ(f,["type","call_id","status"])});if(f.type==="function_call_output"||f.type==="custom_tool_call_output")return FW(f,J,Y,CH(f.output));if(f.type==="tool_search_output")return FW(f,J,Y,CZ(f,["type","call_id"]));if(f.type==="web_search_call"||f.type==="image_generation_call"||f.type==="local_shell_call")return tF(f,J,Y);return}function sF(f,J,Y){let z=eF(f);if(z.length===0)return;return{role:"assistant",blocks:[{type:"thinking",text:z}],timestamp:J,sessionId:Y}}function RH(f,J,Y,z){let G=typeof f.call_id==="string"?f.call_id:void 0;if(!G)return;return{role:"assistant",blocks:[{type:"tool_call",callId:G,name:z.name,input:z.input}],timestamp:J,sessionId:Y}}function FW(f,J,Y,z){let G=typeof f.call_id==="string"?f.call_id:void 0;if(!G)return;return{role:"user",blocks:[{type:"tool_result",callId:G,output:z,isError:!1}],timestamp:J,sessionId:Y}}function tF(f,J,Y){let z=typeof f.type==="string"?f.type:"tool",G=typeof f.call_id==="string"&&f.call_id.length>0?f.call_id:`${z}:${J}`,X=kH(f.name,z),q=CZ(f,["type","call_id","status"]),Q=CZ(f,["type","call_id"]);return{role:"assistant",timestamp:J,sessionId:Y,blocks:[{type:"tool_call",callId:G,name:X,input:q},{type:"tool_result",callId:G,output:Q,isError:!1}]}}function eF(f){let J=OW(f.content);if(J.length>0)return J;let Y=typeof f.text==="string"?f.text:"";if(Y.length>0)return Y;return OW(f.summary)}function OW(f){if(typeof f==="string")return f;if(!Array.isArray(f))return"";let J=[];for(let Y of f){if(typeof Y==="string"){J.push(Y);continue}if(!aG(Y))continue;let z=typeof Y.text==="string"?Y.text:"";if(z.length>0)J.push(z)}return J.join("")}function CZ(f,J){let Y={};for(let[z,G]of Object.entries(f))if(!J.includes(z))Y[z]=G;return Y}function kH(f,J){return typeof f==="string"&&f.length>0?f:J}function CH(f){if(typeof f!=="string")return f;try{return JSON.parse(f)}catch{return f}}function f3(f){let J,Y=null;for(let z of f.split(`
31
+ `)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!aG(X))continue;let q=typeof X.timestamp==="string"?J3(X.timestamp):null;if(X.type==="response_item")continue;if(X.type!=="turn.completed")continue;let Q=aG(X.usage)?X.usage:void 0;if(!Q)continue;let H=LW(Q);if(!H)continue;if(q!==null&&(Y===null||q>Y))Y=q,J=H;else if(Y===null)J=H}return J}function J3(f){let J=new Date(f).getTime();return Number.isFinite(J)?J:null}function aG(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var Gz,AW,MW,aF=200,$F=12;var bH=k(()=>{DW();Gz={sessionsDir(){return zz.join(dF(),".codex","sessions")},async readdir(f){try{return await cF(f)}catch{return[]}},async readFile(f){return await mF(f,"utf8")},stat:nF};AW=/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;MW=new WeakMap});function yW(f){if(!kZ(f))return;let J=kZ(f.modelMetrics)?f.modelMetrics:void 0;if(!J)return;let Y=0,z=0,G=0;for(let q of Object.values(J)){if(!kZ(q)||!kZ(q.usage))continue;Y+=NZ(q.usage.inputTokens,0),z+=NZ(q.usage.outputTokens,0),G+=NZ(q.usage.cacheReadTokens,0)}let X=NZ(f.currentTokens,0);if(Y===0&&z===0&&G===0&&X===0)return;return{input_tokens:Y,output_tokens:z,...G>0?{cache_read_input_tokens:G}:{},...X>0?{context_tokens:X}:{}}}function kZ(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function NZ(f,J){return typeof f==="number"&&Number.isFinite(f)?f:J}import{readFile as Y3,readdir as z3,rm as G3,stat as X3}from"fs/promises";import{homedir as Z3}from"os";import KY from"path";async function IH(f=Xz){let J=KY.join(f.copilotDir(),"session-state");return(await f.readdir(J)).map((z)=>KY.join(J,z))}async function bW(f,J=Xz){let Y=[];for(let z of await IH(J)){let G=await TH(z,J);if(G.cwd!==f)continue;Y.push({id:G.id??KY.basename(z),updatedAt:G.updatedAt??""})}return Y.sort((z,G)=>z.updatedAt.localeCompare(G.updatedAt)).map((z)=>z.id)}async function SW(f,J=Xz){if(!f)return 0;let Y=0;for(let z of await IH(J)){if((await TH(z,J)).cwd!==f)continue;try{let{mtimeMs:X}=await J.stat(KY.join(z,"events.jsonl"));if(X>Y)Y=X}catch{}}return Y}async function q3(f,J=Xz){let Y=await Q3(f,J);if(!Y)return{messages:[]};let z=await J.readFile(KY.join(Y,"events.jsonl")).catch(()=>""),G=B3(z,f);return{messages:G.messages,...G.usageMetrics?{usageMetrics:G.usageMetrics}:{}}}async function IW(f,J=Xz){return(await q3(f,J)).messages}async function Q3(f,J=Xz){for(let Y of await IH(J)){if(KY.basename(Y)===f)return Y;let z=await TH(Y,J);if(z.id===f||z.name?.toLowerCase()===f.toLowerCase())return Y}return}async function TH(f,J=Xz){let Y=await J.readFile(KY.join(f,"workspace.yaml")).catch(()=>"");return H3(Y)}function H3(f){let J={};for(let Y of f.split(`
32
+ `)){let z=Y.match(/^([A-Za-z_]+):\s*(.*)$/);if(!z)continue;let G=z[1],X=z[2]??"";if(X.startsWith('"')&&X.endsWith('"'))X=X.slice(1,-1).replace(/\\"/g,'"');J[G]=X}return{id:J.id,cwd:J.cwd,name:J.name,updatedAt:J.updated_at,createdAt:J.created_at}}function B3(f,J){let Y=[],z=new Map,G=J,X,q=null;for(let Q of f.split(`
33
+ `)){let H=Q.trim();if(!H)continue;let B;try{B=JSON.parse(H)}catch{continue}if(!SH(B)||typeof B.type!=="string")continue;let V=typeof B.timestamp==="string"?B.timestamp:new Date().toISOString(),j=SH(B.data)?B.data:{};if(B.type==="session.start"){let U=typeof j.sessionId==="string"?j.sessionId:void 0;if(U)G=U;continue}if(B.type==="user.message"){let U=typeof j.content==="string"?j.content:"";if(!U)continue;if(!q)q=Buffer.from(U.slice(0,j3),"utf8").toString("utf8");Y.push({role:"user",blocks:[{type:"text",text:U}],timestamp:V,sessionId:G});continue}if(B.type==="assistant.message"){let U=[],L=typeof j.content==="string"?j.content:"";if(L)U.push({type:"text",text:L});let O=Array.isArray(j.toolRequests)?j.toolRequests:[];for(let M of O){if(!SH(M))continue;let R=typeof M.id==="string"?M.id:typeof M.toolCallId==="string"?M.toolCallId:"tool",S=typeof M.name==="string"?M.name:typeof M.toolName==="string"?M.toolName:"tool";U.push({type:"tool_call",callId:R,name:S,input:M.arguments??{}})}if(U.length>0)Y.push({role:"assistant",blocks:U,timestamp:V,sessionId:G});continue}if(B.type==="tool.execution_start"){let U=typeof j.toolCallId==="string"?j.toolCallId:void 0,L=typeof j.toolName==="string"?j.toolName:"tool";if(U)z.set(U,L);continue}if(B.type==="tool.execution_complete"){let U=typeof j.toolCallId==="string"?j.toolCallId:void 0;if(!U)continue;let L=z.get(U)??(typeof j.toolName==="string"?j.toolName:"tool"),O=j.result??(j.success===!1?{success:!1}:void 0);Y.push({role:"assistant",blocks:[{type:"tool_result",callId:U,output:O,isError:j.success===!1}],timestamp:V,sessionId:G});continue}if(B.type==="session.shutdown")X=yW(j)}return{messages:Y,usageMetrics:X,firstUserMessage:q}}function SH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var Xz,j3=200;var TW=k(()=>{Xz={copilotDir(){let f=process.env.COPILOT_HOME?.trim();if(f)return f;return KY.join(Z3(),".copilot")},async readdir(f){try{return await z3(f)}catch{return[]}},async readFile(f){return await Y3(f,"utf8")},stat:X3,async rm(f){await G3(f,{recursive:!0,force:!0})}}});function uH(f){return pf(f).createHookAdapter()}class $G{vendor;constructor(f){this.vendor=f}supportsHooks(){return!1}activityDetailFromPayload(){return}async installActivityHooks(){}async removeActivityHooks(){}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(){}async installWorktreeWatchHook(){}async removeWorktreeWatchHook(){}}var EH=k(()=>{UY()});import{readFile as uW}from"fs/promises";class yZ{supportsCompletionMarkers(){return!0}}function EW(f){return pf(f).createTurnDetector()}function U3(f,J="claude",Y=0){let z=null,G=0;for(let X of f.split(`
34
+ `)){G++;let q=xW(X);if(!q)continue;let Q=hW(q.message)?q.message:q;if(Q.role!=="assistant")continue;if(!("content"in Q))continue;let H=wW(q,Y),B={id:`claude:${J}:${H}:${G}`,timestampMs:H,source:"claude"};if(!z||B.timestampMs>=z.timestampMs)z=B}return z}function D3(f,J="codex"){let Y=null,z=0;for(let G of f.split(`
35
+ `)){z++;let X=xW(G);if(!X||X.type!=="turn.completed")continue;let q=wW(X,0),Q={id:`codex:${J}:${q}:${z}`,timestampMs:q,source:"codex"};if(!Y||Q.timestampMs>=Y.timestampMs)Y=Q}return Y}function xW(f){let J=f.trim();if(!J)return null;try{let Y=JSON.parse(J);return hW(Y)?Y:null}catch{return null}}function wW(f,J){let Y=typeof f.timestamp==="string"?Date.parse(f.timestamp):Number.NaN;return Number.isFinite(Y)?Y:J}function hW(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var V3,xH,K3,wH,bZ;var hH=k(()=>{KH();bH();UY();V3={listSessionFiles:(f)=>cG(f),readFile:(f)=>uW(f,"utf8")};xH=class xH extends yZ{deps;vendor="claude";cache=new Map;constructor(f=V3){super();this.deps=f}async latestCompletion(f){let J=await this.deps.listSessionFiles(f),Y=null,z=new Map;for(let G of J.slice(0,4)){let X=this.cache.get(G.path),q;if(X&&G.mtimeMs>0&&X.mtimeMs===G.mtimeMs)q=X.marker;else{let Q=await this.deps.readFile(G.path).catch(()=>"");q=U3(Q,G.path,G.mtimeMs)}if(z.set(G.path,{mtimeMs:G.mtimeMs,marker:q}),q&&(!Y||q.timestampMs>Y.timestampMs))Y=q}return this.cache=z,Y}};K3={findLatestRollout:(f)=>yH(f),readFile:(f)=>uW(f,"utf8")};wH=class wH extends yZ{deps;vendor="codex";cache=null;constructor(f=K3){super();this.deps=f}async latestCompletion(f){if(!f)return null;let J=await this.deps.findLatestRollout(f);if(!J)return null;if(this.cache&&this.cache.path===J.path&&J.mtimeMs>0&&this.cache.mtimeMs===J.mtimeMs)return this.cache.marker;let Y=await this.deps.readFile(J.path).catch(()=>"");if(!Y)return null;let z=D3(Y,J.path);return this.cache={path:J.path,mtimeMs:J.mtimeMs,marker:z},z}};bZ=class bZ extends yZ{vendor;constructor(f){super();this.vendor=f}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function g3(f){return{vendor:f,builtin:!1,displayName:f,defaultCommand:[f],history:L3,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new $G(f),createTurnDetector:()=>new bZ(f)}}function pf(f){return H1(f)?A3[f]:g3(f)}var L3,M3,F3,O3,A3;var UY=k(()=>{U1();tY();KH();KW();bH();TW();EH();hH();L3={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},M3={async listSessionIdsForWorktree(f){return[...await cG(f)].sort((Y,z)=>Y.mtimeMs-z.mtimeMs).map((Y)=>Y.sessionId)},readHistory:(f)=>YW(f),latestTranscriptMtimeForWorktree:(f)=>JW(f)},F3={listSessionIdsForWorktree:(f)=>RW(f),readHistory:(f)=>kW(f),latestTranscriptMtimeForWorktree:(f)=>CW(f)},O3={listSessionIdsForWorktree:(f)=>bW(f),readHistory:(f)=>IW(f),latestTranscriptMtimeForWorktree:(f)=>SW(f)},A3={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:M3,detectAccount:(f)=>LZ(f),createHookAdapter:()=>new OH,createTurnDetector:()=>new xH},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:F3,detectAccount:(f)=>MZ(f),createHookAdapter:()=>new $G("codex"),createTurnDetector:()=>new wH},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:O3,detectAccount:(f)=>FZ(f),createHookAdapter:()=>new $G("copilot"),createTurnDetector:()=>new bZ("copilot")}}});function PW(f){if(typeof f!=="string")return"";let J=f.replace(/\s+/g," ").trim();if(J.length===0)return"";let Y=[...J];if(Y.length<=40)return J;return`${Y.slice(0,40).join("")}\u2026`}function SZ(f,J){let Y=f.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,32),z=J.slice(-6).toLowerCase();return`kobe/${Y||"task"}-${z}`}function vW(f){return typeof f==="string"&&R3.includes(f)}var rG=(f)=>f,Sf="claude",R3;var I1=k(()=>{R3=["backlog","in_progress","in_review","done","canceled","error"]});function mW(f){let J=f.find((G)=>G.role==="user");if(!J)return"";let Y=J.blocks.filter((G)=>G.type==="text").map((G)=>G.text).join(" "),z=PW(Y);return z.length>0?Buffer.from(z,"utf8").toString("utf8"):z}async function Pz(f,J=Sf){if(!f)return"";let{history:Y}=pf(J),z=await Y.listSessionIdsForWorktree(f);for(let G of z.slice(0,C3)){let X=mW(await Y.readHistory(G));if(X)return X}return""}async function cW(f,J){if(!J)return"";try{return mW(await pf(f).history.readHistory(J))}catch{return""}}var C3=8;var IZ=k(()=>{UY();I1()});function nW(f){let J=String(f),Y=J.length-1;return hf.context.id+(Y?String.fromCharCode(96+Y):"")+J}function mH(f){hf.context=f}function k3(){return{...hf.context,id:hf.getNextContextId(),count:0}}function Zz(f,J){let Y=Kf,z=e0,G=f.length===0,X=J===void 0?z:J,q=G?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:X?X.context:null,owner:X},Q=G?()=>f(()=>{throw Error("Dispose method must be an explicit argument to createRoot function")}):()=>f(()=>$f(()=>DY(q)));XJ.afterCreateOwner&&XJ.afterCreateOwner(q),e0=q,Kf=null;try{return C1(Q,!0)}finally{Kf=Y,e0=z}}function r(f,J){J=J?Object.assign({},EZ,J):EZ;let Y={value:f,observers:null,observerSlots:null,comparator:J.equals||void 0};{if(J.name)Y.name=J.name;if(J.internal)Y.internal=!0;else if(oW(Y),XJ.afterCreateSignal)XJ.afterCreateSignal(Y)}let z=(G)=>{if(typeof G==="function")if(j0&&j0.running&&j0.sources.has(Y))G=G(Y.tValue);else G=G(Y.value);return nH(Y,G)};return[sW.bind(Y),z]}function iW(f,J,Y){let z=sG(f,J,!0,T1,Y);if(mz&&j0&&j0.running)df.push(z);else qz(z)}function RJ(f,J,Y){let z=sG(f,J,!1,T1,Y);if(mz&&j0&&j0.running)df.push(z);else qz(z)}function Gf(f,J,Y){_W=P3;let z=sG(f,J,!1,T1,Y),G=_G&&u1(_G);if(G)z.suspense=G;if(!Y||!Y.render)z.user=!0;B1?B1.push(z):qz(z)}function U0(f,J,Y){Y=Y?Object.assign({},EZ,Y):EZ;let z=sG(f,J,!0,0,Y);if(z.observers=null,z.observerSlots=null,z.comparator=Y.equals||void 0,mz&&j0&&j0.running)z.tState=T1,df.push(z);else qz(z);return sW.bind(z)}function T3(f){return f&&typeof f==="object"&&"then"in f}function PZ(f,J,Y){let z,G,X;if(typeof J==="function")z=f,G=J,X=Y||{};else z=!0,G=f,X=J||{};let q=null,Q=PH,H=null,B=!1,V=!1,j="initialValue"in X,U=typeof z==="function"&&U0(z),L=new Set,[O,M]=(X.storage||r)(X.initialValue),[R,S]=r(void 0),[a,N]=r(void 0,{equals:!1}),[g,C]=r(j?"ready":"unresolved");if(hf.context){if(H=hf.getNextContextId(),X.ssrLoadFrom==="initial")Q=X.initialValue;else if(hf.load&&hf.has(H))Q=hf.load(H)}function y(T,Q0,p,D0){if(q===T){if(q=null,D0!==void 0&&(j=!0),(T===Q||Q0===Q)&&X.onHydrated)queueMicrotask(()=>X.onHydrated(D0,{value:Q0}));if(Q=PH,j0&&T&&B)j0.promises.delete(T),B=!1,C1(()=>{j0.running=!0,_(Q0,p)},!1);else _(Q0,p)}return Q0}function _(T,Q0){C1(()=>{if(Q0===void 0)M(()=>T);C(Q0!==void 0?"errored":j?"ready":"unresolved"),S(Q0);for(let p of L.keys())p.decrement();L.clear()},!1)}function z0(){let T=_G&&u1(_G),Q0=O(),p=R();if(p!==void 0&&!q)throw p;if(Kf&&!Kf.user&&T)iW(()=>{if(a(),q){if(T.resolved&&j0&&B)j0.promises.add(q);else if(!L.has(T))T.increment(),L.add(T)}});return Q0}function t(T=!0){if(T!==!1&&V)return;V=!1;let Q0=U?U():z;if(B=j0&&j0.running,Q0==null||Q0===!1){y(q,$f(O));return}if(j0&&q)j0.promises.delete(q);let p,D0=Q!==PH?Q:$f(()=>{try{return G(Q0,{value:O(),refetching:T})}catch(g0){p=g0}});if(p!==void 0){y(q,void 0,uZ(p),Q0);return}else if(!T3(D0))return y(q,D0,void 0,Q0),D0;if(q=D0,"v"in D0){if(D0.s===1)y(q,D0.v,void 0,Q0);else y(q,void 0,uZ(D0.v),Q0);return D0}return V=!0,queueMicrotask(()=>V=!1),C1(()=>{C(j?"refreshing":"pending"),N()},!1),D0.then((g0)=>y(D0,g0,void 0,Q0),(g0)=>y(D0,void 0,uZ(g0),Q0))}Object.defineProperties(z0,{state:{get:()=>g()},error:{get:()=>R()},loading:{get(){let T=g();return T==="pending"||T==="refreshing"}},latest:{get(){if(!j)return z0();let T=R();if(T&&!q)throw T;return O()}}});let Y0=e0;if(U)iW(()=>(Y0=e0,t(!1)));else t(!1);return[z0,{refetch:(T)=>u3(Y0,()=>t(T)),mutate:M}]}function vZ(f){return C1(f,!1)}function $f(f){if(!vz&&Kf===null)return f();let J=Kf;Kf=null;try{if(vz)return vz.untrack(f);return f()}finally{Kf=J}}function k1(f,J,Y){let z=Array.isArray(f),G,X=Y&&Y.defer;return(q)=>{let Q;if(z){Q=Array(f.length);for(let B=0;B<f.length;B++)Q[B]=f[B]()}else Q=f();if(X)return X=!1,q;let H=$f(()=>J(Q,G,q));return G=Q,H}}function J1(f){Gf(()=>$f(f))}function mf(f){if(e0===null)console.warn("cleanups created outside a `createRoot` or `render` will never be run");else if(e0.cleanups===null)e0.cleanups=[f];else e0.cleanups.push(f);return f}function mZ(){return Kf}function u3(f,J){let Y=e0,z=Kf;e0=f,Kf=null;try{return C1(J,!0)}catch(G){cZ(G)}finally{e0=Y,Kf=z}}function E3(f){if(j0&&j0.running)return f(),j0.done;let J=Kf,Y=e0;return Promise.resolve().then(()=>{Kf=J,e0=Y;let z;if(mz||_G)z=j0||(j0={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),z.done||(z.done=new Promise((G)=>z.resolve=G)),z.running=!0;return C1(f,!1),Kf=e0=null,z?z.done:void 0})}function aW(f,J){let Y=sG(()=>$f(()=>{return Object.assign(f,{[S3]:!0}),f(J)}),void 0,!0,0);return Y.props=J,Y.observers=null,Y.observerSlots=null,Y.name=f.name,Y.component=f,qz(Y),Y.tValue!==void 0?Y.tValue:Y.value}function oW(f){if(e0){if(e0.sourceMap)e0.sourceMap.push(f);else e0.sourceMap=[f];f.graph=e0}if(XJ.afterRegisterGraph)XJ.afterRegisterGraph(f)}function CJ(f,J){let Y=Symbol("context");return{id:Y,Provider:v3(Y,J),defaultValue:f}}function u1(f){let J;return e0&&e0.context&&(J=e0.context[f.id])!==void 0?J:f.defaultValue}function x3(f){let J=U0(f),Y=U0(()=>cH(J()),void 0,{name:"children"});return Y.toArray=()=>{let z=Y();return Array.isArray(z)?z:z!=null?[z]:[]},Y}function sW(){let f=j0&&j0.running;if(this.sources&&(f?this.tState:this.state))if((f?this.tState:this.state)===T1)qz(this);else{let J=df;df=null,C1(()=>xZ(this),!1),df=J}if(Kf){let J=this.observers;if(!J||J[J.length-1]!==Kf){let Y=J?J.length:0;if(!Kf.sources)Kf.sources=[this],Kf.sourceSlots=[Y];else Kf.sources.push(this),Kf.sourceSlots.push(Y);if(!J)this.observers=[Kf],this.observerSlots=[Kf.sources.length-1];else J.push(Kf),this.observerSlots.push(Kf.sources.length-1)}}if(f&&j0.sources.has(this))return this.tValue;return this.value}function nH(f,J,Y){let z=j0&&j0.running&&j0.sources.has(f)?f.tValue:f.value;if(!f.comparator||!f.comparator(z,J)){if(j0){let G=j0.running;if(G||!Y&&j0.sources.has(f))j0.sources.add(f),f.tValue=J;if(!G)f.value=J}else f.value=J;if(f.observers&&f.observers.length)C1(()=>{for(let G=0;G<f.observers.length;G+=1){let X=f.observers[G],q=j0&&j0.running;if(q&&j0.disposed.has(X))continue;if(q?!X.tState:!X.state){if(X.pure)df.push(X);else B1.push(X);if(X.observers)eW(X)}if(!q)X.state=T1;else X.tState=T1}if(df.length>1e6){if(df=[],N3)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return J}function qz(f){if(!f.fn)return;DY(f);let J=hZ;if($W(f,j0&&j0.running&&j0.sources.has(f)?f.tValue:f.value,J),j0&&!j0.running&&j0.sources.has(f))queueMicrotask(()=>{C1(()=>{j0&&(j0.running=!0),Kf=e0=f,$W(f,f.tValue,J),Kf=e0=null},!1)})}function $W(f,J,Y){let z,G=e0,X=Kf;Kf=e0=f;try{z=f.fn(J)}catch(q){if(f.pure)if(j0&&j0.running)f.tState=T1,f.tOwned&&f.tOwned.forEach(DY),f.tOwned=void 0;else f.state=T1,f.owned&&f.owned.forEach(DY),f.owned=null;return f.updatedAt=Y+1,cZ(q)}finally{Kf=X,e0=G}if(!f.updatedAt||f.updatedAt<=Y){if(f.updatedAt!=null&&"observers"in f)nH(f,z,!0);else if(j0&&j0.running&&f.pure){if(!j0.sources.has(f))f.value=z;j0.sources.add(f),f.tValue=z}else f.value=z;f.updatedAt=Y}}function sG(f,J,Y,z=T1,G){let X={fn:f,state:z,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:J,owner:e0,context:e0?e0.context:null,pure:Y};if(j0&&j0.running)X.state=0,X.tState=z;if(e0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if(e0!==I3)if(j0&&j0.running&&e0.pure)if(!e0.tOwned)e0.tOwned=[X];else e0.tOwned.push(X);else if(!e0.owned)e0.owned=[X];else e0.owned.push(X);if(G&&G.name)X.name=G.name;if(vz&&X.fn){let q=X.fn,[Q,H]=r(void 0,{equals:!1}),B=vz.factory(q,H);mf(()=>B.dispose());let V,j=()=>E3(H).then(()=>{if(V)V.dispose(),V=void 0});X.fn=(U)=>{if(Q(),j0&&j0.running){if(!V)V=vz.factory(q,j);return V.track(U)}return B.track(U)}}return XJ.afterCreateOwner&&XJ.afterCreateOwner(X),X}function oG(f){let J=j0&&j0.running;if((J?f.tState:f.state)===0)return;if((J?f.tState:f.state)===pG)return xZ(f);if(f.suspense&&$f(f.suspense.inFallback))return f.suspense.effects.push(f);let Y=[f];while((f=f.owner)&&(!f.updatedAt||f.updatedAt<hZ)){if(J&&j0.disposed.has(f))return;if(J?f.tState:f.state)Y.push(f)}for(let z=Y.length-1;z>=0;z--){if(f=Y[z],J){let G=f,X=Y[z+1];while((G=G.owner)&&G!==X)if(j0.disposed.has(G))return}if((J?f.tState:f.state)===T1)qz(f);else if((J?f.tState:f.state)===pG){let G=df;df=null,C1(()=>xZ(f,Y[0]),!1),df=G}}}function C1(f,J){if(df)return f();let Y=!1;if(!J)df=[];if(B1)Y=!0;else B1=[];hZ++;try{let z=f();return w3(Y),z}catch(z){if(!Y)B1=null;df=null,cZ(z)}}function w3(f){if(df){if(mz&&j0&&j0.running)h3(df);else tW(df);df=null}if(f)return;let J;if(j0){if(!j0.promises.size&&!j0.queue.size){let{sources:z,disposed:G}=j0;B1.push.apply(B1,j0.effects),J=j0.resolve;for(let X of B1)"tState"in X&&(X.state=X.tState),delete X.tState;j0=null,C1(()=>{for(let X of G)DY(X);for(let X of z){if(X.value=X.tValue,X.owned)for(let q=0,Q=X.owned.length;q<Q;q++)DY(X.owned[q]);if(X.tOwned)X.owned=X.tOwned;delete X.tValue,delete X.tOwned,X.tState=0}lW(!1)},!1)}else if(j0.running){j0.running=!1,j0.effects.push.apply(j0.effects,B1),B1=null,lW(!0);return}}let Y=B1;if(B1=null,Y.length)C1(()=>_W(Y),!1);else XJ.afterUpdate&&XJ.afterUpdate();if(J)J()}function tW(f){for(let J=0;J<f.length;J++)oG(f[J])}function h3(f){for(let J=0;J<f.length;J++){let Y=f[J],z=j0.queue;if(!z.has(Y))z.add(Y),mz(()=>{z.delete(Y),C1(()=>{j0.running=!0,oG(Y)},!1),j0&&(j0.running=!1)})}}function P3(f){let J,Y=0;for(J=0;J<f.length;J++){let z=f[J];if(!z.user)oG(z);else f[Y++]=z}if(hf.context){if(hf.count){hf.effects||(hf.effects=[]),hf.effects.push(...f.slice(0,Y));return}mH()}if(hf.effects&&(hf.done||!hf.count))f=[...hf.effects,...f],Y+=hf.effects.length,delete hf.effects;for(J=0;J<Y;J++)oG(f[J])}function xZ(f,J){let Y=j0&&j0.running;if(Y)f.tState=0;else f.state=0;for(let z=0;z<f.sources.length;z+=1){let G=f.sources[z];if(G.sources){let X=Y?G.tState:G.state;if(X===T1){if(G!==J&&(!G.updatedAt||G.updatedAt<hZ))oG(G)}else if(X===pG)xZ(G,J)}}}function eW(f){let J=j0&&j0.running;for(let Y=0;Y<f.observers.length;Y+=1){let z=f.observers[Y];if(J?!z.tState:!z.state){if(J)z.tState=pG;else z.state=pG;if(z.pure)df.push(z);else B1.push(z);z.observers&&eW(z)}}}function DY(f){let J;if(f.sources)while(f.sources.length){let Y=f.sources.pop(),z=f.sourceSlots.pop(),G=Y.observers;if(G&&G.length){let X=G.pop(),q=Y.observerSlots.pop();if(z<G.length)X.sourceSlots[q]=z,G[z]=X,Y.observerSlots[z]=q}}if(f.tOwned){for(J=f.tOwned.length-1;J>=0;J--)DY(f.tOwned[J]);delete f.tOwned}if(j0&&j0.running&&f.pure)fV(f,!0);else if(f.owned){for(J=f.owned.length-1;J>=0;J--)DY(f.owned[J]);f.owned=null}if(f.cleanups){for(J=f.cleanups.length-1;J>=0;J--)f.cleanups[J]();f.cleanups=null}if(j0&&j0.running)f.tState=0;else f.state=0;delete f.sourceMap}function fV(f,J){if(!J)f.tState=0,j0.disposed.add(f);if(f.owned)for(let Y=0;Y<f.owned.length;Y++)fV(f.owned[Y])}function uZ(f){if(f instanceof Error)return f;return Error(typeof f==="string"?f:"Unknown error",{cause:f})}function rW(f,J,Y){try{for(let z of J)z(f)}catch(z){cZ(z,Y&&Y.owner||null)}}function cZ(f,J=e0){let Y=dW&&J&&J.context&&J.context[dW],z=uZ(f);if(!Y)throw z;if(B1)B1.push({fn(){rW(z,Y,J)},state:T1});else rW(z,Y,J)}function cH(f){if(typeof f==="function"&&!f.length)return cH(f());if(Array.isArray(f)){let J=[];for(let Y=0;Y<f.length;Y++){let z=cH(f[Y]);if(Array.isArray(z))if(z.length<32768)J.push.apply(J,z);else for(let G=0;G<z.length;G++)J.push(z[G]);else J.push(z)}return J}return f}function v3(f,J){return function(z){let G;return RJ(()=>G=$f(()=>{return e0.context={...e0.context,[f]:z.value},x3(()=>z.children)}),void 0,J),G}}function pW(f){for(let J=0;J<f.length;J++)f[J]()}function c3(f,J,Y={}){let z=[],G=[],X=[],q=0,Q=J.length>1?[]:null;return mf(()=>pW(X)),()=>{let H=f()||[],B=H.length,V,j;return H[wZ],$f(()=>{let L,O,M,R,S,a,N,g,C;if(B===0){if(q!==0)pW(X),X=[],z=[],G=[],q=0,Q&&(Q=[]);if(Y.fallback)z=[m3],G[0]=Zz((y)=>{return X[0]=y,Y.fallback()}),q=1}else if(q===0){G=Array(B);for(j=0;j<B;j++)z[j]=H[j],G[j]=Zz(U);q=B}else{M=Array(B),R=Array(B),Q&&(S=Array(B));for(a=0,N=Math.min(q,B);a<N&&z[a]===H[a];a++);for(N=q-1,g=B-1;N>=a&&g>=a&&z[N]===H[g];N--,g--)M[g]=G[N],R[g]=X[N],Q&&(S[g]=Q[N]);L=new Map,O=Array(g+1);for(j=g;j>=a;j--)C=H[j],V=L.get(C),O[j]=V===void 0?-1:V,L.set(C,j);for(V=a;V<=N;V++)if(C=z[V],j=L.get(C),j!==void 0&&j!==-1)M[j]=G[V],R[j]=X[V],Q&&(S[j]=Q[V]),j=O[j],L.set(C,j);else X[V]();for(j=a;j<B;j++)if(j in M){if(G[j]=M[j],X[j]=R[j],Q)Q[j]=S[j],Q[j](j)}else G[j]=Zz(U);G=G.slice(0,q=B),z=H.slice(0)}return G});function U(L){if(X[j]=L,Q){let[O,M]=r(j,{name:"index"});return Q[j]=M,J(H[j],O)}return J(H[j])}}}function JV(f,J){if(n3){if(hf.context){let Y=hf.context;mH(k3());let z=aW(f,J||{});return mH(Y),z}}return aW(f,J||{})}function TZ(){return!0}function vH(f){return!(f=typeof f==="function"?f():f)?{}:f}function i3(){for(let f=0,J=this.length;f<J;++f){let Y=this[f]();if(Y!==void 0)return Y}}function nZ(...f){let J=!1;for(let q=0;q<f.length;q++){let Q=f[q];J=J||!!Q&&GJ in Q,f[q]=typeof Q==="function"?(J=!0,U0(Q)):Q}if(b3&&J)return new Proxy({get(q){for(let Q=f.length-1;Q>=0;Q--){let H=vH(f[Q])[q];if(H!==void 0)return H}},has(q){for(let Q=f.length-1;Q>=0;Q--)if(q in vH(f[Q]))return!0;return!1},keys(){let q=[];for(let Q=0;Q<f.length;Q++)q.push(...Object.keys(vH(f[Q])));return[...new Set(q)]}},d3);let Y={},z=Object.create(null);for(let q=f.length-1;q>=0;q--){let Q=f[q];if(!Q)continue;let H=Object.getOwnPropertyNames(Q);for(let B=H.length-1;B>=0;B--){let V=H[B];if(V==="__proto__"||V==="constructor")continue;let j=Object.getOwnPropertyDescriptor(Q,V);if(!z[V])z[V]=j.get?{enumerable:!0,configurable:!0,get:i3.bind(Y[V]=[j.get.bind(Q)])}:j.value!==void 0?j:void 0;else{let U=Y[V];if(U){if(j.get)U.push(j.get.bind(Q));else if(j.value!==void 0)U.push(()=>j.value)}}}}let G={},X=Object.keys(z);for(let q=X.length-1;q>=0;q--){let Q=X[q],H=z[Q];if(H&&H.get)Object.defineProperty(G,Q,H);else G[Q]=H?H.value:void 0}return G}function Zf(f){let J="fallback"in f&&{fallback:()=>f.fallback};return U0(c3(()=>f.each,f.children,J||void 0),void 0,{name:"value"})}function X0(f){let J=f.keyed,Y=U0(()=>f.when,void 0,{name:"condition value"}),z=J?Y:U0(Y,void 0,{equals:(G,X)=>!G===!X,name:"condition"});return U0(()=>{let G=z();if(G){let X=f.children;return typeof X==="function"&&X.length>0?$f(()=>X(J?G:()=>{if(!$f(z))throw l3("Show");return Y()})):X}return f.fallback},void 0,{name:"value"})}var hf,N3=!0,y3=(f,J)=>f===J,GJ,b3,wZ,S3,EZ,dW=null,_W,T1=1,pG=2,I3,PH,e0=null,j0=null,mz=null,vz=null,Kf=null,df=null,B1=null,hZ=0,XJ,Uu,lW,_G,m3,n3=!1,d3,l3=(f)=>`Attempting to access a stale value from <${f}> that could possibly be undefined. This may occur because you are reading the accessor returned from the component at a time where it has already been unmounted. We recommend cleaning up any stale timers or async, or reading from the initial condition.`,YV;var Wf=k(()=>{hf={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return nW(this.context.count)},getNextContextId(){return nW(this.context.count++)}};GJ=Symbol("solid-proxy"),b3=typeof Proxy==="function",wZ=Symbol("solid-track"),S3=Symbol("solid-dev-component"),EZ={equals:y3},_W=tW,I3={},PH={},XJ={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[Uu,lW]=r(!1);m3=Symbol("fallback");d3={get(f,J,Y){if(J===GJ)return Y;return f.get(J)},has(f,J){if(J===GJ)return!0;return f.has(J)},set:TZ,deleteProperty:TZ,getOwnPropertyDescriptor(f,J){return{configurable:!0,enumerable:!0,get(){return f.get(J)},set:TZ,deleteProperty:TZ}},ownKeys(f){return f.keys()}};YV={hooks:XJ,writeSignal:nH,registerGraph:oW};if(globalThis)if(!globalThis.Solid$$)globalThis.Solid$$=!0;else console.warn("You appear to have multiple instances of Solid. This can lead to unexpected behavior.")});function a3(f,J){switch((f??"").toUpperCase()){case"MERGED":return"merged";case"CLOSED":return"closed";case"OPEN":return(J??"").toUpperCase()==="APPROVED"?"ready_to_merge":"open";default:return"unknown"}}function $3(f){let J=(f.status??"").toUpperCase(),Y=(f.conclusion??"").toUpperCase(),z=(f.state??"").toUpperCase();if(J&&J!=="COMPLETED")return"pending";if(Y){if(Y==="SUCCESS"||Y==="NEUTRAL"||Y==="SKIPPED")return"passing";return"failing"}if(z==="SUCCESS")return"passing";if(z==="PENDING"||z==="EXPECTED")return"pending";if(z==="FAILURE"||z==="ERROR")return"failing";return"unknown"}function r3(f){if(!f||f.length===0)return"none";let J=!1,Y=!1;for(let z of f){let G=$3(z);if(G==="failing")return"failing";if(G==="pending")J=!0;else if(G==="passing")Y=!0}if(J)return"pending";if(Y)return"passing";return"unknown"}function GV(f,J){if(!f||typeof f.number!=="number")return null;return{provider:"github",lifecycle:a3(f.state,f.reviewDecision),checkState:r3(f.statusCheckRollup),number:f.number,url:f.url,title:f.title,baseRef:f.baseRefName,headRef:f.headRefName,reviewDecision:f.reviewDecision||void 0,mergeable:f.mergeable||void 0,lastCheckedAt:J}}function dZ(f,J){if(f===J)return!0;if(!f||!J)return!1;return f.provider===J.provider&&f.lifecycle===J.lifecycle&&f.checkState===J.checkState&&f.number===J.number&&f.url===J.url&&f.title===J.title&&f.baseRef===J.baseRef&&f.headRef===J.headRef&&f.reviewDecision===J.reviewDecision&&f.mergeable===J.mergeable}var zV="number,url,title,state,baseRefName,headRefName,reviewDecision,mergeable,statusCheckRollup";var dH,iH,lH,aH="DIRTY_WORKTREE",$H,rH;var pH=k(()=>{dH=class dH extends Error{from;to;taskId;constructor(f,J,Y){super(`illegal transition for task ${Y}: ${f} -> ${J}`);this.from=f;this.to=J;this.taskId=Y;this.name="IllegalTransitionError"}};iH=class iH extends Error{constructor(f){super(`task not found: ${f}`);this.name="TaskNotFoundError"}};lH=class lH extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};$H=class $H extends Error{taskId;constructor(f){super(`${aH}: task ${f} worktree has uncommitted or untracked changes`);this.taskId=f;this.name="DirtyWorktreeError"}};rH=class rH extends Error{taskId;cause;constructor(f,J){super(`failed to remove worktree for task ${f}: ${J instanceof Error?J.message:String(J)}`);this.taskId=f;this.cause=J;this.name="WorktreeRemoveFailedError"}}});var XV;var ZV=k(()=>{XV=["aardvark","addax","adder","agouti","albatross","alpaca","anaconda","anchovy","anglerfish","anole","anteater","antelope","ape","argali","armadillo","avocet","axolotl","baboon","badger","banteng","barracuda","basilisk","bass","bat","beagle","bear","beaver","bee","beetle","beluga","betta","bison","blackbird","blenny","bluebird","bluegill","boar","bobcat","bonito","bovid","buffalo","bullfrog","bunting","bushbuck","butterfly","buzzard","caiman","camel","canary","capybara","caracal","cardinal","caribou","carp","cassowary","caterpillar","catfish","chameleon","chamois","char","cheetah","chickadee","chimp","chinchilla","chipmunk","chough","cicada","civet","clam","clownfish","cobra","cockatoo","condor","coot","copperhead","coral","cormorant","cougar","coyote","crab","crane","crawfish","crayfish","cricket","crocodile","crow","cuckoo","curlew","cuttlefish","deer","dikdik","dingo","dolphin","donkey","dormouse","dotterel","dove","dragonfly","dromedary","duck","dugong","dunlin","eagle","echidna","eel","egret","eider","eland","elephant","elk","emu","ermine","falcon","fawn","ferret","finch","firefly","flamingo","flounder","fox","frog","gadwall","gannet","gaur","gazelle","gecko","gemsbok","gerbil","gharial","gibbon","gnu","goat","goby","godwit","goldfish","goose","gopher","goral","gorilla","goshawk","grackle","grasshopper","grayling","grebe","grouse","guanaco","guillemot","guineafowl","guppy","halibut","hammerhead","hamster","hare","harrier","hartebeest","hawk","hedgehog","heron","herring","hippo","hornbill","hornet","horse","hummingbird","hyena","ibex","ibis","iguana","impala","indri","jacana","jackal","jaguar","jay","jellyfish","jerboa","junco","kakapo","kangaroo","kestrel","killdeer","kingfisher","kinglet","kite","kiwi","koala","kookaburra","krait","krill","kudu","ladybug","lamprey","langur","lapwing","lark","lemming","lemur","leopard","limpet","lion","lionfish","lizard","llama","lobster","locust","loon","lorikeet","loris","lynx","macaque","macaw","mackerel","magpie","mallard","mamba","mammoth","manatee","mandrill","manta","mantis","marlin","marmoset","marmot","marten","meerkat","merganser","mink","minnow","mole","mongoose","monitor","monkey","moose","moth","mouflon","mouse","mudpuppy","mule","muntjac","musk","muskox","muskrat","mussel","mustang","narwhal","newt","nightingale","numbat","nuthatch","nyala","ocelot","octopus","okapi","opossum","orangutan","orca","oriole","oryx","osprey","ostrich","otter","owl","oyster","oystercatcher","paca","panda","pangolin","panther","parakeet","parrot","parrotfish","partridge","peafowl","pelican","penguin","perch","petrel","pheasant","pigeon","pika","pike","pintail","pipefish","platypus","plover","pollock","pony","porcupine","porpoise","possum","ptarmigan","puffin","puma","pupfish","python","quail","quetzal","quokka","quoll","rabbit","raccoon","rail","rat","rattler","raven","ray","redpoll","reindeer","remora","rhino","roadrunner","robin","rook","sable","sailfish","salamander","salmon","sandpiper","sardine","scallop","scaup","scorpion","seahorse","seal","serval","shark","shearwater","shrew","shrike","shrimp","siskin","sitatunga","skate","skink","skua","skunk","sloth","smelt","snail","snipe","solenodon","sparrow","spider","springbok","squid","squirrel","starfish","starling","stilt","stingray","stoat","stork","sunbird","sunfish","swallow","swan","swift","swordfish","tahr","takin","tamarin","tanager","tapir","tarantula","tarpon","tarsier","teal","tenrec","terrapin","tern","tetra","thrasher","thrush","tiger","toad","tortoise","toucan","treecreeper","treefrog","trout","tuatara","tuna","turkey","turtle","urchin","urial","vicuna","viper","vole","vulture","wagtail","wallaby","walleye","walrus","warbler","warthog","waterbuck","weasel","wildebeest","wolf","wolverine","wombat","woodcock","woodpecker","wrasse","wren","yak","zebra","zebu","zorilla"]});function qV(f){let J=f.auth,Y=J.kind==="key"?{kind:"key",keyPath:J.keyPath}:{kind:"password",getPassword:()=>zZ(J.keychainRef)};return{host:f.host,user:f.user,port:f.port,auth:Y,controlPath:tX(f.host,f.user,f.port)}}function cz(f){let J=mJ(f);if(!J)return new YZ;return new uz(qV(J))}function pJ(f){for(let J of Object.values(XH()))if(f===J.basePath||f.startsWith(`${J.basePath}/`))return new uz(qV(J));return new YZ}function QV(f){return f&&f1(f)?f:void 0}function iZ(f){let J=pJ(f);return J.isRemote||J.existsSync(f)}function If(f){return pJ(f).isRemote?OJ():f}var ZJ=k(()=>{lf();Af();_Q();tQ()});import{createHash as p3}from"crypto";import BV from"fs";import E1 from"path";function jV(f){if(!E1.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return E1.join(ef(),_3,fO(f))}function WV(f){if(!E1.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[jV(f),...t3.map((J)=>E1.join(f,J))]}function VV(f,J){if(!J||/[/\\\0]/.test(J))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(J)}`);return E1.join(jV(f),J)}async function KV(f){if(f1(f)){let Y=mJ(f)?.basePath;if(!Y)return[];return cz(f).readdir(DV(Y))}let J=new Set;for(let Y of WV(f))try{for(let z of BV.readdirSync(Y,{withFileTypes:!0}))if(z.isDirectory())J.add(z.name)}catch{}return[...J]}function _H(f,J){if(!E1.isAbsolute(f)||!E1.isAbsolute(J))return null;let Y=HV(J);for(let z of WV(f)){let G=HV(z),X=E1.relative(G,Y);if(X!==""&&!X.startsWith("..")&&!E1.isAbsolute(X))return z}return null}function UV(f,J){return _H(f,J)!==null}function DV(f){return`${e3(f)}/.kobe/worktrees`}function LV(f,J){if(!J||/[/\\\0]/.test(J))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(J)}`);return`${DV(f)}/${J}`}function e3(f){return f.length>1&&f.endsWith("/")?f.replace(/\/+$/,""):f}function HV(f){try{return BV.realpathSync(f)}catch{return E1.resolve(f)}}function fO(f){let Y=(E1.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=p3("sha1").update(E1.resolve(f)).digest("hex").slice(0,12);return`${Y}-${z}`}var _3="worktrees",o3=".kobe/worktrees",s3=".claude/worktrees",t3;var oH=k(()=>{lf();ZJ();Af();t3=[o3,s3]});class sH{activeSlugs;random;pool;pendingByRepo=new Map;chain=Promise.resolve();constructor(f,J={}){this.activeSlugs=f;if(this.random=J.random??Math.random,this.pool=J.pool??XV,this.pool.length===0)throw Error("SlugAllocator: animal pool cannot be empty")}async allocate(f){let J=this.chain,Y;this.chain=new Promise((z)=>{Y=z}),await J;try{return await this.pickLocked(f)}finally{Y()}}commit(f,J){this.deletePending(f,J)}cancel(f,J){this.deletePending(f,J)}async pickLocked(f){let J=await this.occupiedSlugs(f),Y=this.pool.filter((G)=>!J.has(G));if(Y.length>0){let G=Y[Math.floor(this.random()*Y.length)];return this.addPending(f,G),G}let z=this.pool[Math.floor(this.random()*this.pool.length)];for(let G=2;;G++){let X=`${z}-v${G}`;if(!J.has(X))return this.addPending(f,X),X}}async occupiedSlugs(f){let J=new Set(this.pendingByRepo.get(f)??[]);for(let Y of this.activeSlugs(f))if(Y)J.add(Y);for(let Y of await KV(f))J.add(Y);return J}addPending(f,J){let Y=this.pendingByRepo.get(f);if(!Y)Y=new Set,this.pendingByRepo.set(f,Y);Y.add(J)}deletePending(f,J){let Y=this.pendingByRepo.get(f);if(!Y)return;if(Y.delete(J),Y.size===0)this.pendingByRepo.delete(f)}}var MV=k(()=>{ZV();oH()});var OV={};jf(OV,{PLACEHOLDER_TASK_TITLE:()=>kJ,Orchestrator:()=>lZ});import{realpathSync as JO}from"fs";import{basename as YO,resolve as zO}from"path";function FV(f){return mJ(f)?.basePath??f}class lZ{store;worktrees;slugs;tasksAcc;setTasks;activeTaskAcc;setActiveTaskSig;unsubscribeStore;worktreeLocks=new Map;mainTaskLocks=new Map;constructor(f){this.store=f.store,this.worktrees=f.worktrees,this.slugs=new sH((X)=>this.store.list().filter((q)=>q.repo===X&&q.kind!=="main").map((q)=>{return q.worktreePath.match(/([^/\\]+)[/\\]*$/)?.[1]??""}).filter((q)=>q.length>0));let[J,Y]=r(this.store.list());this.tasksAcc=J,this.setTasks=(X)=>Y(()=>X);let[z,G]=r(null);this.activeTaskAcc=z,this.setActiveTaskSig=(X)=>G(()=>X),this.unsubscribeStore=this.store.subscribe((X)=>{this.setTasks(X.slice())})}async init(){}activeTaskSignal(){return this.activeTaskAcc}async setActiveTask(f){let J=f===null?null:String(f);if(this.setActiveTaskSig(J),J&&this.store.get(J))await this.store.update(J,{})}tasksSignal(){return this.tasksAcc}subscribeTasks(f){return this.store.subscribe(f)}dispose(){this.unsubscribeStore()}listTasks(){return this.store.list()}getTask(f){return this.store.get(f)}async createTask(f){if(!f.repo)throw Error("createTask: repo is required");let J=(f.title??kJ).trim()||kJ,Y=await this.store.create({repo:f.repo,title:J,branch:f.branch??"",worktreePath:"",status:"backlog",kind:"task",vendor:f.vendor??Sf,...f.modelEffort?{modelEffort:f.modelEffort}:{}});if(f.baseRef)this.pendingBaseRefs.set(Y.id,f.baseRef);return Y}async ensureMainTask(f){let{repo:J,key:Y}=tG(f),z=this.store.list().find((q)=>q.kind==="main"&&tG(q.repo).key===Y);if(z)return z;let G=this.mainTaskLocks.get(Y);if(G)return G;let X=(async()=>{return await this.store.create({repo:J,title:GO(J),branch:"",worktreePath:FV(J),status:"backlog",kind:"main",vendor:Sf})})();this.mainTaskLocks.set(Y,X);try{return await X}finally{this.mainTaskLocks.delete(Y)}}async ensureWorktree(f){let J=this.requireTask(f);if(J.kind==="main")return FV(J.repo);if(J.worktreePath)return J.worktreePath;let Y=this.worktreeLocks.get(J.id);if(Y)return await Y,this.requireTask(J.id).worktreePath;let z=(async()=>{let X=await this.slugs.allocate(J.repo);try{let q=J.branch||SZ(J.title,J.id),Q=this.pendingBaseRefs.get(J.id),H=await this.worktrees.createForTask({repo:J.repo,slug:X,branch:q,baseRef:Q});this.slugs.commit(J.repo,X),this.pendingBaseRefs.delete(J.id),await this.store.update(J.id,{worktreePath:H.path,branch:q})}catch(q){throw this.slugs.cancel(J.repo,X),q}})();this.worktreeLocks.set(J.id,z);try{await z}finally{this.worktreeLocks.delete(J.id)}return this.requireTask(J.id).worktreePath}async setTitle(f,J){let Y=J.trim();if(!Y)throw Error("setTitle: title is required (empty or whitespace-only rejected)");let z=this.requireTask(f);if(z.title===Y)return;await this.store.update(z.id,{title:Y}),await this.followBranchToTitle(z,Y)}async followBranchToTitle(f,J){if(f.kind==="main"||!f.worktreePath)return;if(f.branch!==SZ(kJ,f.id))return;let Y=SZ(J,f.id);if(Y===f.branch)return;try{await this.setBranch(f.id,Y)}catch(z){console.error(`[kobe] follow-branch-to-title failed for ${f.id}:`,z)}}async setBranch(f,J){let Y=J.trim();if(!Y)throw Error("setBranch: branch is required (empty or whitespace-only rejected)");let z=this.requireTask(f);if(z.kind==="main")throw Error("setBranch: a main task tracks the repo's own branch; rename it with git directly");if(z.branch===Y)return;if(z.worktreePath)await this.worktrees.renameBranch(z.worktreePath,z.branch,Y);await this.store.update(z.id,{branch:Y})}async setVendor(f,J){let Y=this.requireTask(f);if(Y.vendor===J)return;await this.store.update(Y.id,{vendor:J})}async setPinned(f,J){let Y=this.requireTask(f);if(Y.kind==="main")return;let z=J??!Y.pinned;if((Y.pinned??!1)===z)return;await this.store.update(Y.id,{pinned:z})}async moveTask(f,J){let Y=this.requireTask(f);if(Y.kind==="main")return;let z=this.store.list().filter((G)=>(G.kind??"task")!=="main"&&G.archived===Y.archived&&(G.pinned??!1)===(Y.pinned??!1)).map((G)=>String(G.id));await this.store.move(Y.id,J,z)}async setArchived(f,J){let Y=this.requireTask(f);if(Y.kind==="main")return;let z=J??!Y.archived;if(Y.archived===z)return;await this.store.update(Y.id,{archived:z})}async reorderTasks(f){if(f.length===0)return;for(let J of f){if(this.requireTask(J.taskId).kind==="main")throw Error(`cannot reorder a main task: ${J.taskId}`);if(!Number.isFinite(J.position))throw Error(`position must be a finite number: ${J.taskId}`)}await this.store.reorder(f.map((J)=>({id:J.taskId,position:J.position})))}async setStatus(f,J){let Y=this.requireTask(f);if(Y.status===J)return;if(Y.status==="done"&&J==="error"||Y.status==="error"&&J==="done")throw new dH(Y.status,J,Y.id);await this.store.update(Y.id,{status:J})}async setPRStatus(f,J){let Y=this.requireTask(f);if(dZ(Y.prStatus,J??void 0))return;await this.store.update(Y.id,{prStatus:J??void 0})}async deleteTask(f,J){let Y=this.store.get(f);if(!Y)return;if(Y.kind==="main")throw new lH;let z=J?.force===!0;if(Y.worktreePath){if(!z){let G=!1;try{G=await this.worktrees.isDirty(Y.worktreePath)}catch{}if(G)throw new $H(Y.id)}try{await this.worktrees.remove(Y.worktreePath,{force:z})}catch(G){throw new rH(Y.id,G)}}await this.store.remove(Y.id),this.pendingBaseRefs.delete(Y.id),this.worktreeLocks.delete(Y.id)}async forgetProject(f){if(!f)throw Error("forgetProject: repo is required");let J=tG(f).key;for(let Y of O1())if(tG(Y).key===J)zH(Y);for(let Y of this.store.list()){if(Y.kind!=="main")continue;if(tG(Y.repo).key!==J)continue;await this.store.remove(Y.id),this.pendingBaseRefs.delete(Y.id),this.worktreeLocks.delete(Y.id)}}async discoverAdoptableWorktrees(f){if(!f)throw Error("discoverAdoptableWorktrees: repo is required");let J=await this.worktrees.listAll(f),Y=new Set(this.store.list().filter((z)=>z.worktreePath).map((z)=>nz(z.worktreePath)));return J.filter((z)=>!Y.has(nz(z.path)))}async adoptWorktree(f){if(!f.repo)throw Error("adoptWorktree: repo is required");if(!f.worktreePath)throw Error("adoptWorktree: worktreePath is required");let J=nz(f.worktreePath),Y=this.adoptLocks.get(J);if(Y)return Y;let z=this.adoptWorktreeLocked(f,J);this.adoptLocks.set(J,z);try{return await z}finally{this.adoptLocks.delete(J)}}async adoptWorktreeLocked(f,J){let Y=this.store.list().find((Q)=>Q.worktreePath&&nz(Q.worktreePath)===J);if(Y){if(f.ifExists==="return")return Y;throw Error(`adoptWorktree: ${f.worktreePath} is already adopted as a task`)}let G=(await this.worktrees.listAll(f.repo)).find((Q)=>nz(Q.path)===J);if(!G)throw Error(`adoptWorktree: ${f.worktreePath} is not an adoptable git worktree of ${f.repo} (unknown, detached, or the main checkout)`);let X=f.branch?.trim()||G.branch,q=(f.title??YO(G.path)).trim()||kJ;return this.store.create({repo:f.repo,title:q,branch:X,worktreePath:G.path,status:"backlog",kind:"task",vendor:f.vendor??Sf})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(f){let J=this.store.get(f);if(!J)throw new iH(String(f));return J}}function GO(f){let J=f.split(/[/\\]/).filter(Boolean);return J.length>0?J[J.length-1]??f:f}function tG(f){let J=PJ(f);return{repo:J,key:f1(J)?J:nz(J)}}function nz(f){try{return JO(f)}catch{return zO(f)}}var kJ="(new task)";var eG=k(()=>{Wf();Af();I1();pH();MV()});function dz(f,J,Y){if(!J)return f;let z=cz(J);return z.ensureReady(),z.wrapCommand(f,{tty:!0,cwd:Y})}function _f(){let f=[];for(let J of["KOBE_HOME_DIR","KOBE_DAEMON_SOCKET_PATH","KOBE_TMUX_SOCKET"]){let Y=process.env[J];if(Y&&Y.length>0)f.push(`${J}=${Xf(Y)}`)}return f.length>0?`${f.join(" ")} `:""}var fX="@kobe_remote";var Qz=k(()=>{ZJ();zJ()});var GX={};jf(GX,{windowIsSurface:()=>BO,windowCount:()=>qO,tmuxSessionName:()=>Lf,tmuxCommandSequence:()=>eH,tmuxAvailable:()=>NJ,tmuxArgs:()=>Hz,tagPaneRole:()=>RV,tagClaudePane:()=>HO,switchClientBeforeKill:()=>bJ,setWindowOption:()=>FY,setSessionOption:()=>LY,sessionExists:()=>Hf,sendKeys:()=>$Z,sendKeyName:()=>zX,runTmuxSequenceCapturing:()=>JX,runTmuxSequence:()=>Pf,runTmuxCapturing:()=>d0,runTmux:()=>h0,paneIdByRole:()=>JB,newWindow:()=>QJ,killSession:()=>l1,globalTasksPaneWidth:()=>aZ,getSessionOptions:()=>N1,getSessionOption:()=>Bz,getServerOptions:()=>MY,getServerOption:()=>gV,ensureFallbackSession:()=>rZ,currentSessionName:()=>y1,claudePaneIdStrict:()=>az,claudePaneId:()=>YB,capturePaneById:()=>$z,attachArgv:()=>lz,SURFACE_WINDOW_OPTION:()=>zB,PANE_ROLE_OPTION:()=>YX,KOBE_TMUX_SOCKET:()=>qJ,KOBE_HOME_SESSION:()=>CV,CLAUDE_ROLE_OPTION:()=>QO,CHAT_TAB_SESSION_ID_OPTION:()=>yJ});import{homedir as XO}from"os";function Hz(...f){return["tmux","-L",qJ,...f]}function Lf(f){return`kobe-${f.replace(/[^A-Za-z0-9_-]/g,"")}`}function lz(f){return Hz("attach-session","-t",`=${f}`)}async function tH(f){if(!f)return"";try{return await new Response(f).text()}catch{return""}}async function h0(f){try{let J=Bun.spawn(Hz(...f),{stdin:"ignore",cwd:iz,stdout:"ignore",stderr:"pipe"}),[Y,z]=await Promise.all([tH(J.stderr),J.exited]);if(z!==0&&Y.trim().length>0)console.error(`[kobe tmux] ${f.join(" ")} (${z}): ${Y.trim()}`);return z}catch{return 1}}async function ZO(f){try{return await Bun.spawn(Hz(...f),{stdin:"ignore",cwd:iz,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function eH(f){let J=[];for(let Y of f){if(Y.length===0)continue;if(J.length>0)J.push(";");J.push(...Y)}return J}async function Pf(f){let J=eH(f);return J.length===0?0:h0(J)}async function d0(f){try{let J=Bun.spawn(Hz(...f),{stdin:"ignore",cwd:iz,stdout:"pipe",stderr:"pipe"}),[Y,z,G]=await Promise.all([tH(J.stdout),tH(J.stderr),J.exited]);if(G!==0&&z.trim().length>0)console.error(`[kobe tmux] ${f.join(" ")} (${G}): ${z.trim()}`);return{code:G,stdout:Y}}catch{return{code:1,stdout:""}}}async function JX(f){let J=eH(f);return J.length===0?{code:0,stdout:""}:d0(J)}async function NJ(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:iz,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function Hf(f){return await ZO(["has-session","-t",`=${f}`])===0}async function qO(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return 0;return Y.split(`
36
+ `).filter((z)=>z.trim().length>0).length}async function LY(f,J,Y){await h0(["set-option","-t",f,J,Y])}async function Bz(f,J){let{code:Y,stdout:z}=await d0(["show-options","-v","-t",f,J]);return Y===0?z.trim():""}async function N1(f,J){let Y=Object.fromEntries(J.map((X)=>[X,void 0])),{code:z,stdout:G}=await JX(J.map((X)=>["show-options","-q","-t",f,X]));if(z!==0)return Y;for(let X of G.split(`
37
+ `)){let q=X.indexOf(" ");if(q<=0)continue;let Q=X.slice(0,q);if(Q in Y)Y[Q]=X.slice(q+1).trim()}return Y}async function gV(f){let{code:J,stdout:Y}=await d0(["show-options","-sqv",f]);return J===0?Y.trim():""}async function MY(f){let J=Object.fromEntries(f.map((G)=>[G,void 0])),{code:Y,stdout:z}=await JX(f.map((G)=>["show-options","-sq",G]));if(Y!==0)return J;for(let G of z.split(`
38
+ `)){let X=G.indexOf(" ");if(X<=0)continue;let q=G.slice(0,X);if(q in J)J[q]=G.slice(X+1).trim()}return J}async function aZ(){let f=await gV(aJ),J=Number.parseInt(f,10);return Number.isFinite(J)&&J>0?Jz(J):eY}async function RV(f,J){await h0(["set-option","-p","-t",f,YX,J])}async function FY(f,J,Y){await h0(["set-window-option","-t",f,J,Y])}async function HO(f){await RV(f,fB)}async function JB(f,J,Y=!1){let{code:z,stdout:G}=await d0(["list-panes","-t",`=${f}`,"-F",`#{pane_id} #{${YX}}`]);if(z!==0)return"";let X="";for(let q of G.split(`
39
+ `)){let[Q,H]=q.split("\t");if(!Q)continue;if(!X)X=Q.trim();if(H?.trim()===J)return Q.trim()}return Y?X:""}async function YB(f){return JB(f,fB,!0)}async function az(f){return JB(f,fB,!1)}async function $z(f,J){if(!f)return"";let Y=["capture-pane","-t",f,"-p"];if(typeof J==="number"&&J>0)Y.push("-S",String(-J));let{code:z,stdout:G}=await d0(Y);return z===0?G:""}async function $Z(f,J){await h0(["send-keys","-t",f,"-l","--",J])}async function zX(f,J){await h0(["send-keys","-t",f,J])}async function QJ(f,J){let Y=["new-window","-t",`=${f}`,"-c",J.cwd];if(J.name)Y.push("-n",J.name);if(J.surface){Y.push("-P","-F","#{window_id}"),Y.push(J.command);let{code:z,stdout:G}=await d0(Y),X=G.trim();if(z===0&&X)await FY(X,zB,"1");return}Y.push(J.command),await h0(Y)}async function BO(f){let{code:J,stdout:Y}=await d0(["display-message","-t",f,"-p",`#{${zB}}`]);return J===0&&Y.trim()==="1"}async function y1(){let f=["display-message","-p"],J=process.env.TMUX_PANE;if(J&&J.length>0)f.push("-t",J);f.push("#{session_name}");let{code:Y,stdout:z}=await d0(f),G=z.trim();return Y===0&&G.length>0?G:null}async function l1(f){if(!f.startsWith("kobe-hidden-")){let J=iG(f);if(await Hf(J))await h0(["kill-session","-t",`=${J}`])}if(await Hf(f))await h0(["kill-session","-t",`=${f}`])}async function rZ(){let f=CV;if(await Hf(f)){if(await Bz(f,AV)==="tasks")return f;await h0(["kill-session","-t",`=${f}`])}let Y=(await d0(["new-session","-d","-s",f,"-c",iz,"-x","220","-y","50","-P","-F","#{pane_id}",qW()])).stdout.trim();if(Y){let z=await aZ(),X=(await d0(["split-window","-h","-b","-t",Y,"-l",`${z}`,"-c",iz,"-P","-F","#{pane_id}",R1(_f()+VY(Cf()))])).stdout.trim();if(X)await Pf([["set-option","-p","-t",X,YX,"tasks"],["select-pane","-t",X]])}return await LY(f,AV,"tasks"),f}async function bJ(f,J){if(await y1()!==f)return;if(J&&J!==f&&await Hf(J)){await h0(["switch-client","-t",`=${J}`]);return}let z=await rZ();await h0(["switch-client","-t",`=${z}`])}var qJ,iz,YX="@kobe_role",QO,fB="claude",yJ="@kobe_session_id",zB="@kobe_surface",CV="kobe-home",AV="@kobe_home";var Tf=k(()=>{lJ();Qz();zJ();qJ=process.env.KOBE_TMUX_SOCKET?.trim()||"kobe";iz=XO()||"/";QO=YX});async function jO(f,J=kV){let{code:Y,stdout:z}=await J.capture(["list-windows","-t",`=${f}`,"-F",`#{window_index} #{automatic-rename} #{${yJ}}`]);if(Y!==0)return[];let G=[];for(let X of z.split(`
40
+ `)){let[q,Q,H]=X.split("\t"),B=Number.parseInt((q??"").trim(),10);if(!Number.isInteger(B))continue;G.push({index:B,sessionId:H?.trim()??"",autoRename:Q?.trim()??""})}return G}async function WO(f,J,Y){let{code:z,stdout:G}=await Y.capture(["show-window-options","-t",`=${f}:${J}`,"automatic-rename"]);return z===0&&/\boff\b/.test(G)}async function VO(f){let{code:J,stdout:Y}=await f.capture(["show-window-options","-g","automatic-rename"]);return J===0&&/\boff\b/.test(Y)}async function KO(f,J,Y,z){return await z.run(["rename-window","-t",`=${f}:${J}`,"--",Y])===0}async function NV(f,J=UO){let Y=0,z=null,G=async(X,q)=>{if(q.autoRename==="1")return!1;if(q.autoRename==="0"){if(z===null)z=await VO(J.runner);if(!z)return!0}return WO(X,q.index,J.runner)};for(let X of f.listTasks()){if(X.archived||X.kind==="main"||!X.worktreePath)continue;let q=Lf(X.id),Q=await jO(q,J.runner);if(Q.length===0)continue;let H=Q.reduce((V,j)=>Math.min(V,j.index),Number.POSITIVE_INFINITY),B=X.vendor??Sf;for(let V of Q)try{if(await G(q,V))continue;let j=V.sessionId?await J.titleFromSessionId(B,V.sessionId):V.index===H?await J.titleFromWorktree(X.worktreePath,B):"";if(j&&await KO(q,V.index,j,J.runner))Y++}catch{}}return Y}var kV,UO;var yV=k(()=>{IZ();Tf();I1();kV={capture:d0,run:h0};UO={runner:kV,titleFromSessionId:cW,titleFromWorktree:Pz}});function SV(f){if(f instanceof Error)return f;let J;try{J=typeof f==="string"?f:JSON.stringify(f)}catch{J=String(f)}return Error(J)}function bV(f,J,Y=new Date){let z=SV(J);return`[${Y.toISOString()}] daemon ${f}: ${z.stack??`${z.name}: ${z.message}`}
41
+ `}function DO(f,J,Y=new Date){let z=SV(J);return`[${Y.toISOString()}] daemon error [${f}]: ${z.stack??`${z.name}: ${z.message}`}
42
+ `}function uf(f,J){process.stderr.write(DO(f,J))}function LO(f,J,Y=new Date){return`[${Y.toISOString()}] daemon [${f}]: ${J}
43
+ `}function OY(f,J){process.stderr.write(LO(f,J))}function IV(f=(J)=>process.stderr.write(J)){if(GB||XB)return;GB=(J)=>f(bV("unhandledRejection",J)),XB=(J)=>f(bV("uncaughtException",J)),process.on("unhandledRejection",GB),process.on("uncaughtException",XB)}var GB,XB;async function MO(f,J=Pz){let Y=[];for(let z of f.listTasks()){if(z.archived||z.title!==kJ||!z.worktreePath)continue;try{let G=await J(z.worktreePath,z.vendor??Sf);if(!G)continue;let X=f.getTask(z.id);if(!X||X.title!==kJ)continue;await f.setTitle(z.id,G),Y.push({id:z.id,title:G})}catch(G){uf("auto-title-poller",G)}}return Y}function TV(f,J=ZB,Y){if(J<=0)return()=>{};let z=!1,X=setInterval(()=>{if(Y&&!Y())return;if(z)return;z=!0,MO(f).then(()=>NV(f)).catch((q)=>uf("auto-title-poller",q)).finally(()=>{z=!1})},J);return X.unref?.(),()=>clearInterval(X)}var ZB=4000;var uV=k(()=>{IZ();eG();yV();I1()});class qB{last=new Map;sinks=new Set;publish(f,J){this.last.set(f,J);let Y={channel:f,payload:J};for(let z of this.sinks)z(Y)}snapshot(){return[...this.last].map(([f,J])=>({channel:f,payload:J}))}onPublish(f){return this.sinks.add(f),()=>{this.sinks.delete(f)}}}function pZ(){return nf()[jz]===!0}var jz="experimental.autoStatus";var XX=k(()=>{pY()});async function EV(f,J,Y=pZ){if(!Y())return"skipped";let z=f.getTask(J);if(!z)return"skipped";if((z.kind??"task")==="main"||z.archived)return"skipped";if(z.status!=="backlog")return"skipped";return await f.setStatus(J,"in_progress"),"moved"}var xV=k(()=>{XX()});import{createHash as FO}from"crypto";import{homedir as OO}from"os";import gY from"path";function kO(){return gY.join(process.env.KOBE_HOME_DIR??OO(),".kobe")}function NO(f){let Y=(gY.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=FO("sha1").update(gY.resolve(f)).digest("hex").slice(0,12);return`${Y}-${z}`}function yO(f){if(!gY.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return gY.join(kO(),AO,NO(f))}function bO(f){if(!gY.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[yO(f),...CO.map((J)=>gY.join(f,J))]}function AY(f){return f.length>1&&f.endsWith("/")?f.slice(0,-1):f}function wV(f,J){return J===f||J.startsWith(`${f}/`)}function hV(f,J){let Y=AY(J),z,G=-1;for(let X of f){if(!X.worktreePath)continue;let q=AY(X.worktreePath);if(wV(q,Y)&&q.length>G)G=q.length,z=X.id}return z}function QB(f,J){let Y=AY(J),z,G=-1;for(let X of f){if(!X.repo)continue;let q=AY(X.repo);if(wV(q,Y)&&q.length>G)G=q.length,z=q}return z}function PV(f,J){let Y=AY(J),z=new Set,G=new Set;for(let X of f){if(X.repo)z.add(AY(X.repo));if(X.worktreePath)G.add(AY(X.worktreePath))}for(let X of z)for(let q of bO(X).map(AY)){let Q=`${q}/`;if(!Y.startsWith(Q))continue;let B=Y.slice(Q.length).split("/")[0];if(!B)continue;let V=`${Q}${B}`;if(G.has(V))return;return{repo:X,worktreePath:V}}return}var AO="worktrees",gO=".kobe/worktrees",RO=".claude/worktrees",CO;var vV=k(()=>{CO=[gO,RO]});function jB(f){return{message:f instanceof Error?f.message:String(f),name:f instanceof Error?f.name:void 0}}async function ZX(f,J,Y,z){let G=f.get(J);if(!G)throw Error(`unknown daemon request: ${J}`);return G.handle(WB(Y),z)}function qX(){return new Map([{name:"hello",handle(J,Y){let z=typeof J.protocolVersion==="number"?J.protocolVersion:n1,G=typeof J.minProtocolVersion==="number"?J.minProtocolVersion:z;if(!ZZ({localVersion:n1,localMin:QY,remoteVersion:z,remoteMin:G}))throw Error(`daemon is protocol v${n1} (min v${QY}); this client is v${z} (min v${G}). Upgrade your kobe.`);return{protocolVersion:n1,minProtocolVersion:QY,kobeVersion:s0,capabilities:[...qH],daemonPid:Y.daemon.pid,clientId:Y.clientId,tasks:Y.orch.listTasks().map(e1)}}},{name:"daemon.status",handle(J,Y){return{daemonPid:Y.daemon.pid,kobeVersion:s0,uptimeMs:Date.now()-Y.daemon.startedAt.getTime(),startedAt:Y.daemon.startedAt.toISOString(),attachedClients:Y.daemon.guiCount(),taskCount:Y.orch.listTasks().length,socketPath:Y.daemon.socketPath,webPort:Y.daemon.webPort??null}}},{name:"daemon.stop",async handle(J,Y){return await Y.daemon.stopSoon(),{}}},{name:"task.list",handle(J,Y){return{tasks:Y.orch.listTasks().map(e1)}}},{name:"task.get",handle(J,Y){let z=Ff(J,"taskId"),G=Y.orch.getTask(z);if(!G)throw Error(`task not found: ${z}`);return{task:e1(G)}}},{name:"task.create",async handle(J,Y){let z=Ff(J,"repo"),G=await Y.orch.createTask({repo:z,title:a1(J,"title"),branch:a1(J,"branch"),baseRef:a1(J,"baseRef"),vendor:BB(J,"vendor"),modelEffort:a1(J,"effort")});return{taskId:G.id,task:e1(G)}}},{name:"task.archive",async handle(J,Y){let z=Ff(J,"taskId");return await Y.orch.setArchived(z,HB(J,"archived")),{}}},{name:"task.rename",async handle(J,Y){let z=Ff(J,"taskId");return await Y.orch.setTitle(z,Ff(J,"title")),{}}},{name:"task.setBranch",async handle(J,Y){let z=Ff(J,"taskId");return await Y.orch.setBranch(z,Ff(J,"branch")),{}}},{name:"task.setVendor",async handle(J,Y){let z=Ff(J,"taskId"),G=BB(J,"vendor");if(!G)throw Error("task.setVendor: vendor is required");return await Y.orch.setVendor(z,G),{}}},{name:"task.delete",async handle(J,Y){let z=Ff(J,"taskId");return await Y.orch.deleteTask(z,{force:HB(J,"force")}),Y.activity.clearTask(z),{}}},{name:"task.pin",async handle(J,Y){let z=Ff(J,"taskId");return await Y.orch.setPinned(z,HB(J,"pinned")),{}}},{name:"task.move",async handle(J,Y){let z=Ff(J,"taskId"),G=Ff(J,"direction");if(G!=="up"&&G!=="down")throw Error("direction must be up or down");return await Y.orch.moveTask(z,G==="up"?-1:1),{}}},{name:"task.status",async handle(J,Y){let z=Ff(J,"taskId"),G=Ff(J,"status");if(!vW(G))throw Error("status must be a TaskStatus");let X=G==="done"?Y.orch.getTask(z):void 0,q=X?.status;if(await Y.orch.setStatus(z,G),G==="done"&&q!=="done"&&X)try{let Q=await Y.issues.mirrorTaskDone(X.repo,z);if(Q)Y.bus.publish("issue.snapshot",Q)}catch(Q){uf("issue-done-mirror",Q)}return{}}},{name:"task.reorder",async handle(J,Y){let z=J.moves;if(!Array.isArray(z)||z.length===0)throw Error("moves must be a non-empty array");if(z.length>500)throw Error("too many moves in one task.reorder batch (max 500)");let G=z.map((X)=>{if(typeof X!=="object"||X===null)throw Error("each move needs taskId and position");let q=X,Q=Ff(q,"taskId"),H=q.position;if(typeof H!=="number"||!Number.isFinite(H))throw Error("position must be a finite number");return{taskId:Q,position:H}});return await Y.orch.reorderTasks(G),{}}},{name:"task.ensureMain",async handle(J,Y){let z=Ff(J,"repo"),G=await Y.orch.ensureMainTask(z);return{task:e1(G)}}},{name:"project.forget",async handle(J,Y){let z=Ff(J,"repo");return await Y.orch.forgetProject(z),{}}},{name:"task.ensureWorktree",async handle(J,Y){let z=Ff(J,"taskId");Y.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"running"});try{let G=await Y.orch.ensureWorktree(z);return Y.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"done"}),{worktreePath:G}}catch(G){throw Y.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"error",error:G instanceof Error?G.message:String(G)}),G}}},{name:"worktree.discoverAdoptable",async handle(J,Y){let z=Ff(J,"repo");return{worktrees:await Y.orch.discoverAdoptableWorktrees(z)}}},{name:"worktree.adopt",async handle(J,Y){let z=await Y.orch.adoptWorktree({repo:Ff(J,"repo"),worktreePath:Ff(J,"worktreePath"),branch:a1(J,"branch"),vendor:BB(J,"vendor"),title:a1(J,"title"),ifExists:a1(J,"ifExists")==="return"?"return":"error"});return{task:e1(z)}}},{name:"worktree.reconcile",async handle(J,Y){let z=Ff(J,"cwd"),G=Ff(J,"worktreePath"),X=QB(Y.orch.listTasks(),z)??QB(Y.orch.listTasks(),G);if(!X)return{adopted:!1};try{return{adopted:!0,taskId:(await Y.orch.adoptWorktree({repo:X,worktreePath:G,ifExists:"return"})).id}}catch(q){return uf("worktree-created",q),{adopted:!1}}}},{name:"task.setActive",async handle(J,Y){let z=a1(J,"taskId")??null;return await Y.orch.setActiveTask(z),Y.bus.publish("active-task",{taskId:z}),{}}},{name:"issue.list",async handle(J,Y){return Y.issues.list(Ff(J,"repoRoot"))}},{name:"issue.mutate",async handle(J,Y){let z=await Y.issues.mutate(Ff(J,"repoRoot"),J.op);return Y.bus.publish("issue.snapshot",z),z}},{name:"session.deliver",async handle(J,Y){let z=Ff(J,"taskId"),G=Ff(J,"text"),X=a1(J,"source");if(X!==void 0&&X!=="note"&&X!=="dispatcher")throw Error('source must be "note" or "dispatcher"');if(!Y.orch.getTask(z))throw Error(`task not found: ${z}`);return Y.bus.publish("session.deliver",{taskId:z,text:G,at:Date.now(),source:X??"dispatcher"}),{ok:!0}}},{name:"note.file",async handle(J,Y){let z=Ff(J,"taskId"),G=Ff(J,"text"),X=Y.orch.getTask(z);if(!X)throw Error(`task not found: ${z}`);let q=Y.orch.listTasks().find((H)=>(H.kind??"task")==="main"&&H.repo===X.repo&&!H.archived);if(!q||q.id===X.id)return{ok:!0,routed:!1};let Q=X.title||X.branch||z;return Y.bus.publish("session.deliver",{taskId:q.id,text:`[KOBE FIELD NOTE] from "${Q}" (task ${z}): ${G}`,at:Date.now(),source:"note"}),{ok:!0,routed:!0}}},{name:"engine.reportEvent",async handle(J,Y){let z=Ff(J,"kind");if(!BZ(z))throw Error(`unknown engine event kind: ${z}`);let G=a1(J,"taskId"),X=a1(J,"cwd");if(!G&&X&&z==="session-start"){let H=PV(Y.orch.listTasks(),X);if(H)try{await Y.orch.adoptWorktree({repo:H.repo,worktreePath:H.worktreePath,ifExists:"return"})}catch(B){uf("worktree-autosync",B)}}let q=G??(X?hV(Y.orch.listTasks(),X):void 0);if(!q)return{};let Q=SO(J);if(Y.activity.report(q,z,Q),z==="turn-start")EV(Y.orch,q).then((H)=>{if(H==="moved")console.log(`[status-rules] task ${q} auto-moved backlog \u2192 in_progress`)}).catch((H)=>uf("status-rules",H));return{}}}].map((J)=>[J.name,J]))}function WB(f){if(!f||typeof f!=="object"||Array.isArray(f))return{};return f}function Ff(f,J){let Y=f[J];if(typeof Y!=="string"||Y.length===0)throw Error(`${J} is required`);return Y}function a1(f,J){let Y=f[J];if(Y===void 0||Y===null||Y==="")return;if(typeof Y!=="string")throw Error(`${J} must be a string`);return Y}function HB(f,J){let Y=f[J];if(Y===void 0||Y===null)return;if(typeof Y!=="boolean")throw Error(`${J} must be a boolean`);return Y}function BB(f,J){let Y=a1(f,J);return Y&&Y.trim().length>0?Y:void 0}function SO(f){let J=f.detail;if(!J||typeof J!=="object"||Array.isArray(J))return;let Y=J,z={};if(Y.failure==="rate_limit"||Y.failure==="billing"||Y.failure==="other")z.failure=Y.failure;if(Y.waiting==="permission"||Y.waiting==="input")z.waiting=Y.waiting;if(typeof Y.note==="string")z.note=Y.note;return Object.keys(z).length>0?z:void 0}var _Z=k(()=>{jZ();xV();I1();D1();vV();_Y()});import{execFile as IO}from"child_process";import{mkdir as TO,readFile as uO,realpath as mV,rename as EO,stat as xO,writeFile as wO}from"fs/promises";import{homedir as hO}from"os";import{dirname as PO,isAbsolute as vO,join as mO,resolve as cV}from"path";import{promisify as cO}from"util";function nO(f){return(f instanceof Error?f.message:String(f)).includes("not a git repository")}function sZ(f=process.env.KOBE_HOME_DIR??hO()){return mO(f,".kobe","issues.json")}function dV(f){return typeof f==="string"&&nV.includes(f)}function dO(f){if(f===null||typeof f!=="object"||Array.isArray(f))return null;let J=f;if(typeof J.id!=="number")return null;return{id:J.id,title:typeof J.title==="string"?J.title:"(untitled)",status:dV(J.status)?J.status:"open",created:typeof J.created==="string"?J.created:"",body:typeof J.body==="string"?J.body:"",taskId:typeof J.taskId==="string"?J.taskId:void 0}}function iO(){return{version:1,repos:{}}}function lO(){let f=new Date,J=String(f.getMonth()+1).padStart(2,"0"),Y=String(f.getDate()).padStart(2,"0");return`${f.getFullYear()}-${J}-${Y}`}async function aO(f){let{stdout:J}=await MB("git",["-C",f,"rev-parse","--git-common-dir"]),Y=J.trim();return mV(vO(Y)?Y:cV(f,Y))}async function $O(f){let{stdout:J}=await MB("git",["-C",f,"rev-parse","--show-toplevel"]);return J.trim()}async function rO(f){let{stdout:J}=await MB("git",["-C",f,"worktree","list","--porcelain"]),Y=J.split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim();return Y?mV(Y):$O(f)}async function VB(f){if(typeof f!=="string"||f.length===0)throw Error("repoRoot is required");let J=cV(f);if(!(await xO(J).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[z,G]=await Promise.all([rO(J),aO(J)]);return{repoRoot:z,repoKey:G}}catch(z){if(nO(z))throw Error("repoRoot is not a git repository");throw z}}async function KB(f){try{let J=JSON.parse(await uO(f,"utf8")),Y={};if(J.repos&&typeof J.repos==="object")for(let[z,G]of Object.entries(J.repos)){if(!G||typeof G!=="object")continue;let X=G;Y[z]={repoRoot:typeof X.repoRoot==="string"?X.repoRoot:"",nextId:typeof X.nextId==="number"?X.nextId:1,issues:Array.isArray(X.issues)?X.issues.map(dO).filter((q)=>q!==null):[]}}return{version:1,repos:Y}}catch(J){if(J.code==="ENOENT")return iO();throw J}}async function UB(f,J){await TO(PO(f),{recursive:!0});let Y=`${f}.tmp`;await wO(Y,`${JSON.stringify(J,null,2)}
44
+ `,"utf8"),await EO(Y,f)}function DB(f,J){return{repoRoot:f,exists:J!==null,nextId:J?.nextId??1,issues:J?.issues??[]}}async function LB(f,J){let z=(oZ.get(f)??Promise.resolve()).then(J),G=z.then(()=>{return},()=>{return});return oZ.set(f,G),G.then(()=>{if(oZ.get(f)===G)oZ.delete(f)}),z}class tZ{path;constructor(f=sZ()){this.path=f}async list(f){let{repoRoot:J,repoKey:Y}=await VB(f);return LB(this.path,async()=>{let z=await KB(this.path),G=z.repos[Y]??null;if(G&&G.repoRoot!==J)G.repoRoot=J,await UB(this.path,z);return DB(J,G)})}async mirrorTaskDone(f,J){let{repoRoot:Y,repoKey:z}=await VB(f);if(!J)return null;return LB(this.path,async()=>{let G=await KB(this.path),X=G.repos[z];if(!X)return null;let q=X.issues.find((Q)=>Q.taskId===J);if(!q||q.status==="done")return null;return q.status="done",X.repoRoot=Y,await UB(this.path,G),DB(Y,X)})}async mutate(f,J){let{repoRoot:Y,repoKey:z}=await VB(f);if(!J||typeof J!=="object"||Array.isArray(J)||typeof J.type!=="string")throw Error("missing op");return LB(this.path,async()=>{let G=await KB(this.path),X=G.repos[z];if(!X)X={repoRoot:Y,nextId:1,issues:[]},G.repos[z]=X;X.repoRoot=Y;let q=J;if(q.type==="create"){if(typeof q.title!=="string"||q.title.trim().length===0)throw Error("create requires a non-empty title");if(q.body!==void 0&&typeof q.body!=="string")throw Error("body must be a string");X.issues=[{id:X.nextId,title:q.title,status:"open",created:lO(),body:typeof q.body==="string"?q.body:""},...X.issues],X.nextId+=1}else if(q.type==="setStatus"){if(typeof q.id!=="number")throw Error("setStatus requires a numeric id");if(!dV(q.status))throw Error(`invalid status: must be one of ${nV.join(", ")}`);let Q=X.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);Q.status=q.status}else if(q.type==="update"){if(typeof q.id!=="number")throw Error("update requires a numeric id");if(q.title!==void 0&&(typeof q.title!=="string"||q.title.trim().length===0))throw Error("title must be a non-empty string");if(q.body!==void 0&&typeof q.body!=="string")throw Error("body must be a string");let Q=X.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);if(typeof q.title==="string")Q.title=q.title;if(typeof q.body==="string")Q.body=q.body}else if(q.type==="link"){if(typeof q.id!=="number")throw Error("link requires a numeric id");if(typeof q.taskId!=="string"||q.taskId.length===0)throw Error("link requires a non-empty taskId");let Q=X.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);Q.taskId=q.taskId}else if(q.type==="unlink"){if(typeof q.id!=="number")throw Error("unlink requires a numeric id");let Q=X.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);Q.taskId=void 0}else if(q.type==="delete"){if(typeof q.id!=="number")throw Error("delete requires a numeric id");let Q=X.issues.filter((H)=>H.id!==q.id);if(Q.length===X.issues.length)throw Error(`no issue #${q.id}`);X.issues=Q}else throw Error(`unknown op type: ${q.type}`);return await UB(this.path,G),DB(Y,X)})}}var MB,nV,oZ;var FB=k(()=>{MB=cO(IO),nV=["open","doing","hold","done"];oZ=new Map});import{mkdirSync as pO,watch as _O}from"fs";import{basename as oO,dirname as sO}from"path";function eZ(f){if(f.debounceMs<=0)return()=>{};let J=sO(f.filePath),Y=new Set([oO(f.filePath),...f.matchBasenames??[]]),z=null,G=null,X=null,q=()=>{try{f.onTrigger()}catch(H){f.onError(H)}},Q=()=>{if(z)clearTimeout(z);z=setTimeout(()=>{z=null,q()},f.debounceMs),z.unref?.()};try{pO(J,{recursive:!0}),X=_O(J,(H,B)=>{let V=B===null?null:String(B);if(V!==null&&!Y.has(V))return;Q()}),X.on("error",f.onError)}catch(H){f.onError(H)}if(f.pollMs&&f.pollMs>0)G=setInterval(q,f.pollMs),G.unref?.();return()=>{if(z)clearTimeout(z),z=null;if(G)clearInterval(G),G=null;X?.close(),X=null}}var OB=()=>{};import{homedir as tO}from"os";import{basename as eO,join as fA}from"path";function gB(f=process.env.KOBE_HOME_DIR??tO()){return fA(f,".kobe","settings","keybindings.yaml")}function iV(f,J={}){let Y=J.debounceMs??AB;if(Y<=0)return()=>{};let z=J.path??gB(),G=eO(z),X=G.replace(/\.yaml$/,".yml"),q=0;return f.publish("keybindings",{rev:q}),eZ({filePath:z,matchBasenames:[G,X],debounceMs:Y,onTrigger:()=>{try{q+=1,f.publish("keybindings",{rev:q})}catch(H){uf("keybindings-watcher",H)}},onError:(H)=>uf("keybindings-watcher",H)})}var AB=200;var lV=k(()=>{OB()});class RB{clients;idleGraceMs;onIdleStop;schedule;log;cancelIdle=null;stopping=!1;constructor(f){this.clients=f.clients,this.idleGraceMs=f.idleGraceMs,this.onIdleStop=f.onIdleStop,this.schedule=f.schedule??JA,this.log=f.log??OY}guiCount(){let f=0;for(let J of this.clients())if(J.holdsLifetime)f++;return f}hasSubscribers(){for(let f of this.clients())if(f.subscribed)return!0;return!1}isStopping(){return this.stopping}markStopping(){this.stopping=!0,this.clearIdle()}guiAttached(){this.clearIdle()}clientDisconnected(f){if(f)this.maybeArm()}clearIdle(){if(this.cancelIdle)this.cancelIdle(),this.cancelIdle=null}maybeArm(){if(this.stopping||this.guiCount()>0)return;this.clearIdle(),this.log("idle",`last gui gone \u2014 arming ${this.idleGraceMs}ms idle-stop grace`),this.cancelIdle=this.schedule(()=>{if(this.cancelIdle=null,this.stopping||this.guiCount()>0)return;this.log("idle","grace elapsed with no gui \u2014 self-stopping"),this.onIdleStop()},this.idleGraceMs)}}var JA=(f,J)=>{let Y=setTimeout(f,J);return Y.unref?.(),()=>clearTimeout(Y)};var aV=()=>{};import{spawn as YA}from"child_process";function CB(f,J,Y,z){if(Y)return f+z.slowRetryMs;return J+Math.max(z.minIntervalMs,(J-f)*5)}function kB(f,J){return!f.inFlight&&J>=f.nextAllowedAt}function fq(f,J,Y,z){let G=Date.now();if(!kB(f,G))return!1;f.inFlight=!0;let X=new AbortController,q=setTimeout(()=>X.abort(),J.timeoutMs);return(async()=>{let Q,H=!1;try{Q=await Y(X.signal),H=!0}catch{}clearTimeout(q);let B=X.signal.aborted;if(f.nextAllowedAt=CB(G,Date.now(),B,J),f.inFlight=!1,H&&!B)z(Q)})(),!0}function HJ(f,J,Y){return new Promise((z)=>{let G="",X=!1,q=(H)=>{if(X)return;X=!0,z({status:H,stdout:G})},Q=YA(f,J.slice(),{cwd:Y.cwd,stdio:["ignore","pipe","ignore"],env:Y.env,signal:Y.signal,killSignal:"SIGKILL"});Q.stdout?.on("data",(H)=>{G+=String(H)}),Q.on("error",()=>q(null)),Q.on("close",(H)=>q(H))})}var QX=()=>{};function qA(f){if(f.archived)return!1;if(f.kind==="main")return!1;if(!f.branch||!f.worktreePath)return!1;if(f1(f.repo)||f1(f.worktreePath))return!1;return!0}async function QA(f,J){let Y=J.tickMs??Jq,z=[];for(let G of f.listTasks()){if(!qA(G)){J.schedule.delete(G.id);continue}let X=J.schedule.get(G.id)??0;if(J.now<X)continue;try{let q=await J.run(G.worktreePath,G.branch);if(q.kind==="empty"){J.schedule.set(G.id,J.now+zA);continue}let Q=GV(q.view,J.at),H=f.getTask(G.id);if(!H){J.schedule.delete(G.id);continue}if(!dZ(H.prStatus,Q??void 0))await f.setPRStatus(G.id,Q),z.push(G.id);let B=Q?.lifecycle==="merged"||Q?.lifecycle==="closed";J.schedule.set(G.id,J.now+(B?GA:Y))}catch(q){uf("pr-status-poller",q),J.schedule.set(G.id,J.now+Y)}}return z}function $V(f,J=Jq,Y,z=ZA){if(J<=0)return()=>{};let G=new Map,X=!1,Q=setInterval(()=>{if(Y&&!Y())return;if(X)return;X=!0,QA(f,{run:z,now:Date.now(),at:new Date().toISOString(),schedule:G,tickMs:J}).catch((H)=>uf("pr-status-poller",H)).finally(()=>{X=!1})},J);return Q.unref?.(),()=>clearInterval(Q)}var Jq=30000,zA=300000,GA=600000,XA=1e4,ZA=async(f,J)=>{let Y=new AbortController,z=setTimeout(()=>Y.abort(),XA);try{let G=await HJ("gh",["pr","view",J,"--json",zV],{cwd:f,signal:Y.signal});if(G.status!==0)return{kind:"empty"};let X=JSON.parse(G.stdout);return typeof X.number==="number"?{kind:"pr",view:X}:{kind:"empty"}}catch{return{kind:"empty"}}finally{clearTimeout(z)}};var rV=k(()=>{QX();Af()});import{readFileSync as HA}from"fs";import{homedir as BA}from"os";import{basename as jA,join as WA}from"path";function yB(f=process.env.KOBE_HOME_DIR??BA()){return WA(f,".config","kobe","state.json")}function pV(f){let J={};try{let B=JSON.parse(HA(f,"utf8"));if(B&&typeof B==="object"&&!Array.isArray(B))J=B}catch{}let Y=typeof J.activeTheme==="string"&&J.activeTheme.length>0?J.activeTheme:"claude",z=J.transparentBackground===!0,G=typeof J.focusAccent==="string"&&KA.includes(J.focusAccent)?J.focusAccent:null,X=J.activeSortMode==="recent"?"recent":"default",q=J["tasksPane.keysCollapsed"]===!0,Q=typeof J["tasksPane.projectFilter"]==="string"&&J["tasksPane.projectFilter"].length>0?J["tasksPane.projectFilter"]:null,H=typeof J.locale==="string"&&J.locale.length>0?J.locale:"en";return{theme:Y,transparentBackground:z,focusAccent:G,locale:H,sortMode:X,keysCollapsed:q,projectFilter:Q}}function UA(f,J){return f.theme===J.theme&&f.transparentBackground===J.transparentBackground&&f.focusAccent===J.focusAccent&&f.locale===J.locale&&f.sortMode===J.sortMode&&f.keysCollapsed===J.keysCollapsed&&f.projectFilter===J.projectFilter}function _V(f,J={}){let Y=J.debounceMs??NB;if(Y<=0)return()=>{};let z=J.pollMs??VA,G=J.statePath??yB(),X=jA(G),q=pV(G);return f.publish("ui-prefs",q),eZ({filePath:G,matchBasenames:[X],debounceMs:Y,pollMs:z,onTrigger:()=>{try{let H=pV(G);if(UA(q,H))return;q=H,f.publish("ui-prefs",H)}catch(H){uf("ui-prefs-watcher",H)}},onError:(H)=>uf("ui-prefs-watcher",H)})}var NB=200,VA=250,KA;var oV=k(()=>{OB();KA=["primary","success","info"]});function bB(){return nf()[Wz]===!0}var Wz="experimental.dispatcher";var Yq=k(()=>{pY()});import{randomUUID as DA}from"crypto";function BJ(f){return`engineCommand.${f}`}function jJ(f){return`engineName.${f}`}function Vz(f){return kf(jJ(f))?.trim()||SB[f]||f}function HX(f){return pf(f??"claude").defaultCommand}function LA(f){let J=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g;for(let z=Y.exec(f);z!==null;z=Y.exec(f))J.push(z[1]??z[2]??z[3]??"");return J}function b1(f,J){let Y=f??"claude",z=kf(BJ(Y))?.trim(),G=(()=>{if(z){let X=LA(z);if(X.length>0)return X}return HX(Y)})();return MA(G,Y,J)}function MA(f,J,Y){let z=Y?.trim();if(!z)return f;let G=J??"claude";if(!pf(G).effortLevels?.includes(z))return f;if(G==="codex")return[...f,"-c",`model_reasoning_effort=${z}`];return f}function rz(f,J){if((J??"claude")!=="claude")return{argv:f,sessionId:null};if(f.some((z)=>FA.has(z)))return{argv:f,sessionId:null};let Y=DA();return{argv:[...f,"--session-id",Y],sessionId:Y}}function Kz(){let f=(J)=>/^[A-Za-z0-9_/.:=-]+$/.test(J)?J:`'${J.replace(/'/g,"'\\''")}'`;try{return[...Cf(),"api"].map(f).join(" ")}catch{return"kobe api"}}function OA(f,J=Kz()){return[`You are running inside kobe (a local multi-session task manager) as task ${f}.`,"kobe tracks a lifecycle status for this task on a board.","When you have COMPLETED the work requested in this session and verified it, report it by running:",` ${J} set-status --task-id ${f} --status in_review`,"Run it only when the work is genuinely done \u2014 never while you are asking the user a question, waiting for input, or mid-task.","Never set any other status value; everything beyond in_review is the user's decision."].join(`
45
+ `)}function AA(f,J=Kz()){return["kobe shares hard-won discoveries between its parallel sessions as one-line field notes.","When you RESOLVE a non-obvious, repo-level gotcha (a build flag, a flaky test, an environment quirk, an API trap), file it:",` ${J} note --task-id ${f} --text "<one line: the verified conclusion>"`,"File only verified conclusions another session could act on \u2014 never progress logs, opinions, or details specific to your own task. A handful per session at most."].join(`
46
+ `)}function gA(f,J=Kz(),Y={}){let z=[];if((Y.status??pZ)())z.push(OA(f,J));if((Y.notes??bB)())z.push(AA(f,J));return z.length>0?z.join(`
47
+
48
+ `):null}function zq(f,J,Y,z={}){if(!Y)return f;if((J??"claude")!=="claude")return f;if(f.includes("--append-system-prompt")||f.includes("--append-system-prompt-file"))return f;let G=gA(Y,Kz(),z);if(!G)return f;return[...f,"--append-system-prompt",G]}function RA(f,J=Kz()){return[`You are running inside kobe (a local multi-session task manager) as this repository's DISPATCHER (task ${f}, the repo's main session).`,"kobe runs multiple worktree task sessions on this repo in parallel. When one of them resolves a non-obvious gotcha, it files a one-line field note; kobe forwards each note to you as a user message prefixed with [KOBE FIELD NOTE].","Your job is routing that knowledge, fully autonomously \u2014 never ask the user for permission:",` - See the fleet: \`${J} collect --repo .\` (status, running, change counts per task), or \`--task-ids id1,id2\` for specific tasks.`,` - Relay a note to a task that would benefit: \`${J} dispatch --task-id <id> --prompt "[dispatcher] FYI from <author task>: <note verbatim>"\`.`," - Relay to the in-flight tasks whose work plausibly touches the same area \u2014 and to nobody else. If no task benefits, do nothing."," - Never relay a note back to its author, never relay the same note to the same task twice, and keep relays verbatim with provenance \u2014 no summarizing, no embellishment.","Use ONLY the dispatch verb to message sessions \u2014 the `send` verb pastes via tmux and would spawn a DUPLICATE engine for web-hosted sessions. If dispatch fails, report the error in your own session and stop; do not fall back.","Take no action on merge conflicts between tasks \u2014 the board's conflict radar is display-only by design, and resolution timing belongs to the humans and the tasks themselves.","Never run git commands inside other tasks' worktrees."].join(`
49
+ `)}function Gq(f,J,Y,z=bB){if(!Y||!z())return f;if((J??"claude")!=="claude")return f;if(f.includes("--append-system-prompt")||f.includes("--append-system-prompt-file"))return f;return[...f,"--append-system-prompt",RA(Y)]}var SB,FA;var x1=k(()=>{lJ();UY();XX();Yq();Af();U1();SB=Object.fromEntries(dY.map((f)=>[f,pf(f).displayName]));FA=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});function pz(f){return Uz.includes(f)?f:"auto"}var Uz,sV,_J="editor.kind",RY="editor.customCommand",Xq="auto";var Zq=k(()=>{Uz=["auto","vim","nvim","nano","emacs","custom"],sV=["nvim","vim","emacs","nano"]});function Lz(f){return f==="taskpanel"?"taskpanel":"chattab"}var oJ="settings.surface",Dz="chattab";function w1(f=process.env){return{...f,...IB}}var IB;var CY=k(()=>{IB={GIT_OPTIONAL_LOCKS:"0"}});async function _z(f,J,Y={}){if(!f)return{stdout:"",stderr:"worktreePath is required",status:-1};let z=(Y.execForPath??pJ)(f),G=Y.timeoutMs&&Y.timeoutMs>0?new AbortController:null,X=!1,q=G?setTimeout(()=>{X=!0,G.abort()},Y.timeoutMs):null,Q;try{Q=await z.run(["git",...J],{cwd:f,env:IB,signal:G?.signal})}catch(H){if(q)clearTimeout(q);return{stdout:"",stderr:H instanceof Error?H.message:String(H),status:-1}}if(q)clearTimeout(q);if(X&&Q.exitCode===-1&&!Q.stderr)return{stdout:Q.stdout,stderr:`git ${J.join(" ")} timed out after ${Y.timeoutMs}ms`,status:-1};return{stdout:Q.stdout,stderr:Q.stderr,status:Q.exitCode}}function CA(f,J){if(!f||!J||J.startsWith("/"))return null;let Y=J.split("/");if(Y.some((z)=>z===".."))return null;return`${f.replace(/\/+$/,"")}/${Y.filter(Boolean).join("/")}`}async function tV(f,J,Y={}){let z=CA(f,J);if(!z)return null;let G=(Y.execForPath??pJ)(f);try{return await G.readFile(z)}catch{return null}}var qq=k(()=>{ZJ();CY()});import{statSync as kA}from"fs";async function BX(f,J){let Y=await _z(f,J,{timeoutMs:NA}),z=Y.status??-1;return{ok:z===0,stdout:Y.stdout,stderr:Y.stderr,code:z}}function bA(f){switch(f){case"M":return"modified";case"A":return"added";case"D":return"deleted";case"R":return"renamed";case"C":return"copied";case"T":return"type changed";case"U":return"unmerged";case"?":return"untracked";default:return"changed"}}function eV(f){let J=new Map;if(!f)return J;let Y=f.split(/(?=^diff --git )/m);for(let z of Y){if(!z.startsWith("diff --git"))continue;let G=null,X=z.match(/^\+\+\+ b\/(.*)$/m);if(X&&X[1]!=="/dev/null")G=X[1];else{let q=z.match(/^diff --git a\/.* b\/(.*)$/m);if(q)G=q[1]}if(!G)continue;J.set(SA(G),z.endsWith(`
52
50
  `)?z:`${z}
53
- `)}return J}function lA(f){if(!(f.startsWith('"')&&f.endsWith('"')))return f;return f.slice(1,-1).replace(/\\([\\"nt])/g,(Y,z)=>z==="n"?`
54
- `:z==="t"?"\t":z)}async function aA(f,J,Y){let z=Array(f.length),G=Math.max(1,Math.min(J,f.length)),X=0;async function q(){while(X<f.length){let Q=X++;z[Q]=await Y(f[Q],Q)}}return await Promise.all(Array.from({length:G},()=>q())),z}async function $A(f,J){let Y=await jX(f,["diff","--no-color","--no-index","--","/dev/null",J]);if(Y.stdout.trim())return Y.stdout.endsWith(`
51
+ `)}return J}function SA(f){if(!(f.startsWith('"')&&f.endsWith('"')))return f;return f.slice(1,-1).replace(/\\([\\"nt])/g,(Y,z)=>z==="n"?`
52
+ `:z==="t"?"\t":z)}async function IA(f,J,Y){let z=Array(f.length),G=Math.max(1,Math.min(J,f.length)),X=0;async function q(){while(X<f.length){let Q=X++;z[Q]=await Y(f[Q],Q)}}return await Promise.all(Array.from({length:G},()=>q())),z}async function TA(f,J){let Y=await BX(f,["diff","--no-color","--no-index","--","/dev/null",J]);if(Y.stdout.trim())return Y.stdout.endsWith(`
55
53
  `)?Y.stdout:`${Y.stdout}
56
- `;return""}async function Q7(f,J){if(J.pathname!=="/api/diff")return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});let Y=J.searchParams.get("worktreePath");if(!Y)return Response.json({error:"missing worktreePath"},{status:400});let z;try{z=decodeURIComponent(Y)}catch{return Response.json({error:"invalid worktreePath encoding"},{status:400})}if(!z.startsWith("/"))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!GZ(z))return Response.json({error:"worktreePath does not exist"},{status:400});if(!cJ(z).isRemote)try{if(!cA(z).isDirectory())return Response.json({error:"worktreePath is not a directory"},{status:400})}catch{return Response.json({error:"worktreePath does not exist"},{status:400})}let X=await jX(z,["rev-parse","--is-inside-work-tree"]);if(!X.ok||X.stdout.trim()!=="true")return Response.json({error:`not a git work tree: ${X.stderr.trim()||z}`},{status:500});let[q,Q,H]=await Promise.all([jX(z,["status","--porcelain=v1","-z","--untracked-files=all"]),jX(z,["diff","--no-color"]),jX(z,["diff","--no-color","--staged"])]);if(!q.ok)return Response.json({error:`git status failed: ${q.stderr.trim()}`},{status:500});let B=q7(Q.stdout),V=q7(H.stdout),j=q.stdout.split("\x00"),U=[],L=[];for(let R=0;R<j.length;R++){let S=j[R];if(!S)continue;let a=S[0]??" ",N=S[1]??" ",g=S.slice(3);if(!g)continue;if(a==="R"||a==="C"||N==="R"||N==="C")R++;let C=a==="?"&&N==="?",y=a!==" "&&a!=="?"?a:N,_=a!==" "&&a!=="?",z0="";if(C)L.push({fileIndex:U.length,path:g});else if(z0=V.get(g)??B.get(g)??"",V.has(g)&&B.has(g))z0=`${V.get(g)}${B.get(g)}`;U.push({path:g,status:C?"untracked":iA(y),staged:_,patch:z0})}if(L.length>0){let R=await aA(L,dA,(S)=>$A(z,S.path));for(let S=0;S<L.length;S++)U[L[S].fileIndex].patch=R[S]}U.sort((R,S)=>R.path.localeCompare(S.path));let O=[H.stdout,Q.stdout].filter(Boolean).join(`
57
- `),M={files:U,raw:O};return Response.json(M)}var nA=15000,dA=8;var H7=k(()=>{e1();qq()});import{isAbsolute as rA}from"path";function j7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function _A(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9._-]+$/.test(f)&&!f.includes("..")}async function oA(f){let J=f.searchParams.get("worktreePath"),Y=f.searchParams.get("vendor")??"claude";if(!J||!rA(J))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!j7(Y))return Response.json({error:"invalid vendor"},{status:400});try{let z=pf(Y).history,[G,X]=await Promise.all([z.listSessionIdsForWorktree(J),z.latestTranscriptMtimeForWorktree(J)]);return Response.json({sessions:G,latestMtime:X})}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}async function sA(f){let J=f.searchParams.get("vendor")??"claude",Y=f.searchParams.get("sessionId");if(!j7(J))return Response.json({error:"invalid vendor"},{status:400});if(!_A(Y))return Response.json({error:"invalid sessionId"},{status:400});try{let z=await pf(J).history.readHistory(Y);return Response.json({messages:z})}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}async function W7(f,J){if(J.pathname!==B7&&J.pathname!==pA)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return J.pathname===B7?oA(J):sA(J)}var B7="/api/history/sessions",pA="/api/history/messages";var V7=k(()=>{MY()});import{mkdir as tA,readFile as eA,writeFile as fg}from"fs/promises";import{join as K7}from"path";function U7(){return K7(ef(),"notes")}function D7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function L7(f){return K7(U7(),`${f}.md`)}async function Yg(f){let J=f.searchParams.get("taskId");if(!D7(J))return Response.json({error:"invalid taskId"},{status:400});try{let Y="";try{Y=await eA(L7(J),"utf8")}catch(z){if(z.code!=="ENOENT")throw z}return Response.json({markdown:Y})}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function zg(f){let J;try{J=await f.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!D7(J.taskId))return Response.json({error:"invalid taskId"},{status:400});if(typeof J.markdown!=="string")return Response.json({error:"markdown must be a string"},{status:400});try{return await tA(U7(),{recursive:!0}),await fg(L7(J.taskId),J.markdown,"utf8"),Response.json({ok:!0})}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function M7(f,J){if(J.pathname!==Jg)return null;if(f.method==="GET")return Yg(J);if(f.method==="PUT")return zg(f);return Response.json({error:"method not allowed"},{status:405})}var Jg="/api/notes";var F7=k(()=>{lf()});var sz;var Qq=k(()=>{sz={$schema:"https://opencode.ai/theme.json",defs:{darkBg:"#141413",darkBgRaised:"#1A1917",darkBgInset:"#2B2A27",darkBgMenu:"#33312E",darkBorderSubtle:"#2B2A27",darkBorder:"#3A3835",darkBorderActive:"#5C5853",darkText:"#EAE7DF",darkTextMuted:"#A9A39A",darkTextSubtle:"#6B665F",darkPrimary:"#CC785C",darkSecondary:"#D4967E",darkAccent:"#CC785C",darkAccentHover:"#E0AB96",darkRed:"#D47563",darkOrange:"#D97757",darkYellow:"#E8C96B",darkGreen:"#9ACA86",darkBlue:"#61AAF2",darkViolet:"#9B87F5",darkTerracotta:"#BF4D43",lightBg:"#FAF9F5",lightBgRaised:"#F0EEE6",lightBgInset:"#EAE7DF",lightBgMenu:"#E2DED4",lightBorderSubtle:"#EAE7DF",lightBorder:"#D9D5CC",lightBorderActive:"#A9A39A",lightText:"#1A1917",lightTextMuted:"#6B665F",lightTextSubtle:"#8D877D",lightPrimary:"#C96442",lightSecondary:"#B85F3D",lightAccent:"#CC785C",lightAccentHover:"#B85F3D",lightRed:"#A84B3A",lightOrange:"#C96442",lightYellow:"#8A6220",lightGreen:"#2E7C4C",lightBlue:"#207FDE",lightViolet:"#7B5BB6",lightTerracotta:"#BF4D43"},theme:{primary:{dark:"darkPrimary",light:"lightPrimary"},secondary:{dark:"darkSecondary",light:"lightSecondary"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkYellow",light:"lightYellow"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkBlue",light:"lightBlue"},text:{dark:"darkText",light:"lightText"},textMuted:{dark:"darkTextMuted",light:"lightTextMuted"},background:{dark:"darkBg",light:"lightBg"},backgroundPanel:{dark:"darkBgRaised",light:"lightBgRaised"},backgroundElement:{dark:"darkBgInset",light:"lightBgInset"},backgroundMenu:{dark:"darkBgMenu",light:"lightBgMenu"},backgroundDialog:{dark:"darkBgRaised",light:"lightBgRaised"},border:{dark:"darkBorder",light:"lightBorder"},borderActive:{dark:"darkBorderActive",light:"lightBorderActive"},borderSubtle:{dark:"darkBorderSubtle",light:"lightBorderSubtle"},diffAdded:{dark:"darkGreen",light:"lightGreen"},diffRemoved:{dark:"darkRed",light:"lightRed"},diffContext:{dark:"darkTextMuted",light:"lightTextSubtle"},diffHunkHeader:{dark:"darkTextMuted",light:"lightTextSubtle"},diffHighlightAdded:{dark:"#B5E0A0",light:"#1F6638"},diffHighlightRemoved:{dark:"#E89180",light:"#8A3A2C"},diffAddedBg:{dark:"#1F2A1F",light:"#E5EEDF"},diffRemovedBg:{dark:"#2A1F1C",light:"#F5DAD3"},diffContextBg:{dark:"darkBgRaised",light:"lightBgRaised"},diffLineNumber:{dark:"darkTextSubtle",light:"lightTextSubtle"},diffAddedLineNumberBg:{dark:"#1A2419",light:"#D5E2CC"},diffRemovedLineNumberBg:{dark:"#241915",light:"#EBC8BE"},markdownText:{dark:"darkText",light:"lightText"},markdownHeading:{dark:"darkPrimary",light:"lightPrimary"},markdownLink:{dark:"darkAccent",light:"lightAccent"},markdownLinkText:{dark:"darkBlue",light:"lightBlue"},markdownCode:{dark:"darkSecondary",light:"lightSecondary"},markdownBlockQuote:{dark:"darkTextMuted",light:"lightTextMuted"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkPrimary",light:"lightPrimary"},markdownHorizontalRule:{dark:"darkTextMuted",light:"lightTextMuted"},markdownListItem:{dark:"darkAccent",light:"lightAccent"},markdownListEnumeration:{dark:"darkBlue",light:"lightBlue"},markdownImage:{dark:"darkAccent",light:"lightAccent"},markdownImageText:{dark:"darkBlue",light:"lightBlue"},markdownCodeBlock:{dark:"darkText",light:"lightText"},markdownQuote:{dark:"darkTextMuted",light:"lightTextMuted"},syntaxComment:{dark:"darkTextSubtle",light:"lightTextSubtle"},syntaxKeyword:{dark:"darkPrimary",light:"lightPrimary"},syntaxFunction:{dark:"darkBlue",light:"lightBlue"},syntaxVariable:{dark:"darkText",light:"lightText"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkViolet",light:"lightViolet"},syntaxOperator:{dark:"darkSecondary",light:"lightSecondary"},syntaxPunctuation:{dark:"darkText",light:"lightText"},selectedListItemText:{dark:"darkBg",light:"lightBg"}}}});var tz;var Hq=k(()=>{tz={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#0a0a0a",darkStep2:"#111111",darkStep3:"#181818",darkStep4:"#1f1f1f",darkStep5:"#2a2a2a",darkStep6:"#363636",darkStep7:"#444444",darkStep8:"#5a5a5a",darkStep9:"#7a7a7a",darkStep10:"#9a9a9a",darkStep11:"#909090",darkStep12:"#e8e8e8",darkAccent:"#7da5c8",darkAccentBright:"#9bc3e3",darkRed:"#e06c75",darkOrange:"#d6a668",darkGreen:"#7fd88f",darkCyan:"#7da5c8",darkYellow:"#d6a668",lightStep1:"#fafafa",lightStep2:"#f3f3f3",lightStep3:"#ececec",lightStep4:"#e2e2e2",lightStep5:"#d4d4d4",lightStep6:"#bdbdbd",lightStep7:"#9c9c9c",lightStep8:"#7c7c7c",lightStep9:"#5b5b5b",lightStep10:"#404040",lightStep11:"#6c6c6c",lightStep12:"#1a1a1a",lightAccent:"#3d6f9f",lightAccentBright:"#1a4f87",lightRed:"#c9343a",lightOrange:"#a06b1a",lightGreen:"#3d9a57",lightCyan:"#3d6f9f",lightYellow:"#a06b1a"},theme:{primary:{dark:"darkStep12",light:"lightStep12"},secondary:{dark:"darkAccentBright",light:"lightAccentBright"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},backgroundMenu:{dark:"darkStep4",light:"lightStep4"},border:{dark:"darkStep6",light:"lightStep6"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep4",light:"lightStep4"},diffAdded:{dark:"#7fd88f",light:"#3d9a57"},diffRemoved:{dark:"#e06c75",light:"#c9343a"},diffContext:{dark:"darkStep10",light:"lightStep10"},diffHunkHeader:{dark:"darkStep10",light:"lightStep10"},diffHighlightAdded:{dark:"#9be5ad",light:"#2d7a3f"},diffHighlightRemoved:{dark:"#f08490",light:"#a82530"},diffAddedBg:{dark:"#15241a",light:"#d8efdc"},diffRemovedBg:{dark:"#2a1518",light:"#f5dadc"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"darkStep9",light:"lightStep9"},diffAddedLineNumberBg:{dark:"#0f1c14",light:"#c5deca"},diffRemovedLineNumberBg:{dark:"#221012",light:"#e5c5c8"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkStep12",light:"lightStep12"},markdownLink:{dark:"darkAccent",light:"lightAccent"},markdownCode:{dark:"darkAccentBright",light:"lightAccentBright"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},markdownQuote:{dark:"darkStep11",light:"lightStep11"},selectedListItemText:{dark:"darkStep1",light:"lightStep1"}}}});var ez;var Bq=k(()=>{ez={$schema:"https://opencode.ai/theme.json",defs:{background:"#282a36",currentLine:"#44475a",selection:"#44475a",foreground:"#f8f8f2",comment:"#6272a4",cyan:"#8be9fd",green:"#50fa7b",orange:"#ffb86c",pink:"#ff79c6",purple:"#bd93f9",red:"#ff5555",yellow:"#f1fa8c"},theme:{primary:{dark:"purple",light:"purple"},secondary:{dark:"pink",light:"pink"},accent:{dark:"cyan",light:"cyan"},error:{dark:"red",light:"red"},warning:{dark:"yellow",light:"yellow"},success:{dark:"green",light:"green"},info:{dark:"orange",light:"orange"},text:{dark:"foreground",light:"#282a36"},textMuted:{dark:"comment",light:"#6272a4"},background:{dark:"#282a36",light:"#f8f8f2"},backgroundPanel:{dark:"#21222c",light:"#e8e8e2"},backgroundElement:{dark:"currentLine",light:"#d8d8d2"},border:{dark:"currentLine",light:"#c8c8c2"},borderActive:{dark:"purple",light:"purple"},borderSubtle:{dark:"#191a21",light:"#e0e0e0"},diffAdded:{dark:"green",light:"green"},diffRemoved:{dark:"red",light:"red"},diffContext:{dark:"comment",light:"#6272a4"},diffHunkHeader:{dark:"comment",light:"#6272a4"},diffHighlightAdded:{dark:"green",light:"green"},diffHighlightRemoved:{dark:"red",light:"red"},diffAddedBg:{dark:"#1a3a1a",light:"#e0ffe0"},diffRemovedBg:{dark:"#3a1a1a",light:"#ffe0e0"},diffContextBg:{dark:"#21222c",light:"#e8e8e2"},diffLineNumber:{dark:"#989aa4",light:"#686865"},diffAddedLineNumberBg:{dark:"#1a3a1a",light:"#e0ffe0"},diffRemovedLineNumberBg:{dark:"#3a1a1a",light:"#ffe0e0"},markdownText:{dark:"foreground",light:"#282a36"},markdownHeading:{dark:"purple",light:"purple"},markdownLink:{dark:"cyan",light:"cyan"},markdownLinkText:{dark:"pink",light:"pink"},markdownCode:{dark:"green",light:"green"},markdownBlockQuote:{dark:"comment",light:"#6272a4"},markdownEmph:{dark:"yellow",light:"yellow"},markdownStrong:{dark:"orange",light:"orange"},markdownHorizontalRule:{dark:"comment",light:"#6272a4"},markdownListItem:{dark:"purple",light:"purple"},markdownListEnumeration:{dark:"cyan",light:"cyan"},markdownImage:{dark:"cyan",light:"cyan"},markdownImageText:{dark:"pink",light:"pink"},markdownCodeBlock:{dark:"foreground",light:"#282a36"},syntaxComment:{dark:"comment",light:"#6272a4"},syntaxKeyword:{dark:"pink",light:"pink"},syntaxFunction:{dark:"green",light:"green"},syntaxVariable:{dark:"foreground",light:"#282a36"},syntaxString:{dark:"yellow",light:"yellow"},syntaxNumber:{dark:"purple",light:"purple"},syntaxType:{dark:"cyan",light:"cyan"},syntaxOperator:{dark:"pink",light:"pink"},syntaxPunctuation:{dark:"foreground",light:"#282a36"}}}});var fG;var jq=k(()=>{fG={$schema:"https://opencode.ai/theme.json",defs:{nord0:"#2E3440",nord1:"#3B4252",nord2:"#434C5E",nord3:"#4C566A",nord4:"#D8DEE9",nord5:"#E5E9F0",nord6:"#ECEFF4",nord7:"#8FBCBB",nord8:"#88C0D0",nord9:"#81A1C1",nord10:"#5E81AC",nord11:"#BF616A",nord12:"#D08770",nord13:"#EBCB8B",nord14:"#A3BE8C",nord15:"#B48EAD"},theme:{primary:{dark:"nord8",light:"nord10"},secondary:{dark:"nord9",light:"nord9"},accent:{dark:"nord7",light:"nord7"},error:{dark:"nord11",light:"nord11"},warning:{dark:"nord12",light:"nord12"},success:{dark:"nord14",light:"nord14"},info:{dark:"nord8",light:"nord10"},text:{dark:"nord6",light:"nord0"},textMuted:{dark:"#8B95A7",light:"nord1"},background:{dark:"nord0",light:"nord6"},backgroundPanel:{dark:"nord1",light:"nord5"},backgroundElement:{dark:"nord2",light:"nord4"},border:{dark:"nord2",light:"nord3"},borderActive:{dark:"nord3",light:"nord2"},borderSubtle:{dark:"nord2",light:"nord3"},diffAdded:{dark:"nord14",light:"nord14"},diffRemoved:{dark:"nord11",light:"nord11"},diffContext:{dark:"#8B95A7",light:"nord3"},diffHunkHeader:{dark:"#8B95A7",light:"nord3"},diffHighlightAdded:{dark:"nord14",light:"nord14"},diffHighlightRemoved:{dark:"nord11",light:"nord11"},diffAddedBg:{dark:"#3B4252",light:"#E5E9F0"},diffRemovedBg:{dark:"#3B4252",light:"#E5E9F0"},diffContextBg:{dark:"nord1",light:"nord5"},diffLineNumber:{dark:"#a9aeb6",light:"textMuted"},diffAddedLineNumberBg:{dark:"#3B4252",light:"#E5E9F0"},diffRemovedLineNumberBg:{dark:"#3B4252",light:"#E5E9F0"},markdownText:{dark:"nord4",light:"nord0"},markdownHeading:{dark:"nord8",light:"nord10"},markdownLink:{dark:"nord9",light:"nord9"},markdownLinkText:{dark:"nord7",light:"nord7"},markdownCode:{dark:"nord14",light:"nord14"},markdownBlockQuote:{dark:"#8B95A7",light:"nord3"},markdownEmph:{dark:"nord12",light:"nord12"},markdownStrong:{dark:"nord13",light:"nord13"},markdownHorizontalRule:{dark:"#8B95A7",light:"nord3"},markdownListItem:{dark:"nord8",light:"nord10"},markdownListEnumeration:{dark:"nord7",light:"nord7"},markdownImage:{dark:"nord9",light:"nord9"},markdownImageText:{dark:"nord7",light:"nord7"},markdownCodeBlock:{dark:"nord4",light:"nord0"},syntaxComment:{dark:"#8B95A7",light:"nord3"},syntaxKeyword:{dark:"nord9",light:"nord9"},syntaxFunction:{dark:"nord8",light:"nord8"},syntaxVariable:{dark:"nord7",light:"nord7"},syntaxString:{dark:"nord14",light:"nord14"},syntaxNumber:{dark:"nord15",light:"nord15"},syntaxType:{dark:"nord7",light:"nord7"},syntaxOperator:{dark:"nord9",light:"nord9"},syntaxPunctuation:{dark:"nord4",light:"nord0"}}}});var JG;var Wq=k(()=>{JG={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#161616",darkStep2:"#1f1f1f",darkStep3:"#282828",darkStep4:"#323232",darkStep5:"#3c3c3c",darkStep6:"#484848",darkStep7:"#545454",darkStep8:"#6a6a6a",darkStep9:"#fab283",darkStep10:"#ffc09f",darkStep11:"#808080",darkStep12:"#eeeeee",darkSecondary:"#5c9cf5",darkAccent:"#7da5c8",darkRed:"#e06c75",darkOrange:"#f5a742",darkGreen:"#7fd88f",darkCyan:"#56b6c2",darkYellow:"#e5c07b",lightStep1:"#ffffff",lightStep2:"#fafafa",lightStep3:"#f5f5f5",lightStep4:"#ebebeb",lightStep5:"#e1e1e1",lightStep6:"#d4d4d4",lightStep7:"#b8b8b8",lightStep8:"#a0a0a0",lightStep9:"#3b7dd8",lightStep10:"#2968c3",lightStep11:"#8a8a8a",lightStep12:"#1a1a1a",lightSecondary:"#7b5bb6",lightAccent:"#3d6f9f",lightRed:"#d1383d",lightOrange:"#d68c27",lightGreen:"#3d9a57",lightCyan:"#318795",lightYellow:"#b0851f"},theme:{primary:{dark:"darkStep9",light:"lightStep9"},secondary:{dark:"darkSecondary",light:"lightSecondary"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},border:{dark:"darkStep7",light:"lightStep7"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep6",light:"lightStep6"},diffAdded:{dark:"#4fd6be",light:"#1e725c"},diffRemoved:{dark:"#c53b53",light:"#c53b53"},diffContext:{dark:"#828bb8",light:"#7086b5"},diffHunkHeader:{dark:"#828bb8",light:"#7086b5"},diffHighlightAdded:{dark:"#b8db87",light:"#4db380"},diffHighlightRemoved:{dark:"#e26a75",light:"#f52a65"},diffAddedBg:{dark:"#20303b",light:"#d5e5d5"},diffRemovedBg:{dark:"#37222c",light:"#f7d8db"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"#8f8f8f",light:"#595959"},diffAddedLineNumberBg:{dark:"#1b2b34",light:"#c5d5c5"},diffRemovedLineNumberBg:{dark:"#2d1f26",light:"#e7c8cb"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkAccent",light:"lightAccent"},markdownLink:{dark:"darkStep9",light:"lightStep9"},markdownLinkText:{dark:"darkCyan",light:"lightCyan"},markdownCode:{dark:"darkGreen",light:"lightGreen"},markdownBlockQuote:{dark:"darkYellow",light:"lightYellow"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkOrange",light:"lightOrange"},markdownHorizontalRule:{dark:"darkStep11",light:"lightStep11"},markdownListItem:{dark:"darkStep9",light:"lightStep9"},markdownListEnumeration:{dark:"darkCyan",light:"lightCyan"},markdownImage:{dark:"darkStep9",light:"lightStep9"},markdownImageText:{dark:"darkCyan",light:"lightCyan"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},syntaxComment:{dark:"darkStep11",light:"lightStep11"},syntaxKeyword:{dark:"darkAccent",light:"lightAccent"},syntaxFunction:{dark:"darkStep9",light:"lightStep9"},syntaxVariable:{dark:"darkRed",light:"lightRed"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkYellow",light:"lightYellow"},syntaxOperator:{dark:"darkCyan",light:"lightCyan"},syntaxPunctuation:{dark:"darkStep12",light:"lightStep12"}}}});var YG;var Vq=k(()=>{YG={$schema:"https://opencode.ai/theme.json",defs:{darkBg0:"#111c18",darkBg1:"#1a2520",darkBg2:"#23372B",darkBg3:"#3d4a44",darkFg0:"#C1C497",darkFg1:"#9aa88a",darkGray:"#53685B",darkRed:"#FF5345",darkGreen:"#549e6a",darkYellow:"#459451",darkBlue:"#509475",darkMagenta:"#D2689C",darkCyan:"#2DD5B7",darkWhite:"#F6F5DD",darkRedBright:"#db9f9c",darkGreenBright:"#63b07a",darkYellowBright:"#E5C736",darkBlueBright:"#ACD4CF",darkMagentaBright:"#75bbb3",darkCyanBright:"#8CD3CB",lightBg0:"#F6F5DD",lightBg1:"#E8E7CC",lightBg2:"#D5D4B8",lightBg3:"#A8A78C",lightFg0:"#111c18",lightFg1:"#1a2520",lightGray:"#53685B",lightRed:"#c7392d",lightGreen:"#3d7a52",lightYellow:"#b5a020",lightBlue:"#3d7560",lightMagenta:"#a8527a",lightCyan:"#1faa90"},theme:{primary:{dark:"darkCyan",light:"lightCyan"},secondary:{dark:"darkMagenta",light:"lightMagenta"},accent:{dark:"darkGreen",light:"lightGreen"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkYellowBright",light:"lightYellow"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkFg0",light:"lightFg0"},textMuted:{dark:"darkGray",light:"lightGray"},background:{dark:"darkBg0",light:"lightBg0"},backgroundPanel:{dark:"darkBg1",light:"lightBg1"},backgroundElement:{dark:"darkBg2",light:"lightBg2"},border:{dark:"darkBg3",light:"lightBg3"},borderActive:{dark:"darkCyan",light:"lightCyan"},borderSubtle:{dark:"darkBg2",light:"lightBg2"},diffAdded:{dark:"darkGreen",light:"lightGreen"},diffRemoved:{dark:"darkRed",light:"lightRed"},diffContext:{dark:"darkGray",light:"lightGray"},diffHunkHeader:{dark:"darkCyan",light:"lightCyan"},diffHighlightAdded:{dark:"darkGreenBright",light:"lightGreen"},diffHighlightRemoved:{dark:"darkRedBright",light:"lightRed"},diffAddedBg:{dark:"#15241c",light:"#e0eee5"},diffRemovedBg:{dark:"#241515",light:"#eee0e0"},diffContextBg:{dark:"darkBg1",light:"lightBg1"},diffLineNumber:{dark:"#828b87",light:"#5f5e4f"},diffAddedLineNumberBg:{dark:"#121f18",light:"#d5e5da"},diffRemovedLineNumberBg:{dark:"#1f1212",light:"#e5d5d5"},markdownText:{dark:"darkFg0",light:"lightFg0"},markdownHeading:{dark:"darkCyan",light:"lightCyan"},markdownLink:{dark:"darkCyanBright",light:"lightCyan"},markdownLinkText:{dark:"darkGreen",light:"lightGreen"},markdownCode:{dark:"darkGreenBright",light:"lightGreen"},markdownBlockQuote:{dark:"darkGray",light:"lightGray"},markdownEmph:{dark:"darkMagenta",light:"lightMagenta"},markdownStrong:{dark:"darkFg0",light:"lightFg0"},markdownHorizontalRule:{dark:"darkGray",light:"lightGray"},markdownListItem:{dark:"darkCyan",light:"lightCyan"},markdownListEnumeration:{dark:"darkCyanBright",light:"lightCyan"},markdownImage:{dark:"darkCyanBright",light:"lightCyan"},markdownImageText:{dark:"darkGreen",light:"lightGreen"},markdownCodeBlock:{dark:"darkFg0",light:"lightFg0"},syntaxComment:{dark:"darkGray",light:"lightGray"},syntaxKeyword:{dark:"darkCyan",light:"lightCyan"},syntaxFunction:{dark:"darkBlue",light:"lightBlue"},syntaxVariable:{dark:"darkFg0",light:"lightFg0"},syntaxString:{dark:"darkGreenBright",light:"lightGreen"},syntaxNumber:{dark:"darkMagenta",light:"lightMagenta"},syntaxType:{dark:"darkGreen",light:"lightGreen"},syntaxOperator:{dark:"darkYellow",light:"lightYellow"},syntaxPunctuation:{dark:"darkFg0",light:"lightFg0"}}}});var zG;var Kq=k(()=>{zG={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#1a1b26",darkStep2:"#1e2030",darkStep3:"#222436",darkStep4:"#292e42",darkStep5:"#3b4261",darkStep6:"#545c7e",darkStep7:"#737aa2",darkStep8:"#9099b2",darkStep9:"#82aaff",darkStep10:"#89b4fa",darkStep11:"#828bb8",darkStep12:"#c8d3f5",darkRed:"#ff757f",darkOrange:"#ff966c",darkYellow:"#ffc777",darkGreen:"#c3e88d",darkCyan:"#86e1fc",darkPurple:"#c099ff",lightStep1:"#e1e2e7",lightStep2:"#d5d6db",lightStep3:"#c8c9ce",lightStep4:"#b9bac1",lightStep5:"#a8aecb",lightStep6:"#9699a8",lightStep7:"#737a8c",lightStep8:"#5a607d",lightStep9:"#2e7de9",lightStep10:"#1a6ce7",lightStep11:"#8990a3",lightStep12:"#3760bf",lightRed:"#f52a65",lightOrange:"#b15c00",lightYellow:"#8c6c3e",lightGreen:"#587539",lightCyan:"#007197",lightPurple:"#9854f1"},theme:{primary:{dark:"darkStep9",light:"lightStep9"},secondary:{dark:"darkPurple",light:"lightPurple"},accent:{dark:"darkOrange",light:"lightOrange"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkStep9",light:"lightStep9"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},border:{dark:"darkStep7",light:"lightStep7"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep6",light:"lightStep6"},diffAdded:{dark:"#4fd6be",light:"#1e725c"},diffRemoved:{dark:"#c53b53",light:"#c53b53"},diffContext:{dark:"#828bb8",light:"#7086b5"},diffHunkHeader:{dark:"#828bb8",light:"#7086b5"},diffHighlightAdded:{dark:"#b8db87",light:"#4db380"},diffHighlightRemoved:{dark:"#e26a75",light:"#f52a65"},diffAddedBg:{dark:"#20303b",light:"#d5e5d5"},diffRemovedBg:{dark:"#37222c",light:"#f7d8db"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"#8f909a",light:"#59595b"},diffAddedLineNumberBg:{dark:"#1b2b34",light:"#c5d5c5"},diffRemovedLineNumberBg:{dark:"#2d1f26",light:"#e7c8cb"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkPurple",light:"lightPurple"},markdownLink:{dark:"darkStep9",light:"lightStep9"},markdownLinkText:{dark:"darkCyan",light:"lightCyan"},markdownCode:{dark:"darkGreen",light:"lightGreen"},markdownBlockQuote:{dark:"darkYellow",light:"lightYellow"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkOrange",light:"lightOrange"},markdownHorizontalRule:{dark:"darkStep11",light:"lightStep11"},markdownListItem:{dark:"darkStep9",light:"lightStep9"},markdownListEnumeration:{dark:"darkCyan",light:"lightCyan"},markdownImage:{dark:"darkStep9",light:"lightStep9"},markdownImageText:{dark:"darkCyan",light:"lightCyan"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},syntaxComment:{dark:"darkStep11",light:"lightStep11"},syntaxKeyword:{dark:"darkPurple",light:"lightPurple"},syntaxFunction:{dark:"darkStep9",light:"lightStep9"},syntaxVariable:{dark:"darkRed",light:"lightRed"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkYellow",light:"lightYellow"},syntaxOperator:{dark:"darkCyan",light:"lightCyan"},syntaxPunctuation:{dark:"darkStep12",light:"lightStep12"}}}});function TB(f,J,Y=[]){if(J===void 0)return null;if(typeof J!=="string")return TB(f,J.dark,Y);if(J==="transparent"||J==="none")return null;if(J.startsWith("#"))return J;if(Y.includes(J))return null;let z=f.defs?.[J]??f.theme[J];return TB(f,z,[...Y,J])}function IB(f){return Math.max(0,Math.min(255,Math.round(f)))}function WX(f,J,Y){let z=Number.parseInt(f.slice(1),16),G=Number.parseInt(J.slice(1),16),X=(Q,H)=>Q>>H&255;return`#${(IB(X(z,16)+(X(G,16)-X(z,16))*Y)<<16|IB(X(z,8)+(X(G,8)-X(z,8))*Y)<<8|IB(X(z,0)+(X(G,0)-X(z,0))*Y)).toString(16).padStart(6,"0")}`}function Wg(f){let J=(Q)=>TB(f,f.theme[Q]),Y=J("background"),z=J("text");if(!Y||!z)return null;let G=J("textMuted")??WX(z,Y,0.35),X=J("primary")??z,q=J("border")??WX(z,Y,0.8);return{bg:Y,surface:J("backgroundPanel")??Y,inset:J("backgroundElement")??Y,menu:J("backgroundMenu")??J("backgroundElement")??Y,line:q,"line-subtle":J("borderSubtle")??q,"line-active":J("borderActive")??WX(q,z,0.3),fg:z,muted:G,subtle:WX(G,Y,0.35),primary:X,"primary-hover":WX(X,z,0.35),"kobe-orange":X,"kobe-green":J("success")??z,"kobe-blue":J("info")??z,"kobe-red":J("error")??z,"kobe-yellow":J("warning")??z,"kobe-violet":J("secondary")??X}}function O7(f,J){if(J.pathname!==Kg)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:Vg})}var jg,Vg,Kg="/api/themes";var A7=k(()=>{Qq();Hq();Bq();jq();Wq();Vq();Kq();jg={claude:sz,conductor:tz,dracula:ez,nord:fG,opencode:JG,"osaka-jade":YG,tokyonight:zG};Vg=Object.fromEntries(Object.entries(jg).map(([f,J])=>[f,Wg(J)]).filter((f)=>f[1]!==null))});import{createHash as Ug,randomUUID as Dg}from"crypto";import{mkdir as Lg}from"fs/promises";import{join as uB,resolve as Mg}from"path";function Ag(f){return Ug("sha1").update(f).digest("hex").slice(0,16)}async function Cg(f){let J=Number.parseInt(f.headers.get("content-length")??"",10);if(Number.isFinite(J)&&J>g7)return Response.json({error:"asset too large"},{status:413});let Y;try{Y=await f.formData()}catch{return Response.json({error:"invalid form data"},{status:400})}let z=Y.get("repoRoot");if(typeof z!=="string"||z.length===0)return Response.json({error:"missing repoRoot"},{status:400});let G=Y.get("file");if(!(G instanceof File))return Response.json({error:"file must be a File"},{status:400});if(G.size>g7)return Response.json({error:"asset too large"},{status:413});let X=Fg[G.type];if(!X)return Response.json({error:`unsupported content-type: ${G.type||"unknown"}`},{status:415});try{let q=Ag(z),Q=uB(cQ(),q);await Lg(Q,{recursive:!0});let B=`${Dg()}.${X}`;return await Bun.write(uB(Q,B),G),Response.json({url:`${Uq}/${q}/${B}`})}catch(q){return Response.json({error:q instanceof Error?q.message:String(q)},{status:500})}}async function kg(f){let J=f.slice(Uq.length+1),Y=J.indexOf("/");if(Y<0)return Response.json({error:"not found"},{status:404});let z=J.slice(0,Y),G=J.slice(Y+1);if(!gg.test(z)||!Rg.test(G))return Response.json({error:"invalid asset path"},{status:400});let X=cQ(),q=Mg(X,z,G);if(q!==uB(X,z,G)||!q.startsWith(`${X}/`))return Response.json({error:"invalid asset path"},{status:400});let Q=G.slice(G.lastIndexOf(".")+1).toLowerCase(),H=Og[Q];if(!H)return Response.json({error:"invalid asset path"},{status:400});let B=Bun.file(q);if(!await B.exists())return Response.json({error:"not found"},{status:404});return new Response(B,{headers:{"content-type":H,"cache-control":"public, max-age=31536000, immutable","x-content-type-options":"nosniff"}})}async function R7(f,J){if(J.pathname===Uq){if(f.method==="POST")return Cg(f);return Response.json({error:"method not allowed"},{status:405})}if(J.pathname.startsWith(`${Uq}/`)){if(f.method==="GET")return kg(J.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var Uq="/api/issue-assets",g7=10485760,Fg,Og,gg,Rg;var C7=k(()=>{lf();Fg={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},Og={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};gg=/^[a-f0-9]{16}$/,Rg=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function k7(f,J=500){return Response.json({error:f instanceof Error?f.message:String(f)},{status:J})}function N7(f){let J=f instanceof Error?f.message:String(f);if(/^no issue #\d+$/.test(J))return 404;if(J==="repoRoot is required"||J==="repoRoot does not exist"||J==="repoRoot is not a git repository"||J==="missing op"||J==="create requires a non-empty title"||J==="body must be a string"||J==="setStatus requires a numeric id"||J.startsWith("invalid status:")||J==="update requires a numeric id"||J==="title must be a non-empty string"||J==="link requires a numeric id"||J==="link requires a non-empty taskId"||J==="unlink requires a numeric id"||J==="delete requires a numeric id"||J.startsWith("unknown op type:"))return 400;return 500}async function Ng(f,J){let Y=J.searchParams.get("repoRoot");if(!Y)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await f.request("issue.list",{repoRoot:Y}))}catch(z){return k7(z,N7(z))}}async function yg(f,J){let Y;try{Y=await J.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(Y===null||typeof Y!=="object"||Array.isArray(Y))return Response.json({error:"body must be a JSON object"},{status:400});let z=Y;if(typeof z.repoRoot!=="string"||z.repoRoot.length===0)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await f.request("issue.mutate",{repoRoot:z.repoRoot,op:z.op}))}catch(G){return k7(G,N7(G))}}async function y7(f,J,Y){if(J.pathname!=="/api/issues")return null;if(f.method==="GET")return Ng(Y,J);if(f.method==="POST")return yg(Y,f);return Response.json({error:"method not allowed"},{status:405})}function b7(f){return bg.has(String(f??"").trim().toLowerCase())}function S7(f){try{if(!f)return null;let J=new URL(f);if(J.protocol!=="http:"&&J.protocol!=="https:")return null;return J.hostname}catch{return null}}function Sg(f){let J=S7(f);return J!==null&&b7(J)}function I7(f,J={}){if(!f)return!0;if(Sg(f))return!0;let Y=J.allowedHost?.trim();if(!Y)return!1;let z=S7(f);return z!==null&&z===Y}function T7(f){let J=String(f??"").trim();return J&&!b7(J)?J:void 0}var bg;var u7=k(()=>{bg=new Set(["localhost","127.0.0.1","::1","[::1]"])});var Ig,E7;var x7=k(()=>{Ig=["daemon.status","task.list","task.get","task.create","task.archive","task.rename","task.setBranch","task.setVendor","task.delete","task.pin","task.move","task.status","task.reorder","task.ensureMain","task.ensureWorktree","task.setActive","worktree.discoverAdoptable","worktree.adopt"],E7=new Set(Ig)});var EB={};jf(EB,{resolveRepoInit:()=>P7,resolveEngineLaunchInit:()=>oJ});import{existsSync as h7,readFileSync as Tg}from"fs";import{join as Dq}from"path";function Eg(f){return h7(Dq(f,w7))?`sh ${w7}`:void 0}function xg(f){let J=Dq(f,ug);if(!h7(J))return;try{let Y=Tg(J,"utf8");return Y.trim().length>0?Y:void 0}catch{return}}function P7(f,J){let Y=f?tQ(f):{},z=Eg(J)??Y.initScript,G=xg(J)??Y.initPrompt;return{initScript:z&&z.trim().length>0?z:void 0,initPrompt:G&&G.trim().length>0?G:void 0}}function wg(f,J){if(f.kind==="none")return;if(f.kind==="explicit")return{source:"explicit",text:f.prompt};let Y=J.initPrompt?.trim();return Y?{source:"repo-init",text:Y}:void 0}function oJ(f,J,Y={kind:"repo-init"}){let z=P7(f,J);return{initScript:z.initScript,firstMessage:wg(Y,z)}}var w7,ug;var GG=k(()=>{gf();w7=Dq(".kobe","init.sh"),ug=Dq(".kobe","init-prompt.md")});import{existsSync as v7,readFileSync as hg}from"fs";function m7(){Mz=null}function Pg(){let f=G9();if(v7(f))return{canonical:f,found:f};let J=f.replace(/\.yaml$/,".yml");if(v7(J))return{canonical:f,found:J};return{canonical:f,found:null}}function Lq(){if(Mz)return Mz;let{canonical:f,found:J}=Pg();if(!J)return Mz={path:f,exists:!1,doc:null,warnings:[]},Mz;let Y=[],z=null;try{let G=hg(J,"utf8");z=Bun.YAML.parse(G)}catch(G){let X=G instanceof Error?G.message:String(G);Y.push(`could not read/parse ${J}: ${X}`)}return Mz={path:f,exists:!0,doc:z,warnings:Y},Mz}var Mz=null;var xB=k(()=>{lf()});function XG(f,J){let Y=`alternating [${f}, ${J}] pairs`;return{layout:Y,validateCount:(z)=>z>=2&&z%2===0?null:`needs ${Y} (an even number of chords \u2014 got ${z})`}}function lg(f,J){let Y=f.trim().toLowerCase();if(!Y)return{error:"empty chord"};let z=Y.split("+"),G=z.pop()??"";if(G===""&&z.length>0){if(G="+",z[z.length-1]==="")z.pop()}if(!G)return{error:`"${f}": no key after the modifiers`};let X=new Set;for(let H of z){let B=cg[H];if(!B)return{error:`"${f}": unknown modifier "${H}" (use ctrl / cmd / alt / shift)`};X.add(B)}if(G=ng[G]??G,X.has("shift")&&G.length===1&&!J?.allowShiftCharacter)return{error:`"${f}": shift+<character> can never match \u2014 terminals deliver shift+letter as a plain character, not a modifier event`};let q=ig.filter((H)=>X.has(H)).join("+"),Q=q?`${q}+${G}`:G;if(G.length>1&&!dg.has(G))return{chord:Q,warning:`"${f}": unrecognized key name "${G}" \u2014 the chord may never fire`};return{chord:Q}}function Mq(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function ag(f){if(f==="darwin")return["darwin","macos","mac"];if(f==="win32")return["win32","windows"];return[f]}function $g(f){if(!Mq(f))return null;let J=f.bindings;if(Mq(J))return J;return f}function Fq(f,J,Y){let z=[];if(f===null||f===void 0)return{entries:[],warnings:z};if(!Mq(f))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let G=new Map,X=[];if(f.bindings!==void 0)if(Mq(f.bindings))X.push(f.bindings);else z.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let q of ag(J)){let Q=f[q];if(Q===void 0)continue;let H=$g(Q);if(H)X.push(H);else z.push(`\`${q}:\` must be a mapping (or contain a \`bindings:\` mapping)`)}for(let q of X)for(let[Q,H]of Object.entries(q)){if(H===null||H===!1||Array.isArray(H)&&H.length===0){G.set(Q,[]);continue}let B=typeof H==="string"?[H]:Array.isArray(H)?H:null;if(!B){z.push(`${Q}: expected a chord string, a list of chords, or null \u2014 got ${typeof H}`);continue}let V=[],j=!1;for(let U of B){if(typeof U!=="string"){z.push(`${Q}: chord entries must be strings`),j=!0;continue}let L=lg(U,Y?.chordOptsFor?.(Q));if("error"in L){z.push(`${Q}: ${L.error}`),j=!0;continue}if(L.warning)z.push(`${Q}: ${L.warning}`);if(!V.includes(L.chord))V.push(L.chord)}if(V.length===0&&j){z.push(`${Q}: no valid chords \u2014 keeping the default`);continue}G.set(Q,V)}return{entries:Array.from(G,([q,Q])=>({id:q,keys:Q})),warnings:z}}function rg(f,J){return f===J||f==="global"||J==="global"}function c7(f,J){let Y=[],z=[];for(let G of J){let X=f.find((j)=>j.id===G.id);if(!X){Y.push(`${G.id}: unknown binding id (press F1 in kobe for the full list)`);continue}let q=wB[G.id];if(q){Y.push(`${G.id}: not customizable \u2014 ${q}`);continue}if(X.keys.length===0){Y.push(`${G.id}: not customizable \u2014 the key is handled outside the keymap (doc-only row)`);continue}let Q=vg[G.id];if(Q&&G.keys.length>0){let j=Q.validateCount(G.keys.length);if(j){Y.push(`${G.id}: ${j} \u2014 keeping the default`);continue}}let H=G.keys.filter((j)=>{if(j.length===1&&mg.has(X.scope))return Y.push(`${G.id}: "${j}" dropped \u2014 a bare character on a ${X.scope}-scope binding would steal typed input (add a modifier)`),!1;return!0});if(H.length===0&&G.keys.length>0){Y.push(`${G.id}: no chords survived validation \u2014 keeping the default`);continue}if(Q&&H.length!==G.keys.length){Y.push(`${G.id}: a dropped chord would shift the slot layout (${Q.layout}) \u2014 keeping the default`);continue}let B=X.keys,V=X;if(V.keys=H,X.hint)if(H.length===0)V.hint=void 0;else X.hint.keys=H.join("/");z.push({id:G.id,keys:H,defaultKeys:B})}for(let G of z)for(let X of G.keys){let q=f.find((Q)=>Q.id===G.id);if(!q)continue;for(let Q of f){if(Q.id===G.id)continue;if(!Q.keys.includes(X))continue;if(!rg(q.scope,Q.scope))continue;Y.push(`${G.id}: "${X}" also fires ${Q.id} (${Q.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:z,warnings:Y}}var wB,vg,mg,cg,ng,dg,ig;var Oq=k(()=>{wB={"focus.numeric":"pane focus is positional (h/j/k/l \u2192 pane) and mirrors the tmux-layer ctrl+hjkl bindings \u2014 rebind tmux.focus instead","sidebar.goto":"gg vs Shift+G is discriminated via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't carry both halves","sidebar.pin":"fires on Shift+P via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't work","sidebar.localMerge":"fires on Shift+M via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't work","chat.question.nav":"the question picker has no live registration site (display-only row) \u2014 rebinding would change Help without changing behavior","chat.question.pick-number":"digits map to options positionally and the question picker has no live registration site (display-only row)"};vg={"sidebar.nav":XG("down","up"),"files.nav":XG("down","up"),"sidebar.search.nav":XG("down","up"),"files.hierarchy":XG("collapse","expand"),"sidebar.view":XG("previous view","next view"),"files.tab":XG("previous tab","next tab")},mg=new Set(["global","workspace","terminal"]),cg={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},ng={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},dg=new Set(["up","down","left","right","pageup","pagedown","home","end","insert","delete","backspace","tab","space","escape","enter","return",...Array.from({length:12},(f,J)=>`f${J+1}`)]),ig=["ctrl","cmd","alt","shift"]});function ZG(f){return f in n7}function Az(f,J){let Y=f.split("+"),z=Y.pop()??"";if(z===""&&Y.length>0){if(z="+",Y[Y.length-1]==="")Y.pop()}let G=new Set(Y);if(G.has("cmd"))return{error:`"${f}": the Command key never reaches tmux \u2014 use ctrl/alt/shift`};let X;if(z.length===1)X=G.has("shift")?z.toUpperCase():z;else{let H=_g[z];if(!H)return{error:`"${f}": tmux can't bind the key "${z}"`};X=H}let q=/^f\d+$/.test(z);if(G.size===0&&!q&&!J?.allowBare)return{error:`"${f}": tmux session keys are no-prefix root bindings live in every pane \u2014 a bare key would shadow typing (add a modifier, or use an F-key)`};let Q="";if(G.has("ctrl"))Q+="C-";if(G.has("alt"))Q+="M-";if(G.has("shift"))Q+="S-";return{key:Q+X}}function i7(){let f={};for(let[Y,z]of Object.entries(Oz)){let G=Az(z,{allowBare:ZG(Y)});if("error"in G)throw Error(`default tmux chord for ${Y} failed to translate: ${G.error}`);f[Y]={chord:z,key:G.key}}let J=yY.map((Y)=>{let z=Az(Y);if("error"in z)throw Error(`default tmux focus chord ${Y} failed to translate`);return{chord:Y,key:z.key}});return{binds:f,focus:J,overridden:new Set,warnings:[]}}function hB(f){let J=i7(),Y=new Set;for(let z of f){if(!z.id.startsWith("tmux."))continue;if(z.id===SJ){if(z.keys.length===0){J.focus=[null,null,null,null],Y.add(SJ);continue}if(z.keys.length!==yY.length){J.warnings.push(`${SJ}: needs exactly 4 chords in order left/down/up/right (got ${z.keys.length}) \u2014 keeping the default`);continue}let Q=[],H=!0;for(let B of z.keys){let V=Az(B);if("error"in V){J.warnings.push(`${SJ}: ${V.error} \u2014 keeping the default`),H=!1;break}Q.push({chord:B,key:V.key})}if(!H)continue;J.focus=Q,Y.add(SJ);continue}if(!(z.id in Oz)){J.warnings.push(`${z.id}: unknown tmux binding id`);continue}let G=z.id;if(z.keys.length===0){J.binds[G]=null,Y.add(G);continue}if(z.keys.length>1)J.warnings.push(`${G}: tmux bindings take ONE chord \u2014 using "${z.keys[0]}", ignoring the rest`);let X=z.keys[0],q=Az(X,{allowBare:ZG(G)});if("error"in q){J.warnings.push(`${G}: ${q.error} \u2014 keeping the default`);continue}if(X!==Oz[G])Y.add(G);J.binds[G]={chord:X,key:q.key}}return J.overridden=Y,J}function PB(f){return f.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function l7(){Fz=null}function Aq(){if(Fz)return Fz;let f=Lq();if(!f.exists||f.doc===null)return Fz=i7(),Fz;let J=Fq(f.doc,process.platform,{chordOptsFor:PB}),Y=J.warnings.filter((G)=>G.startsWith("tmux.")),z=hB(J.entries);z.warnings=[...Y,...z.warnings];for(let G of z.warnings)console.warn(`[kobe/keybindings] ${G}`);return Fz=z,Fz}var pg,n7,d7,Oz,SJ="tmux.focus",yY,_g,Fz=null;var gq=k(()=>{xB();Oq();pg={"tmux.detach":"ctrl+q","tmux.tab.new":"ctrl+t","tmux.tab.chooseEngine":"ctrl+shift+t","tmux.tab.prev":"ctrl+[","tmux.tab.next":"ctrl+]","tmux.tab.close":"ctrl+w","tmux.tab.rename":"f2"},n7={"tmux.layout.workspaceSplit":"s","tmux.layout.workspaceClose":"x","tmux.layout.workspaceReset":"r","tmux.layout.tasksToggle":"a","tmux.layout.opsToggle":"o","tmux.layout.terminalToggle":"z","tmux.layout.zenToggle":"space"},d7=["F6","F7","F8","F9","F10","F11"],Oz={...pg,...n7};yY=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],_g={up:"Up",down:"Down",left:"Left",right:"Right",pageup:"PgUp",pagedown:"PgDn",home:"Home",end:"End",insert:"IC",delete:"DC",backspace:"BSpace",tab:"Tab",space:"Space",escape:"Escape",enter:"Enter",return:"Enter",...Object.fromEntries(Array.from({length:12},(f,J)=>[`f${J+1}`,`F${J+1}`]))}});async function VX(f,J){let Y=null;for(let G=0;G<24;G++){let X=await $z(f);if(X){if(!J)return{pane:X,ready:!0};let q=(await rz(X)).trim();if(q.length>0&&q===Y)return{pane:X,ready:!0};Y=q}await a7(250)}return{pane:await $z(f)||await JB(f),ready:!1}}async function KX(f,J){let Y=`kobe-api-${f.replace(/[^A-Za-z0-9]/g,"")}`;await h0(["set-buffer","-b",Y,"--",J]),await h0(["paste-buffer","-p","-d","-b",Y,"-t",f]),await a7(og),await GX(f,"Enter")}async function $7(f,J){let{pane:Y}=await VX(f,!0);if(!Y)return;await KX(Y,J.text)}var a7=(f)=>new Promise((J)=>setTimeout(J,f)),og=150;var Rq=k(()=>{Tf()});function r7(f,J){if(f===null)return{kind:"create",reason:"no session with this name \u2014 build fresh"};let Y=f.worktree===J.cwd,z=!J.vendor||f.vendor===J.vendor;if(f.claudePaneAlive&&Y&&z)return{kind:"reuse",reason:"healthy: engine pane alive, worktree + vendor match"};if(Y&&!z&&J.hasEngineCommand)return{kind:"respawn-engine",reason:`vendor drift: session tagged ${f.vendor===""?"<untagged>":`"${f.vendor}"`}, task wants "${J.vendor}" \u2014 relaunch engine pane in place (KOB-232)`};if(Y&&z&&f.windowCount>1)return{kind:"reuse",reason:"active window's engine pane is gone but sibling chat tabs exist \u2014 reuse rather than drop them"};if(!Y)return{kind:"rebuild",reason:f.worktree===""?"legacy session with no @kobe_worktree tag \u2014 rebuild in the right place":`worktree drift: session tagged "${f.worktree}", task wants "${J.cwd}" \u2014 rebuild`};if(!z)return{kind:"rebuild",reason:"vendor drift but no engine command to respawn with \u2014 rebuild"};return{kind:"rebuild",reason:"single-window session whose engine pane was destroyed \u2014 rebuild"}}var p7;var _7=k(()=>{Qq();Hq();Bq();jq();Wq();Vq();Kq();p7={claude:sz,conductor:tz,nord:fG,opencode:JG,dracula:ez,tokyonight:zG,"osaka-jade":YG}});function sg(f){let J=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.exec(f);if(!J)return null;let Y=J[1];if(Y.length===3){let[z,G,X]=Y;return`#${z}${z}${G}${G}${X}${X}`.toLowerCase()}return`#${Y.slice(0,6)}`.toLowerCase()}function o7(f,J,Y="dark"){let z=f.defs??{};function G(q,Q){if(typeof q==="string"){if(q==="transparent"||q==="none")return null;if(q.startsWith("#"))return sg(q);if(Q.includes(q))return null;let B=z[q]??f.theme[q];if(B===void 0)return null;return G(B,[...Q,q])}if(!q||typeof q!=="object")return null;let H=q[Y];return typeof H==="string"?G(H,Q):null}let X=f.theme[J];if(X===void 0)return null;return G(X,[J])}function Cq(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function kq(f){if(!Cq(f))return{ok:!1,reason:"theme must be a JSON object at the top level"};let J=f;if(!("theme"in J))return{ok:!1,reason:"missing required key `theme`"};let Y=J.theme;if(!Cq(Y))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in J&&J.defs!==void 0){if(!Cq(J.defs))return{ok:!1,reason:"`defs` must be an object map"};for(let[z,G]of Object.entries(J.defs))if(typeof G!=="string")return{ok:!1,reason:`defs.${z} must be a string (hex like "#abc" or a ref name)`}}for(let[z,G]of Object.entries(Y)){if(typeof G==="string")continue;if(!Cq(G))return{ok:!1,reason:`theme.${z} must be a string or a { dark, light } object (got ${G===null?"null":Array.isArray(G)?"array":typeof G})`};let X=G;if(typeof X.dark!=="string")return{ok:!1,reason:`theme.${z}.dark must be a string`};if(typeof X.light!=="string")return{ok:!1,reason:`theme.${z}.light must be a string`}}if("$schema"in J&&J.$schema!==void 0&&typeof J.$schema!=="string")return{ok:!1,reason:"`$schema` must be a string when present"};return{ok:!0,theme:J}}var vB=()=>{};import{readFileSync as tg,readdirSync as eg}from"fs";import{join as s7}from"path";function qG(){return s7(ef(),"themes")}function UX(){let f=qG(),J;try{J=eg(f)}catch{return[]}let Y=[];for(let z of J){if(!z.endsWith(".json"))continue;let G=s7(f,z),X;try{let H=tg(G,"utf8");X=JSON.parse(H)}catch(H){let B=H instanceof Error?H.message:String(H);console.warn(`[kobe] skipping user theme ${G}: invalid JSON \u2014 ${B}`);continue}let q=kq(X);if(!q.ok){console.warn(`[kobe] skipping user theme ${G}: ${q.reason}`);continue}let Q=z.slice(0,-5);Y.push({name:Q,theme:q.theme})}return Y}var Nq=k(()=>{lf();vB()});import{readFileSync as fR}from"fs";function YR(){try{let f=JSON.parse(fR(m1(),"utf8")),J=typeof f.activeTheme==="string"&&f.activeTheme?f.activeTheme:"claude",Y=typeof f.focusAccent==="string"&&JR.includes(f.focusAccent)?f.focusAccent:"primary";return{themeName:J,focusAccentSlot:Y,enabled:f.tmuxChromeTheme!=="off"&&f.tmuxBorderTheme!=="off"}}catch{return{themeName:"claude",focusAccentSlot:"primary",enabled:!0}}}function zR(f){return UX().find((Y)=>Y.name===f)?.theme??p7[f]??null}function VJ(f,...J){for(let Y of J){let z=o7(f,Y);if(z)return z}return null}function t7(f,J){let Y=VJ(f,"text"),z=VJ(f,"background"),G=VJ(f,"textMuted","text"),X=VJ(f,"backgroundPanel","background"),q=VJ(f,"backgroundElement","backgroundPanel","background"),Q=VJ(f,"backgroundMenu","backgroundElement","backgroundPanel","background"),H=VJ(f,"selectedListItemText","background"),B=VJ(f,J,"primary","borderActive","border","text");return{border:VJ(f,"border","text"),activeBorder:B,statusBg:X,statusFg:G,statusMutedFg:G,windowFg:G,currentWindowBg:q,currentWindowFg:B,activityFg:VJ(f,"info","primary","text"),bellFg:VJ(f,"warning","error","primary","text"),messageBg:Q,messageFg:Y,messageCommandFg:B,modeBg:B,modeFg:H??z}}function $1(f){let J=[];if(f.bg)J.push(`bg=${f.bg}`);if(f.fg)J.push(`fg=${f.fg}`);if(J.length===0)return null;if(f.attrs)J.push(...f.attrs);return J.join(",")}function f5(f){let J=$1({bg:f.statusBg,fg:f.statusFg}),Y=$1({bg:f.statusBg,fg:f.statusMutedFg}),z=$1({bg:f.statusBg,fg:f.windowFg});return[{key:"border",option:"pane-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:$1({fg:f.border})},{key:"active",option:"pane-active-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:$1({fg:f.activeBorder})},{key:"status",option:"status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:J},{key:"status-left",option:"status-left-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Y},{key:"status-right",option:"status-right-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Y},{key:"window",option:"window-status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:z},{key:"current-window",option:"window-status-current-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.currentWindowBg,fg:f.currentWindowFg,attrs:["bold"]})},{key:"activity-window",option:"window-status-activity-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.statusBg,fg:f.activityFg})},{key:"bell-window",option:"window-status-bell-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.statusBg,fg:f.bellFg,attrs:["bold"]})},{key:"last-window",option:"window-status-last-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.statusBg,fg:f.statusFg})},{key:"message",option:"message-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.messageBg,fg:f.messageFg})},{key:"message-command",option:"message-command-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.messageBg,fg:f.messageCommandFg,attrs:["bold"]})},{key:"mode",option:"mode-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.modeBg,fg:f.modeFg})},{key:"display-panes",option:"display-panes-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:f.border},{key:"display-panes-active",option:"display-panes-active-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:f.activeBorder}]}function GR(f){let J=new Set(f.marker.split(",").map((X)=>X.trim()).filter(Boolean)),Y=[],z=[];for(let X of f5(f.hexes))if(X.value){if((f.current[X.key]??"")!==X.value)Y.push(["set-option",X.setFlag,X.option,X.value]);z.push(X.key)}else if(J.has(X.key))Y.push(["set-option",X.unsetFlag,X.option]);let G=z.join(",");if(G!==f.marker)Y.push(G?["set-option","-g",mB,G]:["set-option","-gu",mB]);return Y}async function e7(f){let{code:J,stdout:Y}=await d0(f);return J===0?Y.trim():""}async function gz(){try{let f=YR(),J=f.enabled?zR(f.themeName):null,Y=J?t7(J,f.focusAccentSlot):t7({theme:{}},f.focusAccentSlot),z=f5(Y),[G,...X]=await Promise.all([e7(["show-options","-gqv",mB]),...z.map((H)=>e7(["show-options",H.showFlag,H.option]))]),q=Object.fromEntries(z.map((H,B)=>[H.key,X[B]??""])),Q=GR({marker:G,current:q,hexes:Y});if(Q.length>0)await Pf(Q)}catch{}}var mB="@kobe_border_theme",JR;var yq=k(()=>{lf();Tf();_7();Nq();JR=["primary","success","info"]});function J5(){return nf()[bq]!==!1}var bq="zen.keepTasks";var cB=k(()=>{pY()});var Sq={};jf(Sq,{recordGen:()=>bY,isLatestGen:()=>Z5,genAgeMs:()=>jR,coalesceLayoutWork:()=>WR,RESIZE_GUARD_MS:()=>BR,LAYOUT_COALESCE_MS:()=>G5});import{createHash as XR,randomUUID as ZR}from"crypto";import{mkdirSync as qR,readFileSync as Y5,renameSync as QR,writeFileSync as HR}from"fs";import{join as z5}from"path";function X5(){return z5(ef(),"layout-coord")}function nB(f,J){let Y=XR("sha1").update(f).digest("hex").slice(0,16);return z5(X5(),`${Y}.${J}`)}function bY(f,J){let Y=ZR();try{qR(X5(),{recursive:!0});let z=nB(f,J),G=`${z}.${Y}.tmp`;HR(G,`${Date.now()}
58
- ${Y}`),QR(G,z)}catch{}return Y}function Z5(f,J,Y){try{return Y5(nB(f,J),"utf8").split(`
59
- `)[1]?.trim()===Y}catch{return!0}}function jR(f,J,Y=Date.now()){try{let z=Number.parseInt(Y5(nB(f,J),"utf8").split(`
60
- `)[0]??"",10);return Number.isFinite(z)?Y-z:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function WR(f,J,Y,z=G5){let G=bY(f,J);if(z>0)await new Promise((X)=>setTimeout(X,z));if(!Z5(f,J,G))return;await Y()}var G5=120,BR=400;var QG=k(()=>{lf()});function KR(f){let J=[];for(let Y of f.split(`
61
- `)){let z=Y.trim();if(!z)continue;let[G,X,q,Q,H]=z.split("\t");if(!G||!X||!q)continue;let B=Number.parseInt(H?.trim()??"",10);J.push({windowId:G.trim(),paneId:X.trim(),role:q.trim(),version:Q?.trim()??"",...Number.isFinite(B)?{paneWidth:B}:{}})}return J}function q5(f,J){let Y=new Map;for(let G of f){let X=Y.get(G.windowId)??[];X.push(G),Y.set(G.windowId,X)}let z=[];for(let G of Y.values()){let X=G.find((B)=>B.role==="claude")?.paneId,q=G.find((B)=>B.role==="tasks"),Q=G.find((B)=>B.role==="ops");if(q&&(J.force||q.version!==J.currentVersion))z.push({role:"tasks",paneId:q.paneId});let H=J.force?!0:X&&(J.vendorChanged||Q?.version!==J.currentVersion);if(Q&&H)z.push({role:"ops",paneId:Q.paneId,claudePaneId:X??null})}return z}async function dB(f){let{code:J,stdout:Y}=await d0(["list-panes","-s","-t",`=${f}`,"-F",VR]);if(J!==0)return null;return KR(Y)}function Q5(f,J){let Y=Cf(),z=_f(),G=[];for(let X of f){let q=X.role==="tasks"?DY(Y,{initialTaskId:J.taskId}):nz({cwd:J.cwd,taskId:J.taskId,claudePaneId:X.claudePaneId,cliInvocation:Y,vendor:J.vendor});G.push(["respawn-pane","-k","-t",X.paneId,"-c",If(J.cwd),R1(z+q)],["set-option","-p","-t",X.paneId,"@kobe_role",X.role],["set-option","-p","-t",X.paneId,KJ,s0])}return G}async function H5(f,J,Y,z,G){let X=await dB(f);if(!X)return!1;let q=X.filter((B)=>B.role==="claude");if(q.length===0)return!1;let Q=If(J),H=[];for(let B of q){let V=pz(Y,G),j=R1(iz(g1(V.argv),z,J));H.push(["respawn-pane","-k","-c",Q,"-t",B.paneId,j]),H.push(V.sessionId?["set-window-option","-t",B.paneId,yJ,V.sessionId]:["set-window-option","-u","-t",B.paneId,yJ])}return await Pf(H),!0}async function B5(){let f=await OY([aJ,Gz,$J]),J=Number.parseInt(f[aJ]??"",10),Y=Number.isFinite(J)&&J>0?zz(J):Jz,z=UR({widthPct:rJ(Number.parseInt(f[Gz]??"",10)),heightPct:rJ(Number.parseInt(f[$J]??"",10))});return{tasksWidth:Y,rcArgs:z}}function UR(f){let J=[];if(f.widthPct!==null)J.push("-x",`${f.widthPct}%`);if(f.heightPct!==null)J.push("-y",`${f.heightPct}%`);return J}async function j5(){return(await B5()).rcArgs}async function iB(f,J={}){let{tasksWidth:Y,rcArgs:z}=await B5(),G=await dB(f);if(!G)return{rows:null,commands:[]};let X=[];for(let q of G)if(q.role==="tasks"&&(J.force||q.paneWidth!==Y))X.push(["resize-pane","-t",q.paneId,"-x",`${Y}`]);if(z.length>0){for(let q of G)if(q.role==="ops")X.push(["resize-pane","-t",q.paneId,...z])}return{rows:G,commands:X}}async function HG(f,J){bY(f,"resize");let{rows:Y,commands:z}=await iB(f);if(!Y)return;let G=[...z];if(J)G.push(...Q5(q5(Y,{currentVersion:s0,force:!1,vendorChanged:J.vendorChanged}),J));if(G.length>0)await Pf(G)}async function W5(f){if(!await Hf(f))return;await HG(f)}async function DX(f){let{code:J,stdout:Y}=await d0(["list-panes","-t",`=${f}`,"-F",`#{@kobe_role} #{pane_width} #{pane_height} #{window_width} #{window_height} #{window_zoomed_flag} #{${ZJ}} #{${A1}}`]);if(J!==0)return;let z=Y.split(`
62
- `).map((B)=>B.split("\t")).filter((B)=>(B[0]?.trim()??"")!=="");if(z.length===0)return;if(z.some((B)=>B[5]?.trim()==="1"))return;if(z.some((B)=>(B[6]?.trim()??"")!==""))return;if(z.some((B)=>(B[7]?.trim()??"")!==""))return;let G=Number.parseInt(z[0][3]?.trim()??"",10),X=Number.parseInt(z[0][4]?.trim()??"",10),q=[],Q=z.find(([B])=>B?.trim()==="tasks");if(Q){let B=Number.parseInt(Q[1]?.trim()??"",10);if(Number.isFinite(B)&&B>0)q.push(["set-option","-s",aJ,`${zz(B)}`])}let H=z.find(([B])=>B?.trim()==="ops");if(H&&Number.isFinite(G)&&G>0&&Number.isFinite(X)&&X>0){let B=Number.parseInt(H[1]?.trim()??"",10),V=Number.parseInt(H[2]?.trim()??"",10),j=Number.isFinite(B)?rJ(100*B/G):null,U=Number.isFinite(V)?rJ(100*V/X):null;if(j!==null)q.push(["set-option","-s",Gz,`${j}`]);if(U!==null)q.push(["set-option","-s",$J,`${U}`])}if(q.length>0)await Pf(q)}function DR(f){let J=f.split(`
63
- `).map((z)=>z.split("\t")).filter((z)=>(z[0]?.trim()??"")!=="");if(J.length===0)return!1;if(J.some((z)=>z[1]?.trim()==="1"))return!1;if(J.some((z)=>(z[2]?.trim()??"")!==""))return!1;if(J.some((z)=>(z[3]?.trim()??"")!==""))return!1;let Y=new Set(J.map((z)=>z[0]?.trim()));return Y.has("tasks")&&Y.has("ops")}async function V5(f){let{code:J,stdout:Y}=await d0(["list-panes","-t",`=${f}`,"-F",`#{@kobe_role} #{window_zoomed_flag} #{${ZJ}} #{${A1}}`]);if(J!==0||!DR(Y))return;await DX(f)}async function BG(f){let J=await C1(f,["@kobe_worktree","@kobe_task","@kobe_vendor"]),Y=J["@kobe_worktree"]||process.cwd(),z=J["@kobe_task"]||void 0,G=J["@kobe_vendor"]||void 0,X=await dB(f);if(!X)return;let q=Q5(q5(X,{currentVersion:s0,force:!0}),{cwd:Y,taskId:z,vendor:G});if(q.length>0)await Pf(q);await gz()}var KJ="@kobe_pane_version",VR;var LX=k(()=>{lJ();E1();e1();Tf();qJ();yq();U1();Qz();QG();VR=`#{window_id} #{pane_id} #{@kobe_role} #{${KJ}} #{pane_width}`});function MR(f){let J=[];for(let Y of f.split(`
64
- `)){let z=Y.trim();if(!z)continue;let[G,X,q,Q,H,B,V]=z.split("\t");if(!G)continue;let j=Number.parseInt(Q??"",10),U=Number.parseInt(H??"",10),L=Number.parseInt(B??"",10),O=Number.parseInt(V??"",10);J.push({paneId:G.trim(),role:X?.trim()??"",active:q?.trim()==="1",paneWidth:Number.isFinite(j)?j:0,paneHeight:Number.isFinite(U)?U:0,windowWidth:Number.isFinite(L)?L:0,windowHeight:Number.isFinite(O)?O:0})}return J}function FR(f){let J=f.find((z)=>z.role===Yz);if(!J)return{kind:"missing-engine"};let Y=f.filter((z)=>z.role===_G);if(Y.length+1>=uH)return{kind:"maxed"};if(Y.length===0)return{kind:"split",targetPane:J.paneId,direction:"-h"};if(Y.length===1)return{kind:"split",targetPane:Y[0]?.paneId??J.paneId,direction:"-v"};return{kind:"split",targetPane:J.paneId,direction:"-v"}}function lB(f){return f.find((J)=>J.role===XJ)??f.find((J)=>J.role==="")}function OR(f){return 100-(rJ(f??Number.NaN)??tG)}function AR(f){let J=Number.parseInt(f??"",10);return Number.isFinite(J)&&J>0?J:void 0}async function w1(f,J){let Y=J?.trim()||`=${f}`,{code:z,stdout:G}=await d0(["list-panes","-t",Y,"-F",LR]);return z===0?MR(G):null}async function gR(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_active}\t#{window_id}"]);if(J!==0)return"";for(let z of Y.split(`
65
- `)){let[G,X]=z.split("\t");if(G?.trim()==="1"&&X?.trim())return X.trim()}return""}async function sJ(f,J){let{code:Y,stdout:z}=await d0(["show-options","-wqv","-t",f,J]);return Y===0?z.trim():""}async function aB(f,J,Y){await h0(["set-window-option","-t",f,J,Y])}async function SY(f,J){await h0(["set-window-option","-u","-t",f,J])}async function $B(f){let{code:J,stdout:Y}=await d0(["display-message","-p","-t",f,"#{pane_id}"]);return J===0&&Y.trim()===f}async function Nf(f,J){await h0(["display-message","-t",f,J])}async function Iq(f){let J=await C1(f,["@kobe_worktree","@kobe_task","@kobe_vendor"]);return{cwd:J["@kobe_worktree"]||process.cwd(),taskId:J["@kobe_task"]||void 0,vendor:J["@kobe_vendor"]||void 0}}function RR(f){let J=Cf(),Y=_f();return R1(Y+nz({cwd:f.cwd,taskId:f.taskId,claudePaneId:f.enginePaneId,cliInvocation:J,vendor:f.vendor}))}async function CR(f,J){return J?.trim()||await gR(f)}async function kR(f,J){let Y=await w1(f,J);if(!Y)return;let z=FR(Y);if(z.kind==="missing-engine"){await Nf(J,"kobe: no engine pane in this window");return}if(z.kind==="maxed"){await Nf(J,`kobe: workspace split limit is ${uH} panes`);return}let{cwd:G}=await Iq(f),{code:X,stdout:q}=await d0(["split-window",z.direction,"-t",z.targetPane,"-l","50%","-c",If(G),"-P","-F","#{pane_id}",R1("true")]),Q=q.trim();if(X!==0||!Q)return;await Pf([["set-option","-p","-t",Q,"@kobe_role",_G],["select-pane","-t",Q]])}async function NR(f,J){let Y=await w1(f,J);if(!Y)return;let z=Y.filter((q)=>q.role===_G);if(z.length===0){await Nf(J,"kobe: no workspace split to close");return}let X=z.find((q)=>q.active)??z[z.length-1];if(!X)return;await h0(["kill-pane","-t",X.paneId])}async function yR(f,J){let Y=await w1(f,J);if(!Y)return;let z=Y.filter((G)=>G.role===_G);if(z.length===0){await Nf(J,"kobe: no workspace splits to reset");return}await Pf(z.map((G)=>["kill-pane","-t",G.paneId]))}async function K5(){let f=await OY([aJ]);return zz(AR(f[aJ])??Jz)}async function bR(f){let{cwd:J,taskId:Y}=await Iq(f),z=Cf(),G=_f();return{cwd:J,command:R1(G+DY(z,{initialTaskId:Y}))}}async function U5(f,J){let Y=await w1(f,J);if(!Y)return;let z=Y.find((M)=>M.role===GJ);if(z){await h0(["kill-pane","-t",z.paneId]);return}let G=lB(Y),X=Y.find((M)=>M.role===Yz);if(!X){await Nf(J,"kobe: cannot restore file pane in this layout");return}let{cwd:q,taskId:Q,vendor:H}=await Iq(f),B=RR({cwd:q,taskId:Q,vendor:H,enginePaneId:X.paneId}),V=G?["split-window","-v","-b","-t",G.paneId,"-l",`${await SR()}%`,"-c",If(q),"-P","-F","#{pane_id}",B]:["split-window","-h","-t",X.paneId,"-l",`${await rB()}%`,"-c",If(q),"-P","-F","#{pane_id}",B],{code:j,stdout:U}=await d0(V),L=U.trim();if(j!==0||!L)return;let O=[["set-option","-p","-t",L,"@kobe_role",GJ],["set-option","-p","-t",L,KJ,s0]];if(G?.role==="")O.push(["set-option","-p","-t",G.paneId,"@kobe_role",XJ]);await Pf(O)}async function SR(){let f=await OY([$J]);return rJ(Number.parseInt(f[$J]??"",10))??tG}async function rB(){let f=await OY([Gz]);return rJ(Number.parseInt(f[Gz]??"",10))??100-PZ}async function D5(){let f=await OY([$J]);return OR(Number.parseInt(f[$J]??"",10))}async function IR(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_index}"]);if(J!==0)return new Set;return new Set(Y.split(`
66
- `).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)))}async function L5(f,J){let Y=await IR(f),z=oW(J);while(Y.has(z))z++;return z}async function M5(f){let J=sG(f);if(await Hf(J))return J;return await h0(["new-session","-d","-s",J,"-n","hidden-panes","-c",If(process.cwd()),"while :; do sleep 3600; done"]),J}async function pB(f){let J=sG(f);if(!await Hf(J))return;let{code:Y,stdout:z}=await d0(["list-panes","-s","-t",`=${J}`,"-F","#{@kobe_role}"]);if(Y!==0)return;if(!z.split(`
67
- `).some((X)=>{let q=X.trim();return q===XJ||q===i1}))await h0(["kill-session","-t",`=${J}`])}async function TR(f,J){await F5(f,J,ZJ)}async function uR(f,J){await F5(f,J,A1)}async function F5(f,J,Y){let z=await sJ(J,Y);if(!z)return;if(await $B(z))await h0(["kill-pane","-t",z]);await SY(J,Y)}async function ER(f,J){await TR(f,J),await uR(f,J),await pB(f)}function O5(f){return f.find((J)=>J.role===Yz)??f[0]}async function _B(f,J,Y){let z=O5(Y);if(!z)return await Nf(J,"kobe: cannot restore Tasks pane in this layout"),!1;let G=await K5(),{cwd:X,command:q}=await bR(f),{code:Q,stdout:H}=await d0(["split-window","-h","-b","-t",z.paneId,"-l",`${G}`,"-c",If(X),"-P","-F","#{pane_id}",q]),B=H.trim();if(Q!==0||!B)return!1;return await Pf([["set-option","-p","-t",B,"@kobe_role",i1],["set-option","-p","-t",B,KJ,s0],["select-pane","-t",B]]),await SY(J,A1),await Nf(J,"kobe: Tasks pane restored"),!0}async function A5(f,J,Y){let z=await M5(f),G=await L5(z,J),{code:X,stdout:q}=await d0(["break-pane","-d","-s",Y.paneId,"-t",`${z}:${G}`,"-P","-F","#{pane_id}"]),Q=q.trim()||Y.paneId;if(X!==0||!Q){await Nf(J,"kobe: could not hide Tasks pane");return}await aB(J,A1,Q),await Nf(J,"kobe: Tasks pane hidden")}async function oB(f,J,Y){let z=await w1(f,J);if(!z)return;if(!await $B(Y)){await SY(J,A1);let q=z.find((Q)=>Q.role===i1);if(q){await h0(["select-pane","-t",q.paneId]);return}await _B(f,J,z);return}let G=O5(z);if(!G){await Nf(J,"kobe: cannot restore Tasks pane in this layout");return}if(await h0(["join-pane","-h","-b","-s",Y,"-t",G.paneId,"-l",`${await K5()}`])!==0){await Nf(J,"kobe: could not restore Tasks pane");return}await Pf([["set-option","-p","-t",Y,"@kobe_role",i1],["set-option","-p","-t",Y,KJ,s0],["select-pane","-t",Y]]),await SY(J,A1),await pB(f),await Nf(J,"kobe: Tasks pane restored")}async function xR(f,J){let Y=await sJ(J,A1);if(Y){await oB(f,J,Y);return}let z=await w1(f,J);if(!z)return;let G=z.find((X)=>X.role===i1);if(G){await A5(f,J,G);return}await _B(f,J,z)}async function wR(f,J){let Y=await sJ(J,A1);if(Y){await oB(f,J,Y);return}let z=await w1(f,J);if(!z)return;let G=z.find((X)=>X.role===i1);if(G){await h0(["select-pane","-t",G.paneId]);return}await _B(f,J,z)}async function g5(f,J,Y){if(Y.role==="")await h0(["set-option","-p","-t",Y.paneId,"@kobe_role",XJ]);let z=await M5(f),G=await L5(z,J),{code:X,stdout:q}=await d0(["break-pane","-d","-s",Y.paneId,"-t",`${z}:${G}`,"-P","-F","#{pane_id}"]),Q=q.trim()||Y.paneId;if(X!==0||!Q){await Nf(J,"kobe: could not hide terminal pane");return}await aB(J,ZJ,Q),await Nf(J,"kobe: Terminal pane hidden")}async function R5(f,J,Y){let z=Y.find((V)=>V.role===GJ),G=Y.find((V)=>V.role===Yz);if(!z&&!G)return await Nf(J,"kobe: cannot restore terminal pane in this layout"),!1;let{cwd:X}=await Iq(f),q=z?["split-window","-v","-t",z.paneId,"-l",`${await D5()}%`,"-c",If(X),"-P","-F","#{pane_id}"]:["split-window","-h","-t",G?.paneId??"","-l",`${await rB()}%`,"-c",If(X),"-P","-F","#{pane_id}"],{code:Q,stdout:H}=await d0(q),B=H.trim();if(Q!==0||!B)return!1;return await h0(["set-option","-p","-t",B,"@kobe_role",XJ]),await SY(J,ZJ),await Nf(J,"kobe: Terminal pane restored"),!0}async function C5(f,J,Y){let z=await w1(f,J);if(!z)return;if(!await $B(Y)){await SY(J,ZJ),await R5(f,J,z);return}let G=z.find((B)=>B.role===GJ),X=z.find((B)=>B.role===Yz);if(!G&&!X){await Nf(J,"kobe: cannot restore terminal pane in this layout");return}let q=G?["join-pane","-v","-s",Y,"-t",G.paneId,"-l",`${await D5()}%`]:["join-pane","-h","-s",Y,"-t",X?.paneId??"","-l",`${await rB()}%`];if(await h0(q)!==0){await Nf(J,"kobe: could not restore terminal pane");return}await h0(["set-option","-p","-t",Y,"@kobe_role",XJ]),await SY(J,ZJ),await pB(f),z=await w1(f,J);let H=z?.find((B)=>B.paneId===Y);if(H)await h0(["select-pane","-t",H.paneId]);await Nf(J,"kobe: Terminal pane restored")}async function hR(f,J){let Y=await sJ(J,ZJ);if(Y){await C5(f,J,Y);return}let z=await w1(f,J);if(!z)return;let G=lB(z);if(G){await g5(f,J,G);return}await R5(f,J,z)}async function PR(f){if((await Bz(f,oG)).length>0){await mR(f);return}await vR(f)}async function k5(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return[];return Y.split(`
68
- `).map((z)=>z.trim()).filter((z)=>z.length>0)}async function N5(f,J){return!!(await w1(f,J))?.some((z)=>z.role===Yz)}async function vR(f){let J=await k5(f);for(let Y of J){if(!await N5(f,Y))continue;if(await sJ(Y,UY))continue;await b5(f,Y)}await FY(f,oG,"1"),await Nf(`=${f}`,"kobe: Zen mode on \u2014 all tabs")}async function mR(f){let J=await k5(f);for(let Y of J){let z=await sJ(Y,UY);if(z)await cR(f,Y,z)}await h0(["set-option","-u","-t",f,oG]),await Nf(`=${f}`,"kobe: Zen mode off \u2014 all tabs")}async function y5(f,J){if((await Bz(f,oG)).length===0)return;if(await sJ(J,UY))return;if(!await N5(f,J))return;await b5(f,J)}async function b5(f,J){let Y=await w1(f,J);if(!Y)return;let z=[],G=Y.find((q)=>q.role===GJ);if(G)await h0(["kill-pane","-t",G.paneId]),z.push(GJ);let X=lB(Y);if(X)await g5(f,J,X),z.push(XJ);if(!J5()){let q=Y.find((Q)=>Q.role===i1);if(q)await A5(f,J,q),z.push(i1)}if(z.length===0){await Nf(J,"kobe: already focused \u2014 nothing to hide");return}await aB(J,UY,z.join(",")),await Nf(J,"kobe: Zen mode on")}async function cR(f,J,Y){let z=new Set(Y.split(",").map((G)=>G.trim()));if(z.has(i1)){let G=await sJ(J,A1);if(G)await oB(f,J,G)}if(z.has(GJ)){let G=await w1(f,J);if(G&&!G.some((X)=>X.role===GJ))await U5(f,J)}if(z.has(XJ)){let G=await sJ(J,ZJ);if(G)await C5(f,J,G)}await SY(J,UY),await Nf(J,"kobe: Zen mode off")}async function nR(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return 0;return Y.split(`
69
- `).filter((z)=>z.trim().length>0).length}async function dR(f,J){if(await nR(f)<=1){await Nf(J,"Cannot close the only ChatTab");return}await ER(f,J),await h0(["kill-window","-t",J])}async function Tq(f,J,Y={}){if(!await Hf(f))return;let z=await CR(f,Y.windowId);if(!z)return;switch(J){case"workspace-split":await kR(f,z);return;case"workspace-close":await NR(f,z);return;case"workspace-reset":await yR(f,z);return;case"tasks-toggle":await xR(f,z);return;case"tasks-restore":await wR(f,z);return;case"ops-toggle":await U5(f,z);return;case"terminal-toggle":await hR(f,z);return;case"zen-toggle":await PR(f);return;case"chat-tab-close":await dR(f,z);return}}var LR="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var uq=k(()=>{lJ();e1();cB();Tf();qJ();U1();Qz();LX()});function xq(f,J){return[["bind-key","-n",f,"if-shell","-F","#{?#{@kobe_surface},0,1}","previous-window"],["bind-key","-n",J,"if-shell","-F","#{?#{@kobe_surface},0,1}","next-window"]]}function wq(f,J="kill-window"){return["bind-key","-n",f,"if-shell","-F","#{>:#{session_windows},1}",J,"display-message 'Cannot close the only ChatTab'"]}function hq(f){return["bind-key","-n",f,"command-prompt","-I","#{window_name}","rename-window -- '%%'"]}function Pq(f){return[["bind-key","-n",f,"command-prompt","-p",Eq],["bind-key","T","command-prompt","-p",Eq]]}function sB(f){return f.startsWith("C-")&&f.length===3?`^${f.slice(2)}`:f}function vq(f){return`${[f.focusLeft?`${sB(f.focusLeft)} tasks`:null,f.detach?`${sB(f.detach)} detach`:null,f.newTab?`${sB(f.newTab)} tab`:null,f.layoutSplits?`prefix ${f.layoutSplits} splits`:null,f.layoutPanes?`prefix ${f.layoutPanes} panes`:null].filter((Y)=>Y!==null).join(" ")} `}async function eB(f,J){let Y=_f(),z=await aZ(),G=R1(J.opsCommand??Y+nz({cwd:J.cwd,taskId:J.taskId,claudePaneId:f,cliInvocation:J.inv,vendor:J.vendor})),{stdout:X}=await YX([["set-option","-p","-t",f,"@kobe_role","claude"],["set-window-option","-t",f,tB,"idle"],["split-window","-h","-b","-t",f,"-l",`${z}`,"-c",If(J.cwd),"-P","-F","tasks=#{pane_id}",R1(Y+DY(J.inv,{initialTaskId:J.taskId}))],["split-window","-h","-t",f,"-l",`${100-PZ}%`,"-c",If(J.cwd),"-P","-F","ops=#{pane_id}",G],["split-window","-v","-l",`${100-tG}%`,"-c",If(J.cwd),"-P","-F","shell=#{pane_id}"],["select-pane","-t",f]]),q=Object.fromEntries(X.split(`
70
- `).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>Q.split("=",2)));if(await Pf([...q.tasks?[["set-option","-p","-t",q.tasks,"@kobe_role",i1]]:[],...q.tasks?[["set-option","-p","-t",q.tasks,KJ,s0]]:[],...q.ops?[["set-option","-p","-t",q.ops,"@kobe_role",GJ]]:[],...q.ops?[["set-option","-p","-t",q.ops,KJ,s0]]:[],...q.shell?[["set-option","-p","-t",q.shell,"@kobe_role",XJ]]:[]]),q.ops){let Q=await j5();if(Q.length>0)await h0(["resize-pane","-t",q.ops,...Q])}}async function S5(f,J){if(!await Hf(f))return;let Y=await C1(f,["@kobe_worktree","@kobe_task","@kobe_vendor",JX]),z=Y["@kobe_worktree"]||process.cwd(),G=Y["@kobe_task"]||void 0,X=Y[JX]||void 0,q=J??Y["@kobe_vendor"];if(J)await iR(f,G,J);let Q=N1(q),H=pz(Q,q),B=Cf(),j=(await d0(["new-window","-t",`=${f}`,"-c",If(z),"-P","-F","#{pane_id}",R1(iz(g1(H.argv),X,z))])).stdout.trim();if(!j)return;if(H.sessionId)await AY(j,yJ,H.sessionId);await eB(j,{cwd:z,taskId:G,inv:B,vendor:q});let{stdout:U}=await d0(["display-message","-p","-t",j,"#{window_id}"]),L=U.trim();if(L)await y5(f,L)}async function cq(f){if(!await Hf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${_f()}${z.map(Xf).join(" ")} settings`;await HJ(f,{cwd:If(Y),command:X,name:"settings",surface:!0})}async function nq(f){if(!await Hf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${_f()}${z.map(Xf).join(" ")} help-page`;await HJ(f,{cwd:If(Y),command:X,name:"help",surface:!0})}async function dq(f,J){if(!await Hf(f))return;let z=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=Cf(),X=_f(),q=J?` --repo ${Xf(J)}`:"",Q=`${X}${G.map(Xf).join(" ")} new-task${q}`;await HJ(f,{cwd:If(z),command:Q,name:"new task",surface:!0})}async function iq(f){if(!await Hf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${_f()}${fV({cliInvocation:z})}`;await HJ(f,{cwd:If(Y),command:X,name:"update",surface:!0})}async function I5(f){if(!await Hf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${_f()}${z.map(Xf).join(" ")} quick-task --session ${Xf(f)}`;await HJ(f,{cwd:If(Y),command:X,name:"quick task",surface:!0})}async function iR(f,J,Y){if(await FY(f,"@kobe_vendor",Y),!J)return;try{let{connectOrStartDaemon:z}=await Promise.resolve().then(() => (y1(),Jj)),G=await z();try{await G.request("task.setVendor",{taskId:J,vendor:Y})}finally{G.close()}}catch(z){console.error("[kobe tmux] failed to persist selected engine vendor:",z)}}var Eq,tB="@kobe_tab_state",MX="#{?#{==:#{@kobe_tab_state},running},\u25CF,#{?#{==:#{@kobe_tab_state},done},\u2713,#{?#{==:#{@kobe_tab_state},error},!,#{?#{==:#{@kobe_tab_state},unknown},?,\u25CB}}}} #I:#W",mq;var fj=k(()=>{lJ();E1();e1();Tf();qJ();K1();U1();Qz();uq();LX();Eq=`engine (${cf.join("/")}/\u2026)`;mq=MX});var r1={};jf(r1,{tmuxWindowSizeArgsForClient:()=>Gj,tmuxSessionName:()=>Lf,tmuxInitialSizeArgs:()=>u5,tmuxInitialClientSize:()=>zj,tmuxAvailable:()=>NJ,switchClientBeforeKill:()=>bJ,sessionExists:()=>Hf,selectTasksPane:()=>sR,runLayoutAction:()=>Tq,resyncWindowToClient:()=>$R,refreshKobeWorkspacePanes:()=>BG,quickCreate:()=>I5,prepareWindowForSwitch:()=>aq,prepareWindowForAttach:()=>lq,parseTmuxClientRows:()=>E5,parseObservedSession:()=>h5,openUpdateTab:()=>iq,openSettingsTab:()=>cq,openNewTaskTab:()=>dq,openHelpTab:()=>nq,newChatTab:()=>S5,kobeStatusRight:()=>vq,killSession:()=>l1,healSessionLayout:()=>W5,focusBindCommand:()=>w5,ensureSession:()=>TY,currentSessionName:()=>k1,clientsWithConflictingSize:()=>x5,chatTabSwitchBindings:()=>xq,chatTabRenameBinding:()=>hq,chatTabCloseBinding:()=>wq,chatTabChooseEngineBindings:()=>Pq,captureGlobalLayoutOnDrag:()=>V5,captureGlobalLayout:()=>DX,attachArgv:()=>az,PANE_VERSION_OPTION:()=>KJ,CHAT_TAB_STATUS_FORMAT:()=>MX,CHAT_TAB_STATUS_CURRENT_FORMAT:()=>mq,CHAT_TAB_STATE_OPTION:()=>tB,CHAT_TAB_ENGINE_PROMPT:()=>Eq});function u5(f=process.stdout,J=process.env){let Y=zj(f,J);return Y?["-x",`${Y.columns}`,"-y",`${Y.rows}`]:[]}function zj(f=process.stdout,J=process.env){let Y=IY(f.columns)??IY(J.COLUMNS),z=IY(f.rows)??IY(J.LINES);return Y&&z?{columns:Y,rows:z}:null}function IY(f){let J=typeof f==="number"?f:typeof f==="string"?Number.parseInt(f,10):Number.NaN;return Number.isInteger(J)&&J>0?J:void 0}function E5(f){let J=[];for(let Y of f.split(`
71
- `)){let[z,G,X,q,Q]=Y.split("\t"),H=IY(X?.trim()),B=IY(q?.trim());if(!z?.trim()||!G?.trim()||!H||!B)continue;J.push({name:z.trim(),session:G.trim(),width:H,height:B,flags:Q?.trim()??""})}return J}function x5(f,J,Y,z={}){return f.filter((G)=>G.session===J).filter((G)=>G.name!==z.currentClientName).filter((G)=>G.width!==Y.columns||G.height!==Y.rows).map((G)=>G.name)}function Gj(f,J){let Y=Math.max(1,f.rows-(J.status?.trim()==="on"?1:0));return["-x",`${f.columns}`,"-y",`${Y}`]}async function Xj(f,J,Y={}){if(!J)return;let{code:z,stdout:G}=await d0(["list-clients","-t",`=${f}`,"-F",lR]);if(z!==0)return;let X=x5(E5(G),f,J,Y),q=[];if(Y.currentClientName)q.push(["refresh-client","-f","!ignore-size","-t",Y.currentClientName]);for(let Q of X)q.push(["refresh-client","-f","ignore-size","-t",Q]);if(q.length>0)await Pf(q)}async function lq(f){bY(f,"resize");let J=zj();await Xj(f,J);let Y=J?["-x",`${J.columns}`,"-y",`${J.rows}`]:[];if(Y.length>0)await h0(["resize-window","-t",`=${f}`,...Y]);await HG(f)}async function aR(){let{code:f,stdout:J}=await d0(["display-message","-p","#{client_name}\t#{client_width}\t#{client_height}\t#{status}"]);if(f!==0)return{sizeArgs:[],clientSize:null,clientName:void 0};let[Y,z,G,X]=J.trim().split("\t"),q=IY(z),Q=IY(G),H=q&&Q?{columns:q,rows:Q}:null;return{sizeArgs:H?Gj(H,{status:X}):[],clientSize:H,clientName:Y?.trim()||void 0}}async function aq(f){bY(f,"resize");let J=await aR();await Xj(f,J.clientSize,{currentClientName:J.clientName});let Y=J.sizeArgs;if(Y.length>0)await h0(["resize-window","-t",`=${f}`,...Y]);await HG(f)}async function $R(f,J){if(!J.size)return;bY(f,"resize"),await Xj(f,J.size,{currentClientName:J.clientName});let Y=Gj(J.size,{status:J.status}),{commands:z}=await iB(f,{force:!0});await Pf([["resize-window","-t",`=${f}`,...Y],...z])}function w5(f,J,Y){let z=`#{?window_zoomed_flag,1,#{?${rR[J]},,1}}`;if(Y)return["bind-key","-n",f,"if-shell","-F",z,`select-pane ${J}`,Y];return["bind-key","-n",f,"if-shell","-F",z,`select-pane ${J}`]}async function TY(f){let J=Yj.get(f.name);if(J)return J;let Y=oR(f);Yj.set(f.name,Y);try{return await Y}finally{Yj.delete(f.name)}}function h5(f){let J="",Y="",z=!1,G=new Set;for(let X of f.split(`
72
- `)){let[q,Q,H,B,V]=X.split("\t");if(!q?.trim())continue;if(G.add(q.trim()),!J&&B?.trim())J=B.trim();if(!Y&&V?.trim())Y=V.trim();if(Q?.trim()==="1"&&H?.trim()==="claude")z=!0}return{worktree:J,vendor:Y,claudePaneAlive:z,windowCount:G.size}}async function _R(f){if(!await Hf(f))return null;let{code:J,stdout:Y}=await d0(["list-panes","-s","-t",`=${f}`,"-F",pR]);if(J!==0)return{worktree:"",vendor:"",claudePaneAlive:!1,windowCount:0};return h5(Y)}async function oR(f){let J=f.launchInit,Y=await _R(f.name),z=r7(Y,{cwd:f.cwd,vendor:f.vendor,hasEngineCommand:f.command.length>0}),G=w9(f.repo);if(z.kind==="reuse")return await HG(f.name,{cwd:f.cwd,taskId:f.taskId,vendor:f.vendor}),!0;if(z.kind==="respawn-engine"){if(await H5(f.name,f.cwd,f.command,G,f.vendor)){if(f.vendor)await FY(f.name,"@kobe_vendor",f.vendor);return await HG(f.name,{cwd:f.cwd,taskId:f.taskId,vendor:f.vendor,vendorChanged:!0}),!0}}if(z.kind==="rebuild"||z.kind==="respawn-engine")await l1(f.name);let X=Cf(),q=pz(f.command,f.vendor),Q=f.repo!==void 0&&f.cwd===f.repo,H=Q||G?void 0:f.taskId,B=Q&&!G?f.taskId:void 0,V=Gq(zq(q.argv,f.vendor,H),f.vendor,B),j=iz(g1(V),G,f.cwd),L=(await d0(["new-session","-d","-s",f.name,"-c",If(f.cwd),...u5(),"-P","-F","#{pane_id}",tW(j,{initScript:G?void 0:J?.initScript,markerPath:!G&&J?.initScript?X9(f.cwd):void 0})])).stdout.trim();if(!L)return console.error("[kobe tmux] new-session returned no pane id; session creation failed"),!1;if(q.sessionId)await AY(L,yJ,q.sessionId);await Pf([...f.taskId?[["set-option","-t",f.name,"@kobe_task",f.taskId]]:[],["set-option","-t",f.name,"@kobe_worktree",f.cwd],...f.vendor?[["set-option","-t",f.name,"@kobe_vendor",f.vendor]]:[],...G?[["set-option","-t",f.name,JX,G]]:[]]),await eB(L,{cwd:f.cwd,taskId:f.taskId,opsCommand:f.opsCommand,inv:X,vendor:f.vendor});let O=_f(),M=X.map(Xf).join(" "),R=`${O}${M} new-chattab --session '#{session_name}'`,S=`${R} --vendor '%%'`,a=`run-shell ${Xf(S)}`,N=`${O}${M} focus-tasks --session '#{session_name}' --window '#{window_id}'`,g=`run-shell ${Xf(N)}`,C=(H0)=>`${O}${M} layout --session '#{session_name}' --window '#{window_id}' --action ${H0}`,y=C("tasks-restore"),_=`run-shell ${Xf(y)}`,z0=C("chat-tab-close"),t=`run-shell ${Xf(z0)}`,Y0=`${O}${M} heal-layout --session '#{session_name}'`,T=`run-shell -b ${Xf(Y0)}`,Q0=`${O}${M} resync-window --session '#{session_name}' --client '#{client_name}' --cols '#{client_width}' --rows '#{client_height}' --status '#{status}'`,p=`run-shell -b ${Xf(Q0)}`,D0=`${O}${M} capture-layout --session '#{session_name}'`,g0=`run-shell -b ${Xf(D0)}`,$=JV({tmuxSocket:QJ}),E=Aq(),f0=d7.map((H0)=>["unbind-key","-n",H0]);if(E.overridden.has(SJ))for(let H0 of yY){let y0=Az(H0);if("key"in y0)f0.push(["unbind-key","-n",y0.key])}for(let H0 of E.overridden){if(H0===SJ)continue;let y0=Oz[H0],w0=ZG(H0),T0=Az(y0,{allowBare:w0});if("key"in T0)f0.push(w0?["unbind-key",T0.key]:["unbind-key","-n",T0.key])}let I=["-L","-D","-U","-R"],G0=E.focus.flatMap((H0,y0)=>{let w0=I[y0],T0=w0==="-L"?_:void 0;return H0&&w0?[w5(H0.key,w0,T0)]:[]}),x=E.binds,c=(H0,y0)=>{let w0=x[H0];return w0?[["bind-key",w0.key,"run-shell",C(y0)]]:[]},Z0=(...H0)=>{let y0=H0.map((w0)=>x[w0]?.chord).filter((w0)=>!!w0);return y0.length>0?y0.join("/"):null};await Pf([["set-option","-g","status","on"],["set-window-option","-g","aggressive-resize","on"],["set-option","-g","monitor-activity","on"],["set-option","-g","visual-activity","off"],["set-option","-g","window-status-format",MX],["set-option","-g","window-status-current-format",mq],["set-option","-g","status-right",vq({focusLeft:E.focus[0]?.key??null,detach:x["tmux.detach"]?.key??null,newTab:x["tmux.tab.new"]?.key??null,layoutSplits:Z0("tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"),layoutPanes:Z0("tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle","tmux.layout.zenToggle")})],["set-option","-g","mouse","on"],["set-hook","-g","window-resized",T],["set-hook","-g","client-resized",p],["set-hook","-g","window-layout-changed",g0],...f0,...x["tmux.detach"]?[["bind-key","-n",x["tmux.detach"].key,"if-shell","-F",`#{?#{${A1}},1,#{==:#{@kobe_role},tasks}}`,"detach-client",g]]:[],...G0,...x["tmux.tab.new"]?[["bind-key","-n",x["tmux.tab.new"].key,"run-shell",R]]:[],...x["tmux.tab.chooseEngine"]?Pq(x["tmux.tab.chooseEngine"].key).map((H0)=>[...H0,a]):[],...x["tmux.tab.prev"]&&x["tmux.tab.next"]?xq(x["tmux.tab.prev"].key,x["tmux.tab.next"].key):x["tmux.tab.prev"]?[["bind-key","-n",x["tmux.tab.prev"].key,"previous-window"]]:x["tmux.tab.next"]?[["bind-key","-n",x["tmux.tab.next"].key,"next-window"]]:[],...x["tmux.tab.close"]?[wq(x["tmux.tab.close"].key,t)]:[],...x["tmux.tab.rename"]?[hq(x["tmux.tab.rename"].key)]:[],...c("tmux.layout.workspaceSplit","workspace-split"),...c("tmux.layout.workspaceClose","workspace-close"),...c("tmux.layout.workspaceReset","workspace-reset"),...c("tmux.layout.tasksToggle","tasks-toggle"),...c("tmux.layout.opsToggle","ops-toggle"),...c("tmux.layout.terminalToggle","terminal-toggle"),...c("tmux.layout.zenToggle","zen-toggle"),["bind-key","f","run-shell",`${O}${M} quick-create --session '#{session_name}'`],["bind-key","u","display-popup","-E",$]]),await gz(),await h0(["select-pane","-t",L]);let V0=J?.firstMessage;if(V0)$7(f.name,V0).catch((H0)=>console.error("[kobe tmux] first message delivery failed:",H0));return!0}async function T5(f,J,Y){let z=Y?.trim()||`=${f}`,{code:G,stdout:X}=await d0(["list-panes","-t",z,"-F","#{pane_id}\t#{@kobe_role}"]);if(G!==0)return"";for(let q of X.split(`
73
- `)){let[Q,H]=q.split("\t");if(Q?.trim()&&H?.trim()===J)return Q.trim()}return""}async function sR(f,J={}){if(!await Hf(f))return"";let Y=await T5(f,"tasks",J.windowId);if(!Y)await Tq(f,"tasks-restore",{windowId:J.windowId}),Y=await T5(f,"tasks",J.windowId);if(!Y)return"";return await h0(["select-pane","-t",Y]),Y}var lR="#{client_name}\t#{client_session}\t#{client_width}\t#{client_height}\t#{client_flags}",rR,Yj,pR="#{window_id}\t#{window_active}\t#{@kobe_role}\t#{@kobe_worktree}\t#{@kobe_vendor}";var J1=k(()=>{lJ();E1();lf();e1();Tf();gq();Rq();qJ();yq();fj();Qz();uq();QG();LX();Tf();fj();LX();uq();rR={"-L":"pane_at_left","-D":"pane_at_bottom","-U":"pane_at_top","-R":"pane_at_right"};Yj=new Map});async function tR(f,J){let{task:Y}=await f.request("task.get",{taskId:J});return Y}async function Zj(f,J){let Y=await tR(f,J);if(Y.worktreePath)return{task:Y,worktreePath:Y.worktreePath};let{worktreePath:z}=await f.request("task.ensureWorktree",{taskId:J});if(!z)throw Error(`task ${J} has no worktree`);return{task:Y,worktreePath:z}}async function P5(f,J){let{task:Y,worktreePath:z}=await Zj(f,J),G=Lf(J);if(!await Hf(G)){let X=oJ(Y.repo??"",z,{kind:"repo-init"});if(!await TY({name:G,cwd:z,command:N1(Y.vendor,Y.modelEffort),taskId:J,vendor:Y.vendor,launchInit:X}))throw Error(`failed to start tmux session for ${J}`)}return{session:G,worktreePath:z}}function eR(f){return hZ(f,{bareSafe:!0})}async function v5(f,J){let{task:Y,worktreePath:z}=await Zj(f,J),G=Y.kind==="main"?void 0:J,X=Y.kind==="main"?J:void 0,q=[...Gq(zq(N1(Y.vendor,Y.modelEffort),Y.vendor,G),Y.vendor,X)],Q=oJ(Y.repo??"",z,{kind:"none"}),H=eR(q),B=Q.initScript?.trim()?`${Q.initScript}
74
- ${H}`:H,V=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:z,command:[V,"-ilc",B]}}async function m5(f,J){let{worktreePath:Y}=await Zj(f,J),z=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:Y,command:[z,"-il"]}}async function c5(f){let J=Lf(f);await bJ(J).catch(()=>{}),await l1(J).catch(()=>{})}var n5=k(()=>{E1();IH();GG();Tf();J1()});import{existsSync as f2}from"fs";import{join as d5,normalize as a5}from"path";function J2(f){let J=null,Y=null,z=new TextEncoder,G=new ReadableStream({start(X){J=f((Q,H)=>{try{X.enqueue(z.encode(`event: ${Q}
54
+ `;return""}async function f7(f,J){if(J.pathname!=="/api/diff")return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});let Y=J.searchParams.get("worktreePath");if(!Y)return Response.json({error:"missing worktreePath"},{status:400});let z;try{z=decodeURIComponent(Y)}catch{return Response.json({error:"invalid worktreePath encoding"},{status:400})}if(!z.startsWith("/"))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!iZ(z))return Response.json({error:"worktreePath does not exist"},{status:400});if(!pJ(z).isRemote)try{if(!kA(z).isDirectory())return Response.json({error:"worktreePath is not a directory"},{status:400})}catch{return Response.json({error:"worktreePath does not exist"},{status:400})}let X=await BX(z,["rev-parse","--is-inside-work-tree"]);if(!X.ok||X.stdout.trim()!=="true")return Response.json({error:`not a git work tree: ${X.stderr.trim()||z}`},{status:500});let[q,Q,H]=await Promise.all([BX(z,["status","--porcelain=v1","-z","--untracked-files=all"]),BX(z,["diff","--no-color"]),BX(z,["diff","--no-color","--staged"])]);if(!q.ok)return Response.json({error:`git status failed: ${q.stderr.trim()}`},{status:500});let B=eV(Q.stdout),V=eV(H.stdout),j=q.stdout.split("\x00"),U=[],L=[];for(let R=0;R<j.length;R++){let S=j[R];if(!S)continue;let a=S[0]??" ",N=S[1]??" ",g=S.slice(3);if(!g)continue;if(a==="R"||a==="C"||N==="R"||N==="C")R++;let C=a==="?"&&N==="?",y=a!==" "&&a!=="?"?a:N,_=a!==" "&&a!=="?",z0="";if(C)L.push({fileIndex:U.length,path:g});else if(z0=V.get(g)??B.get(g)??"",V.has(g)&&B.has(g))z0=`${V.get(g)}${B.get(g)}`;U.push({path:g,status:C?"untracked":bA(y),staged:_,patch:z0})}if(L.length>0){let R=await IA(L,yA,(S)=>TA(z,S.path));for(let S=0;S<L.length;S++)U[L[S].fileIndex].patch=R[S]}U.sort((R,S)=>R.path.localeCompare(S.path));let O=[H.stdout,Q.stdout].filter(Boolean).join(`
55
+ `),M={files:U,raw:O};return Response.json(M)}var NA=15000,yA=8;var J7=k(()=>{ZJ();qq()});import{isAbsolute as uA}from"path";function z7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function xA(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9._-]+$/.test(f)&&!f.includes("..")}async function wA(f){let J=f.searchParams.get("worktreePath"),Y=f.searchParams.get("vendor")??"claude";if(!J||!uA(J))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!z7(Y))return Response.json({error:"invalid vendor"},{status:400});try{let z=pf(Y).history,[G,X]=await Promise.all([z.listSessionIdsForWorktree(J),z.latestTranscriptMtimeForWorktree(J)]);return Response.json({sessions:G,latestMtime:X})}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}async function hA(f){let J=f.searchParams.get("vendor")??"claude",Y=f.searchParams.get("sessionId");if(!z7(J))return Response.json({error:"invalid vendor"},{status:400});if(!xA(Y))return Response.json({error:"invalid sessionId"},{status:400});try{let z=await pf(J).history.readHistory(Y);return Response.json({messages:z})}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}async function G7(f,J){if(J.pathname!==Y7&&J.pathname!==EA)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return J.pathname===Y7?wA(J):hA(J)}var Y7="/api/history/sessions",EA="/api/history/messages";var X7=k(()=>{UY()});import{mkdir as PA,readFile as vA,writeFile as mA}from"fs/promises";import{join as Z7}from"path";function q7(){return Z7(ef(),"notes")}function Q7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function H7(f){return Z7(q7(),`${f}.md`)}async function nA(f){let J=f.searchParams.get("taskId");if(!Q7(J))return Response.json({error:"invalid taskId"},{status:400});try{let Y="";try{Y=await vA(H7(J),"utf8")}catch(z){if(z.code!=="ENOENT")throw z}return Response.json({markdown:Y})}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function dA(f){let J;try{J=await f.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!Q7(J.taskId))return Response.json({error:"invalid taskId"},{status:400});if(typeof J.markdown!=="string")return Response.json({error:"markdown must be a string"},{status:400});try{return await PA(q7(),{recursive:!0}),await mA(H7(J.taskId),J.markdown,"utf8"),Response.json({ok:!0})}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function B7(f,J){if(J.pathname!==cA)return null;if(f.method==="GET")return nA(J);if(f.method==="PUT")return dA(f);return Response.json({error:"method not allowed"},{status:405})}var cA="/api/notes";var j7=k(()=>{lf()});var oz;var Qq=k(()=>{oz={$schema:"https://opencode.ai/theme.json",defs:{darkBg:"#141413",darkBgRaised:"#1A1917",darkBgInset:"#2B2A27",darkBgMenu:"#33312E",darkBorderSubtle:"#2B2A27",darkBorder:"#3A3835",darkBorderActive:"#5C5853",darkText:"#EAE7DF",darkTextMuted:"#A9A39A",darkTextSubtle:"#6B665F",darkPrimary:"#CC785C",darkSecondary:"#D4967E",darkAccent:"#CC785C",darkAccentHover:"#E0AB96",darkRed:"#D47563",darkOrange:"#D97757",darkYellow:"#E8C96B",darkGreen:"#9ACA86",darkBlue:"#61AAF2",darkViolet:"#9B87F5",darkTerracotta:"#BF4D43",lightBg:"#FAF9F5",lightBgRaised:"#F0EEE6",lightBgInset:"#EAE7DF",lightBgMenu:"#E2DED4",lightBorderSubtle:"#EAE7DF",lightBorder:"#D9D5CC",lightBorderActive:"#A9A39A",lightText:"#1A1917",lightTextMuted:"#6B665F",lightTextSubtle:"#8D877D",lightPrimary:"#C96442",lightSecondary:"#B85F3D",lightAccent:"#CC785C",lightAccentHover:"#B85F3D",lightRed:"#A84B3A",lightOrange:"#C96442",lightYellow:"#8A6220",lightGreen:"#2E7C4C",lightBlue:"#207FDE",lightViolet:"#7B5BB6",lightTerracotta:"#BF4D43"},theme:{primary:{dark:"darkPrimary",light:"lightPrimary"},secondary:{dark:"darkSecondary",light:"lightSecondary"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkYellow",light:"lightYellow"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkBlue",light:"lightBlue"},text:{dark:"darkText",light:"lightText"},textMuted:{dark:"darkTextMuted",light:"lightTextMuted"},background:{dark:"darkBg",light:"lightBg"},backgroundPanel:{dark:"darkBgRaised",light:"lightBgRaised"},backgroundElement:{dark:"darkBgInset",light:"lightBgInset"},backgroundMenu:{dark:"darkBgMenu",light:"lightBgMenu"},backgroundDialog:{dark:"darkBgRaised",light:"lightBgRaised"},border:{dark:"darkBorder",light:"lightBorder"},borderActive:{dark:"darkBorderActive",light:"lightBorderActive"},borderSubtle:{dark:"darkBorderSubtle",light:"lightBorderSubtle"},diffAdded:{dark:"darkGreen",light:"lightGreen"},diffRemoved:{dark:"darkRed",light:"lightRed"},diffContext:{dark:"darkTextMuted",light:"lightTextSubtle"},diffHunkHeader:{dark:"darkTextMuted",light:"lightTextSubtle"},diffHighlightAdded:{dark:"#B5E0A0",light:"#1F6638"},diffHighlightRemoved:{dark:"#E89180",light:"#8A3A2C"},diffAddedBg:{dark:"#1F2A1F",light:"#E5EEDF"},diffRemovedBg:{dark:"#2A1F1C",light:"#F5DAD3"},diffContextBg:{dark:"darkBgRaised",light:"lightBgRaised"},diffLineNumber:{dark:"darkTextSubtle",light:"lightTextSubtle"},diffAddedLineNumberBg:{dark:"#1A2419",light:"#D5E2CC"},diffRemovedLineNumberBg:{dark:"#241915",light:"#EBC8BE"},markdownText:{dark:"darkText",light:"lightText"},markdownHeading:{dark:"darkPrimary",light:"lightPrimary"},markdownLink:{dark:"darkAccent",light:"lightAccent"},markdownLinkText:{dark:"darkBlue",light:"lightBlue"},markdownCode:{dark:"darkSecondary",light:"lightSecondary"},markdownBlockQuote:{dark:"darkTextMuted",light:"lightTextMuted"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkPrimary",light:"lightPrimary"},markdownHorizontalRule:{dark:"darkTextMuted",light:"lightTextMuted"},markdownListItem:{dark:"darkAccent",light:"lightAccent"},markdownListEnumeration:{dark:"darkBlue",light:"lightBlue"},markdownImage:{dark:"darkAccent",light:"lightAccent"},markdownImageText:{dark:"darkBlue",light:"lightBlue"},markdownCodeBlock:{dark:"darkText",light:"lightText"},markdownQuote:{dark:"darkTextMuted",light:"lightTextMuted"},syntaxComment:{dark:"darkTextSubtle",light:"lightTextSubtle"},syntaxKeyword:{dark:"darkPrimary",light:"lightPrimary"},syntaxFunction:{dark:"darkBlue",light:"lightBlue"},syntaxVariable:{dark:"darkText",light:"lightText"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkViolet",light:"lightViolet"},syntaxOperator:{dark:"darkSecondary",light:"lightSecondary"},syntaxPunctuation:{dark:"darkText",light:"lightText"},selectedListItemText:{dark:"darkBg",light:"lightBg"}}}});var sz;var Hq=k(()=>{sz={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#0a0a0a",darkStep2:"#111111",darkStep3:"#181818",darkStep4:"#1f1f1f",darkStep5:"#2a2a2a",darkStep6:"#363636",darkStep7:"#444444",darkStep8:"#5a5a5a",darkStep9:"#7a7a7a",darkStep10:"#9a9a9a",darkStep11:"#909090",darkStep12:"#e8e8e8",darkAccent:"#7da5c8",darkAccentBright:"#9bc3e3",darkRed:"#e06c75",darkOrange:"#d6a668",darkGreen:"#7fd88f",darkCyan:"#7da5c8",darkYellow:"#d6a668",lightStep1:"#fafafa",lightStep2:"#f3f3f3",lightStep3:"#ececec",lightStep4:"#e2e2e2",lightStep5:"#d4d4d4",lightStep6:"#bdbdbd",lightStep7:"#9c9c9c",lightStep8:"#7c7c7c",lightStep9:"#5b5b5b",lightStep10:"#404040",lightStep11:"#6c6c6c",lightStep12:"#1a1a1a",lightAccent:"#3d6f9f",lightAccentBright:"#1a4f87",lightRed:"#c9343a",lightOrange:"#a06b1a",lightGreen:"#3d9a57",lightCyan:"#3d6f9f",lightYellow:"#a06b1a"},theme:{primary:{dark:"darkStep12",light:"lightStep12"},secondary:{dark:"darkAccentBright",light:"lightAccentBright"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},backgroundMenu:{dark:"darkStep4",light:"lightStep4"},border:{dark:"darkStep6",light:"lightStep6"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep4",light:"lightStep4"},diffAdded:{dark:"#7fd88f",light:"#3d9a57"},diffRemoved:{dark:"#e06c75",light:"#c9343a"},diffContext:{dark:"darkStep10",light:"lightStep10"},diffHunkHeader:{dark:"darkStep10",light:"lightStep10"},diffHighlightAdded:{dark:"#9be5ad",light:"#2d7a3f"},diffHighlightRemoved:{dark:"#f08490",light:"#a82530"},diffAddedBg:{dark:"#15241a",light:"#d8efdc"},diffRemovedBg:{dark:"#2a1518",light:"#f5dadc"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"darkStep9",light:"lightStep9"},diffAddedLineNumberBg:{dark:"#0f1c14",light:"#c5deca"},diffRemovedLineNumberBg:{dark:"#221012",light:"#e5c5c8"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkStep12",light:"lightStep12"},markdownLink:{dark:"darkAccent",light:"lightAccent"},markdownCode:{dark:"darkAccentBright",light:"lightAccentBright"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},markdownQuote:{dark:"darkStep11",light:"lightStep11"},selectedListItemText:{dark:"darkStep1",light:"lightStep1"}}}});var tz;var Bq=k(()=>{tz={$schema:"https://opencode.ai/theme.json",defs:{background:"#282a36",currentLine:"#44475a",selection:"#44475a",foreground:"#f8f8f2",comment:"#6272a4",cyan:"#8be9fd",green:"#50fa7b",orange:"#ffb86c",pink:"#ff79c6",purple:"#bd93f9",red:"#ff5555",yellow:"#f1fa8c"},theme:{primary:{dark:"purple",light:"purple"},secondary:{dark:"pink",light:"pink"},accent:{dark:"cyan",light:"cyan"},error:{dark:"red",light:"red"},warning:{dark:"yellow",light:"yellow"},success:{dark:"green",light:"green"},info:{dark:"orange",light:"orange"},text:{dark:"foreground",light:"#282a36"},textMuted:{dark:"comment",light:"#6272a4"},background:{dark:"#282a36",light:"#f8f8f2"},backgroundPanel:{dark:"#21222c",light:"#e8e8e2"},backgroundElement:{dark:"currentLine",light:"#d8d8d2"},border:{dark:"currentLine",light:"#c8c8c2"},borderActive:{dark:"purple",light:"purple"},borderSubtle:{dark:"#191a21",light:"#e0e0e0"},diffAdded:{dark:"green",light:"green"},diffRemoved:{dark:"red",light:"red"},diffContext:{dark:"comment",light:"#6272a4"},diffHunkHeader:{dark:"comment",light:"#6272a4"},diffHighlightAdded:{dark:"green",light:"green"},diffHighlightRemoved:{dark:"red",light:"red"},diffAddedBg:{dark:"#1a3a1a",light:"#e0ffe0"},diffRemovedBg:{dark:"#3a1a1a",light:"#ffe0e0"},diffContextBg:{dark:"#21222c",light:"#e8e8e2"},diffLineNumber:{dark:"#989aa4",light:"#686865"},diffAddedLineNumberBg:{dark:"#1a3a1a",light:"#e0ffe0"},diffRemovedLineNumberBg:{dark:"#3a1a1a",light:"#ffe0e0"},markdownText:{dark:"foreground",light:"#282a36"},markdownHeading:{dark:"purple",light:"purple"},markdownLink:{dark:"cyan",light:"cyan"},markdownLinkText:{dark:"pink",light:"pink"},markdownCode:{dark:"green",light:"green"},markdownBlockQuote:{dark:"comment",light:"#6272a4"},markdownEmph:{dark:"yellow",light:"yellow"},markdownStrong:{dark:"orange",light:"orange"},markdownHorizontalRule:{dark:"comment",light:"#6272a4"},markdownListItem:{dark:"purple",light:"purple"},markdownListEnumeration:{dark:"cyan",light:"cyan"},markdownImage:{dark:"cyan",light:"cyan"},markdownImageText:{dark:"pink",light:"pink"},markdownCodeBlock:{dark:"foreground",light:"#282a36"},syntaxComment:{dark:"comment",light:"#6272a4"},syntaxKeyword:{dark:"pink",light:"pink"},syntaxFunction:{dark:"green",light:"green"},syntaxVariable:{dark:"foreground",light:"#282a36"},syntaxString:{dark:"yellow",light:"yellow"},syntaxNumber:{dark:"purple",light:"purple"},syntaxType:{dark:"cyan",light:"cyan"},syntaxOperator:{dark:"pink",light:"pink"},syntaxPunctuation:{dark:"foreground",light:"#282a36"}}}});var ez;var jq=k(()=>{ez={$schema:"https://opencode.ai/theme.json",defs:{nord0:"#2E3440",nord1:"#3B4252",nord2:"#434C5E",nord3:"#4C566A",nord4:"#D8DEE9",nord5:"#E5E9F0",nord6:"#ECEFF4",nord7:"#8FBCBB",nord8:"#88C0D0",nord9:"#81A1C1",nord10:"#5E81AC",nord11:"#BF616A",nord12:"#D08770",nord13:"#EBCB8B",nord14:"#A3BE8C",nord15:"#B48EAD"},theme:{primary:{dark:"nord8",light:"nord10"},secondary:{dark:"nord9",light:"nord9"},accent:{dark:"nord7",light:"nord7"},error:{dark:"nord11",light:"nord11"},warning:{dark:"nord12",light:"nord12"},success:{dark:"nord14",light:"nord14"},info:{dark:"nord8",light:"nord10"},text:{dark:"nord6",light:"nord0"},textMuted:{dark:"#8B95A7",light:"nord1"},background:{dark:"nord0",light:"nord6"},backgroundPanel:{dark:"nord1",light:"nord5"},backgroundElement:{dark:"nord2",light:"nord4"},border:{dark:"nord2",light:"nord3"},borderActive:{dark:"nord3",light:"nord2"},borderSubtle:{dark:"nord2",light:"nord3"},diffAdded:{dark:"nord14",light:"nord14"},diffRemoved:{dark:"nord11",light:"nord11"},diffContext:{dark:"#8B95A7",light:"nord3"},diffHunkHeader:{dark:"#8B95A7",light:"nord3"},diffHighlightAdded:{dark:"nord14",light:"nord14"},diffHighlightRemoved:{dark:"nord11",light:"nord11"},diffAddedBg:{dark:"#3B4252",light:"#E5E9F0"},diffRemovedBg:{dark:"#3B4252",light:"#E5E9F0"},diffContextBg:{dark:"nord1",light:"nord5"},diffLineNumber:{dark:"#a9aeb6",light:"textMuted"},diffAddedLineNumberBg:{dark:"#3B4252",light:"#E5E9F0"},diffRemovedLineNumberBg:{dark:"#3B4252",light:"#E5E9F0"},markdownText:{dark:"nord4",light:"nord0"},markdownHeading:{dark:"nord8",light:"nord10"},markdownLink:{dark:"nord9",light:"nord9"},markdownLinkText:{dark:"nord7",light:"nord7"},markdownCode:{dark:"nord14",light:"nord14"},markdownBlockQuote:{dark:"#8B95A7",light:"nord3"},markdownEmph:{dark:"nord12",light:"nord12"},markdownStrong:{dark:"nord13",light:"nord13"},markdownHorizontalRule:{dark:"#8B95A7",light:"nord3"},markdownListItem:{dark:"nord8",light:"nord10"},markdownListEnumeration:{dark:"nord7",light:"nord7"},markdownImage:{dark:"nord9",light:"nord9"},markdownImageText:{dark:"nord7",light:"nord7"},markdownCodeBlock:{dark:"nord4",light:"nord0"},syntaxComment:{dark:"#8B95A7",light:"nord3"},syntaxKeyword:{dark:"nord9",light:"nord9"},syntaxFunction:{dark:"nord8",light:"nord8"},syntaxVariable:{dark:"nord7",light:"nord7"},syntaxString:{dark:"nord14",light:"nord14"},syntaxNumber:{dark:"nord15",light:"nord15"},syntaxType:{dark:"nord7",light:"nord7"},syntaxOperator:{dark:"nord9",light:"nord9"},syntaxPunctuation:{dark:"nord4",light:"nord0"}}}});var fG;var Wq=k(()=>{fG={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#161616",darkStep2:"#1f1f1f",darkStep3:"#282828",darkStep4:"#323232",darkStep5:"#3c3c3c",darkStep6:"#484848",darkStep7:"#545454",darkStep8:"#6a6a6a",darkStep9:"#fab283",darkStep10:"#ffc09f",darkStep11:"#808080",darkStep12:"#eeeeee",darkSecondary:"#5c9cf5",darkAccent:"#7da5c8",darkRed:"#e06c75",darkOrange:"#f5a742",darkGreen:"#7fd88f",darkCyan:"#56b6c2",darkYellow:"#e5c07b",lightStep1:"#ffffff",lightStep2:"#fafafa",lightStep3:"#f5f5f5",lightStep4:"#ebebeb",lightStep5:"#e1e1e1",lightStep6:"#d4d4d4",lightStep7:"#b8b8b8",lightStep8:"#a0a0a0",lightStep9:"#3b7dd8",lightStep10:"#2968c3",lightStep11:"#8a8a8a",lightStep12:"#1a1a1a",lightSecondary:"#7b5bb6",lightAccent:"#3d6f9f",lightRed:"#d1383d",lightOrange:"#d68c27",lightGreen:"#3d9a57",lightCyan:"#318795",lightYellow:"#b0851f"},theme:{primary:{dark:"darkStep9",light:"lightStep9"},secondary:{dark:"darkSecondary",light:"lightSecondary"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},border:{dark:"darkStep7",light:"lightStep7"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep6",light:"lightStep6"},diffAdded:{dark:"#4fd6be",light:"#1e725c"},diffRemoved:{dark:"#c53b53",light:"#c53b53"},diffContext:{dark:"#828bb8",light:"#7086b5"},diffHunkHeader:{dark:"#828bb8",light:"#7086b5"},diffHighlightAdded:{dark:"#b8db87",light:"#4db380"},diffHighlightRemoved:{dark:"#e26a75",light:"#f52a65"},diffAddedBg:{dark:"#20303b",light:"#d5e5d5"},diffRemovedBg:{dark:"#37222c",light:"#f7d8db"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"#8f8f8f",light:"#595959"},diffAddedLineNumberBg:{dark:"#1b2b34",light:"#c5d5c5"},diffRemovedLineNumberBg:{dark:"#2d1f26",light:"#e7c8cb"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkAccent",light:"lightAccent"},markdownLink:{dark:"darkStep9",light:"lightStep9"},markdownLinkText:{dark:"darkCyan",light:"lightCyan"},markdownCode:{dark:"darkGreen",light:"lightGreen"},markdownBlockQuote:{dark:"darkYellow",light:"lightYellow"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkOrange",light:"lightOrange"},markdownHorizontalRule:{dark:"darkStep11",light:"lightStep11"},markdownListItem:{dark:"darkStep9",light:"lightStep9"},markdownListEnumeration:{dark:"darkCyan",light:"lightCyan"},markdownImage:{dark:"darkStep9",light:"lightStep9"},markdownImageText:{dark:"darkCyan",light:"lightCyan"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},syntaxComment:{dark:"darkStep11",light:"lightStep11"},syntaxKeyword:{dark:"darkAccent",light:"lightAccent"},syntaxFunction:{dark:"darkStep9",light:"lightStep9"},syntaxVariable:{dark:"darkRed",light:"lightRed"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkYellow",light:"lightYellow"},syntaxOperator:{dark:"darkCyan",light:"lightCyan"},syntaxPunctuation:{dark:"darkStep12",light:"lightStep12"}}}});var JG;var Vq=k(()=>{JG={$schema:"https://opencode.ai/theme.json",defs:{darkBg0:"#111c18",darkBg1:"#1a2520",darkBg2:"#23372B",darkBg3:"#3d4a44",darkFg0:"#C1C497",darkFg1:"#9aa88a",darkGray:"#53685B",darkRed:"#FF5345",darkGreen:"#549e6a",darkYellow:"#459451",darkBlue:"#509475",darkMagenta:"#D2689C",darkCyan:"#2DD5B7",darkWhite:"#F6F5DD",darkRedBright:"#db9f9c",darkGreenBright:"#63b07a",darkYellowBright:"#E5C736",darkBlueBright:"#ACD4CF",darkMagentaBright:"#75bbb3",darkCyanBright:"#8CD3CB",lightBg0:"#F6F5DD",lightBg1:"#E8E7CC",lightBg2:"#D5D4B8",lightBg3:"#A8A78C",lightFg0:"#111c18",lightFg1:"#1a2520",lightGray:"#53685B",lightRed:"#c7392d",lightGreen:"#3d7a52",lightYellow:"#b5a020",lightBlue:"#3d7560",lightMagenta:"#a8527a",lightCyan:"#1faa90"},theme:{primary:{dark:"darkCyan",light:"lightCyan"},secondary:{dark:"darkMagenta",light:"lightMagenta"},accent:{dark:"darkGreen",light:"lightGreen"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkYellowBright",light:"lightYellow"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkFg0",light:"lightFg0"},textMuted:{dark:"darkGray",light:"lightGray"},background:{dark:"darkBg0",light:"lightBg0"},backgroundPanel:{dark:"darkBg1",light:"lightBg1"},backgroundElement:{dark:"darkBg2",light:"lightBg2"},border:{dark:"darkBg3",light:"lightBg3"},borderActive:{dark:"darkCyan",light:"lightCyan"},borderSubtle:{dark:"darkBg2",light:"lightBg2"},diffAdded:{dark:"darkGreen",light:"lightGreen"},diffRemoved:{dark:"darkRed",light:"lightRed"},diffContext:{dark:"darkGray",light:"lightGray"},diffHunkHeader:{dark:"darkCyan",light:"lightCyan"},diffHighlightAdded:{dark:"darkGreenBright",light:"lightGreen"},diffHighlightRemoved:{dark:"darkRedBright",light:"lightRed"},diffAddedBg:{dark:"#15241c",light:"#e0eee5"},diffRemovedBg:{dark:"#241515",light:"#eee0e0"},diffContextBg:{dark:"darkBg1",light:"lightBg1"},diffLineNumber:{dark:"#828b87",light:"#5f5e4f"},diffAddedLineNumberBg:{dark:"#121f18",light:"#d5e5da"},diffRemovedLineNumberBg:{dark:"#1f1212",light:"#e5d5d5"},markdownText:{dark:"darkFg0",light:"lightFg0"},markdownHeading:{dark:"darkCyan",light:"lightCyan"},markdownLink:{dark:"darkCyanBright",light:"lightCyan"},markdownLinkText:{dark:"darkGreen",light:"lightGreen"},markdownCode:{dark:"darkGreenBright",light:"lightGreen"},markdownBlockQuote:{dark:"darkGray",light:"lightGray"},markdownEmph:{dark:"darkMagenta",light:"lightMagenta"},markdownStrong:{dark:"darkFg0",light:"lightFg0"},markdownHorizontalRule:{dark:"darkGray",light:"lightGray"},markdownListItem:{dark:"darkCyan",light:"lightCyan"},markdownListEnumeration:{dark:"darkCyanBright",light:"lightCyan"},markdownImage:{dark:"darkCyanBright",light:"lightCyan"},markdownImageText:{dark:"darkGreen",light:"lightGreen"},markdownCodeBlock:{dark:"darkFg0",light:"lightFg0"},syntaxComment:{dark:"darkGray",light:"lightGray"},syntaxKeyword:{dark:"darkCyan",light:"lightCyan"},syntaxFunction:{dark:"darkBlue",light:"lightBlue"},syntaxVariable:{dark:"darkFg0",light:"lightFg0"},syntaxString:{dark:"darkGreenBright",light:"lightGreen"},syntaxNumber:{dark:"darkMagenta",light:"lightMagenta"},syntaxType:{dark:"darkGreen",light:"lightGreen"},syntaxOperator:{dark:"darkYellow",light:"lightYellow"},syntaxPunctuation:{dark:"darkFg0",light:"lightFg0"}}}});var YG;var Kq=k(()=>{YG={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#1a1b26",darkStep2:"#1e2030",darkStep3:"#222436",darkStep4:"#292e42",darkStep5:"#3b4261",darkStep6:"#545c7e",darkStep7:"#737aa2",darkStep8:"#9099b2",darkStep9:"#82aaff",darkStep10:"#89b4fa",darkStep11:"#828bb8",darkStep12:"#c8d3f5",darkRed:"#ff757f",darkOrange:"#ff966c",darkYellow:"#ffc777",darkGreen:"#c3e88d",darkCyan:"#86e1fc",darkPurple:"#c099ff",lightStep1:"#e1e2e7",lightStep2:"#d5d6db",lightStep3:"#c8c9ce",lightStep4:"#b9bac1",lightStep5:"#a8aecb",lightStep6:"#9699a8",lightStep7:"#737a8c",lightStep8:"#5a607d",lightStep9:"#2e7de9",lightStep10:"#1a6ce7",lightStep11:"#8990a3",lightStep12:"#3760bf",lightRed:"#f52a65",lightOrange:"#b15c00",lightYellow:"#8c6c3e",lightGreen:"#587539",lightCyan:"#007197",lightPurple:"#9854f1"},theme:{primary:{dark:"darkStep9",light:"lightStep9"},secondary:{dark:"darkPurple",light:"lightPurple"},accent:{dark:"darkOrange",light:"lightOrange"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkStep9",light:"lightStep9"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},border:{dark:"darkStep7",light:"lightStep7"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep6",light:"lightStep6"},diffAdded:{dark:"#4fd6be",light:"#1e725c"},diffRemoved:{dark:"#c53b53",light:"#c53b53"},diffContext:{dark:"#828bb8",light:"#7086b5"},diffHunkHeader:{dark:"#828bb8",light:"#7086b5"},diffHighlightAdded:{dark:"#b8db87",light:"#4db380"},diffHighlightRemoved:{dark:"#e26a75",light:"#f52a65"},diffAddedBg:{dark:"#20303b",light:"#d5e5d5"},diffRemovedBg:{dark:"#37222c",light:"#f7d8db"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"#8f909a",light:"#59595b"},diffAddedLineNumberBg:{dark:"#1b2b34",light:"#c5d5c5"},diffRemovedLineNumberBg:{dark:"#2d1f26",light:"#e7c8cb"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkPurple",light:"lightPurple"},markdownLink:{dark:"darkStep9",light:"lightStep9"},markdownLinkText:{dark:"darkCyan",light:"lightCyan"},markdownCode:{dark:"darkGreen",light:"lightGreen"},markdownBlockQuote:{dark:"darkYellow",light:"lightYellow"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkOrange",light:"lightOrange"},markdownHorizontalRule:{dark:"darkStep11",light:"lightStep11"},markdownListItem:{dark:"darkStep9",light:"lightStep9"},markdownListEnumeration:{dark:"darkCyan",light:"lightCyan"},markdownImage:{dark:"darkStep9",light:"lightStep9"},markdownImageText:{dark:"darkCyan",light:"lightCyan"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},syntaxComment:{dark:"darkStep11",light:"lightStep11"},syntaxKeyword:{dark:"darkPurple",light:"lightPurple"},syntaxFunction:{dark:"darkStep9",light:"lightStep9"},syntaxVariable:{dark:"darkRed",light:"lightRed"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkYellow",light:"lightYellow"},syntaxOperator:{dark:"darkCyan",light:"lightCyan"},syntaxPunctuation:{dark:"darkStep12",light:"lightStep12"}}}});function uB(f,J,Y=[]){if(J===void 0)return null;if(typeof J!=="string")return uB(f,J.dark,Y);if(J==="transparent"||J==="none")return null;if(J.startsWith("#"))return J;if(Y.includes(J))return null;let z=f.defs?.[J]??f.theme[J];return uB(f,z,[...Y,J])}function TB(f){return Math.max(0,Math.min(255,Math.round(f)))}function jX(f,J,Y){let z=Number.parseInt(f.slice(1),16),G=Number.parseInt(J.slice(1),16),X=(Q,H)=>Q>>H&255;return`#${(TB(X(z,16)+(X(G,16)-X(z,16))*Y)<<16|TB(X(z,8)+(X(G,8)-X(z,8))*Y)<<8|TB(X(z,0)+(X(G,0)-X(z,0))*Y)).toString(16).padStart(6,"0")}`}function sA(f){let J=(Q)=>uB(f,f.theme[Q]),Y=J("background"),z=J("text");if(!Y||!z)return null;let G=J("textMuted")??jX(z,Y,0.35),X=J("primary")??z,q=J("border")??jX(z,Y,0.8);return{bg:Y,surface:J("backgroundPanel")??Y,inset:J("backgroundElement")??Y,menu:J("backgroundMenu")??J("backgroundElement")??Y,line:q,"line-subtle":J("borderSubtle")??q,"line-active":J("borderActive")??jX(q,z,0.3),fg:z,muted:G,subtle:jX(G,Y,0.35),primary:X,"primary-hover":jX(X,z,0.35),"kobe-orange":X,"kobe-green":J("success")??z,"kobe-blue":J("info")??z,"kobe-red":J("error")??z,"kobe-yellow":J("warning")??z,"kobe-violet":J("secondary")??X}}function W7(f,J){if(J.pathname!==eA)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:tA})}var oA,tA,eA="/api/themes";var V7=k(()=>{Qq();Hq();Bq();jq();Wq();Vq();Kq();oA={claude:oz,conductor:sz,dracula:tz,nord:ez,opencode:fG,"osaka-jade":JG,tokyonight:YG};tA=Object.fromEntries(Object.entries(oA).map(([f,J])=>[f,sA(J)]).filter((f)=>f[1]!==null))});import{createHash as fg,randomUUID as Jg}from"crypto";import{mkdir as Yg}from"fs/promises";import{join as EB,resolve as zg}from"path";function Zg(f){return fg("sha1").update(f).digest("hex").slice(0,16)}async function Hg(f){let J=Number.parseInt(f.headers.get("content-length")??"",10);if(Number.isFinite(J)&&J>K7)return Response.json({error:"asset too large"},{status:413});let Y;try{Y=await f.formData()}catch{return Response.json({error:"invalid form data"},{status:400})}let z=Y.get("repoRoot");if(typeof z!=="string"||z.length===0)return Response.json({error:"missing repoRoot"},{status:400});let G=Y.get("file");if(!(G instanceof File))return Response.json({error:"file must be a File"},{status:400});if(G.size>K7)return Response.json({error:"asset too large"},{status:413});let X=Gg[G.type];if(!X)return Response.json({error:`unsupported content-type: ${G.type||"unknown"}`},{status:415});try{let q=Zg(z),Q=EB(iQ(),q);await Yg(Q,{recursive:!0});let B=`${Jg()}.${X}`;return await Bun.write(EB(Q,B),G),Response.json({url:`${Uq}/${q}/${B}`})}catch(q){return Response.json({error:q instanceof Error?q.message:String(q)},{status:500})}}async function Bg(f){let J=f.slice(Uq.length+1),Y=J.indexOf("/");if(Y<0)return Response.json({error:"not found"},{status:404});let z=J.slice(0,Y),G=J.slice(Y+1);if(!qg.test(z)||!Qg.test(G))return Response.json({error:"invalid asset path"},{status:400});let X=iQ(),q=zg(X,z,G);if(q!==EB(X,z,G)||!q.startsWith(`${X}/`))return Response.json({error:"invalid asset path"},{status:400});let Q=G.slice(G.lastIndexOf(".")+1).toLowerCase(),H=Xg[Q];if(!H)return Response.json({error:"invalid asset path"},{status:400});let B=Bun.file(q);if(!await B.exists())return Response.json({error:"not found"},{status:404});return new Response(B,{headers:{"content-type":H,"cache-control":"public, max-age=31536000, immutable","x-content-type-options":"nosniff"}})}async function U7(f,J){if(J.pathname===Uq){if(f.method==="POST")return Hg(f);return Response.json({error:"method not allowed"},{status:405})}if(J.pathname.startsWith(`${Uq}/`)){if(f.method==="GET")return Bg(J.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var Uq="/api/issue-assets",K7=10485760,Gg,Xg,qg,Qg;var D7=k(()=>{lf();Gg={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},Xg={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};qg=/^[a-f0-9]{16}$/,Qg=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function L7(f,J=500){return Response.json({error:f instanceof Error?f.message:String(f)},{status:J})}function M7(f){let J=f instanceof Error?f.message:String(f);if(/^no issue #\d+$/.test(J))return 404;if(J==="repoRoot is required"||J==="repoRoot does not exist"||J==="repoRoot is not a git repository"||J==="missing op"||J==="create requires a non-empty title"||J==="body must be a string"||J==="setStatus requires a numeric id"||J.startsWith("invalid status:")||J==="update requires a numeric id"||J==="title must be a non-empty string"||J==="link requires a numeric id"||J==="link requires a non-empty taskId"||J==="unlink requires a numeric id"||J==="delete requires a numeric id"||J.startsWith("unknown op type:"))return 400;return 500}async function jg(f,J){let Y=J.searchParams.get("repoRoot");if(!Y)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await f.request("issue.list",{repoRoot:Y}))}catch(z){return L7(z,M7(z))}}async function Wg(f,J){let Y;try{Y=await J.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(Y===null||typeof Y!=="object"||Array.isArray(Y))return Response.json({error:"body must be a JSON object"},{status:400});let z=Y;if(typeof z.repoRoot!=="string"||z.repoRoot.length===0)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await f.request("issue.mutate",{repoRoot:z.repoRoot,op:z.op}))}catch(G){return L7(G,M7(G))}}async function F7(f,J,Y){if(J.pathname!=="/api/issues")return null;if(f.method==="GET")return jg(Y,J);if(f.method==="POST")return Wg(Y,f);return Response.json({error:"method not allowed"},{status:405})}function O7(f){return Vg.has(String(f??"").trim().toLowerCase())}function A7(f){try{if(!f)return null;let J=new URL(f);if(J.protocol!=="http:"&&J.protocol!=="https:")return null;return J.hostname}catch{return null}}function Kg(f){let J=A7(f);return J!==null&&O7(J)}function g7(f,J={}){if(!f)return!0;if(Kg(f))return!0;let Y=J.allowedHost?.trim();if(!Y)return!1;let z=A7(f);return z!==null&&z===Y}function R7(f){let J=String(f??"").trim();return J&&!O7(J)?J:void 0}var Vg;var C7=k(()=>{Vg=new Set(["localhost","127.0.0.1","::1","[::1]"])});var Ug,k7;var N7=k(()=>{Ug=["daemon.status","task.list","task.get","task.create","task.archive","task.rename","task.setBranch","task.setVendor","task.delete","task.pin","task.move","task.status","task.reorder","task.ensureMain","task.ensureWorktree","task.setActive","worktree.discoverAdoptable","worktree.adopt"],k7=new Set(Ug)});var xB={};jf(xB,{resolveRepoInit:()=>S7,resolveEngineLaunchInit:()=>sJ});import{existsSync as b7,readFileSync as Dg}from"fs";import{join as Dq}from"path";function Mg(f){return b7(Dq(f,y7))?`sh ${y7}`:void 0}function Fg(f){let J=Dq(f,Lg);if(!b7(J))return;try{let Y=Dg(J,"utf8");return Y.trim().length>0?Y:void 0}catch{return}}function S7(f,J){let Y=f?YH(f):{},z=Mg(J)??Y.initScript,G=Fg(J)??Y.initPrompt;return{initScript:z&&z.trim().length>0?z:void 0,initPrompt:G&&G.trim().length>0?G:void 0}}function Og(f,J){if(f.kind==="none")return;if(f.kind==="explicit")return{source:"explicit",text:f.prompt};let Y=J.initPrompt?.trim();return Y?{source:"repo-init",text:Y}:void 0}function sJ(f,J,Y={kind:"repo-init"}){let z=S7(f,J);return{initScript:z.initScript,firstMessage:Og(Y,z)}}var y7,Lg;var zG=k(()=>{Af();y7=Dq(".kobe","init.sh"),Lg=Dq(".kobe","init-prompt.md")});import{existsSync as I7,readFileSync as Ag}from"fs";function T7(){Mz=null}function gg(){let f=H9();if(I7(f))return{canonical:f,found:f};let J=f.replace(/\.yaml$/,".yml");if(I7(J))return{canonical:f,found:J};return{canonical:f,found:null}}function Lq(){if(Mz)return Mz;let{canonical:f,found:J}=gg();if(!J)return Mz={path:f,exists:!1,doc:null,warnings:[]},Mz;let Y=[],z=null;try{let G=Ag(J,"utf8");z=Bun.YAML.parse(G)}catch(G){let X=G instanceof Error?G.message:String(G);Y.push(`could not read/parse ${J}: ${X}`)}return Mz={path:f,exists:!0,doc:z,warnings:Y},Mz}var Mz=null;var wB=k(()=>{lf()});function GG(f,J){let Y=`alternating [${f}, ${J}] pairs`;return{layout:Y,validateCount:(z)=>z>=2&&z%2===0?null:`needs ${Y} (an even number of chords \u2014 got ${z})`}}function Sg(f,J){let Y=f.trim().toLowerCase();if(!Y)return{error:"empty chord"};let z=Y.split("+"),G=z.pop()??"";if(G===""&&z.length>0){if(G="+",z[z.length-1]==="")z.pop()}if(!G)return{error:`"${f}": no key after the modifiers`};let X=new Set;for(let H of z){let B=kg[H];if(!B)return{error:`"${f}": unknown modifier "${H}" (use ctrl / cmd / alt / shift)`};X.add(B)}if(G=Ng[G]??G,X.has("shift")&&G.length===1&&!J?.allowShiftCharacter)return{error:`"${f}": shift+<character> can never match \u2014 terminals deliver shift+letter as a plain character, not a modifier event`};let q=bg.filter((H)=>X.has(H)).join("+"),Q=q?`${q}+${G}`:G;if(G.length>1&&!yg.has(G))return{chord:Q,warning:`"${f}": unrecognized key name "${G}" \u2014 the chord may never fire`};return{chord:Q}}function Mq(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function Ig(f){if(f==="darwin")return["darwin","macos","mac"];if(f==="win32")return["win32","windows"];return[f]}function Tg(f){if(!Mq(f))return null;let J=f.bindings;if(Mq(J))return J;return f}function Fq(f,J,Y){let z=[];if(f===null||f===void 0)return{entries:[],warnings:z};if(!Mq(f))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let G=new Map,X=[];if(f.bindings!==void 0)if(Mq(f.bindings))X.push(f.bindings);else z.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let q of Ig(J)){let Q=f[q];if(Q===void 0)continue;let H=Tg(Q);if(H)X.push(H);else z.push(`\`${q}:\` must be a mapping (or contain a \`bindings:\` mapping)`)}for(let q of X)for(let[Q,H]of Object.entries(q)){if(H===null||H===!1||Array.isArray(H)&&H.length===0){G.set(Q,[]);continue}let B=typeof H==="string"?[H]:Array.isArray(H)?H:null;if(!B){z.push(`${Q}: expected a chord string, a list of chords, or null \u2014 got ${typeof H}`);continue}let V=[],j=!1;for(let U of B){if(typeof U!=="string"){z.push(`${Q}: chord entries must be strings`),j=!0;continue}let L=Sg(U,Y?.chordOptsFor?.(Q));if("error"in L){z.push(`${Q}: ${L.error}`),j=!0;continue}if(L.warning)z.push(`${Q}: ${L.warning}`);if(!V.includes(L.chord))V.push(L.chord)}if(V.length===0&&j){z.push(`${Q}: no valid chords \u2014 keeping the default`);continue}G.set(Q,V)}return{entries:Array.from(G,([q,Q])=>({id:q,keys:Q})),warnings:z}}function ug(f,J){return f===J||f==="global"||J==="global"}function u7(f,J){let Y=[],z=[];for(let G of J){let X=f.find((j)=>j.id===G.id);if(!X){Y.push(`${G.id}: unknown binding id (press F1 in kobe for the full list)`);continue}let q=hB[G.id];if(q){Y.push(`${G.id}: not customizable \u2014 ${q}`);continue}if(X.keys.length===0){Y.push(`${G.id}: not customizable \u2014 the key is handled outside the keymap (doc-only row)`);continue}let Q=Rg[G.id];if(Q&&G.keys.length>0){let j=Q.validateCount(G.keys.length);if(j){Y.push(`${G.id}: ${j} \u2014 keeping the default`);continue}}let H=G.keys.filter((j)=>{if(j.length===1&&Cg.has(X.scope))return Y.push(`${G.id}: "${j}" dropped \u2014 a bare character on a ${X.scope}-scope binding would steal typed input (add a modifier)`),!1;return!0});if(H.length===0&&G.keys.length>0){Y.push(`${G.id}: no chords survived validation \u2014 keeping the default`);continue}if(Q&&H.length!==G.keys.length){Y.push(`${G.id}: a dropped chord would shift the slot layout (${Q.layout}) \u2014 keeping the default`);continue}let B=X.keys,V=X;if(V.keys=H,X.hint)if(H.length===0)V.hint=void 0;else X.hint.keys=H.join("/");z.push({id:G.id,keys:H,defaultKeys:B})}for(let G of z)for(let X of G.keys){let q=f.find((Q)=>Q.id===G.id);if(!q)continue;for(let Q of f){if(Q.id===G.id)continue;if(!Q.keys.includes(X))continue;if(!ug(q.scope,Q.scope))continue;Y.push(`${G.id}: "${X}" also fires ${Q.id} (${Q.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:z,warnings:Y}}var hB,Rg,Cg,kg,Ng,yg,bg;var Oq=k(()=>{hB={"focus.numeric":"pane focus is positional (h/j/k/l \u2192 pane) and mirrors the tmux-layer ctrl+hjkl bindings \u2014 rebind tmux.focus instead","sidebar.goto":"gg vs Shift+G is discriminated via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't carry both halves","sidebar.pin":"fires on Shift+P via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't work","sidebar.localMerge":"fires on Shift+M via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't work","chat.question.nav":"the question picker has no live registration site (display-only row) \u2014 rebinding would change Help without changing behavior","chat.question.pick-number":"digits map to options positionally and the question picker has no live registration site (display-only row)"};Rg={"sidebar.nav":GG("down","up"),"files.nav":GG("down","up"),"sidebar.search.nav":GG("down","up"),"files.hierarchy":GG("collapse","expand"),"sidebar.view":GG("previous view","next view"),"files.tab":GG("previous tab","next tab")},Cg=new Set(["global","workspace","terminal"]),kg={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},Ng={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},yg=new Set(["up","down","left","right","pageup","pagedown","home","end","insert","delete","backspace","tab","space","escape","enter","return",...Array.from({length:12},(f,J)=>`f${J+1}`)]),bg=["ctrl","cmd","alt","shift"]});function XG(f){return f in E7}function Az(f,J){let Y=f.split("+"),z=Y.pop()??"";if(z===""&&Y.length>0){if(z="+",Y[Y.length-1]==="")Y.pop()}let G=new Set(Y);if(G.has("cmd"))return{error:`"${f}": the Command key never reaches tmux \u2014 use ctrl/alt/shift`};let X;if(z.length===1)X=G.has("shift")?z.toUpperCase():z;else{let H=xg[z];if(!H)return{error:`"${f}": tmux can't bind the key "${z}"`};X=H}let q=/^f\d+$/.test(z);if(G.size===0&&!q&&!J?.allowBare)return{error:`"${f}": tmux session keys are no-prefix root bindings live in every pane \u2014 a bare key would shadow typing (add a modifier, or use an F-key)`};let Q="";if(G.has("ctrl"))Q+="C-";if(G.has("alt"))Q+="M-";if(G.has("shift"))Q+="S-";return{key:Q+X}}function w7(){let f={};for(let[Y,z]of Object.entries(Oz)){let G=Az(z,{allowBare:XG(Y)});if("error"in G)throw Error(`default tmux chord for ${Y} failed to translate: ${G.error}`);f[Y]={chord:z,key:G.key}}let J=kY.map((Y)=>{let z=Az(Y);if("error"in z)throw Error(`default tmux focus chord ${Y} failed to translate`);return{chord:Y,key:z.key}});return{binds:f,focus:J,overridden:new Set,warnings:[]}}function PB(f){let J=w7(),Y=new Set;for(let z of f){if(!z.id.startsWith("tmux."))continue;if(z.id===SJ){if(z.keys.length===0){J.focus=[null,null,null,null],Y.add(SJ);continue}if(z.keys.length!==kY.length){J.warnings.push(`${SJ}: needs exactly 4 chords in order left/down/up/right (got ${z.keys.length}) \u2014 keeping the default`);continue}let Q=[],H=!0;for(let B of z.keys){let V=Az(B);if("error"in V){J.warnings.push(`${SJ}: ${V.error} \u2014 keeping the default`),H=!1;break}Q.push({chord:B,key:V.key})}if(!H)continue;J.focus=Q,Y.add(SJ);continue}if(!(z.id in Oz)){J.warnings.push(`${z.id}: unknown tmux binding id`);continue}let G=z.id;if(z.keys.length===0){J.binds[G]=null,Y.add(G);continue}if(z.keys.length>1)J.warnings.push(`${G}: tmux bindings take ONE chord \u2014 using "${z.keys[0]}", ignoring the rest`);let X=z.keys[0],q=Az(X,{allowBare:XG(G)});if("error"in q){J.warnings.push(`${G}: ${q.error} \u2014 keeping the default`);continue}if(X!==Oz[G])Y.add(G);J.binds[G]={chord:X,key:q.key}}return J.overridden=Y,J}function vB(f){return f.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function h7(){Fz=null}function Aq(){if(Fz)return Fz;let f=Lq();if(!f.exists||f.doc===null)return Fz=w7(),Fz;let J=Fq(f.doc,process.platform,{chordOptsFor:vB}),Y=J.warnings.filter((G)=>G.startsWith("tmux.")),z=PB(J.entries);z.warnings=[...Y,...z.warnings];for(let G of z.warnings)console.warn(`[kobe/keybindings] ${G}`);return Fz=z,Fz}var Eg,E7,x7,Oz,SJ="tmux.focus",kY,xg,Fz=null;var gq=k(()=>{wB();Oq();Eg={"tmux.detach":"ctrl+q","tmux.tab.new":"ctrl+t","tmux.tab.chooseEngine":"ctrl+shift+t","tmux.tab.prev":"ctrl+[","tmux.tab.next":"ctrl+]","tmux.tab.close":"ctrl+w","tmux.tab.rename":"f2"},E7={"tmux.layout.workspaceSplit":"s","tmux.layout.workspaceClose":"x","tmux.layout.workspaceReset":"r","tmux.layout.tasksToggle":"a","tmux.layout.opsToggle":"o","tmux.layout.terminalToggle":"z","tmux.layout.zenToggle":"space"},x7=["F6","F7","F8","F9","F10","F11"],Oz={...Eg,...E7};kY=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],xg={up:"Up",down:"Down",left:"Left",right:"Right",pageup:"PgUp",pagedown:"PgDn",home:"Home",end:"End",insert:"IC",delete:"DC",backspace:"BSpace",tab:"Tab",space:"Space",escape:"Escape",enter:"Enter",return:"Enter",...Object.fromEntries(Array.from({length:12},(f,J)=>[`f${J+1}`,`F${J+1}`]))}});async function WX(f,J){let Y=null;for(let G=0;G<24;G++){let X=await az(f);if(X){if(!J)return{pane:X,ready:!0};let q=(await $z(X)).trim();if(q.length>0&&q===Y)return{pane:X,ready:!0};Y=q}await P7(250)}return{pane:await az(f)||await YB(f),ready:!1}}async function VX(f,J){let Y=`kobe-api-${f.replace(/[^A-Za-z0-9]/g,"")}`;await h0(["set-buffer","-b",Y,"--",J]),await h0(["paste-buffer","-p","-d","-b",Y,"-t",f]),await P7(wg),await zX(f,"Enter")}async function v7(f,J){let{pane:Y}=await WX(f,!0);if(!Y)return;await VX(Y,J.text)}var P7=(f)=>new Promise((J)=>setTimeout(J,f)),wg=150;var Rq=k(()=>{Tf()});function m7(f,J){if(f===null)return{kind:"create",reason:"no session with this name \u2014 build fresh"};let Y=f.worktree===J.cwd,z=!J.vendor||f.vendor===J.vendor;if(f.claudePaneAlive&&Y&&z)return{kind:"reuse",reason:"healthy: engine pane alive, worktree + vendor match"};if(Y&&!z&&J.hasEngineCommand)return{kind:"respawn-engine",reason:`vendor drift: session tagged ${f.vendor===""?"<untagged>":`"${f.vendor}"`}, task wants "${J.vendor}" \u2014 relaunch engine pane in place (KOB-232)`};if(Y&&z&&f.windowCount>1)return{kind:"reuse",reason:"active window's engine pane is gone but sibling chat tabs exist \u2014 reuse rather than drop them"};if(!Y)return{kind:"rebuild",reason:f.worktree===""?"legacy session with no @kobe_worktree tag \u2014 rebuild in the right place":`worktree drift: session tagged "${f.worktree}", task wants "${J.cwd}" \u2014 rebuild`};if(!z)return{kind:"rebuild",reason:"vendor drift but no engine command to respawn with \u2014 rebuild"};return{kind:"rebuild",reason:"single-window session whose engine pane was destroyed \u2014 rebuild"}}var c7;var n7=k(()=>{Qq();Hq();Bq();jq();Wq();Vq();Kq();c7={claude:oz,conductor:sz,nord:ez,opencode:fG,dracula:tz,tokyonight:YG,"osaka-jade":JG}});function hg(f){let J=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.exec(f);if(!J)return null;let Y=J[1];if(Y.length===3){let[z,G,X]=Y;return`#${z}${z}${G}${G}${X}${X}`.toLowerCase()}return`#${Y.slice(0,6)}`.toLowerCase()}function d7(f,J,Y="dark"){let z=f.defs??{};function G(q,Q){if(typeof q==="string"){if(q==="transparent"||q==="none")return null;if(q.startsWith("#"))return hg(q);if(Q.includes(q))return null;let B=z[q]??f.theme[q];if(B===void 0)return null;return G(B,[...Q,q])}if(!q||typeof q!=="object")return null;let H=q[Y];return typeof H==="string"?G(H,Q):null}let X=f.theme[J];if(X===void 0)return null;return G(X,[J])}function Cq(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function kq(f){if(!Cq(f))return{ok:!1,reason:"theme must be a JSON object at the top level"};let J=f;if(!("theme"in J))return{ok:!1,reason:"missing required key `theme`"};let Y=J.theme;if(!Cq(Y))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in J&&J.defs!==void 0){if(!Cq(J.defs))return{ok:!1,reason:"`defs` must be an object map"};for(let[z,G]of Object.entries(J.defs))if(typeof G!=="string")return{ok:!1,reason:`defs.${z} must be a string (hex like "#abc" or a ref name)`}}for(let[z,G]of Object.entries(Y)){if(typeof G==="string")continue;if(!Cq(G))return{ok:!1,reason:`theme.${z} must be a string or a { dark, light } object (got ${G===null?"null":Array.isArray(G)?"array":typeof G})`};let X=G;if(typeof X.dark!=="string")return{ok:!1,reason:`theme.${z}.dark must be a string`};if(typeof X.light!=="string")return{ok:!1,reason:`theme.${z}.light must be a string`}}if("$schema"in J&&J.$schema!==void 0&&typeof J.$schema!=="string")return{ok:!1,reason:"`$schema` must be a string when present"};return{ok:!0,theme:J}}var mB=()=>{};import{readFileSync as Pg,readdirSync as vg}from"fs";import{join as i7}from"path";function ZG(){return i7(ef(),"themes")}function KX(){let f=ZG(),J;try{J=vg(f)}catch{return[]}let Y=[];for(let z of J){if(!z.endsWith(".json"))continue;let G=i7(f,z),X;try{let H=Pg(G,"utf8");X=JSON.parse(H)}catch(H){let B=H instanceof Error?H.message:String(H);console.warn(`[kobe] skipping user theme ${G}: invalid JSON \u2014 ${B}`);continue}let q=kq(X);if(!q.ok){console.warn(`[kobe] skipping user theme ${G}: ${q.reason}`);continue}let Q=z.slice(0,-5);Y.push({name:Q,theme:q.theme})}return Y}var Nq=k(()=>{lf();mB()});import{readFileSync as mg}from"fs";function ng(){try{let f=JSON.parse(mg(c1(),"utf8")),J=typeof f.activeTheme==="string"&&f.activeTheme?f.activeTheme:"claude",Y=typeof f.focusAccent==="string"&&cg.includes(f.focusAccent)?f.focusAccent:"primary";return{themeName:J,focusAccentSlot:Y,enabled:f.tmuxChromeTheme!=="off"&&f.tmuxBorderTheme!=="off"}}catch{return{themeName:"claude",focusAccentSlot:"primary",enabled:!0}}}function dg(f){return KX().find((Y)=>Y.name===f)?.theme??c7[f]??null}function WJ(f,...J){for(let Y of J){let z=d7(f,Y);if(z)return z}return null}function l7(f,J){let Y=WJ(f,"text"),z=WJ(f,"background"),G=WJ(f,"textMuted","text"),X=WJ(f,"backgroundPanel","background"),q=WJ(f,"backgroundElement","backgroundPanel","background"),Q=WJ(f,"backgroundMenu","backgroundElement","backgroundPanel","background"),H=WJ(f,"selectedListItemText","background"),B=WJ(f,J,"primary","borderActive","border","text");return{border:WJ(f,"border","text"),activeBorder:B,statusBg:X,statusFg:G,statusMutedFg:G,windowFg:G,currentWindowBg:q,currentWindowFg:B,activityFg:WJ(f,"info","primary","text"),bellFg:WJ(f,"warning","error","primary","text"),messageBg:Q,messageFg:Y,messageCommandFg:B,modeBg:B,modeFg:H??z}}function $1(f){let J=[];if(f.bg)J.push(`bg=${f.bg}`);if(f.fg)J.push(`fg=${f.fg}`);if(J.length===0)return null;if(f.attrs)J.push(...f.attrs);return J.join(",")}function $7(f){let J=$1({bg:f.statusBg,fg:f.statusFg}),Y=$1({bg:f.statusBg,fg:f.statusMutedFg}),z=$1({bg:f.statusBg,fg:f.windowFg});return[{key:"border",option:"pane-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:$1({fg:f.border})},{key:"active",option:"pane-active-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:$1({fg:f.activeBorder})},{key:"status",option:"status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:J},{key:"status-left",option:"status-left-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Y},{key:"status-right",option:"status-right-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Y},{key:"window",option:"window-status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:z},{key:"current-window",option:"window-status-current-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.currentWindowBg,fg:f.currentWindowFg,attrs:["bold"]})},{key:"activity-window",option:"window-status-activity-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.statusBg,fg:f.activityFg})},{key:"bell-window",option:"window-status-bell-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.statusBg,fg:f.bellFg,attrs:["bold"]})},{key:"last-window",option:"window-status-last-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.statusBg,fg:f.statusFg})},{key:"message",option:"message-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.messageBg,fg:f.messageFg})},{key:"message-command",option:"message-command-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.messageBg,fg:f.messageCommandFg,attrs:["bold"]})},{key:"mode",option:"mode-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.modeBg,fg:f.modeFg})},{key:"display-panes",option:"display-panes-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:f.border},{key:"display-panes-active",option:"display-panes-active-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:f.activeBorder}]}function ig(f){let J=new Set(f.marker.split(",").map((X)=>X.trim()).filter(Boolean)),Y=[],z=[];for(let X of $7(f.hexes))if(X.value){if((f.current[X.key]??"")!==X.value)Y.push(["set-option",X.setFlag,X.option,X.value]);z.push(X.key)}else if(J.has(X.key))Y.push(["set-option",X.unsetFlag,X.option]);let G=z.join(",");if(G!==f.marker)Y.push(G?["set-option","-g",cB,G]:["set-option","-gu",cB]);return Y}async function a7(f){let{code:J,stdout:Y}=await d0(f);return J===0?Y.trim():""}async function gz(){try{let f=ng(),J=f.enabled?dg(f.themeName):null,Y=J?l7(J,f.focusAccentSlot):l7({theme:{}},f.focusAccentSlot),z=$7(Y),[G,...X]=await Promise.all([a7(["show-options","-gqv",cB]),...z.map((H)=>a7(["show-options",H.showFlag,H.option]))]),q=Object.fromEntries(z.map((H,B)=>[H.key,X[B]??""])),Q=ig({marker:G,current:q,hexes:Y});if(Q.length>0)await Pf(Q)}catch{}}var cB="@kobe_border_theme",cg;var yq=k(()=>{lf();Tf();n7();Nq();cg=["primary","success","info"]});function r7(){return nf()[bq]!==!1}var bq="zen.keepTasks";var nB=k(()=>{pY()});var Sq={};jf(Sq,{recordGen:()=>NY,isLatestGen:()=>t7,genAgeMs:()=>og,coalesceLayoutWork:()=>sg,RESIZE_GUARD_MS:()=>_g,LAYOUT_COALESCE_MS:()=>o7});import{createHash as lg,randomUUID as ag}from"crypto";import{mkdirSync as $g,readFileSync as p7,renameSync as rg,writeFileSync as pg}from"fs";import{join as _7}from"path";function s7(){return _7(ef(),"layout-coord")}function dB(f,J){let Y=lg("sha1").update(f).digest("hex").slice(0,16);return _7(s7(),`${Y}.${J}`)}function NY(f,J){let Y=ag();try{$g(s7(),{recursive:!0});let z=dB(f,J),G=`${z}.${Y}.tmp`;pg(G,`${Date.now()}
56
+ ${Y}`),rg(G,z)}catch{}return Y}function t7(f,J,Y){try{return p7(dB(f,J),"utf8").split(`
57
+ `)[1]?.trim()===Y}catch{return!0}}function og(f,J,Y=Date.now()){try{let z=Number.parseInt(p7(dB(f,J),"utf8").split(`
58
+ `)[0]??"",10);return Number.isFinite(z)?Y-z:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function sg(f,J,Y,z=o7){let G=NY(f,J);if(z>0)await new Promise((X)=>setTimeout(X,z));if(!t7(f,J,G))return;await Y()}var o7=120,_g=400;var qG=k(()=>{lf()});function eg(f){let J=[];for(let Y of f.split(`
59
+ `)){let z=Y.trim();if(!z)continue;let[G,X,q,Q,H]=z.split("\t");if(!G||!X||!q)continue;let B=Number.parseInt(H?.trim()??"",10);J.push({windowId:G.trim(),paneId:X.trim(),role:q.trim(),version:Q?.trim()??"",...Number.isFinite(B)?{paneWidth:B}:{}})}return J}function e7(f,J){let Y=new Map;for(let G of f){let X=Y.get(G.windowId)??[];X.push(G),Y.set(G.windowId,X)}let z=[];for(let G of Y.values()){let X=G.find((B)=>B.role==="claude")?.paneId,q=G.find((B)=>B.role==="tasks"),Q=G.find((B)=>B.role==="ops");if(q&&(J.force||q.version!==J.currentVersion))z.push({role:"tasks",paneId:q.paneId});let H=J.force?!0:X&&(J.vendorChanged||Q?.version!==J.currentVersion);if(Q&&H)z.push({role:"ops",paneId:Q.paneId,claudePaneId:X??null})}return z}async function iB(f){let{code:J,stdout:Y}=await d0(["list-panes","-s","-t",`=${f}`,"-F",tg]);if(J!==0)return null;return eg(Y)}function f5(f,J){let Y=Cf(),z=_f(),G=[];for(let X of f){let q=X.role==="tasks"?VY(Y,{initialTaskId:J.taskId}):hz({cwd:J.cwd,taskId:J.taskId,claudePaneId:X.claudePaneId,cliInvocation:Y,vendor:J.vendor});G.push(["respawn-pane","-k","-t",X.paneId,"-c",If(J.cwd),R1(z+q)],["set-option","-p","-t",X.paneId,"@kobe_role",X.role],["set-option","-p","-t",X.paneId,VJ,s0])}return G}async function J5(f,J,Y,z,G){let X=await iB(f);if(!X)return!1;let q=X.filter((B)=>B.role==="claude");if(q.length===0)return!1;let Q=If(J),H=[];for(let B of q){let V=rz(Y,G),j=R1(dz(g1(V.argv),z,J));H.push(["respawn-pane","-k","-c",Q,"-t",B.paneId,j]),H.push(V.sessionId?["set-window-option","-t",B.paneId,yJ,V.sessionId]:["set-window-option","-u","-t",B.paneId,yJ])}return await Pf(H),!0}async function Y5(){let f=await MY([aJ,Yz,$J]),J=Number.parseInt(f[aJ]??"",10),Y=Number.isFinite(J)&&J>0?Jz(J):eY,z=fR({widthPct:rJ(Number.parseInt(f[Yz]??"",10)),heightPct:rJ(Number.parseInt(f[$J]??"",10))});return{tasksWidth:Y,rcArgs:z}}function fR(f){let J=[];if(f.widthPct!==null)J.push("-x",`${f.widthPct}%`);if(f.heightPct!==null)J.push("-y",`${f.heightPct}%`);return J}async function z5(){return(await Y5()).rcArgs}async function lB(f,J={}){let{tasksWidth:Y,rcArgs:z}=await Y5(),G=await iB(f);if(!G)return{rows:null,commands:[]};let X=[];for(let q of G)if(q.role==="tasks"&&(J.force||q.paneWidth!==Y))X.push(["resize-pane","-t",q.paneId,"-x",`${Y}`]);if(z.length>0){for(let q of G)if(q.role==="ops")X.push(["resize-pane","-t",q.paneId,...z])}return{rows:G,commands:X}}async function QG(f,J){NY(f,"resize");let{rows:Y,commands:z}=await lB(f);if(!Y)return;let G=[...z];if(J)G.push(...f5(e7(Y,{currentVersion:s0,force:!1,vendorChanged:J.vendorChanged}),J));if(G.length>0)await Pf(G)}async function G5(f){if(!await Hf(f))return;await QG(f)}async function UX(f){let{code:J,stdout:Y}=await d0(["list-panes","-t",`=${f}`,"-F",`#{@kobe_role} #{pane_width} #{pane_height} #{window_width} #{window_height} #{window_zoomed_flag} #{${YJ}} #{${A1}}`]);if(J!==0)return;let z=Y.split(`
60
+ `).map((B)=>B.split("\t")).filter((B)=>(B[0]?.trim()??"")!=="");if(z.length===0)return;if(z.some((B)=>B[5]?.trim()==="1"))return;if(z.some((B)=>(B[6]?.trim()??"")!==""))return;if(z.some((B)=>(B[7]?.trim()??"")!==""))return;let G=Number.parseInt(z[0][3]?.trim()??"",10),X=Number.parseInt(z[0][4]?.trim()??"",10),q=[],Q=z.find(([B])=>B?.trim()==="tasks");if(Q){let B=Number.parseInt(Q[1]?.trim()??"",10);if(Number.isFinite(B)&&B>0)q.push(["set-option","-s",aJ,`${Jz(B)}`])}let H=z.find(([B])=>B?.trim()==="ops");if(H&&Number.isFinite(G)&&G>0&&Number.isFinite(X)&&X>0){let B=Number.parseInt(H[1]?.trim()??"",10),V=Number.parseInt(H[2]?.trim()??"",10),j=Number.isFinite(B)?rJ(100*B/G):null,U=Number.isFinite(V)?rJ(100*V/X):null;if(j!==null)q.push(["set-option","-s",Yz,`${j}`]);if(U!==null)q.push(["set-option","-s",$J,`${U}`])}if(q.length>0)await Pf(q)}function JR(f){let J=f.split(`
61
+ `).map((z)=>z.split("\t")).filter((z)=>(z[0]?.trim()??"")!=="");if(J.length===0)return!1;if(J.some((z)=>z[1]?.trim()==="1"))return!1;if(J.some((z)=>(z[2]?.trim()??"")!==""))return!1;if(J.some((z)=>(z[3]?.trim()??"")!==""))return!1;let Y=new Set(J.map((z)=>z[0]?.trim()));return Y.has("tasks")&&Y.has("ops")}async function X5(f){let{code:J,stdout:Y}=await d0(["list-panes","-t",`=${f}`,"-F",`#{@kobe_role} #{window_zoomed_flag} #{${YJ}} #{${A1}}`]);if(J!==0||!JR(Y))return;await UX(f)}async function HG(f){let J=await N1(f,["@kobe_worktree","@kobe_task","@kobe_vendor"]),Y=J["@kobe_worktree"]||process.cwd(),z=J["@kobe_task"]||void 0,G=J["@kobe_vendor"]||void 0,X=await iB(f);if(!X)return;let q=f5(e7(X,{currentVersion:s0,force:!0}),{cwd:Y,taskId:z,vendor:G});if(q.length>0)await Pf(q);await gz()}var VJ="@kobe_pane_version",tg;var DX=k(()=>{lJ();x1();ZJ();Tf();zJ();yq();D1();Qz();qG();tg=`#{window_id} #{pane_id} #{@kobe_role} #{${VJ}} #{pane_width}`});function zR(f){let J=[];for(let Y of f.split(`
62
+ `)){let z=Y.trim();if(!z)continue;let[G,X,q,Q,H,B,V]=z.split("\t");if(!G)continue;let j=Number.parseInt(Q??"",10),U=Number.parseInt(H??"",10),L=Number.parseInt(B??"",10),O=Number.parseInt(V??"",10);J.push({paneId:G.trim(),role:X?.trim()??"",active:q?.trim()==="1",paneWidth:Number.isFinite(j)?j:0,paneHeight:Number.isFinite(U)?U:0,windowWidth:Number.isFinite(L)?L:0,windowHeight:Number.isFinite(O)?O:0})}return J}function GR(f){let J=f.find((z)=>z.role===fz);if(!J)return{kind:"missing-engine"};let Y=f.filter((z)=>z.role===nG);if(Y.length+1>=MH)return{kind:"maxed"};if(Y.length===0)return{kind:"split",targetPane:J.paneId,direction:"-h"};if(Y.length===1)return{kind:"split",targetPane:Y[0]?.paneId??J.paneId,direction:"-v"};return{kind:"split",targetPane:J.paneId,direction:"-v"}}function aB(f){return f.find((J)=>J.role===JJ)??f.find((J)=>J.role==="")}function XR(f){return 100-(rJ(f??Number.NaN)??lG)}function ZR(f){let J=Number.parseInt(f??"",10);return Number.isFinite(J)&&J>0?J:void 0}async function h1(f,J){let Y=J?.trim()||`=${f}`,{code:z,stdout:G}=await d0(["list-panes","-t",Y,"-F",YR]);return z===0?zR(G):null}async function qR(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_active}\t#{window_id}"]);if(J!==0)return"";for(let z of Y.split(`
63
+ `)){let[G,X]=z.split("\t");if(G?.trim()==="1"&&X?.trim())return X.trim()}return""}async function tJ(f,J){let{code:Y,stdout:z}=await d0(["show-options","-wqv","-t",f,J]);return Y===0?z.trim():""}async function $B(f,J,Y){await h0(["set-window-option","-t",f,J,Y])}async function yY(f,J){await h0(["set-window-option","-u","-t",f,J])}async function rB(f){let{code:J,stdout:Y}=await d0(["display-message","-p","-t",f,"#{pane_id}"]);return J===0&&Y.trim()===f}async function Nf(f,J){await h0(["display-message","-t",f,J])}async function Iq(f){let J=await N1(f,["@kobe_worktree","@kobe_task","@kobe_vendor"]);return{cwd:J["@kobe_worktree"]||process.cwd(),taskId:J["@kobe_task"]||void 0,vendor:J["@kobe_vendor"]||void 0}}function QR(f){let J=Cf(),Y=_f();return R1(Y+hz({cwd:f.cwd,taskId:f.taskId,claudePaneId:f.enginePaneId,cliInvocation:J,vendor:f.vendor}))}async function HR(f,J){return J?.trim()||await qR(f)}async function BR(f,J){let Y=await h1(f,J);if(!Y)return;let z=GR(Y);if(z.kind==="missing-engine"){await Nf(J,"kobe: no engine pane in this window");return}if(z.kind==="maxed"){await Nf(J,`kobe: workspace split limit is ${MH} panes`);return}let{cwd:G}=await Iq(f),{code:X,stdout:q}=await d0(["split-window",z.direction,"-t",z.targetPane,"-l","50%","-c",If(G),"-P","-F","#{pane_id}",R1("true")]),Q=q.trim();if(X!==0||!Q)return;await Pf([["set-option","-p","-t",Q,"@kobe_role",nG],["select-pane","-t",Q]])}async function jR(f,J){let Y=await h1(f,J);if(!Y)return;let z=Y.filter((q)=>q.role===nG);if(z.length===0){await Nf(J,"kobe: no workspace split to close");return}let X=z.find((q)=>q.active)??z[z.length-1];if(!X)return;await h0(["kill-pane","-t",X.paneId])}async function WR(f,J){let Y=await h1(f,J);if(!Y)return;let z=Y.filter((G)=>G.role===nG);if(z.length===0){await Nf(J,"kobe: no workspace splits to reset");return}await Pf(z.map((G)=>["kill-pane","-t",G.paneId]))}async function Z5(){let f=await MY([aJ]);return Jz(ZR(f[aJ])??eY)}async function VR(f){let{cwd:J,taskId:Y}=await Iq(f),z=Cf(),G=_f();return{cwd:J,command:R1(G+VY(z,{initialTaskId:Y}))}}async function q5(f,J){let Y=await h1(f,J);if(!Y)return;let z=Y.find((M)=>M.role===fJ);if(z){await h0(["kill-pane","-t",z.paneId]);return}let G=aB(Y),X=Y.find((M)=>M.role===fz);if(!X){await Nf(J,"kobe: cannot restore file pane in this layout");return}let{cwd:q,taskId:Q,vendor:H}=await Iq(f),B=QR({cwd:q,taskId:Q,vendor:H,enginePaneId:X.paneId}),V=G?["split-window","-v","-b","-t",G.paneId,"-l",`${await KR()}%`,"-c",If(q),"-P","-F","#{pane_id}",B]:["split-window","-h","-t",X.paneId,"-l",`${await pB()}%`,"-c",If(q),"-P","-F","#{pane_id}",B],{code:j,stdout:U}=await d0(V),L=U.trim();if(j!==0||!L)return;let O=[["set-option","-p","-t",L,"@kobe_role",fJ],["set-option","-p","-t",L,VJ,s0]];if(G?.role==="")O.push(["set-option","-p","-t",G.paneId,"@kobe_role",JJ]);await Pf(O)}async function KR(){let f=await MY([$J]);return rJ(Number.parseInt(f[$J]??"",10))??lG}async function pB(){let f=await MY([Yz]);return rJ(Number.parseInt(f[Yz]??"",10))??100-gZ}async function Q5(){let f=await MY([$J]);return XR(Number.parseInt(f[$J]??"",10))}async function UR(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_index}"]);if(J!==0)return new Set;return new Set(Y.split(`
64
+ `).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)))}async function H5(f,J){let Y=await UR(f),z=ZW(J);while(Y.has(z))z++;return z}async function B5(f){let J=iG(f);if(await Hf(J))return J;return await h0(["new-session","-d","-s",J,"-n","hidden-panes","-c",If(process.cwd()),"while :; do sleep 3600; done"]),J}async function _B(f){let J=iG(f);if(!await Hf(J))return;let{code:Y,stdout:z}=await d0(["list-panes","-s","-t",`=${J}`,"-F","#{@kobe_role}"]);if(Y!==0)return;if(!z.split(`
65
+ `).some((X)=>{let q=X.trim();return q===JJ||q===i1}))await h0(["kill-session","-t",`=${J}`])}async function DR(f,J){await j5(f,J,YJ)}async function LR(f,J){await j5(f,J,A1)}async function j5(f,J,Y){let z=await tJ(J,Y);if(!z)return;if(await rB(z))await h0(["kill-pane","-t",z]);await yY(J,Y)}async function MR(f,J){await DR(f,J),await LR(f,J),await _B(f)}function W5(f){return f.find((J)=>J.role===fz)??f[0]}async function oB(f,J,Y){let z=W5(Y);if(!z)return await Nf(J,"kobe: cannot restore Tasks pane in this layout"),!1;let G=await Z5(),{cwd:X,command:q}=await VR(f),{code:Q,stdout:H}=await d0(["split-window","-h","-b","-t",z.paneId,"-l",`${G}`,"-c",If(X),"-P","-F","#{pane_id}",q]),B=H.trim();if(Q!==0||!B)return!1;return await Pf([["set-option","-p","-t",B,"@kobe_role",i1],["set-option","-p","-t",B,VJ,s0],["select-pane","-t",B]]),await yY(J,A1),await Nf(J,"kobe: Tasks pane restored"),!0}async function V5(f,J,Y){let z=await B5(f),G=await H5(z,J),{code:X,stdout:q}=await d0(["break-pane","-d","-s",Y.paneId,"-t",`${z}:${G}`,"-P","-F","#{pane_id}"]),Q=q.trim()||Y.paneId;if(X!==0||!Q){await Nf(J,"kobe: could not hide Tasks pane");return}await $B(J,A1,Q),await Nf(J,"kobe: Tasks pane hidden")}async function sB(f,J,Y){let z=await h1(f,J);if(!z)return;if(!await rB(Y)){await yY(J,A1);let q=z.find((Q)=>Q.role===i1);if(q){await h0(["select-pane","-t",q.paneId]);return}await oB(f,J,z);return}let G=W5(z);if(!G){await Nf(J,"kobe: cannot restore Tasks pane in this layout");return}if(await h0(["join-pane","-h","-b","-s",Y,"-t",G.paneId,"-l",`${await Z5()}`])!==0){await Nf(J,"kobe: could not restore Tasks pane");return}await Pf([["set-option","-p","-t",Y,"@kobe_role",i1],["set-option","-p","-t",Y,VJ,s0],["select-pane","-t",Y]]),await yY(J,A1),await _B(f),await Nf(J,"kobe: Tasks pane restored")}async function FR(f,J){let Y=await tJ(J,A1);if(Y){await sB(f,J,Y);return}let z=await h1(f,J);if(!z)return;let G=z.find((X)=>X.role===i1);if(G){await V5(f,J,G);return}await oB(f,J,z)}async function OR(f,J){let Y=await tJ(J,A1);if(Y){await sB(f,J,Y);return}let z=await h1(f,J);if(!z)return;let G=z.find((X)=>X.role===i1);if(G){await h0(["select-pane","-t",G.paneId]);return}await oB(f,J,z)}async function K5(f,J,Y){if(Y.role==="")await h0(["set-option","-p","-t",Y.paneId,"@kobe_role",JJ]);let z=await B5(f),G=await H5(z,J),{code:X,stdout:q}=await d0(["break-pane","-d","-s",Y.paneId,"-t",`${z}:${G}`,"-P","-F","#{pane_id}"]),Q=q.trim()||Y.paneId;if(X!==0||!Q){await Nf(J,"kobe: could not hide terminal pane");return}await $B(J,YJ,Q),await Nf(J,"kobe: Terminal pane hidden")}async function U5(f,J,Y){let z=Y.find((V)=>V.role===fJ),G=Y.find((V)=>V.role===fz);if(!z&&!G)return await Nf(J,"kobe: cannot restore terminal pane in this layout"),!1;let{cwd:X}=await Iq(f),q=z?["split-window","-v","-t",z.paneId,"-l",`${await Q5()}%`,"-c",If(X),"-P","-F","#{pane_id}"]:["split-window","-h","-t",G?.paneId??"","-l",`${await pB()}%`,"-c",If(X),"-P","-F","#{pane_id}"],{code:Q,stdout:H}=await d0(q),B=H.trim();if(Q!==0||!B)return!1;return await h0(["set-option","-p","-t",B,"@kobe_role",JJ]),await yY(J,YJ),await Nf(J,"kobe: Terminal pane restored"),!0}async function D5(f,J,Y){let z=await h1(f,J);if(!z)return;if(!await rB(Y)){await yY(J,YJ),await U5(f,J,z);return}let G=z.find((B)=>B.role===fJ),X=z.find((B)=>B.role===fz);if(!G&&!X){await Nf(J,"kobe: cannot restore terminal pane in this layout");return}let q=G?["join-pane","-v","-s",Y,"-t",G.paneId,"-l",`${await Q5()}%`]:["join-pane","-h","-s",Y,"-t",X?.paneId??"","-l",`${await pB()}%`];if(await h0(q)!==0){await Nf(J,"kobe: could not restore terminal pane");return}await h0(["set-option","-p","-t",Y,"@kobe_role",JJ]),await yY(J,YJ),await _B(f),z=await h1(f,J);let H=z?.find((B)=>B.paneId===Y);if(H)await h0(["select-pane","-t",H.paneId]);await Nf(J,"kobe: Terminal pane restored")}async function AR(f,J){let Y=await tJ(J,YJ);if(Y){await D5(f,J,Y);return}let z=await h1(f,J);if(!z)return;let G=aB(z);if(G){await K5(f,J,G);return}await U5(f,J,z)}async function gR(f){if((await Bz(f,dG)).length>0){await CR(f);return}await RR(f)}async function L5(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return[];return Y.split(`
66
+ `).map((z)=>z.trim()).filter((z)=>z.length>0)}async function M5(f,J){return!!(await h1(f,J))?.some((z)=>z.role===fz)}async function RR(f){let J=await L5(f);for(let Y of J){if(!await M5(f,Y))continue;if(await tJ(Y,WY))continue;await O5(f,Y)}await LY(f,dG,"1"),await Nf(`=${f}`,"kobe: Zen mode on \u2014 all tabs")}async function CR(f){let J=await L5(f);for(let Y of J){let z=await tJ(Y,WY);if(z)await kR(f,Y,z)}await h0(["set-option","-u","-t",f,dG]),await Nf(`=${f}`,"kobe: Zen mode off \u2014 all tabs")}async function F5(f,J){if((await Bz(f,dG)).length===0)return;if(await tJ(J,WY))return;if(!await M5(f,J))return;await O5(f,J)}async function O5(f,J){let Y=await h1(f,J);if(!Y)return;let z=[],G=Y.find((q)=>q.role===fJ);if(G)await h0(["kill-pane","-t",G.paneId]),z.push(fJ);let X=aB(Y);if(X)await K5(f,J,X),z.push(JJ);if(!r7()){let q=Y.find((Q)=>Q.role===i1);if(q)await V5(f,J,q),z.push(i1)}if(z.length===0){await Nf(J,"kobe: already focused \u2014 nothing to hide");return}await $B(J,WY,z.join(",")),await Nf(J,"kobe: Zen mode on")}async function kR(f,J,Y){let z=new Set(Y.split(",").map((G)=>G.trim()));if(z.has(i1)){let G=await tJ(J,A1);if(G)await sB(f,J,G)}if(z.has(fJ)){let G=await h1(f,J);if(G&&!G.some((X)=>X.role===fJ))await q5(f,J)}if(z.has(JJ)){let G=await tJ(J,YJ);if(G)await D5(f,J,G)}await yY(J,WY),await Nf(J,"kobe: Zen mode off")}async function NR(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return 0;return Y.split(`
67
+ `).filter((z)=>z.trim().length>0).length}async function yR(f,J){if(await NR(f)<=1){await Nf(J,"Cannot close the only ChatTab");return}await MR(f,J),await h0(["kill-window","-t",J])}async function Tq(f,J,Y={}){if(!await Hf(f))return;let z=await HR(f,Y.windowId);if(!z)return;switch(J){case"workspace-split":await BR(f,z);return;case"workspace-close":await jR(f,z);return;case"workspace-reset":await WR(f,z);return;case"tasks-toggle":await FR(f,z);return;case"tasks-restore":await OR(f,z);return;case"ops-toggle":await q5(f,z);return;case"terminal-toggle":await AR(f,z);return;case"zen-toggle":await gR(f);return;case"chat-tab-close":await yR(f,z);return}}var YR="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var uq=k(()=>{lJ();ZJ();nB();Tf();zJ();D1();Qz();DX()});function xq(f,J){return[["bind-key","-n",f,"if-shell","-F","#{?#{@kobe_surface},0,1}","previous-window"],["bind-key","-n",J,"if-shell","-F","#{?#{@kobe_surface},0,1}","next-window"]]}function wq(f,J="kill-window"){return["bind-key","-n",f,"if-shell","-F","#{>:#{session_windows},1}",J,"display-message 'Cannot close the only ChatTab'"]}function hq(f){return["bind-key","-n",f,"command-prompt","-I","#{window_name}","rename-window -- '%%'"]}function Pq(f){return[["bind-key","-n",f,"command-prompt","-p",Eq],["bind-key","T","command-prompt","-p",Eq]]}function tB(f){return f.startsWith("C-")&&f.length===3?`^${f.slice(2)}`:f}function vq(f){return`${[f.focusLeft?`${tB(f.focusLeft)} tasks`:null,f.detach?`${tB(f.detach)} detach`:null,f.newTab?`${tB(f.newTab)} tab`:null,f.layoutSplits?`prefix ${f.layoutSplits} splits`:null,f.layoutPanes?`prefix ${f.layoutPanes} panes`:null].filter((Y)=>Y!==null).join(" ")} `}async function fj(f,J){let Y=_f(),z=await aZ(),G=R1(J.opsCommand??Y+hz({cwd:J.cwd,taskId:J.taskId,claudePaneId:f,cliInvocation:J.inv,vendor:J.vendor})),{stdout:X}=await JX([["set-option","-p","-t",f,"@kobe_role","claude"],["set-window-option","-t",f,eB,"idle"],["split-window","-h","-b","-t",f,"-l",`${z}`,"-c",If(J.cwd),"-P","-F","tasks=#{pane_id}",R1(Y+VY(J.inv,{initialTaskId:J.taskId}))],["split-window","-h","-t",f,"-l",`${100-gZ}%`,"-c",If(J.cwd),"-P","-F","ops=#{pane_id}",G],["split-window","-v","-l",`${100-lG}%`,"-c",If(J.cwd),"-P","-F","shell=#{pane_id}"],["select-pane","-t",f]]),q=Object.fromEntries(X.split(`
68
+ `).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>Q.split("=",2)));if(await Pf([...q.tasks?[["set-option","-p","-t",q.tasks,"@kobe_role",i1]]:[],...q.tasks?[["set-option","-p","-t",q.tasks,VJ,s0]]:[],...q.ops?[["set-option","-p","-t",q.ops,"@kobe_role",fJ]]:[],...q.ops?[["set-option","-p","-t",q.ops,VJ,s0]]:[],...q.shell?[["set-option","-p","-t",q.shell,"@kobe_role",JJ]]:[]]),q.ops){let Q=await z5();if(Q.length>0)await h0(["resize-pane","-t",q.ops,...Q])}}async function A5(f,J){if(!await Hf(f))return;let Y=await N1(f,["@kobe_worktree","@kobe_task","@kobe_vendor",fX]),z=Y["@kobe_worktree"]||process.cwd(),G=Y["@kobe_task"]||void 0,X=Y[fX]||void 0,q=J??Y["@kobe_vendor"];if(J)await bR(f,G,J);let Q=b1(q),H=rz(Q,q),B=Cf(),j=(await d0(["new-window","-t",`=${f}`,"-c",If(z),"-P","-F","#{pane_id}",R1(dz(g1(H.argv),X,z))])).stdout.trim();if(!j)return;if(H.sessionId)await FY(j,yJ,H.sessionId);await fj(j,{cwd:z,taskId:G,inv:B,vendor:q});let{stdout:U}=await d0(["display-message","-p","-t",j,"#{window_id}"]),L=U.trim();if(L)await F5(f,L)}async function cq(f){if(!await Hf(f))return;let Y=(await N1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${_f()}${z.map(Xf).join(" ")} settings`;await QJ(f,{cwd:If(Y),command:X,name:"settings",surface:!0})}async function nq(f){if(!await Hf(f))return;let Y=(await N1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${_f()}${z.map(Xf).join(" ")} help-page`;await QJ(f,{cwd:If(Y),command:X,name:"help",surface:!0})}async function dq(f,J){if(!await Hf(f))return;let z=(await N1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=Cf(),X=_f(),q=J?` --repo ${Xf(J)}`:"",Q=`${X}${G.map(Xf).join(" ")} new-task${q}`;await QJ(f,{cwd:If(z),command:Q,name:"new task",surface:!0})}async function iq(f){if(!await Hf(f))return;let Y=(await N1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${_f()}${BW({cliInvocation:z})}`;await QJ(f,{cwd:If(Y),command:X,name:"update",surface:!0})}async function g5(f){if(!await Hf(f))return;let Y=(await N1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${_f()}${z.map(Xf).join(" ")} quick-task --session ${Xf(f)}`;await QJ(f,{cwd:If(Y),command:X,name:"quick task",surface:!0})}async function bR(f,J,Y){if(await LY(f,"@kobe_vendor",Y),!J)return;try{let{connectOrStartDaemon:z}=await Promise.resolve().then(() => (L1(),lq)),G=await z();try{await G.request("task.setVendor",{taskId:J,vendor:Y})}finally{G.close()}}catch(z){console.error("[kobe tmux] failed to persist selected engine vendor:",z)}}var Eq,eB="@kobe_tab_state",LX="#{?#{==:#{@kobe_tab_state},running},\u25CF,#{?#{==:#{@kobe_tab_state},done},\u2713,#{?#{==:#{@kobe_tab_state},error},!,#{?#{==:#{@kobe_tab_state},unknown},?,\u25CB}}}} #I:#W",mq;var Jj=k(()=>{lJ();x1();ZJ();Tf();zJ();U1();D1();Qz();uq();DX();Eq=`engine (${cf.join("/")}/\u2026)`;mq=LX});var r1={};jf(r1,{tmuxWindowSizeArgsForClient:()=>Gj,tmuxSessionName:()=>Lf,tmuxInitialSizeArgs:()=>C5,tmuxInitialClientSize:()=>zj,tmuxAvailable:()=>NJ,switchClientBeforeKill:()=>bJ,sessionExists:()=>Hf,selectTasksPane:()=>hR,runLayoutAction:()=>Tq,resyncWindowToClient:()=>TR,refreshKobeWorkspacePanes:()=>HG,quickCreate:()=>g5,prepareWindowForSwitch:()=>$q,prepareWindowForAttach:()=>aq,parseTmuxClientRows:()=>k5,parseObservedSession:()=>b5,openUpdateTab:()=>iq,openSettingsTab:()=>cq,openNewTaskTab:()=>dq,openHelpTab:()=>nq,newChatTab:()=>A5,kobeStatusRight:()=>vq,killSession:()=>l1,healSessionLayout:()=>G5,focusBindCommand:()=>y5,ensureSession:()=>SY,currentSessionName:()=>y1,clientsWithConflictingSize:()=>N5,chatTabSwitchBindings:()=>xq,chatTabRenameBinding:()=>hq,chatTabCloseBinding:()=>wq,chatTabChooseEngineBindings:()=>Pq,captureGlobalLayoutOnDrag:()=>X5,captureGlobalLayout:()=>UX,attachArgv:()=>lz,PANE_VERSION_OPTION:()=>VJ,CHAT_TAB_STATUS_FORMAT:()=>LX,CHAT_TAB_STATUS_CURRENT_FORMAT:()=>mq,CHAT_TAB_STATE_OPTION:()=>eB,CHAT_TAB_ENGINE_PROMPT:()=>Eq});function C5(f=process.stdout,J=process.env){let Y=zj(f,J);return Y?["-x",`${Y.columns}`,"-y",`${Y.rows}`]:[]}function zj(f=process.stdout,J=process.env){let Y=bY(f.columns)??bY(J.COLUMNS),z=bY(f.rows)??bY(J.LINES);return Y&&z?{columns:Y,rows:z}:null}function bY(f){let J=typeof f==="number"?f:typeof f==="string"?Number.parseInt(f,10):Number.NaN;return Number.isInteger(J)&&J>0?J:void 0}function k5(f){let J=[];for(let Y of f.split(`
69
+ `)){let[z,G,X,q,Q]=Y.split("\t"),H=bY(X?.trim()),B=bY(q?.trim());if(!z?.trim()||!G?.trim()||!H||!B)continue;J.push({name:z.trim(),session:G.trim(),width:H,height:B,flags:Q?.trim()??""})}return J}function N5(f,J,Y,z={}){return f.filter((G)=>G.session===J).filter((G)=>G.name!==z.currentClientName).filter((G)=>G.width!==Y.columns||G.height!==Y.rows).map((G)=>G.name)}function Gj(f,J){let Y=Math.max(1,f.rows-(J.status?.trim()==="on"?1:0));return["-x",`${f.columns}`,"-y",`${Y}`]}async function Xj(f,J,Y={}){if(!J)return;let{code:z,stdout:G}=await d0(["list-clients","-t",`=${f}`,"-F",SR]);if(z!==0)return;let X=N5(k5(G),f,J,Y),q=[];if(Y.currentClientName)q.push(["refresh-client","-f","!ignore-size","-t",Y.currentClientName]);for(let Q of X)q.push(["refresh-client","-f","ignore-size","-t",Q]);if(q.length>0)await Pf(q)}async function aq(f){NY(f,"resize");let J=zj();await Xj(f,J);let Y=J?["-x",`${J.columns}`,"-y",`${J.rows}`]:[];if(Y.length>0)await h0(["resize-window","-t",`=${f}`,...Y]);await QG(f)}async function IR(){let{code:f,stdout:J}=await d0(["display-message","-p","#{client_name}\t#{client_width}\t#{client_height}\t#{status}"]);if(f!==0)return{sizeArgs:[],clientSize:null,clientName:void 0};let[Y,z,G,X]=J.trim().split("\t"),q=bY(z),Q=bY(G),H=q&&Q?{columns:q,rows:Q}:null;return{sizeArgs:H?Gj(H,{status:X}):[],clientSize:H,clientName:Y?.trim()||void 0}}async function $q(f){NY(f,"resize");let J=await IR();await Xj(f,J.clientSize,{currentClientName:J.clientName});let Y=J.sizeArgs;if(Y.length>0)await h0(["resize-window","-t",`=${f}`,...Y]);await QG(f)}async function TR(f,J){if(!J.size)return;NY(f,"resize"),await Xj(f,J.size,{currentClientName:J.clientName});let Y=Gj(J.size,{status:J.status}),{commands:z}=await lB(f,{force:!0});await Pf([["resize-window","-t",`=${f}`,...Y],...z])}function y5(f,J,Y){let z=`#{?window_zoomed_flag,1,#{?${uR[J]},,1}}`;if(Y)return["bind-key","-n",f,"if-shell","-F",z,`select-pane ${J}`,Y];return["bind-key","-n",f,"if-shell","-F",z,`select-pane ${J}`]}async function SY(f){let J=Yj.get(f.name);if(J)return J;let Y=wR(f);Yj.set(f.name,Y);try{return await Y}finally{Yj.delete(f.name)}}function b5(f){let J="",Y="",z=!1,G=new Set;for(let X of f.split(`
70
+ `)){let[q,Q,H,B,V]=X.split("\t");if(!q?.trim())continue;if(G.add(q.trim()),!J&&B?.trim())J=B.trim();if(!Y&&V?.trim())Y=V.trim();if(Q?.trim()==="1"&&H?.trim()==="claude")z=!0}return{worktree:J,vendor:Y,claudePaneAlive:z,windowCount:G.size}}async function xR(f){if(!await Hf(f))return null;let{code:J,stdout:Y}=await d0(["list-panes","-s","-t",`=${f}`,"-F",ER]);if(J!==0)return{worktree:"",vendor:"",claudePaneAlive:!1,windowCount:0};return b5(Y)}async function wR(f){let J=f.launchInit,Y=await xR(f.name),z=m7(Y,{cwd:f.cwd,vendor:f.vendor,hasEngineCommand:f.command.length>0}),G=QV(f.repo);if(z.kind==="reuse")return await QG(f.name,{cwd:f.cwd,taskId:f.taskId,vendor:f.vendor}),!0;if(z.kind==="respawn-engine"){if(await J5(f.name,f.cwd,f.command,G,f.vendor)){if(f.vendor)await LY(f.name,"@kobe_vendor",f.vendor);return await QG(f.name,{cwd:f.cwd,taskId:f.taskId,vendor:f.vendor,vendorChanged:!0}),!0}}if(z.kind==="rebuild"||z.kind==="respawn-engine")await l1(f.name);let X=Cf(),q=rz(f.command,f.vendor),Q=f.repo!==void 0&&f.cwd===f.repo,H=Q||G?void 0:f.taskId,B=Q&&!G?f.taskId:void 0,V=Gq(zq(q.argv,f.vendor,H),f.vendor,B),j=dz(g1(V),G,f.cwd),L=(await d0(["new-session","-d","-s",f.name,"-c",If(f.cwd),...C5(),"-P","-F","#{pane_id}",QW(j,{initScript:G?void 0:J?.initScript,markerPath:!G&&J?.initScript?B9(f.cwd):void 0})])).stdout.trim();if(!L)return console.error("[kobe tmux] new-session returned no pane id; session creation failed"),!1;if(q.sessionId)await FY(L,yJ,q.sessionId);await Pf([...f.taskId?[["set-option","-t",f.name,"@kobe_task",f.taskId]]:[],["set-option","-t",f.name,"@kobe_worktree",f.cwd],...f.vendor?[["set-option","-t",f.name,"@kobe_vendor",f.vendor]]:[],...G?[["set-option","-t",f.name,fX,G]]:[]]),await fj(L,{cwd:f.cwd,taskId:f.taskId,opsCommand:f.opsCommand,inv:X,vendor:f.vendor});let O=_f(),M=X.map(Xf).join(" "),R=`${O}${M} new-chattab --session '#{session_name}'`,S=`${R} --vendor '%%'`,a=`run-shell ${Xf(S)}`,N=`${O}${M} focus-tasks --session '#{session_name}' --window '#{window_id}'`,g=`run-shell ${Xf(N)}`,C=(H0)=>`${O}${M} layout --session '#{session_name}' --window '#{window_id}' --action ${H0}`,y=C("tasks-restore"),_=`run-shell ${Xf(y)}`,z0=C("chat-tab-close"),t=`run-shell ${Xf(z0)}`,Y0=`${O}${M} heal-layout --session '#{session_name}'`,T=`run-shell -b ${Xf(Y0)}`,Q0=`${O}${M} resync-window --session '#{session_name}' --client '#{client_name}' --cols '#{client_width}' --rows '#{client_height}' --status '#{status}'`,p=`run-shell -b ${Xf(Q0)}`,D0=`${O}${M} capture-layout --session '#{session_name}'`,g0=`run-shell -b ${Xf(D0)}`,$=jW({tmuxSocket:qJ}),E=Aq(),f0=x7.map((H0)=>["unbind-key","-n",H0]);if(E.overridden.has(SJ))for(let H0 of kY){let y0=Az(H0);if("key"in y0)f0.push(["unbind-key","-n",y0.key])}for(let H0 of E.overridden){if(H0===SJ)continue;let y0=Oz[H0],w0=XG(H0),T0=Az(y0,{allowBare:w0});if("key"in T0)f0.push(w0?["unbind-key",T0.key]:["unbind-key","-n",T0.key])}let I=["-L","-D","-U","-R"],G0=E.focus.flatMap((H0,y0)=>{let w0=I[y0],T0=w0==="-L"?_:void 0;return H0&&w0?[y5(H0.key,w0,T0)]:[]}),x=E.binds,c=(H0,y0)=>{let w0=x[H0];return w0?[["bind-key",w0.key,"run-shell",C(y0)]]:[]},Z0=(...H0)=>{let y0=H0.map((w0)=>x[w0]?.chord).filter((w0)=>!!w0);return y0.length>0?y0.join("/"):null};await Pf([["set-option","-g","status","on"],["set-window-option","-g","aggressive-resize","on"],["set-option","-g","monitor-activity","on"],["set-option","-g","visual-activity","off"],["set-option","-g","window-status-format",LX],["set-option","-g","window-status-current-format",mq],["set-option","-g","status-right",vq({focusLeft:E.focus[0]?.key??null,detach:x["tmux.detach"]?.key??null,newTab:x["tmux.tab.new"]?.key??null,layoutSplits:Z0("tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"),layoutPanes:Z0("tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle","tmux.layout.zenToggle")})],["set-option","-g","mouse","on"],["set-hook","-g","window-resized",T],["set-hook","-g","client-resized",p],["set-hook","-g","window-layout-changed",g0],...f0,...x["tmux.detach"]?[["bind-key","-n",x["tmux.detach"].key,"if-shell","-F",`#{?#{${A1}},1,#{==:#{@kobe_role},tasks}}`,"detach-client",g]]:[],...G0,...x["tmux.tab.new"]?[["bind-key","-n",x["tmux.tab.new"].key,"run-shell",R]]:[],...x["tmux.tab.chooseEngine"]?Pq(x["tmux.tab.chooseEngine"].key).map((H0)=>[...H0,a]):[],...x["tmux.tab.prev"]&&x["tmux.tab.next"]?xq(x["tmux.tab.prev"].key,x["tmux.tab.next"].key):x["tmux.tab.prev"]?[["bind-key","-n",x["tmux.tab.prev"].key,"previous-window"]]:x["tmux.tab.next"]?[["bind-key","-n",x["tmux.tab.next"].key,"next-window"]]:[],...x["tmux.tab.close"]?[wq(x["tmux.tab.close"].key,t)]:[],...x["tmux.tab.rename"]?[hq(x["tmux.tab.rename"].key)]:[],...c("tmux.layout.workspaceSplit","workspace-split"),...c("tmux.layout.workspaceClose","workspace-close"),...c("tmux.layout.workspaceReset","workspace-reset"),...c("tmux.layout.tasksToggle","tasks-toggle"),...c("tmux.layout.opsToggle","ops-toggle"),...c("tmux.layout.terminalToggle","terminal-toggle"),...c("tmux.layout.zenToggle","zen-toggle"),["bind-key","f","run-shell",`${O}${M} quick-create --session '#{session_name}'`],["bind-key","u","display-popup","-E",$]]),await gz(),await h0(["select-pane","-t",L]);let V0=J?.firstMessage;if(V0)v7(f.name,V0).catch((H0)=>console.error("[kobe tmux] first message delivery failed:",H0));return!0}async function R5(f,J,Y){let z=Y?.trim()||`=${f}`,{code:G,stdout:X}=await d0(["list-panes","-t",z,"-F","#{pane_id}\t#{@kobe_role}"]);if(G!==0)return"";for(let q of X.split(`
71
+ `)){let[Q,H]=q.split("\t");if(Q?.trim()&&H?.trim()===J)return Q.trim()}return""}async function hR(f,J={}){if(!await Hf(f))return"";let Y=await R5(f,"tasks",J.windowId);if(!Y)await Tq(f,"tasks-restore",{windowId:J.windowId}),Y=await R5(f,"tasks",J.windowId);if(!Y)return"";return await h0(["select-pane","-t",Y]),Y}var SR="#{client_name}\t#{client_session}\t#{client_width}\t#{client_height}\t#{client_flags}",uR,Yj,ER="#{window_id}\t#{window_active}\t#{@kobe_role}\t#{@kobe_worktree}\t#{@kobe_vendor}";var Y1=k(()=>{lJ();x1();lf();ZJ();Tf();gq();Rq();zJ();yq();Jj();Qz();uq();qG();DX();Tf();Jj();DX();uq();uR={"-L":"pane_at_left","-D":"pane_at_bottom","-U":"pane_at_top","-R":"pane_at_right"};Yj=new Map});async function PR(f,J){let{task:Y}=await f.request("task.get",{taskId:J});return Y}async function Zj(f,J){let Y=await PR(f,J);if(Y.worktreePath)return{task:Y,worktreePath:Y.worktreePath};let{worktreePath:z}=await f.request("task.ensureWorktree",{taskId:J});if(!z)throw Error(`task ${J} has no worktree`);return{task:Y,worktreePath:z}}async function S5(f,J){let{task:Y,worktreePath:z}=await Zj(f,J),G=Lf(J);if(!await Hf(G)){let X=sJ(Y.repo??"",z,{kind:"repo-init"});if(!await SY({name:G,cwd:z,command:b1(Y.vendor,Y.modelEffort),taskId:J,vendor:Y.vendor,launchInit:X}))throw Error(`failed to start tmux session for ${J}`)}return{session:G,worktreePath:z}}function vR(f){return AZ(f,{bareSafe:!0})}async function I5(f,J){let{task:Y,worktreePath:z}=await Zj(f,J),G=Y.kind==="main"?void 0:J,X=Y.kind==="main"?J:void 0,q=[...Gq(zq(b1(Y.vendor,Y.modelEffort),Y.vendor,G),Y.vendor,X)],Q=sJ(Y.repo??"",z,{kind:"none"}),H=vR(q),B=Q.initScript?.trim()?`${Q.initScript}
72
+ ${H}`:H,V=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:z,command:[V,"-ilc",B]}}async function T5(f,J){let{worktreePath:Y}=await Zj(f,J),z=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:Y,command:[z,"-il"]}}async function u5(f){let J=Lf(f);await bJ(J).catch(()=>{}),await l1(J).catch(()=>{})}var E5=k(()=>{x1();DH();zG();Tf();Y1()});import{existsSync as mR}from"fs";import{join as x5,normalize as P5}from"path";function cR(f){let J=null,Y=null,z=new TextEncoder,G=new ReadableStream({start(X){J=f((Q,H)=>{try{X.enqueue(z.encode(`event: ${Q}
75
73
  data: ${JSON.stringify(H)}
76
74
 
77
75
  `))}catch{}}),Y=setInterval(()=>{try{X.enqueue(z.encode(`: ping
78
76
 
79
- `))}catch{}},15000)},cancel(){if(Y)clearInterval(Y);J?.()}});return new Response(G,{headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform",connection:"keep-alive"}})}async function Y2(f,J,Y){try{let{name:z,payload:G}=await f.json();if(!z)return Response.json({error:"missing rpc name"},{status:400});if(!E7.has(z))return Response.json({error:`rpc ${z} is not exposed to the web UI`},{status:403});let X=await J.request(z,G),q=G?.taskId;if(typeof q==="string"){let Q=z==="task.archive"&&G.archived!==!1;if(z==="task.delete"||Q)Y(q)}return Response.json({result:X})}catch(z){let G=z instanceof Error&&z.name!=="Error"?z.name:void 0;return Response.json({error:z instanceof Error?z.message:String(z),...G?{name:G}:{}},{status:500})}}async function z2(){try{let J=(await iJ()).map((Y)=>({id:Y,label:Vz(Y),effortLevels:pf(Y).effortLevels}));return Response.json({engines:J.length>0?J:[{id:"claude",label:"Claude"}]})}catch(f){return Response.json({error:f instanceof Error?f.message:String(f)},{status:500})}}function G2(){return Response.json({api:Kz()})}function X2(){return Response.json({projects:c1()})}function uY(f,J=""){return typeof f==="string"?f:J}function Z2(f,J){return typeof f==="boolean"?f:J}function o5(f){let J=f.customEngineIds;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string"&&_5.test(Y)&&!Q1(Y))}function q2(f){return f.split(/[-_]+/).filter(Boolean).map((J)=>`${J.slice(0,1).toUpperCase()}${J.slice(1)}`).join(" ")}function Q2(f,J){return uY(f[WJ(J)]).trim()||Vz(J)}function H2(f,J){return uY(f[jJ(J)]).trim()||BX(J).join(" ")}function s5(){let f=nf(),J=o5(f),Y=[...dY,...J],z=uY(f.lastSelectedVendor,"claude"),G=uY(f.focusAccent,"primary");return Response.json({activeTheme:uY(f.activeTheme,"claude"),transparentBackground:Z2(f.transparentBackground,!1),focusAccent:p5.includes(G)?G:"primary",notificationsToast:f["notifications.toast.enabled"]!==!1,notificationsSound:f["notifications.sound.enabled"]!==!1,settingsSurface:Lz(f[_J]??Dz),editorKind:_z(f[pJ]??Xq),editorCustomCommand:uY(f[kY]),remoteProjects:f["experimental.remoteProjects"]===!0,autoStatus:f[jz]===!0,dispatcher:f[Wz]===!0,defaultEngine:z,engines:Y.map((X)=>({id:X,label:Q2(f,X),command:H2(f,X),isBuiltin:Q1(X),isCustom:!Q1(X),isDefault:X===z}))})}function FX(f,J,Y){if(typeof Y==="string")f[J]=Y.trim()}function jG(f,J,Y){if(typeof Y==="boolean")f[J]=Y}async function B2(f){try{let J=await f.json(),Y={};if(FX(Y,"activeTheme",J.activeTheme),jG(Y,"transparentBackground",J.transparentBackground),p5.includes(J.focusAccent))Y.focusAccent=J.focusAccent;if(jG(Y,"notifications.toast.enabled",J.notificationsToast),jG(Y,"notifications.sound.enabled",J.notificationsSound),J.settingsSurface==="chattab"||J.settingsSurface==="taskpanel")Y[_J]=J.settingsSurface;if(Uz.includes(J.editorKind))Y[pJ]=J.editorKind;FX(Y,kY,J.editorCustomCommand),jG(Y,"experimental.remoteProjects",J.remoteProjects),jG(Y,jz,J.autoStatus),jG(Y,Wz,J.dispatcher),FX(Y,"lastSelectedVendor",J.defaultEngine);let z=nf(),G=o5(z),X=new Set([...dY,...G]),q=Array.isArray(J.engineUpdates)?J.engineUpdates:[];for(let Q of q){if(!Q||typeof Q!=="object")continue;let H=Q;if(typeof H.id!=="string"||!X.has(H.id))continue;FX(Y,jJ(H.id),H.command),FX(Y,WJ(H.id),H.label)}if(J.addEngine&&typeof J.addEngine==="object"){let Q=J.addEngine,H=typeof Q.id==="string"?Q.id.trim().toLowerCase():"";if(!_5.test(H)||Q1(H)||X.has(H))return Response.json({error:"invalid or duplicate engine id"},{status:400});Y.customEngineIds=[...G,H],Y[jJ(H)]=uY(Q.command).trim();let B=uY(Q.label).trim();Y[WJ(H)]=B&&B!==H?B:q2(H)}if(typeof J.removeEngine==="string"){let Q=J.removeEngine;if(!Q1(Q)){if(Y.customEngineIds=G.filter((H)=>H!==Q),Y[jJ(Q)]=void 0,Y[WJ(Q)]=void 0,z.lastSelectedVendor===Q)Y.lastSelectedVendor="claude"}}if(Object.keys(Y).length>0)rY(Y);return s5()}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:400})}}async function j2(f,J){try{let{taskId:Y}=await f.json();if(!Y)return Response.json({error:"missing taskId"},{status:400});return Response.json(await P5(J,Y))}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function i5(f,J,Y){try{let z=f.searchParams.get("taskId");if(!z)return Response.json({error:"missing taskId"},{status:400});return Response.json(await Y(J,z))}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}function t5(){return Response.json({review:kf($q.review)??null,pr:kf($q.pr)??null})}async function W2(f){try{let J=await f.json();if(typeof J.review==="string")af($q.review,J.review);if(typeof J.pr==="string")af($q.pr,J.pr);return t5()}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:400})}}async function V2(f,J){let z=a5(d5(J,f==="/"?"/index.html":f));if(!z.startsWith(J))return new Response("forbidden",{status:403});let G=Bun.file(f2(z)?z:d5(J,"index.html"));if(!await G.exists())return new Response("kobe web assets not built \u2014 run `bun --filter kobe-web build`",{status:503});return new Response(G)}function K2(f){let{link:J,sseSends:Y,staticDir:z}=f,G=f.tearDownSession??((X)=>void c5(X));return async function(q){let Q=new URL(q.url);if(Q.pathname===r5)return new Response($5);if(!I7(q.headers.get("origin"),{allowedHost:f.allowedHost}))return new Response("forbidden: cross-origin request rejected",{status:403});if(Q.pathname==="/events")return J2((O)=>{let M=f.onSseOpen?.()??(()=>{});return O("snapshot",J.snapshot()),Y.add(O),()=>{Y.delete(O),M()}});if(Q.pathname==="/api/rpc"&&q.method==="POST")return Y2(q,J,G);if(Q.pathname==="/api/session"&&q.method==="POST")return j2(q,J);if(Q.pathname==="/api/engine-spec"&&q.method==="GET")return i5(Q,J,v5);if(Q.pathname==="/api/terminal-spec"&&q.method==="GET")return i5(Q,J,m5);if(Q.pathname==="/api/engines"&&q.method==="GET")return z2();if(Q.pathname==="/api/cli-invocation"&&q.method==="GET")return G2();if(Q.pathname==="/api/projects"&&q.method==="GET")return X2();if(Q.pathname==="/api/settings"&&q.method==="GET")return s5();if(Q.pathname==="/api/settings"&&q.method==="PATCH")return B2(q);if(Q.pathname==="/api/quick-prompts"&&q.method==="GET")return t5();if(Q.pathname==="/api/quick-prompts"&&q.method==="PUT")return W2(q);let H=await M7(q,Q);if(H)return H;let B=await Q7(q,Q);if(B)return B;let V=await W7(q,Q);if(V)return V;let j=await y7(q,Q,J);if(j)return j;let U=await R7(q,Q);if(U)return U;let L=O7(q,Q);if(L)return L;if(z)return V2(Q.pathname,z);return new Response("not found",{status:404})}}function Rz(f,J){let Y=f.snapshot().find((z)=>z.channel===J);return Y?Y.payload:null}function qj(f){return f.length>1?f.replace(/\/+$/,""):f}function U2(f,J){let Y=qj(J),z=new Set([J]);for(let G of f){let X=qj(G.repo),q=qj(G.worktreePath);if(X===Y||q===Y){if(G.repo)z.add(G.repo);if(G.worktreePath)z.add(G.worktreePath)}}return[...z]}function e5(f){let J=QX();return{async request(Y,z){return await qX(J,Y,z,f.ctx(0))},snapshot(){let Y=f.orch.listTasks().map(zJ),z={},G=Rz(f.bus,"issue.snapshot");if(G)for(let Q of U2(Y,G.repoRoot))z[Q]={...G,repoRoot:Q};let X=Rz(f.bus,"task.jobs"),q=X?.phase==="running"?{[X.taskId]:X}:{};return{tasks:Y,activeTaskId:Rz(f.bus,"active-task")?.taskId??null,engineStates:f.activity.snapshotByTask(),update:Rz(f.bus,"update")?.info??null,jobs:q,worktreeChanges:Rz(f.bus,"worktree.changes")?.changes??{},issueSnapshots:z,deliver:Rz(f.bus,"session.deliver"),uiPrefs:Rz(f.bus,"ui-prefs"),connected:!0}}}}async function l5(f){try{let J=Bun.spawn(["lsof","-nP",`-iTCP:${f}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(J.stdout).text()).split(`
80
- `).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function D2(f,J=r5){let Y;try{Y=(await(await fetch(`http://localhost:${f}${J}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Y!==$5)throw Error(`port ${f} is in use by a non-kobe service; refusing to replace it`);let z=await l5(f);for(let X of z)try{process.kill(X,"SIGTERM")}catch{}let G=Date.now()+2000;while(Date.now()<G){if((await l5(f)).length===0)return;await new Promise((X)=>setTimeout(X,100))}}async function fK(f){if(f.takeover!==!1)await D2(f.port);let J=new Set,Y=f.onEvent((Q)=>{for(let H of J)H("channel",Q)}),z=f.hostname?.trim()||process.env.KOBE_WEB_HOST?.trim()||"127.0.0.1",G=T7(z),X=K2({link:f.link,sseSends:J,staticDir:f.staticDir?a5(f.staticDir):void 0,allowedHost:G,onSseOpen:f.onSseOpen}),q=Bun.serve({port:f.port,hostname:z,idleTimeout:0,fetch:X});return{port:q.port??f.port,hostname:z,close(){Y(),q.stop(!0)}}}var $5="kobe-web",r5="/__kobe_web",p5,_5,$q;var JK=k(()=>{fz();E1();MY();ZX();Yq();gf();pY();Zq();K1();H7();V7();F7();A7();_Z();sY();C7();u7();x7();n5();p5=["primary","success","info"],_5=/^[a-z][a-z0-9_-]{0,47}$/;$q={review:"boardPrompt.review",pr:"boardPrompt.pr"}});var YK={};jf(YK,{sameWorktreeChanges:()=>IJ,readWorktreeChanges:()=>M2,pickPushedChanges:()=>pq,parsePorcelain:()=>WG});import{spawnSync as L2}from"child_process";function IJ(f,J){return f.added===J.added&&f.deleted===J.deleted}function pq(f,J){if(!f)return null;return f.get(J)??rq}function M2(f){if(!f)return rq;try{let J=L2("git",["status","--porcelain=v1"],{cwd:f,encoding:"utf8",stdio:["ignore","pipe","pipe"],env:x1()});if(J.status!==0||!J.stdout)return rq;return WG(J.stdout)}catch{return rq}}function WG(f){let J=0,Y=0;for(let z of f.split(`
81
- `)){if(!z||z.startsWith("##"))continue;let G=z.charAt(0),X=z.charAt(1);if(G==="D"||X==="D")Y+=1;else J+=1}return{added:J,deleted:Y}}var rq;var VG=k(()=>{NY();rq={added:0,deleted:0}});async function g2(f,J){let Y=await BJ("git",["status","--porcelain=v1"],{cwd:f,env:x1(),signal:J});if(Y.status!==0)throw Error("git status failed");return WG(Y.stdout)}function R2(f){let J=new Set;for(let Y of f){if(Y.archived)continue;if(!Y.worktreePath)continue;if(D1(Y.repo)||D1(Y.worktreePath))continue;J.add(Y.worktreePath)}return J}class zK{orch;bus;options;entries=new Map;stopped=!1;constructor(f,J,Y={}){this.orch=f;this.bus=J;this.options=Y}tick(){if(this.stopped)return;if(this.options.hasSubscribers&&!this.options.hasSubscribers())return;try{let f=R2(this.orch.listTasks()),J=!1;for(let Y of this.entries.keys()){if(f.has(Y))continue;if(this.entries.get(Y)?.value)J=!0;this.entries.delete(Y)}if(J)this.publish();for(let Y of f)this.maybeCollect(Y)}catch(f){uf("worktree-changes",f)}}stop(){this.stopped=!0}maybeCollect(f){let J=this.entries.get(f);if(!J)J={inFlight:!1,nextAllowedAt:0},this.entries.set(f,J);let Y=this.options.cadence??{timeoutMs:F2,slowRetryMs:O2,minIntervalMs:A2},z=this.options.run??g2;fq(J,Y,(G)=>z(f,G),(G)=>{if(this.stopped)return;if(this.entries.get(f)!==J)return;if(J.value&&IJ(J.value,G))return;J.value=G,this.publish()})}publish(){let f={};for(let[J,Y]of this.entries)if(Y.value)f[J]=Y.value;this.bus.publish("worktree.changes",{changes:f})}}function GK(f,J,Y=Qj,z){if(Y<=0)return()=>{};let G=new zK(f,J,{hasSubscribers:z});G.tick();let X=setInterval(()=>G.tick(),Y);return X.unref?.(),()=>{clearInterval(X),G.stop()}}var Qj=2000,F2=4000,O2=60000,A2=1500;var XK=k(()=>{NY();HX();gf();VG()});import{mkdir as ZK,readFile as C2,unlink as Hj,writeFile as k2}from"fs/promises";import{createServer as N2}from"net";import{dirname as qK}from"path";import{StringDecoder as y2}from"string_decoder";function S2(){let f=process.env.KOBE_DAEMON_IDLE_GRACE_MS;if(f===void 0)return QK;let J=Number(f);return Number.isFinite(J)&&J>=0?J:QK}async function BK(f,J={}){let Y=J.socketPath??CJ(J.homeDir),z=J.pidPath??nJ(J.homeDir),G=J.startedAt??new Date,X=new Set,q=new Set,Q=1,H=new gB({clients:function*(){yield*X,yield*q},idleGraceMs:S2(),onIdleStop:()=>void Y0().catch(($)=>uf("daemon-idle-shutdown",$))}),B=new ZB;B.onPublish(($)=>{HK(X,{type:"event",name:$.channel,payload:$.payload})});let V=new CH(B),j=new tZ(sZ(J.homeDir));await ZK(qK(Y),{recursive:!0}),await ZK(qK(z),{recursive:!0}),await Hj(Y).catch(()=>{});let U=N2(($)=>{let E={id:Q++,connectedAt:new Date,socket:$,buffer:"",subscribed:!1,holdsLifetime:!1,channels:null};X.add(E);let f0=new y2("utf8");$.on("data",(I)=>{E.buffer+=f0.write(I),g0(E)}),$.on("error",()=>{}),$.on("close",()=>{if(X.delete(E),E.subscribed)gY("conn",`client #${E.id} (${E.holdsLifetime?"gui":"pane"}) disconnected \u2014 ${X.size} client(s), ${H.guiCount()} gui left`);H.clientDisconnected(E.holdsLifetime)})}),L=f.subscribeTasks(($)=>{B.publish("task.snapshot",{tasks:$.map(zJ)})}),O=J.checkUpdate??wG,M=J.updatePollMs??b2,R=()=>{O().then(($)=>B.publish("update",{info:$})).catch(($)=>uf("update-poller",$))},S=null;if(M>0)R(),S=setInterval(R,M),S.unref?.();let a=J.autoTitlePollMs??XB,N=mV(f,a,()=>H.hasSubscribers()),g=z7(B,{statePath:NB(J.homeDir),debounceMs:J.uiPrefsDebounceMs??kB}),C=sV(B,{path:AB(J.homeDir),debounceMs:J.keybindingsDebounceMs??OB}),y=GK(f,B,J.worktreeChangesTickMs??Qj,()=>H.hasSubscribers()),_=f7(f,J.prStatusPollMs??Jq,()=>H.hasSubscribers()),z0=null,t={socketPath:Y,pidPath:z,startedAt:G,get webPort(){return z0?.port},clients:X,async close(){if(H.markStopping(),L(),z0?.close(),z0=null,S)clearInterval(S);N(),_(),g(),C(),y(),V.close(),HK(X,{type:"event",name:"daemon.stopping",payload:{}});for(let $ of Array.from(X))$.socket.destroy();await new Promise(($)=>U.close(()=>$())),await Hj(Y).catch(()=>{}),await Hj(z).catch(()=>{})}};await new Promise(($,E)=>{let f0=U;f0.once("error",E),U.listen(Y,()=>{f0.removeListener("error",E),$()})}),await k2(z,`${process.pid}
82
- `,"utf8");async function Y0(){if(H.isStopping())return;H.markStopping(),await J.onStop?.(),setTimeout(()=>{t.close().catch(($)=>uf("daemon-shutdown",$))},0).unref()}let T=QX();function Q0($){return{orch:f,bus:B,activity:V,issues:j,daemon:{startedAt:G,socketPath:Y,webPort:z0?.port,pid:process.pid,guiCount:()=>H.guiCount(),stopSoon:Y0},clientId:$}}if(J.webPort!==void 0){let $=e5({orch:f,bus:B,activity:V,ctx:Q0});z0=await fK({port:J.webPort,hostname:J.webHost,staticDir:J.webStaticDir,link:$,onEvent:(E)=>B.onPublish(E),onSseOpen:()=>{let E={subscribed:!0,holdsLifetime:!0};return q.add(E),H.guiAttached(),gY("conn",`web client subscribed \u2014 ${X.size+q.size} client(s), ${H.guiCount()} gui`),()=>{q.delete(E),gY("conn",`web client disconnected \u2014 ${X.size+q.size} client(s), ${H.guiCount()} gui left`),H.clientDisconnected(!0)}}}),gY("web",`daemon web transport listening on http://${z0.hostname}:${z0.port}`)}async function p($,E){if($.name==="subscribe"){let f0=jB($.payload),I=E.subscribed;E.subscribed=!0;let G0=f0.role==="gui"?"gui":"pane";E.holdsLifetime=G0==="gui",E.channels=AW(f0.channels);let x=!I;if(E.holdsLifetime)H.guiAttached();gY("conn",`client #${E.id} subscribed as ${G0}${E.channels?` [${[...E.channels].join(",")}]`:""} \u2014 ${X.size} client(s), ${H.guiCount()} gui${x?" (collectors resume)":""}`);for(let c of B.snapshot()){if(E.channels&&!E.channels.has(c.channel))continue;OX(E,{type:"event",name:c.channel,payload:c.payload})}if(!E.channels||E.channels.has("engine-state"))for(let c of V.currentNonIdle())OX(E,{type:"event",name:"engine-state",payload:c});return{}}return qX(T,$.name,$.payload,Q0(E.id))}async function D0($,E){try{let f0=await p($,E);OX(E,{type:"response",id:$.id,name:$.name,payload:f0})}catch(f0){OX(E,{type:"response",id:$.id,name:$.name,error:BB(f0)})}}function g0($){let E=$.buffer.indexOf(`
83
- `);while(E!==-1){let f0=$.buffer.slice(0,E);if($.buffer=$.buffer.slice(E+1),f0.trim().length>0)try{let I=JSON.parse(f0);if(I.type!=="request")throw Error("daemon only accepts request frames from clients");D0(I,$)}catch(I){OX($,{type:"response",id:"parse-error",error:{message:I instanceof Error?I.message:String(I)}})}E=$.buffer.indexOf(`
84
- `)}}return t}async function KG(f){try{let J=await C2(f,"utf8"),Y=Number(J.trim());return Number.isFinite(Y)?Y:null}catch{return null}}function OX(f,J){f.socket.write(aG(J))}function HK(f,J){let Y=J.type==="event"&&J.name!=="daemon.stopping"?J.name:null,z=null;for(let G of f){if(!G.subscribed&&J.type==="event")continue;if(Y&&G.channels&&!G.channels.has(Y))continue;z??=aG(J),G.socket.write(z)}}var b2=21600000,QK=3000;var _q=k(()=>{U1();TW();cV();_Z();MB();tV();eV();mz();J7();sY();G7();JK();XK();_Z();MB()});import{unlink as jK}from"fs/promises";function I2(f){try{return process.kill(f,0),!0}catch(J){return J.code==="EPERM"}}async function UG(f,J){let Y=await KG(J),z=Y!==null&&Y!==process.pid?Y:null,G=z!==null&&I2(z),X=G?"graceful":"absent",q=new d1(f),Q=q.request("daemon.stop").catch(()=>{return}),H=new Promise((B)=>setTimeout(B,2000));if(await Promise.race([Q,H]),q.close(),G&&z!==null){let B=Date.now()+5000,V=!1;while(Date.now()<B){try{process.kill(z,0)}catch{break}if(!V&&Date.now()-(B-5000)>2000){try{process.kill(z,"SIGTERM")}catch{}X="sigterm",V=!0}await new Promise((j)=>setTimeout(j,50))}try{process.kill(z,0),process.kill(z,"SIGKILL"),X="sigkill",await new Promise((j)=>setTimeout(j,100))}catch{}}return await jK(f).catch(()=>{}),await jK(J).catch(()=>{}),{pid:Y,method:X}}var oq=k(()=>{$G();_q()});var Jj={};jf(Jj,{testDaemonResponds:()=>sq,ensureDaemonReachable:()=>DG,connectOrStartDaemon:()=>UJ,connectIfRunning:()=>p1});import{spawn as T2}from"child_process";import{closeSync as u2,existsSync as E2,mkdirSync as x2,openSync as w2}from"fs";import{dirname as WK,resolve as Bj}from"path";import{fileURLToPath as h2}from"url";function m2(f,J,Y,z){let G="ignore",X;try{x2(WK(z),{recursive:!0}),X=w2(z,"a"),G=["ignore",X,X]}catch{G="ignore"}if(T2(f,[...J],{detached:!0,stdio:G,env:Y}).unref(),X!==void 0)try{u2(X)}catch{}}async function DG(){let f=CJ();if(await sq(f))return f;await UG(f,nJ()).catch(()=>{});let[J,...Y]=c2(P2);m2(J,Y,process.env,RZ());let z=Date.now()+5000;while(Date.now()<z){if(await sq(f))return f;await new Promise((G)=>setTimeout(G,100))}throw Error(`kobe: daemon did not start (or stayed wedged) at ${f}`)}async function UJ(){let f=await DG(),J=new d1(f);return await J.connect(),J}async function p1(){let f=CJ();if(!await sq(f))return null;let J=new d1(f);return await J.connect(),J}async function sq(f,J=v2){let Y=new d1(f);try{await Y.connect()}catch{return Y.close(),!1}let z=Y.request("hello",{protocolVersion:n1}).then(()=>!0).catch(()=>!0),G,X=new Promise((Q)=>{G=setTimeout(()=>Q(!1),J)}),q=await Promise.race([z,X]);if(G)clearTimeout(G);return Y.close(),q}function c2(f){let J=h2(import.meta.url);if(J.startsWith("/$bunfs")||J.startsWith("B:\\~BUN"))return[process.execPath,...f];let Y=WK(J),z=[Bj(Y,"../cli/index.ts"),Bj(Y,"../../../kobe/src/cli/index.ts"),Bj(Y,"../cli/index.js")],G=z.find((X)=>E2(X));if(G)return[process.execPath,G,...f];throw Error(`kobe: could not locate kobe entry near ${Y}; checked ${z.join(", ")}`)}var P2,v2=3000;var y1=k(()=>{oq();mz();sY();$G();P2=["daemon","start"]});var DK={};jf(DK,{runExportSubcommand:()=>$2,renderExport:()=>UK});function n2(f){return{id:f.id,title:f.title,status:f.status,archived:String(f.archived),vendor:f.vendor??Sf,branch:f.branch,repo:f.repo,worktreePath:f.worktreePath}}function jj(f){process.stderr.write(`kobe export: ${f}
85
-
86
- ${KK}
87
- `),process.exit(2)}function d2(f){let J="json";for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="--json")J="json";else if(z==="--csv")J="csv";else if(z==="--format"){let G=f[++Y];if(G===void 0)jj("--format requires a value (json, csv, or table)");J=VK(G)}else if(z.startsWith("--format="))J=VK(z.slice(9));else jj(`unexpected argument "${z}"`)}return J}function VK(f){if(f==="json"||f==="csv"||f==="table")return f;jj(`unknown format "${f}" (expected json, csv, or table)`)}function i2(f){if(/[",\r\n]/.test(f))return`"${f.replace(/"/g,'""')}"`;return f}function l2(f){let J=[AX.join(",")];for(let Y of f)J.push(AX.map((z)=>i2(Y[z])).join(","));return J.join(`
88
- `)}function a2(f){let J={};for(let G of AX)J[G]=Math.max(G.length,...f.map((X)=>X[G].length));let Y=(G)=>AX.map((X)=>G[X].padEnd(J[X])).join(" ").trimEnd(),z={};for(let G of AX)z[G]=G;return[Y(z),...f.map(Y)].join(`
89
- `)}function UK(f,J){let Y=f.map(n2);if(J==="json")return JSON.stringify(Y,null,2);if(J==="csv")return l2(Y);return a2(Y)}async function $2(f){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(`${KK}
90
- `);return}let J=d2(f),{TaskIndexStore:Y}=await Promise.resolve().then(() => (vG(),zH)),z=new Y;await z.load();let G=z.list();if(G.length===0&&J==="table"){process.stdout.write(`no tasks
91
- `);return}process.stdout.write(`${UK(G,J)}
92
- `)}var KK,AX;var LK=k(()=>{S1();KK=["Usage: kobe export [--json | --csv | --format <json|csv|table>]","","Print the task list (from ~/.kobe/tasks.json) to stdout. Read-only and","daemon-free \u2014 works with the kobe daemon down.","","Options:"," --json JSON array of tasks (default)"," --csv CSV with a header row"," --format <fmt> One of: json, csv, table"," -h, --help Print this help",""].join(`
93
- `),AX=["id","title","status","archived","vendor","branch","repo","worktreePath"]});var OK={};jf(OK,{runRepoSubcommand:()=>o2});import{readFileSync as r2}from"fs";import{resolve as tq}from"path";function EY(f){process.stderr.write(`kobe repo: ${f}
94
-
95
- ${FK}
96
- `),process.exit(2)}function MK(f){try{return r2(tq(process.cwd(),f),"utf8")}catch(J){EY(`cannot read ${f}: ${J instanceof Error?J.message:String(J)}`)}}function p2(f){let J={};for(let Y=0;Y<f.length;Y++){let z=f[Y],G=()=>{let X=f[++Y];if(X===void 0)EY(`${z} requires a value`);return X};if(z==="--init-script")J.initScript=G();else if(z==="--init-script-file")J.initScript=MK(G());else if(z==="--init-prompt")J.initPrompt=G();else if(z==="--init-prompt-file")J.initPrompt=MK(G());else if(z.startsWith("-"))EY(`unknown flag "${z}"`);else if(J.path===void 0)J.path=z;else EY(`unexpected argument "${z}"`)}return J}function _2(f){let J,Y=!1,z=!1;for(let G of f)if(G==="--init-script")Y=!0;else if(G==="--init-prompt")z=!0;else if(G.startsWith("-"))EY(`unknown flag "${G}"`);else if(J===void 0)J=G;else EY(`unexpected argument "${G}"`);if(!Y&&!z)Y=!0,z=!0;return{path:J,clearScript:Y,clearPrompt:z}}async function o2(f){let[J,...Y]=f;if(J===void 0||J==="--help"||J==="-h"||J==="help"){process.stdout.write(`${FK}
97
- `);return}let{getRepoInitOverride:z,setRepoInitOverride:G,resolveRepoRoot:X}=await Promise.resolve().then(() => (gf(),qY)),{existsSync:q}=await import("fs"),{join:Q}=await import("path");if(J==="show"){let[H]=Y.filter((L)=>!L.startsWith("-")),B=X(tq(process.cwd(),H??".")),V=z(B),j=q(Q(B,".kobe","init.sh")),U=q(Q(B,".kobe","init-prompt.md"));console.log(`repo: ${B}`),console.log(` .kobe/init.sh: ${j?"present (wins)":"absent"}`),console.log(` .kobe/init-prompt.md: ${U?"present (wins)":"absent"}`),console.log(` override initScript: ${V.initScript?LG(V.initScript):"(unset)"}`),console.log(` override initPrompt: ${V.initPrompt?LG(V.initPrompt):"(unset)"}`);return}if(J==="set"){let H=p2(Y);if(H.initScript===void 0&&H.initPrompt===void 0)EY("set needs at least one of --init-script(-file) / --init-prompt(-file)");let B=X(tq(process.cwd(),H.path??".")),V=G(B,{...H.initScript!==void 0?{initScript:H.initScript}:{},...H.initPrompt!==void 0?{initPrompt:H.initPrompt}:{}});console.log(`updated override for ${B}`),console.log(` initScript: ${V.initScript?LG(V.initScript):"(unset)"}`),console.log(` initPrompt: ${V.initPrompt?LG(V.initPrompt):"(unset)"}`);return}if(J==="unset"){let{path:H,clearScript:B,clearPrompt:V}=_2(Y),j=X(tq(process.cwd(),H??".")),U=G(j,{...B?{initScript:""}:{},...V?{initPrompt:""}:{}});console.log(`cleared override for ${j}`),console.log(` initScript: ${U.initScript?LG(U.initScript):"(unset)"}`),console.log(` initPrompt: ${U.initPrompt?LG(U.initPrompt):"(unset)"}`);return}EY(`unknown verb "${J}"`)}function LG(f){let J=f.replace(/\s+/g," ").trim();return J.length>60?`"${J.slice(0,57)}\u2026"`:`"${J}"`}var FK;var AK=k(()=>{FK=["Usage: kobe repo <show|set|unset> [path] [options]","","Manage a repo's per-user init override (state.json fallback for repos","that don't ship .kobe/init.sh / .kobe/init-prompt.md).","","Commands:"," show [path] Print the override + whether the repo ships .kobe/ files"," set [path] <options> Set the init script and/or first prompt"," unset [path] [--init-script] [--init-prompt] Clear one or both (default: both)","","Set options (later wins; *-file reads from disk):"," --init-script <text> Inline shell to run before the engine"," --init-script-file <path> Read the init script from a file"," --init-prompt <text> Inline first prompt for the engine"," --init-prompt-file <path> Read the first prompt from a file",""," path defaults to the current directory (resolved to its git toplevel).",""].join(`
98
- `)});import{spawnSync as s2}from"child_process";function fC(f){let[J,Y]=f.split("/");if(!J||!Y)throw Error(`invalid GitHub repository slug: ${f}`);return{owner:J,name:Y}}function gK(f,J){let Y=f.trim();if(!Y)throw Error(`${J} is required`);return Y}function RK(f,J){let Y=J?.map((z)=>typeof z.message==="string"?z.message:null).filter((z)=>!!z);if(Y&&Y.length>0)return Y.join("; ");return f.trim()||"GitHub CLI returned an empty response"}function CK(f,J,Y){let z=["api","graphql","-f",`query=${f}`];for(let[H,B]of Object.entries(J))z.push("-f",`${H}=${B}`);let G=Y.spawn("gh",z,{encoding:"utf8"});if(G.error)throw Error(`failed to run gh: ${G.error.message}`);let X=typeof G.stdout==="string"?G.stdout:String(G.stdout??""),q=typeof G.stderr==="string"?G.stderr:String(G.stderr??""),Q;try{Q=JSON.parse(X)}catch{throw Error(`failed to parse gh response: ${RK(q,void 0)}`)}if((G.status??0)!==0||Q.errors?.length)throw Error(RK(q,Q.errors));if(!Q.data)throw Error("GitHub CLI response did not include data");return Q.data}function JC(f){return`${f}
77
+ `))}catch{}},15000)},cancel(){if(Y)clearInterval(Y);J?.()}});return new Response(G,{headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform",connection:"keep-alive"}})}async function nR(f,J,Y){try{let{name:z,payload:G}=await f.json();if(!z)return Response.json({error:"missing rpc name"},{status:400});if(!k7.has(z))return Response.json({error:`rpc ${z} is not exposed to the web UI`},{status:403});let X=await J.request(z,G),q=G?.taskId;if(typeof q==="string"){let Q=z==="task.archive"&&G.archived!==!1;if(z==="task.delete"||Q)Y(q)}return Response.json({result:X})}catch(z){let G=z instanceof Error&&z.name!=="Error"?z.name:void 0;return Response.json({error:z instanceof Error?z.message:String(z),...G?{name:G}:{}},{status:500})}}async function dR(){try{let J=(await iJ()).map((Y)=>({id:Y,label:Vz(Y),effortLevels:pf(Y).effortLevels}));return Response.json({engines:J.length>0?J:[{id:"claude",label:"Claude"}]})}catch(f){return Response.json({error:f instanceof Error?f.message:String(f)},{status:500})}}function iR(){return Response.json({api:Kz()})}function lR(){return Response.json({projects:O1()})}function IY(f,J=""){return typeof f==="string"?f:J}function aR(f,J){return typeof f==="boolean"?f:J}function d5(f){let J=f.customEngineIds;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string"&&n5.test(Y)&&!H1(Y))}function $R(f){return f.split(/[-_]+/).filter(Boolean).map((J)=>`${J.slice(0,1).toUpperCase()}${J.slice(1)}`).join(" ")}function rR(f,J){return IY(f[jJ(J)]).trim()||Vz(J)}function pR(f,J){return IY(f[BJ(J)]).trim()||HX(J).join(" ")}function i5(){let f=nf(),J=d5(f),Y=[...dY,...J],z=IY(f.lastSelectedVendor,"claude"),G=IY(f.focusAccent,"primary");return Response.json({activeTheme:IY(f.activeTheme,"claude"),transparentBackground:aR(f.transparentBackground,!1),focusAccent:c5.includes(G)?G:"primary",notificationsToast:f["notifications.toast.enabled"]!==!1,notificationsSound:f["notifications.sound.enabled"]!==!1,settingsSurface:Lz(f[oJ]??Dz),editorKind:pz(f[_J]??Xq),editorCustomCommand:IY(f[RY]),remoteProjects:f["experimental.remoteProjects"]===!0,autoStatus:f[jz]===!0,dispatcher:f[Wz]===!0,defaultEngine:z,engines:Y.map((X)=>({id:X,label:rR(f,X),command:pR(f,X),isBuiltin:H1(X),isCustom:!H1(X),isDefault:X===z}))})}function MX(f,J,Y){if(typeof Y==="string")f[J]=Y.trim()}function BG(f,J,Y){if(typeof Y==="boolean")f[J]=Y}async function _R(f){try{let J=await f.json(),Y={};if(MX(Y,"activeTheme",J.activeTheme),BG(Y,"transparentBackground",J.transparentBackground),c5.includes(J.focusAccent))Y.focusAccent=J.focusAccent;if(BG(Y,"notifications.toast.enabled",J.notificationsToast),BG(Y,"notifications.sound.enabled",J.notificationsSound),J.settingsSurface==="chattab"||J.settingsSurface==="taskpanel")Y[oJ]=J.settingsSurface;if(Uz.includes(J.editorKind))Y[_J]=J.editorKind;MX(Y,RY,J.editorCustomCommand),BG(Y,"experimental.remoteProjects",J.remoteProjects),BG(Y,jz,J.autoStatus),BG(Y,Wz,J.dispatcher),MX(Y,"lastSelectedVendor",J.defaultEngine);let z=nf(),G=d5(z),X=new Set([...dY,...G]),q=Array.isArray(J.engineUpdates)?J.engineUpdates:[];for(let Q of q){if(!Q||typeof Q!=="object")continue;let H=Q;if(typeof H.id!=="string"||!X.has(H.id))continue;MX(Y,BJ(H.id),H.command),MX(Y,jJ(H.id),H.label)}if(J.addEngine&&typeof J.addEngine==="object"){let Q=J.addEngine,H=typeof Q.id==="string"?Q.id.trim().toLowerCase():"";if(!n5.test(H)||H1(H)||X.has(H))return Response.json({error:"invalid or duplicate engine id"},{status:400});Y.customEngineIds=[...G,H],Y[BJ(H)]=IY(Q.command).trim();let B=IY(Q.label).trim();Y[jJ(H)]=B&&B!==H?B:$R(H)}if(typeof J.removeEngine==="string"){let Q=J.removeEngine;if(!H1(Q)){if(Y.customEngineIds=G.filter((H)=>H!==Q),Y[BJ(Q)]=void 0,Y[jJ(Q)]=void 0,z.lastSelectedVendor===Q)Y.lastSelectedVendor="claude"}}if(Object.keys(Y).length>0)rY(Y);return i5()}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:400})}}async function oR(f,J){try{let{taskId:Y}=await f.json();if(!Y)return Response.json({error:"missing taskId"},{status:400});return Response.json(await S5(J,Y))}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function w5(f,J,Y){try{let z=f.searchParams.get("taskId");if(!z)return Response.json({error:"missing taskId"},{status:400});return Response.json(await Y(J,z))}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}function l5(){return Response.json({review:kf(rq.review)??null,pr:kf(rq.pr)??null})}async function sR(f){try{let J=await f.json();if(typeof J.review==="string")af(rq.review,J.review);if(typeof J.pr==="string")af(rq.pr,J.pr);return l5()}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:400})}}async function tR(f,J){let z=P5(x5(J,f==="/"?"/index.html":f));if(!z.startsWith(J))return new Response("forbidden",{status:403});let G=Bun.file(mR(z)?z:x5(J,"index.html"));if(!await G.exists())return new Response("kobe web assets not built \u2014 run `bun --filter kobe-web build`",{status:503});return new Response(G)}function eR(f){let{link:J,sseSends:Y,staticDir:z}=f,G=f.tearDownSession??((X)=>void u5(X));return async function(q){let Q=new URL(q.url);if(Q.pathname===m5)return new Response(v5);if(!g7(q.headers.get("origin"),{allowedHost:f.allowedHost}))return new Response("forbidden: cross-origin request rejected",{status:403});if(Q.pathname==="/events")return cR((O)=>{let M=f.onSseOpen?.()??(()=>{});return O("snapshot",J.snapshot()),Y.add(O),()=>{Y.delete(O),M()}});if(Q.pathname==="/api/rpc"&&q.method==="POST")return nR(q,J,G);if(Q.pathname==="/api/session"&&q.method==="POST")return oR(q,J);if(Q.pathname==="/api/engine-spec"&&q.method==="GET")return w5(Q,J,I5);if(Q.pathname==="/api/terminal-spec"&&q.method==="GET")return w5(Q,J,T5);if(Q.pathname==="/api/engines"&&q.method==="GET")return dR();if(Q.pathname==="/api/cli-invocation"&&q.method==="GET")return iR();if(Q.pathname==="/api/projects"&&q.method==="GET")return lR();if(Q.pathname==="/api/settings"&&q.method==="GET")return i5();if(Q.pathname==="/api/settings"&&q.method==="PATCH")return _R(q);if(Q.pathname==="/api/quick-prompts"&&q.method==="GET")return l5();if(Q.pathname==="/api/quick-prompts"&&q.method==="PUT")return sR(q);let H=await B7(q,Q);if(H)return H;let B=await f7(q,Q);if(B)return B;let V=await G7(q,Q);if(V)return V;let j=await F7(q,Q,J);if(j)return j;let U=await U7(q,Q);if(U)return U;let L=W7(q,Q);if(L)return L;if(z)return tR(Q.pathname,z);return new Response("not found",{status:404})}}function Rz(f,J){let Y=f.snapshot().find((z)=>z.channel===J);return Y?Y.payload:null}function qj(f){return f.length>1?f.replace(/\/+$/,""):f}function f2(f,J){let Y=qj(J),z=new Set([J]);for(let G of f){let X=qj(G.repo),q=qj(G.worktreePath);if(X===Y||q===Y){if(G.repo)z.add(G.repo);if(G.worktreePath)z.add(G.worktreePath)}}return[...z]}function a5(f){let J=qX();return{async request(Y,z){return await ZX(J,Y,z,f.ctx(0))},snapshot(){let Y=f.orch.listTasks().map(e1),z={},G=Rz(f.bus,"issue.snapshot");if(G)for(let Q of f2(Y,G.repoRoot))z[Q]={...G,repoRoot:Q};let X=Rz(f.bus,"task.jobs"),q=X?.phase==="running"?{[X.taskId]:X}:{};return{tasks:Y,activeTaskId:Rz(f.bus,"active-task")?.taskId??null,engineStates:f.activity.snapshotByTask(),update:Rz(f.bus,"update")?.info??null,jobs:q,worktreeChanges:Rz(f.bus,"worktree.changes")?.changes??{},issueSnapshots:z,deliver:Rz(f.bus,"session.deliver"),uiPrefs:Rz(f.bus,"ui-prefs"),connected:!0}}}}async function h5(f){try{let J=Bun.spawn(["lsof","-nP",`-iTCP:${f}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(J.stdout).text()).split(`
78
+ `).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function J2(f,J=m5){let Y;try{Y=(await(await fetch(`http://localhost:${f}${J}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Y!==v5)throw Error(`port ${f} is in use by a non-kobe service; refusing to replace it`);let z=await h5(f);for(let X of z)try{process.kill(X,"SIGTERM")}catch{}let G=Date.now()+2000;while(Date.now()<G){if((await h5(f)).length===0)return;await new Promise((X)=>setTimeout(X,100))}}async function $5(f){if(f.takeover!==!1)await J2(f.port);let J=new Set,Y=f.onEvent((Q)=>{for(let H of J)H("channel",Q)}),z=f.hostname?.trim()||process.env.KOBE_WEB_HOST?.trim()||"127.0.0.1",G=R7(z),X=eR({link:f.link,sseSends:J,staticDir:f.staticDir?P5(f.staticDir):void 0,allowedHost:G,onSseOpen:f.onSseOpen}),q=Bun.serve({port:f.port,hostname:z,idleTimeout:0,fetch:X});return{port:q.port??f.port,hostname:z,close(){Y(),q.stop(!0)}}}var v5="kobe-web",m5="/__kobe_web",c5,n5,rq;var r5=k(()=>{tY();x1();UY();XX();Yq();Af();pY();Zq();U1();J7();X7();j7();V7();_Z();_Y();D7();C7();N7();E5();c5=["primary","success","info"],n5=/^[a-z][a-z0-9_-]{0,47}$/;rq={review:"boardPrompt.review",pr:"boardPrompt.pr"}});var p5={};jf(p5,{sameWorktreeChanges:()=>IJ,readWorktreeChanges:()=>z2,pickPushedChanges:()=>_q,parsePorcelain:()=>jG});import{spawnSync as Y2}from"child_process";function IJ(f,J){return f.added===J.added&&f.deleted===J.deleted}function _q(f,J){if(!f)return null;return f.get(J)??pq}function z2(f){if(!f)return pq;try{let J=Y2("git",["status","--porcelain=v1"],{cwd:f,encoding:"utf8",stdio:["ignore","pipe","pipe"],env:w1()});if(J.status!==0||!J.stdout)return pq;return jG(J.stdout)}catch{return pq}}function jG(f){let J=0,Y=0;for(let z of f.split(`
79
+ `)){if(!z||z.startsWith("##"))continue;let G=z.charAt(0),X=z.charAt(1);if(G==="D"||X==="D")Y+=1;else J+=1}return{added:J,deleted:Y}}var pq;var WG=k(()=>{CY();pq={added:0,deleted:0}});async function q2(f,J){let Y=await HJ("git",["status","--porcelain=v1"],{cwd:f,env:w1(),signal:J});if(Y.status!==0)throw Error("git status failed");return jG(Y.stdout)}function Q2(f){let J=new Set;for(let Y of f){if(Y.archived)continue;if(!Y.worktreePath)continue;if(f1(Y.repo)||f1(Y.worktreePath))continue;J.add(Y.worktreePath)}return J}class _5{orch;bus;options;entries=new Map;stopped=!1;constructor(f,J,Y={}){this.orch=f;this.bus=J;this.options=Y}tick(){if(this.stopped)return;if(this.options.hasSubscribers&&!this.options.hasSubscribers())return;try{let f=Q2(this.orch.listTasks()),J=!1;for(let Y of this.entries.keys()){if(f.has(Y))continue;if(this.entries.get(Y)?.value)J=!0;this.entries.delete(Y)}if(J)this.publish();for(let Y of f)this.maybeCollect(Y)}catch(f){uf("worktree-changes",f)}}stop(){this.stopped=!0}maybeCollect(f){let J=this.entries.get(f);if(!J)J={inFlight:!1,nextAllowedAt:0},this.entries.set(f,J);let Y=this.options.cadence??{timeoutMs:G2,slowRetryMs:X2,minIntervalMs:Z2},z=this.options.run??q2;fq(J,Y,(G)=>z(f,G),(G)=>{if(this.stopped)return;if(this.entries.get(f)!==J)return;if(J.value&&IJ(J.value,G))return;J.value=G,this.publish()})}publish(){let f={};for(let[J,Y]of this.entries)if(Y.value)f[J]=Y.value;this.bus.publish("worktree.changes",{changes:f})}}function o5(f,J,Y=Qj,z){if(Y<=0)return()=>{};let G=new _5(f,J,{hasSubscribers:z});G.tick();let X=setInterval(()=>G.tick(),Y);return X.unref?.(),()=>{clearInterval(X),G.stop()}}var Qj=2000,G2=4000,X2=60000,Z2=1500;var s5=k(()=>{CY();QX();Af();WG()});import{mkdir as t5,readFile as H2,unlink as Hj,writeFile as B2}from"fs/promises";import{createServer as j2}from"net";import{dirname as e5}from"path";import{StringDecoder as W2}from"string_decoder";function K2(){let f=process.env.KOBE_DAEMON_IDLE_GRACE_MS;if(f===void 0)return fK;let J=Number(f);return Number.isFinite(J)&&J>=0?J:fK}async function YK(f,J={}){let Y=J.socketPath??AJ(J.homeDir),z=J.pidPath??nJ(J.homeDir),G=J.startedAt??new Date,X=new Set,q=new Set,Q=1,H=new RB({clients:function*(){yield*X,yield*q},idleGraceMs:K2(),onIdleStop:()=>void Y0().catch(($)=>uf("daemon-idle-shutdown",$))}),B=new qB;B.onPublish(($)=>{JK(X,{type:"event",name:$.channel,payload:$.payload})});let V=new BH(B),j=new tZ(sZ(J.homeDir));await t5(e5(Y),{recursive:!0}),await t5(e5(z),{recursive:!0}),await Hj(Y).catch(()=>{});let U=j2(($)=>{let E={id:Q++,connectedAt:new Date,socket:$,buffer:"",subscribed:!1,holdsLifetime:!1,channels:null};X.add(E);let f0=new W2("utf8");$.on("data",(I)=>{E.buffer+=f0.write(I),g0(E)}),$.on("error",()=>{}),$.on("close",()=>{if(X.delete(E),E.subscribed)OY("conn",`client #${E.id} (${E.holdsLifetime?"gui":"pane"}) disconnected \u2014 ${X.size} client(s), ${H.guiCount()} gui left`);H.clientDisconnected(E.holdsLifetime)})}),L=f.subscribeTasks(($)=>{B.publish("task.snapshot",{tasks:$.map(e1)})}),O=J.checkUpdate??wG,M=J.updatePollMs??V2,R=()=>{O().then(($)=>B.publish("update",{info:$})).catch(($)=>uf("update-poller",$))},S=null;if(M>0)R(),S=setInterval(R,M),S.unref?.();let a=J.autoTitlePollMs??ZB,N=TV(f,a,()=>H.hasSubscribers()),g=_V(B,{statePath:yB(J.homeDir),debounceMs:J.uiPrefsDebounceMs??NB}),C=iV(B,{path:gB(J.homeDir),debounceMs:J.keybindingsDebounceMs??AB}),y=o5(f,B,J.worktreeChangesTickMs??Qj,()=>H.hasSubscribers()),_=$V(f,J.prStatusPollMs??Jq,()=>H.hasSubscribers()),z0=null,t={socketPath:Y,pidPath:z,startedAt:G,get webPort(){return z0?.port},clients:X,async close(){if(H.markStopping(),L(),z0?.close(),z0=null,S)clearInterval(S);N(),_(),g(),C(),y(),V.close(),JK(X,{type:"event",name:"daemon.stopping",payload:{}});for(let $ of Array.from(X))$.socket.destroy();await new Promise(($)=>U.close(()=>$())),await Hj(Y).catch(()=>{}),await Hj(z).catch(()=>{})}};await new Promise(($,E)=>{let f0=U;f0.once("error",E),U.listen(Y,()=>{f0.removeListener("error",E),$()})}),await B2(z,`${process.pid}
80
+ `,"utf8");async function Y0(){if(H.isStopping())return;H.markStopping(),await J.onStop?.(),setTimeout(()=>{t.close().catch(($)=>uf("daemon-shutdown",$))},0).unref()}let T=qX();function Q0($){return{orch:f,bus:B,activity:V,issues:j,daemon:{startedAt:G,socketPath:Y,webPort:z0?.port,pid:process.pid,guiCount:()=>H.guiCount(),stopSoon:Y0},clientId:$}}if(J.webPort!==void 0){let $=a5({orch:f,bus:B,activity:V,ctx:Q0});z0=await $5({port:J.webPort,hostname:J.webHost,staticDir:J.webStaticDir,link:$,onEvent:(E)=>B.onPublish(E),onSseOpen:()=>{let E={subscribed:!0,holdsLifetime:!0};return q.add(E),H.guiAttached(),OY("conn",`web client subscribed \u2014 ${X.size+q.size} client(s), ${H.guiCount()} gui`),()=>{q.delete(E),OY("conn",`web client disconnected \u2014 ${X.size+q.size} client(s), ${H.guiCount()} gui left`),H.clientDisconnected(!0)}}}),OY("web",`daemon web transport listening on http://${z0.hostname}:${z0.port}`)}async function p($,E){if($.name==="subscribe"){let f0=WB($.payload),I=E.subscribed;E.subscribed=!0;let G0=f0.role==="gui"?"gui":"pane";E.holdsLifetime=G0==="gui",E.channels=T9(f0.channels);let x=!I;if(E.holdsLifetime)H.guiAttached();OY("conn",`client #${E.id} subscribed as ${G0}${E.channels?` [${[...E.channels].join(",")}]`:""} \u2014 ${X.size} client(s), ${H.guiCount()} gui${x?" (collectors resume)":""}`);for(let c of B.snapshot()){if(E.channels&&!E.channels.has(c.channel))continue;FX(E,{type:"event",name:c.channel,payload:c.payload})}if(!E.channels||E.channels.has("engine-state"))for(let c of V.currentNonIdle())FX(E,{type:"event",name:"engine-state",payload:c});return{}}return ZX(T,$.name,$.payload,Q0(E.id))}async function D0($,E){try{let f0=await p($,E);FX(E,{type:"response",id:$.id,name:$.name,payload:f0})}catch(f0){FX(E,{type:"response",id:$.id,name:$.name,error:jB(f0)})}}function g0($){let E=$.buffer.indexOf(`
81
+ `);while(E!==-1){let f0=$.buffer.slice(0,E);if($.buffer=$.buffer.slice(E+1),f0.trim().length>0)try{let I=JSON.parse(f0);if(I.type!=="request")throw Error("daemon only accepts request frames from clients");D0(I,$)}catch(I){FX($,{type:"response",id:"parse-error",error:{message:I instanceof Error?I.message:String(I)}})}E=$.buffer.indexOf(`
82
+ `)}}return t}async function VG(f){try{let J=await H2(f,"utf8"),Y=Number(J.trim());return Number.isFinite(Y)?Y:null}catch{return null}}function FX(f,J){f.socket.write(PG(J))}function JK(f,J){let Y=J.type==="event"&&J.name!=="daemon.stopping"?J.name:null,z=null;for(let G of f){if(!G.subscribed&&J.type==="event")continue;if(Y&&G.channels&&!G.channels.has(Y))continue;z??=PG(J),G.socket.write(z)}}var V2=21600000,fK=3000;var oq=k(()=>{D1();n9();uV();_Z();FB();lV();aV();xz();rV();_Y();oV();r5();s5();_Z();FB()});import{unlink as zK}from"fs/promises";function U2(f){try{return process.kill(f,0),!0}catch(J){return J.code==="EPERM"}}async function KG(f,J){let Y=await VG(J),z=Y!==null&&Y!==process.pid?Y:null,G=z!==null&&U2(z),X=G?"graceful":"absent",q=new d1(f),Q=q.request("daemon.stop").catch(()=>{return}),H=new Promise((B)=>setTimeout(B,2000));if(await Promise.race([Q,H]),q.close(),G&&z!==null){let B=Date.now()+5000,V=!1;while(Date.now()<B){try{process.kill(z,0)}catch{break}if(!V&&Date.now()-(B-5000)>2000){try{process.kill(z,"SIGTERM")}catch{}X="sigterm",V=!0}await new Promise((j)=>setTimeout(j,50))}try{process.kill(z,0),process.kill(z,"SIGKILL"),X="sigkill",await new Promise((j)=>setTimeout(j,100))}catch{}}return await zK(f).catch(()=>{}),await zK(J).catch(()=>{}),{pid:Y,method:X}}var sq=k(()=>{vG();oq()});var lq={};jf(lq,{testDaemonResponds:()=>tq,ensureDaemonReachable:()=>UG,connectOrStartDaemon:()=>KJ,connectIfRunning:()=>p1});import{spawn as D2}from"child_process";import{closeSync as L2,existsSync as M2,mkdirSync as F2,openSync as O2}from"fs";import{dirname as GK,resolve as Bj}from"path";import{fileURLToPath as A2}from"url";function C2(f,J,Y,z){let G="ignore",X;try{F2(GK(z),{recursive:!0}),X=O2(z,"a"),G=["ignore",X,X]}catch{G="ignore"}if(D2(f,[...J],{detached:!0,stdio:G,env:Y}).unref(),X!==void 0)try{L2(X)}catch{}}async function UG(){let f=AJ();if(await tq(f))return f;await KG(f,nJ()).catch(()=>{});let[J,...Y]=k2(g2);C2(J,Y,process.env,QZ());let z=Date.now()+5000;while(Date.now()<z){if(await tq(f))return f;await new Promise((G)=>setTimeout(G,100))}throw Error(`kobe: daemon did not start (or stayed wedged) at ${f}`)}async function KJ(){let f=await UG(),J=new d1(f);return await J.connect(),J}async function p1(){let f=AJ();if(!await tq(f))return null;let J=new d1(f);return await J.connect(),J}async function tq(f,J=R2){let Y=new d1(f);try{await Y.connect()}catch{return Y.close(),!1}let z=Y.request("hello",{protocolVersion:n1}).then(()=>!0).catch(()=>!0),G,X=new Promise((Q)=>{G=setTimeout(()=>Q(!1),J)}),q=await Promise.race([z,X]);if(G)clearTimeout(G);return Y.close(),q}function k2(f){let J=A2(import.meta.url);if(J.startsWith("/$bunfs")||J.startsWith("B:\\~BUN"))return[process.execPath,...f];let Y=GK(J),z=[Bj(Y,"../cli/index.ts"),Bj(Y,"../../../kobe/src/cli/index.ts"),Bj(Y,"../cli/index.js")],G=z.find((X)=>M2(X));if(G)return[process.execPath,G,...f];throw Error(`kobe: could not locate kobe entry near ${Y}; checked ${z.join(", ")}`)}var g2,R2=3000;var L1=k(()=>{sq();xz();_Y();vG();g2=["daemon","start"]});function N2(f,J){let Y="",z=f;for(let G=J-1;G>=0;G--){let X=z%32;Y="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[X]+Y,z=(z-X)/32}return Y}function qK(f){let J=new Uint8Array(f);crypto.getRandomValues(J);let Y=Array(f);for(let z=0;z<f;z++)Y[z]=(J[z]??0)&31;return Y}function y2(f){for(let J=f.length-1;J>=0;J--){let Y=f[J]??0;if(Y<31)return f[J]=Y+1,!0;f[J]=0}return!1}function b2(f){let J="";for(let Y of f)J+="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Y]??"0";return J}function QK(f=Date.now()){let J;if(f===XK){let Y=ZK.slice();if(!y2(Y))J=qK(16);else J=Y}else J=qK(16);return XK=f,ZK=J,N2(f,10)+b2(J)}var XK=-1,ZK;var HK=k(()=>{ZK=Array(16).fill(0)});var jj={};jf(jj,{TaskIndexStore:()=>DG});import{mkdir as S2,open as I2,readFile as T2,rename as u2,unlink as BK}from"fs/promises";import{homedir as E2}from"os";import{dirname as x2,join as jK}from"path";class DG{homeDir;kobeDir;path;tmpPath;cache={version:TY,tasks:[]};loaded=!1;listeners=new Set;saveChain=Promise.resolve();constructor(f={}){this.homeDir=f.homeDir??E2(),this.kobeDir=jK(this.homeDir,".kobe"),this.path=jK(this.kobeDir,"tasks.json"),this.tmpPath=`${this.path}.tmp`}subscribe(f){if(this.listeners.add(f),this.loaded)try{f(this.cache.tasks.slice())}catch(J){console.error("[kobe TaskIndexStore] listener threw on subscribe:",J)}return()=>{this.listeners.delete(f)}}get filePath(){return this.path}get stateDir(){return this.kobeDir}async load(){let f;try{f=await T2(this.path,"utf8")}catch(Y){if(Y.code==="ENOENT")return this.cache={version:TY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot();throw Y}let J;try{J=JSON.parse(f)}catch(Y){return console.warn(`[kobe] tasks.json at ${this.path} is corrupted (${Y.message}); recovering with empty index. The stale file is left in place.`),this.cache={version:TY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot()}return this.cache=w2(J,this.path),this.loaded=!0,this.notifyListeners(),this.snapshot()}async save(){this.assertLoaded();let f=this.saveChain.then(()=>this.doSave());return this.saveChain=f.catch(()=>{}),f}async doSave(){await S2(x2(this.path),{recursive:!0});let f=this.snapshot(),J=`${JSON.stringify(f,null,2)}
83
+ `,Y=await I2(this.tmpPath,"w",420);try{await Y.writeFile(J,"utf8"),await Y.sync()}finally{await Y.close()}await u2(this.tmpPath,this.path)}get(f){return this.assertLoaded(),this.cache.tasks.find((J)=>J.id===f)}list(){return this.assertLoaded(),this.cache.tasks.slice()}async create(f){this.assertLoaded();let J=new Date().toISOString(),Y={archived:!1,vendor:f.vendor??Sf,...f,id:rG(QK()),createdAt:J,updatedAt:J};return this.cache.tasks.push(Y),await this.save(),this.notifyListeners(),Y}async update(f,J){this.assertLoaded();let Y=this.cache.tasks.findIndex((H)=>H.id===f);if(Y<0)throw Error(`task not found: ${f}`);let z=this.cache.tasks[Y];if(!z)throw Error(`task not found: ${f}`);let{id:G,createdAt:X,...q}=J,Q={...z,...q,id:z.id,createdAt:z.createdAt,updatedAt:new Date().toISOString()};return this.cache.tasks[Y]=Q,await this.save(),this.notifyListeners(),Q}async move(f,J,Y){this.assertLoaded();let z=this.cache.tasks.find((L)=>L.id===f);if(!z)throw Error(`task not found: ${f}`);let G=Y?.length?Y:this.cache.tasks.map((L)=>L.id),X=G.indexOf(String(f));if(X<0)throw Error(`task not movable in current group: ${f}`);let q=G[X+J];if(!q)return z;let Q=this.cache.tasks.findIndex((L)=>L.id===f),H=this.cache.tasks.findIndex((L)=>L.id===q);if(Q<0||H<0||Q===H)return z;let[B]=this.cache.tasks.splice(Q,1);if(!B)return z;let V=Q<H?H-1:H,j=J>0?V+1:V,U={...B,updatedAt:new Date().toISOString()};return this.cache.tasks.splice(j,0,U),await this.save(),this.notifyListeners(),U}async reorder(f){this.assertLoaded();let J=f.map((G)=>{let X=this.cache.tasks.findIndex((Q)=>Q.id===G.id);if(!(X>=0?this.cache.tasks[X]:void 0))throw Error(`task not found: ${G.id}`);return{idx:X,position:G.position}}),Y=!1,z=new Map;for(let{idx:G,position:X}of J){let q=this.cache.tasks[G];if(!q||q.position===X)continue;if(!z.has(G))z.set(G,q);this.cache.tasks[G]={...q,position:X},Y=!0}if(!Y)return;try{await this.save()}catch(G){for(let[X,q]of z)this.cache.tasks[X]=q;throw G}this.notifyListeners()}async archive(f,J="done"){return this.update(f,{status:J})}async remove(f){this.assertLoaded();let J=this.cache.tasks.findIndex((Y)=>Y.id===f);if(J<0)return;this.cache.tasks.splice(J,1),await this.save(),this.notifyListeners()}async _unlinkForTests(){try{await BK(this.path)}catch(f){if(f.code!=="ENOENT")throw f}try{await BK(this.tmpPath)}catch(f){if(f.code!=="ENOENT")throw f}this.cache={version:TY,tasks:[]},this.loaded=!1}assertLoaded(){if(!this.loaded)throw Error("TaskIndexStore: call load() before any other method")}snapshot(){return{version:TY,tasks:this.cache.tasks.slice()}}notifyListeners(){if(this.listeners.size===0)return;let f=this.cache.tasks.slice();for(let J of this.listeners)try{J(f)}catch(Y){console.error("[kobe TaskIndexStore] listener threw on notify:",Y)}}}function w2(f,J){if(!f||typeof f!=="object"||Array.isArray(f))return console.warn(`[kobe] tasks.json at ${J} is not an object; recovering with empty index.`),{version:TY,tasks:[]};let Y=f,z=Y.version;if(z!==void 0&&z!==1&&z!==2&&z!==3)return console.warn(`[kobe] tasks.json at ${J} has unsupported version=${String(z)}; recovering with empty index.`),{version:TY,tasks:[]};let G=Array.isArray(Y.tasks)?Y.tasks:[],X=[];for(let q of G){let Q=h2(q);if(Q)X.push(Q);else console.warn(`[kobe] dropping malformed task entry from ${J}: ${JSON.stringify(q)}`)}return{version:TY,tasks:X}}function h2(f){if(!f||typeof f!=="object")return null;let J=f;if(typeof J.id!=="string"||typeof J.title!=="string"||typeof J.repo!=="string"||typeof J.branch!=="string"||typeof J.worktreePath!=="string"||typeof J.status!=="string"||typeof J.createdAt!=="string"||typeof J.updatedAt!=="string")return null;if(!n2(J.status))return null;let Y=typeof J.archived==="boolean"?J.archived:!1,z=J.kind==="main"?"main":"task",G=z==="main"?J.status==="in_progress"||J.status==="done"?"backlog":J.status:J.status==="done"&&!Y?"in_progress":J.status;return{id:rG(J.id),title:J.title,repo:J.repo,branch:J.branch,worktreePath:J.worktreePath,status:G,archived:Y,pinned:typeof J.pinned==="boolean"?J.pinned:!1,kind:z,vendor:iY(typeof J.vendor==="string"?J.vendor:void 0),prStatus:P2(J.prStatus),...typeof J.position==="number"&&Number.isFinite(J.position)?{position:J.position}:{},...typeof J.modelEffort==="string"&&J.modelEffort.length>0?{modelEffort:J.modelEffort}:{},createdAt:J.createdAt,updatedAt:J.updatedAt}}function P2(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let J=f;if(!v2(J.provider)||!m2(J.lifecycle)||!c2(J.checkState))return;return{provider:J.provider,lifecycle:J.lifecycle,checkState:J.checkState,...typeof J.number==="number"&&Number.isFinite(J.number)?{number:J.number}:{},...typeof J.url==="string"?{url:J.url}:{},...typeof J.title==="string"?{title:J.title}:{},...typeof J.baseRef==="string"?{baseRef:J.baseRef}:{},...typeof J.headRef==="string"?{headRef:J.headRef}:{},...typeof J.reviewDecision==="string"?{reviewDecision:J.reviewDecision}:{},...typeof J.mergeable==="string"?{mergeable:J.mergeable}:{},...typeof J.lastCheckedAt==="string"?{lastCheckedAt:J.lastCheckedAt}:{},...typeof J.lastError==="string"?{lastError:J.lastError}:{}}}function v2(f){return f==="github"||f==="gitlab"||f==="bitbucket"||f==="unknown"}function m2(f){return f==="creating"||f==="open"||f==="ready_to_merge"||f==="merged"||f==="closed"||f==="unknown"}function c2(f){return f==="none"||f==="pending"||f==="passing"||f==="failing"||f==="unknown"}function n2(f){return f==="backlog"||f==="in_progress"||f==="in_review"||f==="done"||f==="canceled"||f==="error"}var TY=3;var OX=k(()=>{I1();U1();HK()});var eq;var WK=k(()=>{eq=class eq extends Error{args;cwd;exitCode;stdout;stderr;constructor(f,J,Y){super(`git ${f.join(" ")} (cwd=${J}) exited with code ${Y.exitCode}: ${Y.stderr.trim()||Y.stdout.trim()}`);this.name="GitCommandError",this.args=f,this.cwd=J,this.exitCode=Y.exitCode,this.stdout=Y.stdout,this.stderr=Y.stderr}}});var UK={};jf(UK,{GitWorktreeManager:()=>fQ});import KK from"fs";import UJ from"path";class fQ{execDeps;constructor(f=d2){this.execDeps=f}ctxFor(f){let J=this.execDeps.remoteBasePath(f);return J?{exec:this.execDeps.execForRepo(f),dir:J,remote:!0}:{exec:this.execDeps.execForRepo(f),dir:f,remote:!1}}async runGit(f,J,Y){if(!Y.cwd)throw Error("runGit(): cwd is required; refusing to inherit from process.cwd()");let z=await f.run(["git",...J],{cwd:Y.cwd,env:Y.env}),G={stdout:z.stdout,stderr:z.stderr,exitCode:z.exitCode};if(G.exitCode!==0&&!Y.allowFail)throw new eq(J,Y.cwd,G);return G}async create(f,J,Y,z){let G=this.ctxFor(f);if(uY("repo",G.dir),uY("path",Y),!J)throw Error("create(): branch must be a non-empty string");if(await G.exec.exists(Y)){let H=await this.tryDescribe(G,Y);if(H){if(H.branch!==J)throw Error(`worktree at ${Y} is on branch '${H.branch}', refusing to hijack to '${J}'`);return H}throw Error(`create(): ${Y} exists but is not a registered git worktree`)}await G.exec.mkdirp(UJ.dirname(Y));let q=await this.branchExists(G,J)?["worktree","add",Y,J]:z?["worktree","add","-b",J,Y,z]:["worktree","add","-b",J,Y];await this.runGit(G.exec,q,{cwd:G.dir});let Q=await this.tryDescribe(G,Y);if(!Q)throw Error(`create(): git reported success but ${Y} is not a worktree`);if(Q.branch!==J)throw Error(`create(): post-condition failed \u2014 expected branch '${J}' at ${Y}, got '${Q.branch}'`);return Q}async createForTask(f){let J=this.execDeps.remoteBasePath(f.repo),Y=J?LV(J,f.slug):VV(f.repo,f.slug);return this.create(f.repo,f.branch,Y,f.baseRef)}async remove(f,J){uY("path",f);let Y=this.execDeps.execForPath(f),z=J?.force===!0;if(!await Y.exists(f)){let q=await this.findRepoFor(Y,f);if(q)await this.runGit(Y,["worktree","prune"],{cwd:q,allowFail:!0});return}let G=await this.findRepoFor(Y,f);if(!G)throw Error(`remove(): ${f} is not a git worktree`);if(!z){if(await this.isDirty(f))throw Error(`remove(): refusing to remove dirty worktree at ${f} (pass { force: true } to override)`)}let X=z?["worktree","remove","--force",f]:["worktree","remove",f];await this.runGit(Y,X,{cwd:G}),await this.runGit(Y,["worktree","prune"],{cwd:G,allowFail:!0})}async list(f){let J=this.ctxFor(f);uY("repo",J.dir);let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),z=Wj(Y.stdout),G=[];for(let X of z){if(!X.path)continue;let q=J.remote?VK(J.dir,X.path):_H(f,X.path);if(!q)continue;if(!X.branch||X.detached)continue;let Q=AX(q),H=AX(X.path),B=UJ.relative(Q,H),V=UJ.join(q,B),j=await this.isDirty(X.path);G.push({path:V,branch:X.branch,head:X.head??"",dirty:j})}return G}async listAll(f){let J=this.ctxFor(f);uY("repo",J.dir);let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),z=Wj(Y.stdout),G=J.remote?J.dir:AX(J.dir),X=[];for(let q of z){if(!q.path)continue;if(q.bare)continue;if(!q.branch||q.detached)continue;if((J.remote?q.path:AX(q.path))===G)continue;let Q=await this.isDirty(q.path);X.push({path:q.path,branch:q.branch,head:q.head??"",dirty:Q,kobeManaged:J.remote?VK(J.dir,q.path)!==null:UV(f,q.path),lastActivityMs:await this.lastActivityMs(J.exec,q.path)})}return X.sort((q,Q)=>Q.lastActivityMs-q.lastActivityMs),X}async lastActivityMs(f,J){try{let Y=await this.runGit(f,["log","-1","--format=%ct"],{cwd:J}),z=Number.parseInt(Y.stdout.trim(),10);if(Number.isFinite(z)&&z>0)return z*1000}catch{}if(!f.isRemote)try{return KK.statSync(J).mtimeMs}catch{}return 0}async isDirty(f){uY("path",f);let J=this.execDeps.execForPath(f);return(await this.runGit(J,["status","--porcelain"],{cwd:f})).stdout.length>0}async currentBranch(f){uY("path",f);let J=this.execDeps.execForPath(f),z=(await this.runGit(J,["rev-parse","--abbrev-ref","HEAD"],{cwd:f})).stdout.trim();if(!z||z==="HEAD")throw Error(`currentBranch(): ${f} is in detached-HEAD state`);return z}async renameBranch(f,J,Y){if(uY("path",f),J===Y)return;let z=this.execDeps.execForPath(f),G=await this.findRepoFor(z,f);if(!G)throw Error(`renameBranch(): ${f} is not a git worktree`);await this.runGit(z,["branch","-m",J,Y],{cwd:G})}async tryDescribe(f,J){let Y=await this.runGit(f.exec,["worktree","list","--porcelain"],{cwd:f.dir}),z=Wj(Y.stdout),G=(Q)=>f.remote?Q:AX(Q),X=G(J),q=z.find((Q)=>Q.path&&G(Q.path)===X);if(!q||!q.path||!q.branch||q.detached)return null;return{path:J,branch:q.branch,head:q.head??"",dirty:await this.isDirty(q.path)}}async branchExists(f,J){let Y=`refs/heads/${J}`;return(await this.runGit(f.exec,["show-ref","--verify","--quiet",Y],{cwd:f.dir,allowFail:!0})).exitCode===0}async findRepoFor(f,J){try{let Y=await this.runGit(f,["rev-parse","--git-common-dir"],{cwd:J,allowFail:!0});if(Y.exitCode!==0)return null;let z=Y.stdout.trim();if(!z)return null;let G=UJ.isAbsolute(z)?z:UJ.resolve(J,z);return UJ.basename(G)===".git"?UJ.dirname(G):G}catch(Y){if(Y instanceof eq)return null;throw Y}}}function Wj(f){let J=[],Y=null;for(let z of f.split(`
84
+ `)){let G=z.replace(/\r$/,"");if(G===""){if(Y)J.push(Y);Y=null;continue}if(!Y)Y={};if(G.startsWith("worktree "))Y.path=G.slice(9);else if(G.startsWith("HEAD "))Y.head=G.slice(5);else if(G.startsWith("branch ")){let X=G.slice(7);Y.branch=X.startsWith("refs/heads/")?X.slice(11):X}else if(G==="detached")Y.detached=!0;else if(G==="bare")Y.bare=!0}if(Y)J.push(Y);return J}function VK(f,J){let Y=`${f.replace(/\/+$/,"")}/.kobe/worktrees`;return J===Y||J.startsWith(`${Y}/`)?Y:null}function uY(f,J){if(!J||!UJ.isAbsolute(J))throw Error(`${f} must be an absolute path, got: ${JSON.stringify(J)}`)}function AX(f){try{return KK.realpathSync(f)}catch{return UJ.resolve(f)}}var d2;var Vj=k(()=>{ZJ();Af();WK();oH();d2={execForRepo:cz,execForPath:pJ,remoteBasePath(f){return mJ(f)?.basePath??null}}});var FK={};jf(FK,{runExportSubcommand:()=>p2,renderExport:()=>MK});function i2(f){return{id:f.id,title:f.title,status:f.status,archived:String(f.archived),vendor:f.vendor??Sf,branch:f.branch,repo:f.repo,worktreePath:f.worktreePath}}function Kj(f){process.stderr.write(`kobe export: ${f}
85
+
86
+ ${LK}
87
+ `),process.exit(2)}function l2(f){let J="json";for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="--json")J="json";else if(z==="--csv")J="csv";else if(z==="--format"){let G=f[++Y];if(G===void 0)Kj("--format requires a value (json, csv, or table)");J=DK(G)}else if(z.startsWith("--format="))J=DK(z.slice(9));else Kj(`unexpected argument "${z}"`)}return J}function DK(f){if(f==="json"||f==="csv"||f==="table")return f;Kj(`unknown format "${f}" (expected json, csv, or table)`)}function a2(f){if(/[",\r\n]/.test(f))return`"${f.replace(/"/g,'""')}"`;return f}function $2(f){let J=[gX.join(",")];for(let Y of f)J.push(gX.map((z)=>a2(Y[z])).join(","));return J.join(`
88
+ `)}function r2(f){let J={};for(let G of gX)J[G]=Math.max(G.length,...f.map((X)=>X[G].length));let Y=(G)=>gX.map((X)=>G[X].padEnd(J[X])).join(" ").trimEnd(),z={};for(let G of gX)z[G]=G;return[Y(z),...f.map(Y)].join(`
89
+ `)}function MK(f,J){let Y=f.map(i2);if(J==="json")return JSON.stringify(Y,null,2);if(J==="csv")return $2(Y);return r2(Y)}async function p2(f){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(`${LK}
90
+ `);return}let J=l2(f),{TaskIndexStore:Y}=await Promise.resolve().then(() => (OX(),jj)),z=new Y;await z.load();let G=z.list();if(G.length===0&&J==="table"){process.stdout.write(`no tasks
91
+ `);return}process.stdout.write(`${MK(G,J)}
92
+ `)}var LK,gX;var OK=k(()=>{I1();LK=["Usage: kobe export [--json | --csv | --format <json|csv|table>]","","Print the task list (from ~/.kobe/tasks.json) to stdout. Read-only and","daemon-free \u2014 works with the kobe daemon down.","","Options:"," --json JSON array of tasks (default)"," --csv CSV with a header row"," --format <fmt> One of: json, csv, table"," -h, --help Print this help",""].join(`
93
+ `),gX=["id","title","status","archived","vendor","branch","repo","worktreePath"]});var RK={};jf(RK,{runRepoSubcommand:()=>t2});import{readFileSync as _2}from"fs";import{resolve as JQ}from"path";function EY(f){process.stderr.write(`kobe repo: ${f}
94
+
95
+ ${gK}
96
+ `),process.exit(2)}function AK(f){try{return _2(JQ(process.cwd(),f),"utf8")}catch(J){EY(`cannot read ${f}: ${J instanceof Error?J.message:String(J)}`)}}function o2(f){let J={};for(let Y=0;Y<f.length;Y++){let z=f[Y],G=()=>{let X=f[++Y];if(X===void 0)EY(`${z} requires a value`);return X};if(z==="--init-script")J.initScript=G();else if(z==="--init-script-file")J.initScript=AK(G());else if(z==="--init-prompt")J.initPrompt=G();else if(z==="--init-prompt-file")J.initPrompt=AK(G());else if(z.startsWith("-"))EY(`unknown flag "${z}"`);else if(J.path===void 0)J.path=z;else EY(`unexpected argument "${z}"`)}return J}function s2(f){let J,Y=!1,z=!1;for(let G of f)if(G==="--init-script")Y=!0;else if(G==="--init-prompt")z=!0;else if(G.startsWith("-"))EY(`unknown flag "${G}"`);else if(J===void 0)J=G;else EY(`unexpected argument "${G}"`);if(!Y&&!z)Y=!0,z=!0;return{path:J,clearScript:Y,clearPrompt:z}}async function t2(f){let[J,...Y]=f;if(J===void 0||J==="--help"||J==="-h"||J==="help"){process.stdout.write(`${gK}
97
+ `);return}let{getRepoInitOverride:z,setRepoInitOverride:G,resolveRepoRoot:X}=await Promise.resolve().then(() => (Af(),cJ)),{existsSync:q}=await import("fs"),{join:Q}=await import("path");if(J==="show"){let[H]=Y.filter((L)=>!L.startsWith("-")),B=X(JQ(process.cwd(),H??".")),V=z(B),j=q(Q(B,".kobe","init.sh")),U=q(Q(B,".kobe","init-prompt.md"));console.log(`repo: ${B}`),console.log(` .kobe/init.sh: ${j?"present (wins)":"absent"}`),console.log(` .kobe/init-prompt.md: ${U?"present (wins)":"absent"}`),console.log(` override initScript: ${V.initScript?LG(V.initScript):"(unset)"}`),console.log(` override initPrompt: ${V.initPrompt?LG(V.initPrompt):"(unset)"}`);return}if(J==="set"){let H=o2(Y);if(H.initScript===void 0&&H.initPrompt===void 0)EY("set needs at least one of --init-script(-file) / --init-prompt(-file)");let B=X(JQ(process.cwd(),H.path??".")),V=G(B,{...H.initScript!==void 0?{initScript:H.initScript}:{},...H.initPrompt!==void 0?{initPrompt:H.initPrompt}:{}});console.log(`updated override for ${B}`),console.log(` initScript: ${V.initScript?LG(V.initScript):"(unset)"}`),console.log(` initPrompt: ${V.initPrompt?LG(V.initPrompt):"(unset)"}`);return}if(J==="unset"){let{path:H,clearScript:B,clearPrompt:V}=s2(Y),j=X(JQ(process.cwd(),H??".")),U=G(j,{...B?{initScript:""}:{},...V?{initPrompt:""}:{}});console.log(`cleared override for ${j}`),console.log(` initScript: ${U.initScript?LG(U.initScript):"(unset)"}`),console.log(` initPrompt: ${U.initPrompt?LG(U.initPrompt):"(unset)"}`);return}EY(`unknown verb "${J}"`)}function LG(f){let J=f.replace(/\s+/g," ").trim();return J.length>60?`"${J.slice(0,57)}\u2026"`:`"${J}"`}var gK;var CK=k(()=>{gK=["Usage: kobe repo <show|set|unset> [path] [options]","","Manage a repo's per-user init override (state.json fallback for repos","that don't ship .kobe/init.sh / .kobe/init-prompt.md).","","Commands:"," show [path] Print the override + whether the repo ships .kobe/ files"," set [path] <options> Set the init script and/or first prompt"," unset [path] [--init-script] [--init-prompt] Clear one or both (default: both)","","Set options (later wins; *-file reads from disk):"," --init-script <text> Inline shell to run before the engine"," --init-script-file <path> Read the init script from a file"," --init-prompt <text> Inline first prompt for the engine"," --init-prompt-file <path> Read the first prompt from a file",""," path defaults to the current directory (resolved to its git toplevel).",""].join(`
98
+ `)});import{spawnSync as e2}from"child_process";function YC(f){let[J,Y]=f.split("/");if(!J||!Y)throw Error(`invalid GitHub repository slug: ${f}`);return{owner:J,name:Y}}function kK(f,J){let Y=f.trim();if(!Y)throw Error(`${J} is required`);return Y}function NK(f,J){let Y=J?.map((z)=>typeof z.message==="string"?z.message:null).filter((z)=>!!z);if(Y&&Y.length>0)return Y.join("; ");return f.trim()||"GitHub CLI returned an empty response"}function yK(f,J,Y){let z=["api","graphql","-f",`query=${f}`];for(let[H,B]of Object.entries(J))z.push("-f",`${H}=${B}`);let G=Y.spawn("gh",z,{encoding:"utf8"});if(G.error)throw Error(`failed to run gh: ${G.error.message}`);let X=typeof G.stdout==="string"?G.stdout:String(G.stdout??""),q=typeof G.stderr==="string"?G.stderr:String(G.stderr??""),Q;try{Q=JSON.parse(X)}catch{throw Error(`failed to parse gh response: ${NK(q,void 0)}`)}if((G.status??0)!==0||Q.errors?.length)throw Error(NK(q,Q.errors));if(!Q.data)throw Error("GitHub CLI response did not include data");return Q.data}function zC(f){return`${f}
99
99
 
100
100
  ---
101
- Submitted from kobe ${s0}.`}function MG(f,J={}){let Y=gK(f.title,"feedback title"),z=JC(gK(f.body,"feedback body")),G=(J.repoSlug??aY)();if(!G)throw Error("package repository is not a GitHub repository");let{owner:X,name:q}=fC(G),Q=f.categorySlug?.trim()||Wj,H={spawn:J.spawn??s2},V=CK(t2,{owner:X,name:q},H).repository,j=V?.id;if(!j)throw Error(`GitHub repository not found: ${G}`);let U=V.discussionCategories?.nodes?.find((M)=>M.slug===Q);if(!U)throw Error(`GitHub Discussion category not found: ${Q}`);let O=CK(e2,{repositoryId:j,categoryId:U.id,title:Y,body:z},H).createDiscussion?.discussion;if(!O?.url||typeof O.number!=="number")throw Error("GitHub did not return the created Discussion");return{number:O.number,url:O.url}}var Wj="feedback",t2=`
101
+ Submitted from kobe ${s0}.`}function MG(f,J={}){let Y=kK(f.title,"feedback title"),z=zC(kK(f.body,"feedback body")),G=(J.repoSlug??aY)();if(!G)throw Error("package repository is not a GitHub repository");let{owner:X,name:q}=YC(G),Q=f.categorySlug?.trim()||Uj,H={spawn:J.spawn??e2},V=yK(fC,{owner:X,name:q},H).repository,j=V?.id;if(!j)throw Error(`GitHub repository not found: ${G}`);let U=V.discussionCategories?.nodes?.find((M)=>M.slug===Q);if(!U)throw Error(`GitHub Discussion category not found: ${Q}`);let O=yK(JC,{repositoryId:j,categoryId:U.id,title:Y,body:z},H).createDiscussion?.discussion;if(!O?.url||typeof O.number!=="number")throw Error("GitHub did not return the created Discussion");return{number:O.number,url:O.url}}var Uj="feedback",fC=`
102
102
  query($owner: String!, $name: String!) {
103
103
  repository(owner: $owner, name: $name) {
104
104
  id
@@ -111,7 +111,7 @@ query($owner: String!, $name: String!) {
111
111
  }
112
112
  }
113
113
  }
114
- `,e2=`
114
+ `,JC=`
115
115
  mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!) {
116
116
  createDiscussion(input: {
117
117
  repositoryId: $repositoryId,
@@ -125,74 +125,74 @@ mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!)
125
125
  }
126
126
  }
127
127
  }
128
- `;var eq=k(()=>{U1()});async function kK(f={}){let J=f.mode==="require-running"?await p1():await UJ();if(!J)return null;return{client:J,close:()=>J.close()}}var NK=k(()=>{y1()});var PK={};jf(PK,{verbSchema:()=>Lj,verbHelp:()=>xK,validateAgainstSpec:()=>Uj,schemaIndex:()=>uK,runApiSubcommand:()=>NC,parseFlags:()=>Kj,parseAgentsSpec:()=>IK,invokeVerb:()=>kC,fullSchema:()=>EK,findVerb:()=>gX,deliverPrompt:()=>wK,defaultApiRuntime:()=>Mj,apiUsage:()=>fQ,VerbArgs:()=>Dj,VERB_GROUPS:()=>OG,VERBS:()=>AG,FANOUT_CAP:()=>FG,ApiError:()=>Mf,API_VERBS:()=>GC,API_SCHEMA_VERSION:()=>Vj});import{resolve as yK}from"path";function SK(f){for(let[J,Y]of Object.entries(OG))if(Y.includes(f))return J;return"other"}async function zC(f){let J=f.args.str("verb");if(J){let z=gX(J);if(!z)throw new Mf(`unknown verb: ${J}`,"BAD_VERB");return Lj(z)}let Y=f.args.str("group");if(Y)return ZC(Y);if(f.args.bool("all"))return EK();return uK()}function gX(f){let J=JQ[f]??f;return AG.find((Y)=>Y.name===J)}function Kj(f,J=new Set){let Y=new Map,z=!1,G=!1;for(let X=0;X<f.length;X++){let q=f[X];if(!q.startsWith("--")&&q!=="-h")throw new Mf(`unexpected positional arg: ${q}`,"BAD_FLAG");if(q==="-h"){G=!0;continue}let Q=q.indexOf("=");if(Q!==-1){let V=q.slice(2,Q),j=q.slice(Q+1);if(V==="pretty")z=j!=="false"&&j!=="0";else if(V==="help")G=j!=="false"&&j!=="0";else Y.set(V,j);continue}let H=q.slice(2);if(H==="pretty"){z=!0;continue}if(H==="help"){G=!0;continue}if(J.has(H)){Y.set(H,"true");continue}let B=f[X+1];if(B===void 0||B.startsWith("--"))throw new Mf(`flag --${H} requires a value`,"BAD_FLAG");Y.set(H,B),X+=1}return{flags:Y,pretty:z,help:G}}function Uj(f,J){let Y=new Set(f.flags.map((z)=>z.name));for(let z of J.keys())if(!Y.has(z))throw new Mf(`unknown flag --${z} for "${f.name}". Run \`kobe api ${f.name} --help\``,"BAD_FLAG");for(let z of f.flags){if(z.required&&!J.get(z.name))throw new Mf(`--${z.name} is required for "${f.name}"`,"MISSING_FLAG");if(z.type==="enum"&&z.values){let G=J.get(z.name);if(G!==void 0&&!z.values.includes(G))throw new Mf(`--${z.name} must be one of ${z.values.join(", ")}`,"BAD_FLAG")}if(z.type==="int"){let G=J.get(z.name);if(G!==void 0){let X=Number.parseInt(G,10);if(!Number.isInteger(X)||X<=0)throw new Mf(`--${z.name} must be a positive integer`,"BAD_FLAG")}}}}class Dj{verb;flags;constructor(f,J){this.verb=f;this.flags=J}spec(f){let J=this.verb.flags.find((Y)=>Y.name===f);if(!J)throw Error(`internal: --${f} is not declared on verb "${this.verb.name}"`);return J}str(f){this.spec(f);let J=this.flags.get(f);return J&&J.length>0?J:void 0}require(f){let J=this.str(f);if(J===void 0)throw new Mf(`--${f} is required`,"MISSING_FLAG");return J}enumOf(f){let J=this.spec(f),Y=this.str(f);if(Y===void 0)return;if(J.values&&!J.values.includes(Y))throw new Mf(`--${f} must be one of ${J.values.join(", ")}`,"BAD_FLAG");return Y}requireEnum(f){return this.require(f),this.enumOf(f)}vendor(){return this.enumOf("vendor")}bool(f){this.spec(f);let J=this.str(f);if(J===void 0)return;if(["true","1","yes"].includes(J))return!0;if(["false","0","no"].includes(J))return!1;throw new Mf(`--${f} must be a boolean (true/false)`,"BAD_FLAG")}int(f){this.spec(f);let J=this.str(f);if(J===void 0)return;let Y=Number.parseInt(J,10);if(!Number.isInteger(Y)||Y<=0)throw new Mf(`--${f} must be a positive integer`,"BAD_FLAG");return Y}path(f){let J=this.str(f);return J===void 0?void 0:yK(process.cwd(),J)}requirePath(f){return yK(process.cwd(),this.require(f))}}function IK(f){let J=[];for(let Y of f.split(",")){let z=Y.trim();if(!z)continue;let G=z.indexOf(":");if(G===-1)throw new Mf(`--agents entry "${z}" must be vendor:count`,"BAD_FLAG");let X=z.slice(0,G);if(!cf.includes(X))throw new Mf(`--agents vendor "${X}" must be one of ${cf.join(", ")}`,"BAD_FLAG");let q=Number.parseInt(z.slice(G+1),10);if(!Number.isInteger(q)||q<=0)throw new Mf(`--agents count for "${X}" must be a positive integer`,"BAD_FLAG");if(J.length+q>FG)throw new Mf(`--agents requests ${J.length+q} agents, exceeds the cap of ${FG}`,"BAD_FLAG");for(let Q=0;Q<q;Q++)J.push(X)}if(J.length===0)throw new Mf('--agents specified no agents (e.g. "claude:2,codex:1")',"BAD_FLAG");return J}function XC(f){return{name:f.name,type:f.type,required:f.required??!1,...f.values?{values:f.values}:{},...f.default!==void 0?{default:f.default}:{},...f.placeholder?{placeholder:f.placeholder}:{},description:f.description}}function Lj(f){return{name:f.name,group:SK(f.name),summary:f.summary,offline:f.offline??!1,flags:f.flags.map(XC)}}function uK(){return{apiVersion:Vj,kobeVersion:s0,hint:"Compact index. Drill into ONE verb: `kobe api schema --verb <name>` (or `kobe api <verb> --help`). One group: `--group <g>`. Whole spec: `--all`.",groups:OG,verbs:AG.map((f)=>({name:f.name,group:SK(f.name),summary:f.summary})),globalFlags:TK,aliases:JQ}}function ZC(f){let J=OG[f];if(!J)throw new Mf(`unknown group: ${f}. Groups: ${Object.keys(OG).join(", ")}`,"BAD_FLAG");return{group:f,verbs:J.map((Y)=>{let z=gX(Y);return{name:Y,summary:z?.summary??""}})}}function EK(){return{apiVersion:Vj,kobeVersion:s0,output:{success:"one JSON object on stdout, newline-terminated, exit 0",error:'{"error":{"message","code"}} on stderr, exit != 0',pretty:"--pretty indents stdout JSON"},globalFlags:TK,aliases:JQ,groups:OG,verbs:AG.map(Lj)}}function qC(f){return f.flags.map((J)=>{let Y=J.type==="enum"&&J.values?J.values.join("|"):J.placeholder??(J.type==="bool"?"":"X"),z=Y?`--${J.name} ${Y}`:`--${J.name}`;return J.required?z:`[${z}]`}).join(" ")}function xK(f){let J=[`kobe api ${f.name} ${qC(f)}`.trimEnd(),"",f.summary,""],Y=Object.entries(JQ).find(([,z])=>z===f.name)?.[0];if(Y)J.push(`Alias: ${Y}`,"");if(f.flags.length>0){J.push("Flags:");for(let z of f.flags){let G=z.required?" (required)":"",X=z.default!==void 0?` [default: ${z.default}]`:"",q=z.type==="enum"&&z.values?` {${z.values.join("|")}}`:"";J.push(` --${z.name}${q}${G}${X} ${z.description}`)}J.push("")}return J.push("Global: [--pretty] [--help]"),J.join(`
129
- `)}function fQ(){return["usage: kobe api <verb> [flags] [--pretty] [--help]","","Explore the full surface (names, flags, types) with: kobe api schema","","verbs:",...AG.map((J)=>` ${J.name.padEnd(18)} ${J.summary}`),"","Output is one JSON object on stdout (exit 0); errors are JSON on stderr (exit != 0)."].join(`
130
- `)}function QC(f,J){let Y=J?JSON.stringify(f,null,2):JSON.stringify(f);process.stdout.write(`${Y}
131
- `)}function tJ(f,J,Y=1){process.stderr.write(`${JSON.stringify({error:{message:f,code:J}})}
132
- `),process.exit(Y)}async function wK(f,J,Y,z=HC){let G=J.worktreePath;if(!G)G=(await f.request("task.ensureWorktree",{taskId:J.id})).worktreePath;if(!G)throw new Mf(`task ${J.id} has no worktree`,"NO_WORKTREE");let X=Lf(J.id),q=await z.sessionExists(X);if(!q){let B=await z.resolveEngineLaunchInit(J.repo??"",G,{kind:"none"});if(!await z.ensureSession({name:X,cwd:G,command:z.engineCommand(J.vendor),taskId:J.id,vendor:J.vendor,repo:J.repo,launchInit:B}))throw new Mf(`failed to start tmux session for ${J.id}`,"SESSION_FAILED")}let{pane:Q,ready:H}=await z.waitForEnginePane(X,!q);if(!Q)throw new Mf(`no engine pane in session ${X}`,"NO_ENGINE_PANE");return await z.pasteAndSubmit(Q,Y),{session:X,pane:Q,started:!q,engineReady:H}}async function BC(f){let J=null,Y=f.onChannel("active-task",(z)=>{J=z.taskId});try{await f.subscribe()}finally{Y()}return J}function h1(f){if(!f.client)throw new Mf("daemon required","BAD_DAEMON");return f.client}async function DJ(f,J,Y){return h1(f).request(J,Y)}async function jC(f){let J=f.args.str("title"),Y=f.args.str("body");if(J===void 0&&Y===void 0)throw new Mf("issue-update requires --title and/or --body","MISSING_FLAG");return DJ(f,"issue.mutate",{repoRoot:f.args.requirePath("repo"),op:{type:"update",id:f.args.int("id"),title:J,body:Y}})}async function WC(f){let J=h1(f),{args:Y,runtime:z}=f,X={repo:await z.resolveRepoRoot(Y.requirePath("repo"))},q=Y.str("title");if(q)X.title=q;let Q=Y.str("branch");if(Q)X.branch=Q;let H=Y.str("base-branch");if(H)X.baseRef=H;let B=Y.vendor()??await z.defaultVendor();if(B)X.vendor=B;let V=await J.request("task.create",X),j=V.taskId;await J.request("task.setActive",{taskId:j});let U=Y.enumOf("status");if(U)await J.request("task.status",{taskId:j,status:U});let L=Y.bool("pin");if(L!==void 0)await J.request("task.pin",{taskId:j,pinned:L});let O=V.task;if(U||L!==void 0)O=(await J.request("task.get",{taskId:j})).task;let M=Y.str("prompt");if(!M)return{taskId:j,task:O,started:!1};let R=await f.runtime.deliverPrompt(J,{id:j,worktreePath:O.worktreePath,vendor:O.vendor,repo:O.repo},M);return O=(await J.request("task.get",{taskId:j})).task,{taskId:j,task:O,started:R.started,engineReady:R.engineReady,session:R.session}}async function VC(f){let J=h1(f),Y=f.args.require("prompt"),z=f.args.str("task-id");if(!z){let q=await BC(J);if(!q)throw new Mf("no --task-id given and no active task \u2014 open a task first or pass --task-id","MISSING_TARGET");z=q}let G=await J.request("task.get",{taskId:z}),X=await f.runtime.deliverPrompt(J,{id:z,worktreePath:G.task.worktreePath,vendor:G.task.vendor,repo:G.task.repo},Y);return{ok:!0,taskId:z,session:X.session,started:X.started,engineReady:X.engineReady}}async function KC(f){let J=h1(f),Y=f.args.require("task-id"),z=f.args.require("prompt");return await J.request("session.deliver",{taskId:Y,text:z,source:"dispatcher"}),{ok:!0,taskId:Y,routed:"session.deliver"}}async function UC(f){let J=h1(f),Y=f.args.require("task-id"),z=f.args.require("text");return await J.request("note.file",{taskId:Y,text:z})}async function DC(f){let J=h1(f),Y=f.args.require("task-id"),z=await J.request("task.get",{taskId:Y}),G=await f.runtime.isTaskRunning(Y);return{task:z.task,running:G}}async function LC(f){return h1(f).request("task.list")}async function MC(f){let J=h1(f),z=f.args.bool("none")?null:f.args.require("task-id");return await J.request("task.setActive",{taskId:z}),{ok:!0,activeTaskId:z}}async function FC(f){let J=h1(f),Y=f.args.require("task-id"),z=f.args.bool("archived")??!0,G=await J.request("task.archive",{taskId:Y,archived:z});if(z)await f.runtime.tearDownSession(Y);return G}async function OC(f){let J=h1(f),Y=f.args.require("task-id"),z=f.args.bool("force")??!1,G=await J.request("task.delete",{taskId:Y,force:z});return await f.runtime.tearDownSession(Y),G}async function AC(f){let J=h1(f),{args:Y}=f,z={repo:Y.requirePath("repo"),worktreePath:Y.requirePath("worktree")},G=Y.str("branch");if(G)z.branch=G;let X=Y.vendor();if(X)z.vendor=X;let q=Y.str("title");if(q)z.title=q;return J.request("worktree.adopt",z)}async function gC(f){let J=h1(f),{args:Y,runtime:z}=f,G=await z.resolveRepoRoot(Y.requirePath("repo")),X=Y.require("prompt"),q=Y.str("title"),Q=Y.str("base-branch"),H=Y.str("agents"),B=await z.defaultVendor(),V=H?IK(H):Array(Y.int("count")??1).fill(Y.vendor()??B??"claude");if(V.length>FG)throw new Mf(`fan-out of ${V.length} exceeds the cap of ${FG} \u2014 spawn in batches`,"BAD_FLAG");let j=[];for(let U of V){let L={repo:G,vendor:U};if(q)L.title=q;if(Q)L.baseRef=Q;let O=await J.request("task.create",L),M=await f.runtime.deliverPrompt(J,{id:O.taskId,worktreePath:O.task.worktreePath,vendor:U,repo:O.task.repo},X);j.push({taskId:O.taskId,vendor:U,started:M.started,engineReady:M.engineReady,session:M.session})}return{count:j.length,tasks:j}}async function RC(f){let J=h1(f),{args:Y,runtime:z}=f,G=Y.str("task-ids"),X=Y.path("repo"),q;if(G)q=G.split(",").map((H)=>H.trim()).filter(Boolean);else if(X){let H=await z.resolveRepoRoot(X),{tasks:B}=await J.request("task.list");q=[];for(let V of B){if(V.archived)continue;if(await z.resolveRepoRoot(V.repo)===H)q.push(V.id)}}else throw new Mf("collect needs --task-ids id1,id2 or --repo PATH","MISSING_TARGET");let Q=[];for(let H of q){let{task:B}=await J.request("task.get",{taskId:H}),V=await z.isTaskRunning(H),j=B.worktreePath?await z.readWorktreeChanges(B.worktreePath):{added:0,deleted:0};Q.push({taskId:B.id,title:B.title,branch:B.branch,worktreePath:B.worktreePath,vendor:B.vendor,status:B.status,running:V,changes:j})}return{tasks:Q}}async function CC(f){return{ok:!0,discussion:MG({title:f.args.require("title"),body:f.args.require("body"),categorySlug:f.args.str("category")})}}function hK(f,J,Y,z){return{args:new Dj(f,J),client:Y,runtime:z}}async function kC(f,J,Y){let z=gX(f);if(!z)throw new Mf(`unknown verb: ${f}`,"BAD_VERB");let G=new Set(z.flags.filter((q)=>q.type==="bool").map((q)=>q.name)),X=Kj(J,G);return Uj(z,X.flags),z.handler(hK(z,X.flags,Y.client,Y.runtime??Mj))}async function NC(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(!J)tJ(fQ(),"MISSING_VERB",2);process.stdout.write(`${fQ()}
133
- `);return}let z=gX(J);if(!z)tJ(`unknown verb: ${J}
134
- ${fQ()}`,"BAD_VERB",2);let G=new Set(z.flags.filter((Q)=>Q.type==="bool").map((Q)=>Q.name)),X;try{X=Kj(Y,G)}catch(Q){if(Q instanceof Mf)tJ(Q.message,Q.code,2);tJ(Q instanceof Error?Q.message:String(Q),"BAD_FLAG",2)}if(X.help){process.stdout.write(`${xK(z)}
135
- `);return}try{Uj(z,X.flags)}catch(Q){if(Q instanceof Mf)tJ(Q.message,Q.code,2);tJ(Q instanceof Error?Q.message:String(Q),"BAD_FLAG",2)}let q=null;if(!z.offline)try{q=await kK()}catch(Q){tJ(`could not reach or start the kobe daemon: ${Q instanceof Error?Q.message:String(Q)}`,"BAD_DAEMON",2)}try{let Q=await z.handler(hK(z,X.flags,q?.client??null,Mj));QC(Q,X.pretty)}catch(Q){if(Q instanceof Mf)tJ(Q.message,Q.code,1);tJ(Q instanceof Error?Q.message:String(Q),"RPC_ERROR",1)}finally{q?.close()}}var Vj=2,FG=10,bK,YC,Mf,Vf,JQ,OG,AG,GC,TK,HC,Mj;var vK=k(()=>{E1();eq();Tf();Rq();K1();U1();NK();bK=["backlog","in_progress","in_review","done","canceled","error"],YC=["open","doing","hold","done"];Mf=class Mf extends Error{code;constructor(f,J){super(f);this.code=J}};Vf={repo:(f=!0)=>({name:"repo",type:"string",required:f,placeholder:"PATH",description:"Repo root (git toplevel). Relative paths resolve against $PWD."}),taskId:(f=!0)=>({name:"task-id",type:"string",required:f,placeholder:"ID",description:"Target task id (from `list` / `add`)."}),vendor:()=>({name:"vendor",type:"enum",values:cf,placeholder:"V",description:"Engine vendor for the task."}),title:()=>({name:"title",type:"string",placeholder:"T",description:"Human task title."}),prompt:(f,J)=>({name:"prompt",type:"string",required:f,placeholder:"TEXT",description:J})},JQ={"spawn-task":"add"},OG={discover:["schema"],read:["list","get-task","collect"],create:["add","fan-out"],drive:["send","dispatch","note","set-active"],edit:["rename","set-branch","set-vendor","set-status"],issues:["issue-list","issue-create","issue-set-status","issue-update"],lifecycle:["archive","pin","delete"],worktree:["ensure-worktree","adopt","discover-adoptable"],feedback:["feedback"]};AG=[{name:"schema",summary:"Explore the API. Default = a COMPACT index (groups + verb summaries, no flags). Drill in with --verb / --group; --all for the full spec.",flags:[{name:"verb",type:"string",placeholder:"NAME",description:"Full flag detail for ONE verb."},{name:"group",type:"string",placeholder:"G",description:"List the verbs in one group (compact)."},{name:"all",type:"bool",description:"The COMPLETE spec \u2014 every verb AND every flag (large; avoid by default)."}],offline:!0,handler:zC},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:LC},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[Vf.taskId()],handler:DC},{name:"add",summary:"Create a task (shows in the sidebar immediately). With --prompt it also starts the engine and delivers it. Alias: spawn-task.",flags:[Vf.repo(),Vf.title(),{name:"branch",type:"string",placeholder:"B",description:"Explicit branch name (else auto kobe/<slug>-<id>)."},{name:"base-branch",type:"string",placeholder:"B",description:"Base ref the worktree branches from."},Vf.vendor(),{name:"status",type:"enum",values:bK,default:"backlog",description:"Initial lifecycle status."},{name:"pin",type:"bool",description:"Pin the task to the top of the sidebar."},Vf.prompt(!1,"Optional first message \u2014 when set, materializes the worktree, starts the engine, and pastes it.")],handler:WC},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${FG}.`,flags:[Vf.repo(),Vf.prompt(!0,"Shared prompt delivered to every spawned task."),{name:"count",type:"int",placeholder:"N",description:"Number of tasks of one vendor (with --vendor)."},{name:"agents",type:"string",placeholder:"claude:2,codex:1",description:"Per-vendor counts (alternative to --count)."},Vf.vendor(),Vf.title(),{name:"base-branch",type:"string",placeholder:"B",description:"Base ref for every worktree."}],handler:gC},{name:"send",summary:"Paste a follow-up prompt into a task's running engine (one full turn). Defaults to the active task.",flags:[Vf.taskId(!1),Vf.prompt(!0,"Text pasted + submitted into the engine pane.")],handler:VC},{name:"dispatch",summary:"Route text into a task's live session via the daemon's session.deliver channel \u2014 the front-end hosting the session pastes it. The dispatcher's messenger (docs/design/dispatcher.md); unlike `send`, it never spawns or touches tmux itself.",flags:[Vf.taskId(!0),Vf.prompt(!0,"Text delivered into the task's engine session.")],handler:KC},{name:"note",summary:"File a one-line field note \u2014 a resolved, repo-level gotcha worth sharing. kobe forwards it to the repo's dispatcher session (the main session), which relays it to the in-flight tasks that benefit (docs/design/dispatcher.md).",flags:[Vf.taskId(!0),{name:"text",type:"string",required:!0,placeholder:"TEXT",description:"One line: the verified conclusion another session could act on."}],handler:UC},{name:"feedback",summary:"Create a GitHub Discussion in the kobe repo's Feedback category through `gh`.",flags:[{name:"title",type:"string",required:!0,placeholder:"T",description:"Discussion title."},{name:"body",type:"string",required:!0,placeholder:"TEXT",description:"Discussion body."},{name:"category",type:"string",default:Wj,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:CC},{name:"issue-list",summary:"List daemon-owned issues for a repo.",flags:[Vf.repo()],handler:(f)=>DJ(f,"issue.list",{repoRoot:f.args.requirePath("repo")})},{name:"issue-create",summary:"Create a daemon-owned issue for a repo.",flags:[Vf.repo(),{name:"title",type:"string",required:!0,placeholder:"T",description:"Issue title."},{name:"body",type:"string",placeholder:"TEXT",description:"Issue body."}],handler:(f)=>DJ(f,"issue.mutate",{repoRoot:f.args.requirePath("repo"),op:{type:"create",title:f.args.require("title"),body:f.args.str("body")}})},{name:"issue-set-status",summary:"Set a daemon-owned issue's status.",flags:[Vf.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"status",type:"enum",required:!0,values:YC,description:"New issue status."}],handler:(f)=>DJ(f,"issue.mutate",{repoRoot:f.args.requirePath("repo"),op:{type:"setStatus",id:f.args.int("id"),status:f.args.requireEnum("status")}})},{name:"issue-update",summary:"Update a daemon-owned issue's title and/or body.",flags:[Vf.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"title",type:"string",placeholder:"T",description:"New title."},{name:"body",type:"string",placeholder:"TEXT",description:"New body."}],handler:jC},{name:"collect",summary:"Read-only comparison snapshot of several tasks (identity, branch, .running, uncommitted .changes).",flags:[{name:"task-ids",type:"csv",placeholder:"a,b,c",description:"Comma-separated task ids."},Vf.repo(!1)],handler:RC},{name:"rename",summary:"Set a task's title.",flags:[Vf.taskId(),{name:"title",type:"string",required:!0,placeholder:"T",description:"New title."}],handler:(f)=>DJ(f,"task.rename",{taskId:f.args.require("task-id"),title:f.args.require("title")})},{name:"set-branch",summary:"Rename a task's branch (git branch -m if materialized, else recorded).",flags:[Vf.taskId(),{name:"branch",type:"string",required:!0,placeholder:"B",description:"New branch name."}],handler:(f)=>DJ(f,"task.setBranch",{taskId:f.args.require("task-id"),branch:f.args.require("branch")})},{name:"set-vendor",summary:"Change a task's engine vendor (takes effect on next session rebuild).",flags:[Vf.taskId(),{...Vf.vendor(),required:!0}],handler:(f)=>DJ(f,"task.setVendor",{taskId:f.args.require("task-id"),vendor:f.args.requireEnum("vendor")})},{name:"set-status",summary:"Set a task's lifecycle status.",flags:[Vf.taskId(),{name:"status",type:"enum",required:!0,values:bK,description:"New status."}],handler:(f)=>DJ(f,"task.status",{taskId:f.args.require("task-id"),status:f.args.requireEnum("status")})},{name:"archive",summary:"Archive (or with --archived=false, unarchive) a task. Non-destructive: worktree/branch/history stay.",flags:[Vf.taskId(),{name:"archived",type:"bool",default:"true",description:"true to archive, false to unarchive."}],handler:FC},{name:"pin",summary:"Pin (or with --pinned=false, unpin) a task to the top of the sidebar.",flags:[Vf.taskId(),{name:"pinned",type:"bool",default:"true",description:"true to pin, false to unpin."}],handler:(f)=>DJ(f,"task.pin",{taskId:f.args.require("task-id"),pinned:f.args.bool("pinned")??!0})},{name:"set-active",summary:"Set the shared active task (the focus every Tasks pane highlights). Pass --none to clear.",flags:[Vf.taskId(!1),{name:"none",type:"bool",description:"Clear the active task instead of setting one."}],handler:MC},{name:"ensure-worktree",summary:"Materialize a task's git worktree on disk now (without starting an engine). Returns { worktreePath }.",flags:[Vf.taskId()],handler:(f)=>DJ(f,"task.ensureWorktree",{taskId:f.args.require("task-id")})},{name:"delete",summary:"Permanently remove a task (and its worktree). DESTRUCTIVE \u2014 prefer `archive`. Needs --force on a dirty worktree.",flags:[Vf.taskId(),{name:"force",type:"bool",description:"Delete even with uncommitted changes."}],handler:OC},{name:"discover-adoptable",summary:"List existing git worktrees in a repo not yet tracked as kobe tasks. Returns { worktrees }.",flags:[Vf.repo()],handler:(f)=>DJ(f,"worktree.discoverAdoptable",{repo:f.args.requirePath("repo")})},{name:"adopt",summary:"Import an existing git worktree as a kobe task. Returns { task }.",flags:[Vf.repo(),{name:"worktree",type:"string",required:!0,placeholder:"PATH",description:"Path of the worktree to adopt."},{name:"branch",type:"string",placeholder:"B",description:"Branch override (else the worktree's own)."},Vf.vendor(),Vf.title()],handler:AC}],GC=AG.map((f)=>f.name);TK=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];HC={sessionExists:Hf,ensureSession:async(f)=>(await Promise.resolve().then(() => (J1(),r1))).ensureSession(f),waitForEnginePane:VX,pasteAndSubmit:KX,resolveEngineLaunchInit:async(f,J,Y)=>(await Promise.resolve().then(() => (GG(),EB))).resolveEngineLaunchInit(f,J,Y),engineCommand:N1};Mj={isTaskRunning:(f)=>Hf(Lf(f)),deliverPrompt:(f,J,Y)=>wK(f,J,Y),resolveRepoRoot:async(f)=>(await Promise.resolve().then(() => (gf(),qY))).resolveMainRepoRoot(f),defaultVendor:async()=>{let{getPersistedString:f}=await Promise.resolve().then(() => (gf(),qY)),J=f("lastSelectedVendor")?.trim();return J?J:void 0},readWorktreeChanges:async(f)=>(await Promise.resolve().then(() => (VG(),YK))).readWorktreeChanges(f),tearDownSession:async(f)=>{let J=Lf(f);await bJ(J).catch(()=>{}),await l1(J).catch(()=>{})}}});var dK={};jf(dK,{updatePlan:()=>mK,runUpdateSubcommand:()=>bC,parseUpdateArgs:()=>cK});import{spawnSync as yC}from"child_process";function mK(){return{command:"sh",args:["-c",hJ],display:hJ}}function cK(f){let J=!1;for(let Y=0;Y<f.length;Y+=1){let z=f[Y];if(z==="--help"||z==="-h"||z==="help")return{help:!0,dryRun:J};if(z==="--dry-run"){J=!0;continue}process.stderr.write(`kobe update: unknown argument "${z}"
136
-
137
- `),nK(process.stderr),process.exit(2)}return{help:!1,dryRun:J}}function nK(f){f.write(["Usage: kobe update [--dry-run]","","Runs kobe's GitHub-hosted update script.","","Default command:",` ${hJ}`,"","Script URL:",` ${eX}`,"","Manual fallback:",` ${iQ()}`,"","Examples:"," kobe update"," kobe update --dry-run",""].join(`
138
- `))}async function bC(f,J){let Y={spawn:J?.spawn??yC,stdout:J?.stdout??process.stdout,stderr:J?.stderr??process.stderr,exit:J?.exit??((q)=>process.exit(q))},z=cK(f);if(z.help){nK(Y.stdout);return}let G=mK();if(Y.stdout.write(`kobe ${s0} -> latest
128
+ `;var YQ=k(()=>{D1()});async function bK(f={}){let J=f.mode==="require-running"?await p1():await KJ();if(!J)return null;return{client:J,close:()=>J.close()}}var SK=k(()=>{L1()});var cK={};jf(cK,{verbSchema:()=>Oj,verbHelp:()=>PK,validateAgainstSpec:()=>Mj,schemaIndex:()=>wK,runApiSubcommand:()=>bC,parseFlags:()=>Lj,parseAgentsSpec:()=>EK,invokeVerb:()=>yC,fullSchema:()=>hK,findVerb:()=>RX,deliverPrompt:()=>vK,defaultApiRuntime:()=>Aj,apiUsage:()=>zQ,VerbArgs:()=>Fj,VERB_GROUPS:()=>OG,VERBS:()=>AG,FANOUT_CAP:()=>FG,ApiError:()=>Mf,API_VERBS:()=>ZC,API_SCHEMA_VERSION:()=>Dj});import{resolve as IK}from"path";function uK(f){for(let[J,Y]of Object.entries(OG))if(Y.includes(f))return J;return"other"}async function XC(f){let J=f.args.str("verb");if(J){let z=RX(J);if(!z)throw new Mf(`unknown verb: ${J}`,"BAD_VERB");return Oj(z)}let Y=f.args.str("group");if(Y)return QC(Y);if(f.args.bool("all"))return hK();return wK()}function RX(f){let J=GQ[f]??f;return AG.find((Y)=>Y.name===J)}function Lj(f,J=new Set){let Y=new Map,z=!1,G=!1;for(let X=0;X<f.length;X++){let q=f[X];if(!q.startsWith("--")&&q!=="-h")throw new Mf(`unexpected positional arg: ${q}`,"BAD_FLAG");if(q==="-h"){G=!0;continue}let Q=q.indexOf("=");if(Q!==-1){let V=q.slice(2,Q),j=q.slice(Q+1);if(V==="pretty")z=j!=="false"&&j!=="0";else if(V==="help")G=j!=="false"&&j!=="0";else Y.set(V,j);continue}let H=q.slice(2);if(H==="pretty"){z=!0;continue}if(H==="help"){G=!0;continue}if(J.has(H)){Y.set(H,"true");continue}let B=f[X+1];if(B===void 0||B.startsWith("--"))throw new Mf(`flag --${H} requires a value`,"BAD_FLAG");Y.set(H,B),X+=1}return{flags:Y,pretty:z,help:G}}function Mj(f,J){let Y=new Set(f.flags.map((z)=>z.name));for(let z of J.keys())if(!Y.has(z))throw new Mf(`unknown flag --${z} for "${f.name}". Run \`kobe api ${f.name} --help\``,"BAD_FLAG");for(let z of f.flags){if(z.required&&!J.get(z.name))throw new Mf(`--${z.name} is required for "${f.name}"`,"MISSING_FLAG");if(z.type==="enum"&&z.values){let G=J.get(z.name);if(G!==void 0&&!z.values.includes(G))throw new Mf(`--${z.name} must be one of ${z.values.join(", ")}`,"BAD_FLAG")}if(z.type==="int"){let G=J.get(z.name);if(G!==void 0){let X=Number.parseInt(G,10);if(!Number.isInteger(X)||X<=0)throw new Mf(`--${z.name} must be a positive integer`,"BAD_FLAG")}}}}class Fj{verb;flags;constructor(f,J){this.verb=f;this.flags=J}spec(f){let J=this.verb.flags.find((Y)=>Y.name===f);if(!J)throw Error(`internal: --${f} is not declared on verb "${this.verb.name}"`);return J}str(f){this.spec(f);let J=this.flags.get(f);return J&&J.length>0?J:void 0}require(f){let J=this.str(f);if(J===void 0)throw new Mf(`--${f} is required`,"MISSING_FLAG");return J}enumOf(f){let J=this.spec(f),Y=this.str(f);if(Y===void 0)return;if(J.values&&!J.values.includes(Y))throw new Mf(`--${f} must be one of ${J.values.join(", ")}`,"BAD_FLAG");return Y}requireEnum(f){return this.require(f),this.enumOf(f)}vendor(){return this.enumOf("vendor")}bool(f){this.spec(f);let J=this.str(f);if(J===void 0)return;if(["true","1","yes"].includes(J))return!0;if(["false","0","no"].includes(J))return!1;throw new Mf(`--${f} must be a boolean (true/false)`,"BAD_FLAG")}int(f){this.spec(f);let J=this.str(f);if(J===void 0)return;let Y=Number.parseInt(J,10);if(!Number.isInteger(Y)||Y<=0)throw new Mf(`--${f} must be a positive integer`,"BAD_FLAG");return Y}path(f){let J=this.str(f);return J===void 0?void 0:IK(process.cwd(),J)}requirePath(f){return IK(process.cwd(),this.require(f))}}function EK(f){let J=[];for(let Y of f.split(",")){let z=Y.trim();if(!z)continue;let G=z.indexOf(":");if(G===-1)throw new Mf(`--agents entry "${z}" must be vendor:count`,"BAD_FLAG");let X=z.slice(0,G);if(!cf.includes(X))throw new Mf(`--agents vendor "${X}" must be one of ${cf.join(", ")}`,"BAD_FLAG");let q=Number.parseInt(z.slice(G+1),10);if(!Number.isInteger(q)||q<=0)throw new Mf(`--agents count for "${X}" must be a positive integer`,"BAD_FLAG");if(J.length+q>FG)throw new Mf(`--agents requests ${J.length+q} agents, exceeds the cap of ${FG}`,"BAD_FLAG");for(let Q=0;Q<q;Q++)J.push(X)}if(J.length===0)throw new Mf('--agents specified no agents (e.g. "claude:2,codex:1")',"BAD_FLAG");return J}function qC(f){return{name:f.name,type:f.type,required:f.required??!1,...f.values?{values:f.values}:{},...f.default!==void 0?{default:f.default}:{},...f.placeholder?{placeholder:f.placeholder}:{},description:f.description}}function Oj(f){return{name:f.name,group:uK(f.name),summary:f.summary,offline:f.offline??!1,flags:f.flags.map(qC)}}function wK(){return{apiVersion:Dj,kobeVersion:s0,hint:"Compact index. Drill into ONE verb: `kobe api schema --verb <name>` (or `kobe api <verb> --help`). One group: `--group <g>`. Whole spec: `--all`.",groups:OG,verbs:AG.map((f)=>({name:f.name,group:uK(f.name),summary:f.summary})),globalFlags:xK,aliases:GQ}}function QC(f){let J=OG[f];if(!J)throw new Mf(`unknown group: ${f}. Groups: ${Object.keys(OG).join(", ")}`,"BAD_FLAG");return{group:f,verbs:J.map((Y)=>{let z=RX(Y);return{name:Y,summary:z?.summary??""}})}}function hK(){return{apiVersion:Dj,kobeVersion:s0,output:{success:"one JSON object on stdout, newline-terminated, exit 0",error:'{"error":{"message","code"}} on stderr, exit != 0',pretty:"--pretty indents stdout JSON"},globalFlags:xK,aliases:GQ,groups:OG,verbs:AG.map(Oj)}}function HC(f){return f.flags.map((J)=>{let Y=J.type==="enum"&&J.values?J.values.join("|"):J.placeholder??(J.type==="bool"?"":"X"),z=Y?`--${J.name} ${Y}`:`--${J.name}`;return J.required?z:`[${z}]`}).join(" ")}function PK(f){let J=[`kobe api ${f.name} ${HC(f)}`.trimEnd(),"",f.summary,""],Y=Object.entries(GQ).find(([,z])=>z===f.name)?.[0];if(Y)J.push(`Alias: ${Y}`,"");if(f.flags.length>0){J.push("Flags:");for(let z of f.flags){let G=z.required?" (required)":"",X=z.default!==void 0?` [default: ${z.default}]`:"",q=z.type==="enum"&&z.values?` {${z.values.join("|")}}`:"";J.push(` --${z.name}${q}${G}${X} ${z.description}`)}J.push("")}return J.push("Global: [--pretty] [--help]"),J.join(`
129
+ `)}function zQ(){return["usage: kobe api <verb> [flags] [--pretty] [--help]","","Explore the full surface (names, flags, types) with: kobe api schema","","verbs:",...AG.map((J)=>` ${J.name.padEnd(18)} ${J.summary}`),"","Output is one JSON object on stdout (exit 0); errors are JSON on stderr (exit != 0)."].join(`
130
+ `)}function BC(f,J){let Y=J?JSON.stringify(f,null,2):JSON.stringify(f);process.stdout.write(`${Y}
131
+ `)}function eJ(f,J,Y=1){process.stderr.write(`${JSON.stringify({error:{message:f,code:J}})}
132
+ `),process.exit(Y)}async function vK(f,J,Y,z=jC){let G=J.worktreePath;if(!G)G=(await f.request("task.ensureWorktree",{taskId:J.id})).worktreePath;if(!G)throw new Mf(`task ${J.id} has no worktree`,"NO_WORKTREE");let X=Lf(J.id),q=await z.sessionExists(X);if(!q){let B=await z.resolveEngineLaunchInit(J.repo??"",G,{kind:"none"});if(!await z.ensureSession({name:X,cwd:G,command:z.engineCommand(J.vendor),taskId:J.id,vendor:J.vendor,repo:J.repo,launchInit:B}))throw new Mf(`failed to start tmux session for ${J.id}`,"SESSION_FAILED")}let{pane:Q,ready:H}=await z.waitForEnginePane(X,!q);if(!Q)throw new Mf(`no engine pane in session ${X}`,"NO_ENGINE_PANE");return await z.pasteAndSubmit(Q,Y),{session:X,pane:Q,started:!q,engineReady:H}}async function WC(f){let J=null,Y=f.onChannel("active-task",(z)=>{J=z.taskId});try{await f.subscribe()}finally{Y()}return J}function P1(f){if(!f.client)throw new Mf("daemon required","BAD_DAEMON");return f.client}async function DJ(f,J,Y){return P1(f).request(J,Y)}async function VC(f){let J=f.args.str("title"),Y=f.args.str("body");if(J===void 0&&Y===void 0)throw new Mf("issue-update requires --title and/or --body","MISSING_FLAG");return DJ(f,"issue.mutate",{repoRoot:f.args.requirePath("repo"),op:{type:"update",id:f.args.int("id"),title:J,body:Y}})}async function KC(f){let J=P1(f),{args:Y,runtime:z}=f,X={repo:await z.resolveRepoRoot(Y.requirePath("repo"))},q=Y.str("title");if(q)X.title=q;let Q=Y.str("branch");if(Q)X.branch=Q;let H=Y.str("base-branch");if(H)X.baseRef=H;let B=Y.vendor()??await z.defaultVendor();if(B)X.vendor=B;let V=await J.request("task.create",X),j=V.taskId;await J.request("task.setActive",{taskId:j});let U=Y.enumOf("status");if(U)await J.request("task.status",{taskId:j,status:U});let L=Y.bool("pin");if(L!==void 0)await J.request("task.pin",{taskId:j,pinned:L});let O=V.task;if(U||L!==void 0)O=(await J.request("task.get",{taskId:j})).task;let M=Y.str("prompt");if(!M)return{taskId:j,task:O,started:!1};let R=await f.runtime.deliverPrompt(J,{id:j,worktreePath:O.worktreePath,vendor:O.vendor,repo:O.repo},M);return O=(await J.request("task.get",{taskId:j})).task,{taskId:j,task:O,started:R.started,engineReady:R.engineReady,session:R.session}}async function UC(f){let J=P1(f),Y=f.args.require("prompt"),z=f.args.str("task-id");if(!z){let q=await WC(J);if(!q)throw new Mf("no --task-id given and no active task \u2014 open a task first or pass --task-id","MISSING_TARGET");z=q}let G=await J.request("task.get",{taskId:z}),X=await f.runtime.deliverPrompt(J,{id:z,worktreePath:G.task.worktreePath,vendor:G.task.vendor,repo:G.task.repo},Y);return{ok:!0,taskId:z,session:X.session,started:X.started,engineReady:X.engineReady}}async function DC(f){let J=P1(f),Y=f.args.require("task-id"),z=f.args.require("prompt");return await J.request("session.deliver",{taskId:Y,text:z,source:"dispatcher"}),{ok:!0,taskId:Y,routed:"session.deliver"}}async function LC(f){let J=P1(f),Y=f.args.require("task-id"),z=f.args.require("text");return await J.request("note.file",{taskId:Y,text:z})}async function MC(f){let J=P1(f),Y=f.args.require("task-id"),z=await J.request("task.get",{taskId:Y}),G=await f.runtime.isTaskRunning(Y);return{task:z.task,running:G}}async function FC(f){return P1(f).request("task.list")}async function OC(f){let J=P1(f),z=f.args.bool("none")?null:f.args.require("task-id");return await J.request("task.setActive",{taskId:z}),{ok:!0,activeTaskId:z}}async function AC(f){let J=P1(f),Y=f.args.require("task-id"),z=f.args.bool("archived")??!0,G=await J.request("task.archive",{taskId:Y,archived:z});if(z)await f.runtime.tearDownSession(Y);return G}async function gC(f){let J=P1(f),Y=f.args.require("task-id"),z=f.args.bool("force")??!1,G=await J.request("task.delete",{taskId:Y,force:z});return await f.runtime.tearDownSession(Y),G}async function RC(f){let J=P1(f),{args:Y}=f,z={repo:Y.requirePath("repo"),worktreePath:Y.requirePath("worktree")},G=Y.str("branch");if(G)z.branch=G;let X=Y.vendor();if(X)z.vendor=X;let q=Y.str("title");if(q)z.title=q;return J.request("worktree.adopt",z)}async function CC(f){let J=P1(f),{args:Y,runtime:z}=f,G=await z.resolveRepoRoot(Y.requirePath("repo")),X=Y.require("prompt"),q=Y.str("title"),Q=Y.str("base-branch"),H=Y.str("agents"),B=await z.defaultVendor(),V=H?EK(H):Array(Y.int("count")??1).fill(Y.vendor()??B??"claude");if(V.length>FG)throw new Mf(`fan-out of ${V.length} exceeds the cap of ${FG} \u2014 spawn in batches`,"BAD_FLAG");let j=[];for(let U of V){let L={repo:G,vendor:U};if(q)L.title=q;if(Q)L.baseRef=Q;let O=await J.request("task.create",L),M=await f.runtime.deliverPrompt(J,{id:O.taskId,worktreePath:O.task.worktreePath,vendor:U,repo:O.task.repo},X);j.push({taskId:O.taskId,vendor:U,started:M.started,engineReady:M.engineReady,session:M.session})}return{count:j.length,tasks:j}}async function kC(f){let J=P1(f),{args:Y,runtime:z}=f,G=Y.str("task-ids"),X=Y.path("repo"),q;if(G)q=G.split(",").map((H)=>H.trim()).filter(Boolean);else if(X){let H=await z.resolveRepoRoot(X),{tasks:B}=await J.request("task.list");q=[];for(let V of B){if(V.archived)continue;if(await z.resolveRepoRoot(V.repo)===H)q.push(V.id)}}else throw new Mf("collect needs --task-ids id1,id2 or --repo PATH","MISSING_TARGET");let Q=[];for(let H of q){let{task:B}=await J.request("task.get",{taskId:H}),V=await z.isTaskRunning(H),j=B.worktreePath?await z.readWorktreeChanges(B.worktreePath):{added:0,deleted:0};Q.push({taskId:B.id,title:B.title,branch:B.branch,worktreePath:B.worktreePath,vendor:B.vendor,status:B.status,running:V,changes:j})}return{tasks:Q}}async function NC(f){return{ok:!0,discussion:MG({title:f.args.require("title"),body:f.args.require("body"),categorySlug:f.args.str("category")})}}function mK(f,J,Y,z){return{args:new Fj(f,J),client:Y,runtime:z}}async function yC(f,J,Y){let z=RX(f);if(!z)throw new Mf(`unknown verb: ${f}`,"BAD_VERB");let G=new Set(z.flags.filter((q)=>q.type==="bool").map((q)=>q.name)),X=Lj(J,G);return Mj(z,X.flags),z.handler(mK(z,X.flags,Y.client,Y.runtime??Aj))}async function bC(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(!J)eJ(zQ(),"MISSING_VERB",2);process.stdout.write(`${zQ()}
133
+ `);return}let z=RX(J);if(!z)eJ(`unknown verb: ${J}
134
+ ${zQ()}`,"BAD_VERB",2);let G=new Set(z.flags.filter((Q)=>Q.type==="bool").map((Q)=>Q.name)),X;try{X=Lj(Y,G)}catch(Q){if(Q instanceof Mf)eJ(Q.message,Q.code,2);eJ(Q instanceof Error?Q.message:String(Q),"BAD_FLAG",2)}if(X.help){process.stdout.write(`${PK(z)}
135
+ `);return}try{Mj(z,X.flags)}catch(Q){if(Q instanceof Mf)eJ(Q.message,Q.code,2);eJ(Q instanceof Error?Q.message:String(Q),"BAD_FLAG",2)}let q=null;if(!z.offline)try{q=await bK()}catch(Q){eJ(`could not reach or start the kobe daemon: ${Q instanceof Error?Q.message:String(Q)}`,"BAD_DAEMON",2)}try{let Q=await z.handler(mK(z,X.flags,q?.client??null,Aj));BC(Q,X.pretty)}catch(Q){if(Q instanceof Mf)eJ(Q.message,Q.code,1);eJ(Q instanceof Error?Q.message:String(Q),"RPC_ERROR",1)}finally{q?.close()}}var Dj=2,FG=10,TK,GC,Mf,Vf,GQ,OG,AG,ZC,xK,jC,Aj;var nK=k(()=>{x1();YQ();Tf();Rq();U1();D1();SK();TK=["backlog","in_progress","in_review","done","canceled","error"],GC=["open","doing","hold","done"];Mf=class Mf extends Error{code;constructor(f,J){super(f);this.code=J}};Vf={repo:(f=!0)=>({name:"repo",type:"string",required:f,placeholder:"PATH",description:"Repo root (git toplevel). Relative paths resolve against $PWD."}),taskId:(f=!0)=>({name:"task-id",type:"string",required:f,placeholder:"ID",description:"Target task id (from `list` / `add`)."}),vendor:()=>({name:"vendor",type:"enum",values:cf,placeholder:"V",description:"Engine vendor for the task."}),title:()=>({name:"title",type:"string",placeholder:"T",description:"Human task title."}),prompt:(f,J)=>({name:"prompt",type:"string",required:f,placeholder:"TEXT",description:J})},GQ={"spawn-task":"add"},OG={discover:["schema"],read:["list","get-task","collect"],create:["add","fan-out"],drive:["send","dispatch","note","set-active"],edit:["rename","set-branch","set-vendor","set-status"],issues:["issue-list","issue-create","issue-set-status","issue-update"],lifecycle:["archive","pin","delete"],worktree:["ensure-worktree","adopt","discover-adoptable"],feedback:["feedback"]};AG=[{name:"schema",summary:"Explore the API. Default = a COMPACT index (groups + verb summaries, no flags). Drill in with --verb / --group; --all for the full spec.",flags:[{name:"verb",type:"string",placeholder:"NAME",description:"Full flag detail for ONE verb."},{name:"group",type:"string",placeholder:"G",description:"List the verbs in one group (compact)."},{name:"all",type:"bool",description:"The COMPLETE spec \u2014 every verb AND every flag (large; avoid by default)."}],offline:!0,handler:XC},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:FC},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[Vf.taskId()],handler:MC},{name:"add",summary:"Create a task (shows in the sidebar immediately). With --prompt it also starts the engine and delivers it. Alias: spawn-task.",flags:[Vf.repo(),Vf.title(),{name:"branch",type:"string",placeholder:"B",description:"Explicit branch name (else auto kobe/<slug>-<id>)."},{name:"base-branch",type:"string",placeholder:"B",description:"Base ref the worktree branches from."},Vf.vendor(),{name:"status",type:"enum",values:TK,default:"backlog",description:"Initial lifecycle status."},{name:"pin",type:"bool",description:"Pin the task to the top of the sidebar."},Vf.prompt(!1,"Optional first message \u2014 when set, materializes the worktree, starts the engine, and pastes it.")],handler:KC},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${FG}.`,flags:[Vf.repo(),Vf.prompt(!0,"Shared prompt delivered to every spawned task."),{name:"count",type:"int",placeholder:"N",description:"Number of tasks of one vendor (with --vendor)."},{name:"agents",type:"string",placeholder:"claude:2,codex:1",description:"Per-vendor counts (alternative to --count)."},Vf.vendor(),Vf.title(),{name:"base-branch",type:"string",placeholder:"B",description:"Base ref for every worktree."}],handler:CC},{name:"send",summary:"Paste a follow-up prompt into a task's running engine (one full turn). Defaults to the active task.",flags:[Vf.taskId(!1),Vf.prompt(!0,"Text pasted + submitted into the engine pane.")],handler:UC},{name:"dispatch",summary:"Route text into a task's live session via the daemon's session.deliver channel \u2014 the front-end hosting the session pastes it. The dispatcher's messenger (docs/design/dispatcher.md); unlike `send`, it never spawns or touches tmux itself.",flags:[Vf.taskId(!0),Vf.prompt(!0,"Text delivered into the task's engine session.")],handler:DC},{name:"note",summary:"File a one-line field note \u2014 a resolved, repo-level gotcha worth sharing. kobe forwards it to the repo's dispatcher session (the main session), which relays it to the in-flight tasks that benefit (docs/design/dispatcher.md).",flags:[Vf.taskId(!0),{name:"text",type:"string",required:!0,placeholder:"TEXT",description:"One line: the verified conclusion another session could act on."}],handler:LC},{name:"feedback",summary:"Create a GitHub Discussion in the kobe repo's Feedback category through `gh`.",flags:[{name:"title",type:"string",required:!0,placeholder:"T",description:"Discussion title."},{name:"body",type:"string",required:!0,placeholder:"TEXT",description:"Discussion body."},{name:"category",type:"string",default:Uj,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:NC},{name:"issue-list",summary:"List daemon-owned issues for a repo.",flags:[Vf.repo()],handler:(f)=>DJ(f,"issue.list",{repoRoot:f.args.requirePath("repo")})},{name:"issue-create",summary:"Create a daemon-owned issue for a repo.",flags:[Vf.repo(),{name:"title",type:"string",required:!0,placeholder:"T",description:"Issue title."},{name:"body",type:"string",placeholder:"TEXT",description:"Issue body."}],handler:(f)=>DJ(f,"issue.mutate",{repoRoot:f.args.requirePath("repo"),op:{type:"create",title:f.args.require("title"),body:f.args.str("body")}})},{name:"issue-set-status",summary:"Set a daemon-owned issue's status.",flags:[Vf.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"status",type:"enum",required:!0,values:GC,description:"New issue status."}],handler:(f)=>DJ(f,"issue.mutate",{repoRoot:f.args.requirePath("repo"),op:{type:"setStatus",id:f.args.int("id"),status:f.args.requireEnum("status")}})},{name:"issue-update",summary:"Update a daemon-owned issue's title and/or body.",flags:[Vf.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"title",type:"string",placeholder:"T",description:"New title."},{name:"body",type:"string",placeholder:"TEXT",description:"New body."}],handler:VC},{name:"collect",summary:"Read-only comparison snapshot of several tasks (identity, branch, .running, uncommitted .changes).",flags:[{name:"task-ids",type:"csv",placeholder:"a,b,c",description:"Comma-separated task ids."},Vf.repo(!1)],handler:kC},{name:"rename",summary:"Set a task's title.",flags:[Vf.taskId(),{name:"title",type:"string",required:!0,placeholder:"T",description:"New title."}],handler:(f)=>DJ(f,"task.rename",{taskId:f.args.require("task-id"),title:f.args.require("title")})},{name:"set-branch",summary:"Rename a task's branch (git branch -m if materialized, else recorded).",flags:[Vf.taskId(),{name:"branch",type:"string",required:!0,placeholder:"B",description:"New branch name."}],handler:(f)=>DJ(f,"task.setBranch",{taskId:f.args.require("task-id"),branch:f.args.require("branch")})},{name:"set-vendor",summary:"Change a task's engine vendor (takes effect on next session rebuild).",flags:[Vf.taskId(),{...Vf.vendor(),required:!0}],handler:(f)=>DJ(f,"task.setVendor",{taskId:f.args.require("task-id"),vendor:f.args.requireEnum("vendor")})},{name:"set-status",summary:"Set a task's lifecycle status.",flags:[Vf.taskId(),{name:"status",type:"enum",required:!0,values:TK,description:"New status."}],handler:(f)=>DJ(f,"task.status",{taskId:f.args.require("task-id"),status:f.args.requireEnum("status")})},{name:"archive",summary:"Archive (or with --archived=false, unarchive) a task. Non-destructive: worktree/branch/history stay.",flags:[Vf.taskId(),{name:"archived",type:"bool",default:"true",description:"true to archive, false to unarchive."}],handler:AC},{name:"pin",summary:"Pin (or with --pinned=false, unpin) a task to the top of the sidebar.",flags:[Vf.taskId(),{name:"pinned",type:"bool",default:"true",description:"true to pin, false to unpin."}],handler:(f)=>DJ(f,"task.pin",{taskId:f.args.require("task-id"),pinned:f.args.bool("pinned")??!0})},{name:"set-active",summary:"Set the shared active task (the focus every Tasks pane highlights). Pass --none to clear.",flags:[Vf.taskId(!1),{name:"none",type:"bool",description:"Clear the active task instead of setting one."}],handler:OC},{name:"ensure-worktree",summary:"Materialize a task's git worktree on disk now (without starting an engine). Returns { worktreePath }.",flags:[Vf.taskId()],handler:(f)=>DJ(f,"task.ensureWorktree",{taskId:f.args.require("task-id")})},{name:"delete",summary:"Permanently remove a task (and its worktree). DESTRUCTIVE \u2014 prefer `archive`. Needs --force on a dirty worktree.",flags:[Vf.taskId(),{name:"force",type:"bool",description:"Delete even with uncommitted changes."}],handler:gC},{name:"discover-adoptable",summary:"List existing git worktrees in a repo not yet tracked as kobe tasks. Returns { worktrees }.",flags:[Vf.repo()],handler:(f)=>DJ(f,"worktree.discoverAdoptable",{repo:f.args.requirePath("repo")})},{name:"adopt",summary:"Import an existing git worktree as a kobe task. Returns { task }.",flags:[Vf.repo(),{name:"worktree",type:"string",required:!0,placeholder:"PATH",description:"Path of the worktree to adopt."},{name:"branch",type:"string",placeholder:"B",description:"Branch override (else the worktree's own)."},Vf.vendor(),Vf.title()],handler:RC}],ZC=AG.map((f)=>f.name);xK=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];jC={sessionExists:Hf,ensureSession:async(f)=>(await Promise.resolve().then(() => (Y1(),r1))).ensureSession(f),waitForEnginePane:WX,pasteAndSubmit:VX,resolveEngineLaunchInit:async(f,J,Y)=>(await Promise.resolve().then(() => (zG(),xB))).resolveEngineLaunchInit(f,J,Y),engineCommand:b1};Aj={isTaskRunning:(f)=>Hf(Lf(f)),deliverPrompt:(f,J,Y)=>vK(f,J,Y),resolveRepoRoot:async(f)=>(await Promise.resolve().then(() => (Af(),cJ))).resolveMainRepoRoot(f),defaultVendor:async()=>{let{getPersistedString:f}=await Promise.resolve().then(() => (Af(),cJ)),J=f("lastSelectedVendor")?.trim();return J?J:void 0},readWorktreeChanges:async(f)=>(await Promise.resolve().then(() => (WG(),p5))).readWorktreeChanges(f),tearDownSession:async(f)=>{let J=Lf(f);await bJ(J).catch(()=>{}),await l1(J).catch(()=>{})}}});var aK={};jf(aK,{updatePlan:()=>dK,runUpdateSubcommand:()=>IC,parseUpdateArgs:()=>iK});import{spawnSync as SC}from"child_process";function dK(){return{command:"sh",args:["-c",hJ],display:hJ}}function iK(f){let J=!1;for(let Y=0;Y<f.length;Y+=1){let z=f[Y];if(z==="--help"||z==="-h"||z==="help")return{help:!0,dryRun:J};if(z==="--dry-run"){J=!0;continue}process.stderr.write(`kobe update: unknown argument "${z}"
136
+
137
+ `),lK(process.stderr),process.exit(2)}return{help:!1,dryRun:J}}function lK(f){f.write(["Usage: kobe update [--dry-run]","","Runs kobe's GitHub-hosted update script.","","Default command:",` ${hJ}`,"","Script URL:",` ${fZ}`,"","Manual fallback:",` ${$Q()}`,"","Examples:"," kobe update"," kobe update --dry-run",""].join(`
138
+ `))}async function IC(f,J){let Y={spawn:J?.spawn??SC,stdout:J?.stdout??process.stdout,stderr:J?.stderr??process.stderr,exit:J?.exit??((q)=>process.exit(q))},z=iK(f);if(z.help){lK(Y.stdout);return}let G=dK();if(Y.stdout.write(`kobe ${s0} -> latest
139
139
  `),Y.stdout.write(`running: ${G.display}
140
140
  `),z.dryRun)return;let X=Y.spawn(G.command,G.args,{stdio:"inherit"});if(X.error)Y.stderr.write(`kobe update: failed to run ${G.command}: ${X.error.message}
141
- `),Y.exit(1);Y.exit(X.status??1)}var iK=k(()=>{U1()});var rK={};jf(rK,{runThemeSubcommand:()=>cC});import{existsSync as aK,mkdirSync as SC,readFileSync as IC,readdirSync as TC,unlinkSync as uC,writeFileSync as EC}from"fs";import{basename as lK,join as Oj,resolve as xC}from"path";function eJ(f){process.stderr.write(`kobe theme: ${f}
141
+ `),Y.exit(1);Y.exit(X.status??1)}var $K=k(()=>{D1()});var oK={};jf(oK,{runThemeSubcommand:()=>dC});import{existsSync as pK,mkdirSync as TC,readFileSync as uC,readdirSync as EC,unlinkSync as xC,writeFileSync as wC}from"fs";import{basename as rK,join as Rj,resolve as hC}from"path";function fY(f){process.stderr.write(`kobe theme: ${f}
142
142
  `),process.exit(1)}function xY(f){process.stderr.write(`kobe theme: ${f}
143
143
 
144
- `),$K(),process.exit(2)}function wC(){let f=[];f.push("bundled:");for(let z of[...Fj].sort())f.push(` ${z} [built-in]`);let J=qG(),Y=[];try{Y=TC(J).filter((z)=>z.endsWith(".json")).sort()}catch{}if(f.push(""),f.push(`user (${J}):`),Y.length===0)f.push(" (none)");else for(let z of Y){let G=z.slice(0,-5),X=Oj(J,z),q=Fj.includes(G)?" (overrides built-in)":"";f.push(` ${G}${q} ${X}`)}process.stdout.write(`${f.join(`
144
+ `),_K(),process.exit(2)}function PC(){let f=[];f.push("bundled:");for(let z of[...gj].sort())f.push(` ${z} [built-in]`);let J=ZG(),Y=[];try{Y=EC(J).filter((z)=>z.endsWith(".json")).sort()}catch{}if(f.push(""),f.push(`user (${J}):`),Y.length===0)f.push(" (none)");else for(let z of Y){let G=z.slice(0,-5),X=Rj(J,z),q=gj.includes(G)?" (overrides built-in)":"";f.push(` ${G}${q} ${X}`)}process.stdout.write(`${f.join(`
145
145
  `)}
146
- `)}async function hC(f){if(/^https?:\/\//i.test(f)){let X;try{X=await fetch(f)}catch(V){eJ(`failed to fetch ${f}: ${V instanceof Error?V.message:String(V)}`)}if(!X.ok)eJ(`failed to fetch ${f}: HTTP ${X.status} ${X.statusText}`);let q=await X.text(),Q=f.split(/[?#]/)[0]??f,H=lK(Q)||"theme.json",B=H.endsWith(".json")?H.slice(0,-5):H;return{text:q,defaultName:B}}let J=xC(process.cwd(),f),Y;try{Y=IC(J,"utf8")}catch(X){eJ(`failed to read ${J}: ${X instanceof Error?X.message:String(X)}`)}let z=lK(J),G=z.endsWith(".json")?z.slice(0,-5):z;return{text:Y,defaultName:G}}function PC(f){let J=null,Y,z=!1;for(let G=0;G<f.length;G+=1){let X=f[G];if(X==="--force"||X==="-f"){z=!0;continue}if(X==="--name"||X==="-n"){let q=f[G+1];if(q===void 0)xY("--name requires a value");Y=q,G+=1;continue}if(X.startsWith("--name=")){Y=X.slice(7);continue}if(X.startsWith("--"))xY(`unknown flag: ${X}`);if(J===null){J=X;continue}xY(`unexpected positional argument: ${X}`)}if(J===null)xY("missing <source> (URL or path to theme JSON)");return{source:J,opts:{name:Y,force:z}}}async function vC(f){let{source:J,opts:Y}=PC(f),{text:z,defaultName:G}=await hC(J),X;try{X=JSON.parse(z)}catch(V){eJ(`source is not valid JSON: ${V instanceof Error?V.message:String(V)}`)}let q=kq(X);if(!q.ok)eJ(`source is not a valid kobe theme: ${q.reason}`);let Q=Y.name??G;if(!Q||!/^[a-zA-Z0-9._-]+$/.test(Q))eJ(`invalid theme name "${Q}" (use letters, digits, '.', '_', '-')`);let H=qG();SC(H,{recursive:!0});let B=Oj(H,`${Q}.json`);if(aK(B)&&!Y.force)eJ(`${B} already exists (pass --force to overwrite)`);EC(B,`${JSON.stringify(q.theme,null,2)}
146
+ `)}async function vC(f){if(/^https?:\/\//i.test(f)){let X;try{X=await fetch(f)}catch(V){fY(`failed to fetch ${f}: ${V instanceof Error?V.message:String(V)}`)}if(!X.ok)fY(`failed to fetch ${f}: HTTP ${X.status} ${X.statusText}`);let q=await X.text(),Q=f.split(/[?#]/)[0]??f,H=rK(Q)||"theme.json",B=H.endsWith(".json")?H.slice(0,-5):H;return{text:q,defaultName:B}}let J=hC(process.cwd(),f),Y;try{Y=uC(J,"utf8")}catch(X){fY(`failed to read ${J}: ${X instanceof Error?X.message:String(X)}`)}let z=rK(J),G=z.endsWith(".json")?z.slice(0,-5):z;return{text:Y,defaultName:G}}function mC(f){let J=null,Y,z=!1;for(let G=0;G<f.length;G+=1){let X=f[G];if(X==="--force"||X==="-f"){z=!0;continue}if(X==="--name"||X==="-n"){let q=f[G+1];if(q===void 0)xY("--name requires a value");Y=q,G+=1;continue}if(X.startsWith("--name=")){Y=X.slice(7);continue}if(X.startsWith("--"))xY(`unknown flag: ${X}`);if(J===null){J=X;continue}xY(`unexpected positional argument: ${X}`)}if(J===null)xY("missing <source> (URL or path to theme JSON)");return{source:J,opts:{name:Y,force:z}}}async function cC(f){let{source:J,opts:Y}=mC(f),{text:z,defaultName:G}=await vC(J),X;try{X=JSON.parse(z)}catch(V){fY(`source is not valid JSON: ${V instanceof Error?V.message:String(V)}`)}let q=kq(X);if(!q.ok)fY(`source is not a valid kobe theme: ${q.reason}`);let Q=Y.name??G;if(!Q||!/^[a-zA-Z0-9._-]+$/.test(Q))fY(`invalid theme name "${Q}" (use letters, digits, '.', '_', '-')`);let H=ZG();TC(H,{recursive:!0});let B=Rj(H,`${Q}.json`);if(pK(B)&&!Y.force)fY(`${B} already exists (pass --force to overwrite)`);wC(B,`${JSON.stringify(q.theme,null,2)}
147
147
  `,"utf8"),process.stdout.write(`installed theme "${Q}" -> ${B}
148
- `)}function mC(f){let J=f[0];if(!J)xY("missing <name>");if(f.length>1)xY(`unexpected extra arguments after "${J}"`);if(Fj.includes(J))eJ(`"${J}" is a built-in theme and cannot be removed`);let Y=Oj(qG(),`${J}.json`);if(!aK(Y))eJ(`no user theme named "${J}" (looked for ${Y})`);uC(Y),process.stdout.write(`removed theme "${J}" (${Y})
149
- `)}function $K(){process.stderr.write(["Usage: kobe theme <command> [args]","","Commands:"," list List bundled and user-installed themes"," add <source> [--name <name>] Install a theme from a URL or local path"," Pass --force to overwrite an existing user theme"," remove <name> Remove a user-installed theme","",`User themes live under: ${qG()}`,"Schema: https://raw.githubusercontent.com/sma1lboy/kobe/main/packages/kobe/src/tui/context/theme/theme.schema.json",""].join(`
150
- `))}async function cC(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if($K(),!J)process.exit(2);return}if(J==="list"||J==="ls"){if(Y.length>0)xY(`"${J}" takes no arguments`);wC();return}if(J==="add"){await vC(Y);return}if(J==="remove"||J==="rm"){mC(Y);return}xY(`unknown action "${J}" (try "list", "add", or "remove")`)}var Fj;var pK=k(()=>{lf();Nq();vB();Fj=["claude","conductor","dracula","nord","opencode","osaka-jade","tokyonight"]});var tK={};jf(tK,{runFeedbackSubcommand:()=>dC,parseFeedbackArgs:()=>sK});import{readFileSync as _K}from"fs";function wY(f){process.stderr.write(`kobe feedback: ${f}
148
+ `)}function nC(f){let J=f[0];if(!J)xY("missing <name>");if(f.length>1)xY(`unexpected extra arguments after "${J}"`);if(gj.includes(J))fY(`"${J}" is a built-in theme and cannot be removed`);let Y=Rj(ZG(),`${J}.json`);if(!pK(Y))fY(`no user theme named "${J}" (looked for ${Y})`);xC(Y),process.stdout.write(`removed theme "${J}" (${Y})
149
+ `)}function _K(){process.stderr.write(["Usage: kobe theme <command> [args]","","Commands:"," list List bundled and user-installed themes"," add <source> [--name <name>] Install a theme from a URL or local path"," Pass --force to overwrite an existing user theme"," remove <name> Remove a user-installed theme","",`User themes live under: ${ZG()}`,"Schema: https://raw.githubusercontent.com/sma1lboy/kobe/main/packages/kobe/src/tui/context/theme/theme.schema.json",""].join(`
150
+ `))}async function dC(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(_K(),!J)process.exit(2);return}if(J==="list"||J==="ls"){if(Y.length>0)xY(`"${J}" takes no arguments`);PC();return}if(J==="add"){await cC(Y);return}if(J==="remove"||J==="rm"){nC(Y);return}xY(`unknown action "${J}" (try "list", "add", or "remove")`)}var gj;var sK=k(()=>{lf();Nq();mB();gj=["claude","conductor","dracula","nord","opencode","osaka-jade","tokyonight"]});var JU={};jf(JU,{runFeedbackSubcommand:()=>lC,parseFeedbackArgs:()=>fU});import{readFileSync as tK}from"fs";function wY(f){process.stderr.write(`kobe feedback: ${f}
151
151
 
152
- ${oK}
153
- `),process.exit(2)}function nC(f){if(f==="-")return _K(0,"utf8");return _K(f,"utf8")}function sK(f){let J={help:!1};for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="--help"||z==="-h"||z==="help")return{...J,help:!0};if(z==="--title"){if(J.title=f[++Y],J.title===void 0)wY("--title requires a value");continue}if(z==="--body"){if(J.body=f[++Y],J.body===void 0)wY("--body requires a value");continue}if(z==="--body-file"){if(J.bodyFile=f[++Y],J.bodyFile===void 0)wY("--body-file requires a value");continue}if(z==="--category"){if(J.category=f[++Y],J.category===void 0)wY("--category requires a value");continue}wY(`unexpected argument "${z}"`)}return J}async function dC(f){let J=sK(f);if(J.help){process.stdout.write(`${oK}
154
- `);return}if(!J.title)wY("--title is required");if(J.body&&J.bodyFile)wY("pass either --body or --body-file, not both");let Y=J.bodyFile?nC(J.bodyFile):J.body;if(!Y)wY("--body or --body-file is required");let z=MG({title:J.title,body:Y,categorySlug:J.category});console.log(`created Discussion #${z.number}: ${z.url}`)}var oK;var eK=k(()=>{eq();oK=["Usage: kobe feedback --title <text> (--body <text> | --body-file <path>) [--category <slug>]","","Create a GitHub Discussion in the kobe repository using the GitHub CLI.","","Requires:"," gh auth login","","Options:"," --title <text> Discussion title"," --body <text> Discussion body"," --body-file <path> Read the Discussion body from a file; use - for stdin"," --category <slug> Discussion category slug (default: feedback)"," -h, --help Print this help",""].join(`
155
- `)});import{homedir as iC}from"os";async function fU(f={}){let J=f.homeDir??process.env.KOBE_HOME_DIR??iC(),Y=new xz({homeDir:J});await Y.load();let z=new ZZ,G=new OZ({store:Y,worktrees:z});return{homeDir:J,orchestrator:G,store:Y,worktrees:z,async close(){G.dispose()}}}var JU=k(()=>{lG();vG();qH()});var zU={};jf(zU,{runDaemonSubcommand:()=>aC});function YU(f){f.write(["Usage: kobe daemon <command>","","Commands:"," status Print the running daemon's status JSON (default)"," start Run the daemon in the foreground (this process becomes it)"," stop Ask the running daemon to shut down"," restart Stop the daemon (graceful \u2192 SIGTERM \u2192 SIGKILL) and respawn it",""].join(`
156
- `))}function lC(){let f=process.env.KOBE_DAEMON_WEB_PORT?.trim();if(f==="0"||f==="off"||f==="false")return;let J=f?Number.parseInt(f,10):5174;return Number.isFinite(J)&&J>0?J:5174}async function aC(f){let[J="status"]=f,Y=CJ(),z=nJ();if(J==="--help"||J==="-h"||J==="help"){YU(process.stdout);return}if(J==="status"){let Q=new d1(Y);try{let H=await Q.request("daemon.status");console.log(JSON.stringify(H,null,2))}catch{let H=await KG(z);if(H)console.log(`kobe daemon: no daemon socket at ${Y} (stale pidfile pid=${H})`);else console.log(`kobe daemon: no daemon running at ${Y}`);process.exitCode=1}finally{Q.close()}return}if(J==="stop"){let Q=new d1(Y);try{await Q.request("daemon.stop"),console.log("kobe daemon: stop requested")}catch{console.log(`kobe daemon: no daemon running at ${Y}`)}finally{Q.close()}return}if(J==="restart"){await UG(Y,z),(await UJ()).close(),console.log(`kobe daemon: restarted, listening on ${Y}`);return}if(J!=="start")process.stderr.write(`kobe daemon: unknown command "${J}"
152
+ ${eK}
153
+ `),process.exit(2)}function iC(f){if(f==="-")return tK(0,"utf8");return tK(f,"utf8")}function fU(f){let J={help:!1};for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="--help"||z==="-h"||z==="help")return{...J,help:!0};if(z==="--title"){if(J.title=f[++Y],J.title===void 0)wY("--title requires a value");continue}if(z==="--body"){if(J.body=f[++Y],J.body===void 0)wY("--body requires a value");continue}if(z==="--body-file"){if(J.bodyFile=f[++Y],J.bodyFile===void 0)wY("--body-file requires a value");continue}if(z==="--category"){if(J.category=f[++Y],J.category===void 0)wY("--category requires a value");continue}wY(`unexpected argument "${z}"`)}return J}async function lC(f){let J=fU(f);if(J.help){process.stdout.write(`${eK}
154
+ `);return}if(!J.title)wY("--title is required");if(J.body&&J.bodyFile)wY("pass either --body or --body-file, not both");let Y=J.bodyFile?iC(J.bodyFile):J.body;if(!Y)wY("--body or --body-file is required");let z=MG({title:J.title,body:Y,categorySlug:J.category});console.log(`created Discussion #${z.number}: ${z.url}`)}var eK;var YU=k(()=>{YQ();eK=["Usage: kobe feedback --title <text> (--body <text> | --body-file <path>) [--category <slug>]","","Create a GitHub Discussion in the kobe repository using the GitHub CLI.","","Requires:"," gh auth login","","Options:"," --title <text> Discussion title"," --body <text> Discussion body"," --body-file <path> Read the Discussion body from a file; use - for stdin"," --category <slug> Discussion category slug (default: feedback)"," -h, --help Print this help",""].join(`
155
+ `)});import{homedir as aC}from"os";async function zU(f={}){let J=f.homeDir??process.env.KOBE_HOME_DIR??aC(),Y=new DG({homeDir:J});await Y.load();let z=new fQ,G=new lZ({store:Y,worktrees:z});return{homeDir:J,orchestrator:G,store:Y,worktrees:z,async close(){G.dispose()}}}var GU=k(()=>{eG();OX();Vj()});var ZU={};jf(ZU,{runDaemonSubcommand:()=>rC});function XU(f){f.write(["Usage: kobe daemon <command>","","Commands:"," status Print the running daemon's status JSON (default)"," start Run the daemon in the foreground (this process becomes it)"," stop Ask the running daemon to shut down"," restart Stop the daemon (graceful \u2192 SIGTERM \u2192 SIGKILL) and respawn it",""].join(`
156
+ `))}function $C(){let f=process.env.KOBE_DAEMON_WEB_PORT?.trim();if(f==="0"||f==="off"||f==="false")return;let J=f?Number.parseInt(f,10):5174;return Number.isFinite(J)&&J>0?J:5174}async function rC(f){let[J="status"]=f,Y=AJ(),z=nJ();if(J==="--help"||J==="-h"||J==="help"){XU(process.stdout);return}if(J==="status"){let Q=new d1(Y);try{let H=await Q.request("daemon.status");console.log(JSON.stringify(H,null,2))}catch{let H=await VG(z);if(H)console.log(`kobe daemon: no daemon socket at ${Y} (stale pidfile pid=${H})`);else console.log(`kobe daemon: no daemon running at ${Y}`);process.exitCode=1}finally{Q.close()}return}if(J==="stop"){let Q=new d1(Y);try{await Q.request("daemon.stop"),console.log("kobe daemon: stop requested")}catch{console.log(`kobe daemon: no daemon running at ${Y}`)}finally{Q.close()}return}if(J==="restart"){await KG(Y,z),(await KJ()).close(),console.log(`kobe daemon: restarted, listening on ${Y}`);return}if(J!=="start")process.stderr.write(`kobe daemon: unknown command "${J}"
157
157
 
158
- `),YU(process.stderr),process.exit(2);vV();let G=await fU(),X=await BK(G.orchestrator,{socketPath:Y,pidPath:z,homeDir:G.homeDir,webPort:lC(),webHost:process.env.KOBE_WEB_HOST,webStaticDir:process.env.KOBE_DAEMON_WEB_STATIC_DIR,onStop:async()=>{await G.close()}});if(console.log(`kobe daemon: listening on ${X.socketPath}`),X.webPort)console.log(`kobe daemon: web transport listening on http://127.0.0.1:${X.webPort}`);let q=async()=>{await X.close(),await G.close(),process.exit(0)};process.once("SIGINT",()=>void q()),process.once("SIGTERM",()=>void q())}var GU=k(()=>{$G();y1();oq();mz();_q();JU()});import{existsSync as $C,readFileSync as rC}from"fs";import{homedir as pC}from"os";import{join as XU}from"path";function Rj(f={}){return["skills","add",_C,"--skill","kobe","--agent",f.agent??YQ]}function zQ(f={}){return`npx ${Rj(f).join(" ")}`}function Cj(f={}){let J=f.home??pC(),Y=f.cwd??process.cwd();return[XU(J,ZU),XU(Y,ZU)]}function oC(f){let J=f.match(/kobe-skill-version:\s*(\d+)/);return J?Number.parseInt(J[1],10):null}function CX(f){let J=Cj(f).find((G)=>$C(G));if(!J)return{installed:!1,installedVersion:null,currentVersion:Aj,stale:!1};let Y=null;try{Y=oC(rC(J,"utf8"))}catch{Y=null}let z=Y===null||Y<Aj;return{installed:!0,installedVersion:Y,currentVersion:Aj,stale:z}}function qU(){let f=CX();if(!f.installed){if(kf(gj)==="1")return;af(gj,"1"),process.stderr.write(`
158
+ `),XU(process.stderr),process.exit(2);IV();let G=await zU(),X=await YK(G.orchestrator,{socketPath:Y,pidPath:z,homeDir:G.homeDir,webPort:$C(),webHost:process.env.KOBE_WEB_HOST,webStaticDir:process.env.KOBE_DAEMON_WEB_STATIC_DIR,onStop:async()=>{await G.close()}});if(console.log(`kobe daemon: listening on ${X.socketPath}`),X.webPort)console.log(`kobe daemon: web transport listening on http://127.0.0.1:${X.webPort}`);let q=async()=>{await X.close(),await G.close(),process.exit(0)};process.once("SIGINT",()=>void q()),process.once("SIGTERM",()=>void q())}var qU=k(()=>{vG();L1();sq();xz();oq();GU()});import{existsSync as pC,readFileSync as _C}from"fs";import{homedir as oC}from"os";import{join as QU}from"path";function Nj(f={}){return["skills","add",sC,"--skill","kobe","--agent",f.agent??XQ]}function ZQ(f={}){return`npx ${Nj(f).join(" ")}`}function yj(f={}){let J=f.home??oC(),Y=f.cwd??process.cwd();return[QU(J,HU),QU(Y,HU)]}function tC(f){let J=f.match(/kobe-skill-version:\s*(\d+)/);return J?Number.parseInt(J[1],10):null}function kX(f){let J=yj(f).find((G)=>pC(G));if(!J)return{installed:!1,installedVersion:null,currentVersion:Cj,stale:!1};let Y=null;try{Y=tC(_C(J,"utf8"))}catch{Y=null}let z=Y===null||Y<Cj;return{installed:!0,installedVersion:Y,currentVersion:Cj,stale:z}}function BU(){let f=kX();if(!f.installed){if(kf(kj)==="1")return;af(kj,"1"),process.stderr.write(`
159
159
  kobe: the kobe agent skill isn't installed \u2014 install it so your coding agent can drive kobe via \`kobe api\`:
160
- ${RX}
161
- (wraps \`${zQ()}\`; check anytime with \`kobe doctor\`)
160
+ ${CX}
161
+ (wraps \`${ZQ()}\`; check anytime with \`kobe doctor\`)
162
162
 
163
- `);return}if(f.stale){let J=`${gj}:v${f.currentVersion}`;if(kf(J)==="1")return;af(J,"1");let Y=f.installedVersion===null?"an older":`v${f.installedVersion}`;process.stderr.write(`
163
+ `);return}if(f.stale){let J=`${kj}:v${f.currentVersion}`;if(kf(J)==="1")return;af(J,"1");let Y=f.installedVersion===null?"an older":`v${f.installedVersion}`;process.stderr.write(`
164
164
  kobe: your kobe agent skill is out of date (${Y}; this kobe wants v${f.currentVersion}) \u2014 refresh it so \`kobe api\` guidance matches:
165
- ${RX}
165
+ ${CX}
166
166
 
167
- `)}}var Aj=2,ZU=".claude/skills/kobe/SKILL.md",RX="kobe skill install",_C="Sma1lboy/kobe",YQ="claude-code",gj="skillHintSeen";var GQ=k(()=>{gf()});var XQ={};jf(XQ,{runResetSubcommand:()=>Hk,runReloadSubcommand:()=>Bk,runDoctorSubcommand:()=>qk});import{existsSync as sC,readFileSync as BU,statSync as tC}from"fs";import{unlink as eC}from"fs/promises";import{join as jU}from"path";import{createInterface as fk}from"readline";function Jk(f){try{return process.kill(f,0),!0}catch(J){return J.code==="EPERM"}}async function Yk(f){let J=new d1(f);try{return await J.request("daemon.status")}catch{return null}finally{J.close()}}function zk(f){let J=Math.floor(f/1000);if(J<60)return`${J}s`;let Y=Math.floor(J/60);if(Y<60)return`${Y}m ${J%60}s`;return`${Math.floor(Y/60)}h ${Y%60}m`}function Gk(f){if(f<1024)return`${f} B`;if(f<1048576)return`${(f/1024).toFixed(1)} KB`;return`${(f/1048576).toFixed(1)} MB`}function kj(f){try{let J=tC(f);return`present (${Gk(J.size)}, modified ${J.mtime.toISOString()})`}catch{return"absent"}}function WU(f){try{let J=JSON.parse(BU(f,"utf8"));return Array.isArray(J.tasks)?J.tasks.length:null}catch{return null}}function Xk(f,J){try{return BU(f,"utf8").split(`
167
+ `)}}var Cj=2,HU=".claude/skills/kobe/SKILL.md",CX="kobe skill install",sC="Sma1lboy/kobe",XQ="claude-code",kj="skillHintSeen";var qQ=k(()=>{Af()});var QQ={};jf(QQ,{runResetSubcommand:()=>jk,runReloadSubcommand:()=>Wk,runDoctorSubcommand:()=>Hk});import{existsSync as eC,readFileSync as VU,statSync as fk}from"fs";import{unlink as Jk}from"fs/promises";import{join as KU}from"path";import{createInterface as Yk}from"readline";function zk(f){try{return process.kill(f,0),!0}catch(J){return J.code==="EPERM"}}async function Gk(f){let J=new d1(f);try{return await J.request("daemon.status")}catch{return null}finally{J.close()}}function Xk(f){let J=Math.floor(f/1000);if(J<60)return`${J}s`;let Y=Math.floor(J/60);if(Y<60)return`${Y}m ${J%60}s`;return`${Math.floor(Y/60)}h ${Y%60}m`}function Zk(f){if(f<1024)return`${f} B`;if(f<1048576)return`${(f/1024).toFixed(1)} KB`;return`${(f/1048576).toFixed(1)} MB`}function bj(f){try{let J=fk(f);return`present (${Zk(J.size)}, modified ${J.mtime.toISOString()})`}catch{return"absent"}}function UU(f){try{let J=JSON.parse(VU(f,"utf8"));return Array.isArray(J.tasks)?J.tasks.length:null}catch{return null}}function qk(f,J){try{return VU(f,"utf8").split(`
168
168
  `).filter((z)=>z.trim().length>0).slice(-J).join(`
169
- `)}catch{return""}}async function Nj(f){let J=Bun.spawn(Hz(...f),{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),[Y,z]=await Promise.all([new Response(J.stdout).text().catch(()=>""),J.exited]);return{code:z,stdout:Y}}async function Zk(){if(!await NJ())return 0;let{code:f,stdout:J}=await Nj(["list-sessions","-F","#{session_name}"]);if(f!==0)return 0;return J.split(`
170
- `).filter((Y)=>Y.trim().length>0).length}async function qk(f=[]){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(["Usage: kobe doctor","","Read-only diagnosis of the daemon / tmux / state. Takes no options.",""].join(`
169
+ `)}catch{return""}}async function Sj(f){let J=Bun.spawn(Hz(...f),{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),[Y,z]=await Promise.all([new Response(J.stdout).text().catch(()=>""),J.exited]);return{code:z,stdout:Y}}async function Qk(){if(!await NJ())return 0;let{code:f,stdout:J}=await Sj(["list-sessions","-F","#{session_name}"]);if(f!==0)return 0;return J.split(`
170
+ `).filter((Y)=>Y.trim().length>0).length}async function Hk(f=[]){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(["Usage: kobe doctor","","Read-only diagnosis of the daemon / tmux / state. Takes no options.",""].join(`
171
171
  `));return}let J=f.find((j)=>j.length>0);if(J!==void 0)process.stderr.write([`kobe doctor: unexpected argument "${J}"`,"","Usage: kobe doctor (read-only; takes no options)",""].join(`
172
- `)),process.exit(2);let Y=CJ(),z=nJ(),G=RZ(),X=jU(ef(),"tasks.json"),q=m1(),Q=["kobe doctor",` home: ${OJ()}`,` socket: ${Y}`,""],H=await Yk(Y);if(H){let j=typeof H.daemonPid==="number"?H.daemonPid:"?",U=typeof H.uptimeMs==="number"?zk(H.uptimeMs):"?",L=typeof H.taskCount==="number"?H.taskCount:"?",O=typeof H.attachedClients==="number"?H.attachedClients:"?";Q.push(`daemon: \u2713 running (pid ${j}, up ${U}, ${L} task(s), ${O} client(s))`);let M=typeof H.kobeVersion==="string"?H.kobeVersion:void 0;if(M&&M!==s0)Q.push(` \u26A0 stale build: daemon is v${M}, you launched v${s0}`),Q.push(" \u2192 run `kobe daemon restart`, then `kobe reload` in any open kobe sessions");else if(M)Q.push(` build: v${M}`)}else{let j=await KG(z);if(j&&Jk(j))Q.push(`daemon: \u2717 WEDGED \u2014 process alive (pid ${j}) but not accepting connections`),Q.push(" \u2192 run `kobe reset` to kill it, then relaunch kobe");else if(j)Q.push(`daemon: \u2717 not running (stale pidfile \u2192 pid ${j} is gone)`),Q.push(" \u2192 harmless; relaunch kobe, or `kobe reset` to clear the stale pidfile");else Q.push("daemon: \u2717 not running (no pidfile)");if(sC(Y))Q.push(` orphan socket file present: ${Y}`);let U=Xk(G,8);if(U){Q.push(" last lines of daemon.log:");for(let L of U.split(`
173
- `))Q.push(` \u2502 ${L}`)}}if(Q.push(""),await NJ())Q.push(`tmux: ${await Zk()} kobe session(s) on \`${QJ}\` socket`);else Q.push("tmux: \u2717 not found on PATH (task sessions need tmux)");Q.push("");let B=CX();if(!B.installed)Q.push("skill: \u2717 kobe agent skill not installed (optional \u2014 lets a coding agent drive `kobe api`)"),Q.push(` \u2192 ${RX}`);else if(B.stale){let j=B.installedVersion===null?"unstamped":`v${B.installedVersion}`;Q.push(`skill: \u26A0 kobe agent skill out of date (${j}; this kobe wants v${B.currentVersion})`),Q.push(` \u2192 ${RX}`)}else Q.push(`skill: \u2713 kobe agent skill installed (v${B.installedVersion})`);Q.push("");let V=WU(X);Q.push(`tasks.json: ${kj(X)}${V===null?"":` \u2014 ${V} task(s)`}`),Q.push(`state.json: ${kj(q)}`),Q.push(`daemon.log: ${kj(G)}`),console.log(Q.join(`
174
- `))}async function Qk(f){let J=fk({input:process.stdin,output:process.stdout});try{let Y=await new Promise((z)=>J.question(f,z));return/^y(es)?$/i.test(Y.trim())}finally{J.close()}}async function QU(f,J){try{await eC(f),console.log(` removed ${J} (${f})`)}catch(Y){if(Y.code==="ENOENT")console.log(` ${J}: already absent`);else console.error(` failed to remove ${J} (${f}): ${Y instanceof Error?Y.message:String(Y)}`)}}function HU(f){f.write(["Usage: kobe reset [--hard] [--yes]","","Recover a wedged install: stop the daemon (graceful \u2192 SIGTERM \u2192 SIGKILL),","remove its socket + pidfile, and kill all kobe tmux sessions.","Never touches your git worktrees.","","Options:"," --hard Also wipe the task index + UI state"," -y, --yes Skip the interactive confirmation"," -h, --help Print this help",""].join(`
175
- `))}async function Hk(f){if(f.includes("--help")||f.includes("-h")||f.includes("help")){HU(process.stdout);return}let J=new Set(["--hard","--yes","-y"]),Y=f.find((j)=>!J.has(j));if(Y!==void 0)process.stderr.write(`kobe reset: unknown argument "${Y}"
172
+ `)),process.exit(2);let Y=AJ(),z=nJ(),G=QZ(),X=KU(ef(),"tasks.json"),q=c1(),Q=["kobe doctor",` home: ${OJ()}`,` socket: ${Y}`,""],H=await Gk(Y);if(H){let j=typeof H.daemonPid==="number"?H.daemonPid:"?",U=typeof H.uptimeMs==="number"?Xk(H.uptimeMs):"?",L=typeof H.taskCount==="number"?H.taskCount:"?",O=typeof H.attachedClients==="number"?H.attachedClients:"?";Q.push(`daemon: \u2713 running (pid ${j}, up ${U}, ${L} task(s), ${O} client(s))`);let M=typeof H.kobeVersion==="string"?H.kobeVersion:void 0;if(M&&M!==s0)Q.push(` \u26A0 stale build: daemon is v${M}, you launched v${s0}`),Q.push(" \u2192 run `kobe daemon restart`, then `kobe reload` in any open kobe sessions");else if(M)Q.push(` build: v${M}`)}else{let j=await VG(z);if(j&&zk(j))Q.push(`daemon: \u2717 WEDGED \u2014 process alive (pid ${j}) but not accepting connections`),Q.push(" \u2192 run `kobe reset` to kill it, then relaunch kobe");else if(j)Q.push(`daemon: \u2717 not running (stale pidfile \u2192 pid ${j} is gone)`),Q.push(" \u2192 harmless; relaunch kobe, or `kobe reset` to clear the stale pidfile");else Q.push("daemon: \u2717 not running (no pidfile)");if(eC(Y))Q.push(` orphan socket file present: ${Y}`);let U=qk(G,8);if(U){Q.push(" last lines of daemon.log:");for(let L of U.split(`
173
+ `))Q.push(` \u2502 ${L}`)}}if(Q.push(""),await NJ())Q.push(`tmux: ${await Qk()} kobe session(s) on \`${qJ}\` socket`);else Q.push("tmux: \u2717 not found on PATH (task sessions need tmux)");Q.push("");let B=kX();if(!B.installed)Q.push("skill: \u2717 kobe agent skill not installed (optional \u2014 lets a coding agent drive `kobe api`)"),Q.push(` \u2192 ${CX}`);else if(B.stale){let j=B.installedVersion===null?"unstamped":`v${B.installedVersion}`;Q.push(`skill: \u26A0 kobe agent skill out of date (${j}; this kobe wants v${B.currentVersion})`),Q.push(` \u2192 ${CX}`)}else Q.push(`skill: \u2713 kobe agent skill installed (v${B.installedVersion})`);Q.push("");let V=UU(X);Q.push(`tasks.json: ${bj(X)}${V===null?"":` \u2014 ${V} task(s)`}`),Q.push(`state.json: ${bj(q)}`),Q.push(`daemon.log: ${bj(G)}`),console.log(Q.join(`
174
+ `))}async function Bk(f){let J=Yk({input:process.stdin,output:process.stdout});try{let Y=await new Promise((z)=>J.question(f,z));return/^y(es)?$/i.test(Y.trim())}finally{J.close()}}async function jU(f,J){try{await Jk(f),console.log(` removed ${J} (${f})`)}catch(Y){if(Y.code==="ENOENT")console.log(` ${J}: already absent`);else console.error(` failed to remove ${J} (${f}): ${Y instanceof Error?Y.message:String(Y)}`)}}function WU(f){f.write(["Usage: kobe reset [--hard] [--yes]","","Recover a wedged install: stop the daemon (graceful \u2192 SIGTERM \u2192 SIGKILL),","remove its socket + pidfile, and kill all kobe tmux sessions.","Never touches your git worktrees.","","Options:"," --hard Also wipe the task index + UI state"," -y, --yes Skip the interactive confirmation"," -h, --help Print this help",""].join(`
175
+ `))}async function jk(f){if(f.includes("--help")||f.includes("-h")||f.includes("help")){WU(process.stdout);return}let J=new Set(["--hard","--yes","-y"]),Y=f.find((j)=>!J.has(j));if(Y!==void 0)process.stderr.write(`kobe reset: unknown argument "${Y}"
176
176
 
177
- `),HU(process.stderr),process.exit(2);let z=f.includes("--hard"),G=f.includes("--yes")||f.includes("-y"),X=CJ(),q=nJ(),Q=jU(ef(),"tasks.json"),H=m1();if(console.log("kobe reset will:"),console.log(" \u2022 stop the kobe daemon (graceful \u2192 SIGTERM \u2192 SIGKILL)"),console.log(` \u2022 remove its socket + pidfile (${X})`),console.log(` \u2022 kill all kobe tmux sessions on the \`${QJ}\` socket`),z){let j=WU(Q);console.log(` \u2022 DELETE the task index${j===null?"":` (${j} task(s))`} \u2014 ${Q}`),console.log(` \u2022 DELETE the UI state \u2014 ${H}`)}if(console.log(" \u2022 NOT touch your git worktrees under ~/.kobe/worktrees/ or legacy repo-local roots"),!z)console.log(" (your task list & worktrees are kept \u2014 add --hard to also wipe the task index + UI state)");if(!G){if(!process.stdin.isTTY){console.log(`
178
- re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await Qk(z?`
177
+ `),WU(process.stderr),process.exit(2);let z=f.includes("--hard"),G=f.includes("--yes")||f.includes("-y"),X=AJ(),q=nJ(),Q=KU(ef(),"tasks.json"),H=c1();if(console.log("kobe reset will:"),console.log(" \u2022 stop the kobe daemon (graceful \u2192 SIGTERM \u2192 SIGKILL)"),console.log(` \u2022 remove its socket + pidfile (${X})`),console.log(` \u2022 kill all kobe tmux sessions on the \`${qJ}\` socket`),z){let j=UU(Q);console.log(` \u2022 DELETE the task index${j===null?"":` (${j} task(s))`} \u2014 ${Q}`),console.log(` \u2022 DELETE the UI state \u2014 ${H}`)}if(console.log(" \u2022 NOT touch your git worktrees under ~/.kobe/worktrees/ or legacy repo-local roots"),!z)console.log(" (your task list & worktrees are kept \u2014 add --hard to also wipe the task index + UI state)");if(!G){if(!process.stdin.isTTY){console.log(`
178
+ re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await Bk(z?`
179
179
  Stop daemon, kill sessions AND wipe task index? [y/N] `:`
180
- Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:B,method:V}=await UG(X,q);if(console.log(V==="absent"?" daemon: was not running (cleared any stale socket/pidfile)":` daemon: stopped via ${V}${B?` (pid ${B})`:""}`),await NJ()){let{code:j}=await Nj(["kill-server"]);console.log(j===0?` tmux: killed all sessions on \`${QJ}\``:` tmux: no sessions on \`${QJ}\``)}else console.log(" tmux: not installed \u2014 no sessions to kill");if(z)await QU(Q,"task index"),await QU(H,"UI state");console.log(`
181
- kobe: reset complete. Relaunch kobe to start fresh.`)}async function Bk(f=[]){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(["Usage: kobe reload","","Restart kobe's Tasks + Ops panes in every live session, in place.","Picks up new kobe code without `kobe reset` \u2014 the engine (claude)","panes and your running turns are never touched. Takes no options.",""].join(`
180
+ Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:B,method:V}=await KG(X,q);if(console.log(V==="absent"?" daemon: was not running (cleared any stale socket/pidfile)":` daemon: stopped via ${V}${B?` (pid ${B})`:""}`),await NJ()){let{code:j}=await Sj(["kill-server"]);console.log(j===0?` tmux: killed all sessions on \`${qJ}\``:` tmux: no sessions on \`${qJ}\``)}else console.log(" tmux: not installed \u2014 no sessions to kill");if(z)await jU(Q,"task index"),await jU(H,"UI state");console.log(`
181
+ kobe: reset complete. Relaunch kobe to start fresh.`)}async function Wk(f=[]){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(["Usage: kobe reload","","Restart kobe's Tasks + Ops panes in every live session, in place.","Picks up new kobe code without `kobe reset` \u2014 the engine (claude)","panes and your running turns are never touched. Takes no options.",""].join(`
182
182
  `));return}let J=f.find((Q)=>Q.length>0);if(J!==void 0)process.stderr.write(`kobe reload: unexpected argument "${J}"
183
183
 
184
184
  Usage: kobe reload (takes no options)
185
- `),process.exit(2);if(!await NJ()){console.log("kobe reload: tmux is not installed \u2014 no panes to reload");return}let{code:Y,stdout:z}=await Nj(["list-sessions","-F","#{session_name}"]);if(Y!==0){console.log(`kobe reload: no kobe tmux sessions on the \`${QJ}\` socket`);return}let G=z.split(`
186
- `).map((Q)=>Q.trim()).filter((Q)=>Q.length>0);if(G.length===0){console.log(`kobe reload: no kobe tmux sessions on the \`${QJ}\` socket`);return}let{refreshKobeWorkspacePanes:X}=await Promise.resolve().then(() => (J1(),r1)),q=0;for(let Q of G)try{await X(Q),q++}catch(H){console.error(` failed to reload session "${Q}": ${H instanceof Error?H.message:String(H)}`)}console.log(`kobe: reloaded Tasks/Ops panes in ${q}/${G.length} session(s) \u2014 engine panes untouched`)}var ZQ=k(()=>{$G();oq();mz();_q();lf();GQ();Tf();U1()});var FU={};jf(FU,{runWebSubcommand:()=>Mk});import{existsSync as UU}from"fs";import{homedir as jk}from"os";import{resolve as qQ}from"path";import{fileURLToPath as DU}from"url";function VU(){let f=process.env.KOBE_HOME_DIR?.trim();return f?`sandbox: ${f}`:`${jk()}/.kobe (production)`}function Vk(){let f=DU(import.meta.url),J=[qQ(f,"../../../../kobe-web/dist"),qQ(f,"../../web-ui")];for(let Y of J)if(UU(`${Y}/index.html`))return Y;return}function Kk(){let f=DU(import.meta.url),J=[qQ(f,"../../../../kobe-web/pty-server.mjs"),qQ(f,"../../web-ui/pty-server.mjs")];for(let Y of J)if(UU(Y))return Y;return}async function KU(f){try{let J=Bun.spawn(["lsof","-nP",`-iTCP:${f}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(J.stdout).text()).split(`
187
- `).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function Uk(f){let J;try{J=(await(await fetch(`http://localhost:${f}${MU}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(J!==LU)throw Error(`PTY port ${f} is in use by a non-kobe service; refusing to replace it`);let Y=await KU(f);for(let G of Y)try{process.kill(G,"SIGTERM")}catch{}let z=Date.now()+2000;while(Date.now()<z){if((await KU(f)).length===0)return;await new Promise((G)=>setTimeout(G,100))}}async function Dk(f){let J=Kk();if(!J)return null;let Y=f.webPort+2;if(f.takeover)await Uk(Y);return Bun.spawn(["node",J],{stdin:"ignore",stdout:"inherit",stderr:"inherit",env:{...process.env,KOBE_DAEMON_WEB_PORT:String(f.webPort),KOBE_PTY_PORT:String(Y)}})}async function Lk(f,J){if(process.env.KOBE_DAEMON_WEB_PORT=String(f),J)process.env.KOBE_DAEMON_WEB_STATIC_DIR=J;await DG();let Y;try{Y=(await(await fetch(`http://127.0.0.1:${f}${MU}`,{signal:AbortSignal.timeout(1500)})).text()).trim()}catch(z){throw Error(`daemon web transport is not reachable on :${f}; run \`kobe daemon restart\` so the daemon picks up this build (${z instanceof Error?z.message:String(z)})`)}if(Y!==LU)throw Error(`unexpected daemon web health marker on :${f}: ${Y}`);if(J){if(!(await fetch(`http://127.0.0.1:${f}/`,{signal:AbortSignal.timeout(1500)})).ok)throw Error(`daemon web transport is up on :${f} but is not serving web assets; run \`kobe daemon restart\` so it picks up ${J}`)}}async function Mk(f){if(f.includes("--help")||f.includes("-h")){process.stdout.write(Wk);return}let J=5174,Y=f.indexOf("--port");if(Y!==-1){let z=Number.parseInt(f[Y+1]??"",10);if(!Number.isFinite(z))process.stderr.write(`kobe web: --port needs a number
188
- `),process.exit(2);J=z}try{let z=f.includes("--routes-only")||f.includes("--bridge-only"),G=!f.includes("--no-takeover"),X=z?void 0:Vk();if(!z&&!X)throw Error("web assets are missing from this kobe build; run `bun run build` in packages/kobe, or `bun run dev` in packages/kobe-web from a source checkout");await Lk(J,X);let q=null,Q=!1,H=()=>{if(Q)return;Q=!0,q?.kill(),q=null};if(z)process.stdout.write(`kobe daemon web transport listening on http://localhost:${J} (routes only)
189
- `),process.stdout.write(` home: ${VU()}
190
- `);else if(q=await Dk({webPort:J,takeover:G}),process.stdout.write(`kobe web \u2192 http://localhost:${J}
191
- `),process.stdout.write(` home: ${VU()}
185
+ `),process.exit(2);if(!await NJ()){console.log("kobe reload: tmux is not installed \u2014 no panes to reload");return}let{code:Y,stdout:z}=await Sj(["list-sessions","-F","#{session_name}"]);if(Y!==0){console.log(`kobe reload: no kobe tmux sessions on the \`${qJ}\` socket`);return}let G=z.split(`
186
+ `).map((Q)=>Q.trim()).filter((Q)=>Q.length>0);if(G.length===0){console.log(`kobe reload: no kobe tmux sessions on the \`${qJ}\` socket`);return}let{refreshKobeWorkspacePanes:X}=await Promise.resolve().then(() => (Y1(),r1)),q=0;for(let Q of G)try{await X(Q),q++}catch(H){console.error(` failed to reload session "${Q}": ${H instanceof Error?H.message:String(H)}`)}console.log(`kobe: reloaded Tasks/Ops panes in ${q}/${G.length} session(s) \u2014 engine panes untouched`)}var HQ=k(()=>{vG();sq();xz();oq();lf();qQ();Tf();D1()});var gU={};jf(gU,{runWebSubcommand:()=>Ok});import{existsSync as MU}from"fs";import{homedir as Vk}from"os";import{resolve as BQ}from"path";import{fileURLToPath as FU}from"url";function DU(){let f=process.env.KOBE_HOME_DIR?.trim();return f?`sandbox: ${f}`:`${Vk()}/.kobe (production)`}function Uk(){let f=FU(import.meta.url),J=[BQ(f,"../../../../kobe-web/dist"),BQ(f,"../../web-ui")];for(let Y of J)if(MU(`${Y}/index.html`))return Y;return}function Dk(){let f=FU(import.meta.url),J=[BQ(f,"../../../../kobe-web/pty-server.mjs"),BQ(f,"../../web-ui/pty-server.mjs")];for(let Y of J)if(MU(Y))return Y;return}async function LU(f){try{let J=Bun.spawn(["lsof","-nP",`-iTCP:${f}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(J.stdout).text()).split(`
187
+ `).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function Lk(f){let J;try{J=(await(await fetch(`http://localhost:${f}${AU}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(J!==OU)throw Error(`PTY port ${f} is in use by a non-kobe service; refusing to replace it`);let Y=await LU(f);for(let G of Y)try{process.kill(G,"SIGTERM")}catch{}let z=Date.now()+2000;while(Date.now()<z){if((await LU(f)).length===0)return;await new Promise((G)=>setTimeout(G,100))}}async function Mk(f){let J=Dk();if(!J)return null;let Y=f.webPort+2;if(f.takeover)await Lk(Y);return Bun.spawn(["node",J],{stdin:"ignore",stdout:"inherit",stderr:"inherit",env:{...process.env,KOBE_DAEMON_WEB_PORT:String(f.webPort),KOBE_PTY_PORT:String(Y)}})}async function Fk(f,J){if(process.env.KOBE_DAEMON_WEB_PORT=String(f),J)process.env.KOBE_DAEMON_WEB_STATIC_DIR=J;await UG();let Y;try{Y=(await(await fetch(`http://127.0.0.1:${f}${AU}`,{signal:AbortSignal.timeout(1500)})).text()).trim()}catch(z){throw Error(`daemon web transport is not reachable on :${f}; run \`kobe daemon restart\` so the daemon picks up this build (${z instanceof Error?z.message:String(z)})`)}if(Y!==OU)throw Error(`unexpected daemon web health marker on :${f}: ${Y}`);if(J){if(!(await fetch(`http://127.0.0.1:${f}/`,{signal:AbortSignal.timeout(1500)})).ok)throw Error(`daemon web transport is up on :${f} but is not serving web assets; run \`kobe daemon restart\` so it picks up ${J}`)}}async function Ok(f){if(f.includes("--help")||f.includes("-h")){process.stdout.write(Kk);return}let J=5174,Y=f.indexOf("--port");if(Y!==-1){let z=Number.parseInt(f[Y+1]??"",10);if(!Number.isFinite(z))process.stderr.write(`kobe web: --port needs a number
188
+ `),process.exit(2);J=z}try{let z=f.includes("--routes-only")||f.includes("--bridge-only"),G=!f.includes("--no-takeover"),X=z?void 0:Uk();if(!z&&!X)throw Error("web assets are missing from this kobe build; run `bun run build` in packages/kobe, or `bun run dev` in packages/kobe-web from a source checkout");await Fk(J,X);let q=null,Q=!1,H=()=>{if(Q)return;Q=!0,q?.kill(),q=null};if(z)process.stdout.write(`kobe daemon web transport listening on http://localhost:${J} (routes only)
189
+ `),process.stdout.write(` home: ${DU()}
190
+ `);else if(q=await Mk({webPort:J,takeover:G}),process.stdout.write(`kobe web \u2192 http://localhost:${J}
191
+ `),process.stdout.write(` home: ${DU()}
192
192
  `),!q)process.stderr.write(`kobe web: PTY server not found; terminal tabs will be unavailable
193
193
  `);process.on("SIGINT",()=>{H(),process.exit(0)}),process.on("SIGTERM",()=>{H(),process.exit(0)}),q?.exited.then(()=>{if(!Q)process.stderr.write(`kobe web: PTY server exited
194
194
  `),H(),process.exit(1)}),await new Promise(()=>{})}catch(z){process.stderr.write(`kobe web: ${z instanceof Error?z.message:String(z)}
195
- `),process.exit(1)}}var LU="kobe-web",MU="/__kobe_web",Wk=`Usage: kobe web [options]
195
+ `),process.exit(1)}}var OU="kobe-web",AU="/__kobe_web",Kk=`Usage: kobe web [options]
196
196
 
197
197
  Launch the kobe web UI through daemon web transport on http://localhost:<port>.
198
198
 
@@ -201,45 +201,45 @@ Options:
201
201
  --routes-only Routes only; Vite serves the SPA separately.
202
202
  --no-takeover Reserved for compatibility; daemon owns the web port.
203
203
  -h, --help Show this help.
204
- `;var OU=k(()=>{y1()});var gU={};jf(gU,{runSkillSubcommand:()=>Ok});function yj(){return["usage: kobe skill <verb>","","verbs:"," install [--agent NAME] Install the kobe agent skill (wraps `npx skills add`)"," status Show whether the skill is installed"," command [--agent NAME] Print the underlying npx command without running it","",`The skill teaches a coding agent how to drive \`kobe api\`. Default agent: ${YQ}.`].join(`
205
- `)}function AU(f){let J=YQ;for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="--agent"){let G=f[Y+1];if(!G||G.startsWith("--"))process.stderr.write(`kobe skill: --agent requires a value
204
+ `;var RU=k(()=>{L1()});var kU={};jf(kU,{runSkillSubcommand:()=>gk});function Ij(){return["usage: kobe skill <verb>","","verbs:"," install [--agent NAME] Install the kobe agent skill (wraps `npx skills add`)"," status Show whether the skill is installed"," command [--agent NAME] Print the underlying npx command without running it","",`The skill teaches a coding agent how to drive \`kobe api\`. Default agent: ${XQ}.`].join(`
205
+ `)}function CU(f){let J=XQ;for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="--agent"){let G=f[Y+1];if(!G||G.startsWith("--"))process.stderr.write(`kobe skill: --agent requires a value
206
206
  `),process.exit(2);J=G,Y++}else if(z.startsWith("--agent="))J=z.slice(8);else process.stderr.write(`kobe skill: unknown flag "${z}"
207
207
 
208
- ${yj()}
209
- `),process.exit(2)}return J}async function Ok(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(process.stdout.write(`${yj()}
210
- `),!J)process.exitCode=2;return}if(!Fk.includes(J))process.stderr.write(`kobe skill: unknown verb "${J}"
208
+ ${Ij()}
209
+ `),process.exit(2)}return J}async function gk(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(process.stdout.write(`${Ij()}
210
+ `),!J)process.exitCode=2;return}if(!Ak.includes(J))process.stderr.write(`kobe skill: unknown verb "${J}"
211
211
 
212
- ${yj()}
213
- `),process.exit(2);if(J==="status"){let Q=CX(),[H,B]=Cj(),V=!Q.installed?"\u2717 not installed":Q.stale?`\u26A0 out of date (installed ${Q.installedVersion===null?"unstamped":`v${Q.installedVersion}`}, this kobe wants v${Q.currentVersion})`:`\u2713 installed (v${Q.installedVersion})`;process.stdout.write([`kobe skill: ${V}`,` looked in: ${H}`,` ${B}`,Q.installed&&!Q.stale?"":" \u2192 run `kobe skill install` to install / refresh",""].join(`
214
- `));return}if(J==="command"){process.stdout.write(`${zQ({agent:AU(Y)})}
215
- `);return}let z=AU(Y),G=Rj({agent:z});process.stdout.write(`kobe skill: running \`npx ${G.join(" ")}\`
212
+ ${Ij()}
213
+ `),process.exit(2);if(J==="status"){let Q=kX(),[H,B]=yj(),V=!Q.installed?"\u2717 not installed":Q.stale?`\u26A0 out of date (installed ${Q.installedVersion===null?"unstamped":`v${Q.installedVersion}`}, this kobe wants v${Q.currentVersion})`:`\u2713 installed (v${Q.installedVersion})`;process.stdout.write([`kobe skill: ${V}`,` looked in: ${H}`,` ${B}`,Q.installed&&!Q.stale?"":" \u2192 run `kobe skill install` to install / refresh",""].join(`
214
+ `));return}if(J==="command"){process.stdout.write(`${ZQ({agent:CU(Y)})}
215
+ `);return}let z=CU(Y),G=Nj({agent:z});process.stdout.write(`kobe skill: running \`npx ${G.join(" ")}\`
216
216
  `);let q=await Bun.spawn(["npx",...G],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(q!==0)process.stderr.write(`
217
217
  kobe skill install failed (npx exited ${q}). Is \`npx\` on PATH and are you online?
218
- You can run it yourself: ${zQ({agent:z})}
218
+ You can run it yourself: ${ZQ({agent:z})}
219
219
  `),process.exit(q||1);process.stdout.write(`kobe skill: installed.
220
- `)}var Fk;var RU=k(()=>{GQ();Fk=["install","status","command"]});var Sj={};jf(Sj,{runHookSubcommand:()=>bk,readTextWithTimeout:()=>yU,parseWorktreeAddPath:()=>SU,ensureGlobalKobeHooks:()=>Tk});import{homedir as Ak}from"os";import{join as kU,resolve as NU}from"path";async function yU(f,J=gk){let Y;try{return await Promise.race([f(),new Promise((z)=>{Y=setTimeout(()=>z(""),J)})])}finally{if(Y!==void 0)clearTimeout(Y)}}async function bU(){try{let f=await yU(()=>Bun.stdin.text());if(!f.trim())return{};let J=JSON.parse(f);return J&&typeof J==="object"&&!Array.isArray(J)?J:{}}catch{return{}}}function Rk(f,J){for(let Y=0;Y<f.length;Y++){if(f[Y]===J)return f[Y+1];if(f[Y].startsWith(`${J}=`))return f[Y].slice(J.length+1)}return}function kk(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}function Nk(f){let J=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g,z;while((z=Y.exec(f))!==null)J.push(z[1]??z[2]??z[3]??"");return J}function SU(f){let J=Nk(f),Y=new Set(["-b","-B","--reason"]);for(let z=0;z+1<J.length;z++){if(J[z]!=="worktree"||J[z+1]!=="add")continue;let G=z+2;while(G<J.length){let X=J[G];if(X==="&&"||X==="||"||X===";"||X==="|"||X===">"||X===">>")break;if(X.startsWith("-")){G+=Y.has(X)?2:1;continue}return X}}return}async function yk(){let f=await bU(),J=kk(f.tool_input)?f.tool_input:{},Y=typeof J.command==="string"?J.command:"";if(!Y.includes("worktree"))return;let z=SU(Y);if(!z)return;let G=typeof f.cwd==="string"&&f.cwd?f.cwd:process.cwd(),X=NU(G,z),q=await p1();if(!q)return;try{await q.request("worktree.reconcile",{cwd:G,worktreePath:X})}finally{q.close()}}async function bk(f){let[J,...Y]=f;if(J==="setup"){await uk(Y);return}if(J===Ck){try{await yk()}catch{}return}try{if(!J||!kZ(J))return;let z=await bU(),G=Rk(Y,"--task-id"),X=typeof z.cwd==="string"&&z.cwd?z.cwd:process.cwd(),q;for(let H of IU())if(q=H.activityDetailFromPayload(J,z),q)break;let Q=await p1();if(!Q)return;try{await Q.request("engine.reportEvent",{...G?{taskId:G}:{cwd:X},kind:J,...q?{detail:q}:{}})}finally{Q.close()}}catch{}}function Sk(){return cf.map((f)=>$H(f)).filter((f)=>f.supportsWorktreeSync())}function IU(){return cf.map((f)=>$H(f)).filter((f)=>f.supportsHooks())}function bj(){return kU(Ak(),".claude","settings.json")}function Ik(f){if(!f||f==="off")return;if(f==="global")return bj();if(f.startsWith("repo:"))return kU(NU(f.slice(5)),".claude","settings.json");return f}async function Tk(){try{let f=bj();for(let J of IU())await J.installActivityHooks(f),await J.installWorktreeWatchHook(f);await TU()}catch{}}async function TU(){let f=Sk();if(f.length===0)return;let J=kf(CU),Y=new Set([bj()]),z=Ik(J);if(z)Y.add(z);for(let G of f)for(let X of Y)await G.removeWorktreeSyncHook(X);if(J!=="off")af(CU,"off")}async function uk(f){await TU(),process.stdout.write(["kobe hook setup is deprecated and now a no-op (cleanup only).","","The old external-worktree sync used a global WorktreeCreate hook, which is","a VCS provider hook \u2014 its presence broke `claude --worktree` / EnterWorktree","in every repo. Any hook kobe previously installed has been removed.","","Sync is now automatic: a `claude --worktree` (or any session) started in a","worktree under a repo kobe already tracks is adopted as a task on launch.","To adopt existing worktrees on demand, use the New Task dialog or `kobe adopt`.",""].join(`
221
- `))}var gk=500,Ck="worktree-created",CU="externalWorktreeSync";var Ij=k(()=>{y1();rH();NZ();gf();K1()});function EU(f){var J;if(f>=55296&&f<=57343||f>1114111)return 65533;return(J=Ek.get(f))!==null&&J!==void 0?J:f}var Tj,Ek,uU;var xU=k(()=>{Ek=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),uU=(Tj=String.fromCodePoint)!==null&&Tj!==void 0?Tj:(f)=>{let J="";if(f>65535)f-=65536,J+=String.fromCharCode(f>>>10&1023|55296),f=56320|f&1023;return J+=String.fromCharCode(f),J}});function wU(f){let J=typeof atob==="function"?atob(f):typeof Buffer.from==="function"?Buffer.from(f,"base64").toString("binary"):new Buffer(f,"base64").toString("binary"),Y=J.length&-2,z=new Uint16Array(Y/2);for(let G=0,X=0;G<Y;G+=2){let q=J.charCodeAt(G),Q=J.charCodeAt(G+1);z[X++]=q|Q<<8}return z}var hU;var PU=k(()=>{hU=wU("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IAAOA12J/c8iFvaxBhAAhOVGFjZGZnbG1vcHFzdHV4owOlA6kDsAO/A8IDxgPNA9ID8gP9AwEEFAQeBCAEJQRHAEphSAA7gNAA0EBjAHUAdABlADuAyQDJQIABYWl5ALYDuQO+A/Ihb24aYXIAYwA7gMoAykAtZG8AdAAWYXIAAOA12AjdcgBhAHYAZQA7gMgAyEDlIm1lbnQAoAgiAAFhcNYD2QNjAHIAEmF0AHkAUwLhAwAAAADpA20lYWxsU3F1YXJlAACg+yVlJ3J5U21hbGxTcXVhcmUAAKCrJQABZ3D2A/kDbwBuABhhZgAA4DXYPN3zImlsb26VY3UAAAFhaQYEDgRsAFSgdSppImxkZQAAoEIi7CNpYnJpdW0AoMwhAAFjaRgEGwRyAACgMCFtAACgcyphAJdjbQBsADuAywDLQAABaXApBC0E8yF0cwCgAyLvJG5lbnRpYWxFAKBHIYACY2Zpb3MAPQQ/BEMEXQRyBHkAJGRyAADgNdgJ3WwibGVkAFMCTAQAAAAAVARtJWFsbFNxdWFyZQAAoPwlZSdyeVNtYWxsU3F1YXJlAACgqiVwA2UEAABpBAAAAABtBGYAAOA12D3dwSFsbACgACLyI2llcnRyZgCgMSFjAPIAcQQABkpUYWJjZGZnb3JzdIgEiwSOBJMElwSkBKcEqwStBLIE5QTqBGMAeQADZDuAPgA+QO0hbWFkoJMD3GNyImV2ZQAeYYABZWl5AJ0EoASjBOQhaWwiYXIAYwAcYRNkbwB0ACBhcgAA4DXYCt0AoNkicABmAADgNdg+3eUiYXRlcgADRUZHTFNUvwTIBM8E1QTZBOAEcSJ1YWwATKBlIuUhc3MAoNsidSRsbEVxdWFsAACgZyJyI2VhdGVyAACgoirlIXNzAKB3IuwkYW50RXF1YWwAoH4qaSJsZGUAAKBzImMAcgAA4DXYotwAoGsiAARBYWNmaW9zdfkE/QQFBQgFCwUTBSIFKwVSIkRjeQAqZAABY3QBBQQFZQBrAMdiXmDpIXJjJGFyAACgDCFsJWJlcnRTcGFjZQAAoAsh8AEYBQAAGwVmAACgDSHpJXpvbnRhbExpbmUAoAAlAAFjdCYFKAXyABIF8iFvayZhbQBwAEQBMQU5BW8AdwBuAEgAdQBtAPAAAAFxInVhbAAAoE8iAAdFSk9hY2RmZ21ub3N0dVMFVgVZBVwFYwVtBXAFcwV6BZAFtgXFBckFzQVjAHkAFWTsIWlnMmFjAHkAAWRjAHUAdABlADuAzQDNQAABaXlnBWwFcgBjADuAzgDOQBhkbwB0ADBhcgAAoBEhcgBhAHYAZQA7gMwAzEAAoREhYXB/BYsFAAFjZ4MFhQVyACphaSNuYXJ5SQAAoEghbABpAGUA8wD6AvQBlQUAAKUFZaAsIgABZ3KaBZ4F8iFhbACgKyLzI2VjdGlvbgCgwiJpI3NpYmxlAAABQ1SsBbEFbyJtbWEAAKBjIGkibWVzAACgYiCAAWdwdAC8Bb8FwwVvAG4ALmFmAADgNdhA3WEAmWNjAHIAAKAQIWkibGRlAChh6wHSBQAA1QVjAHkABmRsADuAzwDPQIACY2Zvc3UA4QXpBe0F8gX9BQABaXnlBegFcgBjADRhGWRyAADgNdgN3XAAZgAA4DXYQd3jAfcFAAD7BXIAAOA12KXc8iFjeQhk6yFjeQRkgANISmFjZm9zAAwGDwYSBhUGHQYhBiYGYwB5ACVkYwB5AAxk8CFwYZpjAAFleRkGHAbkIWlsNmEaZHIAAOA12A7dcABmAADgNdhC3WMAcgAA4DXYptyABUpUYWNlZmxtb3N0AD0GQAZDBl4GawZkB2gHcAd0B80H2gdjAHkACWQ7gDwAPECAAmNtbnByAEwGTwZSBlUGWwb1IXRlOWHiIWRhm2NnAACg6ifsI2FjZXRyZgCgEiFyAACgniGAAWFleQBkBmcGagbyIW9uPWHkIWlsO2EbZAABZnNvBjQHdAAABUFDREZSVFVWYXKABp4GpAbGBssG3AYDByEHwQIqBwABbnKEBowGZyVsZUJyYWNrZXQAAKDoJ/Ihb3cAoZAhQlKTBpcGYQByAACg5CHpJGdodEFycm93AKDGIWUjaWxpbmcAAKAII28A9QGqBgAAsgZiJWxlQnJhY2tldAAAoOYnbgDUAbcGAAC+BmUkZVZlY3RvcgAAoGEp5SJjdG9yQqDDIWEAcgAAoFkpbCJvb3IAAKAKI2kiZ2h0AAABQVbSBtcGciJyb3cAAKCUIeUiY3RvcgCgTikAAWVy4AbwBmUAAKGjIkFW5gbrBnIicm93AACgpCHlImN0b3IAoFopaSNhbmdsZQBCorIi+wYAAAAA/wZhAHIAAKDPKXEidWFsAACgtCJwAIABRFRWAAoHEQcYB+8kd25WZWN0b3IAoFEpZSRlVmVjdG9yAACgYCnlImN0b3JCoL8hYQByAACgWCnlImN0b3JCoLwhYQByAACgUilpAGcAaAB0AGEAcgByAG8A9wDMAnMAAANFRkdMU1Q/B0cHTgdUB1gHXwfxJXVhbEdyZWF0ZXIAoNoidSRsbEVxdWFsAACgZiJyI2VhdGVyAACgdiLlIXNzAKChKuwkYW50RXF1YWwAoH0qaSJsZGUAAKByInIAAOA12A/dZaDYIuYjdGFycm93AKDaIWkiZG90AD9hgAFucHcAege1B7kHZwAAAkxSbHKCB5QHmwerB+UhZnQAAUFSiAeNB3Iicm93AACg9SfpJGdodEFycm93AKD3J+kkZ2h0QXJyb3cAoPYn5SFmdAABYXLcAqEHaQBnAGgAdABhAHIAcgBvAPcA5wJpAGcAaAB0AGEAcgByAG8A9wDuAmYAAOA12EPdZQByAAABTFK/B8YHZSRmdEFycm93AACgmSHpJGdodEFycm93AKCYIYABY2h0ANMH1QfXB/IAWgYAoLAh8iFva0FhAKBqIgAEYWNlZmlvc3XpB+wH7gf/BwMICQgOCBEIcAAAoAUpeQAcZAABZGzyB/kHaSR1bVNwYWNlAACgXyBsI2ludHJmAACgMyFyAADgNdgQ3e4jdXNQbHVzAKATInAAZgAA4DXYRN1jAPIA/gecY4AESmFjZWZvc3R1ACEIJAgoCDUIgQiFCDsKQApHCmMAeQAKZGMidXRlAENhgAFhZXkALggxCDQI8iFvbkdh5CFpbEVhHWSAAWdzdwA7CGEIfQjhInRpdmWAAU1UVgBECEwIWQhlJWRpdW1TcGFjZQAAoAsgaABpAAABY25SCFMIawBTAHAAYQBjAOUASwhlAHIAeQBUAGgAaQDuAFQI9CFlZAABR0xnCHUIcgBlAGEAdABlAHIARwByAGUAYQB0AGUA8gDrBGUAcwBzAEwAZQBzAPMA2wdMImluZQAKYHIAAOA12BHdAAJCbnB0jAiRCJkInAhyImVhawAAoGAgwiZyZWFraW5nU3BhY2WgYGYAAKAVIUOq7CqzCMIIzQgAAOcIGwkAAAAAAAAtCQAAbwkAAIcJAACdCcAJGQoAADQKAAFvdbYIvAjuI2dydWVudACgYiJwIkNhcAAAoG0ibyh1YmxlVmVydGljYWxCYXIAAKAmIoABbHF4ANII1wjhCOUibWVudACgCSL1IWFsVKBgImkibGRlAADgQiI4A2kic3RzAACgBCJyI2VhdGVyAACjbyJFRkdMU1T1CPoIAgkJCQ0JFQlxInVhbAAAoHEidSRsbEVxdWFsAADgZyI4A3IjZWF0ZXIAAOBrIjgD5SFzcwCgeSLsJGFudEVxdWFsAOB+KjgDaSJsZGUAAKB1IvUhbXBEASAJJwnvI3duSHVtcADgTiI4A3EidWFsAADgTyI4A2UAAAFmczEJRgn0JFRyaWFuZ2xlQqLqIj0JAAAAAEIJYQByAADgzyk4A3EidWFsAACg7CJzAICibiJFR0xTVABRCVYJXAlhCWkJcSJ1YWwAAKBwInIjZWF0ZXIAAKB4IuUhc3MA4GoiOAPsJGFudEVxdWFsAOB9KjgDaSJsZGUAAKB0IuUic3RlZAABR0x1CX8J8iZlYXRlckdyZWF0ZXIA4KIqOAPlI3NzTGVzcwDgoSo4A/IjZWNlZGVzAKGAIkVTjwmVCXEidWFsAADgryo4A+wkYW50RXF1YWwAoOAiAAFlaaAJqQl2JmVyc2VFbGVtZW50AACgDCLnJWh0VHJpYW5nbGVCousitgkAAAAAuwlhAHIAAODQKTgDcSJ1YWwAAKDtIgABcXXDCeAJdSNhcmVTdQAAAWJwywnVCfMhZXRF4I8iOANxInVhbAAAoOIi5SJyc2V0ReCQIjgDcSJ1YWwAAKDjIoABYmNwAOYJ8AkNCvMhZXRF4IIi0iBxInVhbAAAoIgi4yJlZWRzgKGBIkVTVAD6CQAKBwpxInVhbAAA4LAqOAPsJGFudEVxdWFsAKDhImkibGRlAADgfyI4A+UicnNldEXggyLSIHEidWFsAACgiSJpImxkZQCAoUEiRUZUACIKJwouCnEidWFsAACgRCJ1JGxsRXF1YWwAAKBHImkibGRlAACgSSJlJXJ0aWNhbEJhcgAAoCQiYwByAADgNdip3GkAbABkAGUAO4DRANFAnWMAB0VhY2RmZ21vcHJzdHV2XgphCmgKcgp2CnoKgQqRCpYKqwqtCrsKyArNCuwhaWdSYWMAdQB0AGUAO4DTANNAAAFpeWwKcQpyAGMAO4DUANRAHmRiImxhYwBQYXIAAOA12BLdcgBhAHYAZQA7gNIA0kCAAWFlaQCHCooKjQpjAHIATGFnAGEAqWNjInJvbgCfY3AAZgAA4DXYRt3lI25DdXJseQABRFGeCqYKbyV1YmxlUXVvdGUAAKAcIHUib3RlAACgGCAAoFQqAAFjbLEKtQpyAADgNdiq3GEAcwBoADuA2ADYQGkAbAHACsUKZABlADuA1QDVQGUAcwAAoDcqbQBsADuA1gDWQGUAcgAAAUJQ0wrmCgABYXLXCtoKcgAAoD4gYQBjAAABZWvgCuIKAKDeI2UAdAAAoLQjYSVyZW50aGVzaXMAAKDcI4AEYWNmaGlsb3JzAP0KAwsFCwkLCwsMCxELIwtaC3IjdGlhbEQAAKACInkAH2RyAADgNdgT3WkApmOgY/Ujc01pbnVzsWAAAWlwFQsgC24AYwBhAHIAZQBwAGwAYQBuAOUACgVmAACgGSGAobsqZWlvACoLRQtJC+MiZWRlc4CheiJFU1QANAs5C0ALcSJ1YWwAAKCvKuwkYW50RXF1YWwAoHwiaSJsZGUAAKB+Im0AZQAAoDMgAAFkcE0LUQv1IWN0AKAPIm8jcnRpb24AYaA3ImwAAKAdIgABY2leC2ILcgAA4DXYq9yoYwACVWZvc2oLbwtzC3cLTwBUADuAIgAiQHIAAOA12BTdcABmAACgGiFjAHIAAOA12KzcAAZCRWFjZWZoaW9yc3WPC5MLlwupC7YL2AvbC90LhQyTDJoMowzhIXJyAKAQKUcAO4CuAK5AgAFjbnIAnQugC6ML9SF0ZVRhZwAAoOsncgB0oKAhbAAAoBYpgAFhZXkArwuyC7UL8iFvblhh5CFpbFZhIGR2oBwhZSJyc2UAAAFFVb8LzwsAAWxxwwvIC+UibWVudACgCyL1JGlsaWJyaXVtAKDLIXAmRXF1aWxpYnJpdW0AAKBvKXIAAKAcIW8AoWPnIWh0AARBQ0RGVFVWYewLCgwQDDIMNwxeDHwM9gIAAW5y8Av4C2clbGVCcmFja2V0AACg6SfyIW93AKGSIUJM/wsDDGEAcgAAoOUhZSRmdEFycm93AACgxCFlI2lsaW5nAACgCSNvAPUBFgwAAB4MYiVsZUJyYWNrZXQAAKDnJ24A1AEjDAAAKgxlJGVWZWN0b3IAAKBdKeUiY3RvckKgwiFhAHIAAKBVKWwib29yAACgCyMAAWVyOwxLDGUAAKGiIkFWQQxGDHIicm93AACgpiHlImN0b3IAoFspaSNhbmdsZQBCorMiVgwAAAAAWgxhAHIAAKDQKXEidWFsAACgtSJwAIABRFRWAGUMbAxzDO8kd25WZWN0b3IAoE8pZSRlVmVjdG9yAACgXCnlImN0b3JCoL4hYQByAACgVCnlImN0b3JCoMAhYQByAACgUykAAXB1iQyMDGYAAKAdIe4kZEltcGxpZXMAoHAp6SRnaHRhcnJvdwCg2yEAAWNongyhDHIAAKAbIQCgsSHsJGVEZWxheWVkAKD0KYAGSE9hY2ZoaW1vcXN0dQC/DMgMzAzQDOIM5gwKDQ0NFA0ZDU8NVA1YDQABQ2PDDMYMyCFjeSlkeQAoZEYiVGN5ACxkYyJ1dGUAWmEAorwqYWVpedgM2wzeDOEM8iFvbmBh5CFpbF5hcgBjAFxhIWRyAADgNdgW3e8hcnQAAkRMUlXvDPYM/QwEDW8kd25BcnJvdwAAoJMhZSRmdEFycm93AACgkCHpJGdodEFycm93AKCSIXAjQXJyb3cAAKCRIechbWGjY+EkbGxDaXJjbGUAoBgicABmAADgNdhK3XICHw0AAAAAIg10AACgGiLhIXJlgKGhJUlTVQAqDTINSg3uJXRlcnNlY3Rpb24AoJMidQAAAWJwNw1ADfMhZXRFoI8icSJ1YWwAAKCRIuUicnNldEWgkCJxInVhbAAAoJIibiJpb24AAKCUImMAcgAA4DXYrtxhAHIAAKDGIgACYmNtcF8Nag2ODZANc6DQImUAdABFoNAicSJ1YWwAAKCGIgABY2huDYkNZSJlZHMAgKF7IkVTVAB4DX0NhA1xInVhbAAAoLAq7CRhbnRFcXVhbACgfSJpImxkZQAAoH8iVABoAGEA9ADHCwCgESIAodEiZXOVDZ8NciJzZXQARaCDInEidWFsAACghyJlAHQAAKDRIoAFSFJTYWNmaGlvcnMAtQ27Db8NyA3ODdsN3w3+DRgOHQ4jDk8AUgBOADuA3gDeQMEhREUAoCIhAAFIY8MNxg1jAHkAC2R5ACZkAAFidcwNzQ0JYKRjgAFhZXkA1A3XDdoN8iFvbmRh5CFpbGJhImRyAADgNdgX3QABZWnjDe4N8gHoDQAA7Q3lImZvcmUAoDQiYQCYYwABY27yDfkNayNTcGFjZQAA4F8gCiDTInBhY2UAoAkg7CFkZYChPCJFRlQABw4MDhMOcSJ1YWwAAKBDInUkbGxFcXVhbAAAoEUiaSJsZGUAAKBIInAAZgAA4DXYS93pI3BsZURvdACg2yAAAWN0Jw4rDnIAAOA12K/c8iFva2Zh4QpFDlYOYA5qDgAAbg5yDgAAAAAAAAAAAAB5DnwOqA6zDgAADg8RDxYPGg8AAWNySA5ODnUAdABlADuA2gDaQHIAb6CfIeMhaXIAoEkpcgDjAVsOAABdDnkADmR2AGUAbGEAAWl5Yw5oDnIAYwA7gNsA20AjZGIibGFjAHBhcgAA4DXYGN1yAGEAdgBlADuA2QDZQOEhY3JqYQABZGl/Dp8OZQByAAABQlCFDpcOAAFhcokOiw5yAF9gYQBjAAABZWuRDpMOAKDfI2UAdAAAoLUjYSVyZW50aGVzaXMAAKDdI28AbgBQoMMi7CF1cwCgjiIAAWdwqw6uDm8AbgByYWYAAOA12EzdAARBREVUYWRwc78O0g7ZDuEOBQPqDvMOBw9yInJvdwDCoZEhyA4AAMwOYQByAACgEilvJHduQXJyb3cAAKDFIW8kd25BcnJvdwAAoJUhcSV1aWxpYnJpdW0AAKBuKWUAZQBBoKUiciJyb3cAAKClIW8AdwBuAGEAcgByAG8A9wAQA2UAcgAAAUxS+Q4AD2UkZnRBcnJvdwAAoJYh6SRnaHRBcnJvdwCglyFpAGyg0gNvAG4ApWPpIW5nbmFjAHIAAOA12LDcaSJsZGUAaGFtAGwAO4DcANxAgAREYmNkZWZvc3YALQ8xDzUPNw89D3IPdg97D4AP4SFzaACgqyJhAHIAAKDrKnkAEmThIXNobKCpIgCg5ioAAWVyQQ9DDwCgwSKAAWJ0eQBJD00Paw9hAHIAAKAWIGmgFiDjIWFsAAJCTFNUWA9cD18PZg9hAHIAAKAjIukhbmV8YGUkcGFyYXRvcgAAoFgnaSJsZGUAAKBAItQkaGluU3BhY2UAoAogcgAA4DXYGd1wAGYAAOA12E3dYwByAADgNdix3GQiYXNoAACgqiKAAmNlZm9zAI4PkQ+VD5kPng/pIXJjdGHkIWdlAKDAInIAAOA12BrdcABmAADgNdhO3WMAcgAA4DXYstwAAmZpb3OqD64Prw+0D3IAAOA12BvdnmNwAGYAAOA12E/dYwByAADgNdiz3IAEQUlVYWNmb3N1AMgPyw/OD9EP2A/gD+QP6Q/uD2MAeQAvZGMAeQAHZGMAeQAuZGMAdQB0AGUAO4DdAN1AAAFpedwP3w9yAGMAdmErZHIAAOA12BzdcABmAADgNdhQ3WMAcgAA4DXYtNxtAGwAeGEABEhhY2RlZm9z/g8BEAUQDRAQEB0QIBAkEGMAeQAWZGMidXRlAHlhAAFheQkQDBDyIW9ufWEXZG8AdAB7YfIBFRAAABwQbwBXAGkAZAB0AOgAVAhhAJZjcgAAoCghcABmAACgJCFjAHIAAOA12LXc4QtCEEkQTRAAAGcQbRByEAAAAAAAAAAAeRCKEJcQ8hD9EAAAGxEhETIROREAAD4RYwB1AHQAZQA7gOEA4UByImV2ZQADYYCiPiJFZGl1eQBWEFkQWxBgEGUQAOA+IjMDAKA/InIAYwA7gOIA4kB0AGUAO4C0ALRAMGRsAGkAZwA7gOYA5kByoGEgAOA12B7dcgBhAHYAZQA7gOAA4EAAAWVwfBCGEAABZnCAEIQQ8yF5bQCgNSHoAIMQaABhALFjAAFhcI0QWwAAAWNskRCTEHIAAWFnAACgPypkApwQAAAAALEQAKInImFkc3ajEKcQqRCuEG4AZAAAoFUqAKBcKmwib3BlAACgWCoAoFoqAKMgImVsbXJzersQvRDAEN0Q5RDtEACgpCllAACgICJzAGQAYaAhImEEzhDQENIQ1BDWENgQ2hDcEACgqCkAoKkpAKCqKQCgqykAoKwpAKCtKQCgrikAoK8pdAB2oB8iYgBkoL4iAKCdKQABcHTpEOwQaAAAoCIixWDhIXJyAKB8IwABZ3D1EPgQbwBuAAVhZgAA4DXYUt0Ao0giRWFlaW9wBxEJEQ0RDxESERQRAKBwKuMhaXIAoG8qAKBKImQAAKBLInMAJ2DyIW94ZaBIIvEADhFpAG4AZwA7gOUA5UCAAWN0eQAmESoRKxFyAADgNdi23CpgbQBwAGWgSCLxAPgBaQBsAGQAZQA7gOMA40BtAGwAO4DkAORAAAFjaUERRxFvAG4AaQBuAPQA6AFuAHQAAKARKgAITmFiY2RlZmlrbG5vcHJzdWQRaBGXEZ8RpxGrEdIR1hErEjASexKKEn0RThNbE3oTbwB0AACg7SoAAWNybBGJEWsAAAJjZXBzdBF4EX0RghHvIW5nAKBMInAjc2lsb24A9mNyImltZQAAoDUgaQBtAGWgPSJxAACgzSJ2AY0RkRFlAGUAAKC9ImUAZABnoAUjZQAAoAUjcgBrAHSgtSPiIXJrAKC2IwABb3mjEaYRbgDnAHcRMWTxIXVvAKAeIIACY21wcnQAtBG5Eb4RwRHFEeEhdXPloDUi5ABwInR5dgAAoLApcwDpAH0RbgBvAPUA6gCAAWFodwDLEcwRzhGyYwCgNiHlIWVuAKBsInIAAOA12B/dZwCAA2Nvc3R1dncA4xHyEQUSEhIhEiYSKRKAAWFpdQDpEesR7xHwAKMFcgBjAACg7yVwAACgwyKAAWRwdAD4EfwRABJvAHQAAKAAKuwhdXMAoAEqaSJtZXMAAKACKnECCxIAAAAADxLjIXVwAKAGKmEAcgAAoAUm8iNpYW5nbGUAAWR1GhIeEu8hd24AoL0lcAAAoLMlcCJsdXMAAKAEKmUA5QBCD+UAkg9hInJvdwAAoA0pgAFha28ANhJoEncSAAFjbjoSZRJrAIABbHN0AEESRxJNEm8jemVuZ2UAAKDrKXEAdQBhAHIA5QBcBPIjaWFuZ2xlgKG0JWRscgBYElwSYBLvIXduAKC+JeUhZnQAoMIlaSJnaHQAAKC4JWsAAKAjJLEBbRIAAHUSsgFxEgAAcxIAoJIlAKCRJTQAAKCTJWMAawAAoIglAAFlb38ShxJx4D0A5SD1IWl2AOBhIuUgdAAAoBAjAAJwdHd4kRKVEpsSnxJmAADgNdhT3XSgpSJvAG0AAKClIvQhaWUAoMgiAAZESFVWYmRobXB0dXayEsES0RLgEvcS+xIKExoTHxMjEygTNxMAAkxSbHK5ErsSvRK/EgCgVyUAoFQlAKBWJQCgUyUAolAlRFVkdckSyxLNEs8SAKBmJQCgaSUAoGQlAKBnJQACTFJsctgS2hLcEt4SAKBdJQCgWiUAoFwlAKBZJQCjUSVITFJobHLrEu0S7xLxEvMS9RIAoGwlAKBjJQCgYCUAoGslAKBiJQCgXyVvAHgAAKDJKQACTFJscgITBBMGEwgTAKBVJQCgUiUAoBAlAKAMJQCiACVEVWR1EhMUExYTGBMAoGUlAKBoJQCgLCUAoDQlaSJudXMAAKCfIuwhdXMAoJ4iaSJtZXMAAKCgIgACTFJsci8TMRMzEzUTAKBbJQCgWCUAoBglAKAUJQCjAiVITFJobHJCE0QTRhNIE0oTTBMAoGolAKBhJQCgXiUAoDwlAKAkJQCgHCUAAWV2UhNVE3YA5QD5AGIAYQByADuApgCmQAACY2Vpb2ITZhNqE24TcgAA4DXYt9xtAGkAAKBPIG0A5aA9IogRbAAAoVwAYmh0E3YTAKDFKfMhdWIAoMgnbAF+E4QTbABloCIgdAAAoCIgcAAAoU4iRWWJE4sTAKCuKvGgTyI8BeEMqRMAAN8TABQDFB8UAAAjFDQUAAAAAIUUAAAAAI0UAAAAANcU4xT3FPsUAACIFQAAlhWAAWNwcgCuE7ET1RP1IXRlB2GAoikiYWJjZHMAuxO/E8QTzhPSE24AZAAAoEQqciJjdXAAAKBJKgABYXXIE8sTcAAAoEsqcAAAoEcqbwB0AACgQCoA4CkiAP4AAWVv2RPcE3QAAKBBIO4ABAUAAmFlaXXlE+8T9RP4E/AB6hMAAO0TcwAAoE0qbwBuAA1hZABpAGwAO4DnAOdAcgBjAAlhcABzAHOgTCptAACgUCpvAHQAC2GAAWRtbgAIFA0UEhRpAGwAO4C4ALhAcCJ0eXYAAKCyKXQAAIGiADtlGBQZFKJAcgBkAG8A9ABiAXIAAOA12CDdgAFjZWkAKBQqFDIUeQBHZGMAawBtoBMn4SFyawCgEyfHY3IAAKPLJUVjZWZtcz8UQRRHFHcUfBSAFACgwykAocYCZWxGFEkUcQAAoFciZQBhAlAUAAAAAGAUciJyb3cAAAFsclYUWhTlIWZ0AKC6IWkiZ2h0AACguyGAAlJTYWNkAGgUaRRrFG8UcxSuYACgyCRzAHQAAKCbIukhcmMAoJoi4SFzaACgnSJuImludAAAoBAqaQBkAACg7yrjIWlyAKDCKfUhYnN1oGMmaQB0AACgYybsApMUmhS2FAAAwxRvAG4AZaA6APGgVCKrAG0CnxQAAAAAoxRhAHSgLABAYAChASJmbKcUqRTuABMNZQAAAW14rhSyFOUhbnQAoAEiZQDzANIB5wG6FAAAwBRkoEUibwB0AACgbSpuAPQAzAGAAWZyeQDIFMsUzhQA4DXYVN1vAOQA1wEAgakAO3MeAdMUcgAAoBchAAFhb9oU3hRyAHIAAKC1IXMAcwAAoBcnAAFjdeYU6hRyAADgNdi43AABYnDuFPIUZaDPKgCg0SploNAqAKDSKuQhb3QAoO8igANkZWxwcnZ3AAYVEBUbFSEVRBVlFYQV4SFycgABbHIMFQ4VAKA4KQCgNSlwAhYVAAAAABkVcgAAoN4iYwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWlsN2E6ZHIAAOA12CjdciJlZW4AOGFjAHkARWRjAHkAXGRwAGYAAOA12FzdYwByAADgNdjA3IALQUJFSGFiY2RlZmdoamxtbm9wcnN0dXYAXhxtHHEcdRx5HN8cBx0dHTwd3B3tHfEdAR4EHh0eLB5FHrwewx7hHgkfPR9LH4ABYXJ0AGQcZxxpHHIA8gBvB/IAxQLhIWlsAKAbKeEhcnIAoA4pZ6BmIgCgiyphAHIAAKBiKWMJjRwAAJAcAACVHAAAAAAAAAAAAACZHJwcAACmHKgcrRwAANIc9SF0ZTph7SJwdHl2AKC0KXIAYQDuAFoG4iFkYbtjZwAAoegnZGyhHKMcAKCRKeUAiwYAoIUqdQBvADuAqwCrQHIAgKOQIWJmaGxwc3QAuhy/HMIcxBzHHMoczhxmoOQhcwAAoB8pcwAAoB0p6wCyGnAAAKCrIWwAAKA5KWkAbQAAoHMpbAAAoKIhAKGrKmFl1hzaHGkAbAAAoBkpc6CtKgDgrSoA/oABYWJyAOUc6RztHHIAcgAAoAwpcgBrAACgcicAAWFr8Rz4HGMAAAFla/Yc9xx7YFtgAAFlc/wc/hwAoIspbAAAAWR1Ax0FHQCgjykAoI0pAAJhZXV5Dh0RHRodHB3yIW9uPmEAAWRpFR0YHWkAbAA8YewAowbiAPccO2QAAmNxcnMkHScdLB05HWEAAKA2KXUAbwDyoBwgqhEAAWR1MB00HeghYXIAoGcpcyJoYXIAAKBLKWgAAKCyIQCiZCJmZ3FzRB1FB5Qdnh10AIACYWhscnQATh1WHWUdbB2NHXIicm93AHSgkCFhAOkAzxxhI3Jwb29uAAABZHVeHWId7yF3bgCgvSFwAACgvCHlJGZ0YXJyb3dzAKDHIWkiZ2h0AIABYWhzAHUdex2DHXIicm93APOglCGdBmEAcgBwAG8AbwBuAPMAzgtxAHUAaQBnAGEAcgByAG8A9wBlGugkcmVldGltZXMAoMsi8aFkIk0HAACaHWwAYQBuAPQAXgcAon0qY2Rnc6YdqR2xHbcdYwAAoKgqbwB0AG+gfypyoIEqAKCDKmXg2iIA/nMAAKCTKoACYWRlZ3MAwB3GHcod1h3ZHXAAcAByAG8A+ACmHG8AdAAAoNYicQAAAWdxzx3SHXQA8gBGB2cAdADyAHQcdADyAFMHaQDtAGMHgAFpbHIA4h3mHeod8yFodACgfClvAG8A8gDKBgDgNdgp3UWgdiIAoJEqYQH1Hf4dcgAAAWR1YB35HWygvCEAoGopbABrAACghCVjAHkAWWQAomoiYWNodAweDx4VHhkecgDyAGsdbwByAG4AZQDyAGAW4SFyZACgaylyAGkAAKD6JQABaW8hHiQe5CFvdEBh9SFzdGGgsCPjIWhlAKCwIwACRWFlczMeNR48HkEeAKBoInAAcKCJKvIhb3gAoIkqcaCHKvGghyo0HmkAbQAAoOYiAARhYm5vcHR3elIeXB5fHoUelh6mHqsetB4AAW5yVh5ZHmcAAKDsJ3IAAKD9IXIA6wCwBmcAgAFsbXIAZh52Hnse5SFmdAABYXKIB2weaQBnAGgAdABhAHIAcgBvAPcAkwfhInBzdG8AoPwnaQBnAGgAdABhAHIAcgBvAPcAmgdwI2Fycm93AAABbHKNHpEeZQBmAPQAxhxpImdodAAAoKwhgAFhZmwAnB6fHqIecgAAoIUpAOA12F3ddQBzAACgLSppIm1lcwAAoDQqYQGvHrMecwB0AACgFyLhAIoOZaHKJbkeRhLuIWdlAKDKJWEAcgBsoCgAdAAAoJMpgAJhY2htdADMHs8e1R7bHt0ecgDyAJ0GbwByAG4AZQDyANYWYQByAGSgyyEAoG0pAKAOIHIAaQAAoL8iAANhY2hpcXTrHu8e1QfzHv0eBh/xIXVvAKA5IHIAAOA12MHcbQDloXIi+h4AAPweAKCNKgCgjyoAAWJ19xwBH28AcqAYIACgGiDyIW9rQmEAhDwAO2NkaGlscXJCBhcfxh0gHyQfKB8sHzEfAAFjaRsfHR8AoKYqcgAAoHkqcgBlAOUAkx3tIWVzAKDJIuEhcnIAoHYpdSJlc3QAAKB7KgABUGk1HzkfYQByAACglillocMlAgdfEnIAAAFkdUIfRx9zImhhcgAAoEop6CFhcgCgZikAAWVuTx9WH3IjdG5lcXEAAOBoIgD+xQBUHwAHRGFjZGVmaGlsbm9wc3VuH3Ifoh+rH68ftx+7H74f5h/uH/MfBwj/HwsgxCFvdACgOiIAAmNscHJ5H30fiR+eH3IAO4CvAK9AAAFldIEfgx8AoEImZaAgJ3MAZQAAoCAnc6CmIXQAbwCAoaYhZGx1AJQfmB+cH28AdwDuAHkDZQBmAPQA6gbwAOkO6yFlcgCgriUAAW95ph+qH+0hbWEAoCkqPGThIXNoAKAUIOElc3VyZWRhbmdsZQCgISJyAADgNdgq3W8AAKAnIYABY2RuAMQfyR/bH3IAbwA7gLUAtUBhoiMi0B8AANMf1x9zAPQAKxFpAHIAAKDwKm8AdAA7gLcAt0B1AHMA4qESIh4TAADjH3WgOCIAoCoqYwHqH+0fcAAAoNsq8gB+GnAAbAB1APMACAgAAWRw9x/7H+UhbHMAoKciZgAA4DXYXt0AAWN0AyAHIHIAAOA12MLc8CFvcwCgPiJsobwDECAVIPQiaW1hcACguCJhAPAAEyAADEdMUlZhYmNkZWZnaGlqbG1vcHJzdHV2dzwgRyBmIG0geSCqILgg2iDeIBEhFSEyIUMhTSFQIZwhnyHSIQAiIyKLIrEivyIUIwABZ3RAIEMgAODZIjgD9uBrItIgBwmAAWVsdABNIF8gYiBmAHQAAAFhclMgWCByInJvdwAAoM0h6SRnaHRhcnJvdwCgziEA4NgiOAP24Goi0iBfCekkZ2h0YXJyb3cAoM8hAAFEZHEgdSDhIXNoAKCvIuEhc2gAoK4igAJiY25wdACCIIYgiSCNIKIgbABhAACgByL1IXRlRGFnAADgICLSIACiSSJFaW9wlSCYIJwgniAA4HAqOANkAADgSyI4A3MASWFyAG8A+AAyCnUAcgBhoG4mbADzoG4mmwjzAa8gAACzIHAAO4CgAKBAbQBwAOXgTiI4AyoJgAJhZW91eQDBIMogzSDWINkg8AHGIAAAyCAAoEMqbwBuAEhh5CFpbEZhbgBnAGSgRyJvAHQAAOBtKjgDcAAAoEIqPWThIXNoAKATIACjYCJBYWRxc3jpIO0g+SD+IAIhDCFyAHIAAKDXIXIAAAFocvIg9SBrAACgJClvoJch9wAGD28AdAAA4FAiOAN1AGkA9gC7CAABZWkGIQohYQByAACgKCntAN8I6SFzdPOgBCLlCHIAAOA12CvdAAJFZXN0/wgcISshLiHxoXEiIiEAABMJ8aFxIgAJAAAnIWwAYQBuAPQAEwlpAO0AGQlyoG8iAKBvIoABQWFwADghOyE/IXIA8gBeIHIAcgAAoK4hYQByAACg8ipzogsiSiEAAAAAxwtkoPwiAKD6ImMAeQBaZIADQUVhZGVzdABcIV8hYiFmIWkhkyGWIXIA8gBXIADgZiI4A3IAcgAAoJohcgAAoCUggKFwImZxcwBwIYQhjiF0AAABYXJ1IXohcgByAG8A9wBlIWkAZwBoAHQAYQByAHIAbwD3AD4h8aFwImAhAACKIWwAYQBuAPQAZwlz4H0qOAMAoG4iaQDtAG0JcqBuImkA5aDqIkUJaQDkADoKAAFwdKMhpyFmAADgNdhf3YCBrAA7aW4AriGvIcchrEBuAIChCSJFZHYAtyG6Ib8hAOD5IjgDbwB0AADg9SI4A+EB1gjEIcYhAKD3IgCg9iJpAHagDCLhAagJzyHRIQCg/iIAoP0igAFhb3IA2CHsIfEhcgCAoSYiYXN0AOAh5SHpIWwAbABlAOwAywhsAADg/SrlIADgAiI4A2wiaW50AACgFCrjoYAi9yEAAPohdQDlAJsJY+CvKjgDZaCAIvEAkwkAAkFhaXQHIgoiFyIeInIA8gBsIHIAcgAAoZshY3cRIhQiAOAzKTgDAOCdITgDZyRodGFycm93AACgmyFyAGkA5aDrIr4JgANjaGltcHF1AC8iPCJHIpwhTSJQIloigKGBImNlcgA2Iv0JOSJ1AOUABgoA4DXYw9zvIXJ0bQKdIQAAAABEImEAcgDhAOEhbQBloEEi8aBEIiYKYQDyAMsIcwB1AAABYnBWIlgi5QDUCeUA3wmAAWJjcABgInMieCKAoYQiRWVzAGci7glqIgDgxSo4A2UAdABl4IIi0iBxAPGgiCJoImMAZaCBIvEA/gmAoYUiRWVzAH8iFgqCIgDgxio4A2UAdABl4IMi0iBxAPGgiSKAIgACZ2lscpIilCKaIpwi7AAMCWwAZABlADuA8QDxQOcAWwlpI2FuZ2xlAAABbHKkIqoi5SFmdGWg6iLxAEUJaSJnaHQAZaDrIvEAvgltoL0DAKEjAGVzuCK8InIAbwAAoBYhcAAAoAcggARESGFkZ2lscnMAziLSItYi2iLeIugi7SICIw8j4SFzaACgrSLhIXJyAKAEKXAAAOBNItIg4SFzaACgrCIAAWV04iLlIgDgZSLSIADgPgDSIG4iZmluAACg3imAAUFldADzIvci+iJyAHIAAKACKQDgZCLSIHLgPADSIGkAZQAA4LQi0iAAAUF0BiMKI3IAcgAAoAMp8iFpZQDgtSLSIGkAbQAA4Dwi0iCAAUFhbgAaIx4jKiNyAHIAAKDWIXIAAAFociMjJiNrAACgIylvoJYh9wD/DuUhYXIAoCcpUxJqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVCMAAF4jaSN/I4IjjSOeI8AUAAAAAKYjwCMAANoj3yMAAO8jHiQvJD8kRCQAAWNzVyNsFHUAdABlADuA8wDzQAABaXlhI2cjcgBjoJoiO4D0APRAPmSAAmFiaW9zAHEjdCN3I3EBeiNzAOgAdhTsIWFjUWF2AACgOCrvIWxkAKC8KewhaWdTYQABY3KFI4kjaQByAACgvykA4DXYLN1vA5QjAAAAAJYjAACcI24A22JhAHYAZQA7gPIA8kAAoMEpAAFibaEjjAphAHIAAKC1KQACYWNpdKwjryO6I70jcgDyAFkUAAFpcrMjtiNyAACgvinvIXNzAKC7KW4A5QDZCgCgwCmAAWFlaQDFI8gjyyNjAHIATWFnAGEAyWOAAWNkbgDRI9Qj1iPyIW9uv2MAoLYpdQDzAHgBcABmAADgNdhg3YABYWVsAOQj5yPrI3IAAKC3KXIAcAAAoLkpdQDzAHwBAKMoImFkaW9zdvkj/CMPJBMkFiQbJHIA8gBeFIChXSplZm0AAyQJJAwkcgBvoDQhZgAAoDQhO4CqAKpAO4C6ALpA5yFvZgCgtiJyAACgVipsIm9wZQAAoFcqAKBbKoABY2xvACMkJSQrJPIACCRhAHMAaAA7gPgA+EBsAACgmCJpAGwBMyQ4JGQAZQA7gPUA9UBlAHMAYaCXInMAAKA2Km0AbAA7gPYA9kDiIWFyAKA9I+EKXiQAAHokAAB8JJQkAACYJKkkAAAAALUkEQsAAPAkAAAAAAQleiUAAIMlcgCAoSUiYXN0AGUkbyQBCwCBtgA7bGokayS2QGwAZQDsABgDaQJ1JAAAAAB4JG0AAKDzKgCg/Sp5AD9kcgCAAmNpbXB0AIUkiCSLJJkSjyRuAHQAJWBvAGQALmBpAGwAAKAwIOUhbmsAoDEgcgAA4DXYLd2AAWltbwCdJKAkpCR2oMYD1WNtAGEA9AD+B24AZQAAoA4m9KHAA64kAAC0JGMjaGZvcmsAAKDUItZjAAFhdbgkxCRuAAABY2u9JMIkawBooA8hAKAOIfYAaRpzAACkKwBhYmNkZW1zdNMkIRPXJNsk4STjJOck6yTjIWlyAKAjKmkAcgAAoCIqAAFvdYsW3yQAoCUqAKByKm4AO4CxALFAaQBtAACgJip3AG8AAKAnKoABaXB1APUk+iT+JO4idGludACgFSpmAADgNdhh3W4AZAA7gKMAo0CApHoiRWFjZWlub3N1ABMlFSUYJRslTCVRJVklSSV1JQCgsypwAACgtyp1AOUAPwtjoK8qgKJ6ImFjZW5zACclLSU0JTYlSSVwAHAAcgBvAPgAFyV1AHIAbAB5AGUA8QA/C/EAOAuAAWFlcwA8JUElRSXwInByb3gAoLkqcQBxAACgtSppAG0AAKDoImkA7QBEC20AZQDzoDIgIguAAUVhcwBDJVclRSXwAEAlgAFkZnAATwtfJXElgAFhbHMAZSVpJW0l7CFhcgCgLiPpIW5lAKASI/UhcmYAoBMjdKAdIu8AWQvyIWVsAKCwIgABY2l9JYElcgAA4DXYxdzIY24iY3NwAACgCCAAA2Zpb3BzdZElKxuVJZolnyWkJXIAAOA12C7dcABmAADgNdhi3XIiaW1lAACgVyBjAHIAAOA12MbcgAFhZW8AqiW6JcAldAAAAWVpryW2JXIAbgBpAG8AbgDzABkFbgB0AACgFipzAHQAZaA/APEACRj0AG0LgApBQkhhYmNkZWZoaWxtbm9wcnN0dXgA4yXyJfYl+iVpJpAmpia9JtUm5ib4JlonaCdxJ3UnnietJ7EnyCfiJ+cngAFhcnQA6SXsJe4lcgDyAJkM8gD6AuEhaWwAoBwpYQByAPIA3BVhAHIAAKBkKYADY2RlbnFydAAGJhAmEyYYJiYmKyZaJgABZXUKJg0mAOA9IjEDdABlAFVhaQDjACAN7SJwdHl2AKCzKWcAgKHpJ2RlbAAgJiImJCYAoJIpAKClKeUA9wt1AG8AO4C7ALtAcgAApZIhYWJjZmhscHN0dz0mQCZFJkcmSiZMJk4mUSZVJlgmcAAAoHUpZqDlIXMAAKAgKQCgMylzAACgHinrALka8ACVHmwAAKBFKWkAbQAAoHQpbAAAoKMhAKCdIQABYWleJmImaQBsAACgGilvAG6gNiJhAGwA8wB2C4ABYWJyAG8mciZ2JnIA8gAvEnIAawAAoHMnAAFha3omgSZjAAABZWt/JoAmfWBdYAABZXOFJocmAKCMKWwAAAFkdYwmjiYAoI4pAKCQKQACYWV1eZcmmiajJqUm8iFvbllhAAFkaZ4moSZpAGwAV2HsAA8M4gCAJkBkAAJjbHFzrSawJrUmuiZhAACgNylkImhhcgAAoGkpdQBvAPKgHSCjAWgAAKCzIYABYWNnAMMm0iaUC2wAgKEcIWlwcwDLJs4migxuAOUAoAxhAHIA9ADaC3QAAKCtJYABaWxyANsm3ybjJvMhaHQAoH0pbwBvAPIANgwA4DXYL90AAWFv6ib1JnIAAAFkde8m8SYAoMEhbKDAIQCgbCl2oMED8WOAAWducwD+Jk4nUCdoAHQAAANhaGxyc3QKJxInISc1Jz0nRydyInJvdwB0oJIhYQDpAFYmYSNycG9vbgAAAWR1GiceJ28AdwDuAPAmcAAAoMAh5SFmdAABYWgnJy0ncgByAG8AdwDzAAkMYQByAHAAbwBvAG4A8wATBGklZ2h0YXJyb3dzAACgySFxAHUAaQBnAGEAcgByAG8A9wBZJugkcmVldGltZXMAoMwiZwDaYmkAbgBnAGQAbwB0AHMAZQDxABwYgAFhaG0AYCdjJ2YncgDyAAkMYQDyABMEAKAPIG8idXN0AGGgsSPjIWhlAKCxI+0haWQAoO4qAAJhYnB0fCeGJ4knmScAAW5ygCeDJ2cAAKDtJ3IAAKD+IXIA6wAcDIABYWZsAI8nkieVJ3IAAKCGKQDgNdhj3XUAcwAAoC4qaSJtZXMAAKA1KgABYXCiJ6gncgBnoCkAdAAAoJQp7yJsaW50AKASKmEAcgDyADwnAAJhY2hxuCe8J6EMwCfxIXVvAKA6IHIAAOA12MfcAAFidYAmxCdvAPKgGSCoAYABaGlyAM4n0ifWJ3IAZQDlAE0n7SFlcwCgyiJpAIChuSVlZmwAXAxjEt4n9CFyaQCgzinsInVoYXIAoGgpAKAeIWENBSgJKA0oSyhVKIYoAACLKLAoAAAAAOMo5ygAABApJCkxKW0pcSmHKaYpAACYKgAAAACxKmMidXRlAFthcQB1AO8ABR+ApHsiRWFjZWlucHN5ABwoHignKCooLygyKEEoRihJKACgtCrwASMoAAAlKACguCpvAG4AYWF1AOUAgw1koLAqaQBsAF9hcgBjAF1hgAFFYXMAOCg6KD0oAKC2KnAAAKC6KmkAbQAAoOki7yJsaW50AKATKmkA7QCIDUFkbwB0AGKixSKRFgAAAABTKACgZiqAA0FhY21zdHgAYChkKG8ocyh1KHkogihyAHIAAKDYIXIAAAFocmkoayjrAJAab6CYIfcAzAd0ADuApwCnQGkAO2D3IWFyAKApKW0AAAFpbn4ozQBuAHUA8wDOAHQAAKA2J3IA7+A12DDdIxkAAmFjb3mRKJUonSisKHIAcAAAoG8mAAFoeZkonChjAHkASWRIZHIAdABtAqUoAAAAAKgoaQDkAFsPYQByAGEA7ABsJDuArQCtQAABZ22zKLsobQBhAAChwwNmdroouijCY4CjPCJkZWdsbnByAMgozCjPKNMo1yjaKN4obwB0AACgairxoEMiCw5FoJ4qAKCgKkWgnSoAoJ8qZQAAoEYi7CF1cwCgJCrhIXJyAKByKWEAcgDyAPwMAAJhZWl07Sj8KAEpCCkAAWxz8Sj4KGwAcwBlAHQAbQDpAH8oaABwAACgMyrwImFyc2wAoOQpAAFkbFoPBSllAACgIyNloKoqc6CsKgDgrCoA/oABZmxwABUpGCkfKfQhY3lMZGKgLwBhoMQpcgAAoD8jZgAA4DXYZN1hAAABZHIoKRcDZQBzAHWgYCZpAHQAAKBgJoABY3N1ADYpRilhKQABYXU6KUApcABzoJMiAOCTIgD+cABzoJQiAOCUIgD+dQAAAWJwSylWKQChjyJlcz4NUCllAHQAZaCPIvEAPw0AoZAiZXNIDVspZQB0AGWgkCLxAEkNAKGhJWFmZilbBHIAZQFrKVwEAKChJWEAcgDyAAMNAAJjZW10dyl7KX8pgilyAADgNdjI3HQAbQDuAM4AaQDsAAYpYQByAOYAVw0AAWFyiimOKXIA5qAGJhESAAFhbpIpoylpImdodAAAAWVwmSmgKXAAcwBpAGwAbwDuANkXaADpAKAkcwCvYIACYmNtbnAArin8KY4NJSooKgCkgiJFZGVtbnByc7wpvinCKcgpzCnUKdgp3CkAoMUqbwB0AACgvSpkoIYibwB0AACgwyr1IWx0AKDBKgABRWXQKdIpAKDLKgCgiiLsIXVzAKC/KuEhcnIAoHkpgAFlaXUA4inxKfQpdAAAoYIiZW7oKewpcQDxoIYivSllAHEA8aCKItEpbQAAoMcqAAFicPgp+ikAoNUqAKDTKmMAgKJ7ImFjZW5zAAcqDSoUKhYqRihwAHAAcgBvAPgAIyh1AHIAbAB5AGUA8QCDDfEAfA2AAWFlcwAcKiIqPShwAHAAcgBvAPgAPChxAPEAOShnAACgaiYApoMiMTIzRWRlaGxtbnBzPCo/KkIqRSpHKlIqWCpjKmcqaypzKncqO4C5ALlAO4CyALJAO4CzALNAAKDGKgABb3NLKk4qdAAAoL4qdQBiAACg2CpkoIcibwB0AACgxCpzAAABb3VdKmAqbAAAoMknYgAAoNcq4SFycgCgeyn1IWx0AKDCKgABRWVvKnEqAKDMKgCgiyLsIXVzAKDAKoABZWl1AH0qjCqPKnQAAKGDImVugyqHKnEA8aCHIkYqZQBxAPGgiyJwKm0AAKDIKgABYnCTKpUqAKDUKgCg1iqAAUFhbgCdKqEqrCpyAHIAAKDZIXIAAAFocqYqqCrrAJUab6CZIfcAxQf3IWFyAKAqKWwAaQBnADuA3wDfQOELzyrZKtwq6SrsKvEqAAD1KjQrAAAAAAAAAAAAAEwrbCsAAHErvSsAAAAAAADRK3IC1CoAAAAA2CrnIWV0AKAWI8RjcgDrAOUKgAFhZXkA4SrkKucq8iFvbmVh5CFpbGNhQmRvAPQAIg5sInJlYwAAoBUjcgAA4DXYMd0AAmVpa2/7KhIrKCsuK/IBACsAAAkrZQAAATRm6g0EK28AcgDlAOsNYQBzorgDECsAAAAAEit5AG0A0WMAAWNuFislK2sAAAFhcxsrIStwAHAAcgBvAPgAFw5pAG0AAKA8InMA8AD9DQABYXMsKyEr8AAXDnIAbgA7gP4A/kDsATgrOyswG2QA5QBnAmUAcwCAgdcAO2JkAEMrRCtJK9dAYaCgInIAAKAxKgCgMCqAAWVwcwBRK1MraSvhAAkh4qKkIlsrXysAAAAAYytvAHQAAKA2I2kAcgAAoPEqb+A12GXdcgBrAACg2irhAHgociJpbWUAAKA0IIABYWlwAHYreSu3K2QA5QC+DYADYWRlbXBzdACFK6MrmiunK6wrsCuzK24iZ2xlAACitSVkbHFykCuUK5ornCvvIXduAKC/JeUhZnRloMMl8QACBwCgXCJpImdodABloLkl8QBdDG8AdAAAoOwlaSJudXMAAKA6KuwhdXMAoDkqYgAAoM0p6SFtZQCgOyrlInppdW0AoOIjgAFjaHQAwivKK80rAAFyecYrySsA4DXYydxGZGMAeQBbZPIhb2tnYQABaW/UK9creAD0ANERaCJlYWQAAAFsct4r5ytlAGYAdABhAHIAcgBvAPcAXQbpJGdodGFycm93AKCgIQAJQUhhYmNkZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg")});var B1;var vU=k(()=>{(function(f){f[f.VALUE_LENGTH=49152]="VALUE_LENGTH",f[f.FLAG13=8192]="FLAG13",f[f.BRANCH_LENGTH=8064]="BRANCH_LENGTH",f[f.JUMP_TABLE=127]="JUMP_TABLE"})(B1||(B1={}))});function uj(f){return f>=Ef.ZERO&&f<=Ef.NINE}function xk(f){return f>=Ef.UPPER_A&&f<=Ef.UPPER_F||f>=Ef.LOWER_A&&f<=Ef.LOWER_F}function wk(f){return f>=Ef.UPPER_A&&f<=Ef.UPPER_Z||f>=Ef.LOWER_A&&f<=Ef.LOWER_Z||uj(f)}function hk(f){return f===Ef.EQUALS||wk(f)}class Ej{constructor(f,J,Y){this.decodeTree=f,this.emitCodePoint=J,this.errors=Y,this.state=of.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=fY.Strict,this.runConsumed=0}startEntity(f){this.decodeMode=f,this.state=of.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(f,J){switch(this.state){case of.EntityStart:{if(f.charCodeAt(J)===Ef.NUM)return this.state=of.NumericStart,this.consumed+=1,this.stateNumericStart(f,J+1);return this.state=of.NamedEntity,this.stateNamedEntity(f,J)}case of.NumericStart:return this.stateNumericStart(f,J);case of.NumericDecimal:return this.stateNumericDecimal(f,J);case of.NumericHex:return this.stateNumericHex(f,J);case of.NamedEntity:return this.stateNamedEntity(f,J)}}stateNumericStart(f,J){if(J>=f.length)return-1;if((f.charCodeAt(J)|mU)===Ef.LOWER_X)return this.state=of.NumericHex,this.consumed+=1,this.stateNumericHex(f,J+1);return this.state=of.NumericDecimal,this.stateNumericDecimal(f,J)}stateNumericHex(f,J){while(J<f.length){let Y=f.charCodeAt(J);if(uj(Y)||xk(Y)){let z=Y<=Ef.NINE?Y-Ef.ZERO:(Y|mU)-Ef.LOWER_A+10;this.result=this.result*16+z,this.consumed++,J++}else return this.emitNumericEntity(Y,3)}return-1}stateNumericDecimal(f,J){while(J<f.length){let Y=f.charCodeAt(J);if(uj(Y))this.result=this.result*10+(Y-Ef.ZERO),this.consumed++,J++;else return this.emitNumericEntity(Y,2)}return-1}emitNumericEntity(f,J){var Y;if(this.consumed<=J)return(Y=this.errors)===null||Y===void 0||Y.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(f===Ef.SEMI)this.consumed+=1;else if(this.decodeMode===fY.Strict)return 0;if(this.emitCodePoint(EU(this.result),this.consumed),this.errors){if(f!==Ef.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(f,J){let{decodeTree:Y}=this,z=Y[this.treeIndex],G=(z&B1.VALUE_LENGTH)>>14;while(J<f.length){if(G===0&&(z&B1.FLAG13)!==0){let q=(z&B1.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let Q=z&B1.JUMP_TABLE;if(f.charCodeAt(J)!==Q)return this.result===0?0:this.emitNotTerminatedNamedEntity();J++,this.excess++,this.runConsumed++}while(this.runConsumed<q){if(J>=f.length)return-1;let Q=this.runConsumed-1,H=Y[this.treeIndex+1+(Q>>1)],B=Q%2===0?H&255:H>>8&255;if(f.charCodeAt(J)!==B)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();J++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(q>>1),z=Y[this.treeIndex],G=(z&B1.VALUE_LENGTH)>>14}if(J>=f.length)break;let X=f.charCodeAt(J);if(X===Ef.SEMI&&G!==0&&(z&B1.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.treeIndex=vk(Y,z,this.treeIndex+Math.max(1,G),X),this.treeIndex<0)return this.result===0||this.decodeMode===fY.Attribute&&(G===0||hk(X))?0:this.emitNotTerminatedNamedEntity();if(z=Y[this.treeIndex],G=(z&B1.VALUE_LENGTH)>>14,G!==0){if(X===Ef.SEMI)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.decodeMode!==fY.Strict&&(z&B1.FLAG13)===0)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}J++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var f;let{result:J,decodeTree:Y}=this,z=(Y[J]&B1.VALUE_LENGTH)>>14;return this.emitNamedEntityData(J,z,this.consumed),(f=this.errors)===null||f===void 0||f.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(f,J,Y){let{decodeTree:z}=this;if(this.emitCodePoint(J===1?z[f]&~(B1.VALUE_LENGTH|B1.FLAG13):z[f+1],Y),J===3)this.emitCodePoint(z[f+2],Y);return Y}end(){var f;switch(this.state){case of.NamedEntity:return this.result!==0&&(this.decodeMode!==fY.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case of.NumericDecimal:return this.emitNumericEntity(0,2);case of.NumericHex:return this.emitNumericEntity(0,3);case of.NumericStart:return(f=this.errors)===null||f===void 0||f.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case of.EntityStart:return 0}}}function Pk(f){let J="",Y=new Ej(f,(z)=>J+=uU(z));return function(G,X){let q=0,Q=0;while((Q=G.indexOf("&",Q))>=0){J+=G.slice(q,Q),Y.startEntity(X);let B=Y.write(G,Q+1);if(B<0){q=Q+Y.end();break}q=Q+B,Q=B===0?q+1:q}let H=J+G.slice(q);return J="",H}}function vk(f,J,Y,z){let G=(J&B1.BRANCH_LENGTH)>>7,X=J&B1.JUMP_TABLE;if(G===0)return X!==0&&z===X?Y:-1;if(X){let B=z-X;return B<0||B>=G?-1:f[Y+B]-1}let q=G+1>>1,Q=0,H=G-1;while(Q<=H){let B=Q+H>>>1,V=B>>1,U=f[Y+V]>>(B&1)*8&255;if(U<z)Q=B+1;else if(U>z)H=B-1;else return f[Y+q+B]}return-1}function Cz(f,J=fY.Legacy){return mk(f,J)}var Ef,mU=32,of,fY,mk;var cU=k(()=>{xU();PU();vU();(function(f){f[f.NUM=35]="NUM",f[f.SEMI=59]="SEMI",f[f.EQUALS=61]="EQUALS",f[f.ZERO=48]="ZERO",f[f.NINE=57]="NINE",f[f.LOWER_A=97]="LOWER_A",f[f.LOWER_F=102]="LOWER_F",f[f.LOWER_X=120]="LOWER_X",f[f.LOWER_Z=122]="LOWER_Z",f[f.UPPER_A=65]="UPPER_A",f[f.UPPER_F=70]="UPPER_F",f[f.UPPER_Z=90]="UPPER_Z"})(Ef||(Ef={}));(function(f){f[f.EntityStart=0]="EntityStart",f[f.NumericStart=1]="NumericStart",f[f.NumericDecimal=2]="NumericDecimal",f[f.NumericHex=3]="NumericHex",f[f.NamedEntity=4]="NamedEntity"})(of||(of={}));(function(f){f[f.Legacy=0]="Legacy",f[f.Strict=1]="Strict",f[f.Attribute=2]="Attribute"})(fY||(fY={}));mk=Pk(hU)});var nU,dU;var lU=k(()=>{cU();(function(f){f[f.XML=0]="XML",f[f.HTML=1]="HTML"})(nU||(nU={}));(function(f){f[f.UTF8=0]="UTF8",f[f.ASCII=1]="ASCII",f[f.Extensive=2]="Extensive",f[f.Attribute=3]="Attribute",f[f.Text=4]="Text"})(dU||(dU={}))});import{CliRenderer as nk,createCliRenderer as dk,engine as ik}from"@opentui/core";import{createTestRenderer as Pm}from"@opentui/core/testing";import{ASCIIFontRenderable as lk,BoxRenderable as ak,CodeRenderable as $k,DiffRenderable as rk,InputRenderable as pk,LineNumberRenderable as _k,MarkdownRenderable as ok,ScrollBoxRenderable as sk,SelectRenderable as tk,TabSelectRenderable as ek,TextareaRenderable as fN,TextAttributes as xj,TextNodeRenderable as JN,TextRenderable as YN}from"@opentui/core";import{engine as cm,Timeline as nm}from"@opentui/core";import{BaseRenderable as oU,createTextAttributes as GN,InputRenderable as wj,InputRenderableEvents as kX,isTextNodeRenderable as vj,parseColor as aU,Renderable as XN,RootTextNodeRenderable as ZN,ScrollBoxRenderable as qN,SelectRenderable as $U,SelectRenderableEvents as hj,TabSelectRenderable as rU,TabSelectRenderableEvents as Pj,TextNodeRenderable as QN,TextRenderable as sU}from"@opentui/core";import{BaseRenderable as LN,isTextNodeRenderable as MN,TextNodeRenderable as FN,TextRenderable as ON,Yoga as _U}from"@opentui/core";import{BoxRenderable as sm,RootRenderable as tm}from"@opentui/core";import{TimeToFirstDrawRenderable as CN}from"@opentui/core";import{createSlotRegistry as Jc}from"@opentui/core";function BN({createElement:f,createTextNode:J,createSlotNode:Y,isTextNode:z,replaceText:G,insertNode:X,removeNode:q,setProperty:Q,getParentNode:H,getFirstChild:B,getNextSibling:V}){function j(N,g,C,y){if(C!==void 0&&!y)y=[];if(typeof g!=="function")return U(N,g,y,C);AJ((_)=>U(N,g(),_,C),y)}function U(N,g,C,y,_){while(typeof C==="function")C=C();if(g===C)return C;let z0=typeof g,t=y!==void 0;if(z0==="string"||z0==="number"){if(z0==="number")g=g.toString();if(t){let Y0=C[0];if(Y0&&z(Y0))G(Y0,g);else Y0=J(g);C=M(N,C,y,Y0)}else if(C!==""&&typeof C==="string")G(B(N),C=g);else M(N,C,y,J(g)),C=g}else if(g==null||z0==="boolean")C=M(N,C,y);else if(z0==="function")return AJ(()=>{let Y0=g();while(typeof Y0==="function")Y0=Y0();C=U(N,Y0,C,y)}),()=>C;else if(Array.isArray(g)){let Y0=[];if(L(Y0,g,_))return AJ(()=>C=U(N,Y0,C,y,!0)),()=>C;if(Y0.length===0){let T=M(N,C,y);if(t)return C=T}else if(Array.isArray(C))if(C.length===0)R(N,Y0,y);else O(N,C,Y0);else if(C==null||C==="")R(N,Y0);else O(N,t&&C||[B(N)],Y0);C=Y0}else{if(Array.isArray(C)){if(t)return C=M(N,C,y,g);M(N,C,null,g)}else if(C==null||C===""||!B(N))X(N,g);else S(N,g,B(N));C=g}return C}function L(N,g,C){let y=!1;for(let _=0,z0=g.length;_<z0;_++){let t=g[_],Y0;if(t==null||t===!0||t===!1);else if(Array.isArray(t))y=L(N,t)||y;else if((Y0=typeof t)==="string"||Y0==="number")N.push(J(t));else if(Y0==="function")if(C){while(typeof t==="function")t=t();y=L(N,Array.isArray(t)?t:[t])||y}else N.push(t),y=!0;else N.push(t)}return y}function O(N,g,C){let y=C.length,_=g.length,z0=y,t=0,Y0=0,T=V(g[_-1]),Q0=null;while(t<_||Y0<z0){if(g[t]===C[Y0]){t++,Y0++;continue}while(g[_-1]===C[z0-1])_--,z0--;if(_===t){let p=z0<y?Y0?V(C[Y0-1]):C[z0-Y0]:T;while(Y0<z0)X(N,C[Y0++],p)}else if(z0===Y0)while(t<_){if(!Q0||!Q0.has(g[t]))q(N,g[t]);t++}else if(g[t]===C[z0-1]&&C[Y0]===g[_-1]){let p=V(g[--_]);X(N,C[Y0++],V(g[t++])),X(N,C[--z0],p),g[_]=C[z0]}else{if(!Q0){Q0=new Map;let D0=Y0;while(D0<z0)Q0.set(C[D0],D0++)}let p=Q0.get(g[t]);if(p!=null)if(Y0<p&&p<z0){let D0=t,g0=1,$;while(++D0<_&&D0<z0){if(($=Q0.get(g[D0]))==null||$!==p+g0)break;g0++}if(g0>p-Y0){let E=g[t];while(Y0<p)X(N,C[Y0++],E)}else S(N,C[Y0++],g[t++])}else t++;else q(N,g[t++])}}}function M(N,g,C,y){if(C===void 0){let z0;while(z0=B(N))q(N,z0);return y&&X(N,y),y??""}let _=y||Y();if(g.length){let z0=!1;for(let t=g.length-1;t>=0;t--){let Y0=g[t];if(_!==Y0){let T=H(Y0)===N;if(!z0&&!t)T?S(N,_,Y0):X(N,_,C);else T&&q(N,Y0)}else z0=!0}}else X(N,_,C);return[_]}function R(N,g,C){for(let y=0,_=g.length;y<_;y++)X(N,g[y],C)}function S(N,g,C){X(N,g,C),q(N,C)}function a(N,g,C={},y){if(g||(g={}),!y)AJ(()=>C.children=U(N,g.children,C.children));return AJ(()=>g.ref&&g.ref(N)),AJ(()=>{for(let _ in g){if(_==="children"||_==="ref")continue;let z0=g[_];if(z0===C[_])continue;Q(N,_,z0,C[_]),C[_]=z0}}),C}return{render(N,g){let C;return _Y((y)=>{C=y,j(g,N())}),C},insert:j,spread(N,g,C){if(typeof g==="function")AJ((y)=>a(N,g(),y,C));else a(N,g,void 0,C)},createElement:f,createTextNode:J,insertNode:X,setProp(N,g,C,y){return Q(N,g,C,y),C},mergeProps:LZ,effect:AJ,memo:HN,createComponent:HW,use(N,g,C){return $f(()=>N(g,C))}}}function jN(f){let J=BN(f);return J.mergeProps=LZ,J}function ij(f){if(!QQ.has(f))QQ.set(f,0);let J=QQ.get(f)+1;return QQ.set(f,J),`${f}-${J}`}function WN(f,J,Y){if(sf("Inserting node:",rf(J),"into parent:",rf(f),"with anchor:",rf(Y),J instanceof gG),J instanceof NX)J.parent=f,J=J.getSlotChild(f);if(Y&&Y instanceof NX)Y=Y.getSlotChild(f);if(vj(J)){if(!(f instanceof sU)&&!vj(f))throw Error(`Orphan text error: "${J.toChunks().map((X)=>X.text).join("")}" must have a <text> as a parent: ${f.id} above ${J.id}`)}if(!(f instanceof oU))throw console.error("[INSERT]","Tried to mount a non base renderable"),Error("Tried to mount a non base renderable");if(!Y){f.add(J);return}let z=mj(f),G=z.findIndex((X)=>X.id===Y.id);if(G===-1)sf("[INSERT]","Could not find anchor",rf(f),rf(Y),"[children]",...z.map((X)=>X.id));f.add(J,G)}function VN(f,J){if(sf("Removing node:",rf(J),"from parent:",rf(f)),J instanceof NX)J.parent=null,J=J.getSlotChild(f);f.remove(J.id),process.nextTick(()=>{if(J instanceof oU&&!J.parent){J.destroyRecursively();return}})}function KN(f){sf("Creating text node:",f);let J=ij("text-node");if(typeof f==="number")f=f.toString();return gG.fromString(Cz(f),{id:J})}function UN(){let f=ij("slot-node");return sf("Creating slot node",f),new NX(f)}function pU(f){sf("Getting parent of node:",rf(f));let J=f.parent??void 0;if(J instanceof ZN)J=J.textParent??void 0;let Y=J?.parent?.parent?.parent;if(Y instanceof qN&&Y.content===J)J=Y;return J}function gN(f){Object.assign(G6,f)}function RN(){return G6}var dj,Y1=()=>{let f=u1(dj);if(!f)throw Error("No renderer found");return f},zN=(f)=>{let J=Y1();f1(()=>{J.on("resize",f)}),mf(()=>{J.off("resize",f)})},TJ=()=>{let f=Y1(),[J,Y]=r({width:f.width,height:f.height});return zN((G,X)=>{Y({width:G,height:X})}),J},HN=(f)=>U0(()=>f()),QQ,sf=(...f)=>{if(process.env.DEBUG)console.log("[Reconciler]",...f)},gG,rf=(f)=>{if(!f)return;return f.id},mj=(f)=>{let J;if(f instanceof sU)J=f.getTextChildren();else J=f.getChildren();return J},DN,u,I0,b,W,x0,D,K,pm,Z,tU,hY,lj,eU,f6,NX,yX,HQ,cj,nj,J6,Y6,z6,AN,G6,kN=(f,J)=>{let Y,z=!1,G=!1,X=!0,q=!1,Q=f.destroy.bind(f),H=()=>{if(G)return;if(!Y){z=!0;return}G=!0,Y()};f.once("destroy",H),f.destroy=()=>{if(X){q=!0;return}Q()};try{Y=DN(()=>b(dj.Provider,{get value(){return f},get children(){return b(J,{})}}),f.root)}finally{X=!1,f.destroy=Q}if(z)H();if(q)Q()},X6=async(f,J={})=>{let Y=J instanceof nk?J:await dk({...J,onDestroy:()=>{J.onDestroy?.()}});ik.attach(Y),kN(Y,f)};var h=k(()=>{Wf();lU();Wf();Wf();Wf();dj=gJ();QQ=new Map;gG=class gG extends QN{static fromString(f,J={}){let Y=new gG(J);return Y.add(f),Y}};({render:DN,effect:u,memo:I0,createComponent:b,createElement:W,createTextNode:x0,insertNode:D,insert:K,spread:pm,setProp:Z,mergeProps:tU,use:hY}=jN({createElement(f){sf("Creating element:",f);let J=ij(f),Y=u1(dj);if(!Y)throw Error("No renderer found");let z=RN();if(!z[f])throw Error(`[Reconciler] Unknown component type: ${f}`);let G=new z[f](Y,{id:J});return sf("Element created with id:",J),G},createTextNode:KN,createSlotNode:UN,replaceText(f,J){if(sf("Replacing text:",J,"in node:",rf(f)),!(f instanceof gG))return;f.replace(Cz(J),0)},setProperty(f,J,Y,z){if(J.startsWith("on:")){let G=J.slice(3);if(Y)f.on(G,Y);if(z)f.off(G,z);return}if(vj(f)){if(J==="href"){f.link={url:Y};return}if(J==="style"){f.attributes|=GN(Y),f.fg=Y.fg?aU(Y.fg):f.fg,f.bg=Y.bg?aU(Y.bg):f.bg;return}return}switch(J){case"id":sf("Id mapped",f.id,"=",Y),f[J]=Y;break;case"focused":if(!(f instanceof XN))return;if(Y)f.focus();else f.blur();break;case"onChange":let G=void 0;if(f instanceof $U)G=hj.SELECTION_CHANGED;else if(f instanceof rU)G=Pj.SELECTION_CHANGED;else if(f instanceof wj)G=kX.CHANGE;if(!G)break;if(Y)f.on(G,Y);if(z)f.off(G,z);break;case"onInput":if(f instanceof wj){if(Y)f.on(kX.INPUT,Y);if(z)f.off(kX.INPUT,z)}break;case"onSubmit":if(f instanceof wj){if(Y)f.on(kX.ENTER,Y);if(z)f.off(kX.ENTER,z)}else f[J]=Y;break;case"onSelect":if(f instanceof $U){if(Y)f.on(hj.ITEM_SELECTED,Y);if(z)f.off(hj.ITEM_SELECTED,z)}else if(f instanceof rU){if(Y)f.on(Pj.ITEM_SELECTED,Y);if(z)f.off(Pj.ITEM_SELECTED,z)}break;case"style":for(let X in Y){let q=Y[X];if(z!==void 0&&q===z[X])continue;f[X]=q}break;case"text":case"content":{let X=typeof Y==="string"?Y:Array.isArray(Y)?Y.join(""):`${Y}`;f[J]=Cz(X);break}default:f[J]=Y}},isTextNode(f){return f instanceof gG},insertNode:WN,removeNode:VN,getParentNode:pU,getFirstChild(f){sf("Getting first child of node:",rf(f));let J=mj(f)[0];if(!J){sf("No first child found for node:",rf(f));return}return sf("First child found:",rf(J),"for node:",rf(f)),J},getNextSibling(f){sf("Getting next sibling of node:",rf(f));let J=pU(f);if(!J){sf("No parent found for node:",rf(f));return}let Y=mj(J),z=Y.indexOf(f);if(z===-1||z===Y.length-1){sf("No next sibling found for node:",rf(f));return}let G=Y[z+1];if(!G){sf("Next sibling is null for node:",rf(f));return}return sf("Next sibling found:",rf(G),"for node:",rf(f)),G}}));lj=class lj extends LN{constructor(f){super({id:f})}add(f,J){throw Error("Can't add children on an Slot renderable")}getChildren(){return[]}remove(f){}insertBefore(f,J){throw Error("Can't add children on an Slot renderable")}getRenderable(f){return}getChildrenCount(){return 0}requestRender(){}findDescendantById(f){return}};eU=class eU extends FN{slotParent;destroyed=!1;constructor(f,J){super({id:f});this._visible=!1,this.slotParent=J}destroy(){if(this.destroyed)return;this.destroyed=!0,this.slotParent?.destroy(),super.destroy()}};f6=class f6 extends lj{yogaNode;slotParent;destroyed=!1;constructor(f,J){super(f);this._visible=!1,this.slotParent=J,this.yogaNode=_U.default.Node.create(),this.yogaNode.setDisplay(_U.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};NX=class NX extends lj{layoutNode;textNode;destroyed=!1;constructor(f){super(f);this._visible=!1}getSlotChild(f){if(MN(f)||f instanceof ON){if(!this.textNode)this.textNode=new eU(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new f6(`slot-layout-${this.id}`,this);return this.layoutNode}destroy(){if(this.destroyed)return;if(this.destroyed=!0,this.layoutNode)this.layoutNode.destroy();if(this.textNode)this.textNode.destroy()}};yX=class yX extends JN{_ctx;constructor(f,J){super(J);this._ctx=f}};HQ=class HQ extends yX{constructor(f,J){super(null,f);if(J==="b"||J==="strong")this.attributes=(this.attributes||0)|xj.BOLD;else if(J==="i"||J==="em")this.attributes=(this.attributes||0)|xj.ITALIC;else if(J==="u")this.attributes=(this.attributes||0)|xj.UNDERLINE}};cj=class cj extends HQ{constructor(f){super(f,"b")}};nj=class nj extends HQ{constructor(f){super(f,"i")}};J6=class J6 extends HQ{constructor(f){super(f,"u")}};Y6=class Y6 extends yX{constructor(f,J){super(null,J);this.add()}add(){return super.add(`
222
- `)}};z6=class z6 extends yX{constructor(f,J){let Y={...J,link:{url:J.href}};super(null,Y)}};AN={box:ak,text:YN,input:pk,select:tk,textarea:fN,ascii_font:lk,tab_select:ek,scrollbox:sk,code:$k,diff:rk,line_number:_k,markdown:ok,span:yX,strong:cj,b:cj,em:nj,i:nj,u:J6,br:Y6,a:z6},G6={...AN};gN({time_to_first_draw:CN})});function NN(f){let J=f?.changes;if(!J||typeof J!=="object"||Array.isArray(J))return null;let Y=new Map;for(let[z,G]of Object.entries(J)){let X=G;if(typeof X?.added!=="number"||typeof X.deleted!=="number")return null;Y.set(z,{added:X.added,deleted:X.deleted})}return Y}function yN(f,J){if(f.size!==J.size)return!1;for(let[Y,z]of f){let G=J.get(Y);if(!G||!IJ(z,G))return!1}return!0}class j1{client;tasksAcc;setTasks;activeTaskAcc;setActiveTaskSig;updateAcc;setUpdateSig;daemonVersionAcc;setDaemonVersionSig;engineStateAcc;setEngineStateSig;taskJobsAcc;setTaskJobsSig;worktreeChangesAcc;setWorktreeChangesSig;uiPrefsAcc;setUiPrefsSig;keybindingsRevAcc;setKeybindingsRevSig;connectionStateAcc;setConnectionState;ensureReachable;role;channels;subscribesTasks;reconnecting=!1;constructor(f,J={}){this.client=f;let[Y,z]=r([]),[G,X]=r(null),[q,Q]=r(null),[H,B]=r(null),[V,j]=r(new Map),[U,L]=r(new Map),[O,M]=r(null),[R,S]=r(null),[a,N]=r(null),[g,C]=r("online");this.tasksAcc=Y,this.setTasks=(y)=>z(()=>y),this.activeTaskAcc=G,this.setActiveTaskSig=(y)=>X(()=>y),this.updateAcc=q,this.setUpdateSig=(y)=>Q(()=>y),this.daemonVersionAcc=H,this.setDaemonVersionSig=(y)=>B(()=>y),this.engineStateAcc=V,this.setEngineStateSig=(y)=>j(()=>y),this.taskJobsAcc=U,this.setTaskJobsSig=(y)=>L(()=>y),this.worktreeChangesAcc=O,this.setWorktreeChangesSig=(y)=>M(()=>y),this.uiPrefsAcc=R,this.setUiPrefsSig=(y)=>S(()=>y),this.keybindingsRevAcc=a,this.setKeybindingsRevSig=(y)=>N(()=>y),this.connectionStateAcc=g,this.setConnectionState=(y)=>C(()=>y),this.ensureReachable=J.ensureReachable??DG,this.role=J.role??"pane",this.channels=J.channels,this.subscribesTasks=!J.channels||J.channels.includes("task.snapshot"),this.client.on("*",(y)=>this.handleEvent(y.name,y.payload)),this.client.onLifecycle("close",()=>{if(this.setConnectionState("disconnected"),this.role==="pane")dJ("orch","daemon socket closed \u2014 starting non-spawning reconnect loop"),this.reconnectLoop()})}async reconnectLoop(){if(this.reconnecting)return;this.reconnecting=!0;let f=500,J=0;while(!this.client.isDisposed){if(await new Promise((Y)=>setTimeout(Y,f)),this.client.isDisposed)break;J++;try{await this.init(),dJ("orch",`reconnected and re-subscribed after ${J} attempt(s) \u2014 task list re-synced`),this.reconnecting=!1;return}catch(Y){if(J===1||J%10===0)WY("orch-reconnect",Y);f=Math.min(f*2,3000)}}this.reconnecting=!1}async init(){let f=await this.client.request("hello",{protocolVersion:n1,minProtocolVersion:jY}),J=typeof f.protocolVersion==="number"?f.protocolVersion:n1,Y=typeof f.minProtocolVersion==="number"?f.minProtocolVersion:J;if(!AZ({localVersion:n1,localMin:jY,remoteVersion:J,remoteMin:Y}))throw Error(`kobe daemon is protocol v${J} (min v${Y}); this client is v${n1} (min v${jY}). Restart the daemon (\`kobe daemon restart\`) or upgrade kobe.`);if(this.setDaemonVersionSig(typeof f.kobeVersion==="string"?f.kobeVersion:null),f.tasks&&this.subscribesTasks)this.setTasks(f.tasks.map(bX));if(await this.client.subscribe({role:this.role,channels:this.channels}),f.capabilities?.includes("worktree.changes")){if(this.worktreeChangesAcc()===null)this.setWorktreeChangesSig(new Map)}else this.setWorktreeChangesSig(null);this.setConnectionState("online"),dJ("orch",`subscribed as ${this.role} (${this.tasksAcc().length} tasks)`)}connectionStateSignal(){return this.connectionStateAcc}async manualReconnect(){this.client.forceDisconnect(),await this.ensureReachable(),await this.init()}dispose(){this.client.close()}tasksSignal(){return this.tasksAcc}activeTaskSignal(){return this.activeTaskAcc}updateSignal(){return this.updateAcc}daemonVersionSignal(){return this.daemonVersionAcc}daemonStaleSignal(){return()=>OW(this.daemonVersionAcc()??void 0,s0)}engineStateSignal(){return this.engineStateAcc}taskJobsSignal(){return this.taskJobsAcc}worktreeChangesSignal(){return this.worktreeChangesAcc}uiPrefsSignal(){return this.uiPrefsAcc}keybindingsRevSignal(){return this.keybindingsRevAcc}listTasks(){return this.tasksAcc()}getTask(f){return this.tasksAcc().find((J)=>J.id===f)}subscribeTasks(f){try{f(this.listTasks())}catch(Y){console.error("[kobe RemoteOrchestrator] task listener threw on subscribe:",Y)}let J=!0;return _Y((Y)=>{return zf(()=>{let z=this.tasksAcc();if(J){J=!1;return}try{f(z)}catch(G){console.error("[kobe RemoteOrchestrator] task listener threw:",G)}}),Y})}async createTask(f){let{modelEffort:J,...Y}=f,z=await this.client.request("task.create",{...Y,effort:J});return bX(z.task)}async ensureMainTask(f){let J=await this.client.request("task.ensureMain",{repo:f});return bX(J.task)}async ensureWorktree(f){return(await this.client.request("task.ensureWorktree",{taskId:String(f)})).worktreePath}async setTitle(f,J){await this.client.request("task.rename",{taskId:String(f),title:J})}async setBranch(f,J){await this.client.request("task.setBranch",{taskId:String(f),branch:J})}async setVendor(f,J){await this.client.request("task.setVendor",{taskId:String(f),vendor:J})}async setPinned(f,J){await this.client.request("task.pin",{taskId:String(f),pinned:J})}async moveTask(f,J){await this.client.request("task.move",{taskId:String(f),direction:J<0?"up":"down"})}async setArchived(f,J){await this.client.request("task.archive",{taskId:String(f),archived:J})}async setStatus(f,J){await this.client.request("task.status",{taskId:String(f),status:J})}async deleteTask(f,J){await this.client.request("task.delete",{taskId:String(f),force:J?.force})}async discoverAdoptableWorktrees(f){return(await this.client.request("worktree.discoverAdoptable",{repo:f})).worktrees}async adoptWorktree(f){let J=await this.client.request("worktree.adopt",f);return bX(J.task)}async setActiveTask(f){await this.client.request("task.setActive",{taskId:f===null?null:String(f)})}handleEvent(f,J){if(f==="task.snapshot"){let Y=J?.tasks;if(Array.isArray(Y))this.setTasks(Y.map(bX)),this.pruneEngineState(Y),this.pruneTaskJobs(Y);return}if(f==="active-task"){let Y=J?.taskId;this.setActiveTaskSig(typeof Y==="string"?Y:null);return}if(f==="update"){let Y=J?.info;this.setUpdateSig(Y??null);return}if(f==="engine-state"){let Y=J;if(typeof Y?.taskId!=="string"||typeof Y.state!=="string")return;let z=new Map(this.engineStateAcc());if(Y.state==="idle")z.delete(Y.taskId);else z.set(Y.taskId,{state:Y.state,detail:Y.detail,at:typeof Y.at==="number"?Y.at:0});this.setEngineStateSig(z);return}if(f==="task.jobs"){let Y=J;if(typeof Y?.taskId!=="string"||Y.kind!=="ensureWorktree")return;let z=this.taskJobsAcc();if(Y.phase==="running"){let G=new Map(z);G.set(Y.taskId,{kind:Y.kind}),this.setTaskJobsSig(G);return}if((Y.phase==="done"||Y.phase==="error")&&z.has(Y.taskId)){let G=new Map(z);G.delete(Y.taskId),this.setTaskJobsSig(G)}return}if(f==="worktree.changes"){let Y=NN(J);if(!Y)return;let z=this.worktreeChangesAcc();if(z&&yN(z,Y))return;this.setWorktreeChangesSig(Y);return}if(f==="ui-prefs"){let Y=J;if(typeof Y?.theme!=="string")return;this.setUiPrefsSig({theme:Y.theme,transparentBackground:Y.transparentBackground===!0,focusAccent:typeof Y.focusAccent==="string"?Y.focusAccent:null,locale:typeof Y.locale==="string"?Y.locale:"",sortMode:Y.sortMode==="recent"?"recent":"default",keysCollapsed:Y.keysCollapsed===!0,projectFilter:typeof Y.projectFilter==="string"&&Y.projectFilter.length>0?Y.projectFilter:null});return}if(f==="keybindings"){let Y=J;if(typeof Y?.rev!=="number")return;this.setKeybindingsRevSig(Y.rev);return}}pruneEngineState(f){let J=this.engineStateAcc();if(J.size===0)return;let Y=new Set(f.map((G)=>G.id)),z=null;for(let G of J.keys()){if(Y.has(G))continue;if(!z)z=new Map(J);z.delete(G)}if(z)this.setEngineStateSig(z)}pruneTaskJobs(f){let J=this.taskJobsAcc();if(J.size===0)return;let Y=new Set(f.map((G)=>G.id)),z=null;for(let G of J.keys()){if(Y.has(G))continue;if(!z)z=new Map(J);z.delete(G)}if(z)this.setTaskJobsSig(z)}}function bX(f){return{id:PG(f.id),title:f.title,repo:f.repo,branch:f.branch,worktreePath:f.worktreePath,kind:f.kind,status:f.status,archived:f.archived,pinned:f.pinned,vendor:f.vendor,prStatus:f.prStatus,modelEffort:f.modelEffort,createdAt:f.createdAt,updatedAt:f.updatedAt}}var PY=k(()=>{eY();y1();sY();Wf();VG();S1();U1()});function Q6(f){let J=f[JJ];if(!J){if(Object.defineProperty(f,JJ,{value:J=new Proxy(f,IN)}),!Array.isArray(f)){let Y=Object.keys(f),z=Object.getOwnPropertyDescriptors(f),G=Object.getPrototypeOf(f),X=G!==null&&f!==null&&typeof f==="object"&&!Array.isArray(f)&&G!==Object.prototype;if(X){let q=Object.getOwnPropertyDescriptors(G);Y.push(...Object.keys(q)),Object.assign(z,q)}for(let q=0,Q=Y.length;q<Q;q++){let H=Y[q];if(X&&H==="constructor")continue;if(z[H].get)Object.defineProperty(f,H,{configurable:!0,enumerable:z[H].enumerable,get:z[H].get.bind(J)})}}}return J}function BQ(f){let J;return f!=null&&typeof f==="object"&&(f[JJ]||!(J=Object.getPrototypeOf(f))||J===Object.prototype||Array.isArray(f))}function IX(f,J=new Set){let Y,z,G,X;if(Y=f!=null&&f[aj])return Y;if(!BQ(f)||J.has(f))return f;if(Array.isArray(f)){if(Object.isFrozen(f))f=f.slice(0);else J.add(f);for(let q=0,Q=f.length;q<Q;q++)if(G=f[q],(z=IX(G,J))!==G)f[q]=z}else{if(Object.isFrozen(f))f=Object.assign({},f);else J.add(f);let q=Object.keys(f),Q=Object.getOwnPropertyDescriptors(f);for(let H=0,B=q.length;H<B;H++){if(X=q[H],Q[X].get)continue;if(G=f[X],(z=IX(G,J))!==G)f[X]=z}}return f}function jQ(f,J){let Y=f[J];if(!Y)Object.defineProperty(f,J,{value:Y=Object.create(null)});return Y}function TX(f,J,Y){if(f[J])return f[J];let[z,G]=r(Y,{equals:!1,internal:!0});return z.$=G,f[J]=z}function bN(f,J){let Y=Reflect.getOwnPropertyDescriptor(f,J);if(!Y||Y.get||!Y.configurable||J===JJ||J===RG)return Y;return delete Y.value,delete Y.writable,Y.get=()=>f[JJ][J],Y}function H6(f){UZ()&&TX(jQ(f,RG),q6)()}function SN(f){return H6(f),Reflect.ownKeys(f)}function WQ(f,J,Y,z=!1){if(J==="__proto__"){console.warn('Refusing to set "__proto__" on a store.');return}if(!z&&f[J]===Y)return;let G=f[J],X=f.length;if(Z6.onStoreNodeUpdate&&Z6.onStoreNodeUpdate(f,J,Y,G),Y===void 0){if(delete f[J],f[JY]&&f[JY][J]&&G!==void 0)f[JY][J].$()}else if(f[J]=Y,f[JY]&&f[JY][J]&&G===void 0)f[JY][J].$();let q=jQ(f,RG),Q;if(Q=TX(q,J,G))Q.$(()=>Y);if(Array.isArray(f)&&f.length!==X){for(let H=f.length;H<X;H++)(Q=q[H])&&Q.$();(Q=TX(q,"length",X))&&Q.$(f.length)}(Q=q[q6])&&Q.$()}function B6(f,J){let Y=Object.keys(J);for(let z=0;z<Y.length;z+=1){let G=Y[z];if(j6(G))continue;WQ(f,G,J[G])}}function j6(f){return f==="__proto__"||f==="constructor"||f==="prototype"}function TN(f,J){if(typeof J==="function")J=J(f);if(J=IX(J),Array.isArray(J)){if(f===J)return;let Y=0,z=J.length;for(;Y<z;Y++){let G=J[Y];if(f[Y]!==G)WQ(f,Y,G)}WQ(f,"length",z)}else B6(f,J)}function SX(f,J,Y=[]){let z,G=f;if(J.length>1){z=J.shift();let q=typeof z,Q=Array.isArray(f);if(q==="string"&&(z==="__proto__"||J.length>1&&j6(z))){console.warn(`Refusing to traverse unsafe key "${z}" on a store.`);return}if(Array.isArray(z)){for(let H=0;H<z.length;H++)SX(f,[z[H]].concat(J),Y);return}else if(Q&&q==="function"){for(let H=0;H<f.length;H++)if(z(f[H],H))SX(f,[H].concat(J),Y);return}else if(Q&&q==="object"){let{from:H=0,to:B=f.length-1,by:V=1}=z;for(let j=H;j<=B;j+=V)SX(f,[j].concat(J),Y);return}else if(J.length>1){SX(f[z],J,[z].concat(Y));return}G=f[z],Y=[z].concat(Y)}let X=J[0];if(typeof X==="function"){if(X=X(G,Y),X===G)return}if(z===void 0&&X==null)return;if(X=IX(X),z===void 0||BQ(G)&&BQ(X)&&!Array.isArray(X))B6(G,X);else WQ(f,z,X)}function uJ(...[f,J]){let Y=IX(f||{}),z=Array.isArray(Y);if(typeof Y!=="object"&&typeof Y!=="function")throw Error(`Unexpected type ${typeof Y} received when initializing 'createStore'. Expected an object.`);let G=Q6(Y);BW.registerGraph({value:Y,name:J&&J.name});function X(...q){KZ(()=>{z&&q.length===1?TN(Y,q[0]):SX(Y,q)})}return[G,X]}var aj,RG,JY,q6,Z6,IN,Wc;var CG=k(()=>{Wf();aj=Symbol("store-raw"),RG=Symbol("store-node"),JY=Symbol("store-has"),q6=Symbol("store-self"),Z6={onStoreNodeUpdate:null};IN={get(f,J,Y){if(J===aj)return f;if(J===JJ)return Y;if(J===jZ)return H6(f),Y;let z=jQ(f,RG),G=z[J],X=G?G():f[J];if(J===RG||J===JY||J==="__proto__")return X;if(!G){let q=Object.getOwnPropertyDescriptor(f,J);if(UZ()&&(typeof X!=="function"||f.hasOwnProperty(J))&&!(q&&q.get))X=TX(z,J,X)()}return BQ(X)?Q6(X):X},has(f,J){if(J===aj||J===JJ||J===jZ||J===RG||J===JY||J==="__proto__")return!0;return UZ()&&TX(jQ(f,JY),J)(),J in f},set(){return console.warn("Cannot mutate a Store directly"),!0},deleteProperty(){return console.warn("Cannot mutate a Store directly"),!0},ownKeys:SN,getOwnPropertyDescriptor:bN};Wc=Symbol("store-root")});function VQ(f){let J=gJ();return{provider:(Y)=>{let z=f.init(Y);return b(X0,{get when(){return z.ready===void 0||z.ready===!0},get children(){return b(J.Provider,{value:z,get children(){return Y.children}})}})},use(){let Y=u1(J);if(!Y)throw Error(`${f.name} context must be used within a context provider`);return Y}}}var $j=k(()=>{h();h();Wf()});import{RGBA as kz}from"@opentui/core";function EN(){return Object.keys(z1.themes)}function uX(f){return Boolean(z1.themes[f])}function pj(f,J){if(!f)return!1;if(!J||typeof J!=="object"||!J.theme)return!1;return Nz("themes",{...z1.themes,[f]:J}),!0}function rj(f,J="dark"){let Y=f.defs??{};function z(H,B=[]){if(typeof H==="string"){if(H==="transparent"||H==="none")return kz.fromInts(0,0,0,0);if(H.startsWith("#"))return kz.fromHex(H);if(B.includes(H))return kz.fromInts(0,0,0);let V=Y[H]??f.theme[H];if(V===void 0)return kz.fromInts(0,0,0);return z(V,[...B,H])}return z(H[J],B)}let G={};for(let[H,B]of Object.entries(f.theme))G[H]=z(B);let X=G.text??kz.fromHex("#ffffff"),q=G.background??kz.fromHex("#000000");return{...{primary:G.primary??X,secondary:G.secondary??X,accent:G.accent??G.primary??X,error:G.error??X,warning:G.warning??X,success:G.success??X,info:G.info??X,text:X,textMuted:G.textMuted??X,background:q,backgroundPanel:G.backgroundPanel??q,backgroundElement:G.backgroundElement??q,backgroundMenu:G.backgroundMenu??G.backgroundElement??q,backgroundDialog:G.backgroundDialog??G.backgroundPanel??q,border:G.border??X,borderActive:G.borderActive??G.border??X,borderSubtle:G.borderSubtle??G.border??X,diffAdded:G.diffAdded??G.success??X,diffRemoved:G.diffRemoved??G.error??X,diffContext:G.diffContext??G.textMuted??X,diffHunkHeader:G.diffHunkHeader??G.textMuted??X,diffAddedBg:G.diffAddedBg??q,diffRemovedBg:G.diffRemovedBg??q,selectedListItemText:G.selectedListItemText??q},...G}}var uN,yz,z1,Nz,i0,W6;var xf=k(()=>{h();Wf();CG();$j();Qq();Hq();Bq();jq();Wq();Vq();Kq();uN={claude:sz,conductor:tz,nord:fG,opencode:JG,dracula:ez,tokyonight:zG,"osaka-jade":YG},yz=["primary","success","info"],[z1,Nz]=uJ({themes:{...uN},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:i0,provider:W6}=VQ({name:"Theme",init:(f)=>{if(f.mode)Nz("mode",f.mode);if(f.theme&&uX(f.theme))Nz("active",f.theme);let J=Y1(),Y=U0(()=>{let G=z1.themes[z1.active];if(G)return rj(G,z1.mode);let X=z1.themes.claude??z1.themes.opencode??Object.values(z1.themes)[0];if(!X)return rj({theme:{background:"#000000",text:"#ffffff"}},z1.mode);return rj(X,z1.mode)}),z=U0(()=>{let G=Y(),X=G[z1.focusAccent]??G.primary,q={...G,focusAccent:X};if(!z1.transparentBackground)return q;let Q=kz.fromInts(0,0,0,0);return{...q,background:Q,backgroundPanel:Q}});return zf(()=>{J?.setBackgroundColor(z().background)}),{theme:new Proxy({},{get(G,X){let q=z();return q[X]??q.text}}),get selected(){return z1.active},get transparentBackground(){return z1.transparentBackground},get focusAccent(){return z1.focusAccent},mode(){return z1.mode},set(G){if(!uX(G))return!1;return Nz("active",G),!0},setMode(G){Nz("mode",G)},setTransparentBackground(G){Nz("transparentBackground",G)},setFocusAccent(G){Nz("focusAccent",G)},all(){return EN()},has(G){return uX(G)}}}}))});var V6,K6;var U6=k(()=>{V6={cancel:"Cancel",confirm:"Confirm",rename:{defaultTitle:"Rename task",defaultFieldLabel:"title",footerHint:"enter {submitLabel} \xB7 esc cancel",defaultSubmitLabel:"rename"}},K6={cancel:"\u53D6\u6D88",confirm:"\u786E\u8BA4",rename:{defaultTitle:"\u91CD\u547D\u540D\u4EFB\u52A1",defaultFieldLabel:"\u540D\u79F0",footerHint:"enter {submitLabel} \xB7 esc \u53D6\u6D88",defaultSubmitLabel:"\u91CD\u547D\u540D"}}});var D6,L6;var M6=k(()=>{D6={tabs:{all:"All",changes:"Changes"},actions:{zen:"zen",createPR:"create PR"},legend:{changes:"M modified \xB7 A added \xB7 D deleted \xB7 ? untracked"},empty:{noTask:"(no task \u2014 press n to create)",noFiles:"(empty worktree)",noChanges:"(no changes \u2014 clean worktree)"},error:{retryHint:"press r to retry",notGitRepo:"not a git repository",pathMissing:"worktree path is missing",permissionDenied:"permission denied",gitNotInstalled:"git is not installed",gitFailed:"git command failed"},footer:{openHint:"\u21B5 open"}},L6={tabs:{all:"\u5168\u90E8",changes:"\u6539\u52A8"},actions:{zen:"\u4E13\u6CE8\u6A21\u5F0F",createPR:"\u521B\u5EFA PR"},legend:{changes:"M \u5DF2\u4FEE\u6539 \xB7 A \u5DF2\u6DFB\u52A0 \xB7 D \u5DF2\u5220\u9664 \xB7 ? \u672A\u8DDF\u8E2A"},empty:{noTask:"\uFF08\u6682\u65E0\u4EFB\u52A1 \u2014 \u6309 n \u521B\u5EFA\uFF09",noFiles:"\uFF08worktree \u4E3A\u7A7A\uFF09",noChanges:"\uFF08\u65E0\u6539\u52A8 \u2014 worktree \u5E72\u51C0\uFF09"},error:{retryHint:"\u6309 r \u91CD\u8BD5",notGitRepo:"\u4E0D\u662F git \u4ED3\u5E93",pathMissing:"worktree \u8DEF\u5F84\u4E0D\u5B58\u5728",permissionDenied:"\u6743\u9650\u4E0D\u8DB3",gitNotInstalled:"\u672A\u5B89\u88C5 git",gitFailed:"git \u547D\u4EE4\u5931\u8D25"},footer:{openHint:"\u21B5 \u6253\u5F00"}}});var F6,O6;var A6=k(()=>{F6={title:"kobe \u2014 keybindings",esc:"esc"},O6={title:"kobe \u2014 \u5FEB\u6377\u952E",esc:"esc"}});var g6,R6;var C6=k(()=>{g6={category:{Global:"Global",Sidebar:"Sidebar",Workspace:"Workspace",Navigation:"Navigation","Tasks pane":"Tasks pane","Workspace (tmux)":"Workspace (tmux)",Files:"Files",Terminal:"Terminal",Dialog:"Dialog"},desc:{"help.open":"Show keybindings help","task.new":"New task","task.openEditor":"Open active task worktree in editor","settings.open":"Open settings","settings.open.sidebar":"Open settings","app.quit":"Quit (with confirm)","focus.sidebar":"Back to sidebar (tasks)","focus.numeric":"Jump to pane (h=sidebar, j=workspace, k=files, l=terminal)","chat.interrupt":"Interrupt current turn (esc while streaming)","sidebar.nav":"Move cursor up/down","sidebar.select":"Open the selected task","sidebar.goto":"Top / bottom of list (gg or shift-G)","sidebar.rename":"Rename task","sidebar.archive":"Toggle archive","sidebar.localMerge":"Local merge task into parent repo (Shift+M)","sidebar.pin":"Pin / unpin task at top (Shift+P)","sidebar.view":"Switch view (Working session \u2194 Archives)","sidebar.sort":"Switch task sort (default \u2194 recent)","sidebar.projectFilter":"Cycle task project filter","sidebar.delete":"Delete task (with confirm)","sidebar.search.enter":"Search tasks (fuzzy filter)","sidebar.search.nav":"Move highlight in search results","sidebar.search.submit":"Select search match and exit search","sidebar.search.cancel":"Cancel search (restore prior selection)","tasks.openWorktree":"Open selected task's worktree in your editor","tasks.renameBranch":"Rename the selected task's git branch","tasks.cycleEngine":"Cycle engine vendor (claude \u2194 codex \u2194 \u2026) \u2014 applies on reopen","tasks.update":"Open the update page (when a new version is available)","tasks.focusEngine":"Focus the engine pane of the current window","tasks.toggleKeys":"Collapse / expand the keys legend","tmux.quickTask":"Quick new task (tmux prefix, then f)","tmux.engineTab":"Open the engine in a new tab (tmux prefix, then t)","tmux.layout.workspaceSplit":"Add a temporary workspace split (tmux prefix, then s)","tmux.layout.workspaceClose":"Close the focused temporary workspace split (tmux prefix, then x)","tmux.layout.workspaceReset":"Close all temporary workspace splits (tmux prefix, then r)","tmux.layout.tasksToggle":"Hide / restore the Tasks pane (tmux prefix, then a)","tmux.layout.opsToggle":"Toggle the file/Ops pane (tmux prefix, then o)","tmux.layout.terminalToggle":"Hide / restore the terminal pane (tmux prefix, then z)","tmux.layout.zenToggle":"Zen mode \u2014 collapse to the engine pane (tmux prefix, then space)","chat.send":"Send message (composer)","chat.newline":"Newline in composer","chat.cycle-mode":"Cycle permission mode (composer)","chat.steer":"Steer (interrupt + send) \u2014 mid-stream only","chat.tab.new":"New chat tab","chat.fork.new":"Quick-fork: create child task seeded with current repo/branch/model","chat.session.resume":"Resume a prior session in this task's worktree","chat.tab.close":"Close chat tab","chat.tab.rename":"Rename active chat tab","chat.tab.cycle-next":"Next chat tab","chat.tab.cycle-prev":"Previous chat tab","chat.question.nav":"Move highlight in question picker","chat.question.toggle":"Toggle highlighted option in question picker","chat.question.submit":"Advance / submit question picker","chat.question.pick-number":"Pick option by number in question picker","files.nav":"Move cursor up/down","files.hierarchy":"Collapse / expand tree level","files.open":"Open file in nvim (diff vs HEAD when changed)","files.tab":"Switch tab (cycle All / Changes)","files.refresh":"Refresh","files.openExternal":"Open file in system default app (audio / video / pdf preview)","files.mention":"Inject @<path> mention into the engine pane","files.createPR":"Create PR from the current task","terminal.scroll-up":"Scroll scrollback up","terminal.scroll-down":"Scroll scrollback down","terminal.reset":"Reset terminal \u2014 kill the current shell and respawn","dialog.cancel":"Close the top dialog (esc)","dialog.newtask.tab.cycle":"Switch New Task tab (Existing / New Repo)"}},R6={category:{Global:"\u5168\u5C40",Sidebar:"\u4FA7\u8FB9\u680F",Workspace:"\u5DE5\u4F5C\u533A",Navigation:"\u5BFC\u822A","Tasks pane":"\u4EFB\u52A1\u9762\u677F","Workspace (tmux)":"\u5DE5\u4F5C\u533A\uFF08tmux\uFF09",Files:"\u6587\u4EF6",Terminal:"\u7EC8\u7AEF",Dialog:"\u5BF9\u8BDD\u6846"},desc:{"help.open":"\u663E\u793A\u5FEB\u6377\u952E\u5E2E\u52A9","task.new":"\u65B0\u5EFA\u4EFB\u52A1","task.openEditor":"\u5728\u7F16\u8F91\u5668\u4E2D\u6253\u5F00\u5F53\u524D\u4EFB\u52A1\u7684 worktree","settings.open":"\u6253\u5F00\u8BBE\u7F6E","settings.open.sidebar":"\u6253\u5F00\u8BBE\u7F6E","app.quit":"\u9000\u51FA\uFF08\u9700\u786E\u8BA4\uFF09","focus.sidebar":"\u8FD4\u56DE\u4FA7\u8FB9\u680F\uFF08\u4EFB\u52A1\u5217\u8868\uFF09","focus.numeric":"\u8DF3\u8F6C\u5230\u9762\u677F\uFF08h=\u4FA7\u8FB9\u680F\uFF0Cj=\u5DE5\u4F5C\u533A\uFF0Ck=\u6587\u4EF6\uFF0Cl=\u7EC8\u7AEF\uFF09","chat.interrupt":"\u4E2D\u65AD\u5F53\u524D\u8F6E\u6B21\uFF08\u6D41\u5F0F\u8F93\u51FA\u4E2D\u6309 esc\uFF09","sidebar.nav":"\u4E0A\u4E0B\u79FB\u52A8\u5149\u6807","sidebar.select":"\u6253\u5F00\u9009\u4E2D\u7684\u4EFB\u52A1","sidebar.goto":"\u8DF3\u5230\u5217\u8868\u9876\u90E8 / \u5E95\u90E8\uFF08gg \u6216 shift-G\uFF09","sidebar.rename":"\u91CD\u547D\u540D\u4EFB\u52A1","sidebar.archive":"\u5207\u6362\u5F52\u6863\u72B6\u6001","sidebar.localMerge":"\u5C06\u4EFB\u52A1\u672C\u5730\u5408\u5E76\u5230\u7236\u4ED3\u5E93\uFF08Shift+M\uFF09","sidebar.pin":"\u7F6E\u9876 / \u53D6\u6D88\u7F6E\u9876\u4EFB\u52A1\uFF08Shift+P\uFF09","sidebar.view":"\u5207\u6362\u89C6\u56FE\uFF08\u5DE5\u4F5C\u4F1A\u8BDD \u2194 \u5F52\u6863\uFF09","sidebar.sort":"\u5207\u6362\u4EFB\u52A1\u6392\u5E8F\u65B9\u5F0F\uFF08\u9ED8\u8BA4 \u2194 \u6700\u8FD1\uFF09","sidebar.projectFilter":"\u5FAA\u73AF\u5207\u6362\u4EFB\u52A1\u9879\u76EE\u7B5B\u9009","sidebar.delete":"\u5220\u9664\u4EFB\u52A1\uFF08\u9700\u786E\u8BA4\uFF09","sidebar.search.enter":"\u641C\u7D22\u4EFB\u52A1\uFF08\u6A21\u7CCA\u8FC7\u6EE4\uFF09","sidebar.search.nav":"\u5728\u641C\u7D22\u7ED3\u679C\u4E2D\u79FB\u52A8\u9AD8\u4EAE","sidebar.search.submit":"\u9009\u4E2D\u641C\u7D22\u5339\u914D\u9879\u5E76\u9000\u51FA\u641C\u7D22","sidebar.search.cancel":"\u53D6\u6D88\u641C\u7D22\uFF08\u6062\u590D\u4E4B\u524D\u7684\u9009\u4E2D\u9879\uFF09","tasks.openWorktree":"\u5728\u7F16\u8F91\u5668\u4E2D\u6253\u5F00\u9009\u4E2D\u4EFB\u52A1\u7684 worktree","tasks.renameBranch":"\u91CD\u547D\u540D\u9009\u4E2D\u4EFB\u52A1\u7684 git \u5206\u652F","tasks.cycleEngine":"\u5FAA\u73AF\u5207\u6362\u5F15\u64CE\u5382\u5546\uFF08claude \u2194 codex \u2194 \u2026\uFF09\u2014\u2014\u91CD\u65B0\u6253\u5F00\u540E\u751F\u6548","tasks.update":"\u6253\u5F00\u66F4\u65B0\u9875\u9762\uFF08\u6709\u65B0\u7248\u672C\u65F6\uFF09","tasks.focusEngine":"\u805A\u7126\u5F53\u524D\u7A97\u53E3\u7684\u5F15\u64CE\u9762\u677F","tasks.toggleKeys":"\u6298\u53E0 / \u5C55\u5F00\u5FEB\u6377\u952E\u8BF4\u660E","tmux.quickTask":"\u5FEB\u901F\u65B0\u5EFA\u4EFB\u52A1\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 f\uFF09","tmux.engineTab":"\u5728\u65B0\u6807\u7B7E\u9875\u4E2D\u6253\u5F00\u5F15\u64CE\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 t\uFF09","tmux.layout.workspaceSplit":"\u6DFB\u52A0\u4E34\u65F6\u5DE5\u4F5C\u533A\u5206\u5C4F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 s\uFF09","tmux.layout.workspaceClose":"\u5173\u95ED\u5F53\u524D\u805A\u7126\u7684\u4E34\u65F6\u5DE5\u4F5C\u533A\u5206\u5C4F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 x\uFF09","tmux.layout.workspaceReset":"\u5173\u95ED\u6240\u6709\u4E34\u65F6\u5DE5\u4F5C\u533A\u5206\u5C4F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 r\uFF09","tmux.layout.tasksToggle":"\u9690\u85CF / \u6062\u590D\u4EFB\u52A1\u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 a\uFF09","tmux.layout.opsToggle":"\u5207\u6362\u6587\u4EF6/Ops \u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 o\uFF09","tmux.layout.terminalToggle":"\u9690\u85CF / \u6062\u590D\u7EC8\u7AEF\u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 z\uFF09","tmux.layout.zenToggle":"\u4E13\u6CE8\u6A21\u5F0F\u2014\u2014\u6298\u53E0\u5230\u5F15\u64CE\u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 space\uFF09","chat.send":"\u53D1\u9001\u6D88\u606F\uFF08\u8F93\u5165\u6846\uFF09","chat.newline":"\u5728\u8F93\u5165\u6846\u4E2D\u6362\u884C","chat.cycle-mode":"\u5FAA\u73AF\u5207\u6362\u6743\u9650\u6A21\u5F0F\uFF08\u8F93\u5165\u6846\uFF09","chat.steer":"\u5F15\u5BFC\uFF08\u4E2D\u65AD\u5E76\u53D1\u9001\uFF09\u2014\u2014\u4EC5\u9650\u6D41\u5F0F\u8F93\u51FA\u4E2D","chat.tab.new":"\u65B0\u5EFA\u804A\u5929\u6807\u7B7E\u9875","chat.fork.new":"\u5FEB\u901F\u6D3E\u751F\uFF1A\u4EE5\u5F53\u524D\u4ED3\u5E93/\u5206\u652F/\u6A21\u578B\u521B\u5EFA\u5B50\u4EFB\u52A1","chat.session.resume":"\u5728\u6B64\u4EFB\u52A1\u7684 worktree \u4E2D\u6062\u590D\u4E4B\u524D\u7684\u4F1A\u8BDD","chat.tab.close":"\u5173\u95ED\u804A\u5929\u6807\u7B7E\u9875","chat.tab.rename":"\u91CD\u547D\u540D\u5F53\u524D\u804A\u5929\u6807\u7B7E\u9875","chat.tab.cycle-next":"\u4E0B\u4E00\u4E2A\u804A\u5929\u6807\u7B7E\u9875","chat.tab.cycle-prev":"\u4E0A\u4E00\u4E2A\u804A\u5929\u6807\u7B7E\u9875","chat.question.nav":"\u5728\u63D0\u95EE\u9009\u62E9\u5668\u4E2D\u79FB\u52A8\u9AD8\u4EAE","chat.question.toggle":"\u5728\u63D0\u95EE\u9009\u62E9\u5668\u4E2D\u5207\u6362\u9AD8\u4EAE\u9009\u9879","chat.question.submit":"\u63A8\u8FDB / \u63D0\u4EA4\u63D0\u95EE\u9009\u62E9\u5668","chat.question.pick-number":"\u5728\u63D0\u95EE\u9009\u62E9\u5668\u4E2D\u6309\u6570\u5B57\u9009\u62E9\u9009\u9879","files.nav":"\u4E0A\u4E0B\u79FB\u52A8\u5149\u6807","files.hierarchy":"\u6298\u53E0 / \u5C55\u5F00\u6811\u5C42\u7EA7","files.open":"\u5728 nvim \u4E2D\u6253\u5F00\u6587\u4EF6\uFF08\u6709\u53D8\u66F4\u65F6\u663E\u793A\u4E0E HEAD \u7684\u5DEE\u5F02\uFF09","files.tab":"\u5207\u6362\u6807\u7B7E\u9875\uFF08\u5FAA\u73AF \u5168\u90E8 / \u53D8\u66F4\uFF09","files.refresh":"\u5237\u65B0","files.openExternal":"\u5728\u7CFB\u7EDF\u9ED8\u8BA4\u5E94\u7528\u4E2D\u6253\u5F00\u6587\u4EF6\uFF08\u97F3\u9891 / \u89C6\u9891 / pdf \u9884\u89C8\uFF09","files.mention":"\u5C06 @<path> \u63D0\u53CA\u6CE8\u5165\u5F15\u64CE\u9762\u677F","files.createPR":"\u4ECE\u5F53\u524D\u4EFB\u52A1\u521B\u5EFA PR","terminal.scroll-up":"\u5411\u4E0A\u6EDA\u52A8\u56DE\u6EDA","terminal.scroll-down":"\u5411\u4E0B\u6EDA\u52A8\u56DE\u6EDA","terminal.reset":"\u91CD\u7F6E\u7EC8\u7AEF\u2014\u2014\u5173\u95ED\u5F53\u524D shell \u5E76\u91CD\u65B0\u542F\u52A8","dialog.cancel":"\u5173\u95ED\u9876\u5C42\u5BF9\u8BDD\u6846\uFF08esc\uFF09","dialog.newtask.tab.cycle":"\u5207\u6362\u65B0\u5EFA\u4EFB\u52A1\u6807\u7B7E\u9875\uFF08\u73B0\u6709\u4ED3\u5E93 / \u65B0\u4ED3\u5E93\uFF09"}}});var k6,N6;var y6=k(()=>{k6={title:"New task",tabs:{existing:"For Existing",clone:"For New Repo",adopt:"Adopt Worktree"},field:{engine:"engine",repo:"repo",fromBranch:"from branch",gitUrl:"git url",parentDir:"parent dir",folderName:"folder name",baseBranch:"base branch",adoptFilter:"filter (path glob)"},placeholder:{folderName:"auto from url",adoptFilter:"* \u2014 type e.g. feature-* to narrow"},hint:{engineCycle:"ctrl+e",remembered:"(remembered \u2014 next clone defaults to this dir)",currentDir:"(current dir)",noBranchesFound:"(no local branches found \u2014 typed text will be used as ref)",noMatchBranch:"(no match \u2014 typed text will be used as ref)",scanningWorktrees:"scanning worktrees\u2026",legend:"\u2191\u2193 pick \xB7 tab next field \xB7 \u2190\u2192 switch \xB7 enter done \xB7 esc cancel"},picker:{moreAbove:"\u2191 {count} more",moreBelow:"\u2193 {count} more"},adopt:{repoLine:"repo: {path}",repoNone:"(none)",noUnlinked:"no unlinked worktrees \u2014 every git worktree here is already a task",noMatch:"no worktrees match the filter",hintSelected:"{count} selected \xB7 enter toggles \xB7 ctrl+a all \xB7 Create imports",hintDefault:"enter toggles \xB7 ctrl+a all \xB7 Create imports the highlighted row"},clone:{progressFallback:"Cloning\u2026",progressInto:"Cloning into {target}\u2026"},button:{create:"[ Create ]",createFocused:"\u25B8 [ Create ]",cloning:"[ Cloning\u2026 ]"},error:{gitUrlRequired:"git URL is required",gitUrlInvalid:"does not look like a git URL: {url}",folderRequired:"folder name is required",folderHasSeparator:"folder name cannot contain path separators",parentRequired:"parent directory is required",parentNotFound:"parent directory does not exist: {path}",parentNotDir:"not a directory: {path}",targetExists:"target already exists: {path}",cloneFailed:"git clone failed: {error}",noAdoptable:"no adoptable worktrees to import"}},N6={title:"\u65B0\u5EFA\u4EFB\u52A1",tabs:{existing:"\u5DF2\u6709\u4ED3\u5E93",clone:"\u514B\u9686\u65B0\u4ED3\u5E93",adopt:"\u63A5\u7BA1 Worktree"},field:{engine:"\u5F15\u64CE",repo:"\u4ED3\u5E93",fromBranch:"\u57FA\u51C6\u5206\u652F",gitUrl:"git \u5730\u5740",parentDir:"\u7236\u76EE\u5F55",folderName:"\u6587\u4EF6\u5939\u540D",baseBranch:"\u57FA\u51C6\u5206\u652F",adoptFilter:"\u8FC7\u6EE4\uFF08\u8DEF\u5F84 glob\uFF09"},placeholder:{folderName:"\u81EA\u52A8\u4ECE\u5730\u5740\u63A8\u5BFC",adoptFilter:"* \u2014 \u8F93\u5165\u5982 feature-* \u6765\u7F29\u5C0F\u8303\u56F4"},hint:{engineCycle:"ctrl+e",remembered:"\uFF08\u5DF2\u8BB0\u4F4F \u2014 \u4E0B\u6B21\u514B\u9686\u9ED8\u8BA4\u4F7F\u7528\u6B64\u76EE\u5F55\uFF09",currentDir:"\uFF08\u5F53\u524D\u76EE\u5F55\uFF09",noBranchesFound:"\uFF08\u672A\u627E\u5230\u672C\u5730\u5206\u652F \u2014 \u5C06\u76F4\u63A5\u4F7F\u7528\u8F93\u5165\u6587\u672C\u4F5C\u4E3A ref\uFF09",noMatchBranch:"\uFF08\u65E0\u5339\u914D \u2014 \u5C06\u76F4\u63A5\u4F7F\u7528\u8F93\u5165\u6587\u672C\u4F5C\u4E3A ref\uFF09",scanningWorktrees:"\u6B63\u5728\u626B\u63CF worktree\u2026",legend:"\u2191\u2193 \u9009\u62E9 \xB7 tab \u4E0B\u4E00\u5B57\u6BB5 \xB7 \u2190\u2192 \u5207\u6362 \xB7 enter \u786E\u8BA4 \xB7 esc \u53D6\u6D88"},picker:{moreAbove:"\u2191 \u8FD8\u6709 {count} \u9879",moreBelow:"\u2193 \u8FD8\u6709 {count} \u9879"},adopt:{repoLine:"\u4ED3\u5E93\uFF1A{path}",repoNone:"\uFF08\u65E0\uFF09",noUnlinked:"\u6CA1\u6709\u672A\u5173\u8054\u7684 worktree \u2014 \u6B64\u4ED3\u5E93\u6240\u6709 git worktree \u5747\u5DF2\u662F\u4EFB\u52A1",noMatch:"\u6CA1\u6709 worktree \u5339\u914D\u6B64\u8FC7\u6EE4\u6761\u4EF6",hintSelected:"\u5DF2\u9009 {count} \u9879 \xB7 enter \u5207\u6362\u9009\u4E2D \xB7 ctrl+a \u5168\u9009 \xB7 \u521B\u5EFA \u5BFC\u5165",hintDefault:"enter \u5207\u6362\u9009\u4E2D \xB7 ctrl+a \u5168\u9009 \xB7 \u521B\u5EFA \u5C06\u5BFC\u5165\u9AD8\u4EAE\u884C"},clone:{progressFallback:"\u514B\u9686\u4E2D\u2026",progressInto:"\u6B63\u5728\u514B\u9686\u5230 {target}\u2026"},button:{create:"[ \u521B\u5EFA ]",createFocused:"\u25B8 [ \u521B\u5EFA ]",cloning:"[ \u514B\u9686\u4E2D\u2026 ]"},error:{gitUrlRequired:"git \u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A",gitUrlInvalid:"\u4E0D\u50CF\u662F\u6709\u6548\u7684 git \u5730\u5740\uFF1A{url}",folderRequired:"\u6587\u4EF6\u5939\u540D\u4E0D\u80FD\u4E3A\u7A7A",folderHasSeparator:"\u6587\u4EF6\u5939\u540D\u4E0D\u80FD\u5305\u542B\u8DEF\u5F84\u5206\u9694\u7B26",parentRequired:"\u7236\u76EE\u5F55\u4E0D\u80FD\u4E3A\u7A7A",parentNotFound:"\u7236\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A{path}",parentNotDir:"\u4E0D\u662F\u76EE\u5F55\uFF1A{path}",targetExists:"\u76EE\u6807\u8DEF\u5F84\u5DF2\u5B58\u5728\uFF1A{path}",cloneFailed:"git clone \u5931\u8D25\uFF1A{error}",noAdoptable:"\u6CA1\u6709\u53EF\u63A5\u7BA1\u7684 worktree"}}});var b6,S6;var I6=k(()=>{b6={badge:{newActivity:"\u25CF new"},preview:{diffVsHead:"diff vs HEAD",file:"file",closeHint:"\xB7 q to close",loading:"loading\u2026"}},S6={badge:{newActivity:"\u25CF \u65B0\u52A8\u6001"},preview:{diffVsHead:"\u4E0E HEAD \u5BF9\u6BD4",file:"\u6587\u4EF6",closeHint:"\xB7 q \u5173\u95ED",loading:"\u52A0\u8F7D\u4E2D\u2026"}}});var T6,u6;var E6=k(()=>{T6={title:"Quick task \xB7 {repoLabel}",esc:"esc",promptLabel:"prompt",promptPlaceholder:"what should this task do?",engineLabel:"engine",branchLabel:"branch",legend:"enter create \xB7 tab field \xB7 ctrl+e engine \xB7 esc cancel"},u6={title:"\u5FEB\u901F\u4EFB\u52A1 \xB7 {repoLabel}",esc:"esc",promptLabel:"\u63D0\u793A\u8BCD",promptPlaceholder:"\u8FD9\u4E2A\u4EFB\u52A1\u8981\u505A\u4EC0\u4E48\uFF1F",engineLabel:"\u5F15\u64CE",branchLabel:"\u5206\u652F",legend:"enter \u521B\u5EFA \xB7 tab \u5207\u6362\u5B57\u6BB5 \xB7 ctrl+e \u5207\u6362\u5F15\u64CE \xB7 esc \u53D6\u6D88"}});var x6,w6;var h6=k(()=>{x6={title:"Settings",esc:"esc",nav:{default:"j/k pick \xB7 h/l switch level \xB7 enter activate \xB7 esc close",feedback:"tab next field \xB7 enter send \xB7 esc close"},sections:{general:"General",engines:"Engines",accounts:"Accounts",keys:"Keybindings",feedback:"Feedback",dev:"Dev"},general:{theme:"Theme",themeHint:"l to enter list \xB7 j/k to highlight \xB7 enter to apply",language:"Language",languageHint:"Display language for kobe's UI. l to enter list \xB7 j/k to highlight \xB7 enter to apply.",transparent:"Transparent background",transparentHint:"Drops the renderer's bg fill so the host terminal shows through. `t` toggles.",on:"[x] on",off:"[ ] off",focusAccent:"Focus accent",focusAccentHint:"Color of focused pane title, \u258C marker, and split borders.",accentPrimary:"Primary (brand accent)",accentSuccess:"Success (legacy green)",accentInfo:"Info (cool blue)",notifications:"Notifications",notificationsHint:"Fired when a background chat tab finishes or pauses on an approval. Toast = bottom-right popup; Sound = terminal bell + chime. Tab-chip unread dot is always on.",toast:"Toast",sound:"Sound",zen:"Zen mode",zenHint:"The `zen` chip (above the file list) and `prefix`+space collapse the ChatTab to the engine pane \u2014 hiding the file and terminal panes. Keep this on to leave the Tasks rail visible so you can always get back out.",zenKeepTasks:"Keep Tasks pane in zen mode",surface:"Settings page",surfaceHint:"Where Settings and the other full dialogs (new task, rename) open. ChatTab = a dedicated full-window page alongside the engine tabs; Task panel = an overlay inside the left Tasks pane. enter to pick.",surfaceChattab:"ChatTab (separate page)",surfaceTaskpanel:"Task panel (in-pane overlay)",editor:"Editor",editorHint:"What `e` opens a file with in the file tree (enter stays the read-only preview). `auto` (default) follows $VISUAL / $EDITOR, else auto-detects nvim / vim / emacs / nano. enter on the row below cycles auto / vim / nvim / nano / emacs / custom; if the editor isn't installed it falls back to the preview.",editorRow:"editor: < {kind} > (enter to change)",editorCustom:"custom: {cmd}",editorCustomUnset:"(unset \u2014 enter to edit)"},engines:{title:"Launch command",hint:"The command each engine's task pane runs. Override a built-in when your binary isn't on PATH as `claude` / `codex` (e.g. it's `cl`) or to pass default flags, or add your own engine. \u25CF = default engine for new tasks (also set by Ctrl+Shift+T). enter edit command \xB7 r rename \xB7 x reset/remove \xB7 d set default.",defaultTag:" (default)",customTag:" (custom)",addEngine:"+ Add engine"},accounts:{title:"Accounts",hint:"Read-only view of locally-detected engine accounts. Login flows land here later.",checking:"Checking\u2026",notLoggedIn:"\u25CB Not logged in",loggedIn:"\u25CF Logged in: {email}",apiKeyConfigured:"\u25CF API key configured",chatgptLogin:"\u25CF ChatGPT login: {email}",tokenConfigured:"\u25CF Token configured ({source})",copilotDetected:"\u25CF Copilot login detected"},keybindings:{title:"Keybindings",hint:"Rebind chords by editing the YAML below, then restart kobe (or respawn the pane). Press F1 anywhere for the live keymap with every binding id.",configFile:"Config file",notCreated:" (not created yet)",example:"Example",overridesApplied:"Overrides applied",none:"none",warnings:"Warnings"},feedback:{title:"Feedback",hint:"Sends a GitHub Discussion to the kobe repo through `gh`. Requires `gh auth login`; category defaults to Feedback.",titleLabel:"title",titlePlaceholder:"Short summary",descriptionLabel:"description",descriptionPlaceholder:"What happened? (enter sends)",send:"[enter] Send to GitHub Discussions"},dev:{reset:"Reset UI state",resetHint:"Clears ~/.config/kobe/state.json and ~/.kobe/tasks.json, then quits kobe \u2014 relaunch to start fresh. Working session / Archive lists, pane sizes, theme, model picks all reset. Worktrees on disk and Claude Code session history are not touched.",resetButton:"[enter] Reset",restart:"Restart backend",restartHint:"Stops the kobe daemon and quits this kobe window so the next launch spawns a fresh daemon \u2014 picks up daemon / orchestrator / engine edits without a process kill. Other attached kobe windows will lose their connection too.",restartButton:"[enter] Restart",doctorHint:"Daemon wedged or unresponsive? From a shell, run `kobe doctor` to diagnose, or `kobe reset` to stop the daemon + kill sessions (keeps your tasks). Use `kobe reset --hard` only to also wipe the task index + UI state.",experimental:"Experimental",remoteHint:"Remote projects (SSH): register a project whose git worktrees + engine run on another host over SSH, driven from this local kobe. Unfinished \u2014 file/diff panes still degrade for remote. Enables `kobe add --remote`.",remoteOn:"[x] Remote projects (on)",remoteOff:"[ ] Remote projects (off)",autoStatusHint:"Auto status flow: a backlog task moves to in_progress when its engine starts a turn, and new claude sessions get a system-prompt note telling the agent to set in_review itself when the work is done. Never touches done/canceled.",autoStatusOn:"[x] Auto status flow (on)",autoStatusOff:"[ ] Auto status flow (off)",dispatcherHint:"Field-notes dispatcher: task sessions file one-line gotchas (`kobe api note`), the daemon forwards each to the repo's main session, and that session relays them to the in-flight tasks that benefit (`kobe api dispatch`). Web-hosted sessions receive the relays today.",dispatcherOn:"[x] Field-notes dispatcher (on)",dispatcherOff:"[ ] Field-notes dispatcher (off)"}},w6={title:"\u8BBE\u7F6E",esc:"esc",nav:{default:"j/k \u9009\u62E9 \xB7 h/l \u5207\u6362\u5C42\u7EA7 \xB7 enter \u786E\u8BA4 \xB7 esc \u5173\u95ED",feedback:"tab \u4E0B\u4E00\u9879 \xB7 enter \u53D1\u9001 \xB7 esc \u5173\u95ED"},sections:{general:"\u901A\u7528",engines:"\u5F15\u64CE",accounts:"\u8D26\u6237",keys:"\u5FEB\u6377\u952E",feedback:"\u53CD\u9988",dev:"\u5F00\u53D1"},general:{theme:"\u4E3B\u9898",themeHint:"l \u8FDB\u5165\u5217\u8868 \xB7 j/k \u9AD8\u4EAE \xB7 enter \u5E94\u7528",language:"\u8BED\u8A00",languageHint:"kobe \u754C\u9762\u7684\u663E\u793A\u8BED\u8A00\u3002l \u8FDB\u5165\u5217\u8868 \xB7 j/k \u9AD8\u4EAE \xB7 enter \u5E94\u7528\u3002",transparent:"\u900F\u660E\u80CC\u666F",transparentHint:"\u53BB\u6389\u6E32\u67D3\u5668\u7684\u80CC\u666F\u586B\u5145\uFF0C\u8BA9\u5BBF\u4E3B\u7EC8\u7AEF\u900F\u51FA\u6765\u3002\u6309 `t` \u5207\u6362\u3002",on:"[x] \u5F00",off:"[ ] \u5173",focusAccent:"\u805A\u7126\u5F3A\u8C03\u8272",focusAccentHint:"\u805A\u7126\u9762\u677F\u6807\u9898\u3001\u258C \u6807\u8BB0\u548C\u5206\u9694\u8FB9\u6846\u7684\u989C\u8272\u3002",accentPrimary:"\u4E3B\u8272\uFF08\u54C1\u724C\u5F3A\u8C03\u8272\uFF09",accentSuccess:"\u6210\u529F\u8272\uFF08\u4F20\u7EDF\u7EFF\uFF09",accentInfo:"\u4FE1\u606F\u8272\uFF08\u51B7\u84DD\uFF09",notifications:"\u901A\u77E5",notificationsHint:"\u540E\u53F0\u804A\u5929\u9875\u5B8C\u6210\u6216\u5728\u5BA1\u6279\u5904\u6682\u505C\u65F6\u89E6\u53D1\u3002Toast = \u53F3\u4E0B\u89D2\u5F39\u7A97\uFF1BSound = \u7EC8\u7AEF\u54CD\u94C3 + \u63D0\u793A\u97F3\u3002\u6807\u7B7E\u4E0A\u7684\u672A\u8BFB\u5706\u70B9\u59CB\u7EC8\u5F00\u542F\u3002",toast:"Toast \u5F39\u7A97",sound:"\u58F0\u97F3",zen:"\u7985\u6A21\u5F0F",zenHint:"`zen` \u6807\u8BB0\uFF08\u6587\u4EF6\u5217\u8868\u4E0A\u65B9\uFF09\u548C `prefix`+\u7A7A\u683C \u4F1A\u628A ChatTab \u6536\u8D77\u5230\u5F15\u64CE\u9762\u677F\u2014\u2014\u9690\u85CF\u6587\u4EF6\u4E0E\u7EC8\u7AEF\u9762\u677F\u3002\u4FDD\u6301\u5F00\u542F\u53EF\u8BA9 Tasks \u4FA7\u680F\u59CB\u7EC8\u53EF\u89C1\uFF0C\u65B9\u4FBF\u968F\u65F6\u9000\u51FA\u3002",zenKeepTasks:"\u7985\u6A21\u5F0F\u4E0B\u4FDD\u7559 Tasks \u9762\u677F",surface:"\u8BBE\u7F6E\u9875\u9762",surfaceHint:"\u8BBE\u7F6E\u53CA\u5176\u4ED6\u5B8C\u6574\u5BF9\u8BDD\u6846\uFF08\u65B0\u5EFA\u4EFB\u52A1\u3001\u91CD\u547D\u540D\uFF09\u7684\u6253\u5F00\u4F4D\u7F6E\u3002ChatTab = \u4E0E\u5F15\u64CE\u6807\u7B7E\u5E76\u5217\u7684\u72EC\u7ACB\u6574\u7A97\u9875\u9762\uFF1BTask panel = \u5DE6\u4FA7 Tasks \u9762\u677F\u5185\u7684\u6D6E\u5C42\u3002enter \u9009\u62E9\u3002",surfaceChattab:"ChatTab\uFF08\u72EC\u7ACB\u9875\u9762\uFF09",surfaceTaskpanel:"Task panel\uFF08\u9762\u677F\u5185\u6D6E\u5C42\uFF09",editor:"\u7F16\u8F91\u5668",editorHint:"\u6587\u4EF6\u6811\u91CC\u6309 `e` \u7528\u4EC0\u4E48\u6253\u5F00\u6587\u4EF6\uFF08enter \u4ECD\u662F\u53EA\u8BFB\u9884\u89C8\uFF09\u3002`auto`\uFF08\u9ED8\u8BA4\uFF09\u8DDF\u968F $VISUAL / $EDITOR\uFF0C\u5426\u5219\u81EA\u52A8\u63A2\u6D4B nvim / vim / emacs / nano\u3002\u5728\u4E0B\u65B9\u4E00\u884C\u6309 enter \u5728 auto / vim / nvim / nano / emacs / custom \u95F4\u5FAA\u73AF\uFF1B\u7F16\u8F91\u5668\u672A\u5B89\u88C5\u65F6\u56DE\u9000\u5230\u9884\u89C8\u3002",editorRow:"\u7F16\u8F91\u5668: < {kind} > (enter \u5207\u6362)",editorCustom:"\u81EA\u5B9A\u4E49: {cmd}",editorCustomUnset:"(\u672A\u8BBE\u7F6E \u2014 enter \u7F16\u8F91)"},engines:{title:"\u542F\u52A8\u547D\u4EE4",hint:"\u6BCF\u4E2A\u5F15\u64CE\u7684\u4EFB\u52A1\u9762\u677F\u8FD0\u884C\u7684\u547D\u4EE4\u3002\u5F53\u4E8C\u8FDB\u5236\u6587\u4EF6\u4E0D\u5728 PATH \u4E0A\u7684 `claude` / `codex` \u540D\u4E0B\uFF08\u6BD4\u5982\u53EB `cl`\uFF09\u3001\u8981\u4F20\u9ED8\u8BA4\u53C2\u6570\uFF0C\u6216\u8981\u6DFB\u52A0\u81EA\u5DF1\u7684\u5F15\u64CE\u65F6\uFF0C\u53EF\u8986\u76D6\u5185\u7F6E\u9879\u3002\u25CF = \u65B0\u4EFB\u52A1\u7684\u9ED8\u8BA4\u5F15\u64CE\uFF08\u4E5F\u53EF\u7528 Ctrl+Shift+T \u8BBE\u7F6E\uFF09\u3002enter \u7F16\u8F91\u547D\u4EE4 \xB7 r \u91CD\u547D\u540D \xB7 x \u91CD\u7F6E/\u79FB\u9664 \xB7 d \u8BBE\u4E3A\u9ED8\u8BA4\u3002",defaultTag:" (\u9ED8\u8BA4)",customTag:" (\u81EA\u5B9A\u4E49)",addEngine:"+ \u6DFB\u52A0\u5F15\u64CE"},accounts:{title:"\u8D26\u6237",hint:"\u672C\u5730\u63A2\u6D4B\u5230\u7684\u5F15\u64CE\u8D26\u6237\u7684\u53EA\u8BFB\u89C6\u56FE\u3002\u767B\u5F55\u6D41\u7A0B\u7A0D\u540E\u4F1A\u63A5\u5165\u8FD9\u91CC\u3002",checking:"\u68C0\u67E5\u4E2D\u2026",notLoggedIn:"\u25CB \u672A\u767B\u5F55",loggedIn:"\u25CF \u5DF2\u767B\u5F55: {email}",apiKeyConfigured:"\u25CF \u5DF2\u914D\u7F6E API key",chatgptLogin:"\u25CF ChatGPT \u767B\u5F55: {email}",tokenConfigured:"\u25CF \u5DF2\u914D\u7F6E Token ({source})",copilotDetected:"\u25CF \u68C0\u6D4B\u5230 Copilot \u767B\u5F55"},keybindings:{title:"\u5FEB\u6377\u952E",hint:"\u7F16\u8F91\u4E0B\u9762\u7684 YAML \u6765\u91CD\u7ED1\u5B9A\u6309\u952E\uFF0C\u7136\u540E\u91CD\u542F kobe\uFF08\u6216\u91CD\u5EFA\u9762\u677F\uFF09\u3002\u4EFB\u610F\u4F4D\u7F6E\u6309 F1 \u67E5\u770B\u5E26\u6BCF\u4E2A\u7ED1\u5B9A id \u7684\u5B9E\u65F6\u952E\u4F4D\u8868\u3002",configFile:"\u914D\u7F6E\u6587\u4EF6",notCreated:" (\u5C1A\u672A\u521B\u5EFA)",example:"\u793A\u4F8B",overridesApplied:"\u5DF2\u5E94\u7528\u7684\u8986\u76D6",none:"\u65E0",warnings:"\u8B66\u544A"},feedback:{title:"\u53CD\u9988",hint:"\u901A\u8FC7 `gh` \u5411 kobe \u4ED3\u5E93\u53D1\u4E00\u6761 GitHub Discussion\u3002\u9700\u8981 `gh auth login`\uFF1B\u5206\u7C7B\u9ED8\u8BA4\u4E3A Feedback\u3002",titleLabel:"\u6807\u9898",titlePlaceholder:"\u7B80\u77ED\u6982\u62EC",descriptionLabel:"\u63CF\u8FF0",descriptionPlaceholder:"\u53D1\u751F\u4E86\u4EC0\u4E48\uFF1F(enter \u53D1\u9001)",send:"[enter] \u53D1\u9001\u5230 GitHub Discussions"},dev:{reset:"\u91CD\u7F6E UI \u72B6\u6001",resetHint:"\u6E05\u7A7A ~/.config/kobe/state.json \u548C ~/.kobe/tasks.json\uFF0C\u7136\u540E\u9000\u51FA kobe\u2014\u2014\u91CD\u65B0\u542F\u52A8\u5373\u53EF\u4ECE\u5934\u5F00\u59CB\u3002\u5DE5\u4F5C\u4F1A\u8BDD / \u5F52\u6863\u5217\u8868\u3001\u9762\u677F\u5C3A\u5BF8\u3001\u4E3B\u9898\u3001\u6A21\u578B\u9009\u62E9\u90FD\u4F1A\u91CD\u7F6E\u3002\u78C1\u76D8\u4E0A\u7684 worktree \u548C Claude Code \u4F1A\u8BDD\u5386\u53F2\u4E0D\u53D7\u5F71\u54CD\u3002",resetButton:"[enter] \u91CD\u7F6E",restart:"\u91CD\u542F\u540E\u7AEF",restartHint:"\u505C\u6B62 kobe daemon \u5E76\u9000\u51FA\u5F53\u524D kobe \u7A97\u53E3\uFF0C\u4E0B\u6B21\u542F\u52A8\u4F1A\u62C9\u8D77\u4E00\u4E2A\u5168\u65B0\u7684 daemon\u2014\u2014\u65E0\u9700\u6740\u8FDB\u7A0B\u5373\u53EF\u5E94\u7528 daemon / orchestrator / engine \u7684\u6539\u52A8\u3002\u5176\u4ED6\u5DF2\u8FDE\u63A5\u7684 kobe \u7A97\u53E3\u4E5F\u4F1A\u65AD\u5F00\u8FDE\u63A5\u3002",restartButton:"[enter] \u91CD\u542F",doctorHint:"daemon \u5361\u4F4F\u6216\u65E0\u54CD\u5E94\uFF1F\u5728 shell \u91CC\u8FD0\u884C `kobe doctor` \u8BCA\u65AD\uFF0C\u6216 `kobe reset` \u505C\u6B62 daemon + \u6740\u6389\u4F1A\u8BDD\uFF08\u4FDD\u7559\u4F60\u7684\u4EFB\u52A1\uFF09\u3002\u53EA\u6709\u8981\u540C\u65F6\u6E05\u7A7A\u4EFB\u52A1\u7D22\u5F15 + UI \u72B6\u6001\u65F6\u624D\u7528 `kobe reset --hard`\u3002",experimental:"\u5B9E\u9A8C\u6027",remoteHint:"\u8FDC\u7A0B\u9879\u76EE\uFF08SSH\uFF09\uFF1A\u6CE8\u518C\u4E00\u4E2A git worktree + \u5F15\u64CE\u90FD\u901A\u8FC7 SSH \u8DD1\u5728\u53E6\u4E00\u53F0\u4E3B\u673A\u4E0A\u3001\u7531\u672C\u5730 kobe \u9A71\u52A8\u7684\u9879\u76EE\u3002\u5C1A\u672A\u5B8C\u6210\u2014\u2014\u6587\u4EF6/diff \u9762\u677F\u5BF9\u8FDC\u7A0B\u4ECD\u4F1A\u964D\u7EA7\u3002\u542F\u7528 `kobe add --remote`\u3002",remoteOn:"[x] \u8FDC\u7A0B\u9879\u76EE (\u5F00)",remoteOff:"[ ] \u8FDC\u7A0B\u9879\u76EE (\u5173)",autoStatusHint:"\u81EA\u52A8\u72B6\u6001\u6D41\u8F6C\uFF1Abacklog \u4EFB\u52A1\u5728\u5176\u5F15\u64CE\u5F00\u59CB\u4E00\u8F6E\u65F6\u79FB\u5230 in_progress\uFF0C\u65B0\u7684 claude \u4F1A\u8BDD\u4F1A\u62FF\u5230\u4E00\u6761\u7CFB\u7EDF\u63D0\u793A\uFF0C\u544A\u8BC9 agent \u5B8C\u6210\u540E\u81EA\u884C\u8BBE\u4E3A in_review\u3002\u7EDD\u4E0D\u89E6\u78B0 done/canceled\u3002",autoStatusOn:"[x] \u81EA\u52A8\u72B6\u6001\u6D41\u8F6C (\u5F00)",autoStatusOff:"[ ] \u81EA\u52A8\u72B6\u6001\u6D41\u8F6C (\u5173)",dispatcherHint:"\u73B0\u573A\u7B14\u8BB0\u8C03\u5EA6\u5668\uFF1A\u4EFB\u52A1\u4F1A\u8BDD\u63D0\u4EA4\u4E00\u884C\u7ECF\u9A8C\uFF08`kobe api note`\uFF09\uFF0Cdaemon \u5C06\u6BCF\u6761\u8F6C\u53D1\u7ED9\u4ED3\u5E93\u7684\u4E3B\u4F1A\u8BDD\uFF0C\u4E3B\u4F1A\u8BDD\u518D\u628A\u5B83\u4EEC\u8F6C\u8FBE\u7ED9\u80FD\u53D7\u76CA\u7684\u8FDB\u884C\u4E2D\u4EFB\u52A1\uFF08`kobe api dispatch`\uFF09\u3002\u76EE\u524D\u7531 Web \u6258\u7BA1\u7684\u4F1A\u8BDD\u4F1A\u6536\u5230\u8F6C\u8FBE\u3002",dispatcherOn:"[x] \u73B0\u573A\u7B14\u8BB0\u8C03\u5EA6\u5668 (\u5F00)",dispatcherOff:"[ ] \u73B0\u573A\u7B14\u8BB0\u8C03\u5EA6\u5668 (\u5173)"}}});var P6,v6;var m6=k(()=>{P6={view:{workspace:"Workspace",archives:"Archives"},header:{projects:"PROJECTS",tasks:"TASKS"},search:{placeholder:"fuzzy filter"},sort:"sort",project:{taskSingular:"task",taskPlural:"tasks"},moveChip:" move",empty:{noMatchSearch:"No matching tasks \u2014 esc to clear.",noActiveProject:"No active tasks for this project.",noArchivedProject:"No archived tasks for this project.",noActive:"No active tasks \u2014 press n or [+] to create one.",noArchived:"No archived tasks."},archiveHint:"a to unarchive",status:{done:"done",inReview:"in review",working:"working",backlog:"\u2014",canceled:"canceled",error:"error"},activity:{rateLimited:"rate limited",permissionNeeded:"needs permission",error:"error"},subtitle:{noTracking:"no activity tracking",materializing:"materializing"},hints:{headerFolded:"\u2500\u2500 keys ?\u25B8 \u2500\u2500",headerUnfolded:"\u2500\u2500 keys ?\u25BE \u2500\u2500",fullHelp:"full help",newTask:"new task",settings:"settings",open:"open",focusEngine:"focus engine",openWorktree:"open wt",delete:"delete",views:"views",project:"project",movePanes:"move panes",detach:"tasks\u2192detach",splits:"splits",panes:"panes",reorder:"reorder",done:"done"},toast:{noDaemonWorktree:"No daemon running \u2014 can't create the worktree",noDaemonOpen:"No daemon running \u2014 can't open this task",noEditor:"No editor found \u2014 set KOBE_OPEN_EDITOR (e.g. 'code', 'cursor', 'nvim')",openWorktreeFailed:"Couldn't open worktree with {label}",sessionStartFailed:"Couldn't start this task's session",moveTaskFailed:"Couldn't move task: {message}",alreadyLatest:"Already on the latest version (v{version})",worktreeErrorNotGit:"This project isn't a git repo yet \u2014 a task needs a git branch. Run `git init` (+ a first commit) in the project, then open the task. Non-git support is coming.",worktreeErrorGeneric:"Couldn't create the worktree: {message}"}},v6={view:{workspace:"\u5DE5\u4F5C\u533A",archives:"\u5F52\u6863"},header:{projects:"\u9879\u76EE",tasks:"\u4EFB\u52A1"},search:{placeholder:"\u6A21\u7CCA\u641C\u7D22"},sort:"\u6392\u5E8F",project:{taskSingular:"\u4E2A\u4EFB\u52A1",taskPlural:"\u4E2A\u4EFB\u52A1"},moveChip:" \u79FB\u52A8",empty:{noMatchSearch:"\u65E0\u5339\u914D\u4EFB\u52A1\u2014\u2014\u6309 esc \u6E05\u9664\u3002",noActiveProject:"\u8BE5\u9879\u76EE\u6682\u65E0\u6D3B\u8DC3\u4EFB\u52A1\u3002",noArchivedProject:"\u8BE5\u9879\u76EE\u6682\u65E0\u5F52\u6863\u4EFB\u52A1\u3002",noActive:"\u6682\u65E0\u6D3B\u8DC3\u4EFB\u52A1\u2014\u2014\u6309 n \u6216 [+] \u65B0\u5EFA\u3002",noArchived:"\u6682\u65E0\u5F52\u6863\u4EFB\u52A1\u3002"},archiveHint:"a \u53D6\u6D88\u5F52\u6863",status:{done:"\u5DF2\u5B8C\u6210",inReview:"\u5BA1\u6838\u4E2D",working:"\u8FDB\u884C\u4E2D",backlog:"\u2014",canceled:"\u5DF2\u53D6\u6D88",error:"\u9519\u8BEF"},activity:{rateLimited:"\u8BF7\u6C42\u53D7\u9650",permissionNeeded:"\u7B49\u5F85\u6388\u6743",error:"\u9519\u8BEF"},subtitle:{noTracking:"\u4E0D\u8DDF\u8E2A\u6D3B\u52A8",materializing:"\u6B63\u5728\u521B\u5EFA worktree"},hints:{headerFolded:"\u2500\u2500 \u5FEB\u6377\u952E ?\u25B8 \u2500\u2500",headerUnfolded:"\u2500\u2500 \u5FEB\u6377\u952E ?\u25BE \u2500\u2500",fullHelp:"\u5B8C\u6574\u5E2E\u52A9",newTask:"\u65B0\u5EFA\u4EFB\u52A1",settings:"\u8BBE\u7F6E",open:"\u6253\u5F00",focusEngine:"\u805A\u7126\u5F15\u64CE",openWorktree:"\u6253\u5F00 worktree",delete:"\u5220\u9664",views:"\u89C6\u56FE",project:"\u9879\u76EE",movePanes:"\u79FB\u52A8\u9762\u677F",detach:"\u4EFB\u52A1\u2192\u5206\u79BB",splits:"\u5206\u5272",panes:"\u9762\u677F",reorder:"\u91CD\u65B0\u6392\u5E8F",done:"\u5B8C\u6210"},toast:{noDaemonWorktree:"\u5B88\u62A4\u8FDB\u7A0B\u672A\u8FD0\u884C\u2014\u2014\u65E0\u6CD5\u521B\u5EFA worktree",noDaemonOpen:"\u5B88\u62A4\u8FDB\u7A0B\u672A\u8FD0\u884C\u2014\u2014\u65E0\u6CD5\u6253\u5F00\u6B64\u4EFB\u52A1",noEditor:"\u672A\u627E\u5230\u7F16\u8F91\u5668\u2014\u2014\u8BF7\u8BBE\u7F6E KOBE_OPEN_EDITOR\uFF08\u5982 'code'\u3001'cursor'\u3001'nvim'\uFF09",openWorktreeFailed:"\u65E0\u6CD5\u7528 {label} \u6253\u5F00 worktree",sessionStartFailed:"\u65E0\u6CD5\u542F\u52A8\u6B64\u4EFB\u52A1\u7684\u4F1A\u8BDD",moveTaskFailed:"\u65E0\u6CD5\u79FB\u52A8\u4EFB\u52A1\uFF1A{message}",alreadyLatest:"\u5DF2\u662F\u6700\u65B0\u7248\u672C\uFF08v{version}\uFF09",worktreeErrorNotGit:"\u8BE5\u9879\u76EE\u5C1A\u975E git \u4ED3\u5E93\u2014\u2014\u4EFB\u52A1\u9700\u8981 git \u5206\u652F\u3002\u8BF7\u5728\u9879\u76EE\u4E2D\u6267\u884C `git init`\uFF08+ \u9996\u6B21\u63D0\u4EA4\uFF09\u540E\u518D\u6253\u5F00\u4EFB\u52A1\u3002\u975E git \u9879\u76EE\u7684\u652F\u6301\u5373\u5C06\u63A8\u51FA\u3002",worktreeErrorGeneric:"\u65E0\u6CD5\u521B\u5EFA worktree\uFF1A{message}"}}});var c6,n6;var d6=k(()=>{c6={pageTitle:"KOBE UPDATE",current:"current",latest:"latest",releaseUrlUnavailable:"release URL unavailable",statusReleaseOpened:"Opened release page in your browser.",statusReleaseError:"Could not open release URL.",statusRunningUpdater:"Leaving the TUI page and running the updater in this tmux window...",loadingNotes:"Loading release notes...",notesUnavailable:"Release notes are unavailable. Use Open release to view the GitHub release page.",changesSectionHeader:"\u2500\u2500 changes from v{from} to v{to} \u2500\u2500",updateComplete:"kobe update complete. Relaunch kobe to use the new version.",updateFailed:"kobe update failed with exit code {code}.",pressAnyKey:"Press any key to close this update window.",actions:{updateNow:"Update now",openRelease:"Open release",close:"Close",closeDetail:"return to the previous tmux window"},skew:{title:"\u26A0 DAEMON OUT OF DATE",olderBuild:"an older build",hint:"daemon is {daemon} \u2014 you launched v{clientVersion}. Run `kobe daemon restart` then `kobe reload`"}},n6={pageTitle:"KOBE \u66F4\u65B0",current:"\u5F53\u524D",latest:"\u6700\u65B0",releaseUrlUnavailable:"\u53D1\u5E03\u94FE\u63A5\u4E0D\u53EF\u7528",statusReleaseOpened:"\u5DF2\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u53D1\u5E03\u8BF4\u660E\u9875\u9762\u3002",statusReleaseError:"\u65E0\u6CD5\u6253\u5F00\u53D1\u5E03\u94FE\u63A5\u3002",statusRunningUpdater:"\u6B63\u5728\u79BB\u5F00 TUI \u9875\u9762\uFF0C\u5E76\u5728\u6B64 tmux \u7A97\u53E3\u4E2D\u8FD0\u884C\u66F4\u65B0\u7A0B\u5E8F\u2026\u2026",loadingNotes:"\u6B63\u5728\u52A0\u8F7D\u53D1\u5E03\u8BF4\u660E\u2026\u2026",notesUnavailable:"\u53D1\u5E03\u8BF4\u660E\u4E0D\u53EF\u7528\u3002\u8BF7\u4F7F\u7528\u300C\u6253\u5F00\u53D1\u5E03\u9875\u300D\u67E5\u770B GitHub \u53D1\u5E03\u9875\u9762\u3002",changesSectionHeader:"\u2500\u2500 v{from} \u81F3 v{to} \u7684\u53D8\u66F4 \u2500\u2500",updateComplete:"kobe \u66F4\u65B0\u5B8C\u6210\u3002\u8BF7\u91CD\u65B0\u542F\u52A8 kobe \u4EE5\u4F7F\u7528\u65B0\u7248\u672C\u3002",updateFailed:"kobe \u66F4\u65B0\u5931\u8D25\uFF0C\u9000\u51FA\u7801\u4E3A {code}\u3002",pressAnyKey:"\u6309\u4EFB\u610F\u952E\u5173\u95ED\u6B64\u66F4\u65B0\u7A97\u53E3\u3002",actions:{updateNow:"\u7ACB\u5373\u66F4\u65B0",openRelease:"\u6253\u5F00\u53D1\u5E03\u9875",close:"\u5173\u95ED",closeDetail:"\u8FD4\u56DE\u4E0A\u4E00\u4E2A tmux \u7A97\u53E3"},skew:{title:"\u26A0 DAEMON \u7248\u672C\u4E0D\u4E00\u81F4",olderBuild:"\u65E7\u7248\u672C\u6784\u5EFA",hint:"daemon \u8FD0\u884C\u7684\u662F {daemon}\uFF0C\u800C\u4F60\u542F\u52A8\u7684\u662F v{clientVersion}\u3002\u8BF7\u8FD0\u884C `kobe daemon restart` \u518D\u8FD0\u884C `kobe reload`"}}});function EX(f){return typeof f==="string"&&bz.some((J)=>J.id===f)}var xN,wN,bz,kG,NG="en";var yG=k(()=>{U6();M6();A6();C6();y6();I6();E6();h6();m6();d6();xN={settings:x6,tasks:P6,files:D6,newTask:k6,ops:b6,update:c6,quickTask:T6,help:F6,common:V6,keys:g6},wN={settings:w6,tasks:v6,files:L6,newTask:N6,ops:S6,update:n6,quickTask:u6,help:O6,common:K6,keys:R6},bz=[{id:"en",label:"English"},{id:"zh",label:"\u4E2D\u6587"}],kG={en:xN,zh:wN}});function xX(f){if(kG[f])hN("lang",f)}function oj(){return _j.lang}function i6(f,J){let Y=f;for(let z of J.split("."))if(Y&&typeof Y==="object"&&z in Y)Y=Y[z];else return;return typeof Y==="string"?Y:void 0}function PN(f,J){if(!J)return f;return f.replace(/\{(\w+)\}/g,(Y,z)=>(z in J)?String(J[z]):Y)}function F(f,J){let Y=_j.lang,z=i6(kG[Y],f)??i6(kG.en,f)??f;return PN(z,J)}function sj(f,J){let Y=_j.lang,z=(G)=>{return G.keys[f]?.[J]};return z(kG[Y])??z(kG.en)??J}var _j,hN;var G1=k(()=>{CG();yG();yG();[_j,hN]=uJ({lang:NG})});function vN(f){let J=[],Y=f.name;if(Y)J.push(Y);if(Y==="return")J.push("enter");if(Y==="enter")J.push("return");let z=[];if(f.ctrl)z.push("ctrl");if(f.meta)z.push("cmd");if(f.option)z.push("alt");if(f.shift&&Y&&Y.length>1)z.push("shift");if(z.length===0)return J;let G=`${z.join("+")}+`;return J.map((X)=>G+X)}function tj(f,J){if(J.defaultPrevented)return!1;let Y=vN(J);for(let z=f.length-1;z>=0;z--){let G=f[z];if(!G)continue;let X=G.config();if(X.enabled===!1)continue;let q=X.bindings.find((Q)=>Y.includes(Q.key));if(q)return q.cmd(J,q.slot),J.preventDefault(),!0}return!1}function cN(){if(ej)return;let f=Y1();if(!f)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");ej=f.keyInput,l6=(J)=>{tj(KQ,J)},ej.on("keypress",l6)}function Uf(f){cN();let J=mN++,Y={config:f,id:J};zf(()=>{f()}),KQ.push(Y),mf(()=>{let z=KQ.findIndex((G)=>G.id===J);if(z>=0)KQ.splice(z,1)})}var mN=1,KQ,ej=null,l6=null;var b1=k(()=>{h();Wf();KQ=[]});import{RGBA as a6}from"@opentui/core";function iN(f){let J=TJ(),Y=i0(),{theme:z}=Y,G=Y1(),X=!1,q=()=>{if(f.size==="xlarge")return 140;if(f.size==="large")return 110;if(f.size==="small")return 50;return 80},Q=2,H=()=>Math.max(8,J().height-Q*2);return(()=>{var B=W("box"),V=W("box");return D(B,V),Z(B,"onMouseDown",()=>{X=!!G?.getSelection()}),Z(B,"onMouseUp",()=>{if(X){X=!1;return}f.onClose?.()}),Z(B,"alignItems","center"),Z(B,"justifyContent","center"),Z(B,"position","absolute"),Z(B,"zIndex",3000),Z(B,"left",0),Z(B,"top",0),Z(V,"onMouseUp",(j)=>{X=!1,j.stopPropagation()}),Z(V,"flexShrink",1),Z(V,"flexGrow",0),Z(V,"paddingTop",1),K(V,()=>f.children),u((j)=>{var U=J().width,L=J().height,O=Y.transparentBackground?dN:nN,M=q(),R=J().width-2,S=H(),a=z.backgroundDialog;return U!==j.e&&(j.e=Z(B,"width",U,j.e)),L!==j.t&&(j.t=Z(B,"height",L,j.t)),O!==j.a&&(j.a=Z(B,"backgroundColor",O,j.a)),M!==j.o&&(j.o=Z(V,"width",M,j.o)),R!==j.i&&(j.i=Z(V,"maxWidth",R,j.i)),S!==j.n&&(j.n=Z(V,"maxHeight",S,j.n)),a!==j.s&&(j.s=Z(V,"backgroundColor",a,j.s)),j},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),B})()}function lN(){let[f,J]=uJ({stack:[],size:"medium"}),Y=Y1(),z=null;function G(){setTimeout(()=>{if(!z)return;if(z.isDestroyed)return;function X(Q){for(let H of Q.getChildren()){if(H===z)return!0;if(X(H))return!0}return!1}let q=Y?.root;if(!q)return;if(!X(q))return;z.focus()},1)}return Uf(()=>({enabled:f.stack.length>0&&!Y?.getSelection()?.getSelectedText(),bindings:[{key:"escape",cmd:()=>{if(Y?.getSelection())Y.clearSelection();f.stack.at(-1)?.onClose?.(),J("stack",f.stack.slice(0,-1)),G()}},{key:"ctrl+c",cmd:()=>{if(Y?.getSelection())Y.clearSelection();f.stack.at(-1)?.onClose?.(),J("stack",f.stack.slice(0,-1)),G()}}]})),{clear(){for(let X of f.stack)X.onClose?.();KZ(()=>{J("size","medium"),J("stack",[])}),G()},replace(X,q){if(f.stack.length===0)z=Y?.currentFocusedRenderable??null,z?.blur();for(let Q of f.stack)Q.onClose?.();J("size","medium"),J("stack",[{element:X,onClose:q}])},push(X,q){if(f.stack.length===0)z=Y?.currentFocusedRenderable??null,z?.blur();J("stack",[...f.stack,{element:X,onClose:q}])},pop(){if(f.stack.at(-1)?.onClose?.(),J("stack",f.stack.slice(0,-1)),f.stack.length===0)G()},get stack(){return f.stack},get size(){return f.size},setSize(X){J("size",X)}}}function r6(f){let J=lN();return b($6.Provider,{value:J,get children(){return[I0(()=>f.children),(()=>{var Y=W("box");return Z(Y,"position","absolute"),Z(Y,"zIndex",3000),K(Y,b(X0,{get when(){return J.stack.length},get children(){return b(iN,{onClose:()=>J.clear(),get size(){return J.size},get children(){return J.stack.at(-1).element()}})}})),Y})()]}})}function vf(){let f=u1($6);if(!f)throw Error("useDialog must be used within a DialogProvider");return f}var nN,dN,$6;var P1=k(()=>{h();h();h();h();h();h();h();h();Wf();CG();xf();b1();nN=a6.fromInts(0,0,0,128),dN=a6.fromInts(0,0,0,64);$6=gJ()});import{spawnSync as f8}from"child_process";import*as _6 from"fs";function p6(f){return`This folder isn't a git repository yet, and a task needs a git branch to work in. To fix it, turn ${f} into a repo: git init && git add -A && git commit -m "init" \u2014 then create the task again. (Working in non-git folders is coming soon.)`}function o6(f){let J=f.trim();if(!J)return"repo path is required";let Y;try{Y=_6.statSync(J)}catch{return`path does not exist: ${J}`}if(!Y.isDirectory())return`not a directory: ${J}`;try{if(f8("git",["rev-parse","--git-dir"],{cwd:J,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return p6(J)}catch{return p6(J)}return null}function wX(f){if(!f)return null;try{let J=f8("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:f,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]});if(J.status!==0)return null;let Y=J.stdout.trim();if(!Y||Y==="HEAD")return null;return Y}catch{return null}}function s6(f){if(!f)return[];try{let J=f8("git",["for-each-ref","--format=%(refname:short)","refs/heads/"],{cwd:f,encoding:"utf-8",timeout:2000});if(J.status!==0)return[];return J.stdout.split(`
223
- `).map((Y)=>Y.trim()).filter(Boolean).sort((Y,z)=>{let G=(Q)=>Q==="main"?0:Q==="master"?1:Q==="develop"?2:3,X=G(Y),q=G(z);if(X!==q)return X-q;return Y.localeCompare(z)})}catch{return[]}}var LJ="main";var UQ=()=>{};import*as t6 from"fs";import*as DQ from"os";function W1(f){if(f==="~")return DQ.homedir();if(f.startsWith("~/"))return DQ.homedir()+f.slice(1);return f}function J8(f){if(!f)return{base:"",filter:""};let Y=W1(f==="~"?"~/":f);if(Y.endsWith("/"))return{base:Y,filter:""};let z=Y.lastIndexOf("/");if(z===-1)return{base:"",filter:Y};return{base:Y.slice(0,z+1),filter:Y.slice(z+1)}}function Y8(f){if(!f)return[];try{let J=t6.readdirSync(f,{withFileTypes:!0}),Y=[];for(let z of J)if(z.isDirectory())Y.push(z.name);return Y.sort((z,G)=>z.localeCompare(G))}catch{return[]}}function z8(f,J){let Y=J.toLowerCase(),G=Y.startsWith(".")?f:f.filter((X)=>!X.startsWith("."));if(!Y)return G;return G.filter((X)=>X.toLowerCase().startsWith(Y))}function hX(f,J,Y){let z=J+Y;if(f.startsWith("~")){let G=DQ.homedir();if(z===G)return"~";if(z.startsWith(`${G}/`))return`~${z.slice(G.length)}`}return z}var LQ=()=>{};import{spawn as aN}from"child_process";import*as Sz from"fs";import*as PX from"path";function e6(f){let J=f.trim().replace(/\/+$/,"");if(!J)return"";let Y=J.lastIndexOf("/"),z=J.lastIndexOf(":"),G=Math.max(Y,z);return(G>=0?J.slice(G+1):J).replace(/\.git$/i,"")}function f4(f){let J=f.trim();if(!J)return F("newTask.error.gitUrlRequired");let Y=J.includes("://"),z=J.includes("@")&&J.includes(":"),G=J.includes("/");if(!Y&&!z&&!G)return F("newTask.error.gitUrlInvalid",{url:J});return null}function J4(f,J){let Y=J.trim();if(!Y)return F("newTask.error.folderRequired");if(Y.includes("/")||Y.includes("\\"))return F("newTask.error.folderHasSeparator");let z=f.trim();if(!z)return F("newTask.error.parentRequired");let G=W1(z),X;try{X=Sz.statSync(G)}catch{return F("newTask.error.parentNotFound",{path:G})}if(!X.isDirectory())return F("newTask.error.parentNotDir",{path:G});let q=PX.join(G,Y);if(Sz.existsSync(q))return F("newTask.error.targetExists",{path:q});return null}function Y4(f,J){return PX.join(W1(f.trim()),J.trim())}function z4(f,J){let Y=J.trim();if(!Y)return J;let z=W1(f.trim());if(!z)return J;try{if(!Sz.statSync(z).isDirectory())return J}catch{return J}if(!Sz.existsSync(PX.join(z,Y)))return Y;for(let G=2;G<1000;G++){let X=`${Y}-${G}`;if(!Sz.existsSync(PX.join(z,X)))return X}return Y}function G4(f,J,Y){return new Promise((z)=>{let G="";try{let X=aN("git",["clone","--progress",f,J],{stdio:["ignore","ignore","pipe"]});X.stderr?.setEncoding("utf-8"),X.stderr?.on("data",(q)=>{if(G+=q,Y){let Q=q.split(/[\r\n]+/).filter((B)=>B.trim().length>0),H=Q[Q.length-1];if(H)Y(H)}}),X.on("error",(q)=>{z({ok:!1,error:q.message})}),X.on("close",(q)=>{if(q===0){z({ok:!0,path:J});return}let Q=G.split(/[\r\n]+/).filter((H)=>H.trim().length>0).pop()??`git clone exited with ${q}`;z({ok:!1,error:Q})})}catch(X){z({ok:!1,error:X instanceof Error?X.message:String(X)})}})}var X4=k(()=>{G1();LQ()});function MQ(f){if(f==="existing")return"clone";if(f==="clone")return"adopt";return"existing"}function Z4(f){if(f==="existing")return"adopt";if(f==="clone")return"existing";return"clone"}function q4(f,J){let Y=f.trim();if(J.includes(Y))return"saved";if(Y.startsWith("~"))return"browse";if(Y.includes("/"))return"browse";return"saved"}function X1(f){return f.replace(/[\r\n]+/g,"")}function G8(f,J="existing"){if(f==="confirm")return"tabs";if(f==="tabs")return"engine";if(f==="engine")return X8(J);if(J==="clone"){if(f==="cloneUrl")return"cloneParent";if(f==="cloneParent")return"cloneFolder";if(f==="cloneFolder")return"cloneBaseRef";if(f==="cloneBaseRef")return"confirm";return"cloneUrl"}if(J==="adopt")return f==="adoptFilter"?"confirm":"adoptFilter";if(f==="repo")return"baseRef";if(f==="baseRef")return"confirm";return"repo"}function X8(f){if(f==="clone")return"cloneUrl";if(f==="adopt")return"adoptFilter";return"repo"}function Q4(f,J){let Y=J.trim();if(!Y)return f;return f.filter((z)=>_X(Y,z.path))}function H4(f,J){let Y=new Set,z=[];for(let G of[f,...J]){let X=G.trim();if(!X||Y.has(X))continue;Y.add(X),z.push(X)}return z}function B4(f,J){let Y=J.trim().toLowerCase();if(!Y)return f;return f.filter((z)=>z.toLowerCase().includes(Y))}function j4(f,J){let Y=J.trim().toLowerCase();if(!Y)return f;return f.filter((z)=>z.toLowerCase().includes(Y))}function vX(f,J,Y=$N){let z=f.length;if(z<=Y)return{items:f,start:0,total:z};let G=Math.floor(Y/2),X=Math.max(0,J-G);if(X+Y>z)X=z-Y;return{items:f.slice(X,X+Y),start:X,total:z}}function EJ(f,J){if(J<=0)return 0;return Math.max(0,Math.min(J-1,f))}function W4(f,J,Y){let z=J[Y];if(z)return z;return f.trim()||LJ}var $N=8;var Z8=k(()=>{vQ();UQ()});import{TextAttributes as _1}from"@opentui/core";function V4(f){let J=vf(),{theme:Y}=i0(),[z,G]=r("existing"),X=()=>{let d=f.availableVendors;return d&&d.length>0?d:cf},q=(()=>{let d=X(),s=f.defaultVendor??"claude";return d.includes(s)?s:d[0]??"claude"})(),[Q,H]=r(q),[B,V]=r("tabs"),[j,U]=r(f.defaultRepo),[L,O]=r(wX(W1(f.defaultRepo.trim()))??LJ),[M,R]=r(!1),[S,a]=r(""),[N,g]=r(f.defaultCloneParent?.trim()?f.defaultCloneParent:"~/"),[C,y]=r(""),[_,z0]=r(!1),[t,Y0]=r(LJ),[T,Q0]=r(!1),[p,D0]=r(""),g0=U0(()=>H4(f.defaultRepo,f.savedRepos)),$=U0(()=>q4(j(),g0())),E=U0(()=>J8(j())),f0=U0(()=>Y8(E().base)),I=U0(()=>z8(f0(),E().filter)),G0=U0(()=>B4(g0(),j())),x=U0(()=>$()==="browse"?I():G0()),[c,Z0]=r(0),V0=U0(()=>vX(x(),c())),[H0,y0]=r(!1),w0=U0(()=>s6(W1(j().trim()))),T0=U0(()=>j4(w0(),L())),[r0,P]=r(0),M0=U0(()=>vX(T0(),r0())),J0=U0(()=>J8(N())),F0=U0(()=>Y8(J0().base)),a0=U0(()=>z8(F0(),J0().filter)),[p0,u0]=r(0),_0=U0(()=>vX(a0(),p0())),[n,q0]=r(!1),[b0,o0]=r(""),[l0,$0]=r(0),[t0,Rf]=r(new Set),[Af]=VZ(()=>z()==="adopt"?W1(j().trim()):null,async(d)=>f.discoverAdoptable?await f.discoverAdoptable(d):[]),o=U0(()=>Q4(Af()??[],b0())),e=U0(()=>vX(o().map((d)=>d.path),l0())),B0=U0(()=>{let d=e();return o().slice(d.start,d.start+d.items.length)});zf(()=>{o(),$0((d)=>EJ(d,o().length))});function C0(d){Rf((s)=>{let S0=new Set(s);if(S0.has(d))S0.delete(d);else S0.add(d);return S0})}function A(){let d=o()[l0()];if(d)C0(d.path)}zf(()=>{T0(),P(0)}),zf(()=>{let d=W1(j().trim());if(!d)return;if(M())return;let s=wX(d);if(s)O(s)}),zf(()=>{x(),Z0(0)}),zf(()=>{a0(),u0(0)}),zf(()=>{let d=S(),s=N();if(_())return;let S0=e6(d);y(z4(s,S0))});let[P0,K0]=r(null);zf(()=>{j(),S(),N(),C(),b0(),K0(null)});function E0(){let d=W1(j().trim());if(!d)return;let s=o6(d);if(s){K0(s),V("repo");return}let S0=L().trim()||LJ;f.onSubmit({repo:d,baseRef:S0,vendor:Q()}),J.clear()}async function W0(){if(T())return;let d=f4(S());if(d){K0(d),V("cloneUrl");return}let s=J4(N(),C());if(s){K0(s),V(C().trim()?"cloneParent":"cloneFolder");return}let S0=Y4(N(),C());Q0(!0),D0(F("newTask.clone.progressInto",{target:S0}));let N0=await G4(S().trim(),S0,(tf)=>{D0(tf)});if(Q0(!1),!N0.ok){K0(F("newTask.error.cloneFailed",{error:N0.error})),V("cloneUrl");return}let Z1=t().trim()||LJ,V1=W1(N().trim());f.onSubmit({repo:N0.path,baseRef:Z1,vendor:Q(),cloned:{parentDir:V1}}),J.clear()}function L0(){let d=o();if(d.length===0){K0(F("newTask.error.noAdoptable"));return}let s=t0(),S0=s.size>0?d.filter((N0)=>s.has(N0.path)):d.slice(l0(),l0()+1);if(S0.length===0)return;f.onSubmit({mode:"adopt",repo:W1(j().trim()),vendor:Q(),adopt:S0.map((N0)=>({worktreePath:N0.path,branch:N0.branch}))}),J.clear()}function R0(){if(z()==="clone"){W0();return}if(z()==="adopt"){L0();return}E0()}function Jf(d){if(T())return;if(d===z())return;G(d),V(X8(d)),K0(null)}function Yf(d){if(T())return;let s=d===1?MQ(z()):Z4(z());if(s===z())return;G(s),K0(null),V("tabs")}function n0(d){H((s)=>d===1?ZY(X(),s):mQ(X(),s))}function yf(){if(!j().trim()&&$()==="saved"){let s=x()[0];if(s){U(s),V("baseRef");return}}if($()==="browse"){let S0=I()[c()],N0=E();if(S0){U(hX(j(),N0.base,S0)),Z0(0),y0(!0),V("baseRef");return}V("baseRef");return}let d=x()[c()];if(d){U(d),V("baseRef");return}V("baseRef")}function k0(d){let S0=x()[d];if(!S0)return;if($()==="browse"){let N0=E();U(hX(j(),N0.base,S0)),Z0(d),y0(!0),V("baseRef");return}U(S0),Z0(d),V("baseRef")}function wf(){let s=a0()[p0()],S0=J0();if(s){g(hX(N(),S0.base,s)),u0(0),q0(!0),V("cloneFolder");return}V("cloneFolder")}function v(d){let S0=a0()[d];if(!S0)return;let N0=J0();g(hX(N(),N0.base,S0)),u0(d),q0(!0),V("cloneFolder")}let A0=()=>{let d=o();if(d.length===0)return;let s=d.every((S0)=>t0().has(S0.path));Rf(s?new Set:new Set(d.map((S0)=>S0.path)))};Uf(()=>({bindings:[{key:"tab",cmd:()=>V((d)=>G8(d,z()))},{key:"ctrl+]",cmd:()=>Jf(MQ(z()))},{key:"ctrl+[",cmd:()=>Jf(MQ(z()))},{key:"ctrl+e",cmd:()=>H((d)=>ZY(X(),d))},{key:"up",cmd:()=>{if(T())return;if(z()==="existing"&&B()==="repo"){let d=x();if(d.length===0)return;Z0(EJ(c()-1,d.length));return}if(z()==="existing"&&B()==="baseRef"){let d=T0();if(d.length===0)return;P(EJ(r0()-1,d.length));return}if(z()==="clone"&&B()==="cloneParent"){let d=a0();if(d.length===0)return;u0(EJ(p0()-1,d.length));return}if(z()==="adopt"){let d=o();if(d.length===0)return;$0(EJ(l0()-1,d.length))}}},{key:"down",cmd:()=>{if(T())return;if(z()==="existing"&&B()==="repo"){let d=x();if(d.length===0)return;Z0(EJ(c()+1,d.length));return}if(z()==="existing"&&B()==="baseRef"){let d=T0();if(d.length===0)return;P(EJ(r0()+1,d.length));return}if(z()==="clone"&&B()==="cloneParent"){let d=a0();if(d.length===0)return;u0(EJ(p0()+1,d.length));return}if(z()==="adopt"){let d=o();if(d.length===0)return;$0(EJ(l0()+1,d.length))}}},...B()==="tabs"||B()==="engine"?[{key:"left",cmd:()=>B()==="tabs"?Yf(-1):n0(-1)},{key:"right",cmd:()=>B()==="tabs"?Yf(1):n0(1)},{key:"return",cmd:()=>V((d)=>G8(d,z()))}]:[],...z()==="adopt"?[{key:"ctrl+a",cmd:A0}]:[]]})),Uf(()=>({enabled:B()==="confirm"&&!T(),bindings:[{key:"return",cmd:()=>R0()}]}));let Bf=(d)=>B()===d?Y.primary:Y.textMuted,Ff=(d)=>B()===d?_1.BOLD|_1.UNDERLINE:void 0,Qf=(d,s)=>d?s?_1.BOLD|_1.UNDERLINE:_1.BOLD:void 0;return(()=>{var d=W("box"),s=W("box"),S0=W("text"),N0=W("box"),Z1=W("box"),V1=W("text"),tf=W("box"),v1=W("box"),xJ=W("text"),M1=W("box"),wJ=W("text"),GY=W("text");return D(d,s),D(d,N0),D(d,M1),Z(d,"paddingLeft",2),Z(d,"paddingRight",2),Z(d,"gap",0),D(s,S0),Z(s,"flexDirection","row"),K(S0,()=>F("newTask.title")),D(N0,Z1),Z(N0,"gap",1),Z(N0,"paddingTop",1),Z(N0,"paddingBottom",1),K(N0,()=>{let m=()=>B()==="tabs",i=(l)=>l?Y.primary:Y.textMuted;return(()=>{var l=W("box"),w=W("text"),m0=W("text"),v0=W("text");return D(l,w),D(l,m0),D(l,v0),Z(l,"flexDirection","row"),Z(l,"gap",2),Z(w,"onMouseUp",()=>Jf("existing")),K(w,(()=>{var O0=I0(()=>z()==="existing");return()=>O0()?`\u25B8 ${F("newTask.tabs.existing")}`:` ${F("newTask.tabs.existing")}`})()),Z(m0,"onMouseUp",()=>Jf("clone")),K(m0,(()=>{var O0=I0(()=>z()==="clone");return()=>O0()?`\u25B8 ${F("newTask.tabs.clone")}`:` ${F("newTask.tabs.clone")}`})()),Z(v0,"onMouseUp",()=>Jf("adopt")),K(v0,(()=>{var O0=I0(()=>z()==="adopt");return()=>O0()?`\u25B8 ${F("newTask.tabs.adopt")}`:` ${F("newTask.tabs.adopt")}`})()),u((O0)=>{var c0=i(z()==="existing"),qf=Qf(z()==="existing",m()),Df=i(z()==="clone"),q1=Qf(z()==="clone",m()),s1=i(z()==="adopt"),XY=Qf(z()==="adopt",m());return c0!==O0.e&&(O0.e=Z(w,"fg",c0,O0.e)),qf!==O0.t&&(O0.t=Z(w,"attributes",qf,O0.t)),Df!==O0.a&&(O0.a=Z(m0,"fg",Df,O0.a)),q1!==O0.o&&(O0.o=Z(m0,"attributes",q1,O0.o)),s1!==O0.i&&(O0.i=Z(v0,"fg",s1,O0.i)),XY!==O0.n&&(O0.n=Z(v0,"attributes",XY,O0.n)),O0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),l})()},Z1),D(Z1,V1),D(Z1,tf),Z(Z1,"gap",0),K(V1,()=>F("newTask.field.engine")),D(tf,v1),D(tf,xJ),Z(tf,"flexDirection","row"),Z(tf,"gap",2),K(tf,b(Zf,{get each(){return X()},children:(m)=>{let i=()=>Q()===m;return(()=>{var l=W("text");return Z(l,"onMouseUp",()=>H(m)),K(l,()=>i()?"\u25B8 ":" ",null),K(l,m,null),u((w)=>{var m0=i()?Y.primary:Y.textMuted,v0=i()?_1.BOLD:void 0;return m0!==w.e&&(w.e=Z(l,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(l,"attributes",v0,w.t)),w},{e:void 0,t:void 0}),l})()}}),v1),Z(v1,"flexGrow",1),K(xJ,()=>F("newTask.hint.engineCycle")),K(N0,b(X0,{get when(){return z()==="existing"},get children(){return[(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.repo")),Z(l,"onInput",(w)=>{y0(!1),U(X1(w))}),Z(l,"onSubmit",()=>{if(!j().trim())return;yf()}),u((w)=>{var m0=Bf("repo"),v0=Ff("repo"),O0=j(),c0=f.defaultRepo,qf=B()==="repo";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"placeholder",c0,w.o)),qf!==w.i&&(w.i=Z(l,"focused",qf,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),b(X0,{get when(){return I0(()=>B()==="repo"&&x().length>0)()&&!H0()},get children(){var m=W("box");return Z(m,"gap",0),Z(m,"paddingLeft",2),K(m,b(X0,{get when(){return V0().start>0},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:V0().start})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),K(m,b(Zf,{get each(){return V0().items},children:(i,l)=>{let w=()=>V0().start+l(),m0=()=>w()===c(),v0=()=>$()==="saved"&&i===f.defaultRepo,O0=()=>$()==="saved"&&j().trim()===i,c0=()=>$()==="browse"?"/":"",qf=()=>v0()?` ${F("newTask.hint.currentDir")}`:"";return(()=>{var Df=W("text");return Z(Df,"wrapMode","none"),Z(Df,"onMouseUp",()=>k0(w())),K(Df,()=>m0()?"\u25B8 ":" ",null),K(Df,i,null),K(Df,c0,null),K(Df,qf,null),u((q1)=>{var s1=m0()?Y.primary:O0()?Y.accent:Y.textMuted,XY=m0()?_1.BOLD:void 0;return s1!==q1.e&&(q1.e=Z(Df,"fg",s1,q1.e)),XY!==q1.t&&(q1.t=Z(Df,"attributes",XY,q1.t)),q1},{e:void 0,t:void 0}),Df})()}}),null),K(m,b(X0,{get when(){return V0().start+V0().items.length<V0().total},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:V0().total-V0().start-V0().items.length})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),m}}),(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.fromBranch")),Z(l,"placeholder",LJ),Z(l,"onInput",(w)=>{R(!0),O(X1(w))}),Z(l,"onSubmit",()=>{O(W4(L(),T0(),r0())),R(!0),E0()}),u((w)=>{var m0=Bf("baseRef"),v0=Ff("baseRef"),O0=L(),c0=B()==="baseRef";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(X0,{get when(){return I0(()=>B()==="baseRef"&&T0().length===0)()&&P0()==null},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"gap",0),Z(m,"paddingLeft",2),Z(m,"paddingBottom",1),Z(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>w0().length===0);return()=>l()?F("newTask.hint.noBranchesFound"):F("newTask.hint.noMatchBranch")})()),u((l)=>Z(i,"fg",Y.textMuted,l)),m}}),b(X0,{get when(){return I0(()=>B()==="baseRef")()&&T0().length>0},get children(){var m=W("box");return Z(m,"gap",0),Z(m,"paddingLeft",2),Z(m,"paddingBottom",1),K(m,b(X0,{get when(){return M0().start>0},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:M0().start})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),K(m,b(Zf,{get each(){return M0().items},children:(i,l)=>{let w=()=>M0().start+l(),m0=()=>w()===r0(),v0=()=>L().trim()===i;return(()=>{var O0=W("text");return Z(O0,"wrapMode","none"),Z(O0,"onMouseUp",()=>{O(i),R(!0),P(w()),V("confirm")}),K(O0,()=>m0()?"\u25B8 ":" ",null),K(O0,i,null),u((c0)=>{var qf=m0()?Y.primary:v0()?Y.accent:Y.textMuted,Df=m0()?_1.BOLD:void 0;return qf!==c0.e&&(c0.e=Z(O0,"fg",qf,c0.e)),Df!==c0.t&&(c0.t=Z(O0,"attributes",Df,c0.t)),c0},{e:void 0,t:void 0}),O0})()}}),null),K(m,b(X0,{get when(){return M0().start+M0().items.length<M0().total},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:M0().total-M0().start-M0().items.length})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),m}})]}}),null),K(N0,b(X0,{get when(){return z()==="clone"},get children(){return[(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.gitUrl")),Z(l,"placeholder","https://github.com/user/repo.git"),Z(l,"onInput",(w)=>a(X1(w))),Z(l,"onSubmit",()=>{if(!S().trim())return;V("cloneParent")}),u((w)=>{var m0=Bf("cloneUrl"),v0=Ff("cloneUrl"),O0=S(),c0=B()==="cloneUrl";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.parentDir")),Z(l,"placeholder","~/"),Z(l,"onInput",(w)=>{q0(!1),g(X1(w))}),Z(l,"onSubmit",()=>wf()),u((w)=>{var m0=Bf("cloneParent"),v0=Ff("cloneParent"),O0=N(),c0=B()==="cloneParent";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(X0,{get when(){return B()==="cloneParent"},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,()=>F("newTask.hint.remembered")),u((l)=>Z(i,"fg",Y.textMuted,l)),m}}),b(X0,{get when(){return I0(()=>B()==="cloneParent"&&a0().length>0)()&&!n()},get children(){var m=W("box");return Z(m,"gap",0),Z(m,"paddingLeft",2),K(m,b(X0,{get when(){return _0().start>0},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:_0().start})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),K(m,b(Zf,{get each(){return _0().items},children:(i,l)=>{let w=()=>_0().start+l(),m0=()=>w()===p0();return(()=>{var v0=W("text"),O0=x0("/");return D(v0,O0),Z(v0,"wrapMode","none"),Z(v0,"onMouseUp",()=>v(w())),K(v0,()=>m0()?"\u25B8 ":" ",O0),K(v0,i,O0),u((c0)=>{var qf=m0()?Y.primary:Y.textMuted,Df=m0()?_1.BOLD:void 0;return qf!==c0.e&&(c0.e=Z(v0,"fg",qf,c0.e)),Df!==c0.t&&(c0.t=Z(v0,"attributes",Df,c0.t)),c0},{e:void 0,t:void 0}),v0})()}}),null),K(m,b(X0,{get when(){return _0().start+_0().items.length<_0().total},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:_0().total-_0().start-_0().items.length})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),m}}),(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.folderName")),Z(l,"onInput",(w)=>{z0(!0),y(X1(w))}),Z(l,"onSubmit",()=>V("cloneBaseRef")),u((w)=>{var m0=Bf("cloneFolder"),v0=Ff("cloneFolder"),O0=C(),c0=F("newTask.placeholder.folderName"),qf=B()==="cloneFolder";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"placeholder",c0,w.o)),qf!==w.i&&(w.i=Z(l,"focused",qf,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.baseBranch")),Z(l,"placeholder",LJ),Z(l,"onInput",(w)=>Y0(X1(w))),Z(l,"onSubmit",()=>void W0()),u((w)=>{var m0=Bf("cloneBaseRef"),v0=Ff("cloneBaseRef"),O0=t(),c0=B()==="cloneBaseRef";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(X0,{get when(){return T()},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"gap",0),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,()=>p()||F("newTask.clone.progressFallback")),u((l)=>Z(i,"fg",Y.textMuted,l)),m}})]}}),null),K(N0,b(X0,{get when(){return z()==="adopt"},get children(){return[(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.adoptFilter")),Z(l,"onInput",(w)=>o0(X1(w))),Z(l,"onSubmit",()=>A()),u((w)=>{var m0=Bf("adoptFilter"),v0=Ff("adoptFilter"),O0=b0(),c0=F("newTask.placeholder.adoptFilter"),qf=B()==="adoptFilter";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"placeholder",c0,w.o)),qf!==w.i&&(w.i=Z(l,"focused",qf,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),(()=>{var m=W("box"),i=W("text");return D(m,i),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,()=>F("newTask.adopt.repoLine",{path:W1(j().trim())||F("newTask.adopt.repoNone")})),u((l)=>Z(i,"fg",Y.textMuted,l)),m})(),b(X0,{get when(){return Af.loading},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,()=>F("newTask.hint.scanningWorktrees")),u((l)=>Z(i,"fg",Y.textMuted,l)),m}}),b(X0,{get when(){return I0(()=>!Af.loading)()&&o().length===0},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>(Af()??[]).length===0);return()=>l()?F("newTask.adopt.noUnlinked"):F("newTask.adopt.noMatch")})()),u((l)=>Z(i,"fg",Y.textMuted,l)),m}}),b(X0,{get when(){return o().length>0},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"gap",0),Z(m,"paddingLeft",2),K(m,b(X0,{get when(){return e().start>0},get children(){var l=W("text");return Z(l,"wrapMode","none"),K(l,()=>F("newTask.picker.moreAbove",{count:e().start})),u((w)=>Z(l,"fg",Y.textMuted,w)),l}}),i),K(m,b(Zf,{get each(){return B0()},children:(l,w)=>{let m0=()=>e().start+w(),v0=()=>m0()===l0(),O0=()=>t0().has(l.path),c0=()=>[l.dirty?"dirty":"",l.kobeManaged?"":"external"].filter(Boolean).join(",");return(()=>{var qf=W("text");return Z(qf,"wrapMode","none"),Z(qf,"onMouseUp",()=>{$0(m0()),C0(l.path)}),K(qf,()=>v0()?"\u25B8 ":" ",null),K(qf,()=>O0()?"[x] ":"[ ] ",null),K(qf,()=>l.branch,null),K(qf,(()=>{var Df=I0(()=>!!c0());return()=>Df()?` (${c0()})`:""})(),null),u((Df)=>{var q1=v0()?Y.primary:O0()?Y.accent:Y.textMuted,s1=v0()?_1.BOLD:void 0;return q1!==Df.e&&(Df.e=Z(qf,"fg",q1,Df.e)),s1!==Df.t&&(Df.t=Z(qf,"attributes",s1,Df.t)),Df},{e:void 0,t:void 0}),qf})()}}),i),K(m,b(X0,{get when(){return e().start+e().items.length<e().total},get children(){var l=W("text");return Z(l,"wrapMode","none"),K(l,()=>F("newTask.picker.moreBelow",{count:e().total-e().start-e().items.length})),u((w)=>Z(l,"fg",Y.textMuted,w)),l}}),i),Z(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>t0().size>0);return()=>l()?F("newTask.adopt.hintSelected",{count:t0().size}):F("newTask.adopt.hintDefault")})()),u((l)=>Z(i,"fg",Y.textMuted,l)),m}})]}}),null),K(N0,b(X0,{get when(){return P0()},get children(){var m=W("text"),i=x0("\u203B ");return D(m,i),Z(m,"wrapMode","word"),K(m,P0,null),u((l)=>Z(m,"fg",Y.error,l)),m}}),null),D(M1,wJ),D(M1,GY),Z(M1,"flexDirection","row"),Z(M1,"justifyContent","space-between"),Z(M1,"alignItems","center"),Z(M1,"paddingTop",1),Z(M1,"paddingBottom",1),K(wJ,()=>F("newTask.hint.legend")),Z(GY,"onMouseUp",()=>R0()),K(GY,(()=>{var m=I0(()=>!!T());return()=>m()?F("newTask.button.cloning"):I0(()=>B()==="confirm")()?F("newTask.button.createFocused"):F("newTask.button.create")})()),u((m)=>{var i=_1.BOLD,l=Y.text,w=Bf("engine"),m0=Ff("engine"),v0=Y.textMuted,O0=Y.textMuted,c0=B()==="confirm"?Y.primary:Y.text,qf=B()==="confirm"?_1.BOLD:void 0;return i!==m.e&&(m.e=Z(S0,"attributes",i,m.e)),l!==m.t&&(m.t=Z(S0,"fg",l,m.t)),w!==m.a&&(m.a=Z(V1,"fg",w,m.a)),m0!==m.o&&(m.o=Z(V1,"attributes",m0,m.o)),v0!==m.i&&(m.i=Z(xJ,"fg",v0,m.i)),O0!==m.n&&(m.n=Z(wJ,"fg",O0,m.n)),c0!==m.s&&(m.s=Z(GY,"fg",c0,m.s)),qf!==m.h&&(m.h=Z(GY,"attributes",qf,m.h)),m},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),d})()}var K4=k(()=>{h();h();h();h();h();h();h();h();G1();K1();Wf();xf();UQ();b1();LQ();P1();X4();Z8()});function rN(f,J,Y,z){return new Promise((G)=>{f.replace(()=>b(V4,{defaultRepo:J,savedRepos:Y,get defaultCloneParent(){return z?.defaultCloneParent},get defaultVendor(){return z?.defaultVendor},get availableVendors(){return z?.availableVendors},get discoverAdoptable(){return z?.discoverAdoptable},onSubmit:(X)=>G(X),onCancel:()=>G(void 0)}),()=>G(void 0)),f.setSize("medium")})}var FQ;var bG=k(()=>{h();K4();Z8();FQ={show:rN}});function U4(f,J){return[{key:"tab",cmd:()=>J.cycleField(1)},{key:"shift+tab",cmd:()=>J.cycleField(-1)},{key:"ctrl+e",cmd:()=>J.stepEngine(1)},...f==="engine"?[{key:"left",cmd:()=>J.stepEngine(-1)},{key:"right",cmd:()=>J.stepEngine(1)},{key:"return",cmd:()=>J.commit()}]:[]]}import{TextAttributes as D4}from"@opentui/core";function pN(f){let J=vf(),{theme:Y}=i0(),[z,G]=r("prompt"),[X,q]=r(""),[Q,H]=r(f.defaultVendor),[B,V]=r(f.defaultBaseRef);function j(M){let R=OQ.indexOf(z());G(OQ[(R+M+OQ.length)%OQ.length]??"prompt")}function U(M){let R=f.engines;if(R.length===0)return;if(M>0){H((a)=>ZY(R,a));return}let S=Math.max(0,R.indexOf(Q()));H(R[(S-1+R.length)%R.length]??Q())}function L(){let M=X().trim();if(!M){G("prompt");return}f.onSubmit({prompt:M,vendor:Q(),baseRef:B().trim()||f.defaultBaseRef}),J.clear()}Uf(()=>({enabled:!0,bindings:U4(z(),{cycleField:j,stepEngine:U,commit:L})}));let O=(M)=>z()===M?Y.accent:Y.textMuted;return(()=>{var M=W("box"),R=W("box"),S=W("text"),a=W("text"),N=W("box"),g=W("text"),C=W("input"),y=W("box"),_=W("text"),z0=W("box"),t=W("text"),Y0=W("input"),T=W("box"),Q0=W("text");return D(M,R),D(M,N),D(M,y),D(M,z0),D(M,T),Z(M,"paddingLeft",2),Z(M,"paddingRight",2),Z(M,"gap",1),D(R,S),D(R,a),Z(R,"flexDirection","row"),Z(R,"justifyContent","space-between"),K(S,()=>F("quickTask.title",{repoLabel:f.repoLabel})),Z(a,"onMouseUp",()=>f.onCancel()),K(a,()=>F("quickTask.esc")),D(N,g),D(N,C),Z(N,"gap",0),K(g,()=>F("quickTask.promptLabel")),Z(C,"onInput",(p)=>q(X1(p))),Z(C,"onSubmit",()=>L()),D(y,_),Z(y,"flexDirection","row"),Z(y,"gap",2),K(_,()=>F("quickTask.engineLabel")),K(y,b(Zf,{get each(){return f.engines},children:(p)=>(()=>{var D0=W("text");return Z(D0,"onMouseUp",()=>{H(p),G("engine")}),K(D0,()=>f.engineLabel(p)),u((g0)=>{var $=Q()===p?Y.primary:Y.textMuted,E=Q()===p?D4.BOLD:void 0;return $!==g0.e&&(g0.e=Z(D0,"fg",$,g0.e)),E!==g0.t&&(g0.t=Z(D0,"attributes",E,g0.t)),g0},{e:void 0,t:void 0}),D0})()}),null),D(z0,t),D(z0,Y0),Z(z0,"gap",0),K(t,()=>F("quickTask.branchLabel")),Z(Y0,"onInput",(p)=>V(X1(p))),Z(Y0,"onSubmit",()=>L()),D(T,Q0),Z(T,"paddingBottom",1),K(Q0,()=>F("quickTask.legend")),u((p)=>{var D0=D4.BOLD,g0=Y.text,$=Y.textMuted,E=O("prompt"),f0=X(),I=F("quickTask.promptPlaceholder"),G0=z()==="prompt",x=O("engine"),c=O("branch"),Z0=B(),V0=f.defaultBaseRef,H0=z()==="branch",y0=Y.textMuted;return D0!==p.e&&(p.e=Z(S,"attributes",D0,p.e)),g0!==p.t&&(p.t=Z(S,"fg",g0,p.t)),$!==p.a&&(p.a=Z(a,"fg",$,p.a)),E!==p.o&&(p.o=Z(g,"fg",E,p.o)),f0!==p.i&&(p.i=Z(C,"value",f0,p.i)),I!==p.n&&(p.n=Z(C,"placeholder",I,p.n)),G0!==p.s&&(p.s=Z(C,"focused",G0,p.s)),x!==p.h&&(p.h=Z(_,"fg",x,p.h)),c!==p.r&&(p.r=Z(t,"fg",c,p.r)),Z0!==p.d&&(p.d=Z(Y0,"value",Z0,p.d)),V0!==p.l&&(p.l=Z(Y0,"placeholder",V0,p.l)),H0!==p.u&&(p.u=Z(Y0,"focused",H0,p.u)),y0!==p.c&&(p.c=Z(Q0,"fg",y0,p.c)),p},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0}),M})()}function _N(f,J){return new Promise((Y)=>{f.replace(()=>b(pN,tU(J,{onSubmit:(z)=>Y(z),onCancel:()=>Y(void 0)})),()=>Y(void 0)),f.setSize("medium")})}var OQ,L4;var M4=k(()=>{h();h();h();h();h();h();h();Wf();K1();xf();G1();b1();P1();bG();OQ=["prompt","engine","branch"];L4={show:_N}});async function F4(f={}){let J=f.logTag??"orch-connect",Y=f.connect??p1,z=null;try{let G=await Y();if(!G)return dJ(J,"no daemon running \u2014 caller degrades"),null;return z=new j1(G,{...f.orchestratorOptions,channels:f.channels}),await z.init(),z}catch(G){return WY(J,G),z?.dispose(),null}}var O4=k(()=>{eY();y1();PY()});function A4(f){let[J,Y]=r(f.initial??"sidebar"),[z,G]=r(0),X=Y1();function q(j){if(G((L)=>L+1),J()===j)return;let U=X?.currentFocusedRenderable;if(U&&!U.isDestroyed)try{U.blur()}catch{}Y(j)}function Q(j){let L=(AQ.indexOf(J())+j+AQ.length)%AQ.length;q(AQ[L])}let H=new Map;function B(j){let U=H.get(j);if(!U)U=()=>J()===j,H.set(j,U);return U}let V={focused:J,is:B,setFocused:q,cycle:Q,refocusTick:z};return b(oN.Provider,{value:V,get children(){return f.children}})}var AQ,oN;var g4=k(()=>{h();h();Wf();AQ=["sidebar","workspace","files","terminal"],oN=gJ(null)});function R4(){for(let f of vY){let J=sN.get(f.id);if(!J)continue;let Y=f;Y.keys=[...J.keys],Y.hint=J.hint?{...J.hint}:void 0}}function C4(){tN((f)=>f+1)}function Q8(f){return eN.get(f)}function fy(f){return Q8(f)?.keys??[]}function mY(f){let J=[];for(let Y in f){let z=f[Y];if(!z)continue;let G=fy(Y);if(G.length===0){console.warn(`[kobe/keybindings] bindByIds: id="${Y}" has no chords (or doesn't exist in KobeKeymap)`);continue}G.forEach((X,q)=>J.push({key:X,cmd:z,slot:q}))}return J}var vY,sN,q8,tN,eN;var SG=k(()=>{Wf();vY=[{id:"help.open",scope:"global",keys:["f1"],category:"Global",description:"Show keybindings help",hint:{keys:"F1",label:"help",pin:"right"}},{id:"task.new",scope:"sidebar",keys:["n"],category:"Sidebar",description:"New task",hint:{keys:"n",label:"new"}},{id:"task.openEditor",scope:"global",keys:["ctrl+o"],category:"Global",description:"Open active task worktree in editor"},{id:"settings.open",scope:"global",keys:["ctrl+,"],category:"Global",description:"Open settings"},{id:"settings.open.sidebar",scope:"sidebar",keys:["s"],category:"Sidebar",description:"Open settings",hint:{keys:"s",label:"settings",status:!1}},{id:"app.quit",scope:"sidebar",keys:["q"],category:"Sidebar",description:"Quit (with confirm)",hint:{keys:"q",label:"quit",status:!1}},{id:"focus.sidebar",scope:"workspace",keys:["ctrl+q"],category:"Workspace",description:"Back to sidebar (tasks)",hint:{keys:"ctrl+q",label:"tasks"}},{id:"focus.numeric",scope:"global",keys:["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],category:"Navigation",description:"Jump to pane (h=sidebar, j=workspace, k=files, l=terminal)",hint:{keys:"ctrl+hjkl",label:"focus",pin:"right",status:!1}},{id:"chat.interrupt",scope:"workspace",keys:[],category:"Workspace",description:"Interrupt current turn (esc while streaming)"},{id:"sidebar.nav",scope:"sidebar",keys:["j","k","down","up"],category:"Sidebar",description:"Move cursor up/down",hint:{keys:"j/k",label:"nav"}},{id:"sidebar.select",scope:"sidebar",keys:["return"],category:"Sidebar",description:"Open the selected task",hint:{keys:"enter",label:"select"}},{id:"sidebar.goto",scope:"sidebar",keys:["g"],category:"Sidebar",description:"Top / bottom of list (gg or shift-G)"},{id:"sidebar.rename",scope:"sidebar",keys:["r"],category:"Sidebar",description:"Rename task",hint:{keys:"r",label:"rename",status:!1}},{id:"sidebar.archive",scope:"sidebar",keys:["a"],category:"Sidebar",description:"Toggle archive",hint:{keys:"a",label:"archive",status:!1}},{id:"sidebar.localMerge",scope:"sidebar",keys:["m"],category:"Sidebar",description:"Local merge task into parent repo (Shift+M)",hint:{keys:"M",label:"merge",status:!1}},{id:"sidebar.pin",scope:"sidebar",keys:["p"],category:"Sidebar",description:"Pin / unpin task at top (Shift+P)",hint:{keys:"P",label:"pin",status:!1}},{id:"sidebar.view",scope:"sidebar",keys:["[","]"],category:"Sidebar",description:"Switch view (Working session \u2194 Archives)",hint:{keys:"[/]",label:"view",status:!1}},{id:"sidebar.sort",scope:"sidebar",keys:["t"],category:"Sidebar",description:"Switch task sort (default \u2194 recent)",hint:{keys:"t",label:"sort",status:!1}},{id:"sidebar.projectFilter",scope:"sidebar",keys:["ctrl+p"],category:"Sidebar",description:"Cycle task project filter",hint:{keys:"ctrl+p",label:"project",status:!1}},{id:"sidebar.delete",scope:"sidebar",keys:["d"],category:"Sidebar",description:"Delete task (with confirm)",hint:{keys:"d",label:"delete",status:!1}},{id:"sidebar.search.enter",scope:"sidebar",keys:["/"],category:"Sidebar",description:"Search tasks (fuzzy filter)",hint:{keys:"/",label:"search"}},{id:"sidebar.search.nav",scope:"sidebar",keys:["down","up"],category:"Sidebar",description:"Move highlight in search results"},{id:"sidebar.search.submit",scope:"sidebar",keys:["return"],category:"Sidebar",description:"Select search match and exit search"},{id:"sidebar.search.cancel",scope:"sidebar",keys:["escape"],category:"Sidebar",description:"Cancel search (restore prior selection)"},{id:"tasks.openWorktree",scope:"sidebar",keys:["o"],category:"Tasks pane",description:"Open selected task's worktree in your editor",hint:{keys:"o",label:"open wt",status:!1}},{id:"tasks.renameBranch",scope:"sidebar",keys:["b"],category:"Tasks pane",description:"Rename the selected task's git branch",hint:{keys:"b",label:"branch",status:!1}},{id:"tasks.cycleEngine",scope:"sidebar",keys:["v"],category:"Tasks pane",description:"Cycle engine vendor (claude \u2194 codex \u2194 \u2026) \u2014 applies on reopen",hint:{keys:"v",label:"engine",status:!1}},{id:"tasks.update",scope:"sidebar",keys:["u"],category:"Tasks pane",description:"Open the update page (when a new version is available)",hint:{keys:"u",label:"update",status:!1}},{id:"tasks.focusEngine",scope:"sidebar",keys:["right"],category:"Tasks pane",description:"Focus the engine pane of the current window",hint:{keys:"\u2192",label:"engine",status:!1}},{id:"tasks.toggleKeys",scope:"sidebar",keys:["?"],category:"Tasks pane",description:"Collapse / expand the keys legend",hint:{keys:"?",label:"fold keys",status:!1}},{id:"tmux.quickTask",scope:"global",keys:[],category:"Workspace (tmux)",description:"Quick new task (tmux prefix, then f)",hint:{keys:"prefix f",label:"new task",status:!1}},{id:"tmux.engineTab",scope:"global",keys:[],category:"Workspace (tmux)",description:"Open the engine in a new tab (tmux prefix, then t)",hint:{keys:"prefix t",label:"engine tab",status:!1}},{id:"tmux.layout.workspaceSplit",scope:"global",keys:[],category:"Workspace (tmux)",description:"Add a temporary workspace split (tmux prefix, then s)",hint:{keys:"prefix s",label:"split",status:!1}},{id:"tmux.layout.workspaceClose",scope:"global",keys:[],category:"Workspace (tmux)",description:"Close the focused temporary workspace split (tmux prefix, then x)",hint:{keys:"prefix x",label:"close split",status:!1}},{id:"tmux.layout.workspaceReset",scope:"global",keys:[],category:"Workspace (tmux)",description:"Close all temporary workspace splits (tmux prefix, then r)",hint:{keys:"prefix r",label:"reset splits",status:!1}},{id:"tmux.layout.tasksToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Hide / restore the Tasks pane (tmux prefix, then a)",hint:{keys:"prefix a",label:"tasks pane",status:!1}},{id:"tmux.layout.opsToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Toggle the file/Ops pane (tmux prefix, then o)",hint:{keys:"prefix o",label:"file pane",status:!1}},{id:"tmux.layout.terminalToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Hide / restore the terminal pane (tmux prefix, then z)",hint:{keys:"prefix z",label:"terminal",status:!1}},{id:"tmux.layout.zenToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Zen mode \u2014 collapse to the engine pane (tmux prefix, then space)",hint:{keys:"prefix space",label:"zen",status:!1}},{id:"chat.send",scope:"workspace",keys:[],category:"Workspace",description:"Send message (composer)",hint:{keys:"enter",label:"send"}},{id:"chat.newline",scope:"workspace",keys:[],category:"Workspace",description:"Newline in composer",hint:{keys:"shift+enter",label:"newline"}},{id:"chat.cycle-mode",scope:"workspace",keys:[],category:"Workspace",description:"Cycle permission mode (composer)",hint:{keys:"shift+tab",label:"mode"}},{id:"chat.steer",scope:"workspace",keys:[],category:"Workspace",description:"Steer (interrupt + send) \u2014 mid-stream only",hint:{keys:"ctrl+enter",label:"steer",status:!1}},{id:"chat.tab.new",scope:"workspace",keys:["ctrl+t"],category:"Workspace",description:"New chat tab",hint:{keys:"ctrl+t",label:"new tab"}},{id:"chat.fork.new",scope:"workspace",keys:["ctrl+f"],category:"Workspace",description:"Quick-fork: create child task seeded with current repo/branch/model",hint:{keys:"ctrl+f",label:"fork"}},{id:"chat.session.resume",scope:"workspace",keys:["ctrl+y"],category:"Workspace",description:"Resume a prior session in this task's worktree",hint:{keys:"ctrl+y",label:"resume",status:!1}},{id:"chat.tab.close",scope:"workspace",keys:["ctrl+w"],category:"Workspace",description:"Close chat tab",hint:{keys:"ctrl+w",label:"close tab",status:!1}},{id:"chat.tab.rename",scope:"workspace",keys:["f2"],category:"Workspace",description:"Rename active chat tab",hint:{keys:"f2",label:"rename tab",status:!1}},{id:"chat.tab.cycle-next",scope:"workspace",keys:["ctrl+]"],category:"Workspace",description:"Next chat tab",hint:{keys:"ctrl+]",label:"next tab",status:!1}},{id:"chat.tab.cycle-prev",scope:"workspace",keys:["ctrl+["],category:"Workspace",description:"Previous chat tab",hint:{keys:"ctrl+[",label:"prev tab",status:!1}},{id:"chat.question.nav",scope:"workspace",keys:["j","k","down","up"],category:"Workspace",description:"Move highlight in question picker",hint:{keys:"j/k",label:"pick",status:!1}},{id:"chat.question.toggle",scope:"workspace",keys:["space"],category:"Workspace",description:"Toggle highlighted option in question picker",hint:{keys:"space",label:"toggle",status:!1}},{id:"chat.question.submit",scope:"workspace",keys:["return"],category:"Workspace",description:"Advance / submit question picker",hint:{keys:"enter",label:"submit",status:!1}},{id:"chat.question.pick-number",scope:"workspace",keys:["1","2","3","4","5","6","7","8","9"],category:"Workspace",description:"Pick option by number in question picker",hint:{keys:"1-9",label:"pick",status:!1}},{id:"files.nav",scope:"files",keys:["j","k","down","up"],category:"Files",description:"Move cursor up/down",hint:{keys:"j/k",label:"nav"}},{id:"files.hierarchy",scope:"files",keys:["h","l","left","right"],category:"Files",description:"Collapse / expand tree level",hint:{keys:"h/l",label:"level"}},{id:"files.open",scope:"files",keys:["return"],category:"Files",description:"Open file in nvim (diff vs HEAD when changed)",hint:{keys:"enter",label:"open"}},{id:"files.tab",scope:"files",keys:["[","]"],category:"Files",description:"Switch tab (cycle All / Changes)",hint:{keys:"[/]",label:"tab",status:!1}},{id:"files.refresh",scope:"files",keys:["r"],category:"Files",description:"Refresh",hint:{keys:"r",label:"refresh",status:!1}},{id:"files.openExternal",scope:"files",keys:["o"],category:"Files",description:"Open file in system default app (audio / video / pdf preview)",hint:{keys:"o",label:"open external",status:!1}},{id:"files.mention",scope:"files",keys:["a"],category:"Files",description:"Inject @<path> mention into the engine pane",hint:{keys:"a",label:"@mention"}},{id:"files.createPR",scope:"files",keys:["p"],category:"Files",description:"Create PR from the current task",hint:{keys:"p",label:"create PR"}},{id:"terminal.scroll-up",scope:"terminal",keys:["ctrl+pageup"],category:"Terminal",description:"Scroll scrollback up",hint:{keys:"ctrl+pgup",label:"scroll",status:!1}},{id:"terminal.scroll-down",scope:"terminal",keys:["ctrl+pagedown"],category:"Terminal",description:"Scroll scrollback down"},{id:"terminal.reset",scope:"terminal",keys:["f5"],category:"Terminal",description:"Reset terminal \u2014 kill the current shell and respawn",hint:{keys:"f5",label:"reset"}},{id:"dialog.cancel",scope:"global",keys:[],category:"Dialog",description:"Close the top dialog (esc)"},{id:"dialog.newtask.tab.cycle",scope:"global",keys:[],category:"Dialog",description:"Switch New Task tab (Existing / New Repo)",hint:{keys:"ctrl+[/]",label:"tab"}}],sN=new Map(vY.map((f)=>[f.id,{keys:[...f.keys],hint:f.hint?{...f.hint}:void 0}]));[q8,tN]=r(0);eN=new Map(vY.map((f)=>[f.id,f]))});function gQ(){if(cY)return cY;let f=Lq();if(!f.exists)return cY={path:f.path,exists:!1,applied:[],warnings:[]},cY;let J=[...f.warnings],Y=Fq(f.doc,process.platform,{chordOptsFor:PB});J.push(...Y.warnings);let z=Y.entries.filter((Q)=>Q.id.startsWith("tmux.")),G=Y.entries.filter((Q)=>!Q.id.startsWith("tmux.")),X=c7(vY,G);J.push(...X.warnings);let q=[...X.applied];if(z.length>0){let Q=hB(z);J.push(...Q.warnings);for(let H of Q.overridden){if(H===SJ){q.push({id:H,keys:Q.focus.map((j)=>j?.chord??"").filter((j)=>j!==""),defaultKeys:yY});continue}let B=Q.binds[H];q.push({id:H,keys:B?[B.chord]:[],defaultKeys:[Oz[H]]});let V=vY.find((j)=>j.id===H);if(V?.hint)V.hint.keys=B?`${ZG(H)?"prefix ":""}${B.chord}`:"\u2014"}}for(let Q of J)console.warn(`[kobe/keybindings] ${Q}`);return cY={path:f.path,exists:!0,applied:q,warnings:J},cY}function k4(){return cY??gQ()}function N4(){cY=null,m7(),l7(),R4();let f=gQ();return C4(),f}var cY=null;var H8=k(()=>{xB();gq();Oq();SG()});var Jy=250,IG,y4;var mX=k(()=>{CG();pY();$j();({use:IG,provider:y4}=VQ({name:"KV",init:()=>{let[f,J]=uJ(nf()),Y=new Set,z=null;function G(Q){if(Y.size===0)return!0;try{let H={};for(let B of Y)H[B]=f[B];return rY(H),Y.clear(),!0}catch(H){return console.error(`[kobe] kv ${Q} failed:`,H),!1}}function X(){if(z)clearTimeout(z);z=setTimeout(()=>{z=null,G("write")},Jy)}let q={get ready(){return!0},get store(){return f},signal(Q,H){if(f[Q]===void 0)J(Q,H);return[()=>q.get(Q),(B)=>q.set(Q,B)]},get(Q,H){return f[Q]??H},set(Q,H){J(Q,H),Y.add(Q),X()},flush(){if(z)clearTimeout(z),z=null;return G("flush")},clear(){for(let Q of Object.keys(f))J(Q,void 0);if(z)clearTimeout(z),z=null;Y.clear();try{D9({})}catch(Q){console.error("[kobe] kv clear write failed:",Q)}}};return q}}))});var RQ="../pulse-n3cq1btw.wav";var b4=()=>{};import{existsSync as zy,mkdirSync as Gy}from"fs";import{tmpdir as Xy}from"os";import{basename as Zy,isAbsolute as qy,join as B8,resolve as Qy}from"path";function By(f,J,Y){if(f==="ffplay")return[f,"-autoexit","-nodisp","-af",`volume=${Y}`,J];if(f==="mpv")return[f,"--no-video","--audio-display=no","--volume",String(Math.round(Y*100)),J];if(f==="mpg123"||f==="mpg321")return[f,"-g",String(Math.round(Y*100)),J];if(f==="mplayer")return[f,"-vo","null","-volume",String(Math.round(Y*100)),J];if(f==="afplay"||f==="omxplayer"||f==="aplay"||f==="cmdmp3")return[f,J];if(f==="play")return[f,"-v",String(Y),J];if(f==="cvlc")return[f,`--gain=${Y}`,"--play-and-exit",J];return[f,"-c",`(New-Object Media.SoundPlayer '${J.replace(/'/g,"''")}').PlaySync()`]}function jy(){if(CQ!==void 0)return CQ;let J=(process.env.PATH??"").split(":").filter(Boolean);return CQ=Hy.find((Y)=>J.some((z)=>zy(B8(z,Y))))??null,CQ}async function Wy(){return T4??=(async()=>{Gy(I4,{recursive:!0});let f=B8(I4,Zy(S4)),J=Bun.file(f);if(await J.exists())return f;return await Bun.write(J,Bun.file(S4)),f})(),T4}function u4(f=0.4){let J=jy();if(!J)return;Wy().then((Y)=>{try{Bun.spawn(By(J,Y,f),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var S4,I4,Hy,CQ,T4;var E4=k(()=>{b4();S4=qy(RQ)?RQ:Qy(import.meta.dir,RQ),I4=B8(Xy(),"kobe-sfx"),Hy=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function x4(f,J){return`${f}:${J}`}function h4(f){let J=IG(),[Y,z]=r([]),[G,X]=r(new Map),q=0;function Q(j){if(X((U)=>{let L=new Map(U),O=x4(j.taskId,j.tabId),M=U.get(O);if(M==="needs_input"||M==="error")return U;return L.set(O,j.kind),L}),J.get("notifications.sound.enabled",!0)!==!1){try{process.stdout.write("\x07")}catch{}u4()}if(J.get("notifications.toast.enabled",!0)!==!1){let U=++q,L={id:U,kind:j.kind,taskId:j.taskId,tabId:j.tabId,title:j.title};z((O)=>[...O,L]),setTimeout(()=>H(U),Vy)}}function H(j){z((U)=>U.filter((L)=>L.id!==j))}function B(j,U){X((L)=>{let O=x4(j,U);if(!L.has(O))return L;let M=new Map(L);return M.delete(O),M})}let V={toasts:Y,unread:G,notify:Q,dismiss:H,markRead:B};return b(w4.Provider,{value:V,get children(){return f.children}})}function kQ(){let f=u1(w4);if(!f)throw Error("useNotifications must be used within a NotificationsProvider");return f}var Vy=4500,w4;var NQ=k(()=>{h();Wf();E4();mX();w4=gJ()});function j8(f,J){if(typeof J.theme==="string"&&J.theme.length>0&&J.theme!==f.selectedTheme()){if(!f.hasTheme(J.theme))f.reloadUserThemes();if(f.hasTheme(J.theme))f.setTheme(J.theme)}if(typeof J.transparentBackground==="boolean"&&J.transparentBackground!==f.transparentBackground())f.setTransparentBackground(J.transparentBackground);if(J.focusAccent===null||typeof J.focusAccent==="string"){let Y=Uy(J.focusAccent);if(Y&&Y!==f.focusAccent())f.setFocusAccent(Y)}}function Uy(f){if(f===null)return"primary";return Ky.includes(f)?f:null}var Ky;var P4=k(()=>{Ky=["primary","success","info"]});import{readFileSync as Dy}from"fs";function v4(f){try{let J=JSON.parse(Dy(m1(),"utf8")),Y=typeof J.activeTheme==="string"&&uX(J.activeTheme)?J.activeTheme:f,z=J.transparentBackground===!0,G=typeof J.focusAccent==="string"&&yz.includes(J.focusAccent)?J.focusAccent:null,X=EX(J[yQ])?J[yQ]:NG;return{theme:Y,transparent:z,focusAccent:G,locale:X}}catch{return{theme:f,transparent:!1,focusAccent:null,locale:NG}}}var yQ="locale";var W8=k(()=>{lf();xf();yG()});function My(f){if(f)CZ(f);gQ();for(let{name:J,theme:Y}of UX())pj(J,Y)}function Fy(f){let J={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return f?{...J,onDestroy:f}:J}function Oy(f){let J=()=>f.children,Y=()=>f.notifications?b(h4,{get children(){return J()}}):J(),z=()=>b(r6,{get children(){return Y()}}),G=()=>f.focus?b(A4,{initial:"sidebar",get children(){return z()}}):z(),X=()=>f.kv?b(y4,{get children(){return G()}}):G();return b(W6,{mode:"dark",get theme(){return f.theme},get children(){return X()}})}function Ay(f){let J=i0(),Y={selectedTheme:()=>J.selected,hasTheme:(Q)=>J.has(Q),setTheme:(Q)=>J.set(Q),reloadUserThemes:()=>{for(let{name:Q,theme:H}of UX())pj(Q,H)},transparentBackground:()=>J.transparentBackground,setTransparentBackground:(Q)=>J.setTransparentBackground(Q),focusAccent:()=>J.focusAccent,setFocusAccent:(Q)=>J.setFocusAccent(Q)};j8(Y,{theme:f.boot.theme,transparentBackground:f.boot.transparent,focusAccent:f.boot.focusAccent}),xX(f.boot.locale);let[z,G]=r(null),X=!1;f1(()=>{(async()=>{let Q=await F4({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!Q)return;if(X){Q.dispose();return}G(Q)})()}),zf(()=>{let Q=z()?.uiPrefsSignal()();if(!Q)return;if(j8(Y,Q),EX(Q.locale))xX(Q.locale)});let q=null;return zf(()=>{let Q=z()?.keybindingsRevSignal()();if(Q==null)return;if(q===null||Q===q){q=Q;return}q=Q,N4()}),mf(()=>{X=!0,z()?.dispose()}),null}async function L1(f){My(f.logContext);let J=v4(Ly),Y=await f.setup(J),z=f.providers?.kv??!0,G=f.providers?.focus??!0,X=f.providers?.notifications??!1;await X6(()=>b(Oy,{get theme(){return J.theme},kv:z,focus:G,notifications:X,get children(){return[b(Ay,{boot:J}),I0(()=>Y.root())]}}),Fy(Y.onDestroy))}var Ly="claude";var nY=k(()=>{h();h();h();eY();Wf();O4();g4();H8();mX();NQ();xf();Nq();G1();P1();P4();W8()});async function V8(f,J,Y,z,G={}){let X=Lf(J.id);if(await Hf(X))return!0;let q=J.worktreePath;if(!q)q=await f.ensureWorktree(J.id);if(!q)throw Error(`task ${J.id} has no worktree`);let{ensureSession:Q}=await Promise.resolve().then(() => (J1(),r1)),{resolveEngineLaunchInit:H}=await Promise.resolve().then(() => (GG(),EB)),B=H(Y,q,{kind:G.includeInitPrompt?"repo-init":"none"});if(!await Q({name:X,cwd:q,command:N1(z),taskId:J.id,vendor:z,repo:Y,launchInit:B}))throw Error(`failed to start tmux session for ${J.id}`);return!1}async function bQ(f,J,Y,z,G={}){await V8(f,J,Y,z,G),await f.setActiveTask(J.id).catch(()=>{});let{prepareWindowForSwitch:X}=await Promise.resolve().then(() => (J1(),r1));await X(Lf(J.id)),await h0(["switch-client","-t",`=${Lf(J.id)}`])}var K8=k(()=>{E1();Tf()});var m4={};jf(m4,{startNewTaskHost:()=>gy,NewTaskPage:()=>SQ});function SQ(f){let{theme:J}=i0(),Y=vf();f1(()=>{z()});async function z(){let G=c1(),X=f.defaultRepo||G[0]||process.cwd(),q=kf("lastSelectedVendor")??Sf,Q=await iJ(),H=f.orchestrator,B=await FQ.show(Y,X,G,{defaultVendor:q,availableVendors:Q,discoverAdoptable:H?(j)=>H.discoverAdoptableWorktrees(j):void 0});if(!B)process.exit(0);if(af("lastSelectedVendor",B.vendor),vJ(B.repo),!H)console.error("[kobe new-task] no daemon; cannot create task"),process.exit(1);let V;try{if(B.mode==="adopt")for(let j of B.adopt)V=await H.adoptWorktree({repo:B.repo,worktreePath:j.worktreePath,branch:j.branch,vendor:B.vendor});else V=await H.createTask({repo:B.repo,baseRef:B.baseRef,vendor:B.vendor})}catch(j){console.error("[kobe new-task] task.create/adopt failed:",j),process.exit(1)}if(V)try{await bQ(H,V,B.repo,B.vendor,{includeInitPrompt:B.mode!=="adopt"})}catch(j){console.error("[kobe new-task] auto-enter failed:",j)}process.exit(0)}return(()=>{var G=W("box");return Z(G,"flexDirection","column"),Z(G,"flexGrow",1),u((X)=>Z(G,"backgroundColor",J.background,X)),G})()}async function gy(f){await L1({setup:async()=>{let J=null;try{let Y=await UJ(),z=new j1(Y);await z.init(),J=z}catch(Y){console.error("[kobe new-task] daemon unavailable; cannot create task:",Y)}return{root:()=>b(SQ,{get defaultRepo(){return f.defaultRepo},orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var U8=k(()=>{h();h();h();h();y1();Wf();PY();fz();gf();S1();bG();xf();nY();K8();P1()});function IQ(f,J,Y,z,G={}){if(f.length===0)return J;let X=new Map;for(let H of f)X.set(Y(H),H);let q=f.length===J.length,Q=Array(J.length);for(let H=0;H<J.length;H++){let B=J[H],V=X.get(Y(B));if(V&&z(V,B)&&(!G.samePosition||f[H]===V)){if(Q[H]=V,q&&f[H]!==V)q=!1}else Q[H]=B,q=!1}return q?f:Q}function c4(f,J){if(!f)return!0;let Y=f.toLowerCase(),z=J.toLowerCase(),G=0;for(let X=0;X<z.length&&G<Y.length;X++)if(z.charCodeAt(X)===Y.charCodeAt(G))G++;return G===Y.length}function Ry(f,J){let Y=J==="archived";return f.filter((z)=>z.archived===Y)}function D8(f,J,Y,z="default",G){let X=Ry(f,J),q=Y?.trim()??"",Q=G?o1(G):null,H=q?X.filter((M)=>c4(q,`${M.title} ${MJ(M.repo)}`)):X,B=[],V=[],j=[],U=new Set;for(let M of H){if(M.kind==="main"){let R=o1(M.repo);if(U.has(R))continue;U.add(R),B.push(M);continue}if(Q&&o1(M.repo)!==Q)continue;if(M.pinned===!0)V.push(M);else j.push(M)}if(B.sort((M,R)=>MJ(M.repo).localeCompare(MJ(R.repo))),z==="recent")V.sort(n4),j.sort(n4);let L=[],O=0;for(let M of B)L.push({kind:"task",task:M,flatIndex:O}),O++;for(let M of V)L.push({kind:"task",task:M,flatIndex:O}),O++;for(let M of j)L.push({kind:"task",task:M,flatIndex:O}),O++;return L}function n4(f,J){let Y=d4(J)-d4(f);if(Y!==0)return Y;return String(J.id).localeCompare(String(f.id))}function d4(f){let J=Date.parse(f.updatedAt||f.createdAt);return Number.isFinite(J)?J:0}function MJ(f){let J=f.split("/").filter(Boolean);return J[J.length-1]??f}function o1(f){return f.trim().replace(/[\\/]+$/,"")||f}function Cy(f,J){let Y=MJ(f);if(!J.some((G)=>G!==f&&MJ(G)===Y))return Y;return f.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function i4(f,J){let Y=J==="archived",z=new Map;for(let X of f){let q=o1(X.repo),Q=z.get(q)??{repo:X.repo,count:0};if(X.kind==="main")Q.repo=X.repo;else if(X.archived===Y)Q.count+=1;z.set(q,Q)}let G=[...z.values()].map((X)=>X.repo);return[...z.values()].map((X)=>({repo:X.repo,label:Cy(X.repo,G),count:X.count})).sort((X,q)=>X.label.localeCompare(q.label))}function l4(f,J){if(f.length===0)return-1;if(!J)return f[0]?.flatIndex??-1;let Y=o1(J),z=f.find((X)=>X.task.kind!=="main"&&o1(X.task.repo)===Y);if(z)return z.flatIndex;return f.find((X)=>X.task.kind==="main"&&o1(X.task.repo)===Y)?.flatIndex??f[0]?.flatIndex??-1}function L8(f){return f.map((J)=>J.task.id)}function a4(f){let J=[],Y=[];for(let z of f)if(z.task.kind==="main")J.push(z);else Y.push(z);return{projectRows:J,taskRows:Y}}function ky(f,J){return f===J||f.id===J.id&&f.kind===J.kind&&f.title===J.title&&f.repo===J.repo&&f.branch===J.branch&&f.worktreePath===J.worktreePath&&f.status===J.status&&f.archived===J.archived&&f.pinned===J.pinned&&f.vendor===J.vendor}function $4(f,J){return IQ(f,J,(Y)=>Y.task.id,(Y,z)=>Y.flatIndex===z.flatIndex&&ky(Y.task,z.task),{samePosition:!0})}var TQ=()=>{};var r4={};jf(r4,{startQuickTaskHost:()=>Sy});async function Ny(f,J){let Y,z;if(J){let j=await C1(J,["@kobe_task","@kobe_worktree"]);Y=j["@kobe_task"]||void 0,z=j["@kobe_worktree"]||void 0}let G=(Y?f?.getTask(Y)?.repo:void 0)??c1()[0],X=G??z??process.cwd();if(!G)return{ctx:null,fallbackRepo:X};let q=await iJ(),Q=kf("lastSelectedVendor")??Sf,H=q.length===0||q.includes(Q)?Q:q[0]??Q,B=wX(W1(G))??LJ,V=q.length>0?q:[H];return{ctx:{repo:G,vendor:H,baseRef:B,engines:V},fallbackRepo:X}}async function yy(f,J,Y,z,G){let X=await V8(f,J,Y,z),q=Lf(J.id),{pane:Q}=await VX(q,!X);if(Q)await KX(Q,G)}function by(f){let{theme:J}=i0(),Y=vf();f1(()=>{z()});async function z(){let G=f.ctx,X=await L4.show(Y,{repoLabel:MJ(G.repo),engines:G.engines,defaultVendor:G.vendor,defaultBaseRef:G.baseRef,engineLabel:Vz});if(X===void 0)process.exit(0);af("lastSelectedVendor",X.vendor),vJ(G.repo);let q=f.orchestrator;if(!q)console.error("[kobe quick-task] no daemon; cannot create task"),process.exit(1);try{let Q=await q.createTask({repo:G.repo,baseRef:X.baseRef,vendor:X.vendor});await yy(q,Q,G.repo,X.vendor,X.prompt),await bQ(q,Q,G.repo,X.vendor)}catch(Q){console.error("[kobe quick-task] task.create/deliver failed:",Q),process.exit(1)}process.exit(0)}return(()=>{var G=W("box");return Z(G,"flexDirection","column"),Z(G,"flexGrow",1),u((X)=>Z(G,"backgroundColor",J.background,X)),G})()}async function Sy(f){await L1({setup:async()=>{let J=null;try{let G=await UJ(),X=new j1(G);await X.init(),J=X}catch(G){console.error("[kobe quick-task] daemon unavailable; cannot create task:",G)}let{ctx:Y,fallbackRepo:z}=await Ny(J,f.session);return{root:()=>Y?b(by,{ctx:Y,orchestrator:J}):b(SQ,{defaultRepo:z,orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var p4=k(()=>{h();h();h();h();y1();Wf();PY();fz();E1();gf();Tf();Rq();S1();M4();xf();UQ();nY();LQ();K8();U8();TQ();P1()});function EQ(f){let J=f.trim().split(/\s+/).pop()??"",Y=/^([CM])-(.+)$/.exec(J);if(!Y)return null;let z=Y[1]==="C"?"\u2303":"\u2325",G=Y[2]??"";return`${z}${G.length===1?G.toUpperCase():G}`}function uQ(f,J){if(f.includes("/"))return f.split("/").map((G)=>uQ(G,J)).join("/");let Y=f.toLowerCase();if(Y==="tab")return"tab";let z=Ty[Y];if(z)return z;if(/^f\d{1,2}$/.test(Y))return Y.toUpperCase();if(!J)return f;if(/^[a-z]$/.test(Y))return f.toUpperCase();return f.replace(/[a-z]+/gi,(G)=>G.toUpperCase())}function TG(f,J="\u2303B"){let Y=f.trim();if(!Y)return Y;let z=/^prefix\s+(.+)$/i.exec(Y);if(z){let Q=z[1]??"";return`${J} ${Q.includes("+")?TG(Q,J):uQ(Q,!0)}`}let G=Y.split("+");if(G.length===1)return uQ(G[0]??"",!1);let X=G[G.length-1]??"";return`${G.slice(0,-1).map((Q)=>Iy[Q.toLowerCase().trim()]??Q).join("")} ${uQ(X,!0)}`}var Iy,Ty;var M8=k(()=>{Iy={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},Ty={enter:"\u23CE",return:"\u23CE",esc:"\u238B",escape:"\u238B",space:"\u2423",up:"\u2191",down:"\u2193",left:"\u2190",right:"\u2192",backspace:"\u232B",delete:"\u2326",del:"\u2326",pgup:"\u21DE",pageup:"\u21DE",pgdn:"\u21DF",pagedown:"\u21DF",home:"\u2196",end:"\u2198"}});import{TextAttributes as _4}from"@opentui/core";function uy(f){let J=new Map,Y=[];for(let z of f){if(!J.has(z.category))J.set(z.category,[]),Y.push(z.category);J.get(z.category).push(z)}return Y.map((z)=>({category:z,rows:J.get(z)}))}function uG(f={}){let J=vf(),{theme:Y}=i0(),z=()=>uy(vY),G=()=>f.onClose?f.onClose():J.clear(),[X,q]=r("\u2303B");return f1(()=>{d0(["show-options","-g","prefix"]).then(({code:Q,stdout:H})=>{if(Q!==0)return;let B=EQ(H);if(B)q(B)})}),Uf(()=>({bindings:[{key:"?",cmd:G}]})),(()=>{var Q=W("box"),H=W("box"),B=W("text"),V=W("text"),j=W("scrollbox"),U=W("box");return D(Q,H),D(Q,j),Z(Q,"paddingLeft",2),Z(Q,"paddingRight",2),Z(Q,"gap",1),Z(Q,"flexShrink",1),D(H,B),D(H,V),Z(H,"flexDirection","row"),Z(H,"justifyContent","space-between"),Z(H,"flexShrink",0),K(B,()=>F("help.title")),Z(V,"onMouseUp",G),K(V,()=>F("help.esc")),D(j,U),Z(j,"flexShrink",1),Z(j,"flexGrow",1),Z(j,"stickyScroll",!1),Z(U,"paddingBottom",1),Z(U,"gap",1),Z(U,"paddingRight",1),K(U,b(Zf,{get each(){return z()},children:(L)=>(()=>{var O=W("box"),M=W("text");return D(O,M),Z(O,"gap",0),K(M,()=>sj("category",L.category)),K(O,b(Zf,{get each(){return L.rows},children:(R)=>{let S=R.hint?.keys??R.keys[0]??"\u2014",a=()=>S==="\u2014"?"\u2014":TG(S,X()),N=()=>(R.hint?R.keys:R.keys.slice(1)).map((g)=>TG(g,X()));return(()=>{var g=W("box"),C=W("box"),y=W("text"),_=W("box"),z0=W("text");return D(g,C),D(g,_),Z(g,"flexDirection","row"),Z(g,"gap",2),Z(g,"paddingLeft",1),D(C,y),Z(C,"width",14),K(y,a),D(_,z0),Z(_,"flexGrow",1),K(z0,()=>sj("desc",R.id)),K(g,(()=>{var t=I0(()=>N().length>0);return()=>t()?(()=>{var Y0=W("box"),T=W("text");return D(Y0,T),K(T,()=>`(${N().join(", ")})`),u((Q0)=>Z(T,"fg",Y.textMuted,Q0)),Y0})():null})(),null),u((t)=>{var{primary:Y0,text:T}=Y;return Y0!==t.e&&(t.e=Z(y,"fg",Y0,t.e)),T!==t.t&&(t.t=Z(z0,"fg",T,t.t)),t},{e:void 0,t:void 0}),g})()}}),null),u((R)=>{var S=Y.accent,a=_4.BOLD;return S!==R.e&&(R.e=Z(M,"fg",S,R.e)),a!==R.t&&(R.t=Z(M,"attributes",a,R.t)),R},{e:void 0,t:void 0}),O})()})),u((L)=>{var O=_4.BOLD,M=Y.text,R=Y.textMuted,S={trackOptions:{backgroundColor:Y.backgroundDialog,foregroundColor:Y.borderActive}};return O!==L.e&&(L.e=Z(B,"attributes",O,L.e)),M!==L.t&&(L.t=Z(B,"fg",M,L.t)),R!==L.a&&(L.a=Z(V,"fg",R,L.a)),S!==L.o&&(L.o=Z(j,"verticalScrollbarOptions",S,L.o)),L},{e:void 0,t:void 0,a:void 0,o:void 0}),Q})()}var F8=k(()=>{h();h();h();h();h();h();h();Wf();Tf();SG();xf();G1();M8();b1();P1();uG.show=(f)=>{f.replace(()=>b(uG,{}))}});import{TextAttributes as Ey}from"@opentui/core";function o4(f){let J=vf(),{theme:Y}=i0(),[z,G]=r(f.currentTitle);function X(){let q=z().trim();if(!q&&!f.allowEmpty)return;f.onSubmit(q),J.clear()}return(()=>{var q=W("box"),Q=W("box"),H=W("text"),B=W("text"),V=W("box"),j=W("text"),U=W("input"),L=W("box"),O=W("text");return D(q,Q),D(q,V),D(q,L),Z(q,"paddingLeft",2),Z(q,"paddingRight",2),Z(q,"gap",1),D(Q,H),D(Q,B),Z(Q,"flexDirection","row"),Z(Q,"justifyContent","space-between"),K(H,()=>f.dialogTitle??F("common.rename.defaultTitle")),D(B,x0("esc")),Z(B,"onMouseUp",()=>f.onCancel()),D(V,j),D(V,U),Z(V,"gap",0),K(j,()=>f.fieldLabel??F("common.rename.defaultFieldLabel")),Z(U,"focused",!0),Z(U,"onInput",(M)=>G(X1(M))),Z(U,"onSubmit",()=>X()),D(L,O),Z(L,"paddingBottom",1),K(O,()=>F("common.rename.footerHint",{submitLabel:f.submitLabel??F("common.rename.defaultSubmitLabel")})),u((M)=>{var R=Ey.BOLD,S=Y.text,a=Y.textMuted,N=Y.accent,g=z(),C=f.placeholder??f.currentTitle,y=Y.textMuted;return R!==M.e&&(M.e=Z(H,"attributes",R,M.e)),S!==M.t&&(M.t=Z(H,"fg",S,M.t)),a!==M.a&&(M.a=Z(B,"fg",a,M.a)),N!==M.o&&(M.o=Z(j,"fg",N,M.o)),g!==M.i&&(M.i=Z(U,"value",g,M.i)),C!==M.n&&(M.n=Z(U,"placeholder",C,M.n)),y!==M.s&&(M.s=Z(O,"fg",y,M.s)),M},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),q})()}var s4=k(()=>{h();h();h();h();h();h();h();G1();Wf();xf();P1();bG()});function xy(f,J,Y={}){return new Promise((z)=>{f.replace(()=>b(o4,{currentTitle:J,get dialogTitle(){return Y.dialogTitle},get fieldLabel(){return Y.fieldLabel},get submitLabel(){return Y.submitLabel},get placeholder(){return Y.placeholder},get allowEmpty(){return Y.allowEmpty},onSubmit:(G)=>z(G),onCancel:()=>z(void 0)}),()=>z(void 0))})}var YY;var O8=k(()=>{h();s4();YY={show:xy}});import{TextAttributes as wy}from"@opentui/core";function hy(f){if(!f)return f;return f.charAt(0).toUpperCase()+f.slice(1)}function zY(f){let J=vf(),{theme:Y}=i0(),[z,G]=uJ({active:f.initialActive??"confirm"});return Uf(()=>({bindings:[{key:"return",cmd:()=>{if(z.active==="confirm")f.onConfirm?.();if(z.active==="cancel")f.onCancel?.();J.clear()}},{key:"left",cmd:()=>G("active",z.active==="confirm"?"cancel":"confirm")},{key:"right",cmd:()=>G("active",z.active==="confirm"?"cancel":"confirm")}]})),(()=>{var X=W("box"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("box");return D(X,q),D(X,B),D(X,V),Z(X,"paddingLeft",2),Z(X,"paddingRight",2),Z(X,"paddingBottom",1),Z(X,"gap",0),D(q,Q),D(q,H),Z(q,"flexDirection","row"),Z(q,"justifyContent","space-between"),K(Q,()=>f.title),D(H,x0("esc")),Z(H,"onMouseUp",()=>J.clear()),K(B,()=>f.message),Z(V,"flexDirection","row"),Z(V,"justifyContent","flex-end"),Z(V,"paddingTop",1),K(V,b(Zf,{each:["cancel","confirm"],children:(j)=>(()=>{var U=W("box"),L=W("text");return D(U,L),Z(U,"paddingLeft",1),Z(U,"paddingRight",1),Z(U,"onMouseUp",()=>{if(j==="confirm")f.onConfirm?.();if(j==="cancel")f.onCancel?.();J.clear()}),K(L,()=>hy(j==="cancel"?f.label??F("common.cancel"):f.confirmLabel??F("common.confirm"))),u((O)=>{var M=j===z.active?Y.primary:void 0,R=j===z.active?Y.selectedListItemText:Y.textMuted;return M!==O.e&&(O.e=Z(U,"backgroundColor",M,O.e)),R!==O.t&&(O.t=Z(L,"fg",R,O.t)),O},{e:void 0,t:void 0}),U})()})),u((j)=>{var U=wy.BOLD,L=Y.text,O=Y.textMuted,M=Y.textMuted;return U!==j.e&&(j.e=Z(Q,"attributes",U,j.e)),L!==j.t&&(j.t=Z(Q,"fg",L,j.t)),O!==j.a&&(j.a=Z(H,"fg",O,j.a)),M!==j.o&&(j.o=Z(B,"fg",M,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),X})()}var A8=k(()=>{h();h();h();h();h();h();h();G1();Wf();CG();xf();b1();P1();zY.show=(f,J,Y,z,G,X)=>{return new Promise((q)=>{f.replace(()=>b(zY,{title:J,message:Y,onConfirm:()=>q(!0),onCancel:()=>q(!1),label:z,confirmLabel:G,get initialActive(){return X?.initialActive}}),()=>q(void 0)),f.setSize("small")})}});import{unlinkSync as Py}from"fs";import{join as vy}from"path";function t4(f){return f instanceof j1}function e4(f,J){try{f?.destroy()}catch(Y){console.error(`kobe: renderer.destroy() failed during ${J}:`,Y)}}async function g8(f,J,Y){if(await zY.show(f,"Reset UI state?","Wipes ~/.config/kobe/state.json and ~/.kobe/tasks.json, then quits kobe \u2014 relaunch for a fresh start with empty Working session / Archive lists. Worktrees on disk and Claude Code session history are NOT touched.","cancel")!==!0)return;J.clear();try{Py(vy(OJ(),".kobe","tasks.json"))}catch(G){if(G.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",G)}e4(Y,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
224
- `),process.exit(0)}async function R8(f,J,Y){if(!(J instanceof j1))return;if(await zY.show(f,"Restart backend?","Quits this kobe window. Relaunch to (re)spawn the daemon. Any other attached windows keep their connection. In v0.6 the daemon's RPC surface shrank to task CRUD + subscribe, so a graceful daemon.stop RPC is no longer plumbed through the client \u2014 quit + relaunch is the path.","cancel")!==!0)return;e4(Y,"daemon restart"),process.stderr.write(`kobe: window closed. Relaunch kobe to start fresh.
225
- `),process.exit(0)}var fD=k(()=>{PY();lf();A8()});function my(f){return`theme:${f}`}function C8(f){return`language:${f}`}function k8(f){return`accent:${f}`}function cy(f){return`engine:${f}`}function cX(f){return`surface:${f}`}function N8(f){return[...f.themeNames.map((J)=>({id:my(J),kind:"theme",name:J})),...bz.map((J)=>({id:C8(J.id),kind:"language",locale:J.id})),{id:"transparent",kind:"transparent"},...f.focusAccentSlots.map((J)=>({id:k8(J),kind:"focusAccent",slot:J})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:"zen-keep-tasks",kind:"zenKeepTasks"},{id:cX("chattab"),kind:"surface",surface:"chattab"},{id:cX("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function ny(f){return[...f.map((J)=>({id:cy(J),kind:"engine",vendor:J})),{id:"add-engine",kind:"engineAdd"}]}function dy(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function nX(f){return[{id:"dev-reset",kind:"devReset"},...f?[{id:"dev-restart",kind:"devRestartDaemon"}]:[],{id:"remote-projects",kind:"devRemoteProjects"},{id:"auto-status",kind:"devAutoStatus"},{id:"dispatcher",kind:"devDispatcher"}]}function JD(f,J){switch(f){case"general":return N8(J);case"engines":return ny(J.engineList);case"accounts":case"keys":return[];case"feedback":return dy();case"dev":return nX(J.hasDaemon)}}function dX(f,J){return f.findIndex((Y)=>Y.id===J)}function xQ(f,J){return f[J]}var Iz;var y8=k(()=>{yG();Iz=[{id:"general",label:"General"},{id:"engines",label:"Engines"},{id:"accounts",label:"Accounts"},{id:"keys",label:"Keybindings"},{id:"feedback",label:"Feedback"},{id:"dev",label:"Dev"}]});import{TextAttributes as ff}from"@opentui/core";function YD(f){let{theme:J}=i0();return(()=>{var Y=W("box");return Z(Y,"flexDirection","column"),Z(Y,"flexShrink",0),Z(Y,"width",14),Z(Y,"gap",1),K(Y,b(Zf,{each:Iz,children:(z,G)=>{let X=()=>G()===f.cursor(),q=()=>X()&&f.level()==="sidebar";return(()=>{var Q=W("box"),H=W("text");return D(Q,H),Z(Q,"paddingLeft",1),Z(Q,"paddingRight",1),Z(Q,"onMouseUp",()=>f.switchSection(z.id)),Z(H,"wrapMode","none"),K(H,()=>F(`settings.sections.${z.id}`)),u((B)=>{var V=q()?J.primary:void 0,j=q()?J.selectedListItemText:X()?J.accent:J.textMuted,U=X()?ff.BOLD:void 0;return V!==B.e&&(B.e=Z(Q,"backgroundColor",V,B.e)),j!==B.t&&(B.t=Z(H,"fg",j,B.t)),U!==B.a&&(B.a=Z(H,"attributes",U,B.a)),B},{e:void 0,t:void 0,a:void 0}),Q})()}})),Y})()}function zD(f){let J=i0(),{theme:Y}=J,z=()=>N8({themeNames:f.themeNames(),focusAccentSlots:yz}),G=(C)=>dX(z(),C),X=()=>G("transparent"),q=()=>G("toast"),Q=()=>G("sound"),H=()=>G("zen-keep-tasks"),B=()=>G(cX("chattab")),V=()=>G(cX("taskpanel")),j=()=>G("editor-kind"),U=()=>G("editor-custom"),L=()=>f.bodyRow()===X(),O=()=>f.bodyRow()===q(),M=()=>f.bodyRow()===Q(),R=()=>f.bodyRow()===H(),S=()=>f.bodyRow()===B(),a=()=>f.bodyRow()===V(),N=()=>f.bodyRow()===j(),g=()=>f.bodyRow()===U();return(()=>{var C=W("box"),y=W("text"),_=W("text"),z0=W("box"),t=W("box"),Y0=W("text"),T=W("text"),Q0=W("box"),p=W("text"),D0=W("text"),g0=W("box"),$=W("text"),E=W("box"),f0=W("text"),I=W("text"),G0=W("box"),x=W("text"),c=W("text"),Z0=W("box"),V0=W("text"),H0=x0(" "),y0=W("box"),w0=W("text"),T0=x0(" "),r0=W("box"),P=W("text"),M0=W("text"),J0=W("box"),F0=W("text"),a0=x0(" "),p0=W("box"),u0=W("text"),_0=W("text"),n=W("box"),q0=W("text"),b0=x0(" "),o0=W("box"),l0=W("text"),$0=x0(" "),t0=W("box"),Rf=W("text"),Af=W("text"),o=W("box"),e=W("text"),B0=W("box"),C0=W("text");return D(C,y),D(C,_),D(C,z0),D(C,t),D(C,Q0),D(C,E),D(C,G0),D(C,r0),D(C,p0),D(C,t0),Z(C,"flexDirection","column"),Z(C,"gap",1),K(y,()=>F("settings.general.theme")),K(_,()=>F("settings.general.themeHint")),Z(z0,"flexDirection","column"),Z(z0,"gap",0),K(z0,b(Zf,{get each(){return f.themeNames()},children:(A,P0)=>{let K0=()=>f.level()==="body"&&f.bodyRow()===P0(),E0=()=>A===J.selected;return(()=>{var W0=W("box"),L0=W("text");return D(W0,L0),Z(W0,"flexDirection","row"),Z(W0,"gap",1),Z(W0,"paddingLeft",1),Z(W0,"paddingRight",1),Z(W0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(P0()),f.setThemeCursor(P0()),f.selectTheme(A)}),Z(L0,"wrapMode","none"),K(L0,()=>E0()?"\u25CF ":" ",null),K(L0,A,null),u((R0)=>{var Jf=K0()?Y.primary:void 0,Yf=K0()?Y.selectedListItemText:E0()?Y.accent:Y.text,n0=K0()||E0()?ff.BOLD:void 0;return Jf!==R0.e&&(R0.e=Z(W0,"backgroundColor",Jf,R0.e)),Yf!==R0.t&&(R0.t=Z(L0,"fg",Yf,R0.t)),n0!==R0.a&&(R0.a=Z(L0,"attributes",n0,R0.a)),R0},{e:void 0,t:void 0,a:void 0}),W0})()}})),D(t,Y0),D(t,T),Z(t,"flexDirection","column"),Z(t,"gap",0),Z(t,"paddingTop",1),K(Y0,()=>F("settings.general.language")),Z(T,"wrapMode","word"),K(T,()=>F("settings.general.languageHint")),K(t,b(Zf,{each:bz,children:(A)=>{let P0=()=>G(C8(A.id)),K0=()=>f.level()==="body"&&f.bodyRow()===P0(),E0=()=>f.currentLocale()===A.id;return(()=>{var W0=W("box"),L0=W("text");return D(W0,L0),Z(W0,"flexDirection","row"),Z(W0,"gap",1),Z(W0,"paddingLeft",1),Z(W0,"paddingRight",1),Z(W0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(P0()),f.selectLanguage(A.id)}),Z(L0,"wrapMode","none"),K(L0,()=>E0()?"\u25CF ":" ",null),K(L0,()=>A.label,null),u((R0)=>{var Jf=K0()?Y.primary:void 0,Yf=K0()?Y.selectedListItemText:E0()?Y.accent:Y.text,n0=K0()||E0()?ff.BOLD:void 0;return Jf!==R0.e&&(R0.e=Z(W0,"backgroundColor",Jf,R0.e)),Yf!==R0.t&&(R0.t=Z(L0,"fg",Yf,R0.t)),n0!==R0.a&&(R0.a=Z(L0,"attributes",n0,R0.a)),R0},{e:void 0,t:void 0,a:void 0}),W0})()}}),null),D(Q0,p),D(Q0,D0),D(Q0,g0),Z(Q0,"flexDirection","column"),Z(Q0,"gap",0),Z(Q0,"paddingTop",1),K(p,()=>F("settings.general.transparent")),Z(D0,"wrapMode","word"),K(D0,()=>F("settings.general.transparentHint")),D(g0,$),Z(g0,"flexDirection","row"),Z(g0,"paddingLeft",1),Z(g0,"paddingRight",1),Z(g0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(X()),f.toggleTransparent()}),Z($,"wrapMode","none"),K($,(()=>{var A=I0(()=>!!J.transparentBackground);return()=>A()?F("settings.general.on"):F("settings.general.off")})()),D(E,f0),D(E,I),Z(E,"flexDirection","column"),Z(E,"gap",0),Z(E,"paddingTop",1),K(f0,()=>F("settings.general.focusAccent")),Z(I,"wrapMode","word"),K(I,()=>F("settings.general.focusAccentHint")),K(E,b(Zf,{each:yz,children:(A)=>{let P0=()=>G(k8(A)),K0=()=>f.level()==="body"&&f.bodyRow()===P0(),E0=()=>J.focusAccent===A;return(()=>{var W0=W("box"),L0=W("text");return D(W0,L0),Z(W0,"flexDirection","row"),Z(W0,"gap",1),Z(W0,"paddingLeft",1),Z(W0,"paddingRight",1),Z(W0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(P0()),f.selectFocusAccent(A)}),Z(L0,"wrapMode","none"),K(L0,()=>E0()?"\u25CF ":" ",null),K(L0,()=>F(`settings.general.accent${A.charAt(0).toUpperCase()}${A.slice(1)}`),null),u((R0)=>{var Jf=K0()?Y.primary:void 0,Yf=K0()?Y.selectedListItemText:E0()?Y.focusAccent:Y.text,n0=K0()||E0()?ff.BOLD:void 0;return Jf!==R0.e&&(R0.e=Z(W0,"backgroundColor",Jf,R0.e)),Yf!==R0.t&&(R0.t=Z(L0,"fg",Yf,R0.t)),n0!==R0.a&&(R0.a=Z(L0,"attributes",n0,R0.a)),R0},{e:void 0,t:void 0,a:void 0}),W0})()}}),null),D(G0,x),D(G0,c),D(G0,Z0),D(G0,y0),Z(G0,"flexDirection","column"),Z(G0,"gap",0),Z(G0,"paddingTop",1),K(x,()=>F("settings.general.notifications")),Z(c,"wrapMode","word"),K(c,()=>F("settings.general.notificationsHint")),D(Z0,V0),Z(Z0,"flexDirection","row"),Z(Z0,"gap",1),Z(Z0,"paddingLeft",1),Z(Z0,"paddingRight",1),Z(Z0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(q()),f.toggleToast()}),D(V0,H0),Z(V0,"wrapMode","none"),K(V0,()=>f.toastEnabled()?"[x]":"[ ]",H0),K(V0,()=>F("settings.general.toast"),null),D(y0,w0),Z(y0,"flexDirection","row"),Z(y0,"gap",1),Z(y0,"paddingLeft",1),Z(y0,"paddingRight",1),Z(y0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Q()),f.toggleSound()}),D(w0,T0),Z(w0,"wrapMode","none"),K(w0,()=>f.soundEnabled()?"[x]":"[ ]",T0),K(w0,()=>F("settings.general.sound"),null),D(r0,P),D(r0,M0),D(r0,J0),Z(r0,"flexDirection","column"),Z(r0,"gap",0),Z(r0,"paddingTop",1),K(P,()=>F("settings.general.zen")),Z(M0,"wrapMode","word"),K(M0,()=>F("settings.general.zenHint")),D(J0,F0),Z(J0,"flexDirection","row"),Z(J0,"gap",1),Z(J0,"paddingLeft",1),Z(J0,"paddingRight",1),Z(J0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(H()),f.toggleZenKeepsTasks()}),D(F0,a0),Z(F0,"wrapMode","none"),K(F0,()=>f.zenKeepsTasks()?"[x]":"[ ]",a0),K(F0,()=>F("settings.general.zenKeepTasks"),null),D(p0,u0),D(p0,_0),D(p0,n),D(p0,o0),Z(p0,"flexDirection","column"),Z(p0,"gap",0),Z(p0,"paddingTop",1),K(u0,()=>F("settings.general.surface")),Z(_0,"wrapMode","word"),K(_0,()=>F("settings.general.surfaceHint")),D(n,q0),Z(n,"flexDirection","row"),Z(n,"gap",1),Z(n,"paddingLeft",1),Z(n,"paddingRight",1),Z(n,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(B()),f.selectSurface("chattab")}),D(q0,b0),Z(q0,"wrapMode","none"),K(q0,()=>f.settingsSurface()==="chattab"?"[x]":"[ ]",b0),K(q0,()=>F("settings.general.surfaceChattab"),null),D(o0,l0),Z(o0,"flexDirection","row"),Z(o0,"gap",1),Z(o0,"paddingLeft",1),Z(o0,"paddingRight",1),Z(o0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(V()),f.selectSurface("taskpanel")}),D(l0,$0),Z(l0,"wrapMode","none"),K(l0,()=>f.settingsSurface()==="taskpanel"?"[x]":"[ ]",$0),K(l0,()=>F("settings.general.surfaceTaskpanel"),null),D(t0,Rf),D(t0,Af),D(t0,o),D(t0,B0),Z(t0,"flexDirection","column"),Z(t0,"gap",0),Z(t0,"paddingTop",1),K(Rf,()=>F("settings.general.editor")),Z(Af,"wrapMode","word"),K(Af,()=>F("settings.general.editorHint")),D(o,e),Z(o,"flexDirection","row"),Z(o,"gap",1),Z(o,"paddingLeft",1),Z(o,"paddingRight",1),Z(o,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(j()),f.cycleEditorKind()}),Z(e,"wrapMode","none"),K(e,()=>F("settings.general.editorRow",{kind:f.editorKind()})),D(B0,C0),Z(B0,"flexDirection","row"),Z(B0,"gap",1),Z(B0,"paddingLeft",1),Z(B0,"paddingRight",1),Z(B0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(U()),f.editEditorCustom()}),Z(C0,"wrapMode","none"),K(C0,()=>F("settings.general.editorCustom",{cmd:f.editorCustomCommand().trim()||F("settings.general.editorCustomUnset")})),u((A)=>{var P0=Y.text,K0=ff.BOLD,E0=Y.textMuted,W0=Y.text,L0=ff.BOLD,R0=Y.textMuted,Jf=Y.text,Yf=ff.BOLD,n0=Y.textMuted,yf=L()?Y.primary:void 0,k0=L()?Y.selectedListItemText:J.transparentBackground?Y.accent:Y.textMuted,wf=ff.BOLD,v=Y.text,A0=ff.BOLD,Bf=Y.textMuted,Ff=Y.text,Qf=ff.BOLD,d=Y.textMuted,s=O()?Y.primary:void 0,S0=O()?Y.selectedListItemText:f.toastEnabled()?Y.accent:Y.textMuted,N0=ff.BOLD,Z1=M()?Y.primary:void 0,V1=M()?Y.selectedListItemText:f.soundEnabled()?Y.accent:Y.textMuted,tf=ff.BOLD,v1=Y.text,xJ=ff.BOLD,M1=Y.textMuted,wJ=R()?Y.primary:void 0,GY=R()?Y.selectedListItemText:f.zenKeepsTasks()?Y.accent:Y.textMuted,m=ff.BOLD,i=Y.text,l=ff.BOLD,w=Y.textMuted,m0=S()?Y.primary:void 0,v0=S()?Y.selectedListItemText:f.settingsSurface()==="chattab"?Y.accent:Y.textMuted,O0=ff.BOLD,c0=a()?Y.primary:void 0,qf=a()?Y.selectedListItemText:f.settingsSurface()==="taskpanel"?Y.accent:Y.textMuted,Df=ff.BOLD,q1=Y.text,s1=ff.BOLD,XY=Y.textMuted,_8=N()?Y.primary:void 0,o8=N()?Y.selectedListItemText:Y.accent,s8=ff.BOLD,t8=g()?Y.primary:void 0,e8=g()?Y.selectedListItemText:f.editorKind()==="custom"?Y.text:Y.textMuted;return P0!==A.e&&(A.e=Z(y,"fg",P0,A.e)),K0!==A.t&&(A.t=Z(y,"attributes",K0,A.t)),E0!==A.a&&(A.a=Z(_,"fg",E0,A.a)),W0!==A.o&&(A.o=Z(Y0,"fg",W0,A.o)),L0!==A.i&&(A.i=Z(Y0,"attributes",L0,A.i)),R0!==A.n&&(A.n=Z(T,"fg",R0,A.n)),Jf!==A.s&&(A.s=Z(p,"fg",Jf,A.s)),Yf!==A.h&&(A.h=Z(p,"attributes",Yf,A.h)),n0!==A.r&&(A.r=Z(D0,"fg",n0,A.r)),yf!==A.d&&(A.d=Z(g0,"backgroundColor",yf,A.d)),k0!==A.l&&(A.l=Z($,"fg",k0,A.l)),wf!==A.u&&(A.u=Z($,"attributes",wf,A.u)),v!==A.c&&(A.c=Z(f0,"fg",v,A.c)),A0!==A.w&&(A.w=Z(f0,"attributes",A0,A.w)),Bf!==A.m&&(A.m=Z(I,"fg",Bf,A.m)),Ff!==A.f&&(A.f=Z(x,"fg",Ff,A.f)),Qf!==A.y&&(A.y=Z(x,"attributes",Qf,A.y)),d!==A.g&&(A.g=Z(c,"fg",d,A.g)),s!==A.p&&(A.p=Z(Z0,"backgroundColor",s,A.p)),S0!==A.b&&(A.b=Z(V0,"fg",S0,A.b)),N0!==A.T&&(A.T=Z(V0,"attributes",N0,A.T)),Z1!==A.A&&(A.A=Z(y0,"backgroundColor",Z1,A.A)),V1!==A.O&&(A.O=Z(w0,"fg",V1,A.O)),tf!==A.I&&(A.I=Z(w0,"attributes",tf,A.I)),v1!==A.S&&(A.S=Z(P,"fg",v1,A.S)),xJ!==A.W&&(A.W=Z(P,"attributes",xJ,A.W)),M1!==A.C&&(A.C=Z(M0,"fg",M1,A.C)),wJ!==A.B&&(A.B=Z(J0,"backgroundColor",wJ,A.B)),GY!==A.v&&(A.v=Z(F0,"fg",GY,A.v)),m!==A.k&&(A.k=Z(F0,"attributes",m,A.k)),i!==A.x&&(A.x=Z(u0,"fg",i,A.x)),l!==A.j&&(A.j=Z(u0,"attributes",l,A.j)),w!==A.q&&(A.q=Z(_0,"fg",w,A.q)),m0!==A.z&&(A.z=Z(n,"backgroundColor",m0,A.z)),v0!==A.P&&(A.P=Z(q0,"fg",v0,A.P)),O0!==A.H&&(A.H=Z(q0,"attributes",O0,A.H)),c0!==A.F&&(A.F=Z(o0,"backgroundColor",c0,A.F)),qf!==A.M&&(A.M=Z(l0,"fg",qf,A.M)),Df!==A.D&&(A.D=Z(l0,"attributes",Df,A.D)),q1!==A.R&&(A.R=Z(Rf,"fg",q1,A.R)),s1!==A.E&&(A.E=Z(Rf,"attributes",s1,A.E)),XY!==A.L&&(A.L=Z(Af,"fg",XY,A.L)),_8!==A.N&&(A.N=Z(o,"backgroundColor",_8,A.N)),o8!==A.G&&(A.G=Z(e,"fg",o8,A.G)),s8!==A.U&&(A.U=Z(e,"attributes",s8,A.U)),t8!==A.K&&(A.K=Z(B0,"backgroundColor",t8,A.K)),e8!==A.V&&(A.V=Z(C0,"fg",e8,A.V)),A},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0,y:void 0,g:void 0,p:void 0,b:void 0,T:void 0,A:void 0,O:void 0,I:void 0,S:void 0,W:void 0,C:void 0,B:void 0,v:void 0,k:void 0,x:void 0,j:void 0,q:void 0,z:void 0,P:void 0,H:void 0,F:void 0,M:void 0,D:void 0,R:void 0,E:void 0,L:void 0,N:void 0,G:void 0,U:void 0,K:void 0,V:void 0}),C})()}function GD(f){let{theme:J}=i0(),Y=()=>f.vendors.length;return(()=>{var z=W("box"),G=W("text"),X=W("text"),q=W("box"),Q=W("box"),H=W("text");return D(z,G),D(z,X),D(z,q),Z(z,"flexDirection","column"),Z(z,"gap",1),K(G,()=>F("settings.engines.title")),Z(X,"wrapMode","word"),K(X,()=>F("settings.engines.hint")),D(q,Q),Z(q,"flexDirection","column"),Z(q,"gap",0),K(q,b(Zf,{get each(){return f.vendors},children:(B,V)=>{let j=()=>f.level()==="body"&&f.bodyRow()===V();return(()=>{var U=W("box"),L=W("text"),O=W("text"),M=W("text");return D(U,L),D(U,O),D(U,M),Z(U,"flexDirection","row"),Z(U,"gap",1),Z(U,"paddingLeft",1),Z(U,"paddingRight",1),Z(U,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(V()),f.editEngine(B)}),Z(L,"wrapMode","none"),K(L,()=>f.isDefaultEngine(B)?"\u25CF":" "),Z(O,"wrapMode","none"),K(O,()=>f.displayName(B)),Z(M,"wrapMode","none"),K(M,()=>f.commandText(B),null),K(M,(()=>{var R=I0(()=>!!f.isDefault(B));return()=>R()?F("settings.engines.defaultTag"):I0(()=>!!f.isCustom(B))()?F("settings.engines.customTag"):""})(),null),u((R)=>{var S=j()?J.primary:void 0,a=j()?J.selectedListItemText:J.accent,N=ff.BOLD,g=j()?J.selectedListItemText:J.text,C=ff.BOLD,y=j()?J.selectedListItemText:f.isDefault(B)?J.textMuted:J.accent;return S!==R.e&&(R.e=Z(U,"backgroundColor",S,R.e)),a!==R.t&&(R.t=Z(L,"fg",a,R.t)),N!==R.a&&(R.a=Z(L,"attributes",N,R.a)),g!==R.o&&(R.o=Z(O,"fg",g,R.o)),C!==R.i&&(R.i=Z(O,"attributes",C,R.i)),y!==R.n&&(R.n=Z(M,"fg",y,R.n)),R},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),U})()}}),Q),D(Q,H),Z(Q,"flexDirection","row"),Z(Q,"paddingLeft",1),Z(Q,"paddingRight",1),Z(Q,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Y()),f.onAddEngine()}),Z(H,"wrapMode","none"),K(H,()=>F("settings.engines.addEngine")),u((B)=>{var V=J.text,j=ff.BOLD,U=J.textMuted,L=f.level()==="body"&&f.bodyRow()===Y()?J.primary:void 0,O=f.level()==="body"&&f.bodyRow()===Y()?J.selectedListItemText:J.primary;return V!==B.e&&(B.e=Z(G,"fg",V,B.e)),j!==B.t&&(B.t=Z(G,"attributes",j,B.t)),U!==B.a&&(B.a=Z(X,"fg",U,B.a)),L!==B.o&&(B.o=Z(Q,"backgroundColor",L,B.o)),O!==B.i&&(B.i=Z(H,"fg",O,B.i)),B},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),z})()}function XD(f){let{theme:J}=i0(),Y=(z)=>z.binary.found?`Binary: ${z.binary.path}`:`Binary: ${z.binary.error}`;return(()=>{var z=W("box"),G=W("text"),X=W("text"),q=W("box"),Q=W("text"),H=W("box"),B=W("text"),V=W("box"),j=W("text");return D(z,G),D(z,X),D(z,q),D(z,H),D(z,V),Z(z,"flexDirection","column"),Z(z,"gap",1),K(G,()=>F("settings.accounts.title")),Z(X,"wrapMode","word"),K(X,()=>F("settings.accounts.hint")),D(q,Q),Z(q,"flexDirection","column"),Z(q,"gap",0),D(Q,x0("claude-code")),K(q,b(X0,{get when(){return f.claudeStatus()===null},get children(){var U=W("text");return K(U,()=>F("settings.accounts.checking")),u((L)=>Z(U,"fg",J.textMuted,L)),U}}),null),K(q,b(X0,{get when(){return f.claudeStatus()},children:(U)=>(()=>{var L=W("box"),O=W("text");return D(L,O),Z(L,"flexDirection","column"),Z(L,"gap",0),Z(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="oauth"){let R=[M.organization,M.billingType].filter((S)=>!!S).join(" \xB7 ");return(()=>{var S=W("text");return Z(S,"wrapMode","word"),K(S,()=>F("settings.accounts.loggedIn",{email:M.email}),null),K(S,R?` (${R})`:"",null),u((a)=>Z(S,"fg",J.success,a)),S})()}return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.notLoggedIn")),u((S)=>Z(R,"fg",J.textMuted,S)),R})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var R=W("text");return Z(R,"wrapMode","word"),K(R,()=>`! ${M()}`),u((S)=>Z(R,"fg",J.warning,S)),R})()}),null),u((M)=>Z(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),D(H,B),Z(H,"flexDirection","column"),Z(H,"gap",0),D(B,x0("codex")),K(H,b(X0,{get when(){return f.codexStatus()===null},get children(){var U=W("text");return K(U,()=>F("settings.accounts.checking")),u((L)=>Z(U,"fg",J.textMuted,L)),U}}),null),K(H,b(X0,{get when(){return f.codexStatus()},children:(U)=>(()=>{var L=W("box"),O=W("text");return D(L,O),Z(L,"flexDirection","column"),Z(L,"gap",0),Z(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="chatgpt")return(()=>{var R=W("text");return Z(R,"wrapMode","word"),K(R,()=>F("settings.accounts.chatgptLogin",{email:M.email}),null),K(R,(()=>{var S=I0(()=>!!M.plan);return()=>S()?` (${M.plan})`:""})(),null),u((S)=>Z(R,"fg",J.success,S)),R})();if(M.kind==="apikey")return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.apiKeyConfigured")),u((S)=>Z(R,"fg",J.success,S)),R})();return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.notLoggedIn")),u((S)=>Z(R,"fg",J.textMuted,S)),R})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var R=W("text");return Z(R,"wrapMode","word"),K(R,()=>`! ${M()}`),u((S)=>Z(R,"fg",J.warning,S)),R})()}),null),u((M)=>Z(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),D(V,j),Z(V,"flexDirection","column"),Z(V,"gap",0),D(j,x0("copilot")),K(V,b(X0,{get when(){return f.copilotStatus()===null},get children(){var U=W("text");return K(U,()=>F("settings.accounts.checking")),u((L)=>Z(U,"fg",J.textMuted,L)),U}}),null),K(V,b(X0,{get when(){return f.copilotStatus()},children:(U)=>(()=>{var L=W("box"),O=W("text");return D(L,O),Z(L,"flexDirection","column"),Z(L,"gap",0),Z(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="token")return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.tokenConfigured",{source:M.source})),u((S)=>Z(R,"fg",J.success,S)),R})();if(M.kind==="oauth")return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.copilotDetected")),u((S)=>Z(R,"fg",J.success,S)),R})();return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.notLoggedIn")),u((S)=>Z(R,"fg",J.textMuted,S)),R})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var R=W("text");return Z(R,"wrapMode","word"),K(R,()=>`! ${M()}`),u((S)=>Z(R,"fg",J.warning,S)),R})()}),null),u((M)=>Z(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),u((U)=>{var L=J.text,O=ff.BOLD,M=J.textMuted,R=J.text,S=ff.BOLD,a=J.text,N=ff.BOLD,g=J.text,C=ff.BOLD;return L!==U.e&&(U.e=Z(G,"fg",L,U.e)),O!==U.t&&(U.t=Z(G,"attributes",O,U.t)),M!==U.a&&(U.a=Z(X,"fg",M,U.a)),R!==U.o&&(U.o=Z(Q,"fg",R,U.o)),S!==U.i&&(U.i=Z(Q,"attributes",S,U.i)),a!==U.n&&(U.n=Z(B,"fg",a,U.n)),N!==U.s&&(U.s=Z(B,"attributes",N,U.s)),g!==U.h&&(U.h=Z(j,"fg",g,U.h)),C!==U.r&&(U.r=Z(j,"attributes",C,U.r)),U},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),z})()}function ZD(f){let{theme:J}=i0(),Y=()=>f.level()==="body",z=()=>Y()&&f.bodyRow()===0,G=()=>Y()&&f.bodyRow()===1,X=()=>Y()&&f.bodyRow()===2,q=(H)=>H?J.primary:J.textMuted,Q=(H)=>H?ff.BOLD|ff.UNDERLINE:void 0;return(()=>{var H=W("box"),B=W("text"),V=W("text"),j=W("box"),U=W("box"),L=W("text"),O=W("input"),M=W("box"),R=W("text"),S=W("input"),a=W("box"),N=W("text");return D(H,B),D(H,V),D(H,j),Z(H,"flexDirection","column"),Z(H,"gap",1),K(B,()=>F("settings.feedback.title")),Z(V,"wrapMode","word"),K(V,()=>F("settings.feedback.hint")),D(j,U),D(j,M),D(j,a),Z(j,"flexDirection","column"),Z(j,"gap",1),D(U,L),D(U,O),Z(U,"gap",0),K(L,()=>F("settings.feedback.titleLabel")),Z(O,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(0)}),Z(O,"onInput",(g)=>f.setTitle(X1(g))),Z(O,"onSubmit",()=>f.onTitleSubmit()),D(M,R),D(M,S),Z(M,"gap",0),K(R,()=>F("settings.feedback.descriptionLabel")),Z(S,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(1)}),Z(S,"onInput",(g)=>f.setBody(X1(g))),Z(S,"onSubmit",()=>f.onBodySubmit()),D(a,N),Z(a,"flexDirection","row"),Z(a,"paddingLeft",1),Z(a,"paddingRight",1),Z(a,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(2),f.submit()}),K(N,()=>F("settings.feedback.send")),K(H,b(X0,{get when(){return f.status()},get children(){var g=W("text");return Z(g,"wrapMode","word"),K(g,()=>f.status()),u((C)=>Z(g,"fg",f.status().startsWith("error:")?J.warning:J.success,C)),g}}),null),u((g)=>{var C=J.text,y=ff.BOLD,_=J.textMuted,z0=q(z()),t=Q(z()),Y0=f.title(),T=F("settings.feedback.titlePlaceholder"),Q0=z(),p=q(G()),D0=Q(G()),g0=f.body(),$=F("settings.feedback.descriptionPlaceholder"),E=G(),f0=X()?J.primary:J.backgroundElement,I=X()?J.selectedListItemText:J.accent,G0=ff.BOLD;return C!==g.e&&(g.e=Z(B,"fg",C,g.e)),y!==g.t&&(g.t=Z(B,"attributes",y,g.t)),_!==g.a&&(g.a=Z(V,"fg",_,g.a)),z0!==g.o&&(g.o=Z(L,"fg",z0,g.o)),t!==g.i&&(g.i=Z(L,"attributes",t,g.i)),Y0!==g.n&&(g.n=Z(O,"value",Y0,g.n)),T!==g.s&&(g.s=Z(O,"placeholder",T,g.s)),Q0!==g.h&&(g.h=Z(O,"focused",Q0,g.h)),p!==g.r&&(g.r=Z(R,"fg",p,g.r)),D0!==g.d&&(g.d=Z(R,"attributes",D0,g.d)),g0!==g.l&&(g.l=Z(S,"value",g0,g.l)),$!==g.u&&(g.u=Z(S,"placeholder",$,g.u)),E!==g.c&&(g.c=Z(S,"focused",E,g.c)),f0!==g.w&&(g.w=Z(a,"backgroundColor",f0,g.w)),I!==g.m&&(g.m=Z(N,"fg",I,g.m)),G0!==g.f&&(g.f=Z(N,"attributes",G0,g.f)),g},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0}),H})()}function qD(f){let{theme:J}=i0(),Y=()=>f.level()==="body"&&f.bodyRow()===0,z=()=>f.level()==="body"&&f.bodyRow()===1,G=()=>dX(nX(f.hasDaemon),"remote-projects"),X=()=>f.level()==="body"&&f.bodyRow()===G(),q=()=>dX(nX(f.hasDaemon),"auto-status"),Q=()=>f.level()==="body"&&f.bodyRow()===q(),H=()=>dX(nX(f.hasDaemon),"dispatcher"),B=()=>f.level()==="body"&&f.bodyRow()===H();return(()=>{var V=W("box"),j=W("text"),U=W("text"),L=W("box"),O=W("text"),M=W("text"),R=W("box"),S=W("text"),a=W("text"),N=W("box"),g=W("text"),C=W("text"),y=W("box"),_=W("text"),z0=W("text"),t=W("box"),Y0=W("text");return D(V,j),D(V,U),D(V,L),D(V,M),D(V,R),Z(V,"flexDirection","column"),Z(V,"gap",1),K(j,()=>F("settings.dev.reset")),Z(U,"wrapMode","word"),K(U,()=>F("settings.dev.resetHint")),D(L,O),Z(L,"flexDirection","row"),Z(L,"paddingLeft",1),Z(L,"paddingRight",1),Z(L,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(0),f.confirmReset()}),K(O,()=>F("settings.dev.resetButton")),K(V,b(X0,{get when(){return f.hasDaemon},get children(){var T=W("box"),Q0=W("text"),p=W("text"),D0=W("box"),g0=W("text");return D(T,Q0),D(T,p),D(T,D0),Z(T,"flexDirection","column"),Z(T,"gap",0),Z(T,"paddingTop",1),K(Q0,()=>F("settings.dev.restart")),Z(p,"wrapMode","word"),K(p,()=>F("settings.dev.restartHint")),D(D0,g0),Z(D0,"flexDirection","row"),Z(D0,"paddingLeft",1),Z(D0,"paddingRight",1),Z(D0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(1),f.confirmRestartDaemon()}),K(g0,()=>F("settings.dev.restartButton")),u(($)=>{var E=J.text,f0=ff.BOLD,I=J.textMuted,G0=z()?J.primary:J.backgroundElement,x=z()?J.selectedListItemText:J.accent,c=ff.BOLD;return E!==$.e&&($.e=Z(Q0,"fg",E,$.e)),f0!==$.t&&($.t=Z(Q0,"attributes",f0,$.t)),I!==$.a&&($.a=Z(p,"fg",I,$.a)),G0!==$.o&&($.o=Z(D0,"backgroundColor",G0,$.o)),x!==$.i&&($.i=Z(g0,"fg",x,$.i)),c!==$.n&&($.n=Z(g0,"attributes",c,$.n)),$},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),T}}),M),Z(M,"wrapMode","word"),K(M,()=>F("settings.dev.doctorHint")),D(R,S),D(R,a),D(R,N),D(R,C),D(R,y),D(R,z0),D(R,t),Z(R,"flexDirection","column"),Z(R,"gap",0),Z(R,"paddingTop",1),K(S,()=>F("settings.dev.experimental")),Z(a,"wrapMode","word"),K(a,()=>F("settings.dev.remoteHint")),D(N,g),Z(N,"flexDirection","row"),Z(N,"paddingLeft",1),Z(N,"paddingRight",1),Z(N,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(G()),f.toggleRemoteProjects()}),K(g,(()=>{var T=I0(()=>!!f.remoteProjectsEnabled());return()=>T()?F("settings.dev.remoteOn"):F("settings.dev.remoteOff")})()),Z(C,"wrapMode","word"),K(C,()=>F("settings.dev.autoStatusHint")),D(y,_),Z(y,"flexDirection","row"),Z(y,"paddingLeft",1),Z(y,"paddingRight",1),Z(y,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(q()),f.toggleAutoStatus()}),K(_,(()=>{var T=I0(()=>!!f.autoStatusEnabled());return()=>T()?F("settings.dev.autoStatusOn"):F("settings.dev.autoStatusOff")})()),Z(z0,"wrapMode","word"),K(z0,()=>F("settings.dev.dispatcherHint")),D(t,Y0),Z(t,"flexDirection","row"),Z(t,"paddingLeft",1),Z(t,"paddingRight",1),Z(t,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(H()),f.toggleDispatcher()}),K(Y0,(()=>{var T=I0(()=>!!f.dispatcherEnabled());return()=>T()?F("settings.dev.dispatcherOn"):F("settings.dev.dispatcherOff")})()),u((T)=>{var Q0=J.text,p=ff.BOLD,D0=J.textMuted,g0=Y()?J.primary:J.backgroundElement,$=Y()?J.selectedListItemText:J.warning,E=ff.BOLD,f0=J.textMuted,I=J.text,G0=ff.BOLD,x=J.textMuted,c=X()?J.primary:J.backgroundElement,Z0=X()?J.selectedListItemText:J.text,V0=f.remoteProjectsEnabled()?ff.BOLD:void 0,H0=J.textMuted,y0=Q()?J.primary:J.backgroundElement,w0=Q()?J.selectedListItemText:J.text,T0=f.autoStatusEnabled()?ff.BOLD:void 0,r0=J.textMuted,P=B()?J.primary:J.backgroundElement,M0=B()?J.selectedListItemText:J.text,J0=f.dispatcherEnabled()?ff.BOLD:void 0;return Q0!==T.e&&(T.e=Z(j,"fg",Q0,T.e)),p!==T.t&&(T.t=Z(j,"attributes",p,T.t)),D0!==T.a&&(T.a=Z(U,"fg",D0,T.a)),g0!==T.o&&(T.o=Z(L,"backgroundColor",g0,T.o)),$!==T.i&&(T.i=Z(O,"fg",$,T.i)),E!==T.n&&(T.n=Z(O,"attributes",E,T.n)),f0!==T.s&&(T.s=Z(M,"fg",f0,T.s)),I!==T.h&&(T.h=Z(S,"fg",I,T.h)),G0!==T.r&&(T.r=Z(S,"attributes",G0,T.r)),x!==T.d&&(T.d=Z(a,"fg",x,T.d)),c!==T.l&&(T.l=Z(N,"backgroundColor",c,T.l)),Z0!==T.u&&(T.u=Z(g,"fg",Z0,T.u)),V0!==T.c&&(T.c=Z(g,"attributes",V0,T.c)),H0!==T.w&&(T.w=Z(C,"fg",H0,T.w)),y0!==T.m&&(T.m=Z(y,"backgroundColor",y0,T.m)),w0!==T.f&&(T.f=Z(_,"fg",w0,T.f)),T0!==T.y&&(T.y=Z(_,"attributes",T0,T.y)),r0!==T.g&&(T.g=Z(z0,"fg",r0,T.g)),P!==T.p&&(T.p=Z(t,"backgroundColor",P,T.p)),M0!==T.b&&(T.b=Z(Y0,"fg",M0,T.b)),J0!==T.T&&(T.T=Z(Y0,"attributes",J0,T.T)),T},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0,y:void 0,g:void 0,p:void 0,b:void 0,T:void 0}),V})()}function QD(){let{theme:f}=i0(),J=k4(),Y=Object.keys(wB).sort();return(()=>{var z=W("box"),G=W("text"),X=W("text"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("text");return D(z,G),D(z,X),D(z,q),D(z,B),D(z,V),Z(z,"flexDirection","column"),Z(z,"gap",1),K(G,()=>F("settings.keybindings.title")),Z(X,"wrapMode","word"),K(X,()=>F("settings.keybindings.hint")),D(q,Q),D(q,H),Z(q,"flexDirection","column"),Z(q,"gap",0),K(Q,()=>F("settings.keybindings.configFile")),Z(H,"wrapMode","word"),K(H,()=>J.path,null),K(H,(()=>{var j=I0(()=>!!J.exists);return()=>j()?"":F("settings.keybindings.notCreated")})(),null),K(z,b(X0,{get when(){return!J.exists},get children(){var j=W("box"),U=W("text"),L=W("text"),O=W("text"),M=W("text"),R=W("text"),S=W("text"),a=W("text"),N=W("text"),g=W("text"),C=W("text");return D(j,U),D(j,L),D(j,O),D(j,M),D(j,R),D(j,S),D(j,a),D(j,N),D(j,g),D(j,C),Z(j,"flexDirection","column"),Z(j,"gap",0),K(U,()=>F("settings.keybindings.example")),D(L,x0("bindings:")),D(O,x0(" chat.fork.new: ctrl+g # string = one chord")),D(M,x0(" sidebar.select: [enter] # list = several chords")),D(R,x0(" files.createPR: null # null = unbind")),D(S,x0(" tmux.tab.new: ctrl+y # tmux session key (see below)")),D(a,x0(" tmux.layout.workspaceSplit: g # prefix g")),D(N,x0("darwin: # platform overlay (also: linux)")),D(g,x0(" bindings:")),D(C,x0(" palette.open: [cmd+p, ctrl+p]")),u((y)=>{var _=f.text,z0=ff.BOLD,t=f.textMuted,Y0=f.textMuted,T=f.textMuted,Q0=f.textMuted,p=f.textMuted,D0=f.textMuted,g0=f.textMuted,$=f.textMuted,E=f.textMuted;return _!==y.e&&(y.e=Z(U,"fg",_,y.e)),z0!==y.t&&(y.t=Z(U,"attributes",z0,y.t)),t!==y.a&&(y.a=Z(L,"fg",t,y.a)),Y0!==y.o&&(y.o=Z(O,"fg",Y0,y.o)),T!==y.i&&(y.i=Z(M,"fg",T,y.i)),Q0!==y.n&&(y.n=Z(R,"fg",Q0,y.n)),p!==y.s&&(y.s=Z(S,"fg",p,y.s)),D0!==y.h&&(y.h=Z(a,"fg",D0,y.h)),g0!==y.r&&(y.r=Z(N,"fg",g0,y.r)),$!==y.d&&(y.d=Z(g,"fg",$,y.d)),E!==y.l&&(y.l=Z(C,"fg",E,y.l)),y},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0}),j}}),B),K(z,b(X0,{get when(){return J.exists},get children(){var j=W("box"),U=W("text");return D(j,U),Z(j,"flexDirection","column"),Z(j,"gap",0),K(U,()=>F("settings.keybindings.overridesApplied")),K(j,b(X0,{get when(){return J.applied.length===0},get children(){var L=W("text");return K(L,()=>F("settings.keybindings.none")),u((O)=>Z(L,"fg",f.textMuted,O)),L}}),null),K(j,b(Zf,{get each(){return J.applied},children:(L)=>(()=>{var O=W("text");return Z(O,"wrapMode","word"),K(O,()=>`${L.id} \u2192 ${L.keys.length>0?L.keys.join(" / "):"(unbound)"} (default: ${L.defaultKeys.join(" / ")})`),u((M)=>Z(O,"fg",f.text,M)),O})()}),null),u((L)=>{var O=f.text,M=ff.BOLD;return O!==L.e&&(L.e=Z(U,"fg",O,L.e)),M!==L.t&&(L.t=Z(U,"attributes",M,L.t)),L},{e:void 0,t:void 0}),j}}),B),K(z,b(X0,{get when(){return J.warnings.length>0},get children(){var j=W("box"),U=W("text");return D(j,U),Z(j,"flexDirection","column"),Z(j,"gap",0),K(U,()=>F("settings.keybindings.warnings")),K(j,b(Zf,{get each(){return J.warnings},children:(L)=>(()=>{var O=W("text");return Z(O,"wrapMode","word"),K(O,`! ${L}`),u((M)=>Z(O,"fg",f.warning,M)),O})()}),null),u((L)=>{var O=f.warning,M=ff.BOLD;return O!==L.e&&(L.e=Z(U,"fg",O,L.e)),M!==L.t&&(L.t=Z(U,"attributes",M,L.t)),L},{e:void 0,t:void 0}),j}}),B),D(B,x0("tmux session keys use the same file: tmux.tab.new (ctrl+t), tmux.tab.prev/next (ctrl+[/]), tmux.tab.close (ctrl+w), tmux.tab.rename (f2), tmux.tab.chooseEngine (ctrl+shift+t), tmux.detach (ctrl+q), tmux.focus (4 chords, left/down/up/right), and prefix layout keys: workspaceSplit (s), workspaceClose (x), workspaceReset (r), tasksToggle (a), opsToggle (o), terminalToggle (z). They apply when a session is (re)built.")),Z(B,"wrapMode","word"),Z(V,"wrapMode","word"),K(V,()=>`Fixed (not rebindable): ${Y.join(", ")}.`),u((j)=>{var U=f.text,L=ff.BOLD,O=f.textMuted,M=f.text,R=ff.BOLD,S=f.textMuted,a=f.textMuted,N=f.textMuted;return U!==j.e&&(j.e=Z(G,"fg",U,j.e)),L!==j.t&&(j.t=Z(G,"attributes",L,j.t)),O!==j.a&&(j.a=Z(X,"fg",O,j.a)),M!==j.o&&(j.o=Z(Q,"fg",M,j.o)),R!==j.i&&(j.i=Z(Q,"attributes",R,j.i)),S!==j.n&&(j.n=Z(H,"fg",S,j.n)),a!==j.s&&(j.s=Z(B,"fg",a,j.s)),N!==j.h&&(j.h=Z(V,"fg",N,j.h)),j},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),z})()}var HD=k(()=>{h();h();h();h();h();h();h();h();Wf();H8();xf();G1();yG();Oq();bG();y8()});import{TextAttributes as iy}from"@opentui/core";function ly(f){return f.split(/[-_]+/).filter((J)=>J.length>0).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function Tz(f){let J=vf(),Y=i0(),z=Y1(),{theme:G}=Y,[X,q]=r("sidebar"),[Q,H]=r("general"),[B,V]=r(0),[j,U]=r(0),[L,O]=r(""),[M,R]=r(""),[S,a]=r(""),N=U0(()=>Y.all().slice().sort()),[,g]=r(Math.max(0,N().findIndex((v)=>v===Y.selected))),C=t4(f.orchestrator),[y,_]=r(null),[z0,t]=r(null),[Y0,T]=r(null),Q0=!1;zf(()=>{if(Q()!=="accounts"||Q0)return;Q0=!0,uZ().then(_),EZ().then(t),xZ().then(T)});function p(){return JD(Q(),{themeNames:N(),focusAccentSlots:yz,engineList:u0(),hasDaemon:C})}function D0(){return p().length}function g0(){return Lz(f.kv.get(_J,Dz))}function $(v){if(Y.selected===v)return;if(!Y.set(v))return;f.kv.set("activeTheme",v),f.onVisualPrefsChange?.()}function E(){return oj()}function f0(v){if(oj()===v)return;xX(v),f.kv.set(yQ,v),f.onVisualPrefsChange?.()}function I(v){if(Y.transparentBackground===v)return;Y.setTransparentBackground(v),f.kv.set("transparentBackground",v),f.onVisualPrefsChange?.()}function G0(){I(!Y.transparentBackground)}function x(v){if(Y.focusAccent===v)return;Y.setFocusAccent(v),f.kv.set("focusAccent",v),f.onVisualPrefsChange?.()}function c(v){f.kv.set(_J,v)}function Z0(){return f.kv.get("notifications.toast.enabled",!0)!==!1}function V0(){return f.kv.get("notifications.sound.enabled",!0)!==!1}function H0(){f.kv.set("notifications.toast.enabled",!Z0())}function y0(){f.kv.set("notifications.sound.enabled",!V0())}function w0(){return f.kv.get(bq,!0)!==!1}function T0(){f.kv.set(bq,!w0())}function r0(){return f.kv.get("experimental.remoteProjects",!1)===!0}function P(){f.kv.set("experimental.remoteProjects",!r0())}function M0(){return f.kv.get(jz,!1)===!0}function J0(){f.kv.set(jz,!M0())}function F0(){return f.kv.get(Wz,!1)===!0}function a0(){f.kv.set(Wz,!F0())}function p0(){let v=f.kv.get("customEngineIds",[]);return Array.isArray(v)?v.filter((A0)=>typeof A0==="string"&&A0.trim().length>0):[]}function u0(){return[...cf,...p0()]}function _0(v){let A0=f.kv.get(jJ(v),"");return typeof A0==="string"?A0.trim():""}function n(v){return _0(v)||BX(v).join(" ")}function q0(v){return Q1(v)&&_0(v).length===0&&!o0(v)}function b0(v){let A0=f.kv.get(WJ(v),"");return typeof A0==="string"?A0.trim():""}function o0(v){return b0(v).length>0}function l0(v){return b0(v)||bB[v]||v}let[$0,t0]=r(kf("lastSelectedVendor")??Sf);function Rf(v){return $0()===v}function Af(v){af("lastSelectedVendor",v),f.kv.set("lastSelectedVendor",v),t0(v)}async function o(v){let A0=await YY.show(J,n(v),{dialogTitle:`${l0(v)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(A0===void 0)return;f.kv.set(jJ(v),A0.trim())}async function e(v){let A0=await YY.show(J,l0(v),{dialogTitle:`${l0(v)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(A0===void 0)return;f.kv.set(WJ(v),A0.trim())}function B0(v){if(f.kv.set(jJ(v),""),f.kv.set(WJ(v),""),!Q1(v))f.kv.set("customEngineIds",p0().filter((A0)=>A0!==v)),U((A0)=>Math.max(0,Math.min(A0,u0().length)))}async function C0(){let v=await YY.show(J,"",{dialogTitle:"Add engine",fieldLabel:"id",submitLabel:"next",placeholder:"lowercase slug, e.g. aider"});if(v===void 0)return;let A0=v.trim().toLowerCase();if(!A0||Q1(A0)||p0().includes(A0))return;let Bf=await YY.show(J,"",{dialogTitle:`Add engine \xB7 ${A0}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(Bf===void 0)return;let Ff=await YY.show(J,A0,{dialogTitle:`Add engine \xB7 ${A0}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(f.kv.set("customEngineIds",[...p0(),A0]),Bf.trim())f.kv.set(jJ(A0),Bf.trim());let Qf=Ff?.trim()??"";f.kv.set(WJ(A0),Qf&&Qf!==A0?Qf:ly(A0))}function A(){if(Q()!=="engines"||X()!=="body")return null;let v=xQ(p(),j());return v?.kind==="engine"?v.vendor:null}function P0(){return _z(f.kv.get(pJ,Xq))}function K0(){let v=Uz.indexOf(P0()),A0=Uz[(v+1)%Uz.length];if(A0)f.kv.set(pJ,A0)}function E0(){let v=f.kv.get(kY,"");return typeof v==="string"?v:""}async function W0(){let v=await YY.show(J,E0(),{dialogTitle:"Custom editor command (use {file} for the path)",fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(v===void 0)return;let A0=v.trim();if(f.kv.set(kY,A0),A0)f.kv.set(pJ,"custom")}async function L0(){a("submitting...");try{let v=MG({title:L(),body:M()});a(`sent: ${v.url}`),O(""),R(""),U(0)}catch(v){a(`error: ${v instanceof Error?v.message:String(v)}`)}}let R0=()=>Q()==="feedback"&&X()==="body";function Jf(v){let A0=j()+v;if(A0<0||A0>2){q("sidebar");return}U(A0)}function Yf(){if(X()!=="sidebar"||D0()===0)return;if(q("body"),U(0),Q()==="general")g(0)}function n0(v){if(X()==="sidebar"){let Ff=(B()+v+Iz.length)%Iz.length;V(Ff);let Qf=Iz[Ff];if(Qf)H(Qf.id),U(0);return}let A0=D0();if(A0===0)return;let Bf=(j()+v+A0)%A0;if(U(Bf),xQ(p(),Bf)?.kind==="theme")g(Bf)}function yf(v){H(v),V(Iz.findIndex((A0)=>A0.id===v)),U(0),q("sidebar")}let k0={theme:(v)=>$(v.name),language:(v)=>f0(v.locale),transparent:()=>G0(),focusAccent:(v)=>x(v.slot),toast:()=>H0(),sound:()=>y0(),zenKeepTasks:()=>T0(),surface:(v)=>c(v.surface),editorKind:()=>K0(),editorCustom:()=>void W0(),engine:(v)=>void o(v.vendor),engineAdd:()=>void C0(),feedbackTitle:()=>U(0),feedbackBody:()=>U(1),feedbackSend:()=>void L0(),devReset:()=>void g8(J,f.kv,z),devRestartDaemon:()=>void R8(J,f.orchestrator,z),devRemoteProjects:()=>P(),devAutoStatus:()=>J0(),devDispatcher:()=>a0()};function wf(){let v=xQ(p(),j());if(!v)return;k0[v.kind](v)}return Uf(()=>({enabled:(!f.standalone||J.stack.length===0)&&!R0(),bindings:[{key:"down",cmd:()=>n0(1)},{key:"up",cmd:()=>n0(-1)},{key:"j",cmd:()=>n0(1)},{key:"k",cmd:()=>n0(-1)},{key:"tab",cmd:()=>n0(1)},{key:"right",cmd:Yf},{key:"l",cmd:Yf},{key:"left",cmd:()=>q("sidebar")},{key:"h",cmd:()=>q("sidebar")},{key:"return",cmd:()=>{if(X()==="sidebar"){Yf();return}wf()}},{key:"t",cmd:G0},{key:"r",cmd:()=>{let v=A();if(v)e(v)}},{key:"x",cmd:()=>{let v=A();if(v)B0(v)}},{key:"d",cmd:()=>{let v=A();if(v)Af(v)}}]})),Uf(()=>({enabled:R0(),bindings:[{key:"tab",cmd:()=>Jf(1)},{key:"shift+tab",cmd:()=>Jf(-1)}]})),Uf(()=>({enabled:R0()&&j()===2,bindings:[{key:"return",cmd:()=>void L0()}]})),(()=>{var v=W("box"),A0=W("box"),Bf=W("text"),Ff=W("text"),Qf=W("box"),d=W("box"),s=W("box"),S0=W("text");return D(v,A0),D(v,Qf),D(v,s),Z(v,"paddingLeft",2),Z(v,"paddingRight",2),Z(v,"paddingBottom",1),Z(v,"gap",1),D(A0,Bf),D(A0,Ff),Z(A0,"flexDirection","row"),Z(A0,"justifyContent","space-between"),K(Bf,()=>F("settings.title")),Z(Ff,"onMouseUp",()=>f.onClose()),K(Ff,()=>F("settings.esc")),D(Qf,d),Z(Qf,"flexDirection","row"),Z(Qf,"gap",2),K(Qf,b(YD,{level:X,cursor:B,switchSection:yf}),d),Z(d,"flexGrow",1),Z(d,"flexShrink",1),Z(d,"flexDirection","column"),Z(d,"gap",1),K(d,b(X0,{get when(){return Q()==="general"},get children(){return b(zD,{level:X,bodyRow:j,setLevel:q,setBodyRow:U,themeNames:N,setThemeCursor:g,selectTheme:$,currentLocale:E,selectLanguage:f0,toggleTransparent:G0,selectFocusAccent:x,toastEnabled:Z0,soundEnabled:V0,toggleToast:H0,toggleSound:y0,zenKeepsTasks:w0,toggleZenKeepsTasks:T0,settingsSurface:g0,selectSurface:c,editorKind:P0,cycleEditorKind:K0,editorCustomCommand:E0,editEditorCustom:()=>void W0()})}}),null),K(d,b(X0,{get when(){return Q()==="engines"},get children(){return b(GD,{level:X,bodyRow:j,setLevel:q,setBodyRow:U,get vendors(){return u0()},isCustom:(N0)=>!Q1(N0),displayName:l0,commandText:n,isDefault:q0,isDefaultEngine:Rf,editEngine:(N0)=>void o(N0),renameEngine:(N0)=>void e(N0),resetEngine:B0,onAddEngine:()=>void C0()})}}),null),K(d,b(X0,{get when(){return Q()==="accounts"},get children(){return b(XD,{claudeStatus:y,codexStatus:z0,copilotStatus:Y0})}}),null),K(d,b(X0,{get when(){return Q()==="keys"},get children(){return b(QD,{})}}),null),K(d,b(X0,{get when(){return Q()==="feedback"},get children(){return b(ZD,{level:X,bodyRow:j,setLevel:q,setBodyRow:U,title:L,setTitle:(N0)=>{O(N0),a("")},body:M,setBody:(N0)=>{R(N0),a("")},status:S,onTitleSubmit:()=>U(1),onBodySubmit:()=>void L0(),submit:()=>void L0()})}}),null),K(d,b(X0,{get when(){return Q()==="dev"},get children(){return b(qD,{level:X,bodyRow:j,setLevel:q,setBodyRow:U,hasDaemon:C,confirmReset:()=>void g8(J,f.kv,z),confirmRestartDaemon:()=>void R8(J,f.orchestrator,z),remoteProjectsEnabled:r0,toggleRemoteProjects:P,autoStatusEnabled:M0,toggleAutoStatus:J0,dispatcherEnabled:F0,toggleDispatcher:a0})}}),null),D(s,S0),Z(s,"paddingTop",0),K(S0,(()=>{var N0=I0(()=>!!R0());return()=>N0()?F("settings.nav.feedback"):F("settings.nav.default")})()),u((N0)=>{var Z1=iy.BOLD,V1=G.text,tf=G.textMuted,v1=G.textMuted;return Z1!==N0.e&&(N0.e=Z(Bf,"attributes",Z1,N0.e)),V1!==N0.t&&(N0.t=Z(Bf,"fg",V1,N0.t)),tf!==N0.a&&(N0.a=Z(Ff,"fg",tf,N0.a)),v1!==N0.o&&(N0.o=Z(S0,"fg",v1,N0.o)),N0},{e:void 0,t:void 0,a:void 0,o:void 0}),v})()}var b8=k(()=>{h();h();h();h();h();h();h();h();Wf();fz();E1();eq();ZX();Yq();gf();cB();S1();K1();xf();G1();Zq();b1();W8();P1();O8();fD();y8();HD();Tz.show=(f,J,Y)=>{let z=!1;return new Promise((G)=>{f.replace(()=>b(Tz,{kv:J,orchestrator:Y,onVisualPrefsChange:()=>{z=!0},onClose:()=>G({visualPrefsChanged:z})}),()=>G({visualPrefsChanged:z}))})}});import{TextAttributes as ay}from"@opentui/core";function jD(){let{theme:f}=i0(),J=TJ(),Y=kQ(),z=()=>Y.toasts().slice(-BD),G=()=>Math.max(0,J().width-$y-ry),X=()=>Math.max(0,J().height-py-BD-1);return b(X0,{get when(){return Y.toasts().length>0},get children(){var q=W("box");return Z(q,"position","absolute"),Z(q,"zIndex",2500),Z(q,"width",40),Z(q,"flexDirection","column"),Z(q,"gap",0),K(q,b(Zf,{get each(){return z()},children:(Q)=>{let H=()=>Q.kind==="needs_input"?f.warning:Q.kind==="error"?f.error:f.success,B=()=>f.selectedListItemText,V=()=>Q.kind==="needs_input"?"?":Q.kind==="error"?"\u2715":"\u2713";return(()=>{var j=W("box"),U=W("text"),L=W("text");return D(j,U),D(j,L),Z(j,"flexDirection","row"),Z(j,"gap",1),Z(j,"paddingLeft",1),Z(j,"paddingRight",1),Z(j,"onMouseUp",()=>Y.dismiss(Q.id)),Z(U,"wrapMode","none"),K(U,V),Z(L,"wrapMode","none"),K(L,()=>Q.title),u((O)=>{var M=H(),R=B(),S=ay.BOLD,a=B();return M!==O.e&&(O.e=Z(j,"backgroundColor",M,O.e)),R!==O.t&&(O.t=Z(U,"fg",R,O.t)),S!==O.a&&(O.a=Z(U,"attributes",S,O.a)),a!==O.o&&(O.o=Z(L,"fg",a,O.o)),O},{e:void 0,t:void 0,a:void 0,o:void 0}),j})()}})),u((Q)=>{var H=G(),B=X();return H!==Q.e&&(Q.e=Z(q,"left",H,Q.e)),B!==Q.t&&(Q.t=Z(q,"top",B,Q.t)),Q},{e:void 0,t:void 0}),q}})}var BD=4,$y=40,ry=2,py=2;var WD=k(()=>{h();h();h();h();h();h();h();Wf();NQ();xf()});import{TextAttributes as _y}from"@opentui/core";function oy(f,J){let Y=f?`v${f}`:F("update.skew.olderBuild");return F("update.skew.hint",{daemon:Y,clientVersion:J})}function VD(f){let{theme:J}=i0(),Y=()=>Math.max(4,f.width()-2);return b(X0,{get when(){return f.stale()},get children(){var z=W("box"),G=W("text"),X=W("box"),q=W("text"),Q=W("box"),H=W("text");return D(z,G),D(z,X),D(z,Q),Z(z,"flexDirection","column"),Z(z,"flexShrink",0),Z(z,"paddingLeft",1),Z(z,"paddingRight",1),Z(z,"paddingBottom",1),Z(G,"wrapMode","none"),K(G,()=>"\u2594".repeat(Y())),D(X,q),Z(X,"flexDirection","row"),Z(X,"gap",1),Z(q,"wrapMode","none"),K(q,()=>F("update.skew.title")),D(Q,H),Z(Q,"flexDirection","row"),Z(Q,"gap",1),Z(H,"wrapMode","word"),K(H,()=>oy(f.daemonVersion(),f.clientVersion)),u((B)=>{var{warning:V,warning:j}=J,U=_y.BOLD,L=J.text;return V!==B.e&&(B.e=Z(G,"fg",V,B.e)),j!==B.t&&(B.t=Z(q,"fg",j,B.t)),U!==B.a&&(B.a=Z(q,"attributes",U,B.a)),L!==B.o&&(B.o=Z(H,"fg",L,B.o)),B},{e:void 0,t:void 0,a:void 0,o:void 0}),z}})}var KD=k(()=>{h();h();h();h();h();h();Wf();xf();G1()});function UD(f,J){return f.find((Y)=>Y.id!==J&&!Y.archived)}async function sy(f){let J=f.tasks.find((X)=>X.id===f.taskId);if(!J)return null;let Y=!J.archived;try{await f.orch.setArchived(f.taskId,Y)}catch(X){return f.logger.error(`${f.logPrefix} archive failed:`,X),null}if(!Y)return{archived:Y};let z=Lf(f.taskId),G=UD(f.tasks,f.taskId);if(await bJ(z,G?Lf(G.id):void 0).catch((X)=>{f.logger.error(`${f.logPrefix} switch-client failed:`,X)}),f.updateActiveTask)await f.orch.setActiveTask(G?.id??null).catch(()=>{});return await l1(z).catch((X)=>{f.logger.error(`${f.logPrefix} kill tmux session failed:`,X)}),{archived:Y,nextTask:G}}async function ty(f){let J=UD(f.tasks,f.taskId),Y=Lf(f.taskId);if(f.switchBeforeKill)await bJ(Y,J?Lf(J.id):void 0).catch((z)=>{f.logger.error(`${f.logPrefix} switch-client failed:`,z)});if(f.updateActiveTask)await f.orch?.setActiveTask(J?.id??null).catch(()=>{});return await l1(Y).catch((z)=>{f.logger.error(`${f.logPrefix} kill tmux session failed:`,z)}),{nextTask:J}}async function DD(f,J){if(!f.orch)return;let Y=f.tasks().find((G)=>G.id===J);if(!Y)return;if(!Y.archived){if(!await f.confirm({title:`Archive "${Y.title}"?`,body:"Moves it to Archives and stops its running session. The worktree, branch, and chat history stay \u2014 unarchive to bring it back.",cancelLabel:"cancel",confirmLabel:"archive"}))return}if(!await sy({orch:f.orch,tasks:f.tasks(),taskId:J,logger:f.logger,logPrefix:f.logPrefix,updateActiveTask:f.updateActiveTask}))return;await f.reload?.()}async function LD(f,J){if(!f.orch)return;let Y=f.tasks().find((q)=>q.id===J);if(!Y)return;if(!await f.confirm({title:`Delete "${Y.title}"?`,body:"Removes the task entry and its worktree. The tmux session (if any) is killed.",cancelLabel:"cancel",confirmLabel:"delete"}))return;let G=!1;try{await f.orch.deleteTask(J),G=!0}catch(q){if((q instanceof Error?q.message:String(q)).includes(DH)){if(await f.confirm({title:`"${Y.title}" has uncommitted changes`,body:"Its worktree has uncommitted or untracked work that will be permanently deleted. Force delete anyway?",cancelLabel:"cancel",confirmLabel:"force delete"}))try{await f.orch.deleteTask(J,{force:!0}),G=!0}catch(B){f.logger.error(`${f.logPrefix} force delete failed:`,B),f.notifyError?.(`Couldn't delete: ${B instanceof Error?B.message:String(B)}`)}}else f.logger.error(`${f.logPrefix} delete failed:`,q),f.notifyError?.(`Couldn't delete: ${q instanceof Error?q.message:String(q)}`)}if(!G)return;let{nextTask:X}=await ty({orch:f.orch,tasks:f.tasks(),taskId:J,logger:f.logger,logPrefix:f.logPrefix,switchBeforeKill:f.switchBeforeKill,updateActiveTask:f.updateActiveTask});await f.reload?.(),f.onTaskDeleted?.(J,X)}async function MD(f,J){let Y=f.tasks().find((G)=>G.id===J);if(!Y)return;let z=await f.promptText(Y.title);if(!z||!f.orch)return;try{await f.orch.setTitle(J,z)}catch(G){f.logger.error(`${f.logPrefix} task.rename failed:`,G),f.notifyError?.(`Couldn't rename task: ${G instanceof Error?G.message:String(G)}`);return}await f.reload?.()}async function FD(f,J){let Y=f.tasks().find((G)=>G.id===J);if(!Y||Y.kind==="main")return;let z=await f.promptText(Y.branch,{dialogTitle:"Rename branch",fieldLabel:"branch"});if(!z||!f.orch)return;try{await f.orch.setBranch(J,z)}catch(G){f.logger.error(`${f.logPrefix} task.setBranch failed:`,G),f.notifyError?.(`Couldn't rename branch: ${G instanceof Error?G.message:String(G)}`);return}await f.reload?.()}async function OD(f,J){let Y=f.tasks().find((X)=>X.id===J);if(!Y||!f.orch)return;let z=await iJ(),G=ZY(z,Y.vendor??Sf);try{await f.orch.setVendor(J,G)}catch(X){f.logger.error(`${f.logPrefix} task.setVendor failed:`,X),f.notifyError?.(`Couldn't switch engine: ${X instanceof Error?X.message:String(X)}`);return}f.notifyInfo?.(`Engine \u2192 ${Vz(G)} (applies on reopen)`),await f.reload?.()}async function AD(f){let J=c1(),Y=f.cursorRepo()??J[0]??process.cwd();if(f.openCreateSurface&&await f.openCreateSurface(Y))return;let z=f.lastVendor()??Sf,G=await iJ();if(G.length===0)f.notifyInfo?.("No engine CLI detected \u2014 install claude or codex, or add one in Settings \u2192 Engines");let X=f.orch,q=await f.promptNewTask(Y,J,{defaultVendor:z,availableVendors:G,discoverAdoptable:X?(H)=>X.discoverAdoptableWorktrees(H):void 0});if(!q)return;if(f.rememberVendor(q.vendor),vJ(q.repo),f.onRepoSaved?.(),!X){f.logger.error(`${f.logPrefix} no daemon; cannot create task`);return}f.notifyInfo?.("Creating task\u2026");let Q;try{if(q.mode==="adopt")for(let H of q.adopt)Q=(await X.adoptWorktree({repo:q.repo,worktreePath:H.worktreePath,branch:H.branch,vendor:q.vendor})).id;else Q=(await X.createTask({repo:q.repo,baseRef:q.baseRef,vendor:q.vendor})).id}catch(H){f.logger.error(`${f.logPrefix} task.create/adopt failed:`,H),f.notifyError?.(`Couldn't create task: ${H instanceof Error?H.message:String(H)}`);return}if(await f.reload?.(),Q)f.selectTask?.(Q),await f.enterTask?.(Q)}var gD=k(()=>{fz();E1();FH();gf();S1();K1();J1()});import{spawn as ey}from"child_process";import{existsSync as fb}from"fs";import{basename as Jb,delimiter as Yb,isAbsolute as zb,join as Gb}from"path";function S8(f,J,Y){if(zb(f))return Y(f);let z=J.PATH??"";for(let G of z.split(Yb)){if(!G)continue;if(Y(Gb(G,f)))return!0}return!1}function qb(f){let J=Jb(f);if(J==="code")return"VS Code";if(J==="cursor")return"Cursor";if(J==="windsurf")return"Windsurf";if(J==="zed")return"Zed";return J||f}function RD(f={}){let J=f.env??process.env,Y=f.platform??process.platform,z=f.exists??fb,G=J.KOBE_OPEN_EDITOR?.trim();if(G)return{id:"env",label:qb(G),command:G,args:[]};for(let X of Xb)if(S8(X.command,J,z))return{id:X.id,label:X.label,command:X.command,args:[]};if(Y==="darwin"&&S8("open",J,z)){for(let X of Zb)if(X.paths.some((q)=>z(q)))return{id:X.id,label:X.label,command:"open",args:["-a",X.appName]};return{id:"mac-open",label:"Finder",command:"open",args:[]}}if(Y==="linux"&&S8("xdg-open",J,z))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function Qb(f,J){return[J.command,[...J.args,f]]}function CD(f,J,Y={}){if(!f)return!1;let z=Y.spawn??ey,[G,X]=Qb(f,J);try{let q=z(G,X,{detached:!0,stdio:"ignore"});if(q.pid===void 0)return!1;return q.unref(),!0}catch{return!1}}var Xb,Zb;var kD=k(()=>{Xb=[{id:"code",label:"VS Code",command:"code"},{id:"cursor",label:"Cursor",command:"cursor"},{id:"windsurf",label:"Windsurf",command:"windsurf"},{id:"zed",label:"Zed",command:"zed"}],Zb=[{id:"vscode.app",label:"VS Code",appName:"Visual Studio Code",paths:["/Applications/Visual Studio Code.app"]},{id:"cursor.app",label:"Cursor",appName:"Cursor",paths:["/Applications/Cursor.app","/System/Applications/Cursor.app"]},{id:"windsurf.app",label:"Windsurf",appName:"Windsurf",paths:["/Applications/Windsurf.app"]},{id:"zed.app",label:"Zed",appName:"Zed",paths:["/Applications/Zed.app"]}]});function wQ(f){let J=new Map;function Y(z){let G=J.get(z);if(!G){let[X,q]=r(f.initial,f.equals?{equals:f.equals}:void 0);G={read:X,write:(Q)=>q(()=>Q),inFlight:!1,nextAllowedAt:0},J.set(z,G)}return G}return{read(z){if(!z)return f.initial;return Y(z).read()},poll(z){if(!z)return;let G=Y(z);fq(G,f,(X)=>f.run(z,X),(X)=>G.write(X))},reset(){J.clear()}}}var iX=k(()=>{Wf();HX();HX()});import{stat as Hb}from"fs/promises";import{join as Bb}from"path";async function Kb(f){try{let J=await Hb(Bb(f,".git","HEAD"));return`${J.mtimeMs}:${J.size}`}catch{return null}}async function Ub(f,J,Y=BJ){let z=await Kb(f);if(z!==null){let Q=ND.get(f);if(Q&&Q.fingerprint===z)return Q.value}let G="",X=await Y("git",["symbolic-ref","--short","HEAD"],{cwd:f,env:x1(),signal:J}),q=X.status===0?X.stdout.trim():"";if(q&&q!=="HEAD")G=q;else if((await Y("git",["rev-parse","--verify","HEAD"],{cwd:f,env:x1(),signal:J})).status===0)G="(detached)";if(z!==null)ND.set(f,{fingerprint:z,value:G});return G}function bD(f){return yD.read(f)}function SD(f){yD.poll(f)}var jb=2000,Wb=30000,Vb=1500,ND,yD;var ID=k(()=>{NY();iX();ND=new Map;yD=wQ({initial:"",timeoutMs:jb,slowRetryMs:Wb,minIntervalMs:Vb,run:(f,J)=>Ub(f,J)})});function I8(f){let J=f.scheduleTimeout??((H,B)=>{let V=setTimeout(H,B);return()=>clearTimeout(V)}),Y=!1,z=null,G=()=>{Y=!0,z?.(),z=J(()=>{Y=!1,z=null},700)},X=()=>{Y=!1,z?.(),z=null},q=(H)=>{let B=f.getFlatIds();if(B.length===0)return;let V=f.getCursor(),j=V<0?0:V,U=Math.min(B.length-1,Math.max(0,j+H));f.setCursor(U)},Q=(H)=>{let B=f.getFlatIds();if(B.length===0)return;f.setCursor(Math.min(B.length-1,Math.max(0,H)))};return{moveDown(){X(),q(1)},moveUp(){X(),q(-1)},selectCurrent(){X();let H=f.getFlatIds(),B=f.getCursor();if(B<0||B>=H.length)return;let V=H[B];if(V!==void 0)f.onSelect(V)},pressG(){if(Y)X(),Q(0);else G()},pressShiftG(){X(),Q(f.getFlatIds().length-1)},isChordArmed(){return Y},disarmChord(){X()}}}function TD(f){let J=I8({getCursor:()=>f.cursorIndex(),setCursor:(X)=>f.setCursorIndex(X),getFlatIds:()=>f.flatTaskIds(),onSelect:(X)=>f.onSelect(X)}),Y=()=>{let X=f.flatTaskIds(),q=f.cursorIndex();if(q<0||q>=X.length)return;return X[q]},z=()=>f.searchMode?.()??!1,G=()=>f.moveMode?.()??!1;Uf(()=>({enabled:f.focused()&&!z(),bindings:mY({"sidebar.nav":(X,q)=>{let Q=(q??0)%2===0;if(G()){let H=Y();if(H===void 0)return;f.onMoveRequest?.(H,Q?1:-1);return}if(Q)J.moveDown();else J.moveUp()},"sidebar.select":()=>{if(G()){f.onMoveModeExit?.();return}J.selectCurrent()},"sidebar.goto":(X)=>{if(G())return;if(X.shift)J.pressShiftG();else J.pressG()},"sidebar.delete":()=>{if(G())return;let X=Y();if(X!==void 0)f.onDeleteRequest?.(X)},"sidebar.archive":()=>{if(G())return;let X=Y();if(X!==void 0)f.onArchiveRequest?.(X)},"sidebar.localMerge":(X)=>{if(!X.shift)return;let q=Y();if(q!==void 0)f.onLocalMergeRequest?.(q)},"sidebar.rename":()=>{if(G())return;let X=Y();if(X!==void 0)f.onRenameRequest?.(X)},"sidebar.pin":(X)=>{if(G())return;if(!X.shift)return;let q=Y();if(q!==void 0)f.onPinRequest?.(q)},"sidebar.search.enter":()=>{if(G())return;f.onSearchEnter?.()},"sidebar.sort":()=>{if(G())return;f.onSortModeToggle?.()},"sidebar.projectFilter":()=>{if(G())return;f.onProjectFilterToggle?.()}})})),Uf(()=>({enabled:f.focused()&&G(),bindings:[{key:"escape",cmd:()=>f.onMoveModeExit?.()}]})),Uf(()=>({enabled:f.focused(),bindings:mY({"sidebar.view":(X,q)=>{f.onViewSwitch?.((q??0)%2===0?-1:1)}})})),Uf(()=>({enabled:f.focused()&&z(),bindings:mY({"sidebar.search.nav":(X,q)=>{if((q??0)%2===0)J.moveDown();else J.moveUp()},"sidebar.search.submit":()=>{J.selectCurrent(),f.onSearchExit?.(!0)},"sidebar.search.cancel":()=>f.onSearchExit?.(!1)})}))}var uD=k(()=>{SG();b1()});function T8(f,J){if(J<=0)return"";if(f.length<=J)return f;return`${f.slice(0,Math.max(0,J-1))}\u2026`}function u8(f,J){return` ${T8(f,Math.max(0,J))}`}function Lb(f){switch(f){case"done":return F("tasks.status.done");case"in_review":return F("tasks.status.inReview");case"in_progress":return F("tasks.status.working");case"backlog":return F("tasks.status.backlog");case"canceled":return F("tasks.status.canceled");case"error":return F("tasks.status.error")}}function Mb(f){switch(f){case"rate_limited":return{text:F("tasks.activity.rateLimited"),tone:"warning"};case"permission_needed":return{text:F("tasks.activity.permissionNeeded"),tone:"warning"};case"error":return{text:F("tasks.activity.error"),tone:"error"};default:return null}}function wD(f){switch(f.prStatus?.checkState){case"passing":return{glyph:"\u2713",tone:"success"};case"failing":return{glyph:"\u2717",tone:"error"};case"pending":return{glyph:"\u2022",tone:"warning"};default:return null}}function Fb(){return F("tasks.subtitle.noTracking")}function Ob(){return F("tasks.subtitle.materializing")}function Ab(f){if(f.kind==="main")return!1;return f.vendor!==void 0&&!Q1(f.vendor)}function E8(f){let{task:J}=f,Y=J.kind==="main",z=Y?f.mainBranch??"":J.branch,G=Db[J.status],X=f.activity?.state,q=X!==void 0,Q=gb(X),H=Mb(X),B=Ab(J)&&!q,V=f.job!==void 0,j=V||!B&&(X==="running"||f.live||!q&&!Y&&J.status==="in_progress"),U=EG[f.spinnerFrame]??EG[0],L=V?"primary":B?"textMuted":H?.tone??(j?"primary":Q?.tone??G.tone),O=B?Fb():Lb(J.status),M=V?f.truncateBranch(Ob(),f.subtitleBudget):H?f.truncateBranch(H.text,f.subtitleBudget):z.length>0?f.truncateBranch(z,f.subtitleBudget):f.truncateBranch(O,f.subtitleBudget),R=B?ED:Q?.glyph??G.glyph,S=B?ED:Q?.glyph??"\u2605";return{isMain:Y,titleText:Y?MJ(J.repo):J.title,subtitleText:M,loading:j,stateGlyph:j?U:R,projectGlyph:j?U:S,tone:L}}function x8(f,J){if(!f.loading)return f;let Y=EG[J()%EG.length]??"\u280B";if(Y===f.stateGlyph&&Y===f.projectGlyph)return f;return{...f,stateGlyph:Y,projectGlyph:Y}}function gb(f){switch(f){case"rate_limited":return{glyph:"\u25F7",tone:"warning"};case"permission_needed":return{glyph:"?",tone:"warning"};case"error":return{glyph:"\u2715",tone:"error"};case"turn_complete":return{glyph:"\u2713",tone:"primary"};default:return null}}var Db,EG,xD=100,ED="\xB7";var hD=k(()=>{G1();K1();TQ();Db={done:{glyph:"\u2713",tone:"success"},in_review:{glyph:"\u25D0",tone:"warning"},in_progress:{glyph:"",tone:"primary"},backlog:{glyph:"\u25CB",tone:"textMuted"},canceled:{glyph:"\u2298",tone:"textMuted"},error:{glyph:"\u2715",tone:"error"}};EG=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function w8(f){return PD.read(f)}function h8(f){PD.poll(f)}var Rb=4000,Cb=60000,kb=1500,Nb,PD;var vD=k(()=>{NY();iX();VG();iX();Nb={added:0,deleted:0},PD=wQ({initial:Nb,equals:IJ,timeoutMs:Rb,slowRetryMs:Cb,minIntervalMs:kb,run:async(f,J)=>{let Y=await BJ("git",["status","--porcelain=v1"],{cwd:f,env:x1(),signal:J});if(Y.status!==0)throw Error("git status failed");return WG(Y.stdout)}})});import{TextAttributes as bf}from"@opentui/core";function yb(f){switch(f){case"active":return F("tasks.view.workspace");case"archived":return F("tasks.view.archives")}}function cD(f,J=Sb){if(f.length<=J)return f;return`${f.slice(0,Math.max(0,J-1))}\u2026`}function Ib(f){let J=0;for(let Y of f)J+=(Y.codePointAt(0)??0)>=4352?2:1;return J}function Tb(f,J){if(J<=0||f.length<=J)return f;return`\u2026${f.slice(f.length-Math.max(0,J-1))}`}function nD(f){let{theme:J}=i0(),Y=()=>f.focused?f.focused():!0,[z,G]=r("active"),[X,q]=r(!1),[Q,H]=r(""),[B,V]=r(null),j=()=>f.projectFilter?.()??B(),U=(n)=>{if(f.onProjectFilterChange)f.onProjectFilterChange(n);else V(n)};function L(){H(""),q(!0),f.onSearchActiveChange?.(!0)}function O(n){q(!1),H(""),f.onSearchActiveChange?.(!1)}zf(()=>{if(!X())return;let n=Y1();if(!n)return;let q0=(b0)=>{if(b0.defaultPrevented)return;if(!Y())return;if(b0.ctrl||b0.meta||b0.option)return;if(b0.name==="backspace"){H(($0)=>$0.slice(0,-1));return}let o0=b0.sequence;if(!o0||o0.length!==1)return;let l0=o0.charCodeAt(0);if(l0<32||l0===127)return;H(($0)=>$0+o0)};n.keyInput.on("keypress",q0),mf(()=>n.keyInput.off("keypress",q0))});let[M,R]=r(0),S=setInterval(()=>R((n)=>n+1),bb);mf(()=>clearInterval(S));let[a,N]=r(0),g=setInterval(()=>N((n)=>(n+1)%EG.length),xD);mf(()=>clearInterval(g));let C=()=>f.sortMode?.()??"default",y=U0(()=>i4(f.tasks(),z())),_=U0(()=>{let n=j();if(!n)return null;let q0=o1(n);return y().find((b0)=>o1(b0.repo)===q0)??null}),z0=U0(()=>_()?.repo??null),t=U0(()=>_()?.label??"all"),Y0=U0(()=>{let n=_();return n?n.count:y().reduce((q0,b0)=>q0+b0.count,0)}),T=U0(()=>{let n=Y0();return`${n} ${n===1?F("tasks.project.taskSingular"):F("tasks.project.taskPlural")}`}),Q0=U0((n)=>$4(n,D8(f.tasks(),z(),X()?Q():"",C(),z0())),[]),p=U0(()=>L8(Q0())),D0=U0(()=>a4(Q0())),g0=U0(()=>D0().projectRows),$=U0(()=>D0().taskRows),E=U0(()=>{let n=new Map;for(let q0 of Q0())n.set(q0.flatIndex,q0);return n}),f0=U0(()=>L8(D8(f.tasks(),z(),"",C(),z0())).length),I=U0(()=>$().length>0);zf(()=>{let n=j(),q0=y();if(n!==null&&q0.length>0&&(q0.length<=1||_()===null))U(null)});function G0(){let n=y();if(n.length<=1){U(null);return}let q0=z0(),b0=q0?o1(q0):null,o0=b0===null?-1:n.findIndex(($0)=>o1($0.repo)===b0),l0=n[o0+1];U(l0?.repo??null)}let x=()=>f.width?f.width():mD,c=U0(()=>Math.max(6,x()-9)),Z0=U0(()=>Math.max(6,x()-16)),V0=TJ(),H0=U0(()=>{let n=Math.max(2,Math.min(10,Math.floor(V0().height*0.25))),q0=Math.max(2,g0().length*2);return Math.min(n,q0)}),[y0,w0]=r(null),[T0,r0]=r(-1),P,M0,J0,F0=new Map;zf(()=>{let n=f.width?f.width():mD,q0=J0;if(!q0)return;q0.width=n,q0.flexShrink=1,q0.minHeight=0}),zf(O1([T0,Q0],([n])=>{let q0=E().get(n);if(!q0)return;let b0=q0.task.kind==="main"?P:M0;if(!b0)return;if(b0.viewport.height<=0)return;let o0=F0.get(n);if(!o0)return;b0.scrollChildIntoView(o0.id)})),zf(O1(()=>[f.selectedId(),p()],([n,q0])=>{let b0=$f(T0);if(n===null){if(b0===-1&&q0.length>0)r0(0);else if(b0>=q0.length)r0(Math.max(0,q0.length-1));else if(q0.length===0)r0(-1);return}let o0=q0.indexOf(n);if(o0>=0){if(o0!==b0)r0(o0)}else if(q0.length===0)r0(-1);else if(b0<0||b0>=q0.length)r0(q0.length-1)})),zf(O1(z,()=>{let n=p();r0(n.length>0?0:-1)},{defer:!0})),zf(O1(z0,(n)=>r0(l4(Q0(),n)),{defer:!0})),zf(O1([X,Q],()=>{if(!X())return;let n=p();r0(n.length>0?0:-1)}));function a0(n){let q0=z(),b0=lX.findIndex(($0)=>$0.view===q0);if(b0<0)return;let o0=(b0+n+lX.length)%lX.length,l0=lX[o0];if(l0)G(l0.view)}TD({focused:Y,cursorIndex:T0,setCursorIndex:r0,flatTaskIds:p,onSelect:(n)=>{f.onSelect(n),f.onActivate?.(n)},onDeleteRequest:(n)=>f.onDeleteRequest?.(n),onArchiveRequest:(n)=>f.onArchiveRequest?.(n),onLocalMergeRequest:(n)=>f.onLocalMergeRequest?.(n),moveMode:f.moveMode,onMoveRequest:(n,q0)=>f.onMoveRequest?.(n,q0),onMoveModeExit:()=>f.onMoveModeExit?.(),onRenameRequest:(n)=>f.onRenameRequest?.(n),onPinRequest:(n)=>f.onPinRequest?.(n),onViewSwitch:(n)=>a0(n),onSortModeToggle:()=>f.onSortModeToggle?.(),onProjectFilterToggle:()=>G0(),searchMode:X,onSearchEnter:()=>L(),onSearchExit:(n)=>O(n)});let p0=(n)=>(()=>{var q0=W("box"),b0=W("box"),o0=W("text"),l0=W("text");return D(q0,b0),Z(q0,"flexDirection","column"),Z(q0,"flexShrink",0),K(q0,b(X0,{get when(){return n.topPad},get children(){var $0=W("box"),t0=W("text");return D($0,t0),Z($0,"flexShrink",0),D(t0,x0(" ")),Z(t0,"wrapMode","none"),$0}}),b0),D(b0,o0),D(b0,l0),Z(b0,"flexDirection","row"),Z(b0,"flexShrink",0),Z(b0,"gap",1),Z(b0,"paddingLeft",1),Z(b0,"paddingRight",1),Z(o0,"wrapMode","none"),K(o0,()=>n.label),Z(l0,"wrapMode","none"),K(l0,()=>"\u2500".repeat(Math.max(2,x()-10-n.label.length-(n.suffix?.length??0)))),K(b0,b(X0,{get when(){return n.suffix},get children(){var $0=W("text");return Z($0,"wrapMode","none"),K($0,()=>n.suffix),u((t0)=>{var Rf=J.info,Af=bf.BOLD;return Rf!==t0.e&&(t0.e=Z($0,"fg",Rf,t0.e)),Af!==t0.t&&(t0.t=Z($0,"attributes",Af,t0.t)),t0},{e:void 0,t:void 0}),$0}}),null),u(($0)=>{var t0=J.textMuted,Rf=bf.BOLD,Af=J.border;return t0!==$0.e&&($0.e=Z(o0,"fg",t0,$0.e)),Rf!==$0.t&&($0.t=Z(o0,"attributes",Rf,$0.t)),Af!==$0.a&&($0.a=Z(l0,"fg",Af,$0.a)),$0},{e:void 0,t:void 0,a:void 0}),q0})(),u0=(n)=>{switch(n){case"success":return J.success;case"warning":return J.warning;case"primary":return J.primary;case"error":return J.error;default:return J.textMuted}},_0=(n)=>{let q0=n.row.task,b0=n.row.flatIndex,o0=()=>b0===T0(),l0=()=>q0.id===f.selectedId(),$0=U0(()=>{let A=f.chatRunState?.();if(!A)return!1;let P0=`${q0.id}:`;for(let[K0,E0]of A)if(E0==="running"&&K0.startsWith(P0))return!0;return!1}),t0=U0(()=>{let A=pq(f.worktreeChanges?.(),q0.worktreePath);if(A)return A;if(M(),!q0.archived)h8(q0.worktreePath);return w8(q0.worktreePath)},void 0,{equals:IJ}),Rf=U0(()=>{return M(),SD(q0.repo),bD(q0.repo)}),Af=U0(()=>E8({task:q0,activity:f.engineState?.().get(q0.id),job:f.taskJobs?.().get(q0.id),live:$0(),spinnerFrame:0,subtitleBudget:Z0(),truncateBranch:cD,mainBranch:Rf()})),o=U0(()=>x8(Af(),a)),e=()=>!o().loading?J.primary:u0(o().tone),B0=()=>o0()?J.focusAccent:l0()?J.primary:void 0,C0=()=>o0()||l0()?"\u258C":" ";return(()=>{var A=W("box"),P0=W("box"),K0=W("box"),E0=W("text"),W0=W("box"),L0=W("text"),R0=W("text"),Jf=W("box"),Yf=W("text"),n0=W("box"),yf=W("text");return D(A,P0),Z(A,"flexDirection","column"),Z(A,"gap",0),Z(A,"paddingBottom",0),D(P0,K0),D(P0,Jf),hY((k0)=>{F0.set(b0,k0),mf(()=>{if(F0.get(b0)===k0)F0.delete(b0)})},P0),Z(P0,"flexDirection","column"),Z(P0,"gap",0),Z(P0,"onMouseUp",()=>{if(f.onSelect(q0.id),f.activateOnClick)f.onActivate?.(q0.id)}),Z(P0,"onMouseOver",(k0)=>w0({task:q0,x:k0.x,y:k0.y})),Z(P0,"onMouseOut",()=>w0((k0)=>k0?.task.id===q0.id?null:k0)),D(K0,E0),D(K0,W0),Z(K0,"flexDirection","row"),Z(K0,"gap",0),Z(E0,"wrapMode","none"),K(E0,C0),D(W0,L0),D(W0,R0),Z(W0,"flexDirection","row"),Z(W0,"flexGrow",1),Z(W0,"paddingRight",1),Z(W0,"gap",0),Z(L0,"wrapMode","none"),K(L0,()=>o().projectGlyph),Z(R0,"wrapMode","none"),Z(R0,"flexGrow",1),K(R0,()=>u8(o().titleText,c())),D(Jf,Yf),D(Jf,n0),Z(Jf,"flexDirection","row"),Z(Jf,"gap",0),Z(Yf,"wrapMode","none"),K(Yf,C0),D(n0,yf),Z(n0,"flexDirection","row"),Z(n0,"flexGrow",1),Z(n0,"paddingLeft",2),Z(n0,"paddingRight",1),Z(n0,"gap",1),Z(yf,"wrapMode","none"),Z(yf,"flexGrow",1),K(yf,()=>o().subtitleText),K(n0,b(X0,{get when(){return t0().added>0},get children(){var k0=W("text"),wf=x0("+");return D(k0,wf),Z(k0,"wrapMode","none"),K(k0,()=>t0().added,null),u((v)=>Z(k0,"fg",J.success,v)),k0}}),null),K(n0,b(X0,{get when(){return t0().deleted>0},get children(){var k0=W("text"),wf=x0("\u2212");return D(k0,wf),Z(k0,"wrapMode","none"),K(k0,()=>t0().deleted,null),u((v)=>Z(k0,"fg",J.error,v)),k0}}),null),u((k0)=>{var wf=o0()?J.backgroundElement:void 0,v=B0(),A0=e(),Bf=bf.BOLD,Ff=J.text,Qf=bf.BOLD,d=B0(),s=J.textMuted,S0=bf.DIM;return wf!==k0.e&&(k0.e=Z(P0,"backgroundColor",wf,k0.e)),v!==k0.t&&(k0.t=Z(E0,"fg",v,k0.t)),A0!==k0.a&&(k0.a=Z(L0,"fg",A0,k0.a)),Bf!==k0.o&&(k0.o=Z(L0,"attributes",Bf,k0.o)),Ff!==k0.i&&(k0.i=Z(R0,"fg",Ff,k0.i)),Qf!==k0.n&&(k0.n=Z(R0,"attributes",Qf,k0.n)),d!==k0.s&&(k0.s=Z(Yf,"fg",d,k0.s)),s!==k0.h&&(k0.h=Z(yf,"fg",s,k0.h)),S0!==k0.r&&(k0.r=Z(yf,"attributes",S0,k0.r)),k0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),A})()};return(()=>{var n=W("box"),q0=W("box"),b0=W("box"),o0=W("text"),l0=W("box"),$0=W("box"),t0=W("text"),Rf=W("scrollbox"),Af=W("box");return D(n,q0),D(n,l0),D(n,Rf),hY((o)=>{J0=o},n),Z(n,"flexGrow",1),Z(n,"minHeight",0),Z(n,"flexDirection","column"),Z(n,"paddingTop",1),Z(n,"paddingBottom",1),Z(n,"paddingLeft",0),Z(n,"paddingRight",0),D(q0,b0),Z(q0,"flexDirection","row"),Z(q0,"justifyContent","space-between"),Z(q0,"gap",1),Z(q0,"paddingBottom",1),Z(q0,"paddingLeft",1),Z(q0,"paddingRight",1),D(b0,o0),Z(b0,"flexDirection","row"),Z(b0,"gap",1),D(o0,x0("KOBE")),Z(o0,"wrapMode","none"),K(b0,b(X0,{get when(){return f.headerStatus?.()},children:(o)=>(()=>{var e=W("text");return Z(e,"wrapMode","none"),Z(e,"onMouseUp",()=>f.onHeaderStatusClick?.()),K(e,()=>o().label),u((B0)=>{var C0=o().emphasize?J.warning:J.textMuted,A=o().emphasize?bf.BOLD:bf.DIM;return C0!==B0.e&&(B0.e=Z(e,"fg",C0,B0.e)),A!==B0.t&&(B0.t=Z(e,"attributes",A,B0.t)),B0},{e:void 0,t:void 0}),e})()}),null),K(q0,b(X0,{get when(){return f.onAddTask},get children(){var o=W("text");return D(o,x0("[+]")),Z(o,"wrapMode","none"),Z(o,"onMouseUp",()=>f.onAddTask?.()),u((e)=>{var B0=J.primary,C0=bf.BOLD;return B0!==e.e&&(e.e=Z(o,"fg",B0,e.e)),C0!==e.t&&(e.t=Z(o,"attributes",C0,e.t)),e},{e:void 0,t:void 0}),o}}),null),K(n,b(X0,{get when(){return X()},get children(){var o=W("box"),e=W("text"),B0=W("text"),C0=W("text");return D(o,e),D(o,B0),D(o,C0),Z(o,"flexDirection","row"),Z(o,"gap",0),Z(o,"paddingBottom",1),Z(o,"paddingLeft",1),D(e,x0("/")),Z(e,"wrapMode","none"),Z(B0,"wrapMode","none"),K(B0,Q),D(C0,x0("\u2588")),Z(C0,"wrapMode","none"),K(o,b(X0,{get when(){return Q().length===0},get children(){var A=W("text"),P0=x0(" ");return D(A,P0),Z(A,"wrapMode","none"),K(A,()=>F("tasks.search.placeholder"),null),u((K0)=>Z(A,"fg",J.textMuted,K0)),A}}),null),K(o,b(X0,{get when(){return Q().length>0},get children(){var A=W("text"),P0=x0(" "),K0=x0("/");return D(A,P0),D(A,K0),Z(A,"wrapMode","none"),K(A,()=>p().length,K0),K(A,f0,null),u((E0)=>Z(A,"fg",J.textMuted,E0)),A}}),null),u((A)=>{var{info:P0,text:K0,info:E0}=J,W0=bf.BLINK;return P0!==A.e&&(A.e=Z(e,"fg",P0,A.e)),K0!==A.t&&(A.t=Z(B0,"fg",K0,A.t)),E0!==A.a&&(A.a=Z(C0,"fg",E0,A.a)),W0!==A.o&&(A.o=Z(C0,"attributes",W0,A.o)),A},{e:void 0,t:void 0,a:void 0,o:void 0}),o}}),l0),D(l0,$0),Z(l0,"flexDirection","row"),Z(l0,"justifyContent","space-between"),Z(l0,"gap",1),Z(l0,"paddingBottom",1),Z(l0,"paddingLeft",1),Z(l0,"paddingRight",1),D($0,t0),Z($0,"flexDirection","row"),Z($0,"gap",2),K($0,b(Zf,{each:lX,children:(o)=>{let e=()=>z()===o.view;return(()=>{var B0=W("text");return Z(B0,"wrapMode","none"),Z(B0,"onMouseUp",()=>G(o.view)),K(B0,()=>yb(o.view)),u((C0)=>{var A=e()?J.primary:J.textMuted,P0=e()?bf.BOLD:void 0;return A!==C0.e&&(C0.e=Z(B0,"fg",A,C0.e)),P0!==C0.t&&(C0.t=Z(B0,"attributes",P0,C0.t)),C0},{e:void 0,t:void 0}),B0})()}}),t0),D(t0,x0("[/]")),Z(t0,"wrapMode","none"),K(l0,b(X0,{get when(){return f.sortMode},get children(){var o=W("text");return Z(o,"wrapMode","none"),Z(o,"onMouseUp",()=>f.onSortModeToggle?.()),K(o,()=>F("tasks.sort")),u((e)=>{var B0=J.textMuted,C0=bf.DIM;return B0!==e.e&&(e.e=Z(o,"fg",B0,e.e)),C0!==e.t&&(e.t=Z(o,"attributes",C0,e.t)),e},{e:void 0,t:void 0}),o}}),null),K(n,b(X0,{get when(){return g0().length>0},get children(){var o=W("box"),e=W("box"),B0=W("text"),C0=W("text"),A=W("scrollbox"),P0=W("box");return D(o,e),D(o,A),Z(o,"flexDirection","column"),Z(o,"flexShrink",0),D(e,B0),D(e,C0),Z(e,"flexDirection","row"),Z(e,"flexShrink",0),Z(e,"gap",1),Z(e,"paddingLeft",1),Z(e,"paddingRight",1),Z(e,"onMouseUp",()=>G0()),Z(B0,"wrapMode","none"),K(B0,()=>F("tasks.header.projects")),K(e,b(X0,{get when(){return y().length>1},get children(){var K0=W("text");return Z(K0,"wrapMode","none"),K(K0,t),u((E0)=>{var W0=z0()?J.primary:J.textMuted,L0=z0()?bf.BOLD:void 0;return W0!==E0.e&&(E0.e=Z(K0,"fg",W0,E0.e)),L0!==E0.t&&(E0.t=Z(K0,"attributes",L0,E0.t)),E0},{e:void 0,t:void 0}),K0}}),C0),Z(C0,"wrapMode","none"),K(C0,()=>"\u2500".repeat(Math.max(2,x()-10-F("tasks.header.projects").length-(y().length>1?t().length+1:0)-(y().length>1?T().length+1:0)))),K(e,b(X0,{get when(){return y().length>1},get children(){var K0=W("text");return Z(K0,"wrapMode","none"),K(K0,T),u((E0)=>{var W0=J.textMuted,L0=bf.DIM;return W0!==E0.e&&(E0.e=Z(K0,"fg",W0,E0.e)),L0!==E0.t&&(E0.t=Z(K0,"attributes",L0,E0.t)),E0},{e:void 0,t:void 0}),K0}}),null),D(A,P0),hY((K0)=>{P=K0},A),Z(A,"flexShrink",0),Z(A,"flexGrow",0),Z(A,"minHeight",0),Z(A,"stickyScroll",!1),Z(A,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),Z(P0,"flexShrink",0),Z(P0,"gap",0),Z(P0,"paddingRight",1),K(P0,b(Zf,{get each(){return g0()},children:(K0)=>b(_0,{row:K0})})),u((K0)=>{var E0=J.textMuted,W0=bf.BOLD,L0=J.border,R0=H0();return E0!==K0.e&&(K0.e=Z(B0,"fg",E0,K0.e)),W0!==K0.t&&(K0.t=Z(B0,"attributes",W0,K0.t)),L0!==K0.a&&(K0.a=Z(C0,"fg",L0,K0.a)),R0!==K0.o&&(K0.o=Z(A,"maxHeight",R0,K0.o)),K0},{e:void 0,t:void 0,a:void 0,o:void 0}),o}}),Rf),K(n,b(p0,{get label(){return F("tasks.header.tasks")},get suffix(){return I0(()=>C()==="default")()?void 0:C()},get topPad(){return g0().length>0}}),Rf),D(Rf,Af),hY((o)=>{M0=o},Rf),Z(Rf,"flexGrow",1),Z(Rf,"minHeight",0),Z(Rf,"stickyScroll",!1),Z(Rf,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),Z(Af,"flexShrink",0),Z(Af,"gap",0),Z(Af,"paddingRight",1),K(Af,b(Zf,{get each(){return $()},children:(o)=>{let{task:e,flatIndex:B0}=o,C0=()=>B0===T0(),A=()=>e.id===f.selectedId(),P0=U0(()=>{let Yf=f.chatRunState?.();if(!Yf)return!1;let n0=`${e.id}:`;for(let[yf,k0]of Yf)if(k0==="running"&&yf.startsWith(n0))return!0;return!1}),K0=U0(()=>{let Yf=pq(f.worktreeChanges?.(),e.worktreePath);if(Yf)return Yf;if(M(),!e.archived)h8(e.worktreePath);return w8(e.worktreePath)},void 0,{equals:IJ}),E0=U0(()=>E8({task:e,activity:f.engineState?.().get(e.id),job:f.taskJobs?.().get(e.id),live:P0(),spinnerFrame:0,subtitleBudget:Z0(),truncateBranch:cD,mainBranch:""})),W0=U0(()=>x8(E0(),a)),L0=()=>u0(W0().tone),R0=()=>C0()?J.focusAccent:A()?J.primary:void 0,Jf=()=>C0()||A()?"\u258C":" ";return(()=>{var Yf=W("box"),n0=W("box"),yf=W("box"),k0=W("text"),wf=W("box"),v=W("text"),A0=W("text"),Bf=W("box"),Ff=W("text"),Qf=W("box"),d=W("text");return D(Yf,n0),Z(Yf,"flexDirection","column"),Z(Yf,"gap",0),Z(Yf,"paddingBottom",1),D(n0,yf),D(n0,Bf),hY((s)=>{F0.set(B0,s),mf(()=>{if(F0.get(B0)===s)F0.delete(B0)})},n0),Z(n0,"flexDirection","column"),Z(n0,"gap",0),Z(n0,"onMouseUp",()=>{if(f.onSelect(e.id),f.activateOnClick)f.onActivate?.(e.id)}),Z(n0,"onMouseOver",(s)=>w0({task:e,x:s.x,y:s.y})),Z(n0,"onMouseOut",()=>w0((s)=>s?.task.id===e.id?null:s)),D(yf,k0),D(yf,wf),Z(yf,"flexDirection","row"),Z(yf,"gap",0),Z(k0,"wrapMode","none"),K(k0,Jf),D(wf,v),D(wf,A0),Z(wf,"flexDirection","row"),Z(wf,"flexGrow",1),Z(wf,"paddingRight",1),Z(wf,"gap",0),Z(v,"wrapMode","none"),K(v,()=>W0().stateGlyph),Z(A0,"wrapMode","none"),Z(A0,"flexGrow",1),K(A0,()=>u8(W0().titleText,c())),K(wf,b(X0,{get when(){return I0(()=>!!f.moveMode?.())()&&C0()},get children(){var s=W("text");return Z(s,"wrapMode","none"),K(s,()=>F("tasks.moveChip")),u((S0)=>Z(s,"fg",J.warning,S0)),s}}),null),D(Bf,Ff),D(Bf,Qf),Z(Bf,"flexDirection","row"),Z(Bf,"gap",0),Z(Ff,"wrapMode","none"),K(Ff,Jf),D(Qf,d),Z(Qf,"flexDirection","row"),Z(Qf,"flexGrow",1),Z(Qf,"paddingLeft",2),Z(Qf,"paddingRight",1),Z(Qf,"gap",1),Z(d,"wrapMode","none"),Z(d,"flexGrow",1),K(d,()=>W0().subtitleText),K(Qf,b(X0,{get when(){return e.pinned===!0},get children(){var s=W("text");return D(s,x0("\u25B4")),Z(s,"wrapMode","none"),u((S0)=>Z(s,"fg",J.warning,S0)),s}}),null),K(Qf,b(X0,{get when(){return wD(e)},children:(s)=>(()=>{var S0=W("text");return Z(S0,"wrapMode","none"),K(S0,()=>s().glyph),u((N0)=>Z(S0,"fg",u0(s().tone),N0)),S0})()}),null),K(Qf,b(X0,{get when(){return K0().added>0},get children(){var s=W("text"),S0=x0("+");return D(s,S0),Z(s,"wrapMode","none"),K(s,()=>K0().added,null),u((N0)=>Z(s,"fg",J.success,N0)),s}}),null),K(Qf,b(X0,{get when(){return K0().deleted>0},get children(){var s=W("text"),S0=x0("\u2212");return D(s,S0),Z(s,"wrapMode","none"),K(s,()=>K0().deleted,null),u((N0)=>Z(s,"fg",J.error,N0)),s}}),null),u((s)=>{var S0=C0()?J.backgroundElement:void 0,N0=R0(),Z1=L0(),V1=bf.BOLD,tf=J.text,v1=A()||C0()?bf.BOLD:void 0,xJ=R0(),M1=J.textMuted,wJ=bf.DIM;return S0!==s.e&&(s.e=Z(n0,"backgroundColor",S0,s.e)),N0!==s.t&&(s.t=Z(k0,"fg",N0,s.t)),Z1!==s.a&&(s.a=Z(v,"fg",Z1,s.a)),V1!==s.o&&(s.o=Z(v,"attributes",V1,s.o)),tf!==s.i&&(s.i=Z(A0,"fg",tf,s.i)),v1!==s.n&&(s.n=Z(A0,"attributes",v1,s.n)),xJ!==s.s&&(s.s=Z(Ff,"fg",xJ,s.s)),M1!==s.h&&(s.h=Z(d,"fg",M1,s.h)),wJ!==s.r&&(s.r=Z(d,"attributes",wJ,s.r)),s},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),Yf})()}}),null),K(Af,b(X0,{get when(){return p().length===0},get children(){var o=W("box"),e=W("text");return D(o,e),Z(o,"paddingTop",1),Z(o,"paddingLeft",1),K(e,(()=>{var B0=I0(()=>!!(X()&&Q().trim().length>0));return()=>B0()?F("tasks.empty.noMatchSearch"):I0(()=>!!z0())()?I0(()=>z()==="active")()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject"):I0(()=>z()==="active")()?F("tasks.empty.noActive"):F("tasks.empty.noArchived")})()),u((B0)=>Z(e,"fg",J.textMuted,B0)),o}}),null),K(Af,b(X0,{get when(){return I0(()=>!!(z0()&&p().length>0&&!I()))()&&!(X()&&Q().trim().length>0)},get children(){var o=W("box"),e=W("text");return D(o,e),Z(o,"paddingTop",1),Z(o,"paddingLeft",1),Z(e,"wrapMode","none"),K(e,(()=>{var B0=I0(()=>z()==="active");return()=>B0()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject")})()),u((B0)=>{var C0=J.textMuted,A=bf.DIM;return C0!==B0.e&&(B0.e=Z(e,"fg",C0,B0.e)),A!==B0.t&&(B0.t=Z(e,"attributes",A,B0.t)),B0},{e:void 0,t:void 0}),o}}),null),K(Af,b(X0,{get when(){return I0(()=>z()==="archived")()&&p().length>0},get children(){var o=W("box"),e=W("text");return D(o,e),Z(o,"paddingTop",1),Z(o,"paddingLeft",1),Z(e,"wrapMode","none"),K(e,()=>F("tasks.archiveHint")),u((B0)=>{var C0=J.textMuted,A=bf.DIM;return C0!==B0.e&&(B0.e=Z(e,"fg",C0,B0.e)),A!==B0.t&&(B0.t=Z(e,"attributes",A,B0.t)),B0},{e:void 0,t:void 0}),o}}),null),K(n,b(X0,{get when(){return f.zenActive?.()},get children(){var o=W("box"),e=W("text");return D(o,e),Z(o,"flexShrink",0),Z(o,"paddingLeft",1),Z(o,"paddingRight",1),Z(o,"paddingTop",1),D(e,x0("\u262F ZEN")),Z(e,"wrapMode","none"),u((B0)=>{var C0=J.accent,A=bf.BOLD;return C0!==B0.e&&(B0.e=Z(e,"fg",C0,B0.e)),A!==B0.t&&(B0.t=Z(e,"attributes",A,B0.t)),B0},{e:void 0,t:void 0}),o}}),null),K(n,b(X0,{get when(){return y0()},children:(o)=>{let e=U0(()=>{let W0=o().task,L0=[];if(L0.push({text:W0.kind==="main"?MJ(W0.repo):W0.title,bold:!0}),W0.branch.length>0)L0.push({text:`\u2387 ${W0.branch}`});if(W0.worktreePath.length>0)L0.push({text:W0.worktreePath,dim:!0});return L0}),B0=72,C0=U0(()=>Math.min(68,Math.max(...e().map((W0)=>Ib(W0.text))))),A=U0(()=>C0()+4),P0=U0(()=>e().length+2),K0=U0(()=>Math.max(0,Math.min(o().x+2,V0().width-A()-1))),E0=U0(()=>Math.max(0,Math.min(o().y+1,V0().height-P0()-1)));return(()=>{var W0=W("box");return Z(W0,"position","absolute"),Z(W0,"zIndex",2600),Z(W0,"flexDirection","column"),Z(W0,"border",!0),Z(W0,"paddingLeft",1),Z(W0,"paddingRight",1),K(W0,b(Zf,{get each(){return e()},children:(L0)=>(()=>{var R0=W("text");return Z(R0,"wrapMode","none"),K(R0,(()=>{var Jf=I0(()=>!!L0.dim);return()=>Jf()?Tb(L0.text,C0()):T8(L0.text,C0())})()),u((Jf)=>{var Yf=L0.dim?J.textMuted:J.text,n0=L0.bold?bf.BOLD:L0.dim?bf.DIM:void 0;return Yf!==Jf.e&&(Jf.e=Z(R0,"fg",Yf,Jf.e)),n0!==Jf.t&&(Jf.t=Z(R0,"attributes",n0,Jf.t)),Jf},{e:void 0,t:void 0}),R0})()})),u((L0)=>{var R0=K0(),Jf=E0(),Yf=A(),n0=J.focusAccent,yf=J.backgroundElement;return R0!==L0.e&&(L0.e=Z(W0,"left",R0,L0.e)),Jf!==L0.t&&(L0.t=Z(W0,"top",Jf,L0.t)),Yf!==L0.a&&(L0.a=Z(W0,"width",Yf,L0.a)),n0!==L0.o&&(L0.o=Z(W0,"borderColor",n0,L0.o)),yf!==L0.i&&(L0.i=Z(W0,"backgroundColor",yf,L0.i)),L0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),W0})()}}),null),u((o)=>{var e=Y()?J.focusAccent:J.textMuted,B0=bf.BOLD,C0=J.textMuted,A=bf.DIM;return e!==o.e&&(o.e=Z(o0,"fg",e,o.e)),B0!==o.t&&(o.t=Z(o0,"attributes",B0,o.t)),C0!==o.a&&(o.a=Z(t0,"fg",C0,o.a)),A!==o.o&&(o.o=Z(t0,"attributes",A,o.o)),o},{e:void 0,t:void 0,a:void 0,o:void 0}),n})()}var mD=32,lX,bb=2000,Sb=16;var dD=k(()=>{h();h();h();h();h();h();h();h();h();G1();h();Wf();xf();xf();ID();TQ();uD();hD();VG();vD();lX=[{view:"active"},{view:"archived"}]});var rD={};jf(rD,{startTasksPane:()=>hb,legendRowCap:()=>$D,legendCap:()=>aD});import{existsSync as iD}from"fs";import{stat as ub}from"fs/promises";import{TextAttributes as hQ}from"@opentui/core";function P8(f){return!!f&&GZ(f)}function lD(f){let J=f instanceof Error?f.message:String(f);if(/not a git repository/i.test(J))return F("tasks.toast.worktreeErrorNotGit");return F("tasks.toast.worktreeErrorGeneric",{message:J})}function xb(f){let{theme:J}=i0(),Y=vf(),z=IG(),G=kQ(),[X,q]=r(f.tasks().some((P)=>P.id===f.initialTaskId)?f.initialTaskId:f.tasks()[0]?.id??null);function Q(P){G.notify({kind:"error",taskId:X()??"",tabId:"",title:P})}function H(P){G.notify({kind:"done",taskId:X()??"",tabId:"",title:P})}let[B,V]=r(!1),[j,U]=r(z.get("activeSortMode")==="recent"?"recent":"default"),L=z.get("tasksPane.projectFilter"),[O,M]=r(typeof L==="string"&&L.length>0?L:null),R=(P)=>{M(P),z.set("tasksPane.projectFilter",P)},[S,a]=r(null),[N,g]=r(!1);{let P=process.env.TMUX_PANE;if(P){let M0=()=>{d0(["show-options","-wqv","-t",P,UY]).then(({code:F0,stdout:a0})=>{g(F0===0&&a0.trim().length>0)})};M0();let J0=setInterval(M0,1000);mf(()=>clearInterval(J0))}}let C=TJ(),y=!f.initialTaskId;zf(()=>{let P=f.orch?.activeTaskSignal()();if(!P)return;if(!y){if(P!==f.initialTaskId)return;y=!0}q(P)}),zf(O1(()=>f.orch?.uiPrefsSignal()(),(P)=>{if(P&&P.sortMode!==$f(j))U(P.sortMode);if(P&&P.projectFilter!==$f(O))M(P.projectFilter)})),zf(()=>{let P=f.orch?.updateSignal()();if(P)a(P)});let _={orch:f.orch,tasks:()=>f.tasks(),confirm:async(P)=>await zY.show(Y,P.title,P.body,P.cancelLabel,P.confirmLabel)===!0,promptText:(P,M0)=>YY.show(Y,P,M0),logger:console,logPrefix:"[kobe tasks]",notifyError:Q,notifyInfo:H,reload:()=>f.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(P,M0)=>{if(X()!==P)return;let J0=f.tasks();q(M0?.id??(J0.find((F0)=>!F0.archived)??J0[0])?.id??null)},promptNewTask:(P,M0,J0)=>FQ.show(Y,P,M0,J0),cursorRepo:()=>{let P=f.tasks();return(P.find((M0)=>M0.id===X())??P[0])?.repo},lastVendor:()=>kf("lastSelectedVendor"),rememberVendor:(P)=>af("lastSelectedVendor",P),openCreateSurface:async(P)=>{if(Lz(z.get(_J,Dz))!=="chattab")return!1;let J0=await k1();if(!J0)return!1;return await dq(J0,P),!0},selectTask:(P)=>q(P),enterTask:(P)=>H0(P)};async function z0(){await AD(_)}async function t(){if(Lz(z.get(_J,Dz))==="chattab"){let J0=await k1();if(J0){await cq(J0);return}}if(!(await Tz.show(Y,z,f.orch??void 0)).visualPrefsChanged)return;if(!z.flush())return;try{let J0=await k1();if(J0)await BG(J0)}catch(J0){console.error("[kobe tasks] failed to refresh workspace panes:",J0)}}async function Y0(){let P=await k1();if(P){await nq(P);return}uG.show(Y)}async function T(){if(!S()?.hasUpdate){H(F("tasks.toast.alreadyLatest",{version:s0}));return}let M0=await k1();if(!M0)return;await iq(M0)}async function Q0(P){await DD(_,P)}async function p(P){await LD(_,P)}async function D0(P){await MD(_,P)}async function g0(P){await FD(_,P)}async function $(P){await OD(_,P)}async function E(P){let J0=f.tasks().find((a0)=>a0.id===P)?.worktreePath;if(!J0||!iD(J0)){if(!f.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),Q(F("tasks.toast.noDaemonWorktree"));return}try{J0=await f.orch.ensureWorktree(P)}catch(a0){console.error("[kobe tasks] task.ensureWorktree failed:",a0),Q(lD(a0));return}await f.reload()}if(!J0||!iD(J0))return;let F0=RD();if(!F0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),Q(F("tasks.toast.noEditor"));return}if(!CD(J0,F0))console.error(`[kobe tasks] failed to open worktree with ${F0.label}`),Q(F("tasks.toast.openWorktreeFailed",{label:F0.label}))}async function f0(){if(!process.env.TMUX_PANE)return;let P=await k1();if(!P)return;let M0=await $z(P);if(!M0)return;await h0(["select-pane","-t",M0])}async function I(P,M0){let J0=f.tasks().find((F0)=>F0.id===P);if(!J0||J0.kind==="main"||!f.orch)return;try{await f.orch.moveTask(P,M0)}catch(F0){console.error("[kobe tasks] task.move failed:",F0),Q(F("tasks.toast.moveTaskFailed",{message:F0 instanceof Error?F0.message:String(F0)}));return}q(P),await f.reload()}let[G0,x]=r(z.get("tasksPane.keysCollapsed",!1)===!0),c=(P)=>{x(P),z.set("tasksPane.keysCollapsed",P)};zf(O1(()=>f.orch?.uiPrefsSignal()(),(P)=>{if(P&&P.keysCollapsed!==$f(G0))x(P.keysCollapsed)}));let[Z0,V0]=r(!1);Uf(()=>({enabled:Y.stack.length===0&&!Z0(),bindings:mY({"help.open":()=>void Y0(),"task.new":()=>void z0(),"settings.open.sidebar":()=>void t(),"tasks.update":()=>void T(),"tasks.openWorktree":()=>{let P=X();if(P)E(P)},"tasks.renameBranch":()=>{let P=X();if(P)g0(P)},"tasks.cycleEngine":()=>{let P=X();if(P)$(P)},"tasks.toggleKeys":()=>c(!G0()),"tasks.focusEngine":()=>void f0().catch((P)=>console.error("[kobe tasks] focus engine pane failed:",P))})}));async function H0(P){let M0=Lf(P),J0=f.tasks().find((n)=>n.id===P),F0=await k1();if(F0&&F0!==M0)await DX(F0);if(await Hf(M0)){let n=await Bz(M0,"@kobe_worktree")||J0?.worktreePath||"";if(P8(n)){let q0=J0?.repo?oJ(J0.repo,n,{kind:"repo-init"}):void 0;await TY({name:M0,cwd:n,command:N1(J0?.vendor),taskId:P,vendor:J0?.vendor,repo:J0?.repo,launchInit:q0})}await aq(M0),await h0(["switch-client","-t",`=${M0}`]),f.orch?.setActiveTask(P).catch(()=>{});return}let p0=J0?.worktreePath;if(!P8(p0)){if(!f.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),Q(F("tasks.toast.noDaemonOpen"));return}try{p0=await f.orch.ensureWorktree(P)}catch(n){console.error("[kobe tasks] task.ensureWorktree failed:",n),Q(lD(n));return}await f.reload()}if(!P8(p0))return;let u0=J0?.repo?oJ(J0.repo,p0,{kind:"repo-init"}):void 0;if(!await TY({name:M0,cwd:p0,command:N1(J0?.vendor),taskId:P,vendor:J0?.vendor,repo:J0?.repo,launchInit:u0})){console.error(`[kobe tasks] failed to start session ${M0}`),Q(F("tasks.toast.sessionStartFailed"));return}await aq(M0),await h0(["switch-client","-t",`=${M0}`]),f.orch?.setActiveTask(P).catch(()=>{})}let y0=U0(()=>{let P=S();if(P?.hasUpdate)return{label:`v${P.latest} \u2191`,emphasize:!0};return{label:`v${s0}`,emphasize:!1}}),w0=()=>f.orch?.daemonStaleSignal()()??!1,T0=()=>f.orch?.daemonVersionSignal()()??null,r0=U0(()=>f.tasks().find((P)=>P.id===X())?.kind==="main");return(()=>{var P=W("box"),M0=W("box");return D(P,M0),Z(P,"flexDirection","column"),Z(P,"flexGrow",1),K(P,b(VD,{stale:w0,daemonVersion:T0,clientVersion:s0,width:()=>C().width}),M0),Z(M0,"flexGrow",1),Z(M0,"flexShrink",1),K(M0,b(nD,{get tasks(){return f.tasks},selectedId:X,onSelect:q,onActivate:(J0)=>void H0(J0),activateOnClick:!0,headerStatus:y0,onHeaderStatusClick:()=>void T(),onAddTask:()=>void z0(),zenActive:N,width:()=>C().width,get engineState(){return I0(()=>!!f.orch)()?f.orch.engineStateSignal():void 0},get taskJobs(){return I0(()=>!!f.orch)()?f.orch.taskJobsSignal():void 0},get worktreeChanges(){return f.orch?()=>{let J0=f.orch;if(!J0||J0.connectionStateSignal()()!=="online")return null;return J0.worktreeChangesSignal()()}:void 0},onRenameRequest:(J0)=>void D0(J0),onDeleteRequest:(J0)=>void p(J0),onArchiveRequest:(J0)=>void Q0(J0),onLocalMergeRequest:(J0)=>{let F0=f.tasks().find((a0)=>a0.id===J0);if(!F0||F0.kind==="main")return;q(J0),V((a0)=>!a0)},moveMode:B,onMoveRequest:(J0,F0)=>void I(J0,F0),onMoveModeExit:()=>V(!1),sortMode:j,projectFilter:O,onProjectFilterChange:R,onSortModeToggle:()=>{let J0=j()==="default"?"recent":"default";U(J0),z.set("activeSortMode",J0)},focused:()=>Y.stack.length===0,onSearchActiveChange:V0})),K(P,b(wb,{moveMode:B,selectedIsMain:r0,collapsed:G0,onToggleCollapsed:()=>c(!G0())}),null),u((J0)=>Z(P,"backgroundColor",J.background,J0)),P})()}function aD(f){let J=Q8(f);if(!J)return null;let Y=J.hint?.keys??J.keys[0];return Y&&Y.length>0?Y:null}function $D(f){let J=f.map(aD).filter((Y)=>Y!==null);return J.length>0?J.join("/"):null}function wb(f){let{theme:J}=i0(),[Y,z]=r("Prefix");f1(()=>{d0(["show-options","-g","prefix"]).then(({code:U,stdout:L})=>{if(U!==0)return;let O=EQ(L);if(O)z(O)})});let G=()=>{q8();let U=Aq(),L=U.binds,O=[],M=U.focus.filter((S)=>S!==null).map((S)=>S.chord);if(M.length===4&&M.every((S,a)=>S===yY[a]))O.push({k:"ctrl+hjkl",label:F("tasks.hints.movePanes")});else if(M.length>0)O.push({k:M[0],label:F("tasks.hints.movePanes")});let R=(S,a)=>{let N=a.map((g)=>L[g]?.chord).filter((g)=>!!g);if(N.length>0)O.push({k:`prefix ${N.join("/")}`,label:S})};if(L["tmux.detach"])O.push({k:L["tmux.detach"].chord,label:F("tasks.hints.detach")});return R(F("tasks.hints.splits"),["tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"]),R(F("tasks.hints.panes"),["tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle"]),O},X=()=>{q8();let U=[{ids:["help.open"],label:F("tasks.hints.fullHelp")},{ids:["task.new"],label:F("tasks.hints.newTask")},{ids:["settings.open.sidebar"],label:F("tasks.hints.settings")},{ids:["sidebar.select"],label:F("tasks.hints.open")},{ids:["tasks.focusEngine"],label:F("tasks.hints.focusEngine")},{ids:["tasks.openWorktree"],label:F("tasks.hints.openWorktree")},{ids:["sidebar.delete"],label:F("tasks.hints.delete")},{ids:["sidebar.view"],label:F("tasks.hints.views")},{ids:["sidebar.projectFilter"],label:F("tasks.hints.project")}],L=[];for(let O of U){let M=$D(O.ids);if(M===null)continue;L.push({k:M,label:O.label,dimWhenMain:O.dimWhenMain})}return L.push(...G()),L},q=()=>[{k:"j/k",label:F("tasks.hints.reorder")},{k:"enter/esc",label:F("tasks.hints.done")}],Q=()=>f.moveMode?.()?q():X(),H=18,B=()=>Math.min(H,Math.max(...Q().map((U)=>U.label.length))),V=(U)=>U.length<=B()?U:`${U.slice(0,Math.max(0,B()-1))}\u2026`,j=()=>(f.collapsed?.()??!1)&&!(f.moveMode?.()??!1);return(()=>{var U=W("box"),L=W("text");return D(U,L),Z(U,"flexShrink",0),Z(U,"flexDirection","column"),Z(U,"paddingLeft",1),Z(U,"paddingRight",1),Z(U,"paddingTop",1),Z(U,"paddingBottom",1),Z(U,"gap",0),Z(L,"wrapMode","none"),Z(L,"onMouseUp",()=>f.onToggleCollapsed?.()),K(L,(()=>{var O=I0(()=>!!j());return()=>O()?F("tasks.hints.headerFolded"):F("tasks.hints.headerUnfolded")})()),K(U,b(X0,{get when(){return!j()},get children(){return b(Zf,{get each(){return Q()},children:(O)=>{let M=()=>O.dimWhenMain===!0&&(f.selectedIsMain?.()??!1);return(()=>{var R=W("box"),S=W("box"),a=W("text"),N=x0("["),g=x0("]"),C=W("box"),y=W("text");return D(R,S),D(R,C),Z(R,"flexDirection","row"),Z(R,"gap",1),Z(R,"justifyContent","space-between"),D(S,a),Z(S,"width",10),Z(S,"flexShrink",0),D(a,N),D(a,g),Z(a,"wrapMode","none"),K(a,()=>TG(O.k,Y()),g),D(C,y),Z(C,"flexShrink",0),Z(y,"wrapMode","none"),K(y,()=>V(O.label)),u((_)=>{var z0=M()?J.textMuted:J.accent,t=M()?hQ.DIM:hQ.BOLD,Y0=B(),T=J.textMuted,Q0=M()?hQ.DIM:void 0;return z0!==_.e&&(_.e=Z(a,"fg",z0,_.e)),t!==_.t&&(_.t=Z(a,"attributes",t,_.t)),Y0!==_.a&&(_.a=Z(C,"width",Y0,_.a)),T!==_.o&&(_.o=Z(y,"fg",T,_.o)),Q0!==_.i&&(_.i=Z(y,"attributes",Q0,_.i)),_},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),R})()}})}}),null),u((O)=>{var M=J.textMuted,R=hQ.DIM;return M!==O.e&&(O.e=Z(L,"fg",M,O.e)),R!==O.t&&(O.t=Z(L,"attributes",R,O.t)),O},{e:void 0,t:void 0}),U})()}async function hb(f={}){await L1({logContext:"tasks",providers:{notifications:!0},setup:()=>Pb(f)})}async function Pb(f){let J=new xz({homeDir:OJ()});await J.load();let[Y,z]=r(J.list()),G=null;try{let B=await p1();if(B){let V=new j1(B);await V.init(),G=V}else dJ("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(B){WY("tasks-boot",B),dJ("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let X=()=>G&&G.connectionStateSignal()()==="online"?G.tasksSignal()():Y(),q=async()=>{await J.load(),z(J.list())},Q="",H=setInterval(()=>{if(G&&G.connectionStateSignal()()==="online")return;(async()=>{let B="missing";try{let V=await ub(J.filePath);B=`${V.mtimeMs}:${V.size}`}catch{}if(B===Q)return;Q=B,await q()})().catch(()=>{})},Eb);return{root:()=>[b(xb,{tasks:X,get initialTaskId(){return f.initialTaskId},orch:G,reload:q}),b(jD,{})],onDestroy:()=>{if(H)clearInterval(H);G?.dispose()}}}var Eb=1500;var pD=k(()=>{h();h();h();h();h();h();h();h();Tf();qJ();G1();h();eY();y1();Wf();PY();E1();lf();e1();vG();GG();gf();gq();U1();F8();bG();O8();b8();WD();KD();SG();mX();NQ();xf();M8();nY();b1();gD();kD();dD();J1();P1();A8()});var _D={};jf(_D,{startSettingsHost:()=>mb});function vb(f){let J=IG(),Y=vf(),{theme:z}=i0(),G=!1,X=!1;async function q(){if(X)return;X=!0;try{if(J.flush()&&G){let H=await k1();if(H)await BG(H)}}catch(Q){console.error("[kobe settings] failed to refresh workspace panes:",Q)}finally{process.exit(0)}}return Uf(()=>({enabled:Y.stack.length===0,bindings:[{key:"escape",cmd:q},{key:"q",cmd:q},{key:"ctrl+c",cmd:q}]})),(()=>{var Q=W("scrollbox");return Z(Q,"flexGrow",1),Z(Q,"paddingTop",1),Z(Q,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),K(Q,b(Tz,{kv:J,get orchestrator(){return f.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{G=!0},onClose:q})),u((H)=>Z(Q,"backgroundColor",z.background,H)),Q})()}async function mb(){await L1({setup:async()=>{let f=null;try{let J=await p1();if(J){let Y=new j1(J);await Y.init(),f=Y}else console.error("[kobe settings] no daemon running; Restart backend disabled")}catch(J){console.error("[kobe settings] daemon unavailable; Restart backend disabled:",J)}return{root:()=>b(vb,{orchestrator:f}),onDestroy:()=>{f?.dispose()}}}})}var oD=k(()=>{h();h();h();h();h();h();y1();PY();b8();mX();xf();nY();b1();J1();P1()});var sD={};jf(sD,{startHelpHost:()=>nb});function cb(){let f=vf(),{theme:J}=i0();function Y(){process.exit(0)}return Uf(()=>({enabled:f.stack.length===0,bindings:[{key:"escape",cmd:Y},{key:"q",cmd:Y},{key:"f1",cmd:Y},{key:"ctrl+c",cmd:Y}]})),(()=>{var z=W("box");return Z(z,"flexGrow",1),Z(z,"paddingTop",1),K(z,b(uG,{onClose:Y})),u((G)=>Z(z,"backgroundColor",J.background,G)),z})()}async function nb(){await L1({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(cb,{})})})}var tD=k(()=>{h();h();h();h();h();F8();xf();nY();b1();P1()});var eD={};jf(eD,{startUpdateHost:()=>pb});import{spawn as db,spawnSync as ib}from"child_process";import{TextAttributes as xG}from"@opentui/core";function lb(f){if(!f)return!1;let J=process.platform,[Y,z]=J==="darwin"?["open",[f]]:J==="win32"?["cmd",["/c","start","",f]]:["xdg-open",[f]];try{return db(Y,z,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function ab(f){return f.replace(/\r\n/g,`
220
+ `)}var Ak;var NU=k(()=>{qQ();Ak=["install","status","command"]});var uj={};jf(uj,{runHookSubcommand:()=>Ik,readTextWithTimeout:()=>IU,parseWorktreeAddPath:()=>uU,ensureGlobalKobeHooks:()=>Ek});import{homedir as Rk}from"os";import{join as bU,resolve as SU}from"path";async function IU(f,J=Ck){let Y;try{return await Promise.race([f(),new Promise((z)=>{Y=setTimeout(()=>z(""),J)})])}finally{if(Y!==void 0)clearTimeout(Y)}}async function TU(){try{let f=await IU(()=>Bun.stdin.text());if(!f.trim())return{};let J=JSON.parse(f);return J&&typeof J==="object"&&!Array.isArray(J)?J:{}}catch{return{}}}function kk(f,J){for(let Y=0;Y<f.length;Y++){if(f[Y]===J)return f[Y+1];if(f[Y].startsWith(`${J}=`))return f[Y].slice(J.length+1)}return}function yk(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}function bk(f){let J=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g,z;while((z=Y.exec(f))!==null)J.push(z[1]??z[2]??z[3]??"");return J}function uU(f){let J=bk(f),Y=new Set(["-b","-B","--reason"]);for(let z=0;z+1<J.length;z++){if(J[z]!=="worktree"||J[z+1]!=="add")continue;let G=z+2;while(G<J.length){let X=J[G];if(X==="&&"||X==="||"||X===";"||X==="|"||X===">"||X===">>")break;if(X.startsWith("-")){G+=Y.has(X)?2:1;continue}return X}}return}async function Sk(){let f=await TU(),J=yk(f.tool_input)?f.tool_input:{},Y=typeof J.command==="string"?J.command:"";if(!Y.includes("worktree"))return;let z=uU(Y);if(!z)return;let G=typeof f.cwd==="string"&&f.cwd?f.cwd:process.cwd(),X=SU(G,z),q=await p1();if(!q)return;try{await q.request("worktree.reconcile",{cwd:G,worktreePath:X})}finally{q.close()}}async function Ik(f){let[J,...Y]=f;if(J==="setup"){await xk(Y);return}if(J===Nk){try{await Sk()}catch{}return}try{if(!J||!BZ(J))return;let z=await TU(),G=kk(Y,"--task-id"),X=typeof z.cwd==="string"&&z.cwd?z.cwd:process.cwd(),q;for(let H of EU())if(q=H.activityDetailFromPayload(J,z),q)break;let Q=await p1();if(!Q)return;try{await Q.request("engine.reportEvent",{...G?{taskId:G}:{cwd:X},kind:J,...q?{detail:q}:{}})}finally{Q.close()}}catch{}}function Tk(){return cf.map((f)=>uH(f)).filter((f)=>f.supportsWorktreeSync())}function EU(){return cf.map((f)=>uH(f)).filter((f)=>f.supportsHooks())}function Tj(){return bU(Rk(),".claude","settings.json")}function uk(f){if(!f||f==="off")return;if(f==="global")return Tj();if(f.startsWith("repo:"))return bU(SU(f.slice(5)),".claude","settings.json");return f}async function Ek(){try{let f=Tj();for(let J of EU())await J.installActivityHooks(f),await J.installWorktreeWatchHook(f);await xU()}catch{}}async function xU(){let f=Tk();if(f.length===0)return;let J=kf(yU),Y=new Set([Tj()]),z=uk(J);if(z)Y.add(z);for(let G of f)for(let X of Y)await G.removeWorktreeSyncHook(X);if(J!=="off")af(yU,"off")}async function xk(f){await xU(),process.stdout.write(["kobe hook setup is deprecated and now a no-op (cleanup only).","","The old external-worktree sync used a global WorktreeCreate hook, which is","a VCS provider hook \u2014 its presence broke `claude --worktree` / EnterWorktree","in every repo. Any hook kobe previously installed has been removed.","","Sync is now automatic: a `claude --worktree` (or any session) started in a","worktree under a repo kobe already tracks is adopted as a task on launch.","To adopt existing worktrees on demand, use the New Task dialog or `kobe adopt`.",""].join(`
221
+ `))}var Ck=500,Nk="worktree-created",yU="externalWorktreeSync";var Ej=k(()=>{L1();EH();jZ();Af();U1()});function hU(f){var J;if(f>=55296&&f<=57343||f>1114111)return 65533;return(J=wk.get(f))!==null&&J!==void 0?J:f}var xj,wk,wU;var PU=k(()=>{wk=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),wU=(xj=String.fromCodePoint)!==null&&xj!==void 0?xj:(f)=>{let J="";if(f>65535)f-=65536,J+=String.fromCharCode(f>>>10&1023|55296),f=56320|f&1023;return J+=String.fromCharCode(f),J}});function vU(f){let J=typeof atob==="function"?atob(f):typeof Buffer.from==="function"?Buffer.from(f,"base64").toString("binary"):new Buffer(f,"base64").toString("binary"),Y=J.length&-2,z=new Uint16Array(Y/2);for(let G=0,X=0;G<Y;G+=2){let q=J.charCodeAt(G),Q=J.charCodeAt(G+1);z[X++]=q|Q<<8}return z}var mU;var cU=k(()=>{mU=vU("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IAAOA12J/c8iFvaxBhAAhOVGFjZGZnbG1vcHFzdHV4owOlA6kDsAO/A8IDxgPNA9ID8gP9AwEEFAQeBCAEJQRHAEphSAA7gNAA0EBjAHUAdABlADuAyQDJQIABYWl5ALYDuQO+A/Ihb24aYXIAYwA7gMoAykAtZG8AdAAWYXIAAOA12AjdcgBhAHYAZQA7gMgAyEDlIm1lbnQAoAgiAAFhcNYD2QNjAHIAEmF0AHkAUwLhAwAAAADpA20lYWxsU3F1YXJlAACg+yVlJ3J5U21hbGxTcXVhcmUAAKCrJQABZ3D2A/kDbwBuABhhZgAA4DXYPN3zImlsb26VY3UAAAFhaQYEDgRsAFSgdSppImxkZQAAoEIi7CNpYnJpdW0AoMwhAAFjaRgEGwRyAACgMCFtAACgcyphAJdjbQBsADuAywDLQAABaXApBC0E8yF0cwCgAyLvJG5lbnRpYWxFAKBHIYACY2Zpb3MAPQQ/BEMEXQRyBHkAJGRyAADgNdgJ3WwibGVkAFMCTAQAAAAAVARtJWFsbFNxdWFyZQAAoPwlZSdyeVNtYWxsU3F1YXJlAACgqiVwA2UEAABpBAAAAABtBGYAAOA12D3dwSFsbACgACLyI2llcnRyZgCgMSFjAPIAcQQABkpUYWJjZGZnb3JzdIgEiwSOBJMElwSkBKcEqwStBLIE5QTqBGMAeQADZDuAPgA+QO0hbWFkoJMD3GNyImV2ZQAeYYABZWl5AJ0EoASjBOQhaWwiYXIAYwAcYRNkbwB0ACBhcgAA4DXYCt0AoNkicABmAADgNdg+3eUiYXRlcgADRUZHTFNUvwTIBM8E1QTZBOAEcSJ1YWwATKBlIuUhc3MAoNsidSRsbEVxdWFsAACgZyJyI2VhdGVyAACgoirlIXNzAKB3IuwkYW50RXF1YWwAoH4qaSJsZGUAAKBzImMAcgAA4DXYotwAoGsiAARBYWNmaW9zdfkE/QQFBQgFCwUTBSIFKwVSIkRjeQAqZAABY3QBBQQFZQBrAMdiXmDpIXJjJGFyAACgDCFsJWJlcnRTcGFjZQAAoAsh8AEYBQAAGwVmAACgDSHpJXpvbnRhbExpbmUAoAAlAAFjdCYFKAXyABIF8iFvayZhbQBwAEQBMQU5BW8AdwBuAEgAdQBtAPAAAAFxInVhbAAAoE8iAAdFSk9hY2RmZ21ub3N0dVMFVgVZBVwFYwVtBXAFcwV6BZAFtgXFBckFzQVjAHkAFWTsIWlnMmFjAHkAAWRjAHUAdABlADuAzQDNQAABaXlnBWwFcgBjADuAzgDOQBhkbwB0ADBhcgAAoBEhcgBhAHYAZQA7gMwAzEAAoREhYXB/BYsFAAFjZ4MFhQVyACphaSNuYXJ5SQAAoEghbABpAGUA8wD6AvQBlQUAAKUFZaAsIgABZ3KaBZ4F8iFhbACgKyLzI2VjdGlvbgCgwiJpI3NpYmxlAAABQ1SsBbEFbyJtbWEAAKBjIGkibWVzAACgYiCAAWdwdAC8Bb8FwwVvAG4ALmFmAADgNdhA3WEAmWNjAHIAAKAQIWkibGRlAChh6wHSBQAA1QVjAHkABmRsADuAzwDPQIACY2Zvc3UA4QXpBe0F8gX9BQABaXnlBegFcgBjADRhGWRyAADgNdgN3XAAZgAA4DXYQd3jAfcFAAD7BXIAAOA12KXc8iFjeQhk6yFjeQRkgANISmFjZm9zAAwGDwYSBhUGHQYhBiYGYwB5ACVkYwB5AAxk8CFwYZpjAAFleRkGHAbkIWlsNmEaZHIAAOA12A7dcABmAADgNdhC3WMAcgAA4DXYptyABUpUYWNlZmxtb3N0AD0GQAZDBl4GawZkB2gHcAd0B80H2gdjAHkACWQ7gDwAPECAAmNtbnByAEwGTwZSBlUGWwb1IXRlOWHiIWRhm2NnAACg6ifsI2FjZXRyZgCgEiFyAACgniGAAWFleQBkBmcGagbyIW9uPWHkIWlsO2EbZAABZnNvBjQHdAAABUFDREZSVFVWYXKABp4GpAbGBssG3AYDByEHwQIqBwABbnKEBowGZyVsZUJyYWNrZXQAAKDoJ/Ihb3cAoZAhQlKTBpcGYQByAACg5CHpJGdodEFycm93AKDGIWUjaWxpbmcAAKAII28A9QGqBgAAsgZiJWxlQnJhY2tldAAAoOYnbgDUAbcGAAC+BmUkZVZlY3RvcgAAoGEp5SJjdG9yQqDDIWEAcgAAoFkpbCJvb3IAAKAKI2kiZ2h0AAABQVbSBtcGciJyb3cAAKCUIeUiY3RvcgCgTikAAWVy4AbwBmUAAKGjIkFW5gbrBnIicm93AACgpCHlImN0b3IAoFopaSNhbmdsZQBCorIi+wYAAAAA/wZhAHIAAKDPKXEidWFsAACgtCJwAIABRFRWAAoHEQcYB+8kd25WZWN0b3IAoFEpZSRlVmVjdG9yAACgYCnlImN0b3JCoL8hYQByAACgWCnlImN0b3JCoLwhYQByAACgUilpAGcAaAB0AGEAcgByAG8A9wDMAnMAAANFRkdMU1Q/B0cHTgdUB1gHXwfxJXVhbEdyZWF0ZXIAoNoidSRsbEVxdWFsAACgZiJyI2VhdGVyAACgdiLlIXNzAKChKuwkYW50RXF1YWwAoH0qaSJsZGUAAKByInIAAOA12A/dZaDYIuYjdGFycm93AKDaIWkiZG90AD9hgAFucHcAege1B7kHZwAAAkxSbHKCB5QHmwerB+UhZnQAAUFSiAeNB3Iicm93AACg9SfpJGdodEFycm93AKD3J+kkZ2h0QXJyb3cAoPYn5SFmdAABYXLcAqEHaQBnAGgAdABhAHIAcgBvAPcA5wJpAGcAaAB0AGEAcgByAG8A9wDuAmYAAOA12EPdZQByAAABTFK/B8YHZSRmdEFycm93AACgmSHpJGdodEFycm93AKCYIYABY2h0ANMH1QfXB/IAWgYAoLAh8iFva0FhAKBqIgAEYWNlZmlvc3XpB+wH7gf/BwMICQgOCBEIcAAAoAUpeQAcZAABZGzyB/kHaSR1bVNwYWNlAACgXyBsI2ludHJmAACgMyFyAADgNdgQ3e4jdXNQbHVzAKATInAAZgAA4DXYRN1jAPIA/gecY4AESmFjZWZvc3R1ACEIJAgoCDUIgQiFCDsKQApHCmMAeQAKZGMidXRlAENhgAFhZXkALggxCDQI8iFvbkdh5CFpbEVhHWSAAWdzdwA7CGEIfQjhInRpdmWAAU1UVgBECEwIWQhlJWRpdW1TcGFjZQAAoAsgaABpAAABY25SCFMIawBTAHAAYQBjAOUASwhlAHIAeQBUAGgAaQDuAFQI9CFlZAABR0xnCHUIcgBlAGEAdABlAHIARwByAGUAYQB0AGUA8gDrBGUAcwBzAEwAZQBzAPMA2wdMImluZQAKYHIAAOA12BHdAAJCbnB0jAiRCJkInAhyImVhawAAoGAgwiZyZWFraW5nU3BhY2WgYGYAAKAVIUOq7CqzCMIIzQgAAOcIGwkAAAAAAAAtCQAAbwkAAIcJAACdCcAJGQoAADQKAAFvdbYIvAjuI2dydWVudACgYiJwIkNhcAAAoG0ibyh1YmxlVmVydGljYWxCYXIAAKAmIoABbHF4ANII1wjhCOUibWVudACgCSL1IWFsVKBgImkibGRlAADgQiI4A2kic3RzAACgBCJyI2VhdGVyAACjbyJFRkdMU1T1CPoIAgkJCQ0JFQlxInVhbAAAoHEidSRsbEVxdWFsAADgZyI4A3IjZWF0ZXIAAOBrIjgD5SFzcwCgeSLsJGFudEVxdWFsAOB+KjgDaSJsZGUAAKB1IvUhbXBEASAJJwnvI3duSHVtcADgTiI4A3EidWFsAADgTyI4A2UAAAFmczEJRgn0JFRyaWFuZ2xlQqLqIj0JAAAAAEIJYQByAADgzyk4A3EidWFsAACg7CJzAICibiJFR0xTVABRCVYJXAlhCWkJcSJ1YWwAAKBwInIjZWF0ZXIAAKB4IuUhc3MA4GoiOAPsJGFudEVxdWFsAOB9KjgDaSJsZGUAAKB0IuUic3RlZAABR0x1CX8J8iZlYXRlckdyZWF0ZXIA4KIqOAPlI3NzTGVzcwDgoSo4A/IjZWNlZGVzAKGAIkVTjwmVCXEidWFsAADgryo4A+wkYW50RXF1YWwAoOAiAAFlaaAJqQl2JmVyc2VFbGVtZW50AACgDCLnJWh0VHJpYW5nbGVCousitgkAAAAAuwlhAHIAAODQKTgDcSJ1YWwAAKDtIgABcXXDCeAJdSNhcmVTdQAAAWJwywnVCfMhZXRF4I8iOANxInVhbAAAoOIi5SJyc2V0ReCQIjgDcSJ1YWwAAKDjIoABYmNwAOYJ8AkNCvMhZXRF4IIi0iBxInVhbAAAoIgi4yJlZWRzgKGBIkVTVAD6CQAKBwpxInVhbAAA4LAqOAPsJGFudEVxdWFsAKDhImkibGRlAADgfyI4A+UicnNldEXggyLSIHEidWFsAACgiSJpImxkZQCAoUEiRUZUACIKJwouCnEidWFsAACgRCJ1JGxsRXF1YWwAAKBHImkibGRlAACgSSJlJXJ0aWNhbEJhcgAAoCQiYwByAADgNdip3GkAbABkAGUAO4DRANFAnWMAB0VhY2RmZ21vcHJzdHV2XgphCmgKcgp2CnoKgQqRCpYKqwqtCrsKyArNCuwhaWdSYWMAdQB0AGUAO4DTANNAAAFpeWwKcQpyAGMAO4DUANRAHmRiImxhYwBQYXIAAOA12BLdcgBhAHYAZQA7gNIA0kCAAWFlaQCHCooKjQpjAHIATGFnAGEAqWNjInJvbgCfY3AAZgAA4DXYRt3lI25DdXJseQABRFGeCqYKbyV1YmxlUXVvdGUAAKAcIHUib3RlAACgGCAAoFQqAAFjbLEKtQpyAADgNdiq3GEAcwBoADuA2ADYQGkAbAHACsUKZABlADuA1QDVQGUAcwAAoDcqbQBsADuA1gDWQGUAcgAAAUJQ0wrmCgABYXLXCtoKcgAAoD4gYQBjAAABZWvgCuIKAKDeI2UAdAAAoLQjYSVyZW50aGVzaXMAAKDcI4AEYWNmaGlsb3JzAP0KAwsFCwkLCwsMCxELIwtaC3IjdGlhbEQAAKACInkAH2RyAADgNdgT3WkApmOgY/Ujc01pbnVzsWAAAWlwFQsgC24AYwBhAHIAZQBwAGwAYQBuAOUACgVmAACgGSGAobsqZWlvACoLRQtJC+MiZWRlc4CheiJFU1QANAs5C0ALcSJ1YWwAAKCvKuwkYW50RXF1YWwAoHwiaSJsZGUAAKB+Im0AZQAAoDMgAAFkcE0LUQv1IWN0AKAPIm8jcnRpb24AYaA3ImwAAKAdIgABY2leC2ILcgAA4DXYq9yoYwACVWZvc2oLbwtzC3cLTwBUADuAIgAiQHIAAOA12BTdcABmAACgGiFjAHIAAOA12KzcAAZCRWFjZWZoaW9yc3WPC5MLlwupC7YL2AvbC90LhQyTDJoMowzhIXJyAKAQKUcAO4CuAK5AgAFjbnIAnQugC6ML9SF0ZVRhZwAAoOsncgB0oKAhbAAAoBYpgAFhZXkArwuyC7UL8iFvblhh5CFpbFZhIGR2oBwhZSJyc2UAAAFFVb8LzwsAAWxxwwvIC+UibWVudACgCyL1JGlsaWJyaXVtAKDLIXAmRXF1aWxpYnJpdW0AAKBvKXIAAKAcIW8AoWPnIWh0AARBQ0RGVFVWYewLCgwQDDIMNwxeDHwM9gIAAW5y8Av4C2clbGVCcmFja2V0AACg6SfyIW93AKGSIUJM/wsDDGEAcgAAoOUhZSRmdEFycm93AACgxCFlI2lsaW5nAACgCSNvAPUBFgwAAB4MYiVsZUJyYWNrZXQAAKDnJ24A1AEjDAAAKgxlJGVWZWN0b3IAAKBdKeUiY3RvckKgwiFhAHIAAKBVKWwib29yAACgCyMAAWVyOwxLDGUAAKGiIkFWQQxGDHIicm93AACgpiHlImN0b3IAoFspaSNhbmdsZQBCorMiVgwAAAAAWgxhAHIAAKDQKXEidWFsAACgtSJwAIABRFRWAGUMbAxzDO8kd25WZWN0b3IAoE8pZSRlVmVjdG9yAACgXCnlImN0b3JCoL4hYQByAACgVCnlImN0b3JCoMAhYQByAACgUykAAXB1iQyMDGYAAKAdIe4kZEltcGxpZXMAoHAp6SRnaHRhcnJvdwCg2yEAAWNongyhDHIAAKAbIQCgsSHsJGVEZWxheWVkAKD0KYAGSE9hY2ZoaW1vcXN0dQC/DMgMzAzQDOIM5gwKDQ0NFA0ZDU8NVA1YDQABQ2PDDMYMyCFjeSlkeQAoZEYiVGN5ACxkYyJ1dGUAWmEAorwqYWVpedgM2wzeDOEM8iFvbmBh5CFpbF5hcgBjAFxhIWRyAADgNdgW3e8hcnQAAkRMUlXvDPYM/QwEDW8kd25BcnJvdwAAoJMhZSRmdEFycm93AACgkCHpJGdodEFycm93AKCSIXAjQXJyb3cAAKCRIechbWGjY+EkbGxDaXJjbGUAoBgicABmAADgNdhK3XICHw0AAAAAIg10AACgGiLhIXJlgKGhJUlTVQAqDTINSg3uJXRlcnNlY3Rpb24AoJMidQAAAWJwNw1ADfMhZXRFoI8icSJ1YWwAAKCRIuUicnNldEWgkCJxInVhbAAAoJIibiJpb24AAKCUImMAcgAA4DXYrtxhAHIAAKDGIgACYmNtcF8Nag2ODZANc6DQImUAdABFoNAicSJ1YWwAAKCGIgABY2huDYkNZSJlZHMAgKF7IkVTVAB4DX0NhA1xInVhbAAAoLAq7CRhbnRFcXVhbACgfSJpImxkZQAAoH8iVABoAGEA9ADHCwCgESIAodEiZXOVDZ8NciJzZXQARaCDInEidWFsAACghyJlAHQAAKDRIoAFSFJTYWNmaGlvcnMAtQ27Db8NyA3ODdsN3w3+DRgOHQ4jDk8AUgBOADuA3gDeQMEhREUAoCIhAAFIY8MNxg1jAHkAC2R5ACZkAAFidcwNzQ0JYKRjgAFhZXkA1A3XDdoN8iFvbmRh5CFpbGJhImRyAADgNdgX3QABZWnjDe4N8gHoDQAA7Q3lImZvcmUAoDQiYQCYYwABY27yDfkNayNTcGFjZQAA4F8gCiDTInBhY2UAoAkg7CFkZYChPCJFRlQABw4MDhMOcSJ1YWwAAKBDInUkbGxFcXVhbAAAoEUiaSJsZGUAAKBIInAAZgAA4DXYS93pI3BsZURvdACg2yAAAWN0Jw4rDnIAAOA12K/c8iFva2Zh4QpFDlYOYA5qDgAAbg5yDgAAAAAAAAAAAAB5DnwOqA6zDgAADg8RDxYPGg8AAWNySA5ODnUAdABlADuA2gDaQHIAb6CfIeMhaXIAoEkpcgDjAVsOAABdDnkADmR2AGUAbGEAAWl5Yw5oDnIAYwA7gNsA20AjZGIibGFjAHBhcgAA4DXYGN1yAGEAdgBlADuA2QDZQOEhY3JqYQABZGl/Dp8OZQByAAABQlCFDpcOAAFhcokOiw5yAF9gYQBjAAABZWuRDpMOAKDfI2UAdAAAoLUjYSVyZW50aGVzaXMAAKDdI28AbgBQoMMi7CF1cwCgjiIAAWdwqw6uDm8AbgByYWYAAOA12EzdAARBREVUYWRwc78O0g7ZDuEOBQPqDvMOBw9yInJvdwDCoZEhyA4AAMwOYQByAACgEilvJHduQXJyb3cAAKDFIW8kd25BcnJvdwAAoJUhcSV1aWxpYnJpdW0AAKBuKWUAZQBBoKUiciJyb3cAAKClIW8AdwBuAGEAcgByAG8A9wAQA2UAcgAAAUxS+Q4AD2UkZnRBcnJvdwAAoJYh6SRnaHRBcnJvdwCglyFpAGyg0gNvAG4ApWPpIW5nbmFjAHIAAOA12LDcaSJsZGUAaGFtAGwAO4DcANxAgAREYmNkZWZvc3YALQ8xDzUPNw89D3IPdg97D4AP4SFzaACgqyJhAHIAAKDrKnkAEmThIXNobKCpIgCg5ioAAWVyQQ9DDwCgwSKAAWJ0eQBJD00Paw9hAHIAAKAWIGmgFiDjIWFsAAJCTFNUWA9cD18PZg9hAHIAAKAjIukhbmV8YGUkcGFyYXRvcgAAoFgnaSJsZGUAAKBAItQkaGluU3BhY2UAoAogcgAA4DXYGd1wAGYAAOA12E3dYwByAADgNdix3GQiYXNoAACgqiKAAmNlZm9zAI4PkQ+VD5kPng/pIXJjdGHkIWdlAKDAInIAAOA12BrdcABmAADgNdhO3WMAcgAA4DXYstwAAmZpb3OqD64Prw+0D3IAAOA12BvdnmNwAGYAAOA12E/dYwByAADgNdiz3IAEQUlVYWNmb3N1AMgPyw/OD9EP2A/gD+QP6Q/uD2MAeQAvZGMAeQAHZGMAeQAuZGMAdQB0AGUAO4DdAN1AAAFpedwP3w9yAGMAdmErZHIAAOA12BzdcABmAADgNdhQ3WMAcgAA4DXYtNxtAGwAeGEABEhhY2RlZm9z/g8BEAUQDRAQEB0QIBAkEGMAeQAWZGMidXRlAHlhAAFheQkQDBDyIW9ufWEXZG8AdAB7YfIBFRAAABwQbwBXAGkAZAB0AOgAVAhhAJZjcgAAoCghcABmAACgJCFjAHIAAOA12LXc4QtCEEkQTRAAAGcQbRByEAAAAAAAAAAAeRCKEJcQ8hD9EAAAGxEhETIROREAAD4RYwB1AHQAZQA7gOEA4UByImV2ZQADYYCiPiJFZGl1eQBWEFkQWxBgEGUQAOA+IjMDAKA/InIAYwA7gOIA4kB0AGUAO4C0ALRAMGRsAGkAZwA7gOYA5kByoGEgAOA12B7dcgBhAHYAZQA7gOAA4EAAAWVwfBCGEAABZnCAEIQQ8yF5bQCgNSHoAIMQaABhALFjAAFhcI0QWwAAAWNskRCTEHIAAWFnAACgPypkApwQAAAAALEQAKInImFkc3ajEKcQqRCuEG4AZAAAoFUqAKBcKmwib3BlAACgWCoAoFoqAKMgImVsbXJzersQvRDAEN0Q5RDtEACgpCllAACgICJzAGQAYaAhImEEzhDQENIQ1BDWENgQ2hDcEACgqCkAoKkpAKCqKQCgqykAoKwpAKCtKQCgrikAoK8pdAB2oB8iYgBkoL4iAKCdKQABcHTpEOwQaAAAoCIixWDhIXJyAKB8IwABZ3D1EPgQbwBuAAVhZgAA4DXYUt0Ao0giRWFlaW9wBxEJEQ0RDxESERQRAKBwKuMhaXIAoG8qAKBKImQAAKBLInMAJ2DyIW94ZaBIIvEADhFpAG4AZwA7gOUA5UCAAWN0eQAmESoRKxFyAADgNdi23CpgbQBwAGWgSCLxAPgBaQBsAGQAZQA7gOMA40BtAGwAO4DkAORAAAFjaUERRxFvAG4AaQBuAPQA6AFuAHQAAKARKgAITmFiY2RlZmlrbG5vcHJzdWQRaBGXEZ8RpxGrEdIR1hErEjASexKKEn0RThNbE3oTbwB0AACg7SoAAWNybBGJEWsAAAJjZXBzdBF4EX0RghHvIW5nAKBMInAjc2lsb24A9mNyImltZQAAoDUgaQBtAGWgPSJxAACgzSJ2AY0RkRFlAGUAAKC9ImUAZABnoAUjZQAAoAUjcgBrAHSgtSPiIXJrAKC2IwABb3mjEaYRbgDnAHcRMWTxIXVvAKAeIIACY21wcnQAtBG5Eb4RwRHFEeEhdXPloDUi5ABwInR5dgAAoLApcwDpAH0RbgBvAPUA6gCAAWFodwDLEcwRzhGyYwCgNiHlIWVuAKBsInIAAOA12B/dZwCAA2Nvc3R1dncA4xHyEQUSEhIhEiYSKRKAAWFpdQDpEesR7xHwAKMFcgBjAACg7yVwAACgwyKAAWRwdAD4EfwRABJvAHQAAKAAKuwhdXMAoAEqaSJtZXMAAKACKnECCxIAAAAADxLjIXVwAKAGKmEAcgAAoAUm8iNpYW5nbGUAAWR1GhIeEu8hd24AoL0lcAAAoLMlcCJsdXMAAKAEKmUA5QBCD+UAkg9hInJvdwAAoA0pgAFha28ANhJoEncSAAFjbjoSZRJrAIABbHN0AEESRxJNEm8jemVuZ2UAAKDrKXEAdQBhAHIA5QBcBPIjaWFuZ2xlgKG0JWRscgBYElwSYBLvIXduAKC+JeUhZnQAoMIlaSJnaHQAAKC4JWsAAKAjJLEBbRIAAHUSsgFxEgAAcxIAoJIlAKCRJTQAAKCTJWMAawAAoIglAAFlb38ShxJx4D0A5SD1IWl2AOBhIuUgdAAAoBAjAAJwdHd4kRKVEpsSnxJmAADgNdhT3XSgpSJvAG0AAKClIvQhaWUAoMgiAAZESFVWYmRobXB0dXayEsES0RLgEvcS+xIKExoTHxMjEygTNxMAAkxSbHK5ErsSvRK/EgCgVyUAoFQlAKBWJQCgUyUAolAlRFVkdckSyxLNEs8SAKBmJQCgaSUAoGQlAKBnJQACTFJsctgS2hLcEt4SAKBdJQCgWiUAoFwlAKBZJQCjUSVITFJobHLrEu0S7xLxEvMS9RIAoGwlAKBjJQCgYCUAoGslAKBiJQCgXyVvAHgAAKDJKQACTFJscgITBBMGEwgTAKBVJQCgUiUAoBAlAKAMJQCiACVEVWR1EhMUExYTGBMAoGUlAKBoJQCgLCUAoDQlaSJudXMAAKCfIuwhdXMAoJ4iaSJtZXMAAKCgIgACTFJsci8TMRMzEzUTAKBbJQCgWCUAoBglAKAUJQCjAiVITFJobHJCE0QTRhNIE0oTTBMAoGolAKBhJQCgXiUAoDwlAKAkJQCgHCUAAWV2UhNVE3YA5QD5AGIAYQByADuApgCmQAACY2Vpb2ITZhNqE24TcgAA4DXYt9xtAGkAAKBPIG0A5aA9IogRbAAAoVwAYmh0E3YTAKDFKfMhdWIAoMgnbAF+E4QTbABloCIgdAAAoCIgcAAAoU4iRWWJE4sTAKCuKvGgTyI8BeEMqRMAAN8TABQDFB8UAAAjFDQUAAAAAIUUAAAAAI0UAAAAANcU4xT3FPsUAACIFQAAlhWAAWNwcgCuE7ET1RP1IXRlB2GAoikiYWJjZHMAuxO/E8QTzhPSE24AZAAAoEQqciJjdXAAAKBJKgABYXXIE8sTcAAAoEsqcAAAoEcqbwB0AACgQCoA4CkiAP4AAWVv2RPcE3QAAKBBIO4ABAUAAmFlaXXlE+8T9RP4E/AB6hMAAO0TcwAAoE0qbwBuAA1hZABpAGwAO4DnAOdAcgBjAAlhcABzAHOgTCptAACgUCpvAHQAC2GAAWRtbgAIFA0UEhRpAGwAO4C4ALhAcCJ0eXYAAKCyKXQAAIGiADtlGBQZFKJAcgBkAG8A9ABiAXIAAOA12CDdgAFjZWkAKBQqFDIUeQBHZGMAawBtoBMn4SFyawCgEyfHY3IAAKPLJUVjZWZtcz8UQRRHFHcUfBSAFACgwykAocYCZWxGFEkUcQAAoFciZQBhAlAUAAAAAGAUciJyb3cAAAFsclYUWhTlIWZ0AKC6IWkiZ2h0AACguyGAAlJTYWNkAGgUaRRrFG8UcxSuYACgyCRzAHQAAKCbIukhcmMAoJoi4SFzaACgnSJuImludAAAoBAqaQBkAACg7yrjIWlyAKDCKfUhYnN1oGMmaQB0AACgYybsApMUmhS2FAAAwxRvAG4AZaA6APGgVCKrAG0CnxQAAAAAoxRhAHSgLABAYAChASJmbKcUqRTuABMNZQAAAW14rhSyFOUhbnQAoAEiZQDzANIB5wG6FAAAwBRkoEUibwB0AACgbSpuAPQAzAGAAWZyeQDIFMsUzhQA4DXYVN1vAOQA1wEAgakAO3MeAdMUcgAAoBchAAFhb9oU3hRyAHIAAKC1IXMAcwAAoBcnAAFjdeYU6hRyAADgNdi43AABYnDuFPIUZaDPKgCg0SploNAqAKDSKuQhb3QAoO8igANkZWxwcnZ3AAYVEBUbFSEVRBVlFYQV4SFycgABbHIMFQ4VAKA4KQCgNSlwAhYVAAAAABkVcgAAoN4iYwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWlsN2E6ZHIAAOA12CjdciJlZW4AOGFjAHkARWRjAHkAXGRwAGYAAOA12FzdYwByAADgNdjA3IALQUJFSGFiY2RlZmdoamxtbm9wcnN0dXYAXhxtHHEcdRx5HN8cBx0dHTwd3B3tHfEdAR4EHh0eLB5FHrwewx7hHgkfPR9LH4ABYXJ0AGQcZxxpHHIA8gBvB/IAxQLhIWlsAKAbKeEhcnIAoA4pZ6BmIgCgiyphAHIAAKBiKWMJjRwAAJAcAACVHAAAAAAAAAAAAACZHJwcAACmHKgcrRwAANIc9SF0ZTph7SJwdHl2AKC0KXIAYQDuAFoG4iFkYbtjZwAAoegnZGyhHKMcAKCRKeUAiwYAoIUqdQBvADuAqwCrQHIAgKOQIWJmaGxwc3QAuhy/HMIcxBzHHMoczhxmoOQhcwAAoB8pcwAAoB0p6wCyGnAAAKCrIWwAAKA5KWkAbQAAoHMpbAAAoKIhAKGrKmFl1hzaHGkAbAAAoBkpc6CtKgDgrSoA/oABYWJyAOUc6RztHHIAcgAAoAwpcgBrAACgcicAAWFr8Rz4HGMAAAFla/Yc9xx7YFtgAAFlc/wc/hwAoIspbAAAAWR1Ax0FHQCgjykAoI0pAAJhZXV5Dh0RHRodHB3yIW9uPmEAAWRpFR0YHWkAbAA8YewAowbiAPccO2QAAmNxcnMkHScdLB05HWEAAKA2KXUAbwDyoBwgqhEAAWR1MB00HeghYXIAoGcpcyJoYXIAAKBLKWgAAKCyIQCiZCJmZ3FzRB1FB5Qdnh10AIACYWhscnQATh1WHWUdbB2NHXIicm93AHSgkCFhAOkAzxxhI3Jwb29uAAABZHVeHWId7yF3bgCgvSFwAACgvCHlJGZ0YXJyb3dzAKDHIWkiZ2h0AIABYWhzAHUdex2DHXIicm93APOglCGdBmEAcgBwAG8AbwBuAPMAzgtxAHUAaQBnAGEAcgByAG8A9wBlGugkcmVldGltZXMAoMsi8aFkIk0HAACaHWwAYQBuAPQAXgcAon0qY2Rnc6YdqR2xHbcdYwAAoKgqbwB0AG+gfypyoIEqAKCDKmXg2iIA/nMAAKCTKoACYWRlZ3MAwB3GHcod1h3ZHXAAcAByAG8A+ACmHG8AdAAAoNYicQAAAWdxzx3SHXQA8gBGB2cAdADyAHQcdADyAFMHaQDtAGMHgAFpbHIA4h3mHeod8yFodACgfClvAG8A8gDKBgDgNdgp3UWgdiIAoJEqYQH1Hf4dcgAAAWR1YB35HWygvCEAoGopbABrAACghCVjAHkAWWQAomoiYWNodAweDx4VHhkecgDyAGsdbwByAG4AZQDyAGAW4SFyZACgaylyAGkAAKD6JQABaW8hHiQe5CFvdEBh9SFzdGGgsCPjIWhlAKCwIwACRWFlczMeNR48HkEeAKBoInAAcKCJKvIhb3gAoIkqcaCHKvGghyo0HmkAbQAAoOYiAARhYm5vcHR3elIeXB5fHoUelh6mHqsetB4AAW5yVh5ZHmcAAKDsJ3IAAKD9IXIA6wCwBmcAgAFsbXIAZh52Hnse5SFmdAABYXKIB2weaQBnAGgAdABhAHIAcgBvAPcAkwfhInBzdG8AoPwnaQBnAGgAdABhAHIAcgBvAPcAmgdwI2Fycm93AAABbHKNHpEeZQBmAPQAxhxpImdodAAAoKwhgAFhZmwAnB6fHqIecgAAoIUpAOA12F3ddQBzAACgLSppIm1lcwAAoDQqYQGvHrMecwB0AACgFyLhAIoOZaHKJbkeRhLuIWdlAKDKJWEAcgBsoCgAdAAAoJMpgAJhY2htdADMHs8e1R7bHt0ecgDyAJ0GbwByAG4AZQDyANYWYQByAGSgyyEAoG0pAKAOIHIAaQAAoL8iAANhY2hpcXTrHu8e1QfzHv0eBh/xIXVvAKA5IHIAAOA12MHcbQDloXIi+h4AAPweAKCNKgCgjyoAAWJ19xwBH28AcqAYIACgGiDyIW9rQmEAhDwAO2NkaGlscXJCBhcfxh0gHyQfKB8sHzEfAAFjaRsfHR8AoKYqcgAAoHkqcgBlAOUAkx3tIWVzAKDJIuEhcnIAoHYpdSJlc3QAAKB7KgABUGk1HzkfYQByAACglillocMlAgdfEnIAAAFkdUIfRx9zImhhcgAAoEop6CFhcgCgZikAAWVuTx9WH3IjdG5lcXEAAOBoIgD+xQBUHwAHRGFjZGVmaGlsbm9wc3VuH3Ifoh+rH68ftx+7H74f5h/uH/MfBwj/HwsgxCFvdACgOiIAAmNscHJ5H30fiR+eH3IAO4CvAK9AAAFldIEfgx8AoEImZaAgJ3MAZQAAoCAnc6CmIXQAbwCAoaYhZGx1AJQfmB+cH28AdwDuAHkDZQBmAPQA6gbwAOkO6yFlcgCgriUAAW95ph+qH+0hbWEAoCkqPGThIXNoAKAUIOElc3VyZWRhbmdsZQCgISJyAADgNdgq3W8AAKAnIYABY2RuAMQfyR/bH3IAbwA7gLUAtUBhoiMi0B8AANMf1x9zAPQAKxFpAHIAAKDwKm8AdAA7gLcAt0B1AHMA4qESIh4TAADjH3WgOCIAoCoqYwHqH+0fcAAAoNsq8gB+GnAAbAB1APMACAgAAWRw9x/7H+UhbHMAoKciZgAA4DXYXt0AAWN0AyAHIHIAAOA12MLc8CFvcwCgPiJsobwDECAVIPQiaW1hcACguCJhAPAAEyAADEdMUlZhYmNkZWZnaGlqbG1vcHJzdHV2dzwgRyBmIG0geSCqILgg2iDeIBEhFSEyIUMhTSFQIZwhnyHSIQAiIyKLIrEivyIUIwABZ3RAIEMgAODZIjgD9uBrItIgBwmAAWVsdABNIF8gYiBmAHQAAAFhclMgWCByInJvdwAAoM0h6SRnaHRhcnJvdwCgziEA4NgiOAP24Goi0iBfCekkZ2h0YXJyb3cAoM8hAAFEZHEgdSDhIXNoAKCvIuEhc2gAoK4igAJiY25wdACCIIYgiSCNIKIgbABhAACgByL1IXRlRGFnAADgICLSIACiSSJFaW9wlSCYIJwgniAA4HAqOANkAADgSyI4A3MASWFyAG8A+AAyCnUAcgBhoG4mbADzoG4mmwjzAa8gAACzIHAAO4CgAKBAbQBwAOXgTiI4AyoJgAJhZW91eQDBIMogzSDWINkg8AHGIAAAyCAAoEMqbwBuAEhh5CFpbEZhbgBnAGSgRyJvAHQAAOBtKjgDcAAAoEIqPWThIXNoAKATIACjYCJBYWRxc3jpIO0g+SD+IAIhDCFyAHIAAKDXIXIAAAFocvIg9SBrAACgJClvoJch9wAGD28AdAAA4FAiOAN1AGkA9gC7CAABZWkGIQohYQByAACgKCntAN8I6SFzdPOgBCLlCHIAAOA12CvdAAJFZXN0/wgcISshLiHxoXEiIiEAABMJ8aFxIgAJAAAnIWwAYQBuAPQAEwlpAO0AGQlyoG8iAKBvIoABQWFwADghOyE/IXIA8gBeIHIAcgAAoK4hYQByAACg8ipzogsiSiEAAAAAxwtkoPwiAKD6ImMAeQBaZIADQUVhZGVzdABcIV8hYiFmIWkhkyGWIXIA8gBXIADgZiI4A3IAcgAAoJohcgAAoCUggKFwImZxcwBwIYQhjiF0AAABYXJ1IXohcgByAG8A9wBlIWkAZwBoAHQAYQByAHIAbwD3AD4h8aFwImAhAACKIWwAYQBuAPQAZwlz4H0qOAMAoG4iaQDtAG0JcqBuImkA5aDqIkUJaQDkADoKAAFwdKMhpyFmAADgNdhf3YCBrAA7aW4AriGvIcchrEBuAIChCSJFZHYAtyG6Ib8hAOD5IjgDbwB0AADg9SI4A+EB1gjEIcYhAKD3IgCg9iJpAHagDCLhAagJzyHRIQCg/iIAoP0igAFhb3IA2CHsIfEhcgCAoSYiYXN0AOAh5SHpIWwAbABlAOwAywhsAADg/SrlIADgAiI4A2wiaW50AACgFCrjoYAi9yEAAPohdQDlAJsJY+CvKjgDZaCAIvEAkwkAAkFhaXQHIgoiFyIeInIA8gBsIHIAcgAAoZshY3cRIhQiAOAzKTgDAOCdITgDZyRodGFycm93AACgmyFyAGkA5aDrIr4JgANjaGltcHF1AC8iPCJHIpwhTSJQIloigKGBImNlcgA2Iv0JOSJ1AOUABgoA4DXYw9zvIXJ0bQKdIQAAAABEImEAcgDhAOEhbQBloEEi8aBEIiYKYQDyAMsIcwB1AAABYnBWIlgi5QDUCeUA3wmAAWJjcABgInMieCKAoYQiRWVzAGci7glqIgDgxSo4A2UAdABl4IIi0iBxAPGgiCJoImMAZaCBIvEA/gmAoYUiRWVzAH8iFgqCIgDgxio4A2UAdABl4IMi0iBxAPGgiSKAIgACZ2lscpIilCKaIpwi7AAMCWwAZABlADuA8QDxQOcAWwlpI2FuZ2xlAAABbHKkIqoi5SFmdGWg6iLxAEUJaSJnaHQAZaDrIvEAvgltoL0DAKEjAGVzuCK8InIAbwAAoBYhcAAAoAcggARESGFkZ2lscnMAziLSItYi2iLeIugi7SICIw8j4SFzaACgrSLhIXJyAKAEKXAAAOBNItIg4SFzaACgrCIAAWV04iLlIgDgZSLSIADgPgDSIG4iZmluAACg3imAAUFldADzIvci+iJyAHIAAKACKQDgZCLSIHLgPADSIGkAZQAA4LQi0iAAAUF0BiMKI3IAcgAAoAMp8iFpZQDgtSLSIGkAbQAA4Dwi0iCAAUFhbgAaIx4jKiNyAHIAAKDWIXIAAAFociMjJiNrAACgIylvoJYh9wD/DuUhYXIAoCcpUxJqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVCMAAF4jaSN/I4IjjSOeI8AUAAAAAKYjwCMAANoj3yMAAO8jHiQvJD8kRCQAAWNzVyNsFHUAdABlADuA8wDzQAABaXlhI2cjcgBjoJoiO4D0APRAPmSAAmFiaW9zAHEjdCN3I3EBeiNzAOgAdhTsIWFjUWF2AACgOCrvIWxkAKC8KewhaWdTYQABY3KFI4kjaQByAACgvykA4DXYLN1vA5QjAAAAAJYjAACcI24A22JhAHYAZQA7gPIA8kAAoMEpAAFibaEjjAphAHIAAKC1KQACYWNpdKwjryO6I70jcgDyAFkUAAFpcrMjtiNyAACgvinvIXNzAKC7KW4A5QDZCgCgwCmAAWFlaQDFI8gjyyNjAHIATWFnAGEAyWOAAWNkbgDRI9Qj1iPyIW9uv2MAoLYpdQDzAHgBcABmAADgNdhg3YABYWVsAOQj5yPrI3IAAKC3KXIAcAAAoLkpdQDzAHwBAKMoImFkaW9zdvkj/CMPJBMkFiQbJHIA8gBeFIChXSplZm0AAyQJJAwkcgBvoDQhZgAAoDQhO4CqAKpAO4C6ALpA5yFvZgCgtiJyAACgVipsIm9wZQAAoFcqAKBbKoABY2xvACMkJSQrJPIACCRhAHMAaAA7gPgA+EBsAACgmCJpAGwBMyQ4JGQAZQA7gPUA9UBlAHMAYaCXInMAAKA2Km0AbAA7gPYA9kDiIWFyAKA9I+EKXiQAAHokAAB8JJQkAACYJKkkAAAAALUkEQsAAPAkAAAAAAQleiUAAIMlcgCAoSUiYXN0AGUkbyQBCwCBtgA7bGokayS2QGwAZQDsABgDaQJ1JAAAAAB4JG0AAKDzKgCg/Sp5AD9kcgCAAmNpbXB0AIUkiCSLJJkSjyRuAHQAJWBvAGQALmBpAGwAAKAwIOUhbmsAoDEgcgAA4DXYLd2AAWltbwCdJKAkpCR2oMYD1WNtAGEA9AD+B24AZQAAoA4m9KHAA64kAAC0JGMjaGZvcmsAAKDUItZjAAFhdbgkxCRuAAABY2u9JMIkawBooA8hAKAOIfYAaRpzAACkKwBhYmNkZW1zdNMkIRPXJNsk4STjJOck6yTjIWlyAKAjKmkAcgAAoCIqAAFvdYsW3yQAoCUqAKByKm4AO4CxALFAaQBtAACgJip3AG8AAKAnKoABaXB1APUk+iT+JO4idGludACgFSpmAADgNdhh3W4AZAA7gKMAo0CApHoiRWFjZWlub3N1ABMlFSUYJRslTCVRJVklSSV1JQCgsypwAACgtyp1AOUAPwtjoK8qgKJ6ImFjZW5zACclLSU0JTYlSSVwAHAAcgBvAPgAFyV1AHIAbAB5AGUA8QA/C/EAOAuAAWFlcwA8JUElRSXwInByb3gAoLkqcQBxAACgtSppAG0AAKDoImkA7QBEC20AZQDzoDIgIguAAUVhcwBDJVclRSXwAEAlgAFkZnAATwtfJXElgAFhbHMAZSVpJW0l7CFhcgCgLiPpIW5lAKASI/UhcmYAoBMjdKAdIu8AWQvyIWVsAKCwIgABY2l9JYElcgAA4DXYxdzIY24iY3NwAACgCCAAA2Zpb3BzdZElKxuVJZolnyWkJXIAAOA12C7dcABmAADgNdhi3XIiaW1lAACgVyBjAHIAAOA12MbcgAFhZW8AqiW6JcAldAAAAWVpryW2JXIAbgBpAG8AbgDzABkFbgB0AACgFipzAHQAZaA/APEACRj0AG0LgApBQkhhYmNkZWZoaWxtbm9wcnN0dXgA4yXyJfYl+iVpJpAmpia9JtUm5ib4JlonaCdxJ3UnnietJ7EnyCfiJ+cngAFhcnQA6SXsJe4lcgDyAJkM8gD6AuEhaWwAoBwpYQByAPIA3BVhAHIAAKBkKYADY2RlbnFydAAGJhAmEyYYJiYmKyZaJgABZXUKJg0mAOA9IjEDdABlAFVhaQDjACAN7SJwdHl2AKCzKWcAgKHpJ2RlbAAgJiImJCYAoJIpAKClKeUA9wt1AG8AO4C7ALtAcgAApZIhYWJjZmhscHN0dz0mQCZFJkcmSiZMJk4mUSZVJlgmcAAAoHUpZqDlIXMAAKAgKQCgMylzAACgHinrALka8ACVHmwAAKBFKWkAbQAAoHQpbAAAoKMhAKCdIQABYWleJmImaQBsAACgGilvAG6gNiJhAGwA8wB2C4ABYWJyAG8mciZ2JnIA8gAvEnIAawAAoHMnAAFha3omgSZjAAABZWt/JoAmfWBdYAABZXOFJocmAKCMKWwAAAFkdYwmjiYAoI4pAKCQKQACYWV1eZcmmiajJqUm8iFvbllhAAFkaZ4moSZpAGwAV2HsAA8M4gCAJkBkAAJjbHFzrSawJrUmuiZhAACgNylkImhhcgAAoGkpdQBvAPKgHSCjAWgAAKCzIYABYWNnAMMm0iaUC2wAgKEcIWlwcwDLJs4migxuAOUAoAxhAHIA9ADaC3QAAKCtJYABaWxyANsm3ybjJvMhaHQAoH0pbwBvAPIANgwA4DXYL90AAWFv6ib1JnIAAAFkde8m8SYAoMEhbKDAIQCgbCl2oMED8WOAAWducwD+Jk4nUCdoAHQAAANhaGxyc3QKJxInISc1Jz0nRydyInJvdwB0oJIhYQDpAFYmYSNycG9vbgAAAWR1GiceJ28AdwDuAPAmcAAAoMAh5SFmdAABYWgnJy0ncgByAG8AdwDzAAkMYQByAHAAbwBvAG4A8wATBGklZ2h0YXJyb3dzAACgySFxAHUAaQBnAGEAcgByAG8A9wBZJugkcmVldGltZXMAoMwiZwDaYmkAbgBnAGQAbwB0AHMAZQDxABwYgAFhaG0AYCdjJ2YncgDyAAkMYQDyABMEAKAPIG8idXN0AGGgsSPjIWhlAKCxI+0haWQAoO4qAAJhYnB0fCeGJ4knmScAAW5ygCeDJ2cAAKDtJ3IAAKD+IXIA6wAcDIABYWZsAI8nkieVJ3IAAKCGKQDgNdhj3XUAcwAAoC4qaSJtZXMAAKA1KgABYXCiJ6gncgBnoCkAdAAAoJQp7yJsaW50AKASKmEAcgDyADwnAAJhY2hxuCe8J6EMwCfxIXVvAKA6IHIAAOA12MfcAAFidYAmxCdvAPKgGSCoAYABaGlyAM4n0ifWJ3IAZQDlAE0n7SFlcwCgyiJpAIChuSVlZmwAXAxjEt4n9CFyaQCgzinsInVoYXIAoGgpAKAeIWENBSgJKA0oSyhVKIYoAACLKLAoAAAAAOMo5ygAABApJCkxKW0pcSmHKaYpAACYKgAAAACxKmMidXRlAFthcQB1AO8ABR+ApHsiRWFjZWlucHN5ABwoHignKCooLygyKEEoRihJKACgtCrwASMoAAAlKACguCpvAG4AYWF1AOUAgw1koLAqaQBsAF9hcgBjAF1hgAFFYXMAOCg6KD0oAKC2KnAAAKC6KmkAbQAAoOki7yJsaW50AKATKmkA7QCIDUFkbwB0AGKixSKRFgAAAABTKACgZiqAA0FhY21zdHgAYChkKG8ocyh1KHkogihyAHIAAKDYIXIAAAFocmkoayjrAJAab6CYIfcAzAd0ADuApwCnQGkAO2D3IWFyAKApKW0AAAFpbn4ozQBuAHUA8wDOAHQAAKA2J3IA7+A12DDdIxkAAmFjb3mRKJUonSisKHIAcAAAoG8mAAFoeZkonChjAHkASWRIZHIAdABtAqUoAAAAAKgoaQDkAFsPYQByAGEA7ABsJDuArQCtQAABZ22zKLsobQBhAAChwwNmdroouijCY4CjPCJkZWdsbnByAMgozCjPKNMo1yjaKN4obwB0AACgairxoEMiCw5FoJ4qAKCgKkWgnSoAoJ8qZQAAoEYi7CF1cwCgJCrhIXJyAKByKWEAcgDyAPwMAAJhZWl07Sj8KAEpCCkAAWxz8Sj4KGwAcwBlAHQAbQDpAH8oaABwAACgMyrwImFyc2wAoOQpAAFkbFoPBSllAACgIyNloKoqc6CsKgDgrCoA/oABZmxwABUpGCkfKfQhY3lMZGKgLwBhoMQpcgAAoD8jZgAA4DXYZN1hAAABZHIoKRcDZQBzAHWgYCZpAHQAAKBgJoABY3N1ADYpRilhKQABYXU6KUApcABzoJMiAOCTIgD+cABzoJQiAOCUIgD+dQAAAWJwSylWKQChjyJlcz4NUCllAHQAZaCPIvEAPw0AoZAiZXNIDVspZQB0AGWgkCLxAEkNAKGhJWFmZilbBHIAZQFrKVwEAKChJWEAcgDyAAMNAAJjZW10dyl7KX8pgilyAADgNdjI3HQAbQDuAM4AaQDsAAYpYQByAOYAVw0AAWFyiimOKXIA5qAGJhESAAFhbpIpoylpImdodAAAAWVwmSmgKXAAcwBpAGwAbwDuANkXaADpAKAkcwCvYIACYmNtbnAArin8KY4NJSooKgCkgiJFZGVtbnByc7wpvinCKcgpzCnUKdgp3CkAoMUqbwB0AACgvSpkoIYibwB0AACgwyr1IWx0AKDBKgABRWXQKdIpAKDLKgCgiiLsIXVzAKC/KuEhcnIAoHkpgAFlaXUA4inxKfQpdAAAoYIiZW7oKewpcQDxoIYivSllAHEA8aCKItEpbQAAoMcqAAFicPgp+ikAoNUqAKDTKmMAgKJ7ImFjZW5zAAcqDSoUKhYqRihwAHAAcgBvAPgAIyh1AHIAbAB5AGUA8QCDDfEAfA2AAWFlcwAcKiIqPShwAHAAcgBvAPgAPChxAPEAOShnAACgaiYApoMiMTIzRWRlaGxtbnBzPCo/KkIqRSpHKlIqWCpjKmcqaypzKncqO4C5ALlAO4CyALJAO4CzALNAAKDGKgABb3NLKk4qdAAAoL4qdQBiAACg2CpkoIcibwB0AACgxCpzAAABb3VdKmAqbAAAoMknYgAAoNcq4SFycgCgeyn1IWx0AKDCKgABRWVvKnEqAKDMKgCgiyLsIXVzAKDAKoABZWl1AH0qjCqPKnQAAKGDImVugyqHKnEA8aCHIkYqZQBxAPGgiyJwKm0AAKDIKgABYnCTKpUqAKDUKgCg1iqAAUFhbgCdKqEqrCpyAHIAAKDZIXIAAAFocqYqqCrrAJUab6CZIfcAxQf3IWFyAKAqKWwAaQBnADuA3wDfQOELzyrZKtwq6SrsKvEqAAD1KjQrAAAAAAAAAAAAAEwrbCsAAHErvSsAAAAAAADRK3IC1CoAAAAA2CrnIWV0AKAWI8RjcgDrAOUKgAFhZXkA4SrkKucq8iFvbmVh5CFpbGNhQmRvAPQAIg5sInJlYwAAoBUjcgAA4DXYMd0AAmVpa2/7KhIrKCsuK/IBACsAAAkrZQAAATRm6g0EK28AcgDlAOsNYQBzorgDECsAAAAAEit5AG0A0WMAAWNuFislK2sAAAFhcxsrIStwAHAAcgBvAPgAFw5pAG0AAKA8InMA8AD9DQABYXMsKyEr8AAXDnIAbgA7gP4A/kDsATgrOyswG2QA5QBnAmUAcwCAgdcAO2JkAEMrRCtJK9dAYaCgInIAAKAxKgCgMCqAAWVwcwBRK1MraSvhAAkh4qKkIlsrXysAAAAAYytvAHQAAKA2I2kAcgAAoPEqb+A12GXdcgBrAACg2irhAHgociJpbWUAAKA0IIABYWlwAHYreSu3K2QA5QC+DYADYWRlbXBzdACFK6MrmiunK6wrsCuzK24iZ2xlAACitSVkbHFykCuUK5ornCvvIXduAKC/JeUhZnRloMMl8QACBwCgXCJpImdodABloLkl8QBdDG8AdAAAoOwlaSJudXMAAKA6KuwhdXMAoDkqYgAAoM0p6SFtZQCgOyrlInppdW0AoOIjgAFjaHQAwivKK80rAAFyecYrySsA4DXYydxGZGMAeQBbZPIhb2tnYQABaW/UK9creAD0ANERaCJlYWQAAAFsct4r5ytlAGYAdABhAHIAcgBvAPcAXQbpJGdodGFycm93AKCgIQAJQUhhYmNkZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg")});var j1;var nU=k(()=>{(function(f){f[f.VALUE_LENGTH=49152]="VALUE_LENGTH",f[f.FLAG13=8192]="FLAG13",f[f.BRANCH_LENGTH=8064]="BRANCH_LENGTH",f[f.JUMP_TABLE=127]="JUMP_TABLE"})(j1||(j1={}))});function wj(f){return f>=Ef.ZERO&&f<=Ef.NINE}function hk(f){return f>=Ef.UPPER_A&&f<=Ef.UPPER_F||f>=Ef.LOWER_A&&f<=Ef.LOWER_F}function Pk(f){return f>=Ef.UPPER_A&&f<=Ef.UPPER_Z||f>=Ef.LOWER_A&&f<=Ef.LOWER_Z||wj(f)}function vk(f){return f===Ef.EQUALS||Pk(f)}class hj{constructor(f,J,Y){this.decodeTree=f,this.emitCodePoint=J,this.errors=Y,this.state=of.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=JY.Strict,this.runConsumed=0}startEntity(f){this.decodeMode=f,this.state=of.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(f,J){switch(this.state){case of.EntityStart:{if(f.charCodeAt(J)===Ef.NUM)return this.state=of.NumericStart,this.consumed+=1,this.stateNumericStart(f,J+1);return this.state=of.NamedEntity,this.stateNamedEntity(f,J)}case of.NumericStart:return this.stateNumericStart(f,J);case of.NumericDecimal:return this.stateNumericDecimal(f,J);case of.NumericHex:return this.stateNumericHex(f,J);case of.NamedEntity:return this.stateNamedEntity(f,J)}}stateNumericStart(f,J){if(J>=f.length)return-1;if((f.charCodeAt(J)|dU)===Ef.LOWER_X)return this.state=of.NumericHex,this.consumed+=1,this.stateNumericHex(f,J+1);return this.state=of.NumericDecimal,this.stateNumericDecimal(f,J)}stateNumericHex(f,J){while(J<f.length){let Y=f.charCodeAt(J);if(wj(Y)||hk(Y)){let z=Y<=Ef.NINE?Y-Ef.ZERO:(Y|dU)-Ef.LOWER_A+10;this.result=this.result*16+z,this.consumed++,J++}else return this.emitNumericEntity(Y,3)}return-1}stateNumericDecimal(f,J){while(J<f.length){let Y=f.charCodeAt(J);if(wj(Y))this.result=this.result*10+(Y-Ef.ZERO),this.consumed++,J++;else return this.emitNumericEntity(Y,2)}return-1}emitNumericEntity(f,J){var Y;if(this.consumed<=J)return(Y=this.errors)===null||Y===void 0||Y.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(f===Ef.SEMI)this.consumed+=1;else if(this.decodeMode===JY.Strict)return 0;if(this.emitCodePoint(hU(this.result),this.consumed),this.errors){if(f!==Ef.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(f,J){let{decodeTree:Y}=this,z=Y[this.treeIndex],G=(z&j1.VALUE_LENGTH)>>14;while(J<f.length){if(G===0&&(z&j1.FLAG13)!==0){let q=(z&j1.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let Q=z&j1.JUMP_TABLE;if(f.charCodeAt(J)!==Q)return this.result===0?0:this.emitNotTerminatedNamedEntity();J++,this.excess++,this.runConsumed++}while(this.runConsumed<q){if(J>=f.length)return-1;let Q=this.runConsumed-1,H=Y[this.treeIndex+1+(Q>>1)],B=Q%2===0?H&255:H>>8&255;if(f.charCodeAt(J)!==B)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();J++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(q>>1),z=Y[this.treeIndex],G=(z&j1.VALUE_LENGTH)>>14}if(J>=f.length)break;let X=f.charCodeAt(J);if(X===Ef.SEMI&&G!==0&&(z&j1.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.treeIndex=ck(Y,z,this.treeIndex+Math.max(1,G),X),this.treeIndex<0)return this.result===0||this.decodeMode===JY.Attribute&&(G===0||vk(X))?0:this.emitNotTerminatedNamedEntity();if(z=Y[this.treeIndex],G=(z&j1.VALUE_LENGTH)>>14,G!==0){if(X===Ef.SEMI)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.decodeMode!==JY.Strict&&(z&j1.FLAG13)===0)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}J++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var f;let{result:J,decodeTree:Y}=this,z=(Y[J]&j1.VALUE_LENGTH)>>14;return this.emitNamedEntityData(J,z,this.consumed),(f=this.errors)===null||f===void 0||f.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(f,J,Y){let{decodeTree:z}=this;if(this.emitCodePoint(J===1?z[f]&~(j1.VALUE_LENGTH|j1.FLAG13):z[f+1],Y),J===3)this.emitCodePoint(z[f+2],Y);return Y}end(){var f;switch(this.state){case of.NamedEntity:return this.result!==0&&(this.decodeMode!==JY.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case of.NumericDecimal:return this.emitNumericEntity(0,2);case of.NumericHex:return this.emitNumericEntity(0,3);case of.NumericStart:return(f=this.errors)===null||f===void 0||f.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case of.EntityStart:return 0}}}function mk(f){let J="",Y=new hj(f,(z)=>J+=wU(z));return function(G,X){let q=0,Q=0;while((Q=G.indexOf("&",Q))>=0){J+=G.slice(q,Q),Y.startEntity(X);let B=Y.write(G,Q+1);if(B<0){q=Q+Y.end();break}q=Q+B,Q=B===0?q+1:q}let H=J+G.slice(q);return J="",H}}function ck(f,J,Y,z){let G=(J&j1.BRANCH_LENGTH)>>7,X=J&j1.JUMP_TABLE;if(G===0)return X!==0&&z===X?Y:-1;if(X){let B=z-X;return B<0||B>=G?-1:f[Y+B]-1}let q=G+1>>1,Q=0,H=G-1;while(Q<=H){let B=Q+H>>>1,V=B>>1,U=f[Y+V]>>(B&1)*8&255;if(U<z)Q=B+1;else if(U>z)H=B-1;else return f[Y+q+B]}return-1}function Cz(f,J=JY.Legacy){return nk(f,J)}var Ef,dU=32,of,JY,nk;var iU=k(()=>{PU();cU();nU();(function(f){f[f.NUM=35]="NUM",f[f.SEMI=59]="SEMI",f[f.EQUALS=61]="EQUALS",f[f.ZERO=48]="ZERO",f[f.NINE=57]="NINE",f[f.LOWER_A=97]="LOWER_A",f[f.LOWER_F=102]="LOWER_F",f[f.LOWER_X=120]="LOWER_X",f[f.LOWER_Z=122]="LOWER_Z",f[f.UPPER_A=65]="UPPER_A",f[f.UPPER_F=70]="UPPER_F",f[f.UPPER_Z=90]="UPPER_Z"})(Ef||(Ef={}));(function(f){f[f.EntityStart=0]="EntityStart",f[f.NumericStart=1]="NumericStart",f[f.NumericDecimal=2]="NumericDecimal",f[f.NumericHex=3]="NumericHex",f[f.NamedEntity=4]="NamedEntity"})(of||(of={}));(function(f){f[f.Legacy=0]="Legacy",f[f.Strict=1]="Strict",f[f.Attribute=2]="Attribute"})(JY||(JY={}));nk=mk(mU)});var lU,aU;var rU=k(()=>{iU();(function(f){f[f.XML=0]="XML",f[f.HTML=1]="HTML"})(lU||(lU={}));(function(f){f[f.UTF8=0]="UTF8",f[f.ASCII=1]="ASCII",f[f.Extensive=2]="Extensive",f[f.Attribute=3]="Attribute",f[f.Text=4]="Text"})(aU||(aU={}))});import{CliRenderer as ik,createCliRenderer as lk,engine as ak}from"@opentui/core";import{createTestRenderer as cm}from"@opentui/core/testing";import{ASCIIFontRenderable as $k,BoxRenderable as rk,CodeRenderable as pk,DiffRenderable as _k,InputRenderable as ok,LineNumberRenderable as sk,MarkdownRenderable as tk,ScrollBoxRenderable as ek,SelectRenderable as fN,TabSelectRenderable as JN,TextareaRenderable as YN,TextAttributes as Pj,TextNodeRenderable as zN,TextRenderable as GN}from"@opentui/core";import{engine as im,Timeline as lm}from"@opentui/core";import{BaseRenderable as eU,createTextAttributes as ZN,InputRenderable as vj,InputRenderableEvents as NX,isTextNodeRenderable as nj,parseColor as pU,Renderable as qN,RootTextNodeRenderable as QN,ScrollBoxRenderable as HN,SelectRenderable as _U,SelectRenderableEvents as mj,TabSelectRenderable as oU,TabSelectRenderableEvents as cj,TextNodeRenderable as BN,TextRenderable as f6}from"@opentui/core";import{BaseRenderable as FN,isTextNodeRenderable as ON,TextNodeRenderable as AN,TextRenderable as gN,Yoga as tU}from"@opentui/core";import{BoxRenderable as fc,RootRenderable as Jc}from"@opentui/core";import{TimeToFirstDrawRenderable as NN}from"@opentui/core";import{createSlotRegistry as Gc}from"@opentui/core";function WN({createElement:f,createTextNode:J,createSlotNode:Y,isTextNode:z,replaceText:G,insertNode:X,removeNode:q,setProperty:Q,getParentNode:H,getFirstChild:B,getNextSibling:V}){function j(N,g,C,y){if(C!==void 0&&!y)y=[];if(typeof g!=="function")return U(N,g,y,C);RJ((_)=>U(N,g(),_,C),y)}function U(N,g,C,y,_){while(typeof C==="function")C=C();if(g===C)return C;let z0=typeof g,t=y!==void 0;if(z0==="string"||z0==="number"){if(z0==="number")g=g.toString();if(t){let Y0=C[0];if(Y0&&z(Y0))G(Y0,g);else Y0=J(g);C=M(N,C,y,Y0)}else if(C!==""&&typeof C==="string")G(B(N),C=g);else M(N,C,y,J(g)),C=g}else if(g==null||z0==="boolean")C=M(N,C,y);else if(z0==="function")return RJ(()=>{let Y0=g();while(typeof Y0==="function")Y0=Y0();C=U(N,Y0,C,y)}),()=>C;else if(Array.isArray(g)){let Y0=[];if(L(Y0,g,_))return RJ(()=>C=U(N,Y0,C,y,!0)),()=>C;if(Y0.length===0){let T=M(N,C,y);if(t)return C=T}else if(Array.isArray(C))if(C.length===0)R(N,Y0,y);else O(N,C,Y0);else if(C==null||C==="")R(N,Y0);else O(N,t&&C||[B(N)],Y0);C=Y0}else{if(Array.isArray(C)){if(t)return C=M(N,C,y,g);M(N,C,null,g)}else if(C==null||C===""||!B(N))X(N,g);else S(N,g,B(N));C=g}return C}function L(N,g,C){let y=!1;for(let _=0,z0=g.length;_<z0;_++){let t=g[_],Y0;if(t==null||t===!0||t===!1);else if(Array.isArray(t))y=L(N,t)||y;else if((Y0=typeof t)==="string"||Y0==="number")N.push(J(t));else if(Y0==="function")if(C){while(typeof t==="function")t=t();y=L(N,Array.isArray(t)?t:[t])||y}else N.push(t),y=!0;else N.push(t)}return y}function O(N,g,C){let y=C.length,_=g.length,z0=y,t=0,Y0=0,T=V(g[_-1]),Q0=null;while(t<_||Y0<z0){if(g[t]===C[Y0]){t++,Y0++;continue}while(g[_-1]===C[z0-1])_--,z0--;if(_===t){let p=z0<y?Y0?V(C[Y0-1]):C[z0-Y0]:T;while(Y0<z0)X(N,C[Y0++],p)}else if(z0===Y0)while(t<_){if(!Q0||!Q0.has(g[t]))q(N,g[t]);t++}else if(g[t]===C[z0-1]&&C[Y0]===g[_-1]){let p=V(g[--_]);X(N,C[Y0++],V(g[t++])),X(N,C[--z0],p),g[_]=C[z0]}else{if(!Q0){Q0=new Map;let D0=Y0;while(D0<z0)Q0.set(C[D0],D0++)}let p=Q0.get(g[t]);if(p!=null)if(Y0<p&&p<z0){let D0=t,g0=1,$;while(++D0<_&&D0<z0){if(($=Q0.get(g[D0]))==null||$!==p+g0)break;g0++}if(g0>p-Y0){let E=g[t];while(Y0<p)X(N,C[Y0++],E)}else S(N,C[Y0++],g[t++])}else t++;else q(N,g[t++])}}}function M(N,g,C,y){if(C===void 0){let z0;while(z0=B(N))q(N,z0);return y&&X(N,y),y??""}let _=y||Y();if(g.length){let z0=!1;for(let t=g.length-1;t>=0;t--){let Y0=g[t];if(_!==Y0){let T=H(Y0)===N;if(!z0&&!t)T?S(N,_,Y0):X(N,_,C);else T&&q(N,Y0)}else z0=!0}}else X(N,_,C);return[_]}function R(N,g,C){for(let y=0,_=g.length;y<_;y++)X(N,g[y],C)}function S(N,g,C){X(N,g,C),q(N,C)}function a(N,g,C={},y){if(g||(g={}),!y)RJ(()=>C.children=U(N,g.children,C.children));return RJ(()=>g.ref&&g.ref(N)),RJ(()=>{for(let _ in g){if(_==="children"||_==="ref")continue;let z0=g[_];if(z0===C[_])continue;Q(N,_,z0,C[_]),C[_]=z0}}),C}return{render(N,g){let C;return Zz((y)=>{C=y,j(g,N())}),C},insert:j,spread(N,g,C){if(typeof g==="function")RJ((y)=>a(N,g(),y,C));else a(N,g,void 0,C)},createElement:f,createTextNode:J,insertNode:X,setProp(N,g,C,y){return Q(N,g,C,y),C},mergeProps:nZ,effect:RJ,memo:jN,createComponent:JV,use(N,g,C){return $f(()=>N(g,C))}}}function VN(f){let J=WN(f);return J.mergeProps=nZ,J}function $j(f){if(!jQ.has(f))jQ.set(f,0);let J=jQ.get(f)+1;return jQ.set(f,J),`${f}-${J}`}function KN(f,J,Y){if(sf("Inserting node:",rf(J),"into parent:",rf(f),"with anchor:",rf(Y),J instanceof gG),J instanceof yX)J.parent=f,J=J.getSlotChild(f);if(Y&&Y instanceof yX)Y=Y.getSlotChild(f);if(nj(J)){if(!(f instanceof f6)&&!nj(f))throw Error(`Orphan text error: "${J.toChunks().map((X)=>X.text).join("")}" must have a <text> as a parent: ${f.id} above ${J.id}`)}if(!(f instanceof eU))throw console.error("[INSERT]","Tried to mount a non base renderable"),Error("Tried to mount a non base renderable");if(!Y){f.add(J);return}let z=dj(f),G=z.findIndex((X)=>X.id===Y.id);if(G===-1)sf("[INSERT]","Could not find anchor",rf(f),rf(Y),"[children]",...z.map((X)=>X.id));f.add(J,G)}function UN(f,J){if(sf("Removing node:",rf(J),"from parent:",rf(f)),J instanceof yX)J.parent=null,J=J.getSlotChild(f);f.remove(J.id),process.nextTick(()=>{if(J instanceof eU&&!J.parent){J.destroyRecursively();return}})}function DN(f){sf("Creating text node:",f);let J=$j("text-node");if(typeof f==="number")f=f.toString();return gG.fromString(Cz(f),{id:J})}function LN(){let f=$j("slot-node");return sf("Creating slot node",f),new yX(f)}function sU(f){sf("Getting parent of node:",rf(f));let J=f.parent??void 0;if(J instanceof QN)J=J.textParent??void 0;let Y=J?.parent?.parent?.parent;if(Y instanceof HN&&Y.content===J)J=Y;return J}function CN(f){Object.assign(q6,f)}function kN(){return q6}var aj,z1=()=>{let f=u1(aj);if(!f)throw Error("No renderer found");return f},XN=(f)=>{let J=z1();J1(()=>{J.on("resize",f)}),mf(()=>{J.off("resize",f)})},TJ=()=>{let f=z1(),[J,Y]=r({width:f.width,height:f.height});return XN((G,X)=>{Y({width:G,height:X})}),J},jN=(f)=>U0(()=>f()),jQ,sf=(...f)=>{if(process.env.DEBUG)console.log("[Reconciler]",...f)},gG,rf=(f)=>{if(!f)return;return f.id},dj=(f)=>{let J;if(f instanceof f6)J=f.getTextChildren();else J=f.getChildren();return J},MN,u,I0,b,W,x0,D,K,sm,Z,J6,hY,rj,Y6,z6,yX,bX,WQ,ij,lj,G6,X6,Z6,RN,q6,yN=(f,J)=>{let Y,z=!1,G=!1,X=!0,q=!1,Q=f.destroy.bind(f),H=()=>{if(G)return;if(!Y){z=!0;return}G=!0,Y()};f.once("destroy",H),f.destroy=()=>{if(X){q=!0;return}Q()};try{Y=MN(()=>b(aj.Provider,{get value(){return f},get children(){return b(J,{})}}),f.root)}finally{X=!1,f.destroy=Q}if(z)H();if(q)Q()},Q6=async(f,J={})=>{let Y=J instanceof ik?J:await lk({...J,onDestroy:()=>{J.onDestroy?.()}});ak.attach(Y),yN(Y,f)};var h=k(()=>{Wf();rU();Wf();Wf();Wf();aj=CJ();jQ=new Map;gG=class gG extends BN{static fromString(f,J={}){let Y=new gG(J);return Y.add(f),Y}};({render:MN,effect:u,memo:I0,createComponent:b,createElement:W,createTextNode:x0,insertNode:D,insert:K,spread:sm,setProp:Z,mergeProps:J6,use:hY}=VN({createElement(f){sf("Creating element:",f);let J=$j(f),Y=u1(aj);if(!Y)throw Error("No renderer found");let z=kN();if(!z[f])throw Error(`[Reconciler] Unknown component type: ${f}`);let G=new z[f](Y,{id:J});return sf("Element created with id:",J),G},createTextNode:DN,createSlotNode:LN,replaceText(f,J){if(sf("Replacing text:",J,"in node:",rf(f)),!(f instanceof gG))return;f.replace(Cz(J),0)},setProperty(f,J,Y,z){if(J.startsWith("on:")){let G=J.slice(3);if(Y)f.on(G,Y);if(z)f.off(G,z);return}if(nj(f)){if(J==="href"){f.link={url:Y};return}if(J==="style"){f.attributes|=ZN(Y),f.fg=Y.fg?pU(Y.fg):f.fg,f.bg=Y.bg?pU(Y.bg):f.bg;return}return}switch(J){case"id":sf("Id mapped",f.id,"=",Y),f[J]=Y;break;case"focused":if(!(f instanceof qN))return;if(Y)f.focus();else f.blur();break;case"onChange":let G=void 0;if(f instanceof _U)G=mj.SELECTION_CHANGED;else if(f instanceof oU)G=cj.SELECTION_CHANGED;else if(f instanceof vj)G=NX.CHANGE;if(!G)break;if(Y)f.on(G,Y);if(z)f.off(G,z);break;case"onInput":if(f instanceof vj){if(Y)f.on(NX.INPUT,Y);if(z)f.off(NX.INPUT,z)}break;case"onSubmit":if(f instanceof vj){if(Y)f.on(NX.ENTER,Y);if(z)f.off(NX.ENTER,z)}else f[J]=Y;break;case"onSelect":if(f instanceof _U){if(Y)f.on(mj.ITEM_SELECTED,Y);if(z)f.off(mj.ITEM_SELECTED,z)}else if(f instanceof oU){if(Y)f.on(cj.ITEM_SELECTED,Y);if(z)f.off(cj.ITEM_SELECTED,z)}break;case"style":for(let X in Y){let q=Y[X];if(z!==void 0&&q===z[X])continue;f[X]=q}break;case"text":case"content":{let X=typeof Y==="string"?Y:Array.isArray(Y)?Y.join(""):`${Y}`;f[J]=Cz(X);break}default:f[J]=Y}},isTextNode(f){return f instanceof gG},insertNode:KN,removeNode:UN,getParentNode:sU,getFirstChild(f){sf("Getting first child of node:",rf(f));let J=dj(f)[0];if(!J){sf("No first child found for node:",rf(f));return}return sf("First child found:",rf(J),"for node:",rf(f)),J},getNextSibling(f){sf("Getting next sibling of node:",rf(f));let J=sU(f);if(!J){sf("No parent found for node:",rf(f));return}let Y=dj(J),z=Y.indexOf(f);if(z===-1||z===Y.length-1){sf("No next sibling found for node:",rf(f));return}let G=Y[z+1];if(!G){sf("Next sibling is null for node:",rf(f));return}return sf("Next sibling found:",rf(G),"for node:",rf(f)),G}}));rj=class rj extends FN{constructor(f){super({id:f})}add(f,J){throw Error("Can't add children on an Slot renderable")}getChildren(){return[]}remove(f){}insertBefore(f,J){throw Error("Can't add children on an Slot renderable")}getRenderable(f){return}getChildrenCount(){return 0}requestRender(){}findDescendantById(f){return}};Y6=class Y6 extends AN{slotParent;destroyed=!1;constructor(f,J){super({id:f});this._visible=!1,this.slotParent=J}destroy(){if(this.destroyed)return;this.destroyed=!0,this.slotParent?.destroy(),super.destroy()}};z6=class z6 extends rj{yogaNode;slotParent;destroyed=!1;constructor(f,J){super(f);this._visible=!1,this.slotParent=J,this.yogaNode=tU.default.Node.create(),this.yogaNode.setDisplay(tU.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};yX=class yX extends rj{layoutNode;textNode;destroyed=!1;constructor(f){super(f);this._visible=!1}getSlotChild(f){if(ON(f)||f instanceof gN){if(!this.textNode)this.textNode=new Y6(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new z6(`slot-layout-${this.id}`,this);return this.layoutNode}destroy(){if(this.destroyed)return;if(this.destroyed=!0,this.layoutNode)this.layoutNode.destroy();if(this.textNode)this.textNode.destroy()}};bX=class bX extends zN{_ctx;constructor(f,J){super(J);this._ctx=f}};WQ=class WQ extends bX{constructor(f,J){super(null,f);if(J==="b"||J==="strong")this.attributes=(this.attributes||0)|Pj.BOLD;else if(J==="i"||J==="em")this.attributes=(this.attributes||0)|Pj.ITALIC;else if(J==="u")this.attributes=(this.attributes||0)|Pj.UNDERLINE}};ij=class ij extends WQ{constructor(f){super(f,"b")}};lj=class lj extends WQ{constructor(f){super(f,"i")}};G6=class G6 extends WQ{constructor(f){super(f,"u")}};X6=class X6 extends bX{constructor(f,J){super(null,J);this.add()}add(){return super.add(`
222
+ `)}};Z6=class Z6 extends bX{constructor(f,J){let Y={...J,link:{url:J.href}};super(null,Y)}};RN={box:rk,text:GN,input:ok,select:fN,textarea:YN,ascii_font:$k,tab_select:JN,scrollbox:ek,code:pk,diff:_k,line_number:sk,markdown:tk,span:bX,strong:ij,b:ij,em:lj,i:lj,u:G6,br:X6,a:Z6},q6={...RN};CN({time_to_first_draw:NN})});function bN(f){let J=f?.changes;if(!J||typeof J!=="object"||Array.isArray(J))return null;let Y=new Map;for(let[z,G]of Object.entries(J)){let X=G;if(typeof X?.added!=="number"||typeof X.deleted!=="number")return null;Y.set(z,{added:X.added,deleted:X.deleted})}return Y}function SN(f,J){if(f.size!==J.size)return!1;for(let[Y,z]of f){let G=J.get(Y);if(!G||!IJ(z,G))return!1}return!0}class W1{client;tasksAcc;setTasks;activeTaskAcc;setActiveTaskSig;updateAcc;setUpdateSig;daemonVersionAcc;setDaemonVersionSig;engineStateAcc;setEngineStateSig;taskJobsAcc;setTaskJobsSig;worktreeChangesAcc;setWorktreeChangesSig;uiPrefsAcc;setUiPrefsSig;keybindingsRevAcc;setKeybindingsRevSig;connectionStateAcc;setConnectionState;ensureReachable;role;channels;subscribesTasks;reconnecting=!1;constructor(f,J={}){this.client=f;let[Y,z]=r([]),[G,X]=r(null),[q,Q]=r(null),[H,B]=r(null),[V,j]=r(new Map),[U,L]=r(new Map),[O,M]=r(null),[R,S]=r(null),[a,N]=r(null),[g,C]=r("online");this.tasksAcc=Y,this.setTasks=(y)=>z(()=>y),this.activeTaskAcc=G,this.setActiveTaskSig=(y)=>X(()=>y),this.updateAcc=q,this.setUpdateSig=(y)=>Q(()=>y),this.daemonVersionAcc=H,this.setDaemonVersionSig=(y)=>B(()=>y),this.engineStateAcc=V,this.setEngineStateSig=(y)=>j(()=>y),this.taskJobsAcc=U,this.setTaskJobsSig=(y)=>L(()=>y),this.worktreeChangesAcc=O,this.setWorktreeChangesSig=(y)=>M(()=>y),this.uiPrefsAcc=R,this.setUiPrefsSig=(y)=>S(()=>y),this.keybindingsRevAcc=a,this.setKeybindingsRevSig=(y)=>N(()=>y),this.connectionStateAcc=g,this.setConnectionState=(y)=>C(()=>y),this.ensureReachable=J.ensureReachable??UG,this.role=J.role??"pane",this.channels=J.channels,this.subscribesTasks=!J.channels||J.channels.includes("task.snapshot"),this.client.on("*",(y)=>this.handleEvent(y.name,y.payload)),this.client.onLifecycle("close",()=>{if(this.setConnectionState("disconnected"),this.role==="pane")dJ("orch","daemon socket closed \u2014 starting non-spawning reconnect loop"),this.reconnectLoop()})}async reconnectLoop(){if(this.reconnecting)return;this.reconnecting=!0;let f=500,J=0;while(!this.client.isDisposed){if(await new Promise((Y)=>setTimeout(Y,f)),this.client.isDisposed)break;J++;try{await this.init(),dJ("orch",`reconnected and re-subscribed after ${J} attempt(s) \u2014 task list re-synced`),this.reconnecting=!1;return}catch(Y){if(J===1||J%10===0)HY("orch-reconnect",Y);f=Math.min(f*2,3000)}}this.reconnecting=!1}async init(){let f=await this.client.request("hello",{protocolVersion:n1,minProtocolVersion:QY}),J=typeof f.protocolVersion==="number"?f.protocolVersion:n1,Y=typeof f.minProtocolVersion==="number"?f.minProtocolVersion:J;if(!ZZ({localVersion:n1,localMin:QY,remoteVersion:J,remoteMin:Y}))throw Error(`kobe daemon is protocol v${J} (min v${Y}); this client is v${n1} (min v${QY}). Restart the daemon (\`kobe daemon restart\`) or upgrade kobe.`);if(this.setDaemonVersionSig(typeof f.kobeVersion==="string"?f.kobeVersion:null),f.tasks&&this.subscribesTasks)this.setTasks(f.tasks.map(SX));if(await this.client.subscribe({role:this.role,channels:this.channels}),f.capabilities?.includes("worktree.changes")){if(this.worktreeChangesAcc()===null)this.setWorktreeChangesSig(new Map)}else this.setWorktreeChangesSig(null);this.setConnectionState("online"),dJ("orch",`subscribed as ${this.role} (${this.tasksAcc().length} tasks)`)}connectionStateSignal(){return this.connectionStateAcc}async manualReconnect(){this.client.forceDisconnect(),await this.ensureReachable(),await this.init()}dispose(){this.client.close()}tasksSignal(){return this.tasksAcc}activeTaskSignal(){return this.activeTaskAcc}updateSignal(){return this.updateAcc}daemonVersionSignal(){return this.daemonVersionAcc}daemonStaleSignal(){return()=>I9(this.daemonVersionAcc()??void 0,s0)}engineStateSignal(){return this.engineStateAcc}taskJobsSignal(){return this.taskJobsAcc}worktreeChangesSignal(){return this.worktreeChangesAcc}uiPrefsSignal(){return this.uiPrefsAcc}keybindingsRevSignal(){return this.keybindingsRevAcc}listTasks(){return this.tasksAcc()}getTask(f){return this.tasksAcc().find((J)=>J.id===f)}subscribeTasks(f){try{f(this.listTasks())}catch(Y){console.error("[kobe RemoteOrchestrator] task listener threw on subscribe:",Y)}let J=!0;return Zz((Y)=>{return Gf(()=>{let z=this.tasksAcc();if(J){J=!1;return}try{f(z)}catch(G){console.error("[kobe RemoteOrchestrator] task listener threw:",G)}}),Y})}async createTask(f){let{modelEffort:J,...Y}=f,z=await this.client.request("task.create",{...Y,effort:J});return SX(z.task)}async ensureMainTask(f){let J=await this.client.request("task.ensureMain",{repo:f});return SX(J.task)}async ensureWorktree(f){return(await this.client.request("task.ensureWorktree",{taskId:String(f)})).worktreePath}async forgetProject(f){await this.client.request("project.forget",{repo:f})}async setTitle(f,J){await this.client.request("task.rename",{taskId:String(f),title:J})}async setBranch(f,J){await this.client.request("task.setBranch",{taskId:String(f),branch:J})}async setVendor(f,J){await this.client.request("task.setVendor",{taskId:String(f),vendor:J})}async setPinned(f,J){await this.client.request("task.pin",{taskId:String(f),pinned:J})}async moveTask(f,J){await this.client.request("task.move",{taskId:String(f),direction:J<0?"up":"down"})}async setArchived(f,J){await this.client.request("task.archive",{taskId:String(f),archived:J})}async setStatus(f,J){await this.client.request("task.status",{taskId:String(f),status:J})}async deleteTask(f,J){await this.client.request("task.delete",{taskId:String(f),force:J?.force})}async discoverAdoptableWorktrees(f){return(await this.client.request("worktree.discoverAdoptable",{repo:f})).worktrees}async adoptWorktree(f){let J=await this.client.request("worktree.adopt",f);return SX(J.task)}async setActiveTask(f){await this.client.request("task.setActive",{taskId:f===null?null:String(f)})}handleEvent(f,J){if(f==="task.snapshot"){let Y=J?.tasks;if(Array.isArray(Y))this.setTasks(Y.map(SX)),this.pruneEngineState(Y),this.pruneTaskJobs(Y);return}if(f==="active-task"){let Y=J?.taskId;this.setActiveTaskSig(typeof Y==="string"?Y:null);return}if(f==="update"){let Y=J?.info;this.setUpdateSig(Y??null);return}if(f==="engine-state"){let Y=J;if(typeof Y?.taskId!=="string"||typeof Y.state!=="string")return;let z=new Map(this.engineStateAcc());if(Y.state==="idle")z.delete(Y.taskId);else z.set(Y.taskId,{state:Y.state,detail:Y.detail,at:typeof Y.at==="number"?Y.at:0});this.setEngineStateSig(z);return}if(f==="task.jobs"){let Y=J;if(typeof Y?.taskId!=="string"||Y.kind!=="ensureWorktree")return;let z=this.taskJobsAcc();if(Y.phase==="running"){let G=new Map(z);G.set(Y.taskId,{kind:Y.kind}),this.setTaskJobsSig(G);return}if((Y.phase==="done"||Y.phase==="error")&&z.has(Y.taskId)){let G=new Map(z);G.delete(Y.taskId),this.setTaskJobsSig(G)}return}if(f==="worktree.changes"){let Y=bN(J);if(!Y)return;let z=this.worktreeChangesAcc();if(z&&SN(z,Y))return;this.setWorktreeChangesSig(Y);return}if(f==="ui-prefs"){let Y=J;if(typeof Y?.theme!=="string")return;this.setUiPrefsSig({theme:Y.theme,transparentBackground:Y.transparentBackground===!0,focusAccent:typeof Y.focusAccent==="string"?Y.focusAccent:null,locale:typeof Y.locale==="string"?Y.locale:"",sortMode:Y.sortMode==="recent"?"recent":"default",keysCollapsed:Y.keysCollapsed===!0,projectFilter:typeof Y.projectFilter==="string"&&Y.projectFilter.length>0?Y.projectFilter:null});return}if(f==="keybindings"){let Y=J;if(typeof Y?.rev!=="number")return;this.setKeybindingsRevSig(Y.rev);return}}pruneEngineState(f){let J=this.engineStateAcc();if(J.size===0)return;let Y=new Set(f.map((G)=>G.id)),z=null;for(let G of J.keys()){if(Y.has(G))continue;if(!z)z=new Map(J);z.delete(G)}if(z)this.setEngineStateSig(z)}pruneTaskJobs(f){let J=this.taskJobsAcc();if(J.size===0)return;let Y=new Set(f.map((G)=>G.id)),z=null;for(let G of J.keys()){if(Y.has(G))continue;if(!z)z=new Map(J);z.delete(G)}if(z)this.setTaskJobsSig(z)}}function SX(f){return{id:rG(f.id),title:f.title,repo:f.repo,branch:f.branch,worktreePath:f.worktreePath,kind:f.kind,status:f.status,archived:f.archived,pinned:f.pinned,vendor:f.vendor,prStatus:f.prStatus,modelEffort:f.modelEffort,createdAt:f.createdAt,updatedAt:f.updatedAt}}var PY=k(()=>{sY();L1();_Y();Wf();WG();I1();D1()});function j6(f){let J=f[GJ];if(!J){if(Object.defineProperty(f,GJ,{value:J=new Proxy(f,uN)}),!Array.isArray(f)){let Y=Object.keys(f),z=Object.getOwnPropertyDescriptors(f),G=Object.getPrototypeOf(f),X=G!==null&&f!==null&&typeof f==="object"&&!Array.isArray(f)&&G!==Object.prototype;if(X){let q=Object.getOwnPropertyDescriptors(G);Y.push(...Object.keys(q)),Object.assign(z,q)}for(let q=0,Q=Y.length;q<Q;q++){let H=Y[q];if(X&&H==="constructor")continue;if(z[H].get)Object.defineProperty(f,H,{configurable:!0,enumerable:z[H].enumerable,get:z[H].get.bind(J)})}}}return J}function VQ(f){let J;return f!=null&&typeof f==="object"&&(f[GJ]||!(J=Object.getPrototypeOf(f))||J===Object.prototype||Array.isArray(f))}function TX(f,J=new Set){let Y,z,G,X;if(Y=f!=null&&f[pj])return Y;if(!VQ(f)||J.has(f))return f;if(Array.isArray(f)){if(Object.isFrozen(f))f=f.slice(0);else J.add(f);for(let q=0,Q=f.length;q<Q;q++)if(G=f[q],(z=TX(G,J))!==G)f[q]=z}else{if(Object.isFrozen(f))f=Object.assign({},f);else J.add(f);let q=Object.keys(f),Q=Object.getOwnPropertyDescriptors(f);for(let H=0,B=q.length;H<B;H++){if(X=q[H],Q[X].get)continue;if(G=f[X],(z=TX(G,J))!==G)f[X]=z}}return f}function KQ(f,J){let Y=f[J];if(!Y)Object.defineProperty(f,J,{value:Y=Object.create(null)});return Y}function uX(f,J,Y){if(f[J])return f[J];let[z,G]=r(Y,{equals:!1,internal:!0});return z.$=G,f[J]=z}function IN(f,J){let Y=Reflect.getOwnPropertyDescriptor(f,J);if(!Y||Y.get||!Y.configurable||J===GJ||J===RG)return Y;return delete Y.value,delete Y.writable,Y.get=()=>f[GJ][J],Y}function W6(f){mZ()&&uX(KQ(f,RG),B6)()}function TN(f){return W6(f),Reflect.ownKeys(f)}function UQ(f,J,Y,z=!1){if(J==="__proto__"){console.warn('Refusing to set "__proto__" on a store.');return}if(!z&&f[J]===Y)return;let G=f[J],X=f.length;if(H6.onStoreNodeUpdate&&H6.onStoreNodeUpdate(f,J,Y,G),Y===void 0){if(delete f[J],f[YY]&&f[YY][J]&&G!==void 0)f[YY][J].$()}else if(f[J]=Y,f[YY]&&f[YY][J]&&G===void 0)f[YY][J].$();let q=KQ(f,RG),Q;if(Q=uX(q,J,G))Q.$(()=>Y);if(Array.isArray(f)&&f.length!==X){for(let H=f.length;H<X;H++)(Q=q[H])&&Q.$();(Q=uX(q,"length",X))&&Q.$(f.length)}(Q=q[B6])&&Q.$()}function V6(f,J){let Y=Object.keys(J);for(let z=0;z<Y.length;z+=1){let G=Y[z];if(K6(G))continue;UQ(f,G,J[G])}}function K6(f){return f==="__proto__"||f==="constructor"||f==="prototype"}function EN(f,J){if(typeof J==="function")J=J(f);if(J=TX(J),Array.isArray(J)){if(f===J)return;let Y=0,z=J.length;for(;Y<z;Y++){let G=J[Y];if(f[Y]!==G)UQ(f,Y,G)}UQ(f,"length",z)}else V6(f,J)}function IX(f,J,Y=[]){let z,G=f;if(J.length>1){z=J.shift();let q=typeof z,Q=Array.isArray(f);if(q==="string"&&(z==="__proto__"||J.length>1&&K6(z))){console.warn(`Refusing to traverse unsafe key "${z}" on a store.`);return}if(Array.isArray(z)){for(let H=0;H<z.length;H++)IX(f,[z[H]].concat(J),Y);return}else if(Q&&q==="function"){for(let H=0;H<f.length;H++)if(z(f[H],H))IX(f,[H].concat(J),Y);return}else if(Q&&q==="object"){let{from:H=0,to:B=f.length-1,by:V=1}=z;for(let j=H;j<=B;j+=V)IX(f,[j].concat(J),Y);return}else if(J.length>1){IX(f[z],J,[z].concat(Y));return}G=f[z],Y=[z].concat(Y)}let X=J[0];if(typeof X==="function"){if(X=X(G,Y),X===G)return}if(z===void 0&&X==null)return;if(X=TX(X),z===void 0||VQ(G)&&VQ(X)&&!Array.isArray(X))V6(G,X);else UQ(f,z,X)}function uJ(...[f,J]){let Y=TX(f||{}),z=Array.isArray(Y);if(typeof Y!=="object"&&typeof Y!=="function")throw Error(`Unexpected type ${typeof Y} received when initializing 'createStore'. Expected an object.`);let G=j6(Y);YV.registerGraph({value:Y,name:J&&J.name});function X(...q){vZ(()=>{z&&q.length===1?EN(Y,q[0]):IX(Y,q)})}return[G,X]}var pj,RG,YY,B6,H6,uN,Uc;var CG=k(()=>{Wf();pj=Symbol("store-raw"),RG=Symbol("store-node"),YY=Symbol("store-has"),B6=Symbol("store-self"),H6={onStoreNodeUpdate:null};uN={get(f,J,Y){if(J===pj)return f;if(J===GJ)return Y;if(J===wZ)return W6(f),Y;let z=KQ(f,RG),G=z[J],X=G?G():f[J];if(J===RG||J===YY||J==="__proto__")return X;if(!G){let q=Object.getOwnPropertyDescriptor(f,J);if(mZ()&&(typeof X!=="function"||f.hasOwnProperty(J))&&!(q&&q.get))X=uX(z,J,X)()}return VQ(X)?j6(X):X},has(f,J){if(J===pj||J===GJ||J===wZ||J===RG||J===YY||J==="__proto__")return!0;return mZ()&&uX(KQ(f,YY),J)(),J in f},set(){return console.warn("Cannot mutate a Store directly"),!0},deleteProperty(){return console.warn("Cannot mutate a Store directly"),!0},ownKeys:TN,getOwnPropertyDescriptor:IN};Uc=Symbol("store-root")});function DQ(f){let J=CJ();return{provider:(Y)=>{let z=f.init(Y);return b(X0,{get when(){return z.ready===void 0||z.ready===!0},get children(){return b(J.Provider,{value:z,get children(){return Y.children}})}})},use(){let Y=u1(J);if(!Y)throw Error(`${f.name} context must be used within a context provider`);return Y}}}var _j=k(()=>{h();h();Wf()});import{RGBA as kz}from"@opentui/core";function wN(){return Object.keys(G1.themes)}function EX(f){return Boolean(G1.themes[f])}function sj(f,J){if(!f)return!1;if(!J||typeof J!=="object"||!J.theme)return!1;return Nz("themes",{...G1.themes,[f]:J}),!0}function oj(f,J="dark"){let Y=f.defs??{};function z(H,B=[]){if(typeof H==="string"){if(H==="transparent"||H==="none")return kz.fromInts(0,0,0,0);if(H.startsWith("#"))return kz.fromHex(H);if(B.includes(H))return kz.fromInts(0,0,0);let V=Y[H]??f.theme[H];if(V===void 0)return kz.fromInts(0,0,0);return z(V,[...B,H])}return z(H[J],B)}let G={};for(let[H,B]of Object.entries(f.theme))G[H]=z(B);let X=G.text??kz.fromHex("#ffffff"),q=G.background??kz.fromHex("#000000");return{...{primary:G.primary??X,secondary:G.secondary??X,accent:G.accent??G.primary??X,error:G.error??X,warning:G.warning??X,success:G.success??X,info:G.info??X,text:X,textMuted:G.textMuted??X,background:q,backgroundPanel:G.backgroundPanel??q,backgroundElement:G.backgroundElement??q,backgroundMenu:G.backgroundMenu??G.backgroundElement??q,backgroundDialog:G.backgroundDialog??G.backgroundPanel??q,border:G.border??X,borderActive:G.borderActive??G.border??X,borderSubtle:G.borderSubtle??G.border??X,diffAdded:G.diffAdded??G.success??X,diffRemoved:G.diffRemoved??G.error??X,diffContext:G.diffContext??G.textMuted??X,diffHunkHeader:G.diffHunkHeader??G.textMuted??X,diffAddedBg:G.diffAddedBg??q,diffRemovedBg:G.diffRemovedBg??q,selectedListItemText:G.selectedListItemText??q},...G}}var xN,yz,G1,Nz,i0,U6;var xf=k(()=>{h();Wf();CG();_j();Qq();Hq();Bq();jq();Wq();Vq();Kq();xN={claude:oz,conductor:sz,nord:ez,opencode:fG,dracula:tz,tokyonight:YG,"osaka-jade":JG},yz=["primary","success","info"],[G1,Nz]=uJ({themes:{...xN},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:i0,provider:U6}=DQ({name:"Theme",init:(f)=>{if(f.mode)Nz("mode",f.mode);if(f.theme&&EX(f.theme))Nz("active",f.theme);let J=z1(),Y=U0(()=>{let G=G1.themes[G1.active];if(G)return oj(G,G1.mode);let X=G1.themes.claude??G1.themes.opencode??Object.values(G1.themes)[0];if(!X)return oj({theme:{background:"#000000",text:"#ffffff"}},G1.mode);return oj(X,G1.mode)}),z=U0(()=>{let G=Y(),X=G[G1.focusAccent]??G.primary,q={...G,focusAccent:X};if(!G1.transparentBackground)return q;let Q=kz.fromInts(0,0,0,0);return{...q,background:Q,backgroundPanel:Q}});return Gf(()=>{J?.setBackgroundColor(z().background)}),{theme:new Proxy({},{get(G,X){let q=z();return q[X]??q.text}}),get selected(){return G1.active},get transparentBackground(){return G1.transparentBackground},get focusAccent(){return G1.focusAccent},mode(){return G1.mode},set(G){if(!EX(G))return!1;return Nz("active",G),!0},setMode(G){Nz("mode",G)},setTransparentBackground(G){Nz("transparentBackground",G)},setFocusAccent(G){Nz("focusAccent",G)},all(){return wN()},has(G){return EX(G)}}}}))});var D6,L6;var M6=k(()=>{D6={cancel:"Cancel",confirm:"Confirm",rename:{defaultTitle:"Rename task",defaultFieldLabel:"title",footerHint:"enter {submitLabel} \xB7 esc cancel",defaultSubmitLabel:"rename"}},L6={cancel:"\u53D6\u6D88",confirm:"\u786E\u8BA4",rename:{defaultTitle:"\u91CD\u547D\u540D\u4EFB\u52A1",defaultFieldLabel:"\u540D\u79F0",footerHint:"enter {submitLabel} \xB7 esc \u53D6\u6D88",defaultSubmitLabel:"\u91CD\u547D\u540D"}}});var F6,O6;var A6=k(()=>{F6={tabs:{all:"All",changes:"Changes"},actions:{zen:"Zen",createPR:"Create PR"},legend:{changes:"M modified \xB7 A added \xB7 D deleted \xB7 ? untracked"},empty:{noTask:"(no task \u2014 press n to create)",noFiles:"(empty worktree)",noChanges:"(no changes \u2014 clean worktree)"},error:{retryHint:"press r to retry",notGitRepo:"not a git repository",pathMissing:"worktree path is missing",permissionDenied:"permission denied",gitNotInstalled:"git is not installed",gitFailed:"git command failed"},footer:{openHint:"\u21B5 open"}},O6={tabs:{all:"\u5168\u90E8",changes:"\u6539\u52A8"},actions:{zen:"\u4E13\u6CE8\u6A21\u5F0F",createPR:"\u521B\u5EFA PR"},legend:{changes:"M \u5DF2\u4FEE\u6539 \xB7 A \u5DF2\u6DFB\u52A0 \xB7 D \u5DF2\u5220\u9664 \xB7 ? \u672A\u8DDF\u8E2A"},empty:{noTask:"\uFF08\u6682\u65E0\u4EFB\u52A1 \u2014 \u6309 n \u521B\u5EFA\uFF09",noFiles:"\uFF08worktree \u4E3A\u7A7A\uFF09",noChanges:"\uFF08\u65E0\u6539\u52A8 \u2014 worktree \u5E72\u51C0\uFF09"},error:{retryHint:"\u6309 r \u91CD\u8BD5",notGitRepo:"\u4E0D\u662F git \u4ED3\u5E93",pathMissing:"worktree \u8DEF\u5F84\u4E0D\u5B58\u5728",permissionDenied:"\u6743\u9650\u4E0D\u8DB3",gitNotInstalled:"\u672A\u5B89\u88C5 git",gitFailed:"git \u547D\u4EE4\u5931\u8D25"},footer:{openHint:"\u21B5 \u6253\u5F00"}}});var g6,R6;var C6=k(()=>{g6={title:"kobe \u2014 keybindings",esc:"esc"},R6={title:"kobe \u2014 \u5FEB\u6377\u952E",esc:"esc"}});var k6,N6;var y6=k(()=>{k6={category:{Global:"Global",Sidebar:"Sidebar",Workspace:"Workspace",Navigation:"Navigation","Tasks pane":"Tasks pane","Workspace (tmux)":"Workspace (tmux)",Files:"Files",Terminal:"Terminal",Dialog:"Dialog"},desc:{"help.open":"Show keybindings help","task.new":"New task","task.openEditor":"Open active task worktree in editor","settings.open":"Open settings","settings.open.sidebar":"Open settings","app.quit":"Quit (with confirm)","focus.sidebar":"Back to sidebar (tasks)","focus.numeric":"Jump to pane (h=sidebar, j=workspace, k=files, l=terminal)","chat.interrupt":"Interrupt current turn (esc while streaming)","sidebar.nav":"Move cursor up/down","sidebar.select":"Open the selected task","sidebar.goto":"Top / bottom of list (gg or shift-G)","sidebar.rename":"Rename task","sidebar.archive":"Toggle archive","sidebar.localMerge":"Local merge task into parent repo (Shift+M)","sidebar.pin":"Pin / unpin task at top (Shift+P)","sidebar.view":"Switch view (Working session \u2194 Archives)","sidebar.sort":"Switch task sort (default \u2194 recent)","sidebar.projectFilter":"Cycle task project filter","sidebar.delete":"Delete task (with confirm)","sidebar.search.enter":"Search tasks (fuzzy filter)","sidebar.search.nav":"Move highlight in search results","sidebar.search.submit":"Select search match and exit search","sidebar.search.cancel":"Cancel search (restore prior selection)","tasks.openWorktree":"Open selected task's worktree in your editor","tasks.renameBranch":"Rename the selected task's git branch","tasks.cycleEngine":"Cycle engine vendor (claude \u2194 codex \u2194 \u2026) \u2014 applies on reopen","tasks.update":"Open the update page (when a new version is available)","tasks.focusEngine":"Focus the engine pane of the current window","tasks.toggleKeys":"Collapse / expand the keys legend","tmux.quickTask":"Quick new task (tmux prefix, then f)","tmux.engineTab":"Open the engine in a new tab (tmux prefix, then t)","tmux.layout.workspaceSplit":"Add a temporary workspace split (tmux prefix, then s)","tmux.layout.workspaceClose":"Close the focused temporary workspace split (tmux prefix, then x)","tmux.layout.workspaceReset":"Close all temporary workspace splits (tmux prefix, then r)","tmux.layout.tasksToggle":"Hide / restore the Tasks pane (tmux prefix, then a)","tmux.layout.opsToggle":"Toggle the file/Ops pane (tmux prefix, then o)","tmux.layout.terminalToggle":"Hide / restore the terminal pane (tmux prefix, then z)","tmux.layout.zenToggle":"Zen mode \u2014 collapse to the engine pane (tmux prefix, then space)","chat.send":"Send message (composer)","chat.newline":"Newline in composer","chat.cycle-mode":"Cycle permission mode (composer)","chat.steer":"Steer (interrupt + send) \u2014 mid-stream only","chat.tab.new":"New chat tab","chat.fork.new":"Quick-fork: create child task seeded with current repo/branch/model","chat.session.resume":"Resume a prior session in this task's worktree","chat.tab.close":"Close chat tab","chat.tab.rename":"Rename active chat tab","chat.tab.cycle-next":"Next chat tab","chat.tab.cycle-prev":"Previous chat tab","chat.question.nav":"Move highlight in question picker","chat.question.toggle":"Toggle highlighted option in question picker","chat.question.submit":"Advance / submit question picker","chat.question.pick-number":"Pick option by number in question picker","files.nav":"Move cursor up/down","files.hierarchy":"Collapse / expand tree level","files.open":"Open file in nvim (diff vs HEAD when changed)","files.tab":"Switch tab (cycle All / Changes)","files.refresh":"Refresh","files.openExternal":"Open file in system default app (audio / video / pdf preview)","files.mention":"Inject @<path> mention into the engine pane","files.createPR":"Create PR from the current task","terminal.scroll-up":"Scroll scrollback up","terminal.scroll-down":"Scroll scrollback down","terminal.reset":"Reset terminal \u2014 kill the current shell and respawn","dialog.cancel":"Close the top dialog (esc)","dialog.newtask.tab.cycle":"Switch New Task tab (Existing / New Repo)"}},N6={category:{Global:"\u5168\u5C40",Sidebar:"\u4FA7\u8FB9\u680F",Workspace:"\u5DE5\u4F5C\u533A",Navigation:"\u5BFC\u822A","Tasks pane":"\u4EFB\u52A1\u9762\u677F","Workspace (tmux)":"\u5DE5\u4F5C\u533A\uFF08tmux\uFF09",Files:"\u6587\u4EF6",Terminal:"\u7EC8\u7AEF",Dialog:"\u5BF9\u8BDD\u6846"},desc:{"help.open":"\u663E\u793A\u5FEB\u6377\u952E\u5E2E\u52A9","task.new":"\u65B0\u5EFA\u4EFB\u52A1","task.openEditor":"\u5728\u7F16\u8F91\u5668\u4E2D\u6253\u5F00\u5F53\u524D\u4EFB\u52A1\u7684 worktree","settings.open":"\u6253\u5F00\u8BBE\u7F6E","settings.open.sidebar":"\u6253\u5F00\u8BBE\u7F6E","app.quit":"\u9000\u51FA\uFF08\u9700\u786E\u8BA4\uFF09","focus.sidebar":"\u8FD4\u56DE\u4FA7\u8FB9\u680F\uFF08\u4EFB\u52A1\u5217\u8868\uFF09","focus.numeric":"\u8DF3\u8F6C\u5230\u9762\u677F\uFF08h=\u4FA7\u8FB9\u680F\uFF0Cj=\u5DE5\u4F5C\u533A\uFF0Ck=\u6587\u4EF6\uFF0Cl=\u7EC8\u7AEF\uFF09","chat.interrupt":"\u4E2D\u65AD\u5F53\u524D\u8F6E\u6B21\uFF08\u6D41\u5F0F\u8F93\u51FA\u4E2D\u6309 esc\uFF09","sidebar.nav":"\u4E0A\u4E0B\u79FB\u52A8\u5149\u6807","sidebar.select":"\u6253\u5F00\u9009\u4E2D\u7684\u4EFB\u52A1","sidebar.goto":"\u8DF3\u5230\u5217\u8868\u9876\u90E8 / \u5E95\u90E8\uFF08gg \u6216 shift-G\uFF09","sidebar.rename":"\u91CD\u547D\u540D\u4EFB\u52A1","sidebar.archive":"\u5207\u6362\u5F52\u6863\u72B6\u6001","sidebar.localMerge":"\u5C06\u4EFB\u52A1\u672C\u5730\u5408\u5E76\u5230\u7236\u4ED3\u5E93\uFF08Shift+M\uFF09","sidebar.pin":"\u7F6E\u9876 / \u53D6\u6D88\u7F6E\u9876\u4EFB\u52A1\uFF08Shift+P\uFF09","sidebar.view":"\u5207\u6362\u89C6\u56FE\uFF08\u5DE5\u4F5C\u4F1A\u8BDD \u2194 \u5F52\u6863\uFF09","sidebar.sort":"\u5207\u6362\u4EFB\u52A1\u6392\u5E8F\u65B9\u5F0F\uFF08\u9ED8\u8BA4 \u2194 \u6700\u8FD1\uFF09","sidebar.projectFilter":"\u5FAA\u73AF\u5207\u6362\u4EFB\u52A1\u9879\u76EE\u7B5B\u9009","sidebar.delete":"\u5220\u9664\u4EFB\u52A1\uFF08\u9700\u786E\u8BA4\uFF09","sidebar.search.enter":"\u641C\u7D22\u4EFB\u52A1\uFF08\u6A21\u7CCA\u8FC7\u6EE4\uFF09","sidebar.search.nav":"\u5728\u641C\u7D22\u7ED3\u679C\u4E2D\u79FB\u52A8\u9AD8\u4EAE","sidebar.search.submit":"\u9009\u4E2D\u641C\u7D22\u5339\u914D\u9879\u5E76\u9000\u51FA\u641C\u7D22","sidebar.search.cancel":"\u53D6\u6D88\u641C\u7D22\uFF08\u6062\u590D\u4E4B\u524D\u7684\u9009\u4E2D\u9879\uFF09","tasks.openWorktree":"\u5728\u7F16\u8F91\u5668\u4E2D\u6253\u5F00\u9009\u4E2D\u4EFB\u52A1\u7684 worktree","tasks.renameBranch":"\u91CD\u547D\u540D\u9009\u4E2D\u4EFB\u52A1\u7684 git \u5206\u652F","tasks.cycleEngine":"\u5FAA\u73AF\u5207\u6362\u5F15\u64CE\u5382\u5546\uFF08claude \u2194 codex \u2194 \u2026\uFF09\u2014\u2014\u91CD\u65B0\u6253\u5F00\u540E\u751F\u6548","tasks.update":"\u6253\u5F00\u66F4\u65B0\u9875\u9762\uFF08\u6709\u65B0\u7248\u672C\u65F6\uFF09","tasks.focusEngine":"\u805A\u7126\u5F53\u524D\u7A97\u53E3\u7684\u5F15\u64CE\u9762\u677F","tasks.toggleKeys":"\u6298\u53E0 / \u5C55\u5F00\u5FEB\u6377\u952E\u8BF4\u660E","tmux.quickTask":"\u5FEB\u901F\u65B0\u5EFA\u4EFB\u52A1\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 f\uFF09","tmux.engineTab":"\u5728\u65B0\u6807\u7B7E\u9875\u4E2D\u6253\u5F00\u5F15\u64CE\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 t\uFF09","tmux.layout.workspaceSplit":"\u6DFB\u52A0\u4E34\u65F6\u5DE5\u4F5C\u533A\u5206\u5C4F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 s\uFF09","tmux.layout.workspaceClose":"\u5173\u95ED\u5F53\u524D\u805A\u7126\u7684\u4E34\u65F6\u5DE5\u4F5C\u533A\u5206\u5C4F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 x\uFF09","tmux.layout.workspaceReset":"\u5173\u95ED\u6240\u6709\u4E34\u65F6\u5DE5\u4F5C\u533A\u5206\u5C4F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 r\uFF09","tmux.layout.tasksToggle":"\u9690\u85CF / \u6062\u590D\u4EFB\u52A1\u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 a\uFF09","tmux.layout.opsToggle":"\u5207\u6362\u6587\u4EF6/Ops \u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 o\uFF09","tmux.layout.terminalToggle":"\u9690\u85CF / \u6062\u590D\u7EC8\u7AEF\u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 z\uFF09","tmux.layout.zenToggle":"\u4E13\u6CE8\u6A21\u5F0F\u2014\u2014\u6298\u53E0\u5230\u5F15\u64CE\u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 space\uFF09","chat.send":"\u53D1\u9001\u6D88\u606F\uFF08\u8F93\u5165\u6846\uFF09","chat.newline":"\u5728\u8F93\u5165\u6846\u4E2D\u6362\u884C","chat.cycle-mode":"\u5FAA\u73AF\u5207\u6362\u6743\u9650\u6A21\u5F0F\uFF08\u8F93\u5165\u6846\uFF09","chat.steer":"\u5F15\u5BFC\uFF08\u4E2D\u65AD\u5E76\u53D1\u9001\uFF09\u2014\u2014\u4EC5\u9650\u6D41\u5F0F\u8F93\u51FA\u4E2D","chat.tab.new":"\u65B0\u5EFA\u804A\u5929\u6807\u7B7E\u9875","chat.fork.new":"\u5FEB\u901F\u6D3E\u751F\uFF1A\u4EE5\u5F53\u524D\u4ED3\u5E93/\u5206\u652F/\u6A21\u578B\u521B\u5EFA\u5B50\u4EFB\u52A1","chat.session.resume":"\u5728\u6B64\u4EFB\u52A1\u7684 worktree \u4E2D\u6062\u590D\u4E4B\u524D\u7684\u4F1A\u8BDD","chat.tab.close":"\u5173\u95ED\u804A\u5929\u6807\u7B7E\u9875","chat.tab.rename":"\u91CD\u547D\u540D\u5F53\u524D\u804A\u5929\u6807\u7B7E\u9875","chat.tab.cycle-next":"\u4E0B\u4E00\u4E2A\u804A\u5929\u6807\u7B7E\u9875","chat.tab.cycle-prev":"\u4E0A\u4E00\u4E2A\u804A\u5929\u6807\u7B7E\u9875","chat.question.nav":"\u5728\u63D0\u95EE\u9009\u62E9\u5668\u4E2D\u79FB\u52A8\u9AD8\u4EAE","chat.question.toggle":"\u5728\u63D0\u95EE\u9009\u62E9\u5668\u4E2D\u5207\u6362\u9AD8\u4EAE\u9009\u9879","chat.question.submit":"\u63A8\u8FDB / \u63D0\u4EA4\u63D0\u95EE\u9009\u62E9\u5668","chat.question.pick-number":"\u5728\u63D0\u95EE\u9009\u62E9\u5668\u4E2D\u6309\u6570\u5B57\u9009\u62E9\u9009\u9879","files.nav":"\u4E0A\u4E0B\u79FB\u52A8\u5149\u6807","files.hierarchy":"\u6298\u53E0 / \u5C55\u5F00\u6811\u5C42\u7EA7","files.open":"\u5728 nvim \u4E2D\u6253\u5F00\u6587\u4EF6\uFF08\u6709\u53D8\u66F4\u65F6\u663E\u793A\u4E0E HEAD \u7684\u5DEE\u5F02\uFF09","files.tab":"\u5207\u6362\u6807\u7B7E\u9875\uFF08\u5FAA\u73AF \u5168\u90E8 / \u53D8\u66F4\uFF09","files.refresh":"\u5237\u65B0","files.openExternal":"\u5728\u7CFB\u7EDF\u9ED8\u8BA4\u5E94\u7528\u4E2D\u6253\u5F00\u6587\u4EF6\uFF08\u97F3\u9891 / \u89C6\u9891 / pdf \u9884\u89C8\uFF09","files.mention":"\u5C06 @<path> \u63D0\u53CA\u6CE8\u5165\u5F15\u64CE\u9762\u677F","files.createPR":"\u4ECE\u5F53\u524D\u4EFB\u52A1\u521B\u5EFA PR","terminal.scroll-up":"\u5411\u4E0A\u6EDA\u52A8\u56DE\u6EDA","terminal.scroll-down":"\u5411\u4E0B\u6EDA\u52A8\u56DE\u6EDA","terminal.reset":"\u91CD\u7F6E\u7EC8\u7AEF\u2014\u2014\u5173\u95ED\u5F53\u524D shell \u5E76\u91CD\u65B0\u542F\u52A8","dialog.cancel":"\u5173\u95ED\u9876\u5C42\u5BF9\u8BDD\u6846\uFF08esc\uFF09","dialog.newtask.tab.cycle":"\u5207\u6362\u65B0\u5EFA\u4EFB\u52A1\u6807\u7B7E\u9875\uFF08\u73B0\u6709\u4ED3\u5E93 / \u65B0\u4ED3\u5E93\uFF09"}}});var b6,S6;var I6=k(()=>{b6={title:"New task",tabs:{existing:"For Existing",clone:"For New Repo",adopt:"Adopt Worktree"},field:{engine:"engine",repo:"repo",fromBranch:"from branch",gitUrl:"git url",parentDir:"parent dir",folderName:"folder name",baseBranch:"base branch",adoptFilter:"filter (path glob)"},placeholder:{folderName:"auto from url",adoptFilter:"* \u2014 type e.g. feature-* to narrow"},hint:{engineCycle:"ctrl+e",remembered:"(remembered \u2014 next clone defaults to this dir)",currentDir:"(current dir)",noBranchesFound:"(no local branches found \u2014 typed text will be used as ref)",noMatchBranch:"(no match \u2014 typed text will be used as ref)",scanningWorktrees:"scanning worktrees\u2026",legend:"\u2191\u2193 pick \xB7 tab next field \xB7 \u2190\u2192 switch \xB7 enter done \xB7 esc cancel"},picker:{moreAbove:"\u2191 {count} more",moreBelow:"\u2193 {count} more"},adopt:{repoLine:"repo: {path}",repoNone:"(none)",noUnlinked:"no unlinked worktrees \u2014 every git worktree here is already a task",noMatch:"no worktrees match the filter",hintSelected:"{count} selected \xB7 enter toggles \xB7 ctrl+a all \xB7 Create imports",hintDefault:"enter toggles \xB7 ctrl+a all \xB7 Create imports the highlighted row"},clone:{progressFallback:"Cloning\u2026",progressInto:"Cloning into {target}\u2026"},button:{create:"[ Create ]",createFocused:"\u25B8 [ Create ]",cloning:"[ Cloning\u2026 ]"},error:{gitUrlRequired:"git URL is required",gitUrlInvalid:"does not look like a git URL: {url}",folderRequired:"folder name is required",folderHasSeparator:"folder name cannot contain path separators",parentRequired:"parent directory is required",parentNotFound:"parent directory does not exist: {path}",parentNotDir:"not a directory: {path}",targetExists:"target already exists: {path}",cloneFailed:"git clone failed: {error}",noAdoptable:"no adoptable worktrees to import"}},S6={title:"\u65B0\u5EFA\u4EFB\u52A1",tabs:{existing:"\u5DF2\u6709\u4ED3\u5E93",clone:"\u514B\u9686\u65B0\u4ED3\u5E93",adopt:"\u63A5\u7BA1 Worktree"},field:{engine:"\u5F15\u64CE",repo:"\u4ED3\u5E93",fromBranch:"\u57FA\u51C6\u5206\u652F",gitUrl:"git \u5730\u5740",parentDir:"\u7236\u76EE\u5F55",folderName:"\u6587\u4EF6\u5939\u540D",baseBranch:"\u57FA\u51C6\u5206\u652F",adoptFilter:"\u8FC7\u6EE4\uFF08\u8DEF\u5F84 glob\uFF09"},placeholder:{folderName:"\u81EA\u52A8\u4ECE\u5730\u5740\u63A8\u5BFC",adoptFilter:"* \u2014 \u8F93\u5165\u5982 feature-* \u6765\u7F29\u5C0F\u8303\u56F4"},hint:{engineCycle:"ctrl+e",remembered:"\uFF08\u5DF2\u8BB0\u4F4F \u2014 \u4E0B\u6B21\u514B\u9686\u9ED8\u8BA4\u4F7F\u7528\u6B64\u76EE\u5F55\uFF09",currentDir:"\uFF08\u5F53\u524D\u76EE\u5F55\uFF09",noBranchesFound:"\uFF08\u672A\u627E\u5230\u672C\u5730\u5206\u652F \u2014 \u5C06\u76F4\u63A5\u4F7F\u7528\u8F93\u5165\u6587\u672C\u4F5C\u4E3A ref\uFF09",noMatchBranch:"\uFF08\u65E0\u5339\u914D \u2014 \u5C06\u76F4\u63A5\u4F7F\u7528\u8F93\u5165\u6587\u672C\u4F5C\u4E3A ref\uFF09",scanningWorktrees:"\u6B63\u5728\u626B\u63CF worktree\u2026",legend:"\u2191\u2193 \u9009\u62E9 \xB7 tab \u4E0B\u4E00\u5B57\u6BB5 \xB7 \u2190\u2192 \u5207\u6362 \xB7 enter \u786E\u8BA4 \xB7 esc \u53D6\u6D88"},picker:{moreAbove:"\u2191 \u8FD8\u6709 {count} \u9879",moreBelow:"\u2193 \u8FD8\u6709 {count} \u9879"},adopt:{repoLine:"\u4ED3\u5E93\uFF1A{path}",repoNone:"\uFF08\u65E0\uFF09",noUnlinked:"\u6CA1\u6709\u672A\u5173\u8054\u7684 worktree \u2014 \u6B64\u4ED3\u5E93\u6240\u6709 git worktree \u5747\u5DF2\u662F\u4EFB\u52A1",noMatch:"\u6CA1\u6709 worktree \u5339\u914D\u6B64\u8FC7\u6EE4\u6761\u4EF6",hintSelected:"\u5DF2\u9009 {count} \u9879 \xB7 enter \u5207\u6362\u9009\u4E2D \xB7 ctrl+a \u5168\u9009 \xB7 \u521B\u5EFA \u5BFC\u5165",hintDefault:"enter \u5207\u6362\u9009\u4E2D \xB7 ctrl+a \u5168\u9009 \xB7 \u521B\u5EFA \u5C06\u5BFC\u5165\u9AD8\u4EAE\u884C"},clone:{progressFallback:"\u514B\u9686\u4E2D\u2026",progressInto:"\u6B63\u5728\u514B\u9686\u5230 {target}\u2026"},button:{create:"[ \u521B\u5EFA ]",createFocused:"\u25B8 [ \u521B\u5EFA ]",cloning:"[ \u514B\u9686\u4E2D\u2026 ]"},error:{gitUrlRequired:"git \u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A",gitUrlInvalid:"\u4E0D\u50CF\u662F\u6709\u6548\u7684 git \u5730\u5740\uFF1A{url}",folderRequired:"\u6587\u4EF6\u5939\u540D\u4E0D\u80FD\u4E3A\u7A7A",folderHasSeparator:"\u6587\u4EF6\u5939\u540D\u4E0D\u80FD\u5305\u542B\u8DEF\u5F84\u5206\u9694\u7B26",parentRequired:"\u7236\u76EE\u5F55\u4E0D\u80FD\u4E3A\u7A7A",parentNotFound:"\u7236\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A{path}",parentNotDir:"\u4E0D\u662F\u76EE\u5F55\uFF1A{path}",targetExists:"\u76EE\u6807\u8DEF\u5F84\u5DF2\u5B58\u5728\uFF1A{path}",cloneFailed:"git clone \u5931\u8D25\uFF1A{error}",noAdoptable:"\u6CA1\u6709\u53EF\u63A5\u7BA1\u7684 worktree"}}});var T6,u6;var E6=k(()=>{T6={badge:{newActivity:"\u25CF new"},preview:{diffVsHead:"diff vs HEAD",file:"file",closeHint:"\xB7 q to close",loading:"loading\u2026"}},u6={badge:{newActivity:"\u25CF \u65B0\u52A8\u6001"},preview:{diffVsHead:"\u4E0E HEAD \u5BF9\u6BD4",file:"\u6587\u4EF6",closeHint:"\xB7 q \u5173\u95ED",loading:"\u52A0\u8F7D\u4E2D\u2026"}}});var x6,w6;var h6=k(()=>{x6={title:"Quick task \xB7 {repoLabel}",esc:"esc",promptLabel:"prompt",promptPlaceholder:"what should this task do?",engineLabel:"engine",branchLabel:"branch",legend:"enter create \xB7 tab field \xB7 ctrl+e engine \xB7 esc cancel"},w6={title:"\u5FEB\u901F\u4EFB\u52A1 \xB7 {repoLabel}",esc:"esc",promptLabel:"\u63D0\u793A\u8BCD",promptPlaceholder:"\u8FD9\u4E2A\u4EFB\u52A1\u8981\u505A\u4EC0\u4E48\uFF1F",engineLabel:"\u5F15\u64CE",branchLabel:"\u5206\u652F",legend:"enter \u521B\u5EFA \xB7 tab \u5207\u6362\u5B57\u6BB5 \xB7 ctrl+e \u5207\u6362\u5F15\u64CE \xB7 esc \u53D6\u6D88"}});var P6,v6;var m6=k(()=>{P6={title:"Settings",esc:"esc",nav:{default:"j/k pick \xB7 h/l switch level \xB7 enter activate \xB7 esc close",feedback:"tab next field \xB7 enter send \xB7 esc close"},sections:{general:"General",engines:"Engines",accounts:"Accounts",keys:"Keybindings",feedback:"Feedback",dev:"Dev"},general:{theme:"Theme",themeHint:"l to enter list \xB7 j/k to highlight \xB7 enter to apply",language:"Language",languageHint:"Display language for kobe's UI. l to enter list \xB7 j/k to highlight \xB7 enter to apply.",transparent:"Transparent background",transparentHint:"Drops the renderer's bg fill so the host terminal shows through. `t` toggles.",on:"[x] on",off:"[ ] off",focusAccent:"Focus accent",focusAccentHint:"Color of focused pane title, \u258C marker, and split borders.",accentPrimary:"Primary (brand accent)",accentSuccess:"Success (legacy green)",accentInfo:"Info (cool blue)",notifications:"Notifications",notificationsHint:"Fired when a background chat tab finishes or pauses on an approval. Toast = bottom-right popup; Sound = terminal bell + chime. Tab-chip unread dot is always on.",toast:"Toast",sound:"Sound",zen:"Zen mode",zenHint:"The `zen` chip (above the file list) and `prefix`+space collapse the ChatTab to the engine pane \u2014 hiding the file and terminal panes. Keep this on to leave the Tasks rail visible so you can always get back out.",zenKeepTasks:"Keep Tasks pane in zen mode",surface:"Settings page",surfaceHint:"Where Settings and the other full dialogs (new task, rename) open. ChatTab = a dedicated full-window page alongside the engine tabs; Task panel = an overlay inside the left Tasks pane. enter to pick.",surfaceChattab:"ChatTab (separate page)",surfaceTaskpanel:"Task panel (in-pane overlay)",editor:"Editor",editorHint:"What `e` opens a file with in the file tree (enter stays the read-only preview). `auto` (default) follows $VISUAL / $EDITOR, else auto-detects nvim / vim / emacs / nano. enter on the row below cycles auto / vim / nvim / nano / emacs / custom; if the editor isn't installed it falls back to the preview.",editorRow:"editor: < {kind} > (enter to change)",editorCustom:"custom: {cmd}",editorCustomUnset:"(unset \u2014 enter to edit)"},engines:{title:"Launch command",hint:"The command each engine's task pane runs. Override a built-in when your binary isn't on PATH as `claude` / `codex` (e.g. it's `cl`) or to pass default flags, or add your own engine. \u25CF = default engine for new tasks (also set by Ctrl+Shift+T). enter edit command \xB7 r rename \xB7 x reset/remove \xB7 d set default.",defaultTag:" (default)",customTag:" (custom)",addEngine:"+ Add engine"},accounts:{title:"Accounts",hint:"Read-only view of locally-detected engine accounts. Login flows land here later.",checking:"Checking\u2026",notLoggedIn:"\u25CB Not logged in",loggedIn:"\u25CF Logged in: {email}",apiKeyConfigured:"\u25CF API key configured",chatgptLogin:"\u25CF ChatGPT login: {email}",tokenConfigured:"\u25CF Token configured ({source})",copilotDetected:"\u25CF Copilot login detected"},keybindings:{title:"Keybindings",hint:"Rebind chords by editing the YAML below, then restart kobe (or respawn the pane). Press F1 anywhere for the live keymap with every binding id.",configFile:"Config file",notCreated:" (not created yet)",example:"Example",overridesApplied:"Overrides applied",none:"none",warnings:"Warnings"},feedback:{title:"Feedback",hint:"Sends a GitHub Discussion to the kobe repo through `gh`. Requires `gh auth login`; category defaults to Feedback.",titleLabel:"title",titlePlaceholder:"Short summary",descriptionLabel:"description",descriptionPlaceholder:"What happened? (enter sends)",send:"[enter] Send to GitHub Discussions"},dev:{reset:"Reset UI state",resetHint:"Clears ~/.config/kobe/state.json and ~/.kobe/tasks.json, then quits kobe \u2014 relaunch to start fresh. Working session / Archive lists, pane sizes, theme, model picks all reset. Worktrees on disk and Claude Code session history are not touched.",resetButton:"[enter] Reset",restart:"Restart backend",restartHint:"Stops the kobe daemon and quits this kobe window so the next launch spawns a fresh daemon \u2014 picks up daemon / orchestrator / engine edits without a process kill. Other attached kobe windows will lose their connection too.",restartButton:"[enter] Restart",doctorHint:"Daemon wedged or unresponsive? From a shell, run `kobe doctor` to diagnose, or `kobe reset` to stop the daemon + kill sessions (keeps your tasks). Use `kobe reset --hard` only to also wipe the task index + UI state.",experimental:"Experimental",remoteHint:"Remote projects (SSH): register a project whose git worktrees + engine run on another host over SSH, driven from this local kobe. Unfinished \u2014 file/diff panes still degrade for remote. Enables `kobe add --remote`.",remoteOn:"[x] Remote projects (on)",remoteOff:"[ ] Remote projects (off)",autoStatusHint:"Auto status flow: a backlog task moves to in_progress when its engine starts a turn, and new claude sessions get a system-prompt note telling the agent to set in_review itself when the work is done. Never touches done/canceled.",autoStatusOn:"[x] Auto status flow (on)",autoStatusOff:"[ ] Auto status flow (off)",dispatcherHint:"Field-notes dispatcher: task sessions file one-line gotchas (`kobe api note`), the daemon forwards each to the repo's main session, and that session relays them to the in-flight tasks that benefit (`kobe api dispatch`). Web-hosted sessions receive the relays today.",dispatcherOn:"[x] Field-notes dispatcher (on)",dispatcherOff:"[ ] Field-notes dispatcher (off)"}},v6={title:"\u8BBE\u7F6E",esc:"esc",nav:{default:"j/k \u9009\u62E9 \xB7 h/l \u5207\u6362\u5C42\u7EA7 \xB7 enter \u786E\u8BA4 \xB7 esc \u5173\u95ED",feedback:"tab \u4E0B\u4E00\u9879 \xB7 enter \u53D1\u9001 \xB7 esc \u5173\u95ED"},sections:{general:"\u901A\u7528",engines:"\u5F15\u64CE",accounts:"\u8D26\u6237",keys:"\u5FEB\u6377\u952E",feedback:"\u53CD\u9988",dev:"\u5F00\u53D1"},general:{theme:"\u4E3B\u9898",themeHint:"l \u8FDB\u5165\u5217\u8868 \xB7 j/k \u9AD8\u4EAE \xB7 enter \u5E94\u7528",language:"\u8BED\u8A00",languageHint:"kobe \u754C\u9762\u7684\u663E\u793A\u8BED\u8A00\u3002l \u8FDB\u5165\u5217\u8868 \xB7 j/k \u9AD8\u4EAE \xB7 enter \u5E94\u7528\u3002",transparent:"\u900F\u660E\u80CC\u666F",transparentHint:"\u53BB\u6389\u6E32\u67D3\u5668\u7684\u80CC\u666F\u586B\u5145\uFF0C\u8BA9\u5BBF\u4E3B\u7EC8\u7AEF\u900F\u51FA\u6765\u3002\u6309 `t` \u5207\u6362\u3002",on:"[x] \u5F00",off:"[ ] \u5173",focusAccent:"\u805A\u7126\u5F3A\u8C03\u8272",focusAccentHint:"\u805A\u7126\u9762\u677F\u6807\u9898\u3001\u258C \u6807\u8BB0\u548C\u5206\u9694\u8FB9\u6846\u7684\u989C\u8272\u3002",accentPrimary:"\u4E3B\u8272\uFF08\u54C1\u724C\u5F3A\u8C03\u8272\uFF09",accentSuccess:"\u6210\u529F\u8272\uFF08\u4F20\u7EDF\u7EFF\uFF09",accentInfo:"\u4FE1\u606F\u8272\uFF08\u51B7\u84DD\uFF09",notifications:"\u901A\u77E5",notificationsHint:"\u540E\u53F0\u804A\u5929\u9875\u5B8C\u6210\u6216\u5728\u5BA1\u6279\u5904\u6682\u505C\u65F6\u89E6\u53D1\u3002Toast = \u53F3\u4E0B\u89D2\u5F39\u7A97\uFF1BSound = \u7EC8\u7AEF\u54CD\u94C3 + \u63D0\u793A\u97F3\u3002\u6807\u7B7E\u4E0A\u7684\u672A\u8BFB\u5706\u70B9\u59CB\u7EC8\u5F00\u542F\u3002",toast:"Toast \u5F39\u7A97",sound:"\u58F0\u97F3",zen:"\u7985\u6A21\u5F0F",zenHint:"`zen` \u6807\u8BB0\uFF08\u6587\u4EF6\u5217\u8868\u4E0A\u65B9\uFF09\u548C `prefix`+\u7A7A\u683C \u4F1A\u628A ChatTab \u6536\u8D77\u5230\u5F15\u64CE\u9762\u677F\u2014\u2014\u9690\u85CF\u6587\u4EF6\u4E0E\u7EC8\u7AEF\u9762\u677F\u3002\u4FDD\u6301\u5F00\u542F\u53EF\u8BA9 Tasks \u4FA7\u680F\u59CB\u7EC8\u53EF\u89C1\uFF0C\u65B9\u4FBF\u968F\u65F6\u9000\u51FA\u3002",zenKeepTasks:"\u7985\u6A21\u5F0F\u4E0B\u4FDD\u7559 Tasks \u9762\u677F",surface:"\u8BBE\u7F6E\u9875\u9762",surfaceHint:"\u8BBE\u7F6E\u53CA\u5176\u4ED6\u5B8C\u6574\u5BF9\u8BDD\u6846\uFF08\u65B0\u5EFA\u4EFB\u52A1\u3001\u91CD\u547D\u540D\uFF09\u7684\u6253\u5F00\u4F4D\u7F6E\u3002ChatTab = \u4E0E\u5F15\u64CE\u6807\u7B7E\u5E76\u5217\u7684\u72EC\u7ACB\u6574\u7A97\u9875\u9762\uFF1BTask panel = \u5DE6\u4FA7 Tasks \u9762\u677F\u5185\u7684\u6D6E\u5C42\u3002enter \u9009\u62E9\u3002",surfaceChattab:"ChatTab\uFF08\u72EC\u7ACB\u9875\u9762\uFF09",surfaceTaskpanel:"Task panel\uFF08\u9762\u677F\u5185\u6D6E\u5C42\uFF09",editor:"\u7F16\u8F91\u5668",editorHint:"\u6587\u4EF6\u6811\u91CC\u6309 `e` \u7528\u4EC0\u4E48\u6253\u5F00\u6587\u4EF6\uFF08enter \u4ECD\u662F\u53EA\u8BFB\u9884\u89C8\uFF09\u3002`auto`\uFF08\u9ED8\u8BA4\uFF09\u8DDF\u968F $VISUAL / $EDITOR\uFF0C\u5426\u5219\u81EA\u52A8\u63A2\u6D4B nvim / vim / emacs / nano\u3002\u5728\u4E0B\u65B9\u4E00\u884C\u6309 enter \u5728 auto / vim / nvim / nano / emacs / custom \u95F4\u5FAA\u73AF\uFF1B\u7F16\u8F91\u5668\u672A\u5B89\u88C5\u65F6\u56DE\u9000\u5230\u9884\u89C8\u3002",editorRow:"\u7F16\u8F91\u5668: < {kind} > (enter \u5207\u6362)",editorCustom:"\u81EA\u5B9A\u4E49: {cmd}",editorCustomUnset:"(\u672A\u8BBE\u7F6E \u2014 enter \u7F16\u8F91)"},engines:{title:"\u542F\u52A8\u547D\u4EE4",hint:"\u6BCF\u4E2A\u5F15\u64CE\u7684\u4EFB\u52A1\u9762\u677F\u8FD0\u884C\u7684\u547D\u4EE4\u3002\u5F53\u4E8C\u8FDB\u5236\u6587\u4EF6\u4E0D\u5728 PATH \u4E0A\u7684 `claude` / `codex` \u540D\u4E0B\uFF08\u6BD4\u5982\u53EB `cl`\uFF09\u3001\u8981\u4F20\u9ED8\u8BA4\u53C2\u6570\uFF0C\u6216\u8981\u6DFB\u52A0\u81EA\u5DF1\u7684\u5F15\u64CE\u65F6\uFF0C\u53EF\u8986\u76D6\u5185\u7F6E\u9879\u3002\u25CF = \u65B0\u4EFB\u52A1\u7684\u9ED8\u8BA4\u5F15\u64CE\uFF08\u4E5F\u53EF\u7528 Ctrl+Shift+T \u8BBE\u7F6E\uFF09\u3002enter \u7F16\u8F91\u547D\u4EE4 \xB7 r \u91CD\u547D\u540D \xB7 x \u91CD\u7F6E/\u79FB\u9664 \xB7 d \u8BBE\u4E3A\u9ED8\u8BA4\u3002",defaultTag:" (\u9ED8\u8BA4)",customTag:" (\u81EA\u5B9A\u4E49)",addEngine:"+ \u6DFB\u52A0\u5F15\u64CE"},accounts:{title:"\u8D26\u6237",hint:"\u672C\u5730\u63A2\u6D4B\u5230\u7684\u5F15\u64CE\u8D26\u6237\u7684\u53EA\u8BFB\u89C6\u56FE\u3002\u767B\u5F55\u6D41\u7A0B\u7A0D\u540E\u4F1A\u63A5\u5165\u8FD9\u91CC\u3002",checking:"\u68C0\u67E5\u4E2D\u2026",notLoggedIn:"\u25CB \u672A\u767B\u5F55",loggedIn:"\u25CF \u5DF2\u767B\u5F55: {email}",apiKeyConfigured:"\u25CF \u5DF2\u914D\u7F6E API key",chatgptLogin:"\u25CF ChatGPT \u767B\u5F55: {email}",tokenConfigured:"\u25CF \u5DF2\u914D\u7F6E Token ({source})",copilotDetected:"\u25CF \u68C0\u6D4B\u5230 Copilot \u767B\u5F55"},keybindings:{title:"\u5FEB\u6377\u952E",hint:"\u7F16\u8F91\u4E0B\u9762\u7684 YAML \u6765\u91CD\u7ED1\u5B9A\u6309\u952E\uFF0C\u7136\u540E\u91CD\u542F kobe\uFF08\u6216\u91CD\u5EFA\u9762\u677F\uFF09\u3002\u4EFB\u610F\u4F4D\u7F6E\u6309 F1 \u67E5\u770B\u5E26\u6BCF\u4E2A\u7ED1\u5B9A id \u7684\u5B9E\u65F6\u952E\u4F4D\u8868\u3002",configFile:"\u914D\u7F6E\u6587\u4EF6",notCreated:" (\u5C1A\u672A\u521B\u5EFA)",example:"\u793A\u4F8B",overridesApplied:"\u5DF2\u5E94\u7528\u7684\u8986\u76D6",none:"\u65E0",warnings:"\u8B66\u544A"},feedback:{title:"\u53CD\u9988",hint:"\u901A\u8FC7 `gh` \u5411 kobe \u4ED3\u5E93\u53D1\u4E00\u6761 GitHub Discussion\u3002\u9700\u8981 `gh auth login`\uFF1B\u5206\u7C7B\u9ED8\u8BA4\u4E3A Feedback\u3002",titleLabel:"\u6807\u9898",titlePlaceholder:"\u7B80\u77ED\u6982\u62EC",descriptionLabel:"\u63CF\u8FF0",descriptionPlaceholder:"\u53D1\u751F\u4E86\u4EC0\u4E48\uFF1F(enter \u53D1\u9001)",send:"[enter] \u53D1\u9001\u5230 GitHub Discussions"},dev:{reset:"\u91CD\u7F6E UI \u72B6\u6001",resetHint:"\u6E05\u7A7A ~/.config/kobe/state.json \u548C ~/.kobe/tasks.json\uFF0C\u7136\u540E\u9000\u51FA kobe\u2014\u2014\u91CD\u65B0\u542F\u52A8\u5373\u53EF\u4ECE\u5934\u5F00\u59CB\u3002\u5DE5\u4F5C\u4F1A\u8BDD / \u5F52\u6863\u5217\u8868\u3001\u9762\u677F\u5C3A\u5BF8\u3001\u4E3B\u9898\u3001\u6A21\u578B\u9009\u62E9\u90FD\u4F1A\u91CD\u7F6E\u3002\u78C1\u76D8\u4E0A\u7684 worktree \u548C Claude Code \u4F1A\u8BDD\u5386\u53F2\u4E0D\u53D7\u5F71\u54CD\u3002",resetButton:"[enter] \u91CD\u7F6E",restart:"\u91CD\u542F\u540E\u7AEF",restartHint:"\u505C\u6B62 kobe daemon \u5E76\u9000\u51FA\u5F53\u524D kobe \u7A97\u53E3\uFF0C\u4E0B\u6B21\u542F\u52A8\u4F1A\u62C9\u8D77\u4E00\u4E2A\u5168\u65B0\u7684 daemon\u2014\u2014\u65E0\u9700\u6740\u8FDB\u7A0B\u5373\u53EF\u5E94\u7528 daemon / orchestrator / engine \u7684\u6539\u52A8\u3002\u5176\u4ED6\u5DF2\u8FDE\u63A5\u7684 kobe \u7A97\u53E3\u4E5F\u4F1A\u65AD\u5F00\u8FDE\u63A5\u3002",restartButton:"[enter] \u91CD\u542F",doctorHint:"daemon \u5361\u4F4F\u6216\u65E0\u54CD\u5E94\uFF1F\u5728 shell \u91CC\u8FD0\u884C `kobe doctor` \u8BCA\u65AD\uFF0C\u6216 `kobe reset` \u505C\u6B62 daemon + \u6740\u6389\u4F1A\u8BDD\uFF08\u4FDD\u7559\u4F60\u7684\u4EFB\u52A1\uFF09\u3002\u53EA\u6709\u8981\u540C\u65F6\u6E05\u7A7A\u4EFB\u52A1\u7D22\u5F15 + UI \u72B6\u6001\u65F6\u624D\u7528 `kobe reset --hard`\u3002",experimental:"\u5B9E\u9A8C\u6027",remoteHint:"\u8FDC\u7A0B\u9879\u76EE\uFF08SSH\uFF09\uFF1A\u6CE8\u518C\u4E00\u4E2A git worktree + \u5F15\u64CE\u90FD\u901A\u8FC7 SSH \u8DD1\u5728\u53E6\u4E00\u53F0\u4E3B\u673A\u4E0A\u3001\u7531\u672C\u5730 kobe \u9A71\u52A8\u7684\u9879\u76EE\u3002\u5C1A\u672A\u5B8C\u6210\u2014\u2014\u6587\u4EF6/diff \u9762\u677F\u5BF9\u8FDC\u7A0B\u4ECD\u4F1A\u964D\u7EA7\u3002\u542F\u7528 `kobe add --remote`\u3002",remoteOn:"[x] \u8FDC\u7A0B\u9879\u76EE (\u5F00)",remoteOff:"[ ] \u8FDC\u7A0B\u9879\u76EE (\u5173)",autoStatusHint:"\u81EA\u52A8\u72B6\u6001\u6D41\u8F6C\uFF1Abacklog \u4EFB\u52A1\u5728\u5176\u5F15\u64CE\u5F00\u59CB\u4E00\u8F6E\u65F6\u79FB\u5230 in_progress\uFF0C\u65B0\u7684 claude \u4F1A\u8BDD\u4F1A\u62FF\u5230\u4E00\u6761\u7CFB\u7EDF\u63D0\u793A\uFF0C\u544A\u8BC9 agent \u5B8C\u6210\u540E\u81EA\u884C\u8BBE\u4E3A in_review\u3002\u7EDD\u4E0D\u89E6\u78B0 done/canceled\u3002",autoStatusOn:"[x] \u81EA\u52A8\u72B6\u6001\u6D41\u8F6C (\u5F00)",autoStatusOff:"[ ] \u81EA\u52A8\u72B6\u6001\u6D41\u8F6C (\u5173)",dispatcherHint:"\u73B0\u573A\u7B14\u8BB0\u8C03\u5EA6\u5668\uFF1A\u4EFB\u52A1\u4F1A\u8BDD\u63D0\u4EA4\u4E00\u884C\u7ECF\u9A8C\uFF08`kobe api note`\uFF09\uFF0Cdaemon \u5C06\u6BCF\u6761\u8F6C\u53D1\u7ED9\u4ED3\u5E93\u7684\u4E3B\u4F1A\u8BDD\uFF0C\u4E3B\u4F1A\u8BDD\u518D\u628A\u5B83\u4EEC\u8F6C\u8FBE\u7ED9\u80FD\u53D7\u76CA\u7684\u8FDB\u884C\u4E2D\u4EFB\u52A1\uFF08`kobe api dispatch`\uFF09\u3002\u76EE\u524D\u7531 Web \u6258\u7BA1\u7684\u4F1A\u8BDD\u4F1A\u6536\u5230\u8F6C\u8FBE\u3002",dispatcherOn:"[x] \u73B0\u573A\u7B14\u8BB0\u8C03\u5EA6\u5668 (\u5F00)",dispatcherOff:"[ ] \u73B0\u573A\u7B14\u8BB0\u8C03\u5EA6\u5668 (\u5173)"}}});var c6,n6;var d6=k(()=>{c6={view:{workspace:"Workspace",archives:"Archives"},header:{projects:"PROJECTS",tasks:"TASKS"},search:{placeholder:"fuzzy filter"},sort:"sort",project:{taskSingular:"task",taskPlural:"tasks"},moveChip:" move",empty:{noMatchSearch:"No matching tasks \u2014 esc to clear.",noActiveProject:"No active tasks for this project.",noArchivedProject:"No archived tasks for this project.",noActive:"No active tasks \u2014 press n or [+] to create one.",noArchived:"No archived tasks."},archiveHint:"a to unarchive",status:{done:"done",inReview:"in review",working:"working",backlog:"\u2014",canceled:"canceled",error:"error"},activity:{rateLimited:"rate limited",permissionNeeded:"needs permission",error:"error"},subtitle:{noTracking:"no activity tracking",materializing:"materializing"},hints:{headerFolded:"\u2500\u2500 keys ?\u25B8 \u2500\u2500",headerUnfolded:"\u2500\u2500 keys ?\u25BE \u2500\u2500",fullHelp:"full help",newTask:"new task",settings:"settings",open:"open",focusEngine:"focus engine",openWorktree:"open wt",delete:"delete",views:"views",project:"project",movePanes:"move panes",detach:"tasks\u2192detach",splits:"splits",panes:"panes",reorder:"reorder",done:"done"},toast:{noDaemonWorktree:"No daemon running \u2014 can't create the worktree",noDaemonOpen:"No daemon running \u2014 can't open this task",noEditor:"No editor found \u2014 set KOBE_OPEN_EDITOR (e.g. 'code', 'cursor', 'nvim')",openWorktreeFailed:"Couldn't open worktree with {label}",sessionStartFailed:"Couldn't start this task's session",moveTaskFailed:"Couldn't move task: {message}",alreadyLatest:"Already on the latest version (v{version})",worktreeErrorNotGit:"This project isn't a git repo yet \u2014 a task needs a git branch. Run `git init` (+ a first commit) in the project, then open the task. Non-git support is coming.",worktreeErrorGeneric:"Couldn't create the worktree: {message}"}},n6={view:{workspace:"\u5DE5\u4F5C\u533A",archives:"\u5F52\u6863"},header:{projects:"\u9879\u76EE",tasks:"\u4EFB\u52A1"},search:{placeholder:"\u6A21\u7CCA\u641C\u7D22"},sort:"\u6392\u5E8F",project:{taskSingular:"\u4E2A\u4EFB\u52A1",taskPlural:"\u4E2A\u4EFB\u52A1"},moveChip:" \u79FB\u52A8",empty:{noMatchSearch:"\u65E0\u5339\u914D\u4EFB\u52A1\u2014\u2014\u6309 esc \u6E05\u9664\u3002",noActiveProject:"\u8BE5\u9879\u76EE\u6682\u65E0\u6D3B\u8DC3\u4EFB\u52A1\u3002",noArchivedProject:"\u8BE5\u9879\u76EE\u6682\u65E0\u5F52\u6863\u4EFB\u52A1\u3002",noActive:"\u6682\u65E0\u6D3B\u8DC3\u4EFB\u52A1\u2014\u2014\u6309 n \u6216 [+] \u65B0\u5EFA\u3002",noArchived:"\u6682\u65E0\u5F52\u6863\u4EFB\u52A1\u3002"},archiveHint:"a \u53D6\u6D88\u5F52\u6863",status:{done:"\u5DF2\u5B8C\u6210",inReview:"\u5BA1\u6838\u4E2D",working:"\u8FDB\u884C\u4E2D",backlog:"\u2014",canceled:"\u5DF2\u53D6\u6D88",error:"\u9519\u8BEF"},activity:{rateLimited:"\u8BF7\u6C42\u53D7\u9650",permissionNeeded:"\u7B49\u5F85\u6388\u6743",error:"\u9519\u8BEF"},subtitle:{noTracking:"\u4E0D\u8DDF\u8E2A\u6D3B\u52A8",materializing:"\u6B63\u5728\u521B\u5EFA worktree"},hints:{headerFolded:"\u2500\u2500 \u5FEB\u6377\u952E ?\u25B8 \u2500\u2500",headerUnfolded:"\u2500\u2500 \u5FEB\u6377\u952E ?\u25BE \u2500\u2500",fullHelp:"\u5B8C\u6574\u5E2E\u52A9",newTask:"\u65B0\u5EFA\u4EFB\u52A1",settings:"\u8BBE\u7F6E",open:"\u6253\u5F00",focusEngine:"\u805A\u7126\u5F15\u64CE",openWorktree:"\u6253\u5F00 worktree",delete:"\u5220\u9664",views:"\u89C6\u56FE",project:"\u9879\u76EE",movePanes:"\u79FB\u52A8\u9762\u677F",detach:"\u4EFB\u52A1\u2192\u5206\u79BB",splits:"\u5206\u5272",panes:"\u9762\u677F",reorder:"\u91CD\u65B0\u6392\u5E8F",done:"\u5B8C\u6210"},toast:{noDaemonWorktree:"\u5B88\u62A4\u8FDB\u7A0B\u672A\u8FD0\u884C\u2014\u2014\u65E0\u6CD5\u521B\u5EFA worktree",noDaemonOpen:"\u5B88\u62A4\u8FDB\u7A0B\u672A\u8FD0\u884C\u2014\u2014\u65E0\u6CD5\u6253\u5F00\u6B64\u4EFB\u52A1",noEditor:"\u672A\u627E\u5230\u7F16\u8F91\u5668\u2014\u2014\u8BF7\u8BBE\u7F6E KOBE_OPEN_EDITOR\uFF08\u5982 'code'\u3001'cursor'\u3001'nvim'\uFF09",openWorktreeFailed:"\u65E0\u6CD5\u7528 {label} \u6253\u5F00 worktree",sessionStartFailed:"\u65E0\u6CD5\u542F\u52A8\u6B64\u4EFB\u52A1\u7684\u4F1A\u8BDD",moveTaskFailed:"\u65E0\u6CD5\u79FB\u52A8\u4EFB\u52A1\uFF1A{message}",alreadyLatest:"\u5DF2\u662F\u6700\u65B0\u7248\u672C\uFF08v{version}\uFF09",worktreeErrorNotGit:"\u8BE5\u9879\u76EE\u5C1A\u975E git \u4ED3\u5E93\u2014\u2014\u4EFB\u52A1\u9700\u8981 git \u5206\u652F\u3002\u8BF7\u5728\u9879\u76EE\u4E2D\u6267\u884C `git init`\uFF08+ \u9996\u6B21\u63D0\u4EA4\uFF09\u540E\u518D\u6253\u5F00\u4EFB\u52A1\u3002\u975E git \u9879\u76EE\u7684\u652F\u6301\u5373\u5C06\u63A8\u51FA\u3002",worktreeErrorGeneric:"\u65E0\u6CD5\u521B\u5EFA worktree\uFF1A{message}"}}});var i6,l6;var a6=k(()=>{i6={pageTitle:"KOBE UPDATE",current:"current",latest:"latest",releaseUrlUnavailable:"release URL unavailable",statusReleaseOpened:"Opened release page in your browser.",statusReleaseError:"Could not open release URL.",statusRunningUpdater:"Leaving the TUI page and running the updater in this tmux window...",loadingNotes:"Loading release notes...",notesUnavailable:"Release notes are unavailable. Use Open release to view the GitHub release page.",changesSectionHeader:"\u2500\u2500 changes from v{from} to v{to} \u2500\u2500",updateComplete:"kobe update complete. Relaunch kobe to use the new version.",updateFailed:"kobe update failed with exit code {code}.",pressAnyKey:"Press any key to close this update window.",actions:{updateNow:"Update now",openRelease:"Open release",close:"Close",closeDetail:"return to the previous tmux window"},skew:{title:"\u26A0 DAEMON OUT OF DATE",olderBuild:"an older build",hint:"daemon is {daemon} \u2014 you launched v{clientVersion}. Run `kobe daemon restart` then `kobe reload`"}},l6={pageTitle:"KOBE \u66F4\u65B0",current:"\u5F53\u524D",latest:"\u6700\u65B0",releaseUrlUnavailable:"\u53D1\u5E03\u94FE\u63A5\u4E0D\u53EF\u7528",statusReleaseOpened:"\u5DF2\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u53D1\u5E03\u8BF4\u660E\u9875\u9762\u3002",statusReleaseError:"\u65E0\u6CD5\u6253\u5F00\u53D1\u5E03\u94FE\u63A5\u3002",statusRunningUpdater:"\u6B63\u5728\u79BB\u5F00 TUI \u9875\u9762\uFF0C\u5E76\u5728\u6B64 tmux \u7A97\u53E3\u4E2D\u8FD0\u884C\u66F4\u65B0\u7A0B\u5E8F\u2026\u2026",loadingNotes:"\u6B63\u5728\u52A0\u8F7D\u53D1\u5E03\u8BF4\u660E\u2026\u2026",notesUnavailable:"\u53D1\u5E03\u8BF4\u660E\u4E0D\u53EF\u7528\u3002\u8BF7\u4F7F\u7528\u300C\u6253\u5F00\u53D1\u5E03\u9875\u300D\u67E5\u770B GitHub \u53D1\u5E03\u9875\u9762\u3002",changesSectionHeader:"\u2500\u2500 v{from} \u81F3 v{to} \u7684\u53D8\u66F4 \u2500\u2500",updateComplete:"kobe \u66F4\u65B0\u5B8C\u6210\u3002\u8BF7\u91CD\u65B0\u542F\u52A8 kobe \u4EE5\u4F7F\u7528\u65B0\u7248\u672C\u3002",updateFailed:"kobe \u66F4\u65B0\u5931\u8D25\uFF0C\u9000\u51FA\u7801\u4E3A {code}\u3002",pressAnyKey:"\u6309\u4EFB\u610F\u952E\u5173\u95ED\u6B64\u66F4\u65B0\u7A97\u53E3\u3002",actions:{updateNow:"\u7ACB\u5373\u66F4\u65B0",openRelease:"\u6253\u5F00\u53D1\u5E03\u9875",close:"\u5173\u95ED",closeDetail:"\u8FD4\u56DE\u4E0A\u4E00\u4E2A tmux \u7A97\u53E3"},skew:{title:"\u26A0 DAEMON \u7248\u672C\u4E0D\u4E00\u81F4",olderBuild:"\u65E7\u7248\u672C\u6784\u5EFA",hint:"daemon \u8FD0\u884C\u7684\u662F {daemon}\uFF0C\u800C\u4F60\u542F\u52A8\u7684\u662F v{clientVersion}\u3002\u8BF7\u8FD0\u884C `kobe daemon restart` \u518D\u8FD0\u884C `kobe reload`"}}});function xX(f){return typeof f==="string"&&bz.some((J)=>J.id===f)}var hN,PN,bz,kG,NG="en";var yG=k(()=>{M6();A6();C6();y6();I6();E6();h6();m6();d6();a6();hN={settings:P6,tasks:c6,files:F6,newTask:b6,ops:T6,update:i6,quickTask:x6,help:g6,common:D6,keys:k6},PN={settings:v6,tasks:n6,files:O6,newTask:S6,ops:u6,update:l6,quickTask:w6,help:R6,common:L6,keys:N6},bz=[{id:"en",label:"English"},{id:"zh",label:"\u4E2D\u6587"}],kG={en:hN,zh:PN}});function wX(f){if(kG[f])vN("lang",f)}function ej(){return tj.lang}function $6(f,J){let Y=f;for(let z of J.split("."))if(Y&&typeof Y==="object"&&z in Y)Y=Y[z];else return;return typeof Y==="string"?Y:void 0}function mN(f,J){if(!J)return f;return f.replace(/\{(\w+)\}/g,(Y,z)=>(z in J)?String(J[z]):Y)}function F(f,J){let Y=tj.lang,z=$6(kG[Y],f)??$6(kG.en,f)??f;return mN(z,J)}function f8(f,J){let Y=tj.lang,z=(G)=>{return G.keys[f]?.[J]};return z(kG[Y])??z(kG.en)??J}var tj,vN;var X1=k(()=>{CG();yG();yG();[tj,vN]=uJ({lang:NG})});function cN(f){let J=[],Y=f.name;if(Y)J.push(Y);if(Y==="return")J.push("enter");if(Y==="enter")J.push("return");let z=[];if(f.ctrl)z.push("ctrl");if(f.meta)z.push("cmd");if(f.option)z.push("alt");if(f.shift&&Y&&Y.length>1)z.push("shift");if(z.length===0)return J;let G=`${z.join("+")}+`;return J.map((X)=>G+X)}function J8(f,J){if(J.defaultPrevented)return!1;let Y=cN(J);for(let z=f.length-1;z>=0;z--){let G=f[z];if(!G)continue;let X=G.config();if(X.enabled===!1)continue;let q=X.bindings.find((Q)=>Y.includes(Q.key));if(q)return q.cmd(J,q.slot),J.preventDefault(),!0}return!1}function dN(){if(Y8)return;let f=z1();if(!f)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");Y8=f.keyInput,r6=(J)=>{J8(LQ,J)},Y8.on("keypress",r6)}function Uf(f){dN();let J=nN++,Y={config:f,id:J};Gf(()=>{f()}),LQ.push(Y),mf(()=>{let z=LQ.findIndex((G)=>G.id===J);if(z>=0)LQ.splice(z,1)})}var nN=1,LQ,Y8=null,r6=null;var S1=k(()=>{h();Wf();LQ=[]});import{RGBA as p6}from"@opentui/core";function aN(f){let J=TJ(),Y=i0(),{theme:z}=Y,G=z1(),X=!1,q=()=>{if(f.size==="xlarge")return 140;if(f.size==="large")return 110;if(f.size==="small")return 50;return 80},Q=2,H=()=>Math.max(8,J().height-Q*2);return(()=>{var B=W("box"),V=W("box");return D(B,V),Z(B,"onMouseDown",()=>{X=!!G?.getSelection()}),Z(B,"onMouseUp",()=>{if(X){X=!1;return}f.onClose?.()}),Z(B,"alignItems","center"),Z(B,"justifyContent","center"),Z(B,"position","absolute"),Z(B,"zIndex",3000),Z(B,"left",0),Z(B,"top",0),Z(V,"onMouseUp",(j)=>{X=!1,j.stopPropagation()}),Z(V,"flexShrink",1),Z(V,"flexGrow",0),Z(V,"paddingTop",1),K(V,()=>f.children),u((j)=>{var U=J().width,L=J().height,O=Y.transparentBackground?lN:iN,M=q(),R=J().width-2,S=H(),a=z.backgroundDialog;return U!==j.e&&(j.e=Z(B,"width",U,j.e)),L!==j.t&&(j.t=Z(B,"height",L,j.t)),O!==j.a&&(j.a=Z(B,"backgroundColor",O,j.a)),M!==j.o&&(j.o=Z(V,"width",M,j.o)),R!==j.i&&(j.i=Z(V,"maxWidth",R,j.i)),S!==j.n&&(j.n=Z(V,"maxHeight",S,j.n)),a!==j.s&&(j.s=Z(V,"backgroundColor",a,j.s)),j},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),B})()}function $N(){let[f,J]=uJ({stack:[],size:"medium"}),Y=z1(),z=null;function G(){setTimeout(()=>{if(!z)return;if(z.isDestroyed)return;function X(Q){for(let H of Q.getChildren()){if(H===z)return!0;if(X(H))return!0}return!1}let q=Y?.root;if(!q)return;if(!X(q))return;z.focus()},1)}return Uf(()=>({enabled:f.stack.length>0&&!Y?.getSelection()?.getSelectedText(),bindings:[{key:"escape",cmd:()=>{if(Y?.getSelection())Y.clearSelection();f.stack.at(-1)?.onClose?.(),J("stack",f.stack.slice(0,-1)),G()}},{key:"ctrl+c",cmd:()=>{if(Y?.getSelection())Y.clearSelection();f.stack.at(-1)?.onClose?.(),J("stack",f.stack.slice(0,-1)),G()}}]})),{clear(){for(let X of f.stack)X.onClose?.();vZ(()=>{J("size","medium"),J("stack",[])}),G()},replace(X,q){if(f.stack.length===0)z=Y?.currentFocusedRenderable??null,z?.blur();for(let Q of f.stack)Q.onClose?.();J("size","medium"),J("stack",[{element:X,onClose:q}])},push(X,q){if(f.stack.length===0)z=Y?.currentFocusedRenderable??null,z?.blur();J("stack",[...f.stack,{element:X,onClose:q}])},pop(){if(f.stack.at(-1)?.onClose?.(),J("stack",f.stack.slice(0,-1)),f.stack.length===0)G()},get stack(){return f.stack},get size(){return f.size},setSize(X){J("size",X)}}}function o6(f){let J=$N();return b(_6.Provider,{value:J,get children(){return[I0(()=>f.children),(()=>{var Y=W("box");return Z(Y,"position","absolute"),Z(Y,"zIndex",3000),K(Y,b(X0,{get when(){return J.stack.length},get children(){return b(aN,{onClose:()=>J.clear(),get size(){return J.size},get children(){return J.stack.at(-1).element()}})}})),Y})()]}})}function vf(){let f=u1(_6);if(!f)throw Error("useDialog must be used within a DialogProvider");return f}var iN,lN,_6;var v1=k(()=>{h();h();h();h();h();h();h();h();Wf();CG();xf();S1();iN=p6.fromInts(0,0,0,128),lN=p6.fromInts(0,0,0,64);_6=CJ()});import{spawnSync as z8}from"child_process";import*as t6 from"fs";function s6(f){return`This folder isn't a git repository yet, and a task needs a git branch to work in. To fix it, turn ${f} into a repo: git init && git add -A && git commit -m "init" \u2014 then create the task again. (Working in non-git folders is coming soon.)`}function e6(f){let J=f.trim();if(!J)return"repo path is required";let Y;try{Y=t6.statSync(J)}catch{return`path does not exist: ${J}`}if(!Y.isDirectory())return`not a directory: ${J}`;try{if(z8("git",["rev-parse","--git-dir"],{cwd:J,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return s6(J)}catch{return s6(J)}return null}function hX(f){if(!f)return null;try{let J=z8("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:f,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]});if(J.status!==0)return null;let Y=J.stdout.trim();if(!Y||Y==="HEAD")return null;return Y}catch{return null}}function f4(f){if(!f)return[];try{let J=z8("git",["for-each-ref","--format=%(refname:short)","refs/heads/"],{cwd:f,encoding:"utf-8",timeout:2000});if(J.status!==0)return[];return J.stdout.split(`
223
+ `).map((Y)=>Y.trim()).filter(Boolean).sort((Y,z)=>{let G=(Q)=>Q==="main"?0:Q==="master"?1:Q==="develop"?2:3,X=G(Y),q=G(z);if(X!==q)return X-q;return Y.localeCompare(z)})}catch{return[]}}var LJ="main";var MQ=()=>{};import*as J4 from"fs";import*as FQ from"os";function V1(f){if(f==="~")return FQ.homedir();if(f.startsWith("~/"))return FQ.homedir()+f.slice(1);return f}function G8(f){if(!f)return{base:"",filter:""};let Y=V1(f==="~"?"~/":f);if(Y.endsWith("/"))return{base:Y,filter:""};let z=Y.lastIndexOf("/");if(z===-1)return{base:"",filter:Y};return{base:Y.slice(0,z+1),filter:Y.slice(z+1)}}function X8(f){if(!f)return[];try{let J=J4.readdirSync(f,{withFileTypes:!0}),Y=[];for(let z of J)if(z.isDirectory())Y.push(z.name);return Y.sort((z,G)=>z.localeCompare(G))}catch{return[]}}function Z8(f,J){let Y=J.toLowerCase(),G=Y.startsWith(".")?f:f.filter((X)=>!X.startsWith("."));if(!Y)return G;return G.filter((X)=>X.toLowerCase().startsWith(Y))}function PX(f,J,Y){let z=J+Y;if(f.startsWith("~")){let G=FQ.homedir();if(z===G)return"~";if(z.startsWith(`${G}/`))return`~${z.slice(G.length)}`}return z}var OQ=()=>{};import{spawn as rN}from"child_process";import*as Sz from"fs";import*as vX from"path";function Y4(f){let J=f.trim().replace(/\/+$/,"");if(!J)return"";let Y=J.lastIndexOf("/"),z=J.lastIndexOf(":"),G=Math.max(Y,z);return(G>=0?J.slice(G+1):J).replace(/\.git$/i,"")}function z4(f){let J=f.trim();if(!J)return F("newTask.error.gitUrlRequired");let Y=J.includes("://"),z=J.includes("@")&&J.includes(":"),G=J.includes("/");if(!Y&&!z&&!G)return F("newTask.error.gitUrlInvalid",{url:J});return null}function G4(f,J){let Y=J.trim();if(!Y)return F("newTask.error.folderRequired");if(Y.includes("/")||Y.includes("\\"))return F("newTask.error.folderHasSeparator");let z=f.trim();if(!z)return F("newTask.error.parentRequired");let G=V1(z),X;try{X=Sz.statSync(G)}catch{return F("newTask.error.parentNotFound",{path:G})}if(!X.isDirectory())return F("newTask.error.parentNotDir",{path:G});let q=vX.join(G,Y);if(Sz.existsSync(q))return F("newTask.error.targetExists",{path:q});return null}function X4(f,J){return vX.join(V1(f.trim()),J.trim())}function Z4(f,J){let Y=J.trim();if(!Y)return J;let z=V1(f.trim());if(!z)return J;try{if(!Sz.statSync(z).isDirectory())return J}catch{return J}if(!Sz.existsSync(vX.join(z,Y)))return Y;for(let G=2;G<1000;G++){let X=`${Y}-${G}`;if(!Sz.existsSync(vX.join(z,X)))return X}return Y}function q4(f,J,Y){return new Promise((z)=>{let G="";try{let X=rN("git",["clone","--progress",f,J],{stdio:["ignore","ignore","pipe"]});X.stderr?.setEncoding("utf-8"),X.stderr?.on("data",(q)=>{if(G+=q,Y){let Q=q.split(/[\r\n]+/).filter((B)=>B.trim().length>0),H=Q[Q.length-1];if(H)Y(H)}}),X.on("error",(q)=>{z({ok:!1,error:q.message})}),X.on("close",(q)=>{if(q===0){z({ok:!0,path:J});return}let Q=G.split(/[\r\n]+/).filter((H)=>H.trim().length>0).pop()??`git clone exited with ${q}`;z({ok:!1,error:Q})})}catch(X){z({ok:!1,error:X instanceof Error?X.message:String(X)})}})}var Q4=k(()=>{X1();OQ()});function AQ(f){if(f==="existing")return"clone";if(f==="clone")return"adopt";return"existing"}function H4(f){if(f==="existing")return"adopt";if(f==="clone")return"existing";return"clone"}function B4(f,J){let Y=f.trim();if(J.includes(Y))return"saved";if(Y.startsWith("~"))return"browse";if(Y.includes("/"))return"browse";return"saved"}function Z1(f){return f.replace(/[\r\n]+/g,"")}function q8(f,J="existing"){if(f==="confirm")return"tabs";if(f==="tabs")return"engine";if(f==="engine")return Q8(J);if(J==="clone"){if(f==="cloneUrl")return"cloneParent";if(f==="cloneParent")return"cloneFolder";if(f==="cloneFolder")return"cloneBaseRef";if(f==="cloneBaseRef")return"confirm";return"cloneUrl"}if(J==="adopt")return f==="adoptFilter"?"confirm":"adoptFilter";if(f==="repo")return"baseRef";if(f==="baseRef")return"confirm";return"repo"}function Q8(f){if(f==="clone")return"cloneUrl";if(f==="adopt")return"adoptFilter";return"repo"}function j4(f,J){let Y=J.trim();if(!Y)return f;return f.filter((z)=>oX(Y,z.path))}function W4(f,J){let Y=new Set,z=[];for(let G of[f,...J]){let X=G.trim();if(!X||Y.has(X))continue;Y.add(X),z.push(X)}return z}function V4(f,J){let Y=J.trim().toLowerCase();if(!Y)return f;return f.filter((z)=>z.toLowerCase().includes(Y))}function K4(f,J){let Y=J.trim().toLowerCase();if(!Y)return f;return f.filter((z)=>z.toLowerCase().includes(Y))}function mX(f,J,Y=pN){let z=f.length;if(z<=Y)return{items:f,start:0,total:z};let G=Math.floor(Y/2),X=Math.max(0,J-G);if(X+Y>z)X=z-Y;return{items:f.slice(X,X+Y),start:X,total:z}}function EJ(f,J){if(J<=0)return 0;return Math.max(0,Math.min(J-1,f))}function U4(f,J,Y){let z=J[Y];if(z)return z;return f.trim()||LJ}var pN=8;var H8=k(()=>{nQ();MQ()});import{TextAttributes as _1}from"@opentui/core";function D4(f){let J=vf(),{theme:Y}=i0(),[z,G]=r("existing"),X=()=>{let d=f.availableVendors;return d&&d.length>0?d:cf},q=(()=>{let d=X(),s=f.defaultVendor??"claude";return d.includes(s)?s:d[0]??"claude"})(),[Q,H]=r(q),[B,V]=r("tabs"),[j,U]=r(f.defaultRepo),[L,O]=r(hX(V1(f.defaultRepo.trim()))??LJ),[M,R]=r(!1),[S,a]=r(""),[N,g]=r(f.defaultCloneParent?.trim()?f.defaultCloneParent:"~/"),[C,y]=r(""),[_,z0]=r(!1),[t,Y0]=r(LJ),[T,Q0]=r(!1),[p,D0]=r(""),g0=U0(()=>W4(f.defaultRepo,f.savedRepos)),$=U0(()=>B4(j(),g0())),E=U0(()=>G8(j())),f0=U0(()=>X8(E().base)),I=U0(()=>Z8(f0(),E().filter)),G0=U0(()=>V4(g0(),j())),x=U0(()=>$()==="browse"?I():G0()),[c,Z0]=r(0),V0=U0(()=>mX(x(),c())),[H0,y0]=r(!1),w0=U0(()=>f4(V1(j().trim()))),T0=U0(()=>K4(w0(),L())),[r0,P]=r(0),M0=U0(()=>mX(T0(),r0())),J0=U0(()=>G8(N())),F0=U0(()=>X8(J0().base)),a0=U0(()=>Z8(F0(),J0().filter)),[p0,u0]=r(0),_0=U0(()=>mX(a0(),p0())),[n,q0]=r(!1),[b0,o0]=r(""),[l0,$0]=r(0),[t0,Rf]=r(new Set),[gf]=PZ(()=>z()==="adopt"?V1(j().trim()):null,async(d)=>f.discoverAdoptable?await f.discoverAdoptable(d):[]),o=U0(()=>j4(gf()??[],b0())),e=U0(()=>mX(o().map((d)=>d.path),l0())),B0=U0(()=>{let d=e();return o().slice(d.start,d.start+d.items.length)});Gf(()=>{o(),$0((d)=>EJ(d,o().length))});function C0(d){Rf((s)=>{let S0=new Set(s);if(S0.has(d))S0.delete(d);else S0.add(d);return S0})}function A(){let d=o()[l0()];if(d)C0(d.path)}Gf(()=>{T0(),P(0)}),Gf(()=>{let d=V1(j().trim());if(!d)return;if(M())return;let s=hX(d);if(s)O(s)}),Gf(()=>{x(),Z0(0)}),Gf(()=>{a0(),u0(0)}),Gf(()=>{let d=S(),s=N();if(_())return;let S0=Y4(d);y(Z4(s,S0))});let[P0,K0]=r(null);Gf(()=>{j(),S(),N(),C(),b0(),K0(null)});function E0(){let d=V1(j().trim());if(!d)return;let s=e6(d);if(s){K0(s),V("repo");return}let S0=L().trim()||LJ;f.onSubmit({repo:d,baseRef:S0,vendor:Q()}),J.clear()}async function W0(){if(T())return;let d=z4(S());if(d){K0(d),V("cloneUrl");return}let s=G4(N(),C());if(s){K0(s),V(C().trim()?"cloneParent":"cloneFolder");return}let S0=X4(N(),C());Q0(!0),D0(F("newTask.clone.progressInto",{target:S0}));let N0=await q4(S().trim(),S0,(tf)=>{D0(tf)});if(Q0(!1),!N0.ok){K0(F("newTask.error.cloneFailed",{error:N0.error})),V("cloneUrl");return}let q1=t().trim()||LJ,K1=V1(N().trim());f.onSubmit({repo:N0.path,baseRef:q1,vendor:Q(),cloned:{parentDir:K1}}),J.clear()}function L0(){let d=o();if(d.length===0){K0(F("newTask.error.noAdoptable"));return}let s=t0(),S0=s.size>0?d.filter((N0)=>s.has(N0.path)):d.slice(l0(),l0()+1);if(S0.length===0)return;f.onSubmit({mode:"adopt",repo:V1(j().trim()),vendor:Q(),adopt:S0.map((N0)=>({worktreePath:N0.path,branch:N0.branch}))}),J.clear()}function R0(){if(z()==="clone"){W0();return}if(z()==="adopt"){L0();return}E0()}function Jf(d){if(T())return;if(d===z())return;G(d),V(Q8(d)),K0(null)}function Yf(d){if(T())return;let s=d===1?AQ(z()):H4(z());if(s===z())return;G(s),K0(null),V("tabs")}function n0(d){H((s)=>d===1?qY(X(),s):dQ(X(),s))}function yf(){if(!j().trim()&&$()==="saved"){let s=x()[0];if(s){U(s),V("baseRef");return}}if($()==="browse"){let S0=I()[c()],N0=E();if(S0){U(PX(j(),N0.base,S0)),Z0(0),y0(!0),V("baseRef");return}V("baseRef");return}let d=x()[c()];if(d){U(d),V("baseRef");return}V("baseRef")}function k0(d){let S0=x()[d];if(!S0)return;if($()==="browse"){let N0=E();U(PX(j(),N0.base,S0)),Z0(d),y0(!0),V("baseRef");return}U(S0),Z0(d),V("baseRef")}function wf(){let s=a0()[p0()],S0=J0();if(s){g(PX(N(),S0.base,s)),u0(0),q0(!0),V("cloneFolder");return}V("cloneFolder")}function v(d){let S0=a0()[d];if(!S0)return;let N0=J0();g(PX(N(),N0.base,S0)),u0(d),q0(!0),V("cloneFolder")}let A0=()=>{let d=o();if(d.length===0)return;let s=d.every((S0)=>t0().has(S0.path));Rf(s?new Set:new Set(d.map((S0)=>S0.path)))};Uf(()=>({bindings:[{key:"tab",cmd:()=>V((d)=>q8(d,z()))},{key:"ctrl+]",cmd:()=>Jf(AQ(z()))},{key:"ctrl+[",cmd:()=>Jf(AQ(z()))},{key:"ctrl+e",cmd:()=>H((d)=>qY(X(),d))},{key:"up",cmd:()=>{if(T())return;if(z()==="existing"&&B()==="repo"){let d=x();if(d.length===0)return;Z0(EJ(c()-1,d.length));return}if(z()==="existing"&&B()==="baseRef"){let d=T0();if(d.length===0)return;P(EJ(r0()-1,d.length));return}if(z()==="clone"&&B()==="cloneParent"){let d=a0();if(d.length===0)return;u0(EJ(p0()-1,d.length));return}if(z()==="adopt"){let d=o();if(d.length===0)return;$0(EJ(l0()-1,d.length))}}},{key:"down",cmd:()=>{if(T())return;if(z()==="existing"&&B()==="repo"){let d=x();if(d.length===0)return;Z0(EJ(c()+1,d.length));return}if(z()==="existing"&&B()==="baseRef"){let d=T0();if(d.length===0)return;P(EJ(r0()+1,d.length));return}if(z()==="clone"&&B()==="cloneParent"){let d=a0();if(d.length===0)return;u0(EJ(p0()+1,d.length));return}if(z()==="adopt"){let d=o();if(d.length===0)return;$0(EJ(l0()+1,d.length))}}},...B()==="tabs"||B()==="engine"?[{key:"left",cmd:()=>B()==="tabs"?Yf(-1):n0(-1)},{key:"right",cmd:()=>B()==="tabs"?Yf(1):n0(1)},{key:"return",cmd:()=>V((d)=>q8(d,z()))}]:[],...z()==="adopt"?[{key:"ctrl+a",cmd:A0}]:[]]})),Uf(()=>({enabled:B()==="confirm"&&!T(),bindings:[{key:"return",cmd:()=>R0()}]}));let Bf=(d)=>B()===d?Y.primary:Y.textMuted,Of=(d)=>B()===d?_1.BOLD|_1.UNDERLINE:void 0,Qf=(d,s)=>d?s?_1.BOLD|_1.UNDERLINE:_1.BOLD:void 0;return(()=>{var d=W("box"),s=W("box"),S0=W("text"),N0=W("box"),q1=W("box"),K1=W("text"),tf=W("box"),m1=W("box"),xJ=W("text"),F1=W("box"),wJ=W("text"),XY=W("text");return D(d,s),D(d,N0),D(d,F1),Z(d,"paddingLeft",2),Z(d,"paddingRight",2),Z(d,"gap",0),D(s,S0),Z(s,"flexDirection","row"),K(S0,()=>F("newTask.title")),D(N0,q1),Z(N0,"gap",1),Z(N0,"paddingTop",1),Z(N0,"paddingBottom",1),K(N0,()=>{let m=()=>B()==="tabs",i=(l)=>l?Y.primary:Y.textMuted;return(()=>{var l=W("box"),w=W("text"),m0=W("text"),v0=W("text");return D(l,w),D(l,m0),D(l,v0),Z(l,"flexDirection","row"),Z(l,"gap",2),Z(w,"onMouseUp",()=>Jf("existing")),K(w,(()=>{var O0=I0(()=>z()==="existing");return()=>O0()?`\u25B8 ${F("newTask.tabs.existing")}`:` ${F("newTask.tabs.existing")}`})()),Z(m0,"onMouseUp",()=>Jf("clone")),K(m0,(()=>{var O0=I0(()=>z()==="clone");return()=>O0()?`\u25B8 ${F("newTask.tabs.clone")}`:` ${F("newTask.tabs.clone")}`})()),Z(v0,"onMouseUp",()=>Jf("adopt")),K(v0,(()=>{var O0=I0(()=>z()==="adopt");return()=>O0()?`\u25B8 ${F("newTask.tabs.adopt")}`:` ${F("newTask.tabs.adopt")}`})()),u((O0)=>{var c0=i(z()==="existing"),qf=Qf(z()==="existing",m()),Df=i(z()==="clone"),Q1=Qf(z()==="clone",m()),s1=i(z()==="adopt"),ZY=Qf(z()==="adopt",m());return c0!==O0.e&&(O0.e=Z(w,"fg",c0,O0.e)),qf!==O0.t&&(O0.t=Z(w,"attributes",qf,O0.t)),Df!==O0.a&&(O0.a=Z(m0,"fg",Df,O0.a)),Q1!==O0.o&&(O0.o=Z(m0,"attributes",Q1,O0.o)),s1!==O0.i&&(O0.i=Z(v0,"fg",s1,O0.i)),ZY!==O0.n&&(O0.n=Z(v0,"attributes",ZY,O0.n)),O0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),l})()},q1),D(q1,K1),D(q1,tf),Z(q1,"gap",0),K(K1,()=>F("newTask.field.engine")),D(tf,m1),D(tf,xJ),Z(tf,"flexDirection","row"),Z(tf,"gap",2),K(tf,b(Zf,{get each(){return X()},children:(m)=>{let i=()=>Q()===m;return(()=>{var l=W("text");return Z(l,"onMouseUp",()=>H(m)),K(l,()=>i()?"\u25B8 ":" ",null),K(l,m,null),u((w)=>{var m0=i()?Y.primary:Y.textMuted,v0=i()?_1.BOLD:void 0;return m0!==w.e&&(w.e=Z(l,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(l,"attributes",v0,w.t)),w},{e:void 0,t:void 0}),l})()}}),m1),Z(m1,"flexGrow",1),K(xJ,()=>F("newTask.hint.engineCycle")),K(N0,b(X0,{get when(){return z()==="existing"},get children(){return[(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.repo")),Z(l,"onInput",(w)=>{y0(!1),U(Z1(w))}),Z(l,"onSubmit",()=>{if(!j().trim())return;yf()}),u((w)=>{var m0=Bf("repo"),v0=Of("repo"),O0=j(),c0=f.defaultRepo,qf=B()==="repo";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"placeholder",c0,w.o)),qf!==w.i&&(w.i=Z(l,"focused",qf,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),b(X0,{get when(){return I0(()=>B()==="repo"&&x().length>0)()&&!H0()},get children(){var m=W("box");return Z(m,"gap",0),Z(m,"paddingLeft",2),K(m,b(X0,{get when(){return V0().start>0},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:V0().start})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),K(m,b(Zf,{get each(){return V0().items},children:(i,l)=>{let w=()=>V0().start+l(),m0=()=>w()===c(),v0=()=>$()==="saved"&&i===f.defaultRepo,O0=()=>$()==="saved"&&j().trim()===i,c0=()=>$()==="browse"?"/":"",qf=()=>v0()?` ${F("newTask.hint.currentDir")}`:"";return(()=>{var Df=W("text");return Z(Df,"wrapMode","none"),Z(Df,"onMouseUp",()=>k0(w())),K(Df,()=>m0()?"\u25B8 ":" ",null),K(Df,i,null),K(Df,c0,null),K(Df,qf,null),u((Q1)=>{var s1=m0()?Y.primary:O0()?Y.accent:Y.textMuted,ZY=m0()?_1.BOLD:void 0;return s1!==Q1.e&&(Q1.e=Z(Df,"fg",s1,Q1.e)),ZY!==Q1.t&&(Q1.t=Z(Df,"attributes",ZY,Q1.t)),Q1},{e:void 0,t:void 0}),Df})()}}),null),K(m,b(X0,{get when(){return V0().start+V0().items.length<V0().total},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:V0().total-V0().start-V0().items.length})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),m}}),(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.fromBranch")),Z(l,"placeholder",LJ),Z(l,"onInput",(w)=>{R(!0),O(Z1(w))}),Z(l,"onSubmit",()=>{O(U4(L(),T0(),r0())),R(!0),E0()}),u((w)=>{var m0=Bf("baseRef"),v0=Of("baseRef"),O0=L(),c0=B()==="baseRef";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(X0,{get when(){return I0(()=>B()==="baseRef"&&T0().length===0)()&&P0()==null},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"gap",0),Z(m,"paddingLeft",2),Z(m,"paddingBottom",1),Z(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>w0().length===0);return()=>l()?F("newTask.hint.noBranchesFound"):F("newTask.hint.noMatchBranch")})()),u((l)=>Z(i,"fg",Y.textMuted,l)),m}}),b(X0,{get when(){return I0(()=>B()==="baseRef")()&&T0().length>0},get children(){var m=W("box");return Z(m,"gap",0),Z(m,"paddingLeft",2),Z(m,"paddingBottom",1),K(m,b(X0,{get when(){return M0().start>0},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:M0().start})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),K(m,b(Zf,{get each(){return M0().items},children:(i,l)=>{let w=()=>M0().start+l(),m0=()=>w()===r0(),v0=()=>L().trim()===i;return(()=>{var O0=W("text");return Z(O0,"wrapMode","none"),Z(O0,"onMouseUp",()=>{O(i),R(!0),P(w()),V("confirm")}),K(O0,()=>m0()?"\u25B8 ":" ",null),K(O0,i,null),u((c0)=>{var qf=m0()?Y.primary:v0()?Y.accent:Y.textMuted,Df=m0()?_1.BOLD:void 0;return qf!==c0.e&&(c0.e=Z(O0,"fg",qf,c0.e)),Df!==c0.t&&(c0.t=Z(O0,"attributes",Df,c0.t)),c0},{e:void 0,t:void 0}),O0})()}}),null),K(m,b(X0,{get when(){return M0().start+M0().items.length<M0().total},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:M0().total-M0().start-M0().items.length})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),m}})]}}),null),K(N0,b(X0,{get when(){return z()==="clone"},get children(){return[(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.gitUrl")),Z(l,"placeholder","https://github.com/user/repo.git"),Z(l,"onInput",(w)=>a(Z1(w))),Z(l,"onSubmit",()=>{if(!S().trim())return;V("cloneParent")}),u((w)=>{var m0=Bf("cloneUrl"),v0=Of("cloneUrl"),O0=S(),c0=B()==="cloneUrl";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.parentDir")),Z(l,"placeholder","~/"),Z(l,"onInput",(w)=>{q0(!1),g(Z1(w))}),Z(l,"onSubmit",()=>wf()),u((w)=>{var m0=Bf("cloneParent"),v0=Of("cloneParent"),O0=N(),c0=B()==="cloneParent";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(X0,{get when(){return B()==="cloneParent"},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,()=>F("newTask.hint.remembered")),u((l)=>Z(i,"fg",Y.textMuted,l)),m}}),b(X0,{get when(){return I0(()=>B()==="cloneParent"&&a0().length>0)()&&!n()},get children(){var m=W("box");return Z(m,"gap",0),Z(m,"paddingLeft",2),K(m,b(X0,{get when(){return _0().start>0},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:_0().start})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),K(m,b(Zf,{get each(){return _0().items},children:(i,l)=>{let w=()=>_0().start+l(),m0=()=>w()===p0();return(()=>{var v0=W("text"),O0=x0("/");return D(v0,O0),Z(v0,"wrapMode","none"),Z(v0,"onMouseUp",()=>v(w())),K(v0,()=>m0()?"\u25B8 ":" ",O0),K(v0,i,O0),u((c0)=>{var qf=m0()?Y.primary:Y.textMuted,Df=m0()?_1.BOLD:void 0;return qf!==c0.e&&(c0.e=Z(v0,"fg",qf,c0.e)),Df!==c0.t&&(c0.t=Z(v0,"attributes",Df,c0.t)),c0},{e:void 0,t:void 0}),v0})()}}),null),K(m,b(X0,{get when(){return _0().start+_0().items.length<_0().total},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:_0().total-_0().start-_0().items.length})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),m}}),(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.folderName")),Z(l,"onInput",(w)=>{z0(!0),y(Z1(w))}),Z(l,"onSubmit",()=>V("cloneBaseRef")),u((w)=>{var m0=Bf("cloneFolder"),v0=Of("cloneFolder"),O0=C(),c0=F("newTask.placeholder.folderName"),qf=B()==="cloneFolder";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"placeholder",c0,w.o)),qf!==w.i&&(w.i=Z(l,"focused",qf,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.baseBranch")),Z(l,"placeholder",LJ),Z(l,"onInput",(w)=>Y0(Z1(w))),Z(l,"onSubmit",()=>void W0()),u((w)=>{var m0=Bf("cloneBaseRef"),v0=Of("cloneBaseRef"),O0=t(),c0=B()==="cloneBaseRef";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(X0,{get when(){return T()},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"gap",0),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,()=>p()||F("newTask.clone.progressFallback")),u((l)=>Z(i,"fg",Y.textMuted,l)),m}})]}}),null),K(N0,b(X0,{get when(){return z()==="adopt"},get children(){return[(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.adoptFilter")),Z(l,"onInput",(w)=>o0(Z1(w))),Z(l,"onSubmit",()=>A()),u((w)=>{var m0=Bf("adoptFilter"),v0=Of("adoptFilter"),O0=b0(),c0=F("newTask.placeholder.adoptFilter"),qf=B()==="adoptFilter";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"placeholder",c0,w.o)),qf!==w.i&&(w.i=Z(l,"focused",qf,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),(()=>{var m=W("box"),i=W("text");return D(m,i),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,()=>F("newTask.adopt.repoLine",{path:V1(j().trim())||F("newTask.adopt.repoNone")})),u((l)=>Z(i,"fg",Y.textMuted,l)),m})(),b(X0,{get when(){return gf.loading},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,()=>F("newTask.hint.scanningWorktrees")),u((l)=>Z(i,"fg",Y.textMuted,l)),m}}),b(X0,{get when(){return I0(()=>!gf.loading)()&&o().length===0},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>(gf()??[]).length===0);return()=>l()?F("newTask.adopt.noUnlinked"):F("newTask.adopt.noMatch")})()),u((l)=>Z(i,"fg",Y.textMuted,l)),m}}),b(X0,{get when(){return o().length>0},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"gap",0),Z(m,"paddingLeft",2),K(m,b(X0,{get when(){return e().start>0},get children(){var l=W("text");return Z(l,"wrapMode","none"),K(l,()=>F("newTask.picker.moreAbove",{count:e().start})),u((w)=>Z(l,"fg",Y.textMuted,w)),l}}),i),K(m,b(Zf,{get each(){return B0()},children:(l,w)=>{let m0=()=>e().start+w(),v0=()=>m0()===l0(),O0=()=>t0().has(l.path),c0=()=>[l.dirty?"dirty":"",l.kobeManaged?"":"external"].filter(Boolean).join(",");return(()=>{var qf=W("text");return Z(qf,"wrapMode","none"),Z(qf,"onMouseUp",()=>{$0(m0()),C0(l.path)}),K(qf,()=>v0()?"\u25B8 ":" ",null),K(qf,()=>O0()?"[x] ":"[ ] ",null),K(qf,()=>l.branch,null),K(qf,(()=>{var Df=I0(()=>!!c0());return()=>Df()?` (${c0()})`:""})(),null),u((Df)=>{var Q1=v0()?Y.primary:O0()?Y.accent:Y.textMuted,s1=v0()?_1.BOLD:void 0;return Q1!==Df.e&&(Df.e=Z(qf,"fg",Q1,Df.e)),s1!==Df.t&&(Df.t=Z(qf,"attributes",s1,Df.t)),Df},{e:void 0,t:void 0}),qf})()}}),i),K(m,b(X0,{get when(){return e().start+e().items.length<e().total},get children(){var l=W("text");return Z(l,"wrapMode","none"),K(l,()=>F("newTask.picker.moreBelow",{count:e().total-e().start-e().items.length})),u((w)=>Z(l,"fg",Y.textMuted,w)),l}}),i),Z(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>t0().size>0);return()=>l()?F("newTask.adopt.hintSelected",{count:t0().size}):F("newTask.adopt.hintDefault")})()),u((l)=>Z(i,"fg",Y.textMuted,l)),m}})]}}),null),K(N0,b(X0,{get when(){return P0()},get children(){var m=W("text"),i=x0("\u203B ");return D(m,i),Z(m,"wrapMode","word"),K(m,P0,null),u((l)=>Z(m,"fg",Y.error,l)),m}}),null),D(F1,wJ),D(F1,XY),Z(F1,"flexDirection","row"),Z(F1,"justifyContent","space-between"),Z(F1,"alignItems","center"),Z(F1,"paddingTop",1),Z(F1,"paddingBottom",1),K(wJ,()=>F("newTask.hint.legend")),Z(XY,"onMouseUp",()=>R0()),K(XY,(()=>{var m=I0(()=>!!T());return()=>m()?F("newTask.button.cloning"):I0(()=>B()==="confirm")()?F("newTask.button.createFocused"):F("newTask.button.create")})()),u((m)=>{var i=_1.BOLD,l=Y.text,w=Bf("engine"),m0=Of("engine"),v0=Y.textMuted,O0=Y.textMuted,c0=B()==="confirm"?Y.primary:Y.text,qf=B()==="confirm"?_1.BOLD:void 0;return i!==m.e&&(m.e=Z(S0,"attributes",i,m.e)),l!==m.t&&(m.t=Z(S0,"fg",l,m.t)),w!==m.a&&(m.a=Z(K1,"fg",w,m.a)),m0!==m.o&&(m.o=Z(K1,"attributes",m0,m.o)),v0!==m.i&&(m.i=Z(xJ,"fg",v0,m.i)),O0!==m.n&&(m.n=Z(wJ,"fg",O0,m.n)),c0!==m.s&&(m.s=Z(XY,"fg",c0,m.s)),qf!==m.h&&(m.h=Z(XY,"attributes",qf,m.h)),m},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),d})()}var L4=k(()=>{h();h();h();h();h();h();h();h();X1();U1();Wf();xf();MQ();S1();OQ();v1();Q4();H8()});function _N(f,J,Y,z){return new Promise((G)=>{f.replace(()=>b(D4,{defaultRepo:J,savedRepos:Y,get defaultCloneParent(){return z?.defaultCloneParent},get defaultVendor(){return z?.defaultVendor},get availableVendors(){return z?.availableVendors},get discoverAdoptable(){return z?.discoverAdoptable},onSubmit:(X)=>G(X),onCancel:()=>G(void 0)}),()=>G(void 0)),f.setSize("medium")})}var gQ;var bG=k(()=>{h();L4();H8();gQ={show:_N}});function M4(f,J){return[{key:"tab",cmd:()=>J.cycleField(1)},{key:"shift+tab",cmd:()=>J.cycleField(-1)},{key:"ctrl+e",cmd:()=>J.stepEngine(1)},...f==="engine"?[{key:"left",cmd:()=>J.stepEngine(-1)},{key:"right",cmd:()=>J.stepEngine(1)},{key:"return",cmd:()=>J.commit()}]:[]]}import{TextAttributes as F4}from"@opentui/core";function oN(f){let J=vf(),{theme:Y}=i0(),[z,G]=r("prompt"),[X,q]=r(""),[Q,H]=r(f.defaultVendor),[B,V]=r(f.defaultBaseRef);function j(M){let R=RQ.indexOf(z());G(RQ[(R+M+RQ.length)%RQ.length]??"prompt")}function U(M){let R=f.engines;if(R.length===0)return;if(M>0){H((a)=>qY(R,a));return}let S=Math.max(0,R.indexOf(Q()));H(R[(S-1+R.length)%R.length]??Q())}function L(){let M=X().trim();if(!M){G("prompt");return}f.onSubmit({prompt:M,vendor:Q(),baseRef:B().trim()||f.defaultBaseRef}),J.clear()}Uf(()=>({enabled:!0,bindings:M4(z(),{cycleField:j,stepEngine:U,commit:L})}));let O=(M)=>z()===M?Y.accent:Y.textMuted;return(()=>{var M=W("box"),R=W("box"),S=W("text"),a=W("text"),N=W("box"),g=W("text"),C=W("input"),y=W("box"),_=W("text"),z0=W("box"),t=W("text"),Y0=W("input"),T=W("box"),Q0=W("text");return D(M,R),D(M,N),D(M,y),D(M,z0),D(M,T),Z(M,"paddingLeft",2),Z(M,"paddingRight",2),Z(M,"gap",1),D(R,S),D(R,a),Z(R,"flexDirection","row"),Z(R,"justifyContent","space-between"),K(S,()=>F("quickTask.title",{repoLabel:f.repoLabel})),Z(a,"onMouseUp",()=>f.onCancel()),K(a,()=>F("quickTask.esc")),D(N,g),D(N,C),Z(N,"gap",0),K(g,()=>F("quickTask.promptLabel")),Z(C,"onInput",(p)=>q(Z1(p))),Z(C,"onSubmit",()=>L()),D(y,_),Z(y,"flexDirection","row"),Z(y,"gap",2),K(_,()=>F("quickTask.engineLabel")),K(y,b(Zf,{get each(){return f.engines},children:(p)=>(()=>{var D0=W("text");return Z(D0,"onMouseUp",()=>{H(p),G("engine")}),K(D0,()=>f.engineLabel(p)),u((g0)=>{var $=Q()===p?Y.primary:Y.textMuted,E=Q()===p?F4.BOLD:void 0;return $!==g0.e&&(g0.e=Z(D0,"fg",$,g0.e)),E!==g0.t&&(g0.t=Z(D0,"attributes",E,g0.t)),g0},{e:void 0,t:void 0}),D0})()}),null),D(z0,t),D(z0,Y0),Z(z0,"gap",0),K(t,()=>F("quickTask.branchLabel")),Z(Y0,"onInput",(p)=>V(Z1(p))),Z(Y0,"onSubmit",()=>L()),D(T,Q0),Z(T,"paddingBottom",1),K(Q0,()=>F("quickTask.legend")),u((p)=>{var D0=F4.BOLD,g0=Y.text,$=Y.textMuted,E=O("prompt"),f0=X(),I=F("quickTask.promptPlaceholder"),G0=z()==="prompt",x=O("engine"),c=O("branch"),Z0=B(),V0=f.defaultBaseRef,H0=z()==="branch",y0=Y.textMuted;return D0!==p.e&&(p.e=Z(S,"attributes",D0,p.e)),g0!==p.t&&(p.t=Z(S,"fg",g0,p.t)),$!==p.a&&(p.a=Z(a,"fg",$,p.a)),E!==p.o&&(p.o=Z(g,"fg",E,p.o)),f0!==p.i&&(p.i=Z(C,"value",f0,p.i)),I!==p.n&&(p.n=Z(C,"placeholder",I,p.n)),G0!==p.s&&(p.s=Z(C,"focused",G0,p.s)),x!==p.h&&(p.h=Z(_,"fg",x,p.h)),c!==p.r&&(p.r=Z(t,"fg",c,p.r)),Z0!==p.d&&(p.d=Z(Y0,"value",Z0,p.d)),V0!==p.l&&(p.l=Z(Y0,"placeholder",V0,p.l)),H0!==p.u&&(p.u=Z(Y0,"focused",H0,p.u)),y0!==p.c&&(p.c=Z(Q0,"fg",y0,p.c)),p},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0}),M})()}function sN(f,J){return new Promise((Y)=>{f.replace(()=>b(oN,J6(J,{onSubmit:(z)=>Y(z),onCancel:()=>Y(void 0)})),()=>Y(void 0)),f.setSize("medium")})}var RQ,O4;var A4=k(()=>{h();h();h();h();h();h();h();Wf();U1();xf();X1();S1();v1();bG();RQ=["prompt","engine","branch"];O4={show:sN}});async function g4(f={}){let J=f.logTag??"orch-connect",Y=f.connect??p1,z=null;try{let G=await Y();if(!G)return dJ(J,"no daemon running \u2014 caller degrades"),null;return z=new W1(G,{...f.orchestratorOptions,channels:f.channels}),await z.init(),z}catch(G){return HY(J,G),z?.dispose(),null}}var R4=k(()=>{sY();L1();PY()});function C4(f){let[J,Y]=r(f.initial??"sidebar"),[z,G]=r(0),X=z1();function q(j){if(G((L)=>L+1),J()===j)return;let U=X?.currentFocusedRenderable;if(U&&!U.isDestroyed)try{U.blur()}catch{}Y(j)}function Q(j){let L=(CQ.indexOf(J())+j+CQ.length)%CQ.length;q(CQ[L])}let H=new Map;function B(j){let U=H.get(j);if(!U)U=()=>J()===j,H.set(j,U);return U}let V={focused:J,is:B,setFocused:q,cycle:Q,refocusTick:z};return b(tN.Provider,{value:V,get children(){return f.children}})}var CQ,tN;var k4=k(()=>{h();h();Wf();CQ=["sidebar","workspace","files","terminal"],tN=CJ(null)});function N4(){for(let f of vY){let J=eN.get(f.id);if(!J)continue;let Y=f;Y.keys=[...J.keys],Y.hint=J.hint?{...J.hint}:void 0}}function y4(){fy((f)=>f+1)}function j8(f){return Jy.get(f)}function Yy(f){return j8(f)?.keys??[]}function mY(f){let J=[];for(let Y in f){let z=f[Y];if(!z)continue;let G=Yy(Y);if(G.length===0){console.warn(`[kobe/keybindings] bindByIds: id="${Y}" has no chords (or doesn't exist in KobeKeymap)`);continue}G.forEach((X,q)=>J.push({key:X,cmd:z,slot:q}))}return J}var vY,eN,B8,fy,Jy;var SG=k(()=>{Wf();vY=[{id:"help.open",scope:"global",keys:["f1"],category:"Global",description:"Show keybindings help",hint:{keys:"F1",label:"help",pin:"right"}},{id:"task.new",scope:"sidebar",keys:["n"],category:"Sidebar",description:"New task",hint:{keys:"n",label:"new"}},{id:"task.openEditor",scope:"global",keys:["ctrl+o"],category:"Global",description:"Open active task worktree in editor"},{id:"settings.open",scope:"global",keys:["ctrl+,"],category:"Global",description:"Open settings"},{id:"settings.open.sidebar",scope:"sidebar",keys:["s"],category:"Sidebar",description:"Open settings",hint:{keys:"s",label:"settings",status:!1}},{id:"app.quit",scope:"sidebar",keys:["q"],category:"Sidebar",description:"Quit (with confirm)",hint:{keys:"q",label:"quit",status:!1}},{id:"focus.sidebar",scope:"workspace",keys:["ctrl+q"],category:"Workspace",description:"Back to sidebar (tasks)",hint:{keys:"ctrl+q",label:"tasks"}},{id:"focus.numeric",scope:"global",keys:["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],category:"Navigation",description:"Jump to pane (h=sidebar, j=workspace, k=files, l=terminal)",hint:{keys:"ctrl+hjkl",label:"focus",pin:"right",status:!1}},{id:"chat.interrupt",scope:"workspace",keys:[],category:"Workspace",description:"Interrupt current turn (esc while streaming)"},{id:"sidebar.nav",scope:"sidebar",keys:["j","k","down","up"],category:"Sidebar",description:"Move cursor up/down",hint:{keys:"j/k",label:"nav"}},{id:"sidebar.select",scope:"sidebar",keys:["return"],category:"Sidebar",description:"Open the selected task",hint:{keys:"enter",label:"select"}},{id:"sidebar.goto",scope:"sidebar",keys:["g"],category:"Sidebar",description:"Top / bottom of list (gg or shift-G)"},{id:"sidebar.rename",scope:"sidebar",keys:["r"],category:"Sidebar",description:"Rename task",hint:{keys:"r",label:"rename",status:!1}},{id:"sidebar.archive",scope:"sidebar",keys:["a"],category:"Sidebar",description:"Toggle archive",hint:{keys:"a",label:"archive",status:!1}},{id:"sidebar.localMerge",scope:"sidebar",keys:["m"],category:"Sidebar",description:"Local merge task into parent repo (Shift+M)",hint:{keys:"M",label:"merge",status:!1}},{id:"sidebar.pin",scope:"sidebar",keys:["p"],category:"Sidebar",description:"Pin / unpin task at top (Shift+P)",hint:{keys:"P",label:"pin",status:!1}},{id:"sidebar.view",scope:"sidebar",keys:["[","]"],category:"Sidebar",description:"Switch view (Working session \u2194 Archives)",hint:{keys:"[/]",label:"view",status:!1}},{id:"sidebar.sort",scope:"sidebar",keys:["t"],category:"Sidebar",description:"Switch task sort (default \u2194 recent)",hint:{keys:"t",label:"sort",status:!1}},{id:"sidebar.projectFilter",scope:"sidebar",keys:["ctrl+p"],category:"Sidebar",description:"Cycle task project filter",hint:{keys:"ctrl+p",label:"project",status:!1}},{id:"sidebar.delete",scope:"sidebar",keys:["d"],category:"Sidebar",description:"Delete task (with confirm)",hint:{keys:"d",label:"delete",status:!1}},{id:"sidebar.search.enter",scope:"sidebar",keys:["/"],category:"Sidebar",description:"Search tasks (fuzzy filter)",hint:{keys:"/",label:"search"}},{id:"sidebar.search.nav",scope:"sidebar",keys:["down","up"],category:"Sidebar",description:"Move highlight in search results"},{id:"sidebar.search.submit",scope:"sidebar",keys:["return"],category:"Sidebar",description:"Select search match and exit search"},{id:"sidebar.search.cancel",scope:"sidebar",keys:["escape"],category:"Sidebar",description:"Cancel search (restore prior selection)"},{id:"tasks.openWorktree",scope:"sidebar",keys:["o"],category:"Tasks pane",description:"Open selected task's worktree in your editor",hint:{keys:"o",label:"open wt",status:!1}},{id:"tasks.renameBranch",scope:"sidebar",keys:["b"],category:"Tasks pane",description:"Rename the selected task's git branch",hint:{keys:"b",label:"branch",status:!1}},{id:"tasks.cycleEngine",scope:"sidebar",keys:["v"],category:"Tasks pane",description:"Cycle engine vendor (claude \u2194 codex \u2194 \u2026) \u2014 applies on reopen",hint:{keys:"v",label:"engine",status:!1}},{id:"tasks.update",scope:"sidebar",keys:["u"],category:"Tasks pane",description:"Open the update page (when a new version is available)",hint:{keys:"u",label:"update",status:!1}},{id:"tasks.focusEngine",scope:"sidebar",keys:["right"],category:"Tasks pane",description:"Focus the engine pane of the current window",hint:{keys:"\u2192",label:"engine",status:!1}},{id:"tasks.toggleKeys",scope:"sidebar",keys:["?"],category:"Tasks pane",description:"Collapse / expand the keys legend",hint:{keys:"?",label:"fold keys",status:!1}},{id:"tmux.quickTask",scope:"global",keys:[],category:"Workspace (tmux)",description:"Quick new task (tmux prefix, then f)",hint:{keys:"prefix f",label:"new task",status:!1}},{id:"tmux.engineTab",scope:"global",keys:[],category:"Workspace (tmux)",description:"Open the engine in a new tab (tmux prefix, then t)",hint:{keys:"prefix t",label:"engine tab",status:!1}},{id:"tmux.layout.workspaceSplit",scope:"global",keys:[],category:"Workspace (tmux)",description:"Add a temporary workspace split (tmux prefix, then s)",hint:{keys:"prefix s",label:"split",status:!1}},{id:"tmux.layout.workspaceClose",scope:"global",keys:[],category:"Workspace (tmux)",description:"Close the focused temporary workspace split (tmux prefix, then x)",hint:{keys:"prefix x",label:"close split",status:!1}},{id:"tmux.layout.workspaceReset",scope:"global",keys:[],category:"Workspace (tmux)",description:"Close all temporary workspace splits (tmux prefix, then r)",hint:{keys:"prefix r",label:"reset splits",status:!1}},{id:"tmux.layout.tasksToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Hide / restore the Tasks pane (tmux prefix, then a)",hint:{keys:"prefix a",label:"tasks pane",status:!1}},{id:"tmux.layout.opsToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Toggle the file/Ops pane (tmux prefix, then o)",hint:{keys:"prefix o",label:"file pane",status:!1}},{id:"tmux.layout.terminalToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Hide / restore the terminal pane (tmux prefix, then z)",hint:{keys:"prefix z",label:"terminal",status:!1}},{id:"tmux.layout.zenToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Zen mode \u2014 collapse to the engine pane (tmux prefix, then space)",hint:{keys:"prefix space",label:"zen",status:!1}},{id:"chat.send",scope:"workspace",keys:[],category:"Workspace",description:"Send message (composer)",hint:{keys:"enter",label:"send"}},{id:"chat.newline",scope:"workspace",keys:[],category:"Workspace",description:"Newline in composer",hint:{keys:"shift+enter",label:"newline"}},{id:"chat.cycle-mode",scope:"workspace",keys:[],category:"Workspace",description:"Cycle permission mode (composer)",hint:{keys:"shift+tab",label:"mode"}},{id:"chat.steer",scope:"workspace",keys:[],category:"Workspace",description:"Steer (interrupt + send) \u2014 mid-stream only",hint:{keys:"ctrl+enter",label:"steer",status:!1}},{id:"chat.tab.new",scope:"workspace",keys:["ctrl+t"],category:"Workspace",description:"New chat tab",hint:{keys:"ctrl+t",label:"new tab"}},{id:"chat.fork.new",scope:"workspace",keys:["ctrl+f"],category:"Workspace",description:"Quick-fork: create child task seeded with current repo/branch/model",hint:{keys:"ctrl+f",label:"fork"}},{id:"chat.session.resume",scope:"workspace",keys:["ctrl+y"],category:"Workspace",description:"Resume a prior session in this task's worktree",hint:{keys:"ctrl+y",label:"resume",status:!1}},{id:"chat.tab.close",scope:"workspace",keys:["ctrl+w"],category:"Workspace",description:"Close chat tab",hint:{keys:"ctrl+w",label:"close tab",status:!1}},{id:"chat.tab.rename",scope:"workspace",keys:["f2"],category:"Workspace",description:"Rename active chat tab",hint:{keys:"f2",label:"rename tab",status:!1}},{id:"chat.tab.cycle-next",scope:"workspace",keys:["ctrl+]"],category:"Workspace",description:"Next chat tab",hint:{keys:"ctrl+]",label:"next tab",status:!1}},{id:"chat.tab.cycle-prev",scope:"workspace",keys:["ctrl+["],category:"Workspace",description:"Previous chat tab",hint:{keys:"ctrl+[",label:"prev tab",status:!1}},{id:"chat.question.nav",scope:"workspace",keys:["j","k","down","up"],category:"Workspace",description:"Move highlight in question picker",hint:{keys:"j/k",label:"pick",status:!1}},{id:"chat.question.toggle",scope:"workspace",keys:["space"],category:"Workspace",description:"Toggle highlighted option in question picker",hint:{keys:"space",label:"toggle",status:!1}},{id:"chat.question.submit",scope:"workspace",keys:["return"],category:"Workspace",description:"Advance / submit question picker",hint:{keys:"enter",label:"submit",status:!1}},{id:"chat.question.pick-number",scope:"workspace",keys:["1","2","3","4","5","6","7","8","9"],category:"Workspace",description:"Pick option by number in question picker",hint:{keys:"1-9",label:"pick",status:!1}},{id:"files.nav",scope:"files",keys:["j","k","down","up"],category:"Files",description:"Move cursor up/down",hint:{keys:"j/k",label:"nav"}},{id:"files.hierarchy",scope:"files",keys:["h","l","left","right"],category:"Files",description:"Collapse / expand tree level",hint:{keys:"h/l",label:"level"}},{id:"files.open",scope:"files",keys:["return"],category:"Files",description:"Open file in nvim (diff vs HEAD when changed)",hint:{keys:"enter",label:"open"}},{id:"files.tab",scope:"files",keys:["[","]"],category:"Files",description:"Switch tab (cycle All / Changes)",hint:{keys:"[/]",label:"tab",status:!1}},{id:"files.refresh",scope:"files",keys:["r"],category:"Files",description:"Refresh",hint:{keys:"r",label:"refresh",status:!1}},{id:"files.openExternal",scope:"files",keys:["o"],category:"Files",description:"Open file in system default app (audio / video / pdf preview)",hint:{keys:"o",label:"open external",status:!1}},{id:"files.mention",scope:"files",keys:["a"],category:"Files",description:"Inject @<path> mention into the engine pane",hint:{keys:"a",label:"@mention"}},{id:"files.createPR",scope:"files",keys:["p"],category:"Files",description:"Create PR from the current task",hint:{keys:"p",label:"create PR"}},{id:"terminal.scroll-up",scope:"terminal",keys:["ctrl+pageup"],category:"Terminal",description:"Scroll scrollback up",hint:{keys:"ctrl+pgup",label:"scroll",status:!1}},{id:"terminal.scroll-down",scope:"terminal",keys:["ctrl+pagedown"],category:"Terminal",description:"Scroll scrollback down"},{id:"terminal.reset",scope:"terminal",keys:["f5"],category:"Terminal",description:"Reset terminal \u2014 kill the current shell and respawn",hint:{keys:"f5",label:"reset"}},{id:"dialog.cancel",scope:"global",keys:[],category:"Dialog",description:"Close the top dialog (esc)"},{id:"dialog.newtask.tab.cycle",scope:"global",keys:[],category:"Dialog",description:"Switch New Task tab (Existing / New Repo)",hint:{keys:"ctrl+[/]",label:"tab"}}],eN=new Map(vY.map((f)=>[f.id,{keys:[...f.keys],hint:f.hint?{...f.hint}:void 0}]));[B8,fy]=r(0);Jy=new Map(vY.map((f)=>[f.id,f]))});function kQ(){if(cY)return cY;let f=Lq();if(!f.exists)return cY={path:f.path,exists:!1,applied:[],warnings:[]},cY;let J=[...f.warnings],Y=Fq(f.doc,process.platform,{chordOptsFor:vB});J.push(...Y.warnings);let z=Y.entries.filter((Q)=>Q.id.startsWith("tmux.")),G=Y.entries.filter((Q)=>!Q.id.startsWith("tmux.")),X=u7(vY,G);J.push(...X.warnings);let q=[...X.applied];if(z.length>0){let Q=PB(z);J.push(...Q.warnings);for(let H of Q.overridden){if(H===SJ){q.push({id:H,keys:Q.focus.map((j)=>j?.chord??"").filter((j)=>j!==""),defaultKeys:kY});continue}let B=Q.binds[H];q.push({id:H,keys:B?[B.chord]:[],defaultKeys:[Oz[H]]});let V=vY.find((j)=>j.id===H);if(V?.hint)V.hint.keys=B?`${XG(H)?"prefix ":""}${B.chord}`:"\u2014"}}for(let Q of J)console.warn(`[kobe/keybindings] ${Q}`);return cY={path:f.path,exists:!0,applied:q,warnings:J},cY}function b4(){return cY??kQ()}function S4(){cY=null,T7(),h7(),N4();let f=kQ();return y4(),f}var cY=null;var W8=k(()=>{wB();gq();Oq();SG()});var zy=250,IG,I4;var cX=k(()=>{CG();pY();_j();({use:IG,provider:I4}=DQ({name:"KV",init:()=>{let[f,J]=uJ(nf()),Y=new Set,z=null;function G(Q){if(Y.size===0)return!0;try{let H={};for(let B of Y)H[B]=f[B];return rY(H),Y.clear(),!0}catch(H){return console.error(`[kobe] kv ${Q} failed:`,H),!1}}function X(){if(z)clearTimeout(z);z=setTimeout(()=>{z=null,G("write")},zy)}let q={get ready(){return!0},get store(){return f},signal(Q,H){if(f[Q]===void 0)J(Q,H);return[()=>q.get(Q),(B)=>q.set(Q,B)]},get(Q,H){return f[Q]??H},set(Q,H){J(Q,H),Y.add(Q),X()},flush(){if(z)clearTimeout(z),z=null;return G("flush")},clear(){for(let Q of Object.keys(f))J(Q,void 0);if(z)clearTimeout(z),z=null;Y.clear();try{A9({})}catch(Q){console.error("[kobe] kv clear write failed:",Q)}}};return q}}))});var NQ="../pulse-n3cq1btw.wav";var T4=()=>{};import{existsSync as Xy,mkdirSync as Zy}from"fs";import{tmpdir as qy}from"os";import{basename as Qy,isAbsolute as Hy,join as V8,resolve as By}from"path";function Wy(f,J,Y){if(f==="ffplay")return[f,"-autoexit","-nodisp","-af",`volume=${Y}`,J];if(f==="mpv")return[f,"--no-video","--audio-display=no","--volume",String(Math.round(Y*100)),J];if(f==="mpg123"||f==="mpg321")return[f,"-g",String(Math.round(Y*100)),J];if(f==="mplayer")return[f,"-vo","null","-volume",String(Math.round(Y*100)),J];if(f==="afplay"||f==="omxplayer"||f==="aplay"||f==="cmdmp3")return[f,J];if(f==="play")return[f,"-v",String(Y),J];if(f==="cvlc")return[f,`--gain=${Y}`,"--play-and-exit",J];return[f,"-c",`(New-Object Media.SoundPlayer '${J.replace(/'/g,"''")}').PlaySync()`]}function Vy(){if(yQ!==void 0)return yQ;let J=(process.env.PATH??"").split(":").filter(Boolean);return yQ=jy.find((Y)=>J.some((z)=>Xy(V8(z,Y))))??null,yQ}async function Ky(){return x4??=(async()=>{Zy(E4,{recursive:!0});let f=V8(E4,Qy(u4)),J=Bun.file(f);if(await J.exists())return f;return await Bun.write(J,Bun.file(u4)),f})(),x4}function w4(f=0.4){let J=Vy();if(!J)return;Ky().then((Y)=>{try{Bun.spawn(Wy(J,Y,f),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var u4,E4,jy,yQ,x4;var h4=k(()=>{T4();u4=Hy(NQ)?NQ:By(import.meta.dir,NQ),E4=V8(qy(),"kobe-sfx"),jy=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function P4(f,J){return`${f}:${J}`}function m4(f){let J=IG(),[Y,z]=r([]),[G,X]=r(new Map),q=0;function Q(j){if(X((U)=>{let L=new Map(U),O=P4(j.taskId,j.tabId),M=U.get(O);if(M==="needs_input"||M==="error")return U;return L.set(O,j.kind),L}),J.get("notifications.sound.enabled",!0)!==!1){try{process.stdout.write("\x07")}catch{}w4()}if(J.get("notifications.toast.enabled",!0)!==!1){let U=++q,L={id:U,kind:j.kind,taskId:j.taskId,tabId:j.tabId,title:j.title};z((O)=>[...O,L]),setTimeout(()=>H(U),Uy)}}function H(j){z((U)=>U.filter((L)=>L.id!==j))}function B(j,U){X((L)=>{let O=P4(j,U);if(!L.has(O))return L;let M=new Map(L);return M.delete(O),M})}let V={toasts:Y,unread:G,notify:Q,dismiss:H,markRead:B};return b(v4.Provider,{value:V,get children(){return f.children}})}function bQ(){let f=u1(v4);if(!f)throw Error("useNotifications must be used within a NotificationsProvider");return f}var Uy=4500,v4;var SQ=k(()=>{h();Wf();h4();cX();v4=CJ()});function K8(f,J){if(typeof J.theme==="string"&&J.theme.length>0&&J.theme!==f.selectedTheme()){if(!f.hasTheme(J.theme))f.reloadUserThemes();if(f.hasTheme(J.theme))f.setTheme(J.theme)}if(typeof J.transparentBackground==="boolean"&&J.transparentBackground!==f.transparentBackground())f.setTransparentBackground(J.transparentBackground);if(J.focusAccent===null||typeof J.focusAccent==="string"){let Y=Ly(J.focusAccent);if(Y&&Y!==f.focusAccent())f.setFocusAccent(Y)}}function Ly(f){if(f===null)return"primary";return Dy.includes(f)?f:null}var Dy;var c4=k(()=>{Dy=["primary","success","info"]});import{readFileSync as My}from"fs";function n4(f){try{let J=JSON.parse(My(c1(),"utf8")),Y=typeof J.activeTheme==="string"&&EX(J.activeTheme)?J.activeTheme:f,z=J.transparentBackground===!0,G=typeof J.focusAccent==="string"&&yz.includes(J.focusAccent)?J.focusAccent:null,X=xX(J[IQ])?J[IQ]:NG;return{theme:Y,transparent:z,focusAccent:G,locale:X}}catch{return{theme:f,transparent:!1,focusAccent:null,locale:NG}}}var IQ="locale";var U8=k(()=>{lf();xf();yG()});function Oy(f){if(f)HZ(f);kQ();for(let{name:J,theme:Y}of KX())sj(J,Y)}function Ay(f){let J={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return f?{...J,onDestroy:f}:J}function gy(f){let J=()=>f.children,Y=()=>f.notifications?b(m4,{get children(){return J()}}):J(),z=()=>b(o6,{get children(){return Y()}}),G=()=>f.focus?b(C4,{initial:"sidebar",get children(){return z()}}):z(),X=()=>f.kv?b(I4,{get children(){return G()}}):G();return b(U6,{mode:"dark",get theme(){return f.theme},get children(){return X()}})}function Ry(f){let J=i0(),Y={selectedTheme:()=>J.selected,hasTheme:(Q)=>J.has(Q),setTheme:(Q)=>J.set(Q),reloadUserThemes:()=>{for(let{name:Q,theme:H}of KX())sj(Q,H)},transparentBackground:()=>J.transparentBackground,setTransparentBackground:(Q)=>J.setTransparentBackground(Q),focusAccent:()=>J.focusAccent,setFocusAccent:(Q)=>J.setFocusAccent(Q)};K8(Y,{theme:f.boot.theme,transparentBackground:f.boot.transparent,focusAccent:f.boot.focusAccent}),wX(f.boot.locale);let[z,G]=r(null),X=!1;J1(()=>{(async()=>{let Q=await g4({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!Q)return;if(X){Q.dispose();return}G(Q)})()}),Gf(()=>{let Q=z()?.uiPrefsSignal()();if(!Q)return;if(K8(Y,Q),xX(Q.locale))wX(Q.locale)});let q=null;return Gf(()=>{let Q=z()?.keybindingsRevSignal()();if(Q==null)return;if(q===null||Q===q){q=Q;return}q=Q,S4()}),mf(()=>{X=!0,z()?.dispose()}),null}async function M1(f){Oy(f.logContext);let J=n4(Fy),Y=await f.setup(J),z=f.providers?.kv??!0,G=f.providers?.focus??!0,X=f.providers?.notifications??!1;await Q6(()=>b(gy,{get theme(){return J.theme},kv:z,focus:G,notifications:X,get children(){return[b(Ry,{boot:J}),I0(()=>Y.root())]}}),Ay(Y.onDestroy))}var Fy="claude";var nY=k(()=>{h();h();h();sY();Wf();R4();k4();W8();cX();SQ();xf();Nq();X1();v1();c4();U8()});async function D8(f,J,Y,z,G={}){let X=Lf(J.id);if(await Hf(X))return!0;let q=J.worktreePath;if(!q)q=await f.ensureWorktree(J.id);if(!q)throw Error(`task ${J.id} has no worktree`);let{ensureSession:Q}=await Promise.resolve().then(() => (Y1(),r1)),{resolveEngineLaunchInit:H}=await Promise.resolve().then(() => (zG(),xB)),B=H(Y,q,{kind:G.includeInitPrompt?"repo-init":"none"});if(!await Q({name:X,cwd:q,command:b1(z),taskId:J.id,vendor:z,repo:Y,launchInit:B}))throw Error(`failed to start tmux session for ${J.id}`);return!1}async function TQ(f,J,Y,z,G={}){await D8(f,J,Y,z,G),await f.setActiveTask(J.id).catch(()=>{});let{prepareWindowForSwitch:X}=await Promise.resolve().then(() => (Y1(),r1));await X(Lf(J.id)),await h0(["switch-client","-t",`=${Lf(J.id)}`])}var L8=k(()=>{x1();Tf()});var d4={};jf(d4,{startNewTaskHost:()=>Cy,NewTaskPage:()=>uQ});function uQ(f){let{theme:J}=i0(),Y=vf();J1(()=>{z()});async function z(){let G=O1(),X=f.defaultRepo||G[0]||process.cwd(),q=kf("lastSelectedVendor")??Sf,Q=await iJ(),H=f.orchestrator,B=await gQ.show(Y,X,G,{defaultVendor:q,availableVendors:Q,discoverAdoptable:H?(j)=>H.discoverAdoptableWorktrees(j):void 0});if(!B)process.exit(0);if(af("lastSelectedVendor",B.vendor),vJ(B.repo),!H)console.error("[kobe new-task] no daemon; cannot create task"),process.exit(1);let V;try{if(B.mode==="adopt")for(let j of B.adopt)V=await H.adoptWorktree({repo:B.repo,worktreePath:j.worktreePath,branch:j.branch,vendor:B.vendor});else V=await H.createTask({repo:B.repo,baseRef:B.baseRef,vendor:B.vendor})}catch(j){console.error("[kobe new-task] task.create/adopt failed:",j),process.exit(1)}if(V)try{await TQ(H,V,B.repo,B.vendor,{includeInitPrompt:B.mode!=="adopt"})}catch(j){console.error("[kobe new-task] auto-enter failed:",j)}process.exit(0)}return(()=>{var G=W("box");return Z(G,"flexDirection","column"),Z(G,"flexGrow",1),u((X)=>Z(G,"backgroundColor",J.background,X)),G})()}async function Cy(f){await M1({setup:async()=>{let J=null;try{let Y=await KJ(),z=new W1(Y);await z.init(),J=z}catch(Y){console.error("[kobe new-task] daemon unavailable; cannot create task:",Y)}return{root:()=>b(uQ,{get defaultRepo(){return f.defaultRepo},orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var M8=k(()=>{h();h();h();h();L1();Wf();PY();tY();Af();I1();bG();xf();nY();L8();v1()});function EQ(f,J,Y,z,G={}){if(f.length===0)return J;let X=new Map;for(let H of f)X.set(Y(H),H);let q=f.length===J.length,Q=Array(J.length);for(let H=0;H<J.length;H++){let B=J[H],V=X.get(Y(B));if(V&&z(V,B)&&(!G.samePosition||f[H]===V)){if(Q[H]=V,q&&f[H]!==V)q=!1}else Q[H]=B,q=!1}return q?f:Q}function i4(f,J){if(!f)return!0;let Y=f.toLowerCase(),z=J.toLowerCase(),G=0;for(let X=0;X<z.length&&G<Y.length;X++)if(z.charCodeAt(X)===Y.charCodeAt(G))G++;return G===Y.length}function ky(f,J){let Y=J==="archived";return f.filter((z)=>z.archived===Y)}function F8(f,J,Y,z="default",G){let X=ky(f,J),q=Y?.trim()??"",Q=G?o1(G):null,H=q?X.filter((M)=>i4(q,`${M.title} ${MJ(M.repo)}`)):X,B=[],V=[],j=[],U=new Set;for(let M of H){if(M.kind==="main"){let R=o1(M.repo);if(U.has(R))continue;U.add(R),B.push(M);continue}if(Q&&o1(M.repo)!==Q)continue;if(M.pinned===!0)V.push(M);else j.push(M)}if(B.sort((M,R)=>MJ(M.repo).localeCompare(MJ(R.repo))),z==="recent")V.sort(l4),j.sort(l4);let L=[],O=0;for(let M of B)L.push({kind:"task",task:M,flatIndex:O}),O++;for(let M of V)L.push({kind:"task",task:M,flatIndex:O}),O++;for(let M of j)L.push({kind:"task",task:M,flatIndex:O}),O++;return L}function l4(f,J){let Y=a4(J)-a4(f);if(Y!==0)return Y;return String(J.id).localeCompare(String(f.id))}function a4(f){let J=Date.parse(f.updatedAt||f.createdAt);return Number.isFinite(J)?J:0}function MJ(f){let J=f.split("/").filter(Boolean);return J[J.length-1]??f}function o1(f){return f.trim().replace(/[\\/]+$/,"")||f}function Ny(f,J){let Y=MJ(f);if(!J.some((G)=>G!==f&&MJ(G)===Y))return Y;return f.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function $4(f,J){let Y=J==="archived",z=new Map;for(let X of f){let q=o1(X.repo),Q=z.get(q)??{repo:X.repo,count:0};if(X.kind==="main")Q.repo=X.repo;else if(X.archived===Y)Q.count+=1;z.set(q,Q)}let G=[...z.values()].map((X)=>X.repo);return[...z.values()].map((X)=>({repo:X.repo,label:Ny(X.repo,G),count:X.count})).sort((X,q)=>X.label.localeCompare(q.label))}function r4(f,J){if(f.length===0)return-1;if(!J)return f[0]?.flatIndex??-1;let Y=o1(J),z=f.find((X)=>X.task.kind!=="main"&&o1(X.task.repo)===Y);if(z)return z.flatIndex;return f.find((X)=>X.task.kind==="main"&&o1(X.task.repo)===Y)?.flatIndex??f[0]?.flatIndex??-1}function O8(f){return f.map((J)=>J.task.id)}function p4(f){let J=[],Y=[];for(let z of f)if(z.task.kind==="main")J.push(z);else Y.push(z);return{projectRows:J,taskRows:Y}}function yy(f,J){return f===J||f.id===J.id&&f.kind===J.kind&&f.title===J.title&&f.repo===J.repo&&f.branch===J.branch&&f.worktreePath===J.worktreePath&&f.status===J.status&&f.archived===J.archived&&f.pinned===J.pinned&&f.vendor===J.vendor}function _4(f,J){return EQ(f,J,(Y)=>Y.task.id,(Y,z)=>Y.flatIndex===z.flatIndex&&yy(Y.task,z.task),{samePosition:!0})}var xQ=()=>{};var o4={};jf(o4,{startQuickTaskHost:()=>Ty});async function by(f,J){let Y,z;if(J){let j=await N1(J,["@kobe_task","@kobe_worktree"]);Y=j["@kobe_task"]||void 0,z=j["@kobe_worktree"]||void 0}let G=(Y?f?.getTask(Y)?.repo:void 0)??O1()[0],X=G??z??process.cwd();if(!G)return{ctx:null,fallbackRepo:X};let q=await iJ(),Q=kf("lastSelectedVendor")??Sf,H=q.length===0||q.includes(Q)?Q:q[0]??Q,B=hX(V1(G))??LJ,V=q.length>0?q:[H];return{ctx:{repo:G,vendor:H,baseRef:B,engines:V},fallbackRepo:X}}async function Sy(f,J,Y,z,G){let X=await D8(f,J,Y,z),q=Lf(J.id),{pane:Q}=await WX(q,!X);if(Q)await VX(Q,G)}function Iy(f){let{theme:J}=i0(),Y=vf();J1(()=>{z()});async function z(){let G=f.ctx,X=await O4.show(Y,{repoLabel:MJ(G.repo),engines:G.engines,defaultVendor:G.vendor,defaultBaseRef:G.baseRef,engineLabel:Vz});if(X===void 0)process.exit(0);af("lastSelectedVendor",X.vendor),vJ(G.repo);let q=f.orchestrator;if(!q)console.error("[kobe quick-task] no daemon; cannot create task"),process.exit(1);try{let Q=await q.createTask({repo:G.repo,baseRef:X.baseRef,vendor:X.vendor});await Sy(q,Q,G.repo,X.vendor,X.prompt),await TQ(q,Q,G.repo,X.vendor)}catch(Q){console.error("[kobe quick-task] task.create/deliver failed:",Q),process.exit(1)}process.exit(0)}return(()=>{var G=W("box");return Z(G,"flexDirection","column"),Z(G,"flexGrow",1),u((X)=>Z(G,"backgroundColor",J.background,X)),G})()}async function Ty(f){await M1({setup:async()=>{let J=null;try{let G=await KJ(),X=new W1(G);await X.init(),J=X}catch(G){console.error("[kobe quick-task] daemon unavailable; cannot create task:",G)}let{ctx:Y,fallbackRepo:z}=await by(J,f.session);return{root:()=>Y?b(Iy,{ctx:Y,orchestrator:J}):b(uQ,{defaultRepo:z,orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var s4=k(()=>{h();h();h();h();L1();Wf();PY();tY();x1();Af();Tf();Rq();I1();A4();xf();MQ();nY();OQ();L8();M8();xQ();v1()});function hQ(f){let J=f.trim().split(/\s+/).pop()??"",Y=/^([CM])-(.+)$/.exec(J);if(!Y)return null;let z=Y[1]==="C"?"\u2303":"\u2325",G=Y[2]??"";return`${z}${G.length===1?G.toUpperCase():G}`}function wQ(f,J){if(f.includes("/"))return f.split("/").map((G)=>wQ(G,J)).join("/");let Y=f.toLowerCase();if(Y==="tab")return"tab";let z=Ey[Y];if(z)return z;if(/^f\d{1,2}$/.test(Y))return Y.toUpperCase();if(!J)return f;if(/^[a-z]$/.test(Y))return f.toUpperCase();return f.replace(/[a-z]+/gi,(G)=>G.toUpperCase())}function TG(f,J="\u2303B"){let Y=f.trim();if(!Y)return Y;let z=/^prefix\s+(.+)$/i.exec(Y);if(z){let Q=z[1]??"";return`${J} ${Q.includes("+")?TG(Q,J):wQ(Q,!0)}`}let G=Y.split("+");if(G.length===1)return wQ(G[0]??"",!1);let X=G[G.length-1]??"";return`${G.slice(0,-1).map((Q)=>uy[Q.toLowerCase().trim()]??Q).join("")} ${wQ(X,!0)}`}var uy,Ey;var A8=k(()=>{uy={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},Ey={enter:"\u23CE",return:"\u23CE",esc:"\u238B",escape:"\u238B",space:"\u2423",up:"\u2191",down:"\u2193",left:"\u2190",right:"\u2192",backspace:"\u232B",delete:"\u2326",del:"\u2326",pgup:"\u21DE",pageup:"\u21DE",pgdn:"\u21DF",pagedown:"\u21DF",home:"\u2196",end:"\u2198"}});import{TextAttributes as t4}from"@opentui/core";function xy(f){let J=new Map,Y=[];for(let z of f){if(!J.has(z.category))J.set(z.category,[]),Y.push(z.category);J.get(z.category).push(z)}return Y.map((z)=>({category:z,rows:J.get(z)}))}function uG(f={}){let J=vf(),{theme:Y}=i0(),z=()=>xy(vY),G=()=>f.onClose?f.onClose():J.clear(),[X,q]=r("\u2303B");return J1(()=>{d0(["show-options","-g","prefix"]).then(({code:Q,stdout:H})=>{if(Q!==0)return;let B=hQ(H);if(B)q(B)})}),Uf(()=>({bindings:[{key:"?",cmd:G}]})),(()=>{var Q=W("box"),H=W("box"),B=W("text"),V=W("text"),j=W("scrollbox"),U=W("box");return D(Q,H),D(Q,j),Z(Q,"paddingLeft",2),Z(Q,"paddingRight",2),Z(Q,"gap",1),Z(Q,"flexShrink",1),D(H,B),D(H,V),Z(H,"flexDirection","row"),Z(H,"justifyContent","space-between"),Z(H,"flexShrink",0),K(B,()=>F("help.title")),Z(V,"onMouseUp",G),K(V,()=>F("help.esc")),D(j,U),Z(j,"flexShrink",1),Z(j,"flexGrow",1),Z(j,"stickyScroll",!1),Z(U,"paddingBottom",1),Z(U,"gap",1),Z(U,"paddingRight",1),K(U,b(Zf,{get each(){return z()},children:(L)=>(()=>{var O=W("box"),M=W("text");return D(O,M),Z(O,"gap",0),K(M,()=>f8("category",L.category)),K(O,b(Zf,{get each(){return L.rows},children:(R)=>{let S=R.hint?.keys??R.keys[0]??"\u2014",a=()=>S==="\u2014"?"\u2014":TG(S,X()),N=()=>(R.hint?R.keys:R.keys.slice(1)).map((g)=>TG(g,X()));return(()=>{var g=W("box"),C=W("box"),y=W("text"),_=W("box"),z0=W("text");return D(g,C),D(g,_),Z(g,"flexDirection","row"),Z(g,"gap",2),Z(g,"paddingLeft",1),D(C,y),Z(C,"width",14),K(y,a),D(_,z0),Z(_,"flexGrow",1),K(z0,()=>f8("desc",R.id)),K(g,(()=>{var t=I0(()=>N().length>0);return()=>t()?(()=>{var Y0=W("box"),T=W("text");return D(Y0,T),K(T,()=>`(${N().join(", ")})`),u((Q0)=>Z(T,"fg",Y.textMuted,Q0)),Y0})():null})(),null),u((t)=>{var{primary:Y0,text:T}=Y;return Y0!==t.e&&(t.e=Z(y,"fg",Y0,t.e)),T!==t.t&&(t.t=Z(z0,"fg",T,t.t)),t},{e:void 0,t:void 0}),g})()}}),null),u((R)=>{var S=Y.accent,a=t4.BOLD;return S!==R.e&&(R.e=Z(M,"fg",S,R.e)),a!==R.t&&(R.t=Z(M,"attributes",a,R.t)),R},{e:void 0,t:void 0}),O})()})),u((L)=>{var O=t4.BOLD,M=Y.text,R=Y.textMuted,S={trackOptions:{backgroundColor:Y.backgroundDialog,foregroundColor:Y.borderActive}};return O!==L.e&&(L.e=Z(B,"attributes",O,L.e)),M!==L.t&&(L.t=Z(B,"fg",M,L.t)),R!==L.a&&(L.a=Z(V,"fg",R,L.a)),S!==L.o&&(L.o=Z(j,"verticalScrollbarOptions",S,L.o)),L},{e:void 0,t:void 0,a:void 0,o:void 0}),Q})()}var g8=k(()=>{h();h();h();h();h();h();h();Wf();Tf();SG();xf();X1();A8();S1();v1();uG.show=(f)=>{f.replace(()=>b(uG,{}))}});import{TextAttributes as wy}from"@opentui/core";function e4(f){let J=vf(),{theme:Y}=i0(),[z,G]=r(f.currentTitle);function X(){let q=z().trim();if(!q&&!f.allowEmpty)return;f.onSubmit(q),J.clear()}return(()=>{var q=W("box"),Q=W("box"),H=W("text"),B=W("text"),V=W("box"),j=W("text"),U=W("input"),L=W("box"),O=W("text");return D(q,Q),D(q,V),D(q,L),Z(q,"paddingLeft",2),Z(q,"paddingRight",2),Z(q,"gap",1),D(Q,H),D(Q,B),Z(Q,"flexDirection","row"),Z(Q,"justifyContent","space-between"),K(H,()=>f.dialogTitle??F("common.rename.defaultTitle")),D(B,x0("esc")),Z(B,"onMouseUp",()=>f.onCancel()),D(V,j),D(V,U),Z(V,"gap",0),K(j,()=>f.fieldLabel??F("common.rename.defaultFieldLabel")),Z(U,"focused",!0),Z(U,"onInput",(M)=>G(Z1(M))),Z(U,"onSubmit",()=>X()),D(L,O),Z(L,"paddingBottom",1),K(O,()=>F("common.rename.footerHint",{submitLabel:f.submitLabel??F("common.rename.defaultSubmitLabel")})),u((M)=>{var R=wy.BOLD,S=Y.text,a=Y.textMuted,N=Y.accent,g=z(),C=f.placeholder??f.currentTitle,y=Y.textMuted;return R!==M.e&&(M.e=Z(H,"attributes",R,M.e)),S!==M.t&&(M.t=Z(H,"fg",S,M.t)),a!==M.a&&(M.a=Z(B,"fg",a,M.a)),N!==M.o&&(M.o=Z(j,"fg",N,M.o)),g!==M.i&&(M.i=Z(U,"value",g,M.i)),C!==M.n&&(M.n=Z(U,"placeholder",C,M.n)),y!==M.s&&(M.s=Z(O,"fg",y,M.s)),M},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),q})()}var fD=k(()=>{h();h();h();h();h();h();h();X1();Wf();xf();v1();bG()});function hy(f,J,Y={}){return new Promise((z)=>{f.replace(()=>b(e4,{currentTitle:J,get dialogTitle(){return Y.dialogTitle},get fieldLabel(){return Y.fieldLabel},get submitLabel(){return Y.submitLabel},get placeholder(){return Y.placeholder},get allowEmpty(){return Y.allowEmpty},onSubmit:(G)=>z(G),onCancel:()=>z(void 0)}),()=>z(void 0))})}var zY;var R8=k(()=>{h();fD();zY={show:hy}});import{TextAttributes as Py}from"@opentui/core";function vy(f){if(!f)return f;return f.charAt(0).toUpperCase()+f.slice(1)}function GY(f){let J=vf(),{theme:Y}=i0(),[z,G]=uJ({active:f.initialActive??"confirm"});return Uf(()=>({bindings:[{key:"return",cmd:()=>{if(z.active==="confirm")f.onConfirm?.();if(z.active==="cancel")f.onCancel?.();J.clear()}},{key:"left",cmd:()=>G("active",z.active==="confirm"?"cancel":"confirm")},{key:"right",cmd:()=>G("active",z.active==="confirm"?"cancel":"confirm")}]})),(()=>{var X=W("box"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("box");return D(X,q),D(X,B),D(X,V),Z(X,"paddingLeft",2),Z(X,"paddingRight",2),Z(X,"paddingBottom",1),Z(X,"gap",0),D(q,Q),D(q,H),Z(q,"flexDirection","row"),Z(q,"justifyContent","space-between"),K(Q,()=>f.title),D(H,x0("esc")),Z(H,"onMouseUp",()=>J.clear()),K(B,()=>f.message),Z(V,"flexDirection","row"),Z(V,"justifyContent","flex-end"),Z(V,"paddingTop",1),K(V,b(Zf,{each:["cancel","confirm"],children:(j)=>(()=>{var U=W("box"),L=W("text");return D(U,L),Z(U,"paddingLeft",1),Z(U,"paddingRight",1),Z(U,"onMouseUp",()=>{if(j==="confirm")f.onConfirm?.();if(j==="cancel")f.onCancel?.();J.clear()}),K(L,()=>vy(j==="cancel"?f.label??F("common.cancel"):f.confirmLabel??F("common.confirm"))),u((O)=>{var M=j===z.active?Y.primary:void 0,R=j===z.active?Y.selectedListItemText:Y.textMuted;return M!==O.e&&(O.e=Z(U,"backgroundColor",M,O.e)),R!==O.t&&(O.t=Z(L,"fg",R,O.t)),O},{e:void 0,t:void 0}),U})()})),u((j)=>{var U=Py.BOLD,L=Y.text,O=Y.textMuted,M=Y.textMuted;return U!==j.e&&(j.e=Z(Q,"attributes",U,j.e)),L!==j.t&&(j.t=Z(Q,"fg",L,j.t)),O!==j.a&&(j.a=Z(H,"fg",O,j.a)),M!==j.o&&(j.o=Z(B,"fg",M,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),X})()}var C8=k(()=>{h();h();h();h();h();h();h();X1();Wf();CG();xf();S1();v1();GY.show=(f,J,Y,z,G,X)=>{return new Promise((q)=>{f.replace(()=>b(GY,{title:J,message:Y,onConfirm:()=>q(!0),onCancel:()=>q(!1),label:z,confirmLabel:G,get initialActive(){return X?.initialActive}}),()=>q(void 0)),f.setSize("small")})}});import{unlinkSync as my}from"fs";import{join as cy}from"path";function JD(f){return f instanceof W1}function YD(f,J){try{f?.destroy()}catch(Y){console.error(`kobe: renderer.destroy() failed during ${J}:`,Y)}}async function k8(f,J,Y){if(await GY.show(f,"Reset UI state?","Wipes ~/.config/kobe/state.json and ~/.kobe/tasks.json, then quits kobe \u2014 relaunch for a fresh start with empty Working session / Archive lists. Worktrees on disk and Claude Code session history are NOT touched.","cancel")!==!0)return;J.clear();try{my(cy(OJ(),".kobe","tasks.json"))}catch(G){if(G.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",G)}YD(Y,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
224
+ `),process.exit(0)}async function N8(f,J,Y){if(!(J instanceof W1))return;if(await GY.show(f,"Restart backend?","Quits this kobe window. Relaunch to (re)spawn the daemon. Any other attached windows keep their connection. In v0.6 the daemon's RPC surface shrank to task CRUD + subscribe, so a graceful daemon.stop RPC is no longer plumbed through the client \u2014 quit + relaunch is the path.","cancel")!==!0)return;YD(Y,"daemon restart"),process.stderr.write(`kobe: window closed. Relaunch kobe to start fresh.
225
+ `),process.exit(0)}var zD=k(()=>{PY();lf();C8()});function ny(f){return`theme:${f}`}function y8(f){return`language:${f}`}function b8(f){return`accent:${f}`}function dy(f){return`engine:${f}`}function nX(f){return`surface:${f}`}function S8(f){return[...f.themeNames.map((J)=>({id:ny(J),kind:"theme",name:J})),...bz.map((J)=>({id:y8(J.id),kind:"language",locale:J.id})),{id:"transparent",kind:"transparent"},...f.focusAccentSlots.map((J)=>({id:b8(J),kind:"focusAccent",slot:J})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:"zen-keep-tasks",kind:"zenKeepTasks"},{id:nX("chattab"),kind:"surface",surface:"chattab"},{id:nX("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function iy(f){return[...f.map((J)=>({id:dy(J),kind:"engine",vendor:J})),{id:"add-engine",kind:"engineAdd"}]}function ly(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function dX(f){return[{id:"dev-reset",kind:"devReset"},...f?[{id:"dev-restart",kind:"devRestartDaemon"}]:[],{id:"remote-projects",kind:"devRemoteProjects"},{id:"auto-status",kind:"devAutoStatus"},{id:"dispatcher",kind:"devDispatcher"}]}function GD(f,J){switch(f){case"general":return S8(J);case"engines":return iy(J.engineList);case"accounts":case"keys":return[];case"feedback":return ly();case"dev":return dX(J.hasDaemon)}}function iX(f,J){return f.findIndex((Y)=>Y.id===J)}function PQ(f,J){return f[J]}var Iz;var I8=k(()=>{yG();Iz=[{id:"general",label:"General"},{id:"engines",label:"Engines"},{id:"accounts",label:"Accounts"},{id:"keys",label:"Keybindings"},{id:"feedback",label:"Feedback"},{id:"dev",label:"Dev"}]});import{TextAttributes as ff}from"@opentui/core";function XD(f){let{theme:J}=i0();return(()=>{var Y=W("box");return Z(Y,"flexDirection","column"),Z(Y,"flexShrink",0),Z(Y,"width",14),Z(Y,"gap",1),K(Y,b(Zf,{each:Iz,children:(z,G)=>{let X=()=>G()===f.cursor(),q=()=>X()&&f.level()==="sidebar";return(()=>{var Q=W("box"),H=W("text");return D(Q,H),Z(Q,"paddingLeft",1),Z(Q,"paddingRight",1),Z(Q,"onMouseUp",()=>f.switchSection(z.id)),Z(H,"wrapMode","none"),K(H,()=>F(`settings.sections.${z.id}`)),u((B)=>{var V=q()?J.primary:void 0,j=q()?J.selectedListItemText:X()?J.accent:J.textMuted,U=X()?ff.BOLD:void 0;return V!==B.e&&(B.e=Z(Q,"backgroundColor",V,B.e)),j!==B.t&&(B.t=Z(H,"fg",j,B.t)),U!==B.a&&(B.a=Z(H,"attributes",U,B.a)),B},{e:void 0,t:void 0,a:void 0}),Q})()}})),Y})()}function ZD(f){let J=i0(),{theme:Y}=J,z=()=>S8({themeNames:f.themeNames(),focusAccentSlots:yz}),G=(C)=>iX(z(),C),X=()=>G("transparent"),q=()=>G("toast"),Q=()=>G("sound"),H=()=>G("zen-keep-tasks"),B=()=>G(nX("chattab")),V=()=>G(nX("taskpanel")),j=()=>G("editor-kind"),U=()=>G("editor-custom"),L=()=>f.bodyRow()===X(),O=()=>f.bodyRow()===q(),M=()=>f.bodyRow()===Q(),R=()=>f.bodyRow()===H(),S=()=>f.bodyRow()===B(),a=()=>f.bodyRow()===V(),N=()=>f.bodyRow()===j(),g=()=>f.bodyRow()===U();return(()=>{var C=W("box"),y=W("text"),_=W("text"),z0=W("box"),t=W("box"),Y0=W("text"),T=W("text"),Q0=W("box"),p=W("text"),D0=W("text"),g0=W("box"),$=W("text"),E=W("box"),f0=W("text"),I=W("text"),G0=W("box"),x=W("text"),c=W("text"),Z0=W("box"),V0=W("text"),H0=x0(" "),y0=W("box"),w0=W("text"),T0=x0(" "),r0=W("box"),P=W("text"),M0=W("text"),J0=W("box"),F0=W("text"),a0=x0(" "),p0=W("box"),u0=W("text"),_0=W("text"),n=W("box"),q0=W("text"),b0=x0(" "),o0=W("box"),l0=W("text"),$0=x0(" "),t0=W("box"),Rf=W("text"),gf=W("text"),o=W("box"),e=W("text"),B0=W("box"),C0=W("text");return D(C,y),D(C,_),D(C,z0),D(C,t),D(C,Q0),D(C,E),D(C,G0),D(C,r0),D(C,p0),D(C,t0),Z(C,"flexDirection","column"),Z(C,"gap",1),K(y,()=>F("settings.general.theme")),K(_,()=>F("settings.general.themeHint")),Z(z0,"flexDirection","column"),Z(z0,"gap",0),K(z0,b(Zf,{get each(){return f.themeNames()},children:(A,P0)=>{let K0=()=>f.level()==="body"&&f.bodyRow()===P0(),E0=()=>A===J.selected;return(()=>{var W0=W("box"),L0=W("text");return D(W0,L0),Z(W0,"flexDirection","row"),Z(W0,"gap",1),Z(W0,"paddingLeft",1),Z(W0,"paddingRight",1),Z(W0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(P0()),f.setThemeCursor(P0()),f.selectTheme(A)}),Z(L0,"wrapMode","none"),K(L0,()=>E0()?"\u25CF ":" ",null),K(L0,A,null),u((R0)=>{var Jf=K0()?Y.primary:void 0,Yf=K0()?Y.selectedListItemText:E0()?Y.accent:Y.text,n0=K0()||E0()?ff.BOLD:void 0;return Jf!==R0.e&&(R0.e=Z(W0,"backgroundColor",Jf,R0.e)),Yf!==R0.t&&(R0.t=Z(L0,"fg",Yf,R0.t)),n0!==R0.a&&(R0.a=Z(L0,"attributes",n0,R0.a)),R0},{e:void 0,t:void 0,a:void 0}),W0})()}})),D(t,Y0),D(t,T),Z(t,"flexDirection","column"),Z(t,"gap",0),Z(t,"paddingTop",1),K(Y0,()=>F("settings.general.language")),Z(T,"wrapMode","word"),K(T,()=>F("settings.general.languageHint")),K(t,b(Zf,{each:bz,children:(A)=>{let P0=()=>G(y8(A.id)),K0=()=>f.level()==="body"&&f.bodyRow()===P0(),E0=()=>f.currentLocale()===A.id;return(()=>{var W0=W("box"),L0=W("text");return D(W0,L0),Z(W0,"flexDirection","row"),Z(W0,"gap",1),Z(W0,"paddingLeft",1),Z(W0,"paddingRight",1),Z(W0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(P0()),f.selectLanguage(A.id)}),Z(L0,"wrapMode","none"),K(L0,()=>E0()?"\u25CF ":" ",null),K(L0,()=>A.label,null),u((R0)=>{var Jf=K0()?Y.primary:void 0,Yf=K0()?Y.selectedListItemText:E0()?Y.accent:Y.text,n0=K0()||E0()?ff.BOLD:void 0;return Jf!==R0.e&&(R0.e=Z(W0,"backgroundColor",Jf,R0.e)),Yf!==R0.t&&(R0.t=Z(L0,"fg",Yf,R0.t)),n0!==R0.a&&(R0.a=Z(L0,"attributes",n0,R0.a)),R0},{e:void 0,t:void 0,a:void 0}),W0})()}}),null),D(Q0,p),D(Q0,D0),D(Q0,g0),Z(Q0,"flexDirection","column"),Z(Q0,"gap",0),Z(Q0,"paddingTop",1),K(p,()=>F("settings.general.transparent")),Z(D0,"wrapMode","word"),K(D0,()=>F("settings.general.transparentHint")),D(g0,$),Z(g0,"flexDirection","row"),Z(g0,"paddingLeft",1),Z(g0,"paddingRight",1),Z(g0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(X()),f.toggleTransparent()}),Z($,"wrapMode","none"),K($,(()=>{var A=I0(()=>!!J.transparentBackground);return()=>A()?F("settings.general.on"):F("settings.general.off")})()),D(E,f0),D(E,I),Z(E,"flexDirection","column"),Z(E,"gap",0),Z(E,"paddingTop",1),K(f0,()=>F("settings.general.focusAccent")),Z(I,"wrapMode","word"),K(I,()=>F("settings.general.focusAccentHint")),K(E,b(Zf,{each:yz,children:(A)=>{let P0=()=>G(b8(A)),K0=()=>f.level()==="body"&&f.bodyRow()===P0(),E0=()=>J.focusAccent===A;return(()=>{var W0=W("box"),L0=W("text");return D(W0,L0),Z(W0,"flexDirection","row"),Z(W0,"gap",1),Z(W0,"paddingLeft",1),Z(W0,"paddingRight",1),Z(W0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(P0()),f.selectFocusAccent(A)}),Z(L0,"wrapMode","none"),K(L0,()=>E0()?"\u25CF ":" ",null),K(L0,()=>F(`settings.general.accent${A.charAt(0).toUpperCase()}${A.slice(1)}`),null),u((R0)=>{var Jf=K0()?Y.primary:void 0,Yf=K0()?Y.selectedListItemText:E0()?Y.focusAccent:Y.text,n0=K0()||E0()?ff.BOLD:void 0;return Jf!==R0.e&&(R0.e=Z(W0,"backgroundColor",Jf,R0.e)),Yf!==R0.t&&(R0.t=Z(L0,"fg",Yf,R0.t)),n0!==R0.a&&(R0.a=Z(L0,"attributes",n0,R0.a)),R0},{e:void 0,t:void 0,a:void 0}),W0})()}}),null),D(G0,x),D(G0,c),D(G0,Z0),D(G0,y0),Z(G0,"flexDirection","column"),Z(G0,"gap",0),Z(G0,"paddingTop",1),K(x,()=>F("settings.general.notifications")),Z(c,"wrapMode","word"),K(c,()=>F("settings.general.notificationsHint")),D(Z0,V0),Z(Z0,"flexDirection","row"),Z(Z0,"gap",1),Z(Z0,"paddingLeft",1),Z(Z0,"paddingRight",1),Z(Z0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(q()),f.toggleToast()}),D(V0,H0),Z(V0,"wrapMode","none"),K(V0,()=>f.toastEnabled()?"[x]":"[ ]",H0),K(V0,()=>F("settings.general.toast"),null),D(y0,w0),Z(y0,"flexDirection","row"),Z(y0,"gap",1),Z(y0,"paddingLeft",1),Z(y0,"paddingRight",1),Z(y0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Q()),f.toggleSound()}),D(w0,T0),Z(w0,"wrapMode","none"),K(w0,()=>f.soundEnabled()?"[x]":"[ ]",T0),K(w0,()=>F("settings.general.sound"),null),D(r0,P),D(r0,M0),D(r0,J0),Z(r0,"flexDirection","column"),Z(r0,"gap",0),Z(r0,"paddingTop",1),K(P,()=>F("settings.general.zen")),Z(M0,"wrapMode","word"),K(M0,()=>F("settings.general.zenHint")),D(J0,F0),Z(J0,"flexDirection","row"),Z(J0,"gap",1),Z(J0,"paddingLeft",1),Z(J0,"paddingRight",1),Z(J0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(H()),f.toggleZenKeepsTasks()}),D(F0,a0),Z(F0,"wrapMode","none"),K(F0,()=>f.zenKeepsTasks()?"[x]":"[ ]",a0),K(F0,()=>F("settings.general.zenKeepTasks"),null),D(p0,u0),D(p0,_0),D(p0,n),D(p0,o0),Z(p0,"flexDirection","column"),Z(p0,"gap",0),Z(p0,"paddingTop",1),K(u0,()=>F("settings.general.surface")),Z(_0,"wrapMode","word"),K(_0,()=>F("settings.general.surfaceHint")),D(n,q0),Z(n,"flexDirection","row"),Z(n,"gap",1),Z(n,"paddingLeft",1),Z(n,"paddingRight",1),Z(n,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(B()),f.selectSurface("chattab")}),D(q0,b0),Z(q0,"wrapMode","none"),K(q0,()=>f.settingsSurface()==="chattab"?"[x]":"[ ]",b0),K(q0,()=>F("settings.general.surfaceChattab"),null),D(o0,l0),Z(o0,"flexDirection","row"),Z(o0,"gap",1),Z(o0,"paddingLeft",1),Z(o0,"paddingRight",1),Z(o0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(V()),f.selectSurface("taskpanel")}),D(l0,$0),Z(l0,"wrapMode","none"),K(l0,()=>f.settingsSurface()==="taskpanel"?"[x]":"[ ]",$0),K(l0,()=>F("settings.general.surfaceTaskpanel"),null),D(t0,Rf),D(t0,gf),D(t0,o),D(t0,B0),Z(t0,"flexDirection","column"),Z(t0,"gap",0),Z(t0,"paddingTop",1),K(Rf,()=>F("settings.general.editor")),Z(gf,"wrapMode","word"),K(gf,()=>F("settings.general.editorHint")),D(o,e),Z(o,"flexDirection","row"),Z(o,"gap",1),Z(o,"paddingLeft",1),Z(o,"paddingRight",1),Z(o,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(j()),f.cycleEditorKind()}),Z(e,"wrapMode","none"),K(e,()=>F("settings.general.editorRow",{kind:f.editorKind()})),D(B0,C0),Z(B0,"flexDirection","row"),Z(B0,"gap",1),Z(B0,"paddingLeft",1),Z(B0,"paddingRight",1),Z(B0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(U()),f.editEditorCustom()}),Z(C0,"wrapMode","none"),K(C0,()=>F("settings.general.editorCustom",{cmd:f.editorCustomCommand().trim()||F("settings.general.editorCustomUnset")})),u((A)=>{var P0=Y.text,K0=ff.BOLD,E0=Y.textMuted,W0=Y.text,L0=ff.BOLD,R0=Y.textMuted,Jf=Y.text,Yf=ff.BOLD,n0=Y.textMuted,yf=L()?Y.primary:void 0,k0=L()?Y.selectedListItemText:J.transparentBackground?Y.accent:Y.textMuted,wf=ff.BOLD,v=Y.text,A0=ff.BOLD,Bf=Y.textMuted,Of=Y.text,Qf=ff.BOLD,d=Y.textMuted,s=O()?Y.primary:void 0,S0=O()?Y.selectedListItemText:f.toastEnabled()?Y.accent:Y.textMuted,N0=ff.BOLD,q1=M()?Y.primary:void 0,K1=M()?Y.selectedListItemText:f.soundEnabled()?Y.accent:Y.textMuted,tf=ff.BOLD,m1=Y.text,xJ=ff.BOLD,F1=Y.textMuted,wJ=R()?Y.primary:void 0,XY=R()?Y.selectedListItemText:f.zenKeepsTasks()?Y.accent:Y.textMuted,m=ff.BOLD,i=Y.text,l=ff.BOLD,w=Y.textMuted,m0=S()?Y.primary:void 0,v0=S()?Y.selectedListItemText:f.settingsSurface()==="chattab"?Y.accent:Y.textMuted,O0=ff.BOLD,c0=a()?Y.primary:void 0,qf=a()?Y.selectedListItemText:f.settingsSurface()==="taskpanel"?Y.accent:Y.textMuted,Df=ff.BOLD,Q1=Y.text,s1=ff.BOLD,ZY=Y.textMuted,f9=N()?Y.primary:void 0,J9=N()?Y.selectedListItemText:Y.accent,Y9=ff.BOLD,z9=g()?Y.primary:void 0,G9=g()?Y.selectedListItemText:f.editorKind()==="custom"?Y.text:Y.textMuted;return P0!==A.e&&(A.e=Z(y,"fg",P0,A.e)),K0!==A.t&&(A.t=Z(y,"attributes",K0,A.t)),E0!==A.a&&(A.a=Z(_,"fg",E0,A.a)),W0!==A.o&&(A.o=Z(Y0,"fg",W0,A.o)),L0!==A.i&&(A.i=Z(Y0,"attributes",L0,A.i)),R0!==A.n&&(A.n=Z(T,"fg",R0,A.n)),Jf!==A.s&&(A.s=Z(p,"fg",Jf,A.s)),Yf!==A.h&&(A.h=Z(p,"attributes",Yf,A.h)),n0!==A.r&&(A.r=Z(D0,"fg",n0,A.r)),yf!==A.d&&(A.d=Z(g0,"backgroundColor",yf,A.d)),k0!==A.l&&(A.l=Z($,"fg",k0,A.l)),wf!==A.u&&(A.u=Z($,"attributes",wf,A.u)),v!==A.c&&(A.c=Z(f0,"fg",v,A.c)),A0!==A.w&&(A.w=Z(f0,"attributes",A0,A.w)),Bf!==A.m&&(A.m=Z(I,"fg",Bf,A.m)),Of!==A.f&&(A.f=Z(x,"fg",Of,A.f)),Qf!==A.y&&(A.y=Z(x,"attributes",Qf,A.y)),d!==A.g&&(A.g=Z(c,"fg",d,A.g)),s!==A.p&&(A.p=Z(Z0,"backgroundColor",s,A.p)),S0!==A.b&&(A.b=Z(V0,"fg",S0,A.b)),N0!==A.T&&(A.T=Z(V0,"attributes",N0,A.T)),q1!==A.A&&(A.A=Z(y0,"backgroundColor",q1,A.A)),K1!==A.O&&(A.O=Z(w0,"fg",K1,A.O)),tf!==A.I&&(A.I=Z(w0,"attributes",tf,A.I)),m1!==A.S&&(A.S=Z(P,"fg",m1,A.S)),xJ!==A.W&&(A.W=Z(P,"attributes",xJ,A.W)),F1!==A.C&&(A.C=Z(M0,"fg",F1,A.C)),wJ!==A.B&&(A.B=Z(J0,"backgroundColor",wJ,A.B)),XY!==A.v&&(A.v=Z(F0,"fg",XY,A.v)),m!==A.k&&(A.k=Z(F0,"attributes",m,A.k)),i!==A.x&&(A.x=Z(u0,"fg",i,A.x)),l!==A.j&&(A.j=Z(u0,"attributes",l,A.j)),w!==A.q&&(A.q=Z(_0,"fg",w,A.q)),m0!==A.z&&(A.z=Z(n,"backgroundColor",m0,A.z)),v0!==A.P&&(A.P=Z(q0,"fg",v0,A.P)),O0!==A.H&&(A.H=Z(q0,"attributes",O0,A.H)),c0!==A.F&&(A.F=Z(o0,"backgroundColor",c0,A.F)),qf!==A.M&&(A.M=Z(l0,"fg",qf,A.M)),Df!==A.D&&(A.D=Z(l0,"attributes",Df,A.D)),Q1!==A.R&&(A.R=Z(Rf,"fg",Q1,A.R)),s1!==A.E&&(A.E=Z(Rf,"attributes",s1,A.E)),ZY!==A.L&&(A.L=Z(gf,"fg",ZY,A.L)),f9!==A.N&&(A.N=Z(o,"backgroundColor",f9,A.N)),J9!==A.G&&(A.G=Z(e,"fg",J9,A.G)),Y9!==A.U&&(A.U=Z(e,"attributes",Y9,A.U)),z9!==A.K&&(A.K=Z(B0,"backgroundColor",z9,A.K)),G9!==A.V&&(A.V=Z(C0,"fg",G9,A.V)),A},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0,y:void 0,g:void 0,p:void 0,b:void 0,T:void 0,A:void 0,O:void 0,I:void 0,S:void 0,W:void 0,C:void 0,B:void 0,v:void 0,k:void 0,x:void 0,j:void 0,q:void 0,z:void 0,P:void 0,H:void 0,F:void 0,M:void 0,D:void 0,R:void 0,E:void 0,L:void 0,N:void 0,G:void 0,U:void 0,K:void 0,V:void 0}),C})()}function qD(f){let{theme:J}=i0(),Y=()=>f.vendors.length;return(()=>{var z=W("box"),G=W("text"),X=W("text"),q=W("box"),Q=W("box"),H=W("text");return D(z,G),D(z,X),D(z,q),Z(z,"flexDirection","column"),Z(z,"gap",1),K(G,()=>F("settings.engines.title")),Z(X,"wrapMode","word"),K(X,()=>F("settings.engines.hint")),D(q,Q),Z(q,"flexDirection","column"),Z(q,"gap",0),K(q,b(Zf,{get each(){return f.vendors},children:(B,V)=>{let j=()=>f.level()==="body"&&f.bodyRow()===V();return(()=>{var U=W("box"),L=W("text"),O=W("text"),M=W("text");return D(U,L),D(U,O),D(U,M),Z(U,"flexDirection","row"),Z(U,"gap",1),Z(U,"paddingLeft",1),Z(U,"paddingRight",1),Z(U,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(V()),f.editEngine(B)}),Z(L,"wrapMode","none"),K(L,()=>f.isDefaultEngine(B)?"\u25CF":" "),Z(O,"wrapMode","none"),K(O,()=>f.displayName(B)),Z(M,"wrapMode","none"),K(M,()=>f.commandText(B),null),K(M,(()=>{var R=I0(()=>!!f.isDefault(B));return()=>R()?F("settings.engines.defaultTag"):I0(()=>!!f.isCustom(B))()?F("settings.engines.customTag"):""})(),null),u((R)=>{var S=j()?J.primary:void 0,a=j()?J.selectedListItemText:J.accent,N=ff.BOLD,g=j()?J.selectedListItemText:J.text,C=ff.BOLD,y=j()?J.selectedListItemText:f.isDefault(B)?J.textMuted:J.accent;return S!==R.e&&(R.e=Z(U,"backgroundColor",S,R.e)),a!==R.t&&(R.t=Z(L,"fg",a,R.t)),N!==R.a&&(R.a=Z(L,"attributes",N,R.a)),g!==R.o&&(R.o=Z(O,"fg",g,R.o)),C!==R.i&&(R.i=Z(O,"attributes",C,R.i)),y!==R.n&&(R.n=Z(M,"fg",y,R.n)),R},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),U})()}}),Q),D(Q,H),Z(Q,"flexDirection","row"),Z(Q,"paddingLeft",1),Z(Q,"paddingRight",1),Z(Q,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Y()),f.onAddEngine()}),Z(H,"wrapMode","none"),K(H,()=>F("settings.engines.addEngine")),u((B)=>{var V=J.text,j=ff.BOLD,U=J.textMuted,L=f.level()==="body"&&f.bodyRow()===Y()?J.primary:void 0,O=f.level()==="body"&&f.bodyRow()===Y()?J.selectedListItemText:J.primary;return V!==B.e&&(B.e=Z(G,"fg",V,B.e)),j!==B.t&&(B.t=Z(G,"attributes",j,B.t)),U!==B.a&&(B.a=Z(X,"fg",U,B.a)),L!==B.o&&(B.o=Z(Q,"backgroundColor",L,B.o)),O!==B.i&&(B.i=Z(H,"fg",O,B.i)),B},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),z})()}function QD(f){let{theme:J}=i0(),Y=(z)=>z.binary.found?`Binary: ${z.binary.path}`:`Binary: ${z.binary.error}`;return(()=>{var z=W("box"),G=W("text"),X=W("text"),q=W("box"),Q=W("text"),H=W("box"),B=W("text"),V=W("box"),j=W("text");return D(z,G),D(z,X),D(z,q),D(z,H),D(z,V),Z(z,"flexDirection","column"),Z(z,"gap",1),K(G,()=>F("settings.accounts.title")),Z(X,"wrapMode","word"),K(X,()=>F("settings.accounts.hint")),D(q,Q),Z(q,"flexDirection","column"),Z(q,"gap",0),D(Q,x0("claude-code")),K(q,b(X0,{get when(){return f.claudeStatus()===null},get children(){var U=W("text");return K(U,()=>F("settings.accounts.checking")),u((L)=>Z(U,"fg",J.textMuted,L)),U}}),null),K(q,b(X0,{get when(){return f.claudeStatus()},children:(U)=>(()=>{var L=W("box"),O=W("text");return D(L,O),Z(L,"flexDirection","column"),Z(L,"gap",0),Z(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="oauth"){let R=[M.organization,M.billingType].filter((S)=>!!S).join(" \xB7 ");return(()=>{var S=W("text");return Z(S,"wrapMode","word"),K(S,()=>F("settings.accounts.loggedIn",{email:M.email}),null),K(S,R?` (${R})`:"",null),u((a)=>Z(S,"fg",J.success,a)),S})()}return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.notLoggedIn")),u((S)=>Z(R,"fg",J.textMuted,S)),R})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var R=W("text");return Z(R,"wrapMode","word"),K(R,()=>`! ${M()}`),u((S)=>Z(R,"fg",J.warning,S)),R})()}),null),u((M)=>Z(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),D(H,B),Z(H,"flexDirection","column"),Z(H,"gap",0),D(B,x0("codex")),K(H,b(X0,{get when(){return f.codexStatus()===null},get children(){var U=W("text");return K(U,()=>F("settings.accounts.checking")),u((L)=>Z(U,"fg",J.textMuted,L)),U}}),null),K(H,b(X0,{get when(){return f.codexStatus()},children:(U)=>(()=>{var L=W("box"),O=W("text");return D(L,O),Z(L,"flexDirection","column"),Z(L,"gap",0),Z(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="chatgpt")return(()=>{var R=W("text");return Z(R,"wrapMode","word"),K(R,()=>F("settings.accounts.chatgptLogin",{email:M.email}),null),K(R,(()=>{var S=I0(()=>!!M.plan);return()=>S()?` (${M.plan})`:""})(),null),u((S)=>Z(R,"fg",J.success,S)),R})();if(M.kind==="apikey")return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.apiKeyConfigured")),u((S)=>Z(R,"fg",J.success,S)),R})();return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.notLoggedIn")),u((S)=>Z(R,"fg",J.textMuted,S)),R})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var R=W("text");return Z(R,"wrapMode","word"),K(R,()=>`! ${M()}`),u((S)=>Z(R,"fg",J.warning,S)),R})()}),null),u((M)=>Z(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),D(V,j),Z(V,"flexDirection","column"),Z(V,"gap",0),D(j,x0("copilot")),K(V,b(X0,{get when(){return f.copilotStatus()===null},get children(){var U=W("text");return K(U,()=>F("settings.accounts.checking")),u((L)=>Z(U,"fg",J.textMuted,L)),U}}),null),K(V,b(X0,{get when(){return f.copilotStatus()},children:(U)=>(()=>{var L=W("box"),O=W("text");return D(L,O),Z(L,"flexDirection","column"),Z(L,"gap",0),Z(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="token")return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.tokenConfigured",{source:M.source})),u((S)=>Z(R,"fg",J.success,S)),R})();if(M.kind==="oauth")return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.copilotDetected")),u((S)=>Z(R,"fg",J.success,S)),R})();return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.notLoggedIn")),u((S)=>Z(R,"fg",J.textMuted,S)),R})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var R=W("text");return Z(R,"wrapMode","word"),K(R,()=>`! ${M()}`),u((S)=>Z(R,"fg",J.warning,S)),R})()}),null),u((M)=>Z(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),u((U)=>{var L=J.text,O=ff.BOLD,M=J.textMuted,R=J.text,S=ff.BOLD,a=J.text,N=ff.BOLD,g=J.text,C=ff.BOLD;return L!==U.e&&(U.e=Z(G,"fg",L,U.e)),O!==U.t&&(U.t=Z(G,"attributes",O,U.t)),M!==U.a&&(U.a=Z(X,"fg",M,U.a)),R!==U.o&&(U.o=Z(Q,"fg",R,U.o)),S!==U.i&&(U.i=Z(Q,"attributes",S,U.i)),a!==U.n&&(U.n=Z(B,"fg",a,U.n)),N!==U.s&&(U.s=Z(B,"attributes",N,U.s)),g!==U.h&&(U.h=Z(j,"fg",g,U.h)),C!==U.r&&(U.r=Z(j,"attributes",C,U.r)),U},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),z})()}function HD(f){let{theme:J}=i0(),Y=()=>f.level()==="body",z=()=>Y()&&f.bodyRow()===0,G=()=>Y()&&f.bodyRow()===1,X=()=>Y()&&f.bodyRow()===2,q=(H)=>H?J.primary:J.textMuted,Q=(H)=>H?ff.BOLD|ff.UNDERLINE:void 0;return(()=>{var H=W("box"),B=W("text"),V=W("text"),j=W("box"),U=W("box"),L=W("text"),O=W("input"),M=W("box"),R=W("text"),S=W("input"),a=W("box"),N=W("text");return D(H,B),D(H,V),D(H,j),Z(H,"flexDirection","column"),Z(H,"gap",1),K(B,()=>F("settings.feedback.title")),Z(V,"wrapMode","word"),K(V,()=>F("settings.feedback.hint")),D(j,U),D(j,M),D(j,a),Z(j,"flexDirection","column"),Z(j,"gap",1),D(U,L),D(U,O),Z(U,"gap",0),K(L,()=>F("settings.feedback.titleLabel")),Z(O,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(0)}),Z(O,"onInput",(g)=>f.setTitle(Z1(g))),Z(O,"onSubmit",()=>f.onTitleSubmit()),D(M,R),D(M,S),Z(M,"gap",0),K(R,()=>F("settings.feedback.descriptionLabel")),Z(S,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(1)}),Z(S,"onInput",(g)=>f.setBody(Z1(g))),Z(S,"onSubmit",()=>f.onBodySubmit()),D(a,N),Z(a,"flexDirection","row"),Z(a,"paddingLeft",1),Z(a,"paddingRight",1),Z(a,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(2),f.submit()}),K(N,()=>F("settings.feedback.send")),K(H,b(X0,{get when(){return f.status()},get children(){var g=W("text");return Z(g,"wrapMode","word"),K(g,()=>f.status()),u((C)=>Z(g,"fg",f.status().startsWith("error:")?J.warning:J.success,C)),g}}),null),u((g)=>{var C=J.text,y=ff.BOLD,_=J.textMuted,z0=q(z()),t=Q(z()),Y0=f.title(),T=F("settings.feedback.titlePlaceholder"),Q0=z(),p=q(G()),D0=Q(G()),g0=f.body(),$=F("settings.feedback.descriptionPlaceholder"),E=G(),f0=X()?J.primary:J.backgroundElement,I=X()?J.selectedListItemText:J.accent,G0=ff.BOLD;return C!==g.e&&(g.e=Z(B,"fg",C,g.e)),y!==g.t&&(g.t=Z(B,"attributes",y,g.t)),_!==g.a&&(g.a=Z(V,"fg",_,g.a)),z0!==g.o&&(g.o=Z(L,"fg",z0,g.o)),t!==g.i&&(g.i=Z(L,"attributes",t,g.i)),Y0!==g.n&&(g.n=Z(O,"value",Y0,g.n)),T!==g.s&&(g.s=Z(O,"placeholder",T,g.s)),Q0!==g.h&&(g.h=Z(O,"focused",Q0,g.h)),p!==g.r&&(g.r=Z(R,"fg",p,g.r)),D0!==g.d&&(g.d=Z(R,"attributes",D0,g.d)),g0!==g.l&&(g.l=Z(S,"value",g0,g.l)),$!==g.u&&(g.u=Z(S,"placeholder",$,g.u)),E!==g.c&&(g.c=Z(S,"focused",E,g.c)),f0!==g.w&&(g.w=Z(a,"backgroundColor",f0,g.w)),I!==g.m&&(g.m=Z(N,"fg",I,g.m)),G0!==g.f&&(g.f=Z(N,"attributes",G0,g.f)),g},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0}),H})()}function BD(f){let{theme:J}=i0(),Y=()=>f.level()==="body"&&f.bodyRow()===0,z=()=>f.level()==="body"&&f.bodyRow()===1,G=()=>iX(dX(f.hasDaemon),"remote-projects"),X=()=>f.level()==="body"&&f.bodyRow()===G(),q=()=>iX(dX(f.hasDaemon),"auto-status"),Q=()=>f.level()==="body"&&f.bodyRow()===q(),H=()=>iX(dX(f.hasDaemon),"dispatcher"),B=()=>f.level()==="body"&&f.bodyRow()===H();return(()=>{var V=W("box"),j=W("text"),U=W("text"),L=W("box"),O=W("text"),M=W("text"),R=W("box"),S=W("text"),a=W("text"),N=W("box"),g=W("text"),C=W("text"),y=W("box"),_=W("text"),z0=W("text"),t=W("box"),Y0=W("text");return D(V,j),D(V,U),D(V,L),D(V,M),D(V,R),Z(V,"flexDirection","column"),Z(V,"gap",1),K(j,()=>F("settings.dev.reset")),Z(U,"wrapMode","word"),K(U,()=>F("settings.dev.resetHint")),D(L,O),Z(L,"flexDirection","row"),Z(L,"paddingLeft",1),Z(L,"paddingRight",1),Z(L,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(0),f.confirmReset()}),K(O,()=>F("settings.dev.resetButton")),K(V,b(X0,{get when(){return f.hasDaemon},get children(){var T=W("box"),Q0=W("text"),p=W("text"),D0=W("box"),g0=W("text");return D(T,Q0),D(T,p),D(T,D0),Z(T,"flexDirection","column"),Z(T,"gap",0),Z(T,"paddingTop",1),K(Q0,()=>F("settings.dev.restart")),Z(p,"wrapMode","word"),K(p,()=>F("settings.dev.restartHint")),D(D0,g0),Z(D0,"flexDirection","row"),Z(D0,"paddingLeft",1),Z(D0,"paddingRight",1),Z(D0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(1),f.confirmRestartDaemon()}),K(g0,()=>F("settings.dev.restartButton")),u(($)=>{var E=J.text,f0=ff.BOLD,I=J.textMuted,G0=z()?J.primary:J.backgroundElement,x=z()?J.selectedListItemText:J.accent,c=ff.BOLD;return E!==$.e&&($.e=Z(Q0,"fg",E,$.e)),f0!==$.t&&($.t=Z(Q0,"attributes",f0,$.t)),I!==$.a&&($.a=Z(p,"fg",I,$.a)),G0!==$.o&&($.o=Z(D0,"backgroundColor",G0,$.o)),x!==$.i&&($.i=Z(g0,"fg",x,$.i)),c!==$.n&&($.n=Z(g0,"attributes",c,$.n)),$},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),T}}),M),Z(M,"wrapMode","word"),K(M,()=>F("settings.dev.doctorHint")),D(R,S),D(R,a),D(R,N),D(R,C),D(R,y),D(R,z0),D(R,t),Z(R,"flexDirection","column"),Z(R,"gap",0),Z(R,"paddingTop",1),K(S,()=>F("settings.dev.experimental")),Z(a,"wrapMode","word"),K(a,()=>F("settings.dev.remoteHint")),D(N,g),Z(N,"flexDirection","row"),Z(N,"paddingLeft",1),Z(N,"paddingRight",1),Z(N,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(G()),f.toggleRemoteProjects()}),K(g,(()=>{var T=I0(()=>!!f.remoteProjectsEnabled());return()=>T()?F("settings.dev.remoteOn"):F("settings.dev.remoteOff")})()),Z(C,"wrapMode","word"),K(C,()=>F("settings.dev.autoStatusHint")),D(y,_),Z(y,"flexDirection","row"),Z(y,"paddingLeft",1),Z(y,"paddingRight",1),Z(y,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(q()),f.toggleAutoStatus()}),K(_,(()=>{var T=I0(()=>!!f.autoStatusEnabled());return()=>T()?F("settings.dev.autoStatusOn"):F("settings.dev.autoStatusOff")})()),Z(z0,"wrapMode","word"),K(z0,()=>F("settings.dev.dispatcherHint")),D(t,Y0),Z(t,"flexDirection","row"),Z(t,"paddingLeft",1),Z(t,"paddingRight",1),Z(t,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(H()),f.toggleDispatcher()}),K(Y0,(()=>{var T=I0(()=>!!f.dispatcherEnabled());return()=>T()?F("settings.dev.dispatcherOn"):F("settings.dev.dispatcherOff")})()),u((T)=>{var Q0=J.text,p=ff.BOLD,D0=J.textMuted,g0=Y()?J.primary:J.backgroundElement,$=Y()?J.selectedListItemText:J.warning,E=ff.BOLD,f0=J.textMuted,I=J.text,G0=ff.BOLD,x=J.textMuted,c=X()?J.primary:J.backgroundElement,Z0=X()?J.selectedListItemText:J.text,V0=f.remoteProjectsEnabled()?ff.BOLD:void 0,H0=J.textMuted,y0=Q()?J.primary:J.backgroundElement,w0=Q()?J.selectedListItemText:J.text,T0=f.autoStatusEnabled()?ff.BOLD:void 0,r0=J.textMuted,P=B()?J.primary:J.backgroundElement,M0=B()?J.selectedListItemText:J.text,J0=f.dispatcherEnabled()?ff.BOLD:void 0;return Q0!==T.e&&(T.e=Z(j,"fg",Q0,T.e)),p!==T.t&&(T.t=Z(j,"attributes",p,T.t)),D0!==T.a&&(T.a=Z(U,"fg",D0,T.a)),g0!==T.o&&(T.o=Z(L,"backgroundColor",g0,T.o)),$!==T.i&&(T.i=Z(O,"fg",$,T.i)),E!==T.n&&(T.n=Z(O,"attributes",E,T.n)),f0!==T.s&&(T.s=Z(M,"fg",f0,T.s)),I!==T.h&&(T.h=Z(S,"fg",I,T.h)),G0!==T.r&&(T.r=Z(S,"attributes",G0,T.r)),x!==T.d&&(T.d=Z(a,"fg",x,T.d)),c!==T.l&&(T.l=Z(N,"backgroundColor",c,T.l)),Z0!==T.u&&(T.u=Z(g,"fg",Z0,T.u)),V0!==T.c&&(T.c=Z(g,"attributes",V0,T.c)),H0!==T.w&&(T.w=Z(C,"fg",H0,T.w)),y0!==T.m&&(T.m=Z(y,"backgroundColor",y0,T.m)),w0!==T.f&&(T.f=Z(_,"fg",w0,T.f)),T0!==T.y&&(T.y=Z(_,"attributes",T0,T.y)),r0!==T.g&&(T.g=Z(z0,"fg",r0,T.g)),P!==T.p&&(T.p=Z(t,"backgroundColor",P,T.p)),M0!==T.b&&(T.b=Z(Y0,"fg",M0,T.b)),J0!==T.T&&(T.T=Z(Y0,"attributes",J0,T.T)),T},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0,y:void 0,g:void 0,p:void 0,b:void 0,T:void 0}),V})()}function jD(){let{theme:f}=i0(),J=b4(),Y=Object.keys(hB).sort();return(()=>{var z=W("box"),G=W("text"),X=W("text"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("text");return D(z,G),D(z,X),D(z,q),D(z,B),D(z,V),Z(z,"flexDirection","column"),Z(z,"gap",1),K(G,()=>F("settings.keybindings.title")),Z(X,"wrapMode","word"),K(X,()=>F("settings.keybindings.hint")),D(q,Q),D(q,H),Z(q,"flexDirection","column"),Z(q,"gap",0),K(Q,()=>F("settings.keybindings.configFile")),Z(H,"wrapMode","word"),K(H,()=>J.path,null),K(H,(()=>{var j=I0(()=>!!J.exists);return()=>j()?"":F("settings.keybindings.notCreated")})(),null),K(z,b(X0,{get when(){return!J.exists},get children(){var j=W("box"),U=W("text"),L=W("text"),O=W("text"),M=W("text"),R=W("text"),S=W("text"),a=W("text"),N=W("text"),g=W("text"),C=W("text");return D(j,U),D(j,L),D(j,O),D(j,M),D(j,R),D(j,S),D(j,a),D(j,N),D(j,g),D(j,C),Z(j,"flexDirection","column"),Z(j,"gap",0),K(U,()=>F("settings.keybindings.example")),D(L,x0("bindings:")),D(O,x0(" chat.fork.new: ctrl+g # string = one chord")),D(M,x0(" sidebar.select: [enter] # list = several chords")),D(R,x0(" files.createPR: null # null = unbind")),D(S,x0(" tmux.tab.new: ctrl+y # tmux session key (see below)")),D(a,x0(" tmux.layout.workspaceSplit: g # prefix g")),D(N,x0("darwin: # platform overlay (also: linux)")),D(g,x0(" bindings:")),D(C,x0(" palette.open: [cmd+p, ctrl+p]")),u((y)=>{var _=f.text,z0=ff.BOLD,t=f.textMuted,Y0=f.textMuted,T=f.textMuted,Q0=f.textMuted,p=f.textMuted,D0=f.textMuted,g0=f.textMuted,$=f.textMuted,E=f.textMuted;return _!==y.e&&(y.e=Z(U,"fg",_,y.e)),z0!==y.t&&(y.t=Z(U,"attributes",z0,y.t)),t!==y.a&&(y.a=Z(L,"fg",t,y.a)),Y0!==y.o&&(y.o=Z(O,"fg",Y0,y.o)),T!==y.i&&(y.i=Z(M,"fg",T,y.i)),Q0!==y.n&&(y.n=Z(R,"fg",Q0,y.n)),p!==y.s&&(y.s=Z(S,"fg",p,y.s)),D0!==y.h&&(y.h=Z(a,"fg",D0,y.h)),g0!==y.r&&(y.r=Z(N,"fg",g0,y.r)),$!==y.d&&(y.d=Z(g,"fg",$,y.d)),E!==y.l&&(y.l=Z(C,"fg",E,y.l)),y},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0}),j}}),B),K(z,b(X0,{get when(){return J.exists},get children(){var j=W("box"),U=W("text");return D(j,U),Z(j,"flexDirection","column"),Z(j,"gap",0),K(U,()=>F("settings.keybindings.overridesApplied")),K(j,b(X0,{get when(){return J.applied.length===0},get children(){var L=W("text");return K(L,()=>F("settings.keybindings.none")),u((O)=>Z(L,"fg",f.textMuted,O)),L}}),null),K(j,b(Zf,{get each(){return J.applied},children:(L)=>(()=>{var O=W("text");return Z(O,"wrapMode","word"),K(O,()=>`${L.id} \u2192 ${L.keys.length>0?L.keys.join(" / "):"(unbound)"} (default: ${L.defaultKeys.join(" / ")})`),u((M)=>Z(O,"fg",f.text,M)),O})()}),null),u((L)=>{var O=f.text,M=ff.BOLD;return O!==L.e&&(L.e=Z(U,"fg",O,L.e)),M!==L.t&&(L.t=Z(U,"attributes",M,L.t)),L},{e:void 0,t:void 0}),j}}),B),K(z,b(X0,{get when(){return J.warnings.length>0},get children(){var j=W("box"),U=W("text");return D(j,U),Z(j,"flexDirection","column"),Z(j,"gap",0),K(U,()=>F("settings.keybindings.warnings")),K(j,b(Zf,{get each(){return J.warnings},children:(L)=>(()=>{var O=W("text");return Z(O,"wrapMode","word"),K(O,`! ${L}`),u((M)=>Z(O,"fg",f.warning,M)),O})()}),null),u((L)=>{var O=f.warning,M=ff.BOLD;return O!==L.e&&(L.e=Z(U,"fg",O,L.e)),M!==L.t&&(L.t=Z(U,"attributes",M,L.t)),L},{e:void 0,t:void 0}),j}}),B),D(B,x0("tmux session keys use the same file: tmux.tab.new (ctrl+t), tmux.tab.prev/next (ctrl+[/]), tmux.tab.close (ctrl+w), tmux.tab.rename (f2), tmux.tab.chooseEngine (ctrl+shift+t), tmux.detach (ctrl+q), tmux.focus (4 chords, left/down/up/right), and prefix layout keys: workspaceSplit (s), workspaceClose (x), workspaceReset (r), tasksToggle (a), opsToggle (o), terminalToggle (z). They apply when a session is (re)built.")),Z(B,"wrapMode","word"),Z(V,"wrapMode","word"),K(V,()=>`Fixed (not rebindable): ${Y.join(", ")}.`),u((j)=>{var U=f.text,L=ff.BOLD,O=f.textMuted,M=f.text,R=ff.BOLD,S=f.textMuted,a=f.textMuted,N=f.textMuted;return U!==j.e&&(j.e=Z(G,"fg",U,j.e)),L!==j.t&&(j.t=Z(G,"attributes",L,j.t)),O!==j.a&&(j.a=Z(X,"fg",O,j.a)),M!==j.o&&(j.o=Z(Q,"fg",M,j.o)),R!==j.i&&(j.i=Z(Q,"attributes",R,j.i)),S!==j.n&&(j.n=Z(H,"fg",S,j.n)),a!==j.s&&(j.s=Z(B,"fg",a,j.s)),N!==j.h&&(j.h=Z(V,"fg",N,j.h)),j},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),z})()}var WD=k(()=>{h();h();h();h();h();h();h();h();Wf();W8();xf();X1();yG();Oq();bG();I8()});import{TextAttributes as ay}from"@opentui/core";function $y(f){return f.split(/[-_]+/).filter((J)=>J.length>0).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function Tz(f){let J=vf(),Y=i0(),z=z1(),{theme:G}=Y,[X,q]=r("sidebar"),[Q,H]=r("general"),[B,V]=r(0),[j,U]=r(0),[L,O]=r(""),[M,R]=r(""),[S,a]=r(""),N=U0(()=>Y.all().slice().sort()),[,g]=r(Math.max(0,N().findIndex((v)=>v===Y.selected))),C=JD(f.orchestrator),[y,_]=r(null),[z0,t]=r(null),[Y0,T]=r(null),Q0=!1;Gf(()=>{if(Q()!=="accounts"||Q0)return;Q0=!0,LZ().then(_),MZ().then(t),FZ().then(T)});function p(){return GD(Q(),{themeNames:N(),focusAccentSlots:yz,engineList:u0(),hasDaemon:C})}function D0(){return p().length}function g0(){return Lz(f.kv.get(oJ,Dz))}function $(v){if(Y.selected===v)return;if(!Y.set(v))return;f.kv.set("activeTheme",v),f.onVisualPrefsChange?.()}function E(){return ej()}function f0(v){if(ej()===v)return;wX(v),f.kv.set(IQ,v),f.onVisualPrefsChange?.()}function I(v){if(Y.transparentBackground===v)return;Y.setTransparentBackground(v),f.kv.set("transparentBackground",v),f.onVisualPrefsChange?.()}function G0(){I(!Y.transparentBackground)}function x(v){if(Y.focusAccent===v)return;Y.setFocusAccent(v),f.kv.set("focusAccent",v),f.onVisualPrefsChange?.()}function c(v){f.kv.set(oJ,v)}function Z0(){return f.kv.get("notifications.toast.enabled",!0)!==!1}function V0(){return f.kv.get("notifications.sound.enabled",!0)!==!1}function H0(){f.kv.set("notifications.toast.enabled",!Z0())}function y0(){f.kv.set("notifications.sound.enabled",!V0())}function w0(){return f.kv.get(bq,!0)!==!1}function T0(){f.kv.set(bq,!w0())}function r0(){return f.kv.get("experimental.remoteProjects",!1)===!0}function P(){f.kv.set("experimental.remoteProjects",!r0())}function M0(){return f.kv.get(jz,!1)===!0}function J0(){f.kv.set(jz,!M0())}function F0(){return f.kv.get(Wz,!1)===!0}function a0(){f.kv.set(Wz,!F0())}function p0(){let v=f.kv.get("customEngineIds",[]);return Array.isArray(v)?v.filter((A0)=>typeof A0==="string"&&A0.trim().length>0):[]}function u0(){return[...cf,...p0()]}function _0(v){let A0=f.kv.get(BJ(v),"");return typeof A0==="string"?A0.trim():""}function n(v){return _0(v)||HX(v).join(" ")}function q0(v){return H1(v)&&_0(v).length===0&&!o0(v)}function b0(v){let A0=f.kv.get(jJ(v),"");return typeof A0==="string"?A0.trim():""}function o0(v){return b0(v).length>0}function l0(v){return b0(v)||SB[v]||v}let[$0,t0]=r(kf("lastSelectedVendor")??Sf);function Rf(v){return $0()===v}function gf(v){af("lastSelectedVendor",v),f.kv.set("lastSelectedVendor",v),t0(v)}async function o(v){let A0=await zY.show(J,n(v),{dialogTitle:`${l0(v)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(A0===void 0)return;f.kv.set(BJ(v),A0.trim())}async function e(v){let A0=await zY.show(J,l0(v),{dialogTitle:`${l0(v)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(A0===void 0)return;f.kv.set(jJ(v),A0.trim())}function B0(v){if(f.kv.set(BJ(v),""),f.kv.set(jJ(v),""),!H1(v))f.kv.set("customEngineIds",p0().filter((A0)=>A0!==v)),U((A0)=>Math.max(0,Math.min(A0,u0().length)))}async function C0(){let v=await zY.show(J,"",{dialogTitle:"Add engine",fieldLabel:"id",submitLabel:"next",placeholder:"lowercase slug, e.g. aider"});if(v===void 0)return;let A0=v.trim().toLowerCase();if(!A0||H1(A0)||p0().includes(A0))return;let Bf=await zY.show(J,"",{dialogTitle:`Add engine \xB7 ${A0}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(Bf===void 0)return;let Of=await zY.show(J,A0,{dialogTitle:`Add engine \xB7 ${A0}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(f.kv.set("customEngineIds",[...p0(),A0]),Bf.trim())f.kv.set(BJ(A0),Bf.trim());let Qf=Of?.trim()??"";f.kv.set(jJ(A0),Qf&&Qf!==A0?Qf:$y(A0))}function A(){if(Q()!=="engines"||X()!=="body")return null;let v=PQ(p(),j());return v?.kind==="engine"?v.vendor:null}function P0(){return pz(f.kv.get(_J,Xq))}function K0(){let v=Uz.indexOf(P0()),A0=Uz[(v+1)%Uz.length];if(A0)f.kv.set(_J,A0)}function E0(){let v=f.kv.get(RY,"");return typeof v==="string"?v:""}async function W0(){let v=await zY.show(J,E0(),{dialogTitle:"Custom editor command (use {file} for the path)",fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(v===void 0)return;let A0=v.trim();if(f.kv.set(RY,A0),A0)f.kv.set(_J,"custom")}async function L0(){a("submitting...");try{let v=MG({title:L(),body:M()});a(`sent: ${v.url}`),O(""),R(""),U(0)}catch(v){a(`error: ${v instanceof Error?v.message:String(v)}`)}}let R0=()=>Q()==="feedback"&&X()==="body";function Jf(v){let A0=j()+v;if(A0<0||A0>2){q("sidebar");return}U(A0)}function Yf(){if(X()!=="sidebar"||D0()===0)return;if(q("body"),U(0),Q()==="general")g(0)}function n0(v){if(X()==="sidebar"){let Of=(B()+v+Iz.length)%Iz.length;V(Of);let Qf=Iz[Of];if(Qf)H(Qf.id),U(0);return}let A0=D0();if(A0===0)return;let Bf=(j()+v+A0)%A0;if(U(Bf),PQ(p(),Bf)?.kind==="theme")g(Bf)}function yf(v){H(v),V(Iz.findIndex((A0)=>A0.id===v)),U(0),q("sidebar")}let k0={theme:(v)=>$(v.name),language:(v)=>f0(v.locale),transparent:()=>G0(),focusAccent:(v)=>x(v.slot),toast:()=>H0(),sound:()=>y0(),zenKeepTasks:()=>T0(),surface:(v)=>c(v.surface),editorKind:()=>K0(),editorCustom:()=>void W0(),engine:(v)=>void o(v.vendor),engineAdd:()=>void C0(),feedbackTitle:()=>U(0),feedbackBody:()=>U(1),feedbackSend:()=>void L0(),devReset:()=>void k8(J,f.kv,z),devRestartDaemon:()=>void N8(J,f.orchestrator,z),devRemoteProjects:()=>P(),devAutoStatus:()=>J0(),devDispatcher:()=>a0()};function wf(){let v=PQ(p(),j());if(!v)return;k0[v.kind](v)}return Uf(()=>({enabled:(!f.standalone||J.stack.length===0)&&!R0(),bindings:[{key:"down",cmd:()=>n0(1)},{key:"up",cmd:()=>n0(-1)},{key:"j",cmd:()=>n0(1)},{key:"k",cmd:()=>n0(-1)},{key:"tab",cmd:()=>n0(1)},{key:"right",cmd:Yf},{key:"l",cmd:Yf},{key:"left",cmd:()=>q("sidebar")},{key:"h",cmd:()=>q("sidebar")},{key:"return",cmd:()=>{if(X()==="sidebar"){Yf();return}wf()}},{key:"t",cmd:G0},{key:"r",cmd:()=>{let v=A();if(v)e(v)}},{key:"x",cmd:()=>{let v=A();if(v)B0(v)}},{key:"d",cmd:()=>{let v=A();if(v)gf(v)}}]})),Uf(()=>({enabled:R0(),bindings:[{key:"tab",cmd:()=>Jf(1)},{key:"shift+tab",cmd:()=>Jf(-1)}]})),Uf(()=>({enabled:R0()&&j()===2,bindings:[{key:"return",cmd:()=>void L0()}]})),(()=>{var v=W("box"),A0=W("box"),Bf=W("text"),Of=W("text"),Qf=W("box"),d=W("box"),s=W("box"),S0=W("text");return D(v,A0),D(v,Qf),D(v,s),Z(v,"paddingLeft",2),Z(v,"paddingRight",2),Z(v,"paddingBottom",1),Z(v,"gap",1),D(A0,Bf),D(A0,Of),Z(A0,"flexDirection","row"),Z(A0,"justifyContent","space-between"),K(Bf,()=>F("settings.title")),Z(Of,"onMouseUp",()=>f.onClose()),K(Of,()=>F("settings.esc")),D(Qf,d),Z(Qf,"flexDirection","row"),Z(Qf,"gap",2),K(Qf,b(XD,{level:X,cursor:B,switchSection:yf}),d),Z(d,"flexGrow",1),Z(d,"flexShrink",1),Z(d,"flexDirection","column"),Z(d,"gap",1),K(d,b(X0,{get when(){return Q()==="general"},get children(){return b(ZD,{level:X,bodyRow:j,setLevel:q,setBodyRow:U,themeNames:N,setThemeCursor:g,selectTheme:$,currentLocale:E,selectLanguage:f0,toggleTransparent:G0,selectFocusAccent:x,toastEnabled:Z0,soundEnabled:V0,toggleToast:H0,toggleSound:y0,zenKeepsTasks:w0,toggleZenKeepsTasks:T0,settingsSurface:g0,selectSurface:c,editorKind:P0,cycleEditorKind:K0,editorCustomCommand:E0,editEditorCustom:()=>void W0()})}}),null),K(d,b(X0,{get when(){return Q()==="engines"},get children(){return b(qD,{level:X,bodyRow:j,setLevel:q,setBodyRow:U,get vendors(){return u0()},isCustom:(N0)=>!H1(N0),displayName:l0,commandText:n,isDefault:q0,isDefaultEngine:Rf,editEngine:(N0)=>void o(N0),renameEngine:(N0)=>void e(N0),resetEngine:B0,onAddEngine:()=>void C0()})}}),null),K(d,b(X0,{get when(){return Q()==="accounts"},get children(){return b(QD,{claudeStatus:y,codexStatus:z0,copilotStatus:Y0})}}),null),K(d,b(X0,{get when(){return Q()==="keys"},get children(){return b(jD,{})}}),null),K(d,b(X0,{get when(){return Q()==="feedback"},get children(){return b(HD,{level:X,bodyRow:j,setLevel:q,setBodyRow:U,title:L,setTitle:(N0)=>{O(N0),a("")},body:M,setBody:(N0)=>{R(N0),a("")},status:S,onTitleSubmit:()=>U(1),onBodySubmit:()=>void L0(),submit:()=>void L0()})}}),null),K(d,b(X0,{get when(){return Q()==="dev"},get children(){return b(BD,{level:X,bodyRow:j,setLevel:q,setBodyRow:U,hasDaemon:C,confirmReset:()=>void k8(J,f.kv,z),confirmRestartDaemon:()=>void N8(J,f.orchestrator,z),remoteProjectsEnabled:r0,toggleRemoteProjects:P,autoStatusEnabled:M0,toggleAutoStatus:J0,dispatcherEnabled:F0,toggleDispatcher:a0})}}),null),D(s,S0),Z(s,"paddingTop",0),K(S0,(()=>{var N0=I0(()=>!!R0());return()=>N0()?F("settings.nav.feedback"):F("settings.nav.default")})()),u((N0)=>{var q1=ay.BOLD,K1=G.text,tf=G.textMuted,m1=G.textMuted;return q1!==N0.e&&(N0.e=Z(Bf,"attributes",q1,N0.e)),K1!==N0.t&&(N0.t=Z(Bf,"fg",K1,N0.t)),tf!==N0.a&&(N0.a=Z(Of,"fg",tf,N0.a)),m1!==N0.o&&(N0.o=Z(S0,"fg",m1,N0.o)),N0},{e:void 0,t:void 0,a:void 0,o:void 0}),v})()}var T8=k(()=>{h();h();h();h();h();h();h();h();Wf();tY();x1();YQ();XX();Yq();Af();nB();I1();U1();xf();X1();Zq();S1();U8();v1();R8();zD();I8();WD();Tz.show=(f,J,Y)=>{let z=!1;return new Promise((G)=>{f.replace(()=>b(Tz,{kv:J,orchestrator:Y,onVisualPrefsChange:()=>{z=!0},onClose:()=>G({visualPrefsChanged:z})}),()=>G({visualPrefsChanged:z}))})}});import{TextAttributes as ry}from"@opentui/core";function KD(){let{theme:f}=i0(),J=TJ(),Y=bQ(),z=()=>Y.toasts().slice(-VD),G=()=>Math.max(0,J().width-py-_y),X=()=>Math.max(0,J().height-oy-VD-1);return b(X0,{get when(){return Y.toasts().length>0},get children(){var q=W("box");return Z(q,"position","absolute"),Z(q,"zIndex",2500),Z(q,"width",40),Z(q,"flexDirection","column"),Z(q,"gap",0),K(q,b(Zf,{get each(){return z()},children:(Q)=>{let H=()=>Q.kind==="needs_input"?f.warning:Q.kind==="error"?f.error:f.success,B=()=>f.selectedListItemText,V=()=>Q.kind==="needs_input"?"?":Q.kind==="error"?"\u2715":"\u2713";return(()=>{var j=W("box"),U=W("text"),L=W("text");return D(j,U),D(j,L),Z(j,"flexDirection","row"),Z(j,"gap",1),Z(j,"paddingLeft",1),Z(j,"paddingRight",1),Z(j,"onMouseUp",()=>Y.dismiss(Q.id)),Z(U,"wrapMode","none"),K(U,V),Z(L,"wrapMode","none"),K(L,()=>Q.title),u((O)=>{var M=H(),R=B(),S=ry.BOLD,a=B();return M!==O.e&&(O.e=Z(j,"backgroundColor",M,O.e)),R!==O.t&&(O.t=Z(U,"fg",R,O.t)),S!==O.a&&(O.a=Z(U,"attributes",S,O.a)),a!==O.o&&(O.o=Z(L,"fg",a,O.o)),O},{e:void 0,t:void 0,a:void 0,o:void 0}),j})()}})),u((Q)=>{var H=G(),B=X();return H!==Q.e&&(Q.e=Z(q,"left",H,Q.e)),B!==Q.t&&(Q.t=Z(q,"top",B,Q.t)),Q},{e:void 0,t:void 0}),q}})}var VD=4,py=40,_y=2,oy=2;var UD=k(()=>{h();h();h();h();h();h();h();Wf();SQ();xf()});import{TextAttributes as sy}from"@opentui/core";function ty(f,J){let Y=f?`v${f}`:F("update.skew.olderBuild");return F("update.skew.hint",{daemon:Y,clientVersion:J})}function DD(f){let{theme:J}=i0(),Y=()=>Math.max(4,f.width()-2);return b(X0,{get when(){return f.stale()},get children(){var z=W("box"),G=W("text"),X=W("box"),q=W("text"),Q=W("box"),H=W("text");return D(z,G),D(z,X),D(z,Q),Z(z,"flexDirection","column"),Z(z,"flexShrink",0),Z(z,"paddingLeft",1),Z(z,"paddingRight",1),Z(z,"paddingBottom",1),Z(G,"wrapMode","none"),K(G,()=>"\u2594".repeat(Y())),D(X,q),Z(X,"flexDirection","row"),Z(X,"gap",1),Z(q,"wrapMode","none"),K(q,()=>F("update.skew.title")),D(Q,H),Z(Q,"flexDirection","row"),Z(Q,"gap",1),Z(H,"wrapMode","word"),K(H,()=>ty(f.daemonVersion(),f.clientVersion)),u((B)=>{var{warning:V,warning:j}=J,U=sy.BOLD,L=J.text;return V!==B.e&&(B.e=Z(G,"fg",V,B.e)),j!==B.t&&(B.t=Z(q,"fg",j,B.t)),U!==B.a&&(B.a=Z(q,"attributes",U,B.a)),L!==B.o&&(B.o=Z(H,"fg",L,B.o)),B},{e:void 0,t:void 0,a:void 0,o:void 0}),z}})}var LD=k(()=>{h();h();h();h();h();h();Wf();xf();X1()});function MD(f,J){return f.find((Y)=>Y.id!==J&&!Y.archived)}async function ey(f){let J=f.tasks.find((X)=>X.id===f.taskId);if(!J)return null;let Y=!J.archived;try{await f.orch.setArchived(f.taskId,Y)}catch(X){return f.logger.error(`${f.logPrefix} archive failed:`,X),null}if(!Y)return{archived:Y};let z=Lf(f.taskId),G=MD(f.tasks,f.taskId);if(await bJ(z,G?Lf(G.id):void 0).catch((X)=>{f.logger.error(`${f.logPrefix} switch-client failed:`,X)}),f.updateActiveTask)await f.orch.setActiveTask(G?.id??null).catch(()=>{});return await l1(z).catch((X)=>{f.logger.error(`${f.logPrefix} kill tmux session failed:`,X)}),{archived:Y,nextTask:G}}async function fb(f){let J=MD(f.tasks,f.taskId),Y=Lf(f.taskId);if(f.switchBeforeKill)await bJ(Y,J?Lf(J.id):void 0).catch((z)=>{f.logger.error(`${f.logPrefix} switch-client failed:`,z)});if(f.updateActiveTask)await f.orch?.setActiveTask(J?.id??null).catch(()=>{});return await l1(Y).catch((z)=>{f.logger.error(`${f.logPrefix} kill tmux session failed:`,z)}),{nextTask:J}}async function FD(f,J){if(!f.orch)return;let Y=f.tasks().find((G)=>G.id===J);if(!Y)return;if(!Y.archived){if(!await f.confirm({title:`Archive "${Y.title}"?`,body:"Moves it to Archives and stops its running session. The worktree, branch, and chat history stay \u2014 unarchive to bring it back.",cancelLabel:"cancel",confirmLabel:"archive"}))return}if(!await ey({orch:f.orch,tasks:f.tasks(),taskId:J,logger:f.logger,logPrefix:f.logPrefix,updateActiveTask:f.updateActiveTask}))return;await f.reload?.()}async function OD(f,J){if(!f.orch)return;let Y=f.tasks().find((q)=>q.id===J);if(!Y)return;if(Y.kind==="main"){if(!await f.confirm({title:`Remove project "${Y.title}"?`,body:"Forgets it from the projects list. The repo, its branches, worktrees, and any tasks under it stay on disk \u2014 re-add it with `kobe add`.",cancelLabel:"cancel",confirmLabel:"remove"}))return;try{await f.orch.forgetProject(Y.repo)}catch(Q){f.logger.error(`${f.logPrefix} forget project failed:`,Q),f.notifyError?.(`Couldn't remove: ${Q instanceof Error?Q.message:String(Q)}`);return}await f.reload?.();return}if(!await f.confirm({title:`Delete "${Y.title}"?`,body:"Removes the task entry and its worktree. The tmux session (if any) is killed.",cancelLabel:"cancel",confirmLabel:"delete"}))return;let G=!1;try{await f.orch.deleteTask(J),G=!0}catch(q){if((q instanceof Error?q.message:String(q)).includes(aH)){if(await f.confirm({title:`"${Y.title}" has uncommitted changes`,body:"Its worktree has uncommitted or untracked work that will be permanently deleted. Force delete anyway?",cancelLabel:"cancel",confirmLabel:"force delete"}))try{await f.orch.deleteTask(J,{force:!0}),G=!0}catch(B){f.logger.error(`${f.logPrefix} force delete failed:`,B),f.notifyError?.(`Couldn't delete: ${B instanceof Error?B.message:String(B)}`)}}else f.logger.error(`${f.logPrefix} delete failed:`,q),f.notifyError?.(`Couldn't delete: ${q instanceof Error?q.message:String(q)}`)}if(!G)return;let{nextTask:X}=await fb({orch:f.orch,tasks:f.tasks(),taskId:J,logger:f.logger,logPrefix:f.logPrefix,switchBeforeKill:f.switchBeforeKill,updateActiveTask:f.updateActiveTask});await f.reload?.(),f.onTaskDeleted?.(J,X)}async function AD(f,J){let Y=f.tasks().find((G)=>G.id===J);if(!Y)return;let z=await f.promptText(Y.title);if(!z||!f.orch)return;try{await f.orch.setTitle(J,z)}catch(G){f.logger.error(`${f.logPrefix} task.rename failed:`,G),f.notifyError?.(`Couldn't rename task: ${G instanceof Error?G.message:String(G)}`);return}await f.reload?.()}async function gD(f,J){let Y=f.tasks().find((G)=>G.id===J);if(!Y||Y.kind==="main")return;let z=await f.promptText(Y.branch,{dialogTitle:"Rename branch",fieldLabel:"branch"});if(!z||!f.orch)return;try{await f.orch.setBranch(J,z)}catch(G){f.logger.error(`${f.logPrefix} task.setBranch failed:`,G),f.notifyError?.(`Couldn't rename branch: ${G instanceof Error?G.message:String(G)}`);return}await f.reload?.()}async function RD(f,J){let Y=f.tasks().find((X)=>X.id===J);if(!Y||!f.orch)return;let z=await iJ(),G=qY(z,Y.vendor??Sf);try{await f.orch.setVendor(J,G)}catch(X){f.logger.error(`${f.logPrefix} task.setVendor failed:`,X),f.notifyError?.(`Couldn't switch engine: ${X instanceof Error?X.message:String(X)}`);return}f.notifyInfo?.(`Engine \u2192 ${Vz(G)} (applies on reopen)`),await f.reload?.()}async function CD(f){let J=O1(),Y=f.cursorRepo()??J[0]??process.cwd();if(f.openCreateSurface&&await f.openCreateSurface(Y))return;let z=f.lastVendor()??Sf,G=await iJ();if(G.length===0)f.notifyInfo?.("No engine CLI detected \u2014 install claude or codex, or add one in Settings \u2192 Engines");let X=f.orch,q=await f.promptNewTask(Y,J,{defaultVendor:z,availableVendors:G,discoverAdoptable:X?(H)=>X.discoverAdoptableWorktrees(H):void 0});if(!q)return;if(f.rememberVendor(q.vendor),vJ(q.repo),f.onRepoSaved?.(),!X){f.logger.error(`${f.logPrefix} no daemon; cannot create task`);return}f.notifyInfo?.("Creating task\u2026");let Q;try{if(q.mode==="adopt")for(let H of q.adopt)Q=(await X.adoptWorktree({repo:q.repo,worktreePath:H.worktreePath,branch:H.branch,vendor:q.vendor})).id;else Q=(await X.createTask({repo:q.repo,baseRef:q.baseRef,vendor:q.vendor})).id}catch(H){f.logger.error(`${f.logPrefix} task.create/adopt failed:`,H),f.notifyError?.(`Couldn't create task: ${H instanceof Error?H.message:String(H)}`);return}if(await f.reload?.(),Q)f.selectTask?.(Q),await f.enterTask?.(Q)}var kD=k(()=>{tY();x1();pH();Af();I1();U1();Y1()});import{spawn as Jb}from"child_process";import{existsSync as Yb}from"fs";import{basename as zb,delimiter as Gb,isAbsolute as Xb,join as Zb}from"path";function u8(f,J,Y){if(Xb(f))return Y(f);let z=J.PATH??"";for(let G of z.split(Gb)){if(!G)continue;if(Y(Zb(G,f)))return!0}return!1}function Hb(f){let J=zb(f);if(J==="code")return"VS Code";if(J==="cursor")return"Cursor";if(J==="windsurf")return"Windsurf";if(J==="zed")return"Zed";return J||f}function ND(f={}){let J=f.env??process.env,Y=f.platform??process.platform,z=f.exists??Yb,G=J.KOBE_OPEN_EDITOR?.trim();if(G)return{id:"env",label:Hb(G),command:G,args:[]};for(let X of qb)if(u8(X.command,J,z))return{id:X.id,label:X.label,command:X.command,args:[]};if(Y==="darwin"&&u8("open",J,z)){for(let X of Qb)if(X.paths.some((q)=>z(q)))return{id:X.id,label:X.label,command:"open",args:["-a",X.appName]};return{id:"mac-open",label:"Finder",command:"open",args:[]}}if(Y==="linux"&&u8("xdg-open",J,z))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function Bb(f,J){return[J.command,[...J.args,f]]}function yD(f,J,Y={}){if(!f)return!1;let z=Y.spawn??Jb,[G,X]=Bb(f,J);try{let q=z(G,X,{detached:!0,stdio:"ignore"});if(q.pid===void 0)return!1;return q.unref(),!0}catch{return!1}}var qb,Qb;var bD=k(()=>{qb=[{id:"code",label:"VS Code",command:"code"},{id:"cursor",label:"Cursor",command:"cursor"},{id:"windsurf",label:"Windsurf",command:"windsurf"},{id:"zed",label:"Zed",command:"zed"}],Qb=[{id:"vscode.app",label:"VS Code",appName:"Visual Studio Code",paths:["/Applications/Visual Studio Code.app"]},{id:"cursor.app",label:"Cursor",appName:"Cursor",paths:["/Applications/Cursor.app","/System/Applications/Cursor.app"]},{id:"windsurf.app",label:"Windsurf",appName:"Windsurf",paths:["/Applications/Windsurf.app"]},{id:"zed.app",label:"Zed",appName:"Zed",paths:["/Applications/Zed.app"]}]});function vQ(f){let J=new Map;function Y(z){let G=J.get(z);if(!G){let[X,q]=r(f.initial,f.equals?{equals:f.equals}:void 0);G={read:X,write:(Q)=>q(()=>Q),inFlight:!1,nextAllowedAt:0},J.set(z,G)}return G}return{read(z){if(!z)return f.initial;return Y(z).read()},poll(z){if(!z)return;let G=Y(z);fq(G,f,(X)=>f.run(z,X),(X)=>G.write(X))},reset(){J.clear()}}}var lX=k(()=>{Wf();QX();QX()});import{stat as jb}from"fs/promises";import{join as Wb}from"path";async function Db(f){try{let J=await jb(Wb(f,".git","HEAD"));return`${J.mtimeMs}:${J.size}`}catch{return null}}async function Lb(f,J,Y=HJ){let z=await Db(f);if(z!==null){let Q=SD.get(f);if(Q&&Q.fingerprint===z)return Q.value}let G="",X=await Y("git",["symbolic-ref","--short","HEAD"],{cwd:f,env:w1(),signal:J}),q=X.status===0?X.stdout.trim():"";if(q&&q!=="HEAD")G=q;else if((await Y("git",["rev-parse","--verify","HEAD"],{cwd:f,env:w1(),signal:J})).status===0)G="(detached)";if(z!==null)SD.set(f,{fingerprint:z,value:G});return G}function TD(f){return ID.read(f)}function uD(f){ID.poll(f)}var Vb=2000,Kb=30000,Ub=1500,SD,ID;var ED=k(()=>{CY();lX();SD=new Map;ID=vQ({initial:"",timeoutMs:Vb,slowRetryMs:Kb,minIntervalMs:Ub,run:(f,J)=>Lb(f,J)})});function E8(f){let J=f.scheduleTimeout??((H,B)=>{let V=setTimeout(H,B);return()=>clearTimeout(V)}),Y=!1,z=null,G=()=>{Y=!0,z?.(),z=J(()=>{Y=!1,z=null},700)},X=()=>{Y=!1,z?.(),z=null},q=(H)=>{let B=f.getFlatIds();if(B.length===0)return;let V=f.getCursor(),j=V<0?0:V,U=Math.min(B.length-1,Math.max(0,j+H));f.setCursor(U)},Q=(H)=>{let B=f.getFlatIds();if(B.length===0)return;f.setCursor(Math.min(B.length-1,Math.max(0,H)))};return{moveDown(){X(),q(1)},moveUp(){X(),q(-1)},selectCurrent(){X();let H=f.getFlatIds(),B=f.getCursor();if(B<0||B>=H.length)return;let V=H[B];if(V!==void 0)f.onSelect(V)},pressG(){if(Y)X(),Q(0);else G()},pressShiftG(){X(),Q(f.getFlatIds().length-1)},isChordArmed(){return Y},disarmChord(){X()}}}function xD(f){let J=E8({getCursor:()=>f.cursorIndex(),setCursor:(X)=>f.setCursorIndex(X),getFlatIds:()=>f.flatTaskIds(),onSelect:(X)=>f.onSelect(X)}),Y=()=>{let X=f.flatTaskIds(),q=f.cursorIndex();if(q<0||q>=X.length)return;return X[q]},z=()=>f.searchMode?.()??!1,G=()=>f.moveMode?.()??!1;Uf(()=>({enabled:f.focused()&&!z(),bindings:mY({"sidebar.nav":(X,q)=>{let Q=(q??0)%2===0;if(G()){let H=Y();if(H===void 0)return;f.onMoveRequest?.(H,Q?1:-1);return}if(Q)J.moveDown();else J.moveUp()},"sidebar.select":()=>{if(G()){f.onMoveModeExit?.();return}J.selectCurrent()},"sidebar.goto":(X)=>{if(G())return;if(X.shift)J.pressShiftG();else J.pressG()},"sidebar.delete":()=>{if(G())return;let X=Y();if(X!==void 0)f.onDeleteRequest?.(X)},"sidebar.archive":()=>{if(G())return;let X=Y();if(X!==void 0)f.onArchiveRequest?.(X)},"sidebar.localMerge":(X)=>{if(!X.shift)return;let q=Y();if(q!==void 0)f.onLocalMergeRequest?.(q)},"sidebar.rename":()=>{if(G())return;let X=Y();if(X!==void 0)f.onRenameRequest?.(X)},"sidebar.pin":(X)=>{if(G())return;if(!X.shift)return;let q=Y();if(q!==void 0)f.onPinRequest?.(q)},"sidebar.search.enter":()=>{if(G())return;f.onSearchEnter?.()},"sidebar.sort":()=>{if(G())return;f.onSortModeToggle?.()},"sidebar.projectFilter":()=>{if(G())return;f.onProjectFilterToggle?.()}})})),Uf(()=>({enabled:f.focused()&&G(),bindings:[{key:"escape",cmd:()=>f.onMoveModeExit?.()}]})),Uf(()=>({enabled:f.focused(),bindings:mY({"sidebar.view":(X,q)=>{f.onViewSwitch?.((q??0)%2===0?-1:1)}})})),Uf(()=>({enabled:f.focused()&&z(),bindings:mY({"sidebar.search.nav":(X,q)=>{if((q??0)%2===0)J.moveDown();else J.moveUp()},"sidebar.search.submit":()=>{J.selectCurrent(),f.onSearchExit?.(!0)},"sidebar.search.cancel":()=>f.onSearchExit?.(!1)})}))}var wD=k(()=>{SG();S1()});function x8(f,J){if(J<=0)return"";if(f.length<=J)return f;return`${f.slice(0,Math.max(0,J-1))}\u2026`}function w8(f,J){return` ${x8(f,Math.max(0,J))}`}function Fb(f){switch(f){case"done":return F("tasks.status.done");case"in_review":return F("tasks.status.inReview");case"in_progress":return F("tasks.status.working");case"backlog":return F("tasks.status.backlog");case"canceled":return F("tasks.status.canceled");case"error":return F("tasks.status.error")}}function Ob(f){switch(f){case"rate_limited":return{text:F("tasks.activity.rateLimited"),tone:"warning"};case"permission_needed":return{text:F("tasks.activity.permissionNeeded"),tone:"warning"};case"error":return{text:F("tasks.activity.error"),tone:"error"};default:return null}}function vD(f){switch(f.prStatus?.checkState){case"passing":return{glyph:"\u2713",tone:"success"};case"failing":return{glyph:"\u2717",tone:"error"};case"pending":return{glyph:"\u2022",tone:"warning"};default:return null}}function Ab(){return F("tasks.subtitle.noTracking")}function gb(){return F("tasks.subtitle.materializing")}function Rb(f){if(f.kind==="main")return!1;return f.vendor!==void 0&&!H1(f.vendor)}function h8(f){let{task:J}=f,Y=J.kind==="main",z=Y?f.mainBranch??"":J.branch,G=Mb[J.status],X=f.activity?.state,q=X!==void 0,Q=Cb(X),H=Ob(X),B=Rb(J)&&!q,V=f.job!==void 0,j=V||!B&&(X==="running"||f.live||!q&&!Y&&J.status==="in_progress"),U=EG[f.spinnerFrame]??EG[0],L=V?"primary":B?"textMuted":H?.tone??(j?"primary":Q?.tone??G.tone),O=B?Ab():Fb(J.status),M=V?f.truncateBranch(gb(),f.subtitleBudget):H?f.truncateBranch(H.text,f.subtitleBudget):z.length>0?f.truncateBranch(z,f.subtitleBudget):f.truncateBranch(O,f.subtitleBudget),R=B?hD:Q?.glyph??G.glyph,S=B?hD:Q?.glyph??"\u2605";return{isMain:Y,titleText:Y?MJ(J.repo):J.title,subtitleText:M,loading:j,stateGlyph:j?U:R,projectGlyph:j?U:S,tone:L}}function P8(f,J){if(!f.loading)return f;let Y=EG[J()%EG.length]??"\u280B";if(Y===f.stateGlyph&&Y===f.projectGlyph)return f;return{...f,stateGlyph:Y,projectGlyph:Y}}function Cb(f){switch(f){case"rate_limited":return{glyph:"\u25F7",tone:"warning"};case"permission_needed":return{glyph:"?",tone:"warning"};case"error":return{glyph:"\u2715",tone:"error"};case"turn_complete":return{glyph:"\u2713",tone:"primary"};default:return null}}var Mb,EG,PD=100,hD="\xB7";var mD=k(()=>{X1();U1();xQ();Mb={done:{glyph:"\u2713",tone:"success"},in_review:{glyph:"\u25D0",tone:"warning"},in_progress:{glyph:"",tone:"primary"},backlog:{glyph:"\u25CB",tone:"textMuted"},canceled:{glyph:"\u2298",tone:"textMuted"},error:{glyph:"\u2715",tone:"error"}};EG=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function v8(f){return cD.read(f)}function m8(f){cD.poll(f)}var kb=4000,Nb=60000,yb=1500,bb,cD;var nD=k(()=>{CY();lX();WG();lX();bb={added:0,deleted:0},cD=vQ({initial:bb,equals:IJ,timeoutMs:kb,slowRetryMs:Nb,minIntervalMs:yb,run:async(f,J)=>{let Y=await HJ("git",["status","--porcelain=v1"],{cwd:f,env:w1(),signal:J});if(Y.status!==0)throw Error("git status failed");return jG(Y.stdout)}})});import{TextAttributes as bf}from"@opentui/core";function Sb(f){switch(f){case"active":return F("tasks.view.workspace");case"archived":return F("tasks.view.archives")}}function iD(f,J=Tb){if(f.length<=J)return f;return`${f.slice(0,Math.max(0,J-1))}\u2026`}function ub(f){let J=0;for(let Y of f)J+=(Y.codePointAt(0)??0)>=4352?2:1;return J}function Eb(f,J){if(J<=0||f.length<=J)return f;return`\u2026${f.slice(f.length-Math.max(0,J-1))}`}function lD(f){let{theme:J}=i0(),Y=()=>f.focused?f.focused():!0,[z,G]=r("active"),[X,q]=r(!1),[Q,H]=r(""),[B,V]=r(null),j=()=>f.projectFilter?.()??B(),U=(n)=>{if(f.onProjectFilterChange)f.onProjectFilterChange(n);else V(n)};function L(){H(""),q(!0),f.onSearchActiveChange?.(!0)}function O(n){q(!1),H(""),f.onSearchActiveChange?.(!1)}Gf(()=>{if(!X())return;let n=z1();if(!n)return;let q0=(b0)=>{if(b0.defaultPrevented)return;if(!Y())return;if(b0.ctrl||b0.meta||b0.option)return;if(b0.name==="backspace"){H(($0)=>$0.slice(0,-1));return}let o0=b0.sequence;if(!o0||o0.length!==1)return;let l0=o0.charCodeAt(0);if(l0<32||l0===127)return;H(($0)=>$0+o0)};n.keyInput.on("keypress",q0),mf(()=>n.keyInput.off("keypress",q0))});let[M,R]=r(0),S=setInterval(()=>R((n)=>n+1),Ib);mf(()=>clearInterval(S));let[a,N]=r(0),g=setInterval(()=>N((n)=>(n+1)%EG.length),PD);mf(()=>clearInterval(g));let C=()=>f.sortMode?.()??"default",y=U0(()=>$4(f.tasks(),z())),_=U0(()=>{let n=j();if(!n)return null;let q0=o1(n);return y().find((b0)=>o1(b0.repo)===q0)??null}),z0=U0(()=>_()?.repo??null),t=U0(()=>_()?.label??"all"),Y0=U0(()=>{let n=_();return n?n.count:y().reduce((q0,b0)=>q0+b0.count,0)}),T=U0(()=>{let n=Y0();return`${n} ${n===1?F("tasks.project.taskSingular"):F("tasks.project.taskPlural")}`}),Q0=U0((n)=>_4(n,F8(f.tasks(),z(),X()?Q():"",C(),z0())),[]),p=U0(()=>O8(Q0())),D0=U0(()=>p4(Q0())),g0=U0(()=>D0().projectRows),$=U0(()=>D0().taskRows),E=U0(()=>{let n=new Map;for(let q0 of Q0())n.set(q0.flatIndex,q0);return n}),f0=U0(()=>O8(F8(f.tasks(),z(),"",C(),z0())).length),I=U0(()=>$().length>0);Gf(()=>{let n=j(),q0=y();if(n!==null&&q0.length>0&&(q0.length<=1||_()===null))U(null)});function G0(){let n=y();if(n.length<=1){U(null);return}let q0=z0(),b0=q0?o1(q0):null,o0=b0===null?-1:n.findIndex(($0)=>o1($0.repo)===b0),l0=n[o0+1];U(l0?.repo??null)}let x=()=>f.width?f.width():dD,c=U0(()=>Math.max(6,x()-9)),Z0=U0(()=>Math.max(6,x()-16)),V0=TJ(),H0=U0(()=>{let n=Math.max(2,Math.min(10,Math.floor(V0().height*0.25))),q0=Math.max(2,g0().length*2);return Math.min(n,q0)}),[y0,w0]=r(null),[T0,r0]=r(-1),P,M0,J0,F0=new Map;Gf(()=>{let n=f.width?f.width():dD,q0=J0;if(!q0)return;q0.width=n,q0.flexShrink=1,q0.minHeight=0}),Gf(k1([T0,Q0],([n])=>{let q0=E().get(n);if(!q0)return;let b0=q0.task.kind==="main"?P:M0;if(!b0)return;if(b0.viewport.height<=0)return;let o0=F0.get(n);if(!o0)return;b0.scrollChildIntoView(o0.id)})),Gf(k1(()=>[f.selectedId(),p()],([n,q0])=>{let b0=$f(T0);if(n===null){if(b0===-1&&q0.length>0)r0(0);else if(b0>=q0.length)r0(Math.max(0,q0.length-1));else if(q0.length===0)r0(-1);return}let o0=q0.indexOf(n);if(o0>=0){if(o0!==b0)r0(o0)}else if(q0.length===0)r0(-1);else if(b0<0||b0>=q0.length)r0(q0.length-1)})),Gf(k1(z,()=>{let n=p();r0(n.length>0?0:-1)},{defer:!0})),Gf(k1(z0,(n)=>r0(r4(Q0(),n)),{defer:!0})),Gf(k1([X,Q],()=>{if(!X())return;let n=p();r0(n.length>0?0:-1)}));function a0(n){let q0=z(),b0=aX.findIndex(($0)=>$0.view===q0);if(b0<0)return;let o0=(b0+n+aX.length)%aX.length,l0=aX[o0];if(l0)G(l0.view)}xD({focused:Y,cursorIndex:T0,setCursorIndex:r0,flatTaskIds:p,onSelect:(n)=>{f.onSelect(n),f.onActivate?.(n)},onDeleteRequest:(n)=>f.onDeleteRequest?.(n),onArchiveRequest:(n)=>f.onArchiveRequest?.(n),onLocalMergeRequest:(n)=>f.onLocalMergeRequest?.(n),moveMode:f.moveMode,onMoveRequest:(n,q0)=>f.onMoveRequest?.(n,q0),onMoveModeExit:()=>f.onMoveModeExit?.(),onRenameRequest:(n)=>f.onRenameRequest?.(n),onPinRequest:(n)=>f.onPinRequest?.(n),onViewSwitch:(n)=>a0(n),onSortModeToggle:()=>f.onSortModeToggle?.(),onProjectFilterToggle:()=>G0(),searchMode:X,onSearchEnter:()=>L(),onSearchExit:(n)=>O(n)});let p0=(n)=>(()=>{var q0=W("box"),b0=W("box"),o0=W("text"),l0=W("text");return D(q0,b0),Z(q0,"flexDirection","column"),Z(q0,"flexShrink",0),K(q0,b(X0,{get when(){return n.topPad},get children(){var $0=W("box"),t0=W("text");return D($0,t0),Z($0,"flexShrink",0),D(t0,x0(" ")),Z(t0,"wrapMode","none"),$0}}),b0),D(b0,o0),D(b0,l0),Z(b0,"flexDirection","row"),Z(b0,"flexShrink",0),Z(b0,"gap",1),Z(b0,"paddingLeft",1),Z(b0,"paddingRight",1),Z(o0,"wrapMode","none"),K(o0,()=>n.label),Z(l0,"wrapMode","none"),K(l0,()=>"\u2500".repeat(Math.max(2,x()-10-n.label.length-(n.suffix?.length??0)))),K(b0,b(X0,{get when(){return n.suffix},get children(){var $0=W("text");return Z($0,"wrapMode","none"),K($0,()=>n.suffix),u((t0)=>{var Rf=J.info,gf=bf.BOLD;return Rf!==t0.e&&(t0.e=Z($0,"fg",Rf,t0.e)),gf!==t0.t&&(t0.t=Z($0,"attributes",gf,t0.t)),t0},{e:void 0,t:void 0}),$0}}),null),u(($0)=>{var t0=J.textMuted,Rf=bf.BOLD,gf=J.border;return t0!==$0.e&&($0.e=Z(o0,"fg",t0,$0.e)),Rf!==$0.t&&($0.t=Z(o0,"attributes",Rf,$0.t)),gf!==$0.a&&($0.a=Z(l0,"fg",gf,$0.a)),$0},{e:void 0,t:void 0,a:void 0}),q0})(),u0=(n)=>{switch(n){case"success":return J.success;case"warning":return J.warning;case"primary":return J.primary;case"error":return J.error;default:return J.textMuted}},_0=(n)=>{let q0=n.row.task,b0=n.row.flatIndex,o0=()=>b0===T0(),l0=()=>q0.id===f.selectedId(),$0=U0(()=>{let A=f.chatRunState?.();if(!A)return!1;let P0=`${q0.id}:`;for(let[K0,E0]of A)if(E0==="running"&&K0.startsWith(P0))return!0;return!1}),t0=U0(()=>{let A=_q(f.worktreeChanges?.(),q0.worktreePath);if(A)return A;if(M(),!q0.archived)m8(q0.worktreePath);return v8(q0.worktreePath)},void 0,{equals:IJ}),Rf=U0(()=>{return M(),uD(q0.repo),TD(q0.repo)}),gf=U0(()=>h8({task:q0,activity:f.engineState?.().get(q0.id),job:f.taskJobs?.().get(q0.id),live:$0(),spinnerFrame:0,subtitleBudget:Z0(),truncateBranch:iD,mainBranch:Rf()})),o=U0(()=>P8(gf(),a)),e=()=>!o().loading?J.primary:u0(o().tone),B0=()=>o0()?J.focusAccent:l0()?J.primary:void 0,C0=()=>o0()||l0()?"\u258C":" ";return(()=>{var A=W("box"),P0=W("box"),K0=W("box"),E0=W("text"),W0=W("box"),L0=W("text"),R0=W("text"),Jf=W("box"),Yf=W("text"),n0=W("box"),yf=W("text");return D(A,P0),Z(A,"flexDirection","column"),Z(A,"gap",0),Z(A,"paddingBottom",0),D(P0,K0),D(P0,Jf),hY((k0)=>{F0.set(b0,k0),mf(()=>{if(F0.get(b0)===k0)F0.delete(b0)})},P0),Z(P0,"flexDirection","column"),Z(P0,"gap",0),Z(P0,"onMouseUp",()=>{if(f.onSelect(q0.id),f.activateOnClick)f.onActivate?.(q0.id)}),Z(P0,"onMouseOver",(k0)=>w0({task:q0,x:k0.x,y:k0.y})),Z(P0,"onMouseOut",()=>w0((k0)=>k0?.task.id===q0.id?null:k0)),D(K0,E0),D(K0,W0),Z(K0,"flexDirection","row"),Z(K0,"gap",0),Z(E0,"wrapMode","none"),K(E0,C0),D(W0,L0),D(W0,R0),Z(W0,"flexDirection","row"),Z(W0,"flexGrow",1),Z(W0,"paddingRight",1),Z(W0,"gap",0),Z(L0,"wrapMode","none"),K(L0,()=>o().projectGlyph),Z(R0,"wrapMode","none"),Z(R0,"flexGrow",1),K(R0,()=>w8(o().titleText,c())),D(Jf,Yf),D(Jf,n0),Z(Jf,"flexDirection","row"),Z(Jf,"gap",0),Z(Yf,"wrapMode","none"),K(Yf,C0),D(n0,yf),Z(n0,"flexDirection","row"),Z(n0,"flexGrow",1),Z(n0,"paddingLeft",2),Z(n0,"paddingRight",1),Z(n0,"gap",1),Z(yf,"wrapMode","none"),Z(yf,"flexGrow",1),K(yf,()=>o().subtitleText),K(n0,b(X0,{get when(){return t0().added>0},get children(){var k0=W("text"),wf=x0("+");return D(k0,wf),Z(k0,"wrapMode","none"),K(k0,()=>t0().added,null),u((v)=>Z(k0,"fg",J.success,v)),k0}}),null),K(n0,b(X0,{get when(){return t0().deleted>0},get children(){var k0=W("text"),wf=x0("\u2212");return D(k0,wf),Z(k0,"wrapMode","none"),K(k0,()=>t0().deleted,null),u((v)=>Z(k0,"fg",J.error,v)),k0}}),null),u((k0)=>{var wf=o0()?J.backgroundElement:void 0,v=B0(),A0=e(),Bf=bf.BOLD,Of=J.text,Qf=bf.BOLD,d=B0(),s=J.textMuted,S0=bf.DIM;return wf!==k0.e&&(k0.e=Z(P0,"backgroundColor",wf,k0.e)),v!==k0.t&&(k0.t=Z(E0,"fg",v,k0.t)),A0!==k0.a&&(k0.a=Z(L0,"fg",A0,k0.a)),Bf!==k0.o&&(k0.o=Z(L0,"attributes",Bf,k0.o)),Of!==k0.i&&(k0.i=Z(R0,"fg",Of,k0.i)),Qf!==k0.n&&(k0.n=Z(R0,"attributes",Qf,k0.n)),d!==k0.s&&(k0.s=Z(Yf,"fg",d,k0.s)),s!==k0.h&&(k0.h=Z(yf,"fg",s,k0.h)),S0!==k0.r&&(k0.r=Z(yf,"attributes",S0,k0.r)),k0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),A})()};return(()=>{var n=W("box"),q0=W("box"),b0=W("box"),o0=W("text"),l0=W("box"),$0=W("box"),t0=W("text"),Rf=W("scrollbox"),gf=W("box");return D(n,q0),D(n,l0),D(n,Rf),hY((o)=>{J0=o},n),Z(n,"flexGrow",1),Z(n,"minHeight",0),Z(n,"flexDirection","column"),Z(n,"paddingTop",1),Z(n,"paddingBottom",1),Z(n,"paddingLeft",0),Z(n,"paddingRight",0),D(q0,b0),Z(q0,"flexDirection","row"),Z(q0,"justifyContent","space-between"),Z(q0,"gap",1),Z(q0,"paddingBottom",1),Z(q0,"paddingLeft",1),Z(q0,"paddingRight",1),D(b0,o0),Z(b0,"flexDirection","row"),Z(b0,"gap",1),D(o0,x0("KOBE")),Z(o0,"wrapMode","none"),K(b0,b(X0,{get when(){return f.headerStatus?.()},children:(o)=>(()=>{var e=W("text");return Z(e,"wrapMode","none"),Z(e,"onMouseUp",()=>f.onHeaderStatusClick?.()),K(e,()=>o().label),u((B0)=>{var C0=o().emphasize?J.warning:J.textMuted,A=o().emphasize?bf.BOLD:bf.DIM;return C0!==B0.e&&(B0.e=Z(e,"fg",C0,B0.e)),A!==B0.t&&(B0.t=Z(e,"attributes",A,B0.t)),B0},{e:void 0,t:void 0}),e})()}),null),K(q0,b(X0,{get when(){return f.onAddTask},get children(){var o=W("text");return D(o,x0("[+]")),Z(o,"wrapMode","none"),Z(o,"onMouseUp",()=>f.onAddTask?.()),u((e)=>{var B0=J.primary,C0=bf.BOLD;return B0!==e.e&&(e.e=Z(o,"fg",B0,e.e)),C0!==e.t&&(e.t=Z(o,"attributes",C0,e.t)),e},{e:void 0,t:void 0}),o}}),null),K(n,b(X0,{get when(){return X()},get children(){var o=W("box"),e=W("text"),B0=W("text"),C0=W("text");return D(o,e),D(o,B0),D(o,C0),Z(o,"flexDirection","row"),Z(o,"gap",0),Z(o,"paddingBottom",1),Z(o,"paddingLeft",1),D(e,x0("/")),Z(e,"wrapMode","none"),Z(B0,"wrapMode","none"),K(B0,Q),D(C0,x0("\u2588")),Z(C0,"wrapMode","none"),K(o,b(X0,{get when(){return Q().length===0},get children(){var A=W("text"),P0=x0(" ");return D(A,P0),Z(A,"wrapMode","none"),K(A,()=>F("tasks.search.placeholder"),null),u((K0)=>Z(A,"fg",J.textMuted,K0)),A}}),null),K(o,b(X0,{get when(){return Q().length>0},get children(){var A=W("text"),P0=x0(" "),K0=x0("/");return D(A,P0),D(A,K0),Z(A,"wrapMode","none"),K(A,()=>p().length,K0),K(A,f0,null),u((E0)=>Z(A,"fg",J.textMuted,E0)),A}}),null),u((A)=>{var{info:P0,text:K0,info:E0}=J,W0=bf.BLINK;return P0!==A.e&&(A.e=Z(e,"fg",P0,A.e)),K0!==A.t&&(A.t=Z(B0,"fg",K0,A.t)),E0!==A.a&&(A.a=Z(C0,"fg",E0,A.a)),W0!==A.o&&(A.o=Z(C0,"attributes",W0,A.o)),A},{e:void 0,t:void 0,a:void 0,o:void 0}),o}}),l0),D(l0,$0),Z(l0,"flexDirection","row"),Z(l0,"justifyContent","space-between"),Z(l0,"gap",1),Z(l0,"paddingBottom",1),Z(l0,"paddingLeft",1),Z(l0,"paddingRight",1),D($0,t0),Z($0,"flexDirection","row"),Z($0,"gap",2),K($0,b(Zf,{each:aX,children:(o)=>{let e=()=>z()===o.view;return(()=>{var B0=W("text");return Z(B0,"wrapMode","none"),Z(B0,"onMouseUp",()=>G(o.view)),K(B0,()=>Sb(o.view)),u((C0)=>{var A=e()?J.primary:J.textMuted,P0=e()?bf.BOLD:void 0;return A!==C0.e&&(C0.e=Z(B0,"fg",A,C0.e)),P0!==C0.t&&(C0.t=Z(B0,"attributes",P0,C0.t)),C0},{e:void 0,t:void 0}),B0})()}}),t0),D(t0,x0("[/]")),Z(t0,"wrapMode","none"),K(l0,b(X0,{get when(){return f.sortMode},get children(){var o=W("text");return Z(o,"wrapMode","none"),Z(o,"onMouseUp",()=>f.onSortModeToggle?.()),K(o,()=>F("tasks.sort")),u((e)=>{var B0=J.textMuted,C0=bf.DIM;return B0!==e.e&&(e.e=Z(o,"fg",B0,e.e)),C0!==e.t&&(e.t=Z(o,"attributes",C0,e.t)),e},{e:void 0,t:void 0}),o}}),null),K(n,b(X0,{get when(){return g0().length>0},get children(){var o=W("box"),e=W("box"),B0=W("text"),C0=W("text"),A=W("scrollbox"),P0=W("box");return D(o,e),D(o,A),Z(o,"flexDirection","column"),Z(o,"flexShrink",0),D(e,B0),D(e,C0),Z(e,"flexDirection","row"),Z(e,"flexShrink",0),Z(e,"gap",1),Z(e,"paddingLeft",1),Z(e,"paddingRight",1),Z(e,"onMouseUp",()=>G0()),Z(B0,"wrapMode","none"),K(B0,()=>F("tasks.header.projects")),K(e,b(X0,{get when(){return y().length>1},get children(){var K0=W("text");return Z(K0,"wrapMode","none"),K(K0,t),u((E0)=>{var W0=z0()?J.primary:J.textMuted,L0=z0()?bf.BOLD:void 0;return W0!==E0.e&&(E0.e=Z(K0,"fg",W0,E0.e)),L0!==E0.t&&(E0.t=Z(K0,"attributes",L0,E0.t)),E0},{e:void 0,t:void 0}),K0}}),C0),Z(C0,"wrapMode","none"),K(C0,()=>"\u2500".repeat(Math.max(2,x()-10-F("tasks.header.projects").length-(y().length>1?t().length+1:0)-(y().length>1?T().length+1:0)))),K(e,b(X0,{get when(){return y().length>1},get children(){var K0=W("text");return Z(K0,"wrapMode","none"),K(K0,T),u((E0)=>{var W0=J.textMuted,L0=bf.DIM;return W0!==E0.e&&(E0.e=Z(K0,"fg",W0,E0.e)),L0!==E0.t&&(E0.t=Z(K0,"attributes",L0,E0.t)),E0},{e:void 0,t:void 0}),K0}}),null),D(A,P0),hY((K0)=>{P=K0},A),Z(A,"flexShrink",0),Z(A,"flexGrow",0),Z(A,"minHeight",0),Z(A,"stickyScroll",!1),Z(A,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),Z(P0,"flexShrink",0),Z(P0,"gap",0),Z(P0,"paddingRight",1),K(P0,b(Zf,{get each(){return g0()},children:(K0)=>b(_0,{row:K0})})),u((K0)=>{var E0=J.textMuted,W0=bf.BOLD,L0=J.border,R0=H0();return E0!==K0.e&&(K0.e=Z(B0,"fg",E0,K0.e)),W0!==K0.t&&(K0.t=Z(B0,"attributes",W0,K0.t)),L0!==K0.a&&(K0.a=Z(C0,"fg",L0,K0.a)),R0!==K0.o&&(K0.o=Z(A,"maxHeight",R0,K0.o)),K0},{e:void 0,t:void 0,a:void 0,o:void 0}),o}}),Rf),K(n,b(p0,{get label(){return F("tasks.header.tasks")},get suffix(){return I0(()=>C()==="default")()?void 0:C()},get topPad(){return g0().length>0}}),Rf),D(Rf,gf),hY((o)=>{M0=o},Rf),Z(Rf,"flexGrow",1),Z(Rf,"minHeight",0),Z(Rf,"stickyScroll",!1),Z(Rf,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),Z(gf,"flexShrink",0),Z(gf,"gap",0),Z(gf,"paddingRight",1),K(gf,b(Zf,{get each(){return $()},children:(o)=>{let{task:e,flatIndex:B0}=o,C0=()=>B0===T0(),A=()=>e.id===f.selectedId(),P0=U0(()=>{let Yf=f.chatRunState?.();if(!Yf)return!1;let n0=`${e.id}:`;for(let[yf,k0]of Yf)if(k0==="running"&&yf.startsWith(n0))return!0;return!1}),K0=U0(()=>{let Yf=_q(f.worktreeChanges?.(),e.worktreePath);if(Yf)return Yf;if(M(),!e.archived)m8(e.worktreePath);return v8(e.worktreePath)},void 0,{equals:IJ}),E0=U0(()=>h8({task:e,activity:f.engineState?.().get(e.id),job:f.taskJobs?.().get(e.id),live:P0(),spinnerFrame:0,subtitleBudget:Z0(),truncateBranch:iD,mainBranch:""})),W0=U0(()=>P8(E0(),a)),L0=()=>u0(W0().tone),R0=()=>C0()?J.focusAccent:A()?J.primary:void 0,Jf=()=>C0()||A()?"\u258C":" ";return(()=>{var Yf=W("box"),n0=W("box"),yf=W("box"),k0=W("text"),wf=W("box"),v=W("text"),A0=W("text"),Bf=W("box"),Of=W("text"),Qf=W("box"),d=W("text");return D(Yf,n0),Z(Yf,"flexDirection","column"),Z(Yf,"gap",0),Z(Yf,"paddingBottom",1),D(n0,yf),D(n0,Bf),hY((s)=>{F0.set(B0,s),mf(()=>{if(F0.get(B0)===s)F0.delete(B0)})},n0),Z(n0,"flexDirection","column"),Z(n0,"gap",0),Z(n0,"onMouseUp",()=>{if(f.onSelect(e.id),f.activateOnClick)f.onActivate?.(e.id)}),Z(n0,"onMouseOver",(s)=>w0({task:e,x:s.x,y:s.y})),Z(n0,"onMouseOut",()=>w0((s)=>s?.task.id===e.id?null:s)),D(yf,k0),D(yf,wf),Z(yf,"flexDirection","row"),Z(yf,"gap",0),Z(k0,"wrapMode","none"),K(k0,Jf),D(wf,v),D(wf,A0),Z(wf,"flexDirection","row"),Z(wf,"flexGrow",1),Z(wf,"paddingRight",1),Z(wf,"gap",0),Z(v,"wrapMode","none"),K(v,()=>W0().stateGlyph),Z(A0,"wrapMode","none"),Z(A0,"flexGrow",1),K(A0,()=>w8(W0().titleText,c())),K(wf,b(X0,{get when(){return I0(()=>!!f.moveMode?.())()&&C0()},get children(){var s=W("text");return Z(s,"wrapMode","none"),K(s,()=>F("tasks.moveChip")),u((S0)=>Z(s,"fg",J.warning,S0)),s}}),null),D(Bf,Of),D(Bf,Qf),Z(Bf,"flexDirection","row"),Z(Bf,"gap",0),Z(Of,"wrapMode","none"),K(Of,Jf),D(Qf,d),Z(Qf,"flexDirection","row"),Z(Qf,"flexGrow",1),Z(Qf,"paddingLeft",2),Z(Qf,"paddingRight",1),Z(Qf,"gap",1),Z(d,"wrapMode","none"),Z(d,"flexGrow",1),K(d,()=>W0().subtitleText),K(Qf,b(X0,{get when(){return e.pinned===!0},get children(){var s=W("text");return D(s,x0("\u25B4")),Z(s,"wrapMode","none"),u((S0)=>Z(s,"fg",J.warning,S0)),s}}),null),K(Qf,b(X0,{get when(){return vD(e)},children:(s)=>(()=>{var S0=W("text");return Z(S0,"wrapMode","none"),K(S0,()=>s().glyph),u((N0)=>Z(S0,"fg",u0(s().tone),N0)),S0})()}),null),K(Qf,b(X0,{get when(){return K0().added>0},get children(){var s=W("text"),S0=x0("+");return D(s,S0),Z(s,"wrapMode","none"),K(s,()=>K0().added,null),u((N0)=>Z(s,"fg",J.success,N0)),s}}),null),K(Qf,b(X0,{get when(){return K0().deleted>0},get children(){var s=W("text"),S0=x0("\u2212");return D(s,S0),Z(s,"wrapMode","none"),K(s,()=>K0().deleted,null),u((N0)=>Z(s,"fg",J.error,N0)),s}}),null),u((s)=>{var S0=C0()?J.backgroundElement:void 0,N0=R0(),q1=L0(),K1=bf.BOLD,tf=J.text,m1=A()||C0()?bf.BOLD:void 0,xJ=R0(),F1=J.textMuted,wJ=bf.DIM;return S0!==s.e&&(s.e=Z(n0,"backgroundColor",S0,s.e)),N0!==s.t&&(s.t=Z(k0,"fg",N0,s.t)),q1!==s.a&&(s.a=Z(v,"fg",q1,s.a)),K1!==s.o&&(s.o=Z(v,"attributes",K1,s.o)),tf!==s.i&&(s.i=Z(A0,"fg",tf,s.i)),m1!==s.n&&(s.n=Z(A0,"attributes",m1,s.n)),xJ!==s.s&&(s.s=Z(Of,"fg",xJ,s.s)),F1!==s.h&&(s.h=Z(d,"fg",F1,s.h)),wJ!==s.r&&(s.r=Z(d,"attributes",wJ,s.r)),s},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),Yf})()}}),null),K(gf,b(X0,{get when(){return p().length===0},get children(){var o=W("box"),e=W("text");return D(o,e),Z(o,"paddingTop",1),Z(o,"paddingLeft",1),K(e,(()=>{var B0=I0(()=>!!(X()&&Q().trim().length>0));return()=>B0()?F("tasks.empty.noMatchSearch"):I0(()=>!!z0())()?I0(()=>z()==="active")()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject"):I0(()=>z()==="active")()?F("tasks.empty.noActive"):F("tasks.empty.noArchived")})()),u((B0)=>Z(e,"fg",J.textMuted,B0)),o}}),null),K(gf,b(X0,{get when(){return I0(()=>!!(z0()&&p().length>0&&!I()))()&&!(X()&&Q().trim().length>0)},get children(){var o=W("box"),e=W("text");return D(o,e),Z(o,"paddingTop",1),Z(o,"paddingLeft",1),Z(e,"wrapMode","none"),K(e,(()=>{var B0=I0(()=>z()==="active");return()=>B0()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject")})()),u((B0)=>{var C0=J.textMuted,A=bf.DIM;return C0!==B0.e&&(B0.e=Z(e,"fg",C0,B0.e)),A!==B0.t&&(B0.t=Z(e,"attributes",A,B0.t)),B0},{e:void 0,t:void 0}),o}}),null),K(gf,b(X0,{get when(){return I0(()=>z()==="archived")()&&p().length>0},get children(){var o=W("box"),e=W("text");return D(o,e),Z(o,"paddingTop",1),Z(o,"paddingLeft",1),Z(e,"wrapMode","none"),K(e,()=>F("tasks.archiveHint")),u((B0)=>{var C0=J.textMuted,A=bf.DIM;return C0!==B0.e&&(B0.e=Z(e,"fg",C0,B0.e)),A!==B0.t&&(B0.t=Z(e,"attributes",A,B0.t)),B0},{e:void 0,t:void 0}),o}}),null),K(n,b(X0,{get when(){return f.zenActive?.()},get children(){var o=W("box"),e=W("text");return D(o,e),Z(o,"flexShrink",0),Z(o,"paddingLeft",1),Z(o,"paddingRight",1),Z(o,"paddingTop",1),D(e,x0("\u262F ZEN")),Z(e,"wrapMode","none"),u((B0)=>{var C0=J.accent,A=bf.BOLD;return C0!==B0.e&&(B0.e=Z(e,"fg",C0,B0.e)),A!==B0.t&&(B0.t=Z(e,"attributes",A,B0.t)),B0},{e:void 0,t:void 0}),o}}),null),K(n,b(X0,{get when(){return y0()},children:(o)=>{let e=U0(()=>{let W0=o().task,L0=[];if(L0.push({text:W0.kind==="main"?MJ(W0.repo):W0.title,bold:!0}),W0.branch.length>0)L0.push({text:`\u2387 ${W0.branch}`});if(W0.worktreePath.length>0)L0.push({text:W0.worktreePath,dim:!0});return L0}),B0=72,C0=U0(()=>Math.min(68,Math.max(...e().map((W0)=>ub(W0.text))))),A=U0(()=>C0()+4),P0=U0(()=>e().length+2),K0=U0(()=>Math.max(0,Math.min(o().x+2,V0().width-A()-1))),E0=U0(()=>Math.max(0,Math.min(o().y+1,V0().height-P0()-1)));return(()=>{var W0=W("box");return Z(W0,"position","absolute"),Z(W0,"zIndex",2600),Z(W0,"flexDirection","column"),Z(W0,"border",!0),Z(W0,"paddingLeft",1),Z(W0,"paddingRight",1),K(W0,b(Zf,{get each(){return e()},children:(L0)=>(()=>{var R0=W("text");return Z(R0,"wrapMode","none"),K(R0,(()=>{var Jf=I0(()=>!!L0.dim);return()=>Jf()?Eb(L0.text,C0()):x8(L0.text,C0())})()),u((Jf)=>{var Yf=L0.dim?J.textMuted:J.text,n0=L0.bold?bf.BOLD:L0.dim?bf.DIM:void 0;return Yf!==Jf.e&&(Jf.e=Z(R0,"fg",Yf,Jf.e)),n0!==Jf.t&&(Jf.t=Z(R0,"attributes",n0,Jf.t)),Jf},{e:void 0,t:void 0}),R0})()})),u((L0)=>{var R0=K0(),Jf=E0(),Yf=A(),n0=J.focusAccent,yf=J.backgroundElement;return R0!==L0.e&&(L0.e=Z(W0,"left",R0,L0.e)),Jf!==L0.t&&(L0.t=Z(W0,"top",Jf,L0.t)),Yf!==L0.a&&(L0.a=Z(W0,"width",Yf,L0.a)),n0!==L0.o&&(L0.o=Z(W0,"borderColor",n0,L0.o)),yf!==L0.i&&(L0.i=Z(W0,"backgroundColor",yf,L0.i)),L0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),W0})()}}),null),u((o)=>{var e=Y()?J.focusAccent:J.textMuted,B0=bf.BOLD,C0=J.textMuted,A=bf.DIM;return e!==o.e&&(o.e=Z(o0,"fg",e,o.e)),B0!==o.t&&(o.t=Z(o0,"attributes",B0,o.t)),C0!==o.a&&(o.a=Z(t0,"fg",C0,o.a)),A!==o.o&&(o.o=Z(t0,"attributes",A,o.o)),o},{e:void 0,t:void 0,a:void 0,o:void 0}),n})()}var dD=32,aX,Ib=2000,Tb=16;var aD=k(()=>{h();h();h();h();h();h();h();h();h();X1();h();Wf();xf();xf();ED();xQ();wD();mD();WG();nD();aX=[{view:"active"},{view:"archived"}]});var oD={};jf(oD,{startTasksPane:()=>vb,legendRowCap:()=>_D,legendCap:()=>pD});import{existsSync as $D}from"fs";import{stat as xb}from"fs/promises";import{TextAttributes as mQ}from"@opentui/core";function c8(f){return!!f&&iZ(f)}function rD(f){let J=f instanceof Error?f.message:String(f);if(/not a git repository/i.test(J))return F("tasks.toast.worktreeErrorNotGit");return F("tasks.toast.worktreeErrorGeneric",{message:J})}function hb(f){let{theme:J}=i0(),Y=vf(),z=IG(),G=bQ(),[X,q]=r(f.tasks().some((P)=>P.id===f.initialTaskId)?f.initialTaskId:f.tasks()[0]?.id??null);function Q(P){G.notify({kind:"error",taskId:X()??"",tabId:"",title:P})}function H(P){G.notify({kind:"done",taskId:X()??"",tabId:"",title:P})}let[B,V]=r(!1),[j,U]=r(z.get("activeSortMode")==="recent"?"recent":"default"),L=z.get("tasksPane.projectFilter"),[O,M]=r(typeof L==="string"&&L.length>0?L:null),R=(P)=>{M(P),z.set("tasksPane.projectFilter",P)},[S,a]=r(null),[N,g]=r(!1);{let P=process.env.TMUX_PANE;if(P){let M0=()=>{d0(["show-options","-wqv","-t",P,WY]).then(({code:F0,stdout:a0})=>{g(F0===0&&a0.trim().length>0)})};M0();let J0=setInterval(M0,1000);mf(()=>clearInterval(J0))}}let C=TJ(),y=!f.initialTaskId;Gf(()=>{let P=f.orch?.activeTaskSignal()();if(!P)return;if(!y){if(P!==f.initialTaskId)return;y=!0}q(P)}),Gf(k1(()=>f.orch?.uiPrefsSignal()(),(P)=>{if(P&&P.sortMode!==$f(j))U(P.sortMode);if(P&&P.projectFilter!==$f(O))M(P.projectFilter)})),Gf(()=>{let P=f.orch?.updateSignal()();if(P)a(P)});let _={orch:f.orch,tasks:()=>f.tasks(),confirm:async(P)=>await GY.show(Y,P.title,P.body,P.cancelLabel,P.confirmLabel)===!0,promptText:(P,M0)=>zY.show(Y,P,M0),logger:console,logPrefix:"[kobe tasks]",notifyError:Q,notifyInfo:H,reload:()=>f.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(P,M0)=>{if(X()!==P)return;let J0=f.tasks();q(M0?.id??(J0.find((F0)=>!F0.archived)??J0[0])?.id??null)},promptNewTask:(P,M0,J0)=>gQ.show(Y,P,M0,J0),cursorRepo:()=>{let P=f.tasks();return(P.find((M0)=>M0.id===X())??P[0])?.repo},lastVendor:()=>kf("lastSelectedVendor"),rememberVendor:(P)=>af("lastSelectedVendor",P),openCreateSurface:async(P)=>{if(Lz(z.get(oJ,Dz))!=="chattab")return!1;let J0=await y1();if(!J0)return!1;return await dq(J0,P),!0},selectTask:(P)=>q(P),enterTask:(P)=>H0(P)};async function z0(){await CD(_)}async function t(){if(Lz(z.get(oJ,Dz))==="chattab"){let J0=await y1();if(J0){await cq(J0);return}}if(!(await Tz.show(Y,z,f.orch??void 0)).visualPrefsChanged)return;if(!z.flush())return;try{let J0=await y1();if(J0)await HG(J0)}catch(J0){console.error("[kobe tasks] failed to refresh workspace panes:",J0)}}async function Y0(){let P=await y1();if(P){await nq(P);return}uG.show(Y)}async function T(){if(!S()?.hasUpdate){H(F("tasks.toast.alreadyLatest",{version:s0}));return}let M0=await y1();if(!M0)return;await iq(M0)}async function Q0(P){await FD(_,P)}async function p(P){await OD(_,P)}async function D0(P){await AD(_,P)}async function g0(P){await gD(_,P)}async function $(P){await RD(_,P)}async function E(P){let J0=f.tasks().find((a0)=>a0.id===P)?.worktreePath;if(!J0||!$D(J0)){if(!f.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),Q(F("tasks.toast.noDaemonWorktree"));return}try{J0=await f.orch.ensureWorktree(P)}catch(a0){console.error("[kobe tasks] task.ensureWorktree failed:",a0),Q(rD(a0));return}await f.reload()}if(!J0||!$D(J0))return;let F0=ND();if(!F0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),Q(F("tasks.toast.noEditor"));return}if(!yD(J0,F0))console.error(`[kobe tasks] failed to open worktree with ${F0.label}`),Q(F("tasks.toast.openWorktreeFailed",{label:F0.label}))}async function f0(){if(!process.env.TMUX_PANE)return;let P=await y1();if(!P)return;let M0=await az(P);if(!M0)return;await h0(["select-pane","-t",M0])}async function I(P,M0){let J0=f.tasks().find((F0)=>F0.id===P);if(!J0||J0.kind==="main"||!f.orch)return;try{await f.orch.moveTask(P,M0)}catch(F0){console.error("[kobe tasks] task.move failed:",F0),Q(F("tasks.toast.moveTaskFailed",{message:F0 instanceof Error?F0.message:String(F0)}));return}q(P),await f.reload()}let[G0,x]=r(z.get("tasksPane.keysCollapsed",!1)===!0),c=(P)=>{x(P),z.set("tasksPane.keysCollapsed",P)};Gf(k1(()=>f.orch?.uiPrefsSignal()(),(P)=>{if(P&&P.keysCollapsed!==$f(G0))x(P.keysCollapsed)}));let[Z0,V0]=r(!1);Uf(()=>({enabled:Y.stack.length===0&&!Z0(),bindings:mY({"help.open":()=>void Y0(),"task.new":()=>void z0(),"settings.open.sidebar":()=>void t(),"tasks.update":()=>void T(),"tasks.openWorktree":()=>{let P=X();if(P)E(P)},"tasks.renameBranch":()=>{let P=X();if(P)g0(P)},"tasks.cycleEngine":()=>{let P=X();if(P)$(P)},"tasks.toggleKeys":()=>c(!G0()),"tasks.focusEngine":()=>void f0().catch((P)=>console.error("[kobe tasks] focus engine pane failed:",P))})}));async function H0(P){let M0=Lf(P),J0=f.tasks().find((n)=>n.id===P),F0=await y1();if(F0&&F0!==M0)await UX(F0);if(await Hf(M0)){let n=await Bz(M0,"@kobe_worktree")||J0?.worktreePath||"";if(c8(n)){let q0=J0?.repo?sJ(J0.repo,n,{kind:"repo-init"}):void 0;await SY({name:M0,cwd:n,command:b1(J0?.vendor),taskId:P,vendor:J0?.vendor,repo:J0?.repo,launchInit:q0})}await $q(M0),await h0(["switch-client","-t",`=${M0}`]),f.orch?.setActiveTask(P).catch(()=>{});return}let p0=J0?.worktreePath;if(!c8(p0)){if(!f.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),Q(F("tasks.toast.noDaemonOpen"));return}try{p0=await f.orch.ensureWorktree(P)}catch(n){console.error("[kobe tasks] task.ensureWorktree failed:",n),Q(rD(n));return}await f.reload()}if(!c8(p0))return;let u0=J0?.repo?sJ(J0.repo,p0,{kind:"repo-init"}):void 0;if(!await SY({name:M0,cwd:p0,command:b1(J0?.vendor),taskId:P,vendor:J0?.vendor,repo:J0?.repo,launchInit:u0})){console.error(`[kobe tasks] failed to start session ${M0}`),Q(F("tasks.toast.sessionStartFailed"));return}await $q(M0),await h0(["switch-client","-t",`=${M0}`]),f.orch?.setActiveTask(P).catch(()=>{})}let y0=U0(()=>{let P=S();if(P?.hasUpdate)return{label:`v${P.latest} \u2191`,emphasize:!0};return{label:`v${s0}`,emphasize:!1}}),w0=()=>f.orch?.daemonStaleSignal()()??!1,T0=()=>f.orch?.daemonVersionSignal()()??null,r0=U0(()=>f.tasks().find((P)=>P.id===X())?.kind==="main");return(()=>{var P=W("box"),M0=W("box");return D(P,M0),Z(P,"flexDirection","column"),Z(P,"flexGrow",1),K(P,b(DD,{stale:w0,daemonVersion:T0,clientVersion:s0,width:()=>C().width}),M0),Z(M0,"flexGrow",1),Z(M0,"flexShrink",1),K(M0,b(lD,{get tasks(){return f.tasks},selectedId:X,onSelect:q,onActivate:(J0)=>void H0(J0),activateOnClick:!0,headerStatus:y0,onHeaderStatusClick:()=>void T(),onAddTask:()=>void z0(),zenActive:N,width:()=>C().width,get engineState(){return I0(()=>!!f.orch)()?f.orch.engineStateSignal():void 0},get taskJobs(){return I0(()=>!!f.orch)()?f.orch.taskJobsSignal():void 0},get worktreeChanges(){return f.orch?()=>{let J0=f.orch;if(!J0||J0.connectionStateSignal()()!=="online")return null;return J0.worktreeChangesSignal()()}:void 0},onRenameRequest:(J0)=>void D0(J0),onDeleteRequest:(J0)=>void p(J0),onArchiveRequest:(J0)=>void Q0(J0),onLocalMergeRequest:(J0)=>{let F0=f.tasks().find((a0)=>a0.id===J0);if(!F0||F0.kind==="main")return;q(J0),V((a0)=>!a0)},moveMode:B,onMoveRequest:(J0,F0)=>void I(J0,F0),onMoveModeExit:()=>V(!1),sortMode:j,projectFilter:O,onProjectFilterChange:R,onSortModeToggle:()=>{let J0=j()==="default"?"recent":"default";U(J0),z.set("activeSortMode",J0)},focused:()=>Y.stack.length===0,onSearchActiveChange:V0})),K(P,b(Pb,{moveMode:B,selectedIsMain:r0,collapsed:G0,onToggleCollapsed:()=>c(!G0())}),null),u((J0)=>Z(P,"backgroundColor",J.background,J0)),P})()}function pD(f){let J=j8(f);if(!J)return null;let Y=J.hint?.keys??J.keys[0];return Y&&Y.length>0?Y:null}function _D(f){let J=f.map(pD).filter((Y)=>Y!==null);return J.length>0?J.join("/"):null}function Pb(f){let{theme:J}=i0(),[Y,z]=r("Prefix");J1(()=>{d0(["show-options","-g","prefix"]).then(({code:U,stdout:L})=>{if(U!==0)return;let O=hQ(L);if(O)z(O)})});let G=()=>{B8();let U=Aq(),L=U.binds,O=[],M=U.focus.filter((S)=>S!==null).map((S)=>S.chord);if(M.length===4&&M.every((S,a)=>S===kY[a]))O.push({k:"ctrl+hjkl",label:F("tasks.hints.movePanes")});else if(M.length>0)O.push({k:M[0],label:F("tasks.hints.movePanes")});let R=(S,a)=>{let N=a.map((g)=>L[g]?.chord).filter((g)=>!!g);if(N.length>0)O.push({k:`prefix ${N.join("/")}`,label:S})};if(L["tmux.detach"])O.push({k:L["tmux.detach"].chord,label:F("tasks.hints.detach")});return R(F("tasks.hints.splits"),["tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"]),R(F("tasks.hints.panes"),["tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle"]),O},X=()=>{B8();let U=[{ids:["help.open"],label:F("tasks.hints.fullHelp")},{ids:["task.new"],label:F("tasks.hints.newTask")},{ids:["settings.open.sidebar"],label:F("tasks.hints.settings")},{ids:["sidebar.select"],label:F("tasks.hints.open")},{ids:["tasks.focusEngine"],label:F("tasks.hints.focusEngine")},{ids:["tasks.openWorktree"],label:F("tasks.hints.openWorktree")},{ids:["sidebar.delete"],label:F("tasks.hints.delete")},{ids:["sidebar.view"],label:F("tasks.hints.views")},{ids:["sidebar.projectFilter"],label:F("tasks.hints.project")}],L=[];for(let O of U){let M=_D(O.ids);if(M===null)continue;L.push({k:M,label:O.label,dimWhenMain:O.dimWhenMain})}return L.push(...G()),L},q=()=>[{k:"j/k",label:F("tasks.hints.reorder")},{k:"enter/esc",label:F("tasks.hints.done")}],Q=()=>f.moveMode?.()?q():X(),H=18,B=()=>Math.min(H,Math.max(...Q().map((U)=>U.label.length))),V=(U)=>U.length<=B()?U:`${U.slice(0,Math.max(0,B()-1))}\u2026`,j=()=>(f.collapsed?.()??!1)&&!(f.moveMode?.()??!1);return(()=>{var U=W("box"),L=W("text");return D(U,L),Z(U,"flexShrink",0),Z(U,"flexDirection","column"),Z(U,"paddingLeft",1),Z(U,"paddingRight",1),Z(U,"paddingTop",1),Z(U,"paddingBottom",1),Z(U,"gap",0),Z(L,"wrapMode","none"),Z(L,"onMouseUp",()=>f.onToggleCollapsed?.()),K(L,(()=>{var O=I0(()=>!!j());return()=>O()?F("tasks.hints.headerFolded"):F("tasks.hints.headerUnfolded")})()),K(U,b(X0,{get when(){return!j()},get children(){return b(Zf,{get each(){return Q()},children:(O)=>{let M=()=>O.dimWhenMain===!0&&(f.selectedIsMain?.()??!1);return(()=>{var R=W("box"),S=W("box"),a=W("text"),N=x0("["),g=x0("]"),C=W("box"),y=W("text");return D(R,S),D(R,C),Z(R,"flexDirection","row"),Z(R,"gap",1),Z(R,"justifyContent","space-between"),D(S,a),Z(S,"width",10),Z(S,"flexShrink",0),D(a,N),D(a,g),Z(a,"wrapMode","none"),K(a,()=>TG(O.k,Y()),g),D(C,y),Z(C,"flexShrink",0),Z(y,"wrapMode","none"),K(y,()=>V(O.label)),u((_)=>{var z0=M()?J.textMuted:J.accent,t=M()?mQ.DIM:mQ.BOLD,Y0=B(),T=J.textMuted,Q0=M()?mQ.DIM:void 0;return z0!==_.e&&(_.e=Z(a,"fg",z0,_.e)),t!==_.t&&(_.t=Z(a,"attributes",t,_.t)),Y0!==_.a&&(_.a=Z(C,"width",Y0,_.a)),T!==_.o&&(_.o=Z(y,"fg",T,_.o)),Q0!==_.i&&(_.i=Z(y,"attributes",Q0,_.i)),_},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),R})()}})}}),null),u((O)=>{var M=J.textMuted,R=mQ.DIM;return M!==O.e&&(O.e=Z(L,"fg",M,O.e)),R!==O.t&&(O.t=Z(L,"attributes",R,O.t)),O},{e:void 0,t:void 0}),U})()}async function vb(f={}){await M1({logContext:"tasks",providers:{notifications:!0},setup:()=>mb(f)})}async function mb(f){let J=new DG({homeDir:OJ()});await J.load();let[Y,z]=r(J.list()),G=null;try{let B=await p1();if(B){let V=new W1(B);await V.init(),G=V}else dJ("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(B){HY("tasks-boot",B),dJ("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let X=()=>G&&G.connectionStateSignal()()==="online"?G.tasksSignal()():Y(),q=async()=>{await J.load(),z(J.list())},Q="",H=setInterval(()=>{if(G&&G.connectionStateSignal()()==="online")return;(async()=>{let B="missing";try{let V=await xb(J.filePath);B=`${V.mtimeMs}:${V.size}`}catch{}if(B===Q)return;Q=B,await q()})().catch(()=>{})},wb);return{root:()=>[b(hb,{tasks:X,get initialTaskId(){return f.initialTaskId},orch:G,reload:q}),b(KD,{})],onDestroy:()=>{if(H)clearInterval(H);G?.dispose()}}}var wb=1500;var sD=k(()=>{h();h();h();h();h();h();h();h();Tf();zJ();X1();h();sY();L1();Wf();PY();x1();lf();ZJ();OX();zG();Af();gq();D1();g8();bG();R8();T8();UD();LD();SG();cX();SQ();xf();A8();nY();S1();kD();bD();aD();Y1();v1();C8()});var tD={};jf(tD,{startSettingsHost:()=>nb});function cb(f){let J=IG(),Y=vf(),{theme:z}=i0(),G=!1,X=!1;async function q(){if(X)return;X=!0;try{if(J.flush()&&G){let H=await y1();if(H)await HG(H)}}catch(Q){console.error("[kobe settings] failed to refresh workspace panes:",Q)}finally{process.exit(0)}}return Uf(()=>({enabled:Y.stack.length===0,bindings:[{key:"escape",cmd:q},{key:"q",cmd:q},{key:"ctrl+c",cmd:q}]})),(()=>{var Q=W("scrollbox");return Z(Q,"flexGrow",1),Z(Q,"paddingTop",1),Z(Q,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),K(Q,b(Tz,{kv:J,get orchestrator(){return f.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{G=!0},onClose:q})),u((H)=>Z(Q,"backgroundColor",z.background,H)),Q})()}async function nb(){await M1({setup:async()=>{let f=null;try{let J=await p1();if(J){let Y=new W1(J);await Y.init(),f=Y}else console.error("[kobe settings] no daemon running; Restart backend disabled")}catch(J){console.error("[kobe settings] daemon unavailable; Restart backend disabled:",J)}return{root:()=>b(cb,{orchestrator:f}),onDestroy:()=>{f?.dispose()}}}})}var eD=k(()=>{h();h();h();h();h();h();L1();PY();T8();cX();xf();nY();S1();Y1();v1()});var fL={};jf(fL,{startHelpHost:()=>ib});function db(){let f=vf(),{theme:J}=i0();function Y(){process.exit(0)}return Uf(()=>({enabled:f.stack.length===0,bindings:[{key:"escape",cmd:Y},{key:"q",cmd:Y},{key:"f1",cmd:Y},{key:"ctrl+c",cmd:Y}]})),(()=>{var z=W("box");return Z(z,"flexGrow",1),Z(z,"paddingTop",1),K(z,b(uG,{onClose:Y})),u((G)=>Z(z,"backgroundColor",J.background,G)),z})()}async function ib(){await M1({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(db,{})})})}var JL=k(()=>{h();h();h();h();h();g8();xf();nY();S1();v1()});var YL={};jf(YL,{startUpdateHost:()=>ob});import{spawn as lb,spawnSync as ab}from"child_process";import{TextAttributes as xG}from"@opentui/core";function $b(f){if(!f)return!1;let J=process.platform,[Y,z]=J==="darwin"?["open",[f]]:J==="win32"?["cmd",["/c","start","",f]]:["xdg-open",[f]];try{return lb(Y,z,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function rb(f){return f.replace(/\r\n/g,`
226
226
  `).split(`
227
- `).map((J)=>J.trim()).filter(Boolean)}function $b(){if(!process.stdin.isTTY)return Promise.resolve();return new Promise((f)=>{let J=process.stdin,Y=()=>{J.off("data",Y),J.setRawMode?.(!1),J.pause(),f()};J.setRawMode?.(!0),J.resume(),J.once("data",Y)})}function rb(){let{theme:f}=i0(),J=Y1(),[Y,z]=r(null),[G,X]=r([]),[q,Q]=r(!0),[H,B]=r("update"),[V,j]=r(null),U=U0(()=>Y()?.latest??s0),L=U0(()=>G()[0]?.url??aQ(U())),O=U0(()=>[{id:"update",key:"U",label:F("update.actions.updateNow"),detail:hJ},{id:"release",key:"R",label:F("update.actions.openRelease"),detail:L()??F("update.releaseUrlUnavailable")},{id:"close",key:"Q",label:F("update.actions.close"),detail:F("update.actions.closeDetail")}]);f1(()=>{M()});async function M(){let N=await wG({force:!0});z(N);let g=N?.latest??s0,C=await lQ({current:s0,latest:g});X(C),Q(!1)}function R(N){let g=O().map((_)=>_.id),y=(g.indexOf(H())+N+g.length)%g.length;B(g[y]??"update")}function S(N=H()){if(N==="close")process.exit(0);if(N==="release"){j(lb(L())?F("update.statusReleaseOpened"):F("update.statusReleaseError"));return}a()}async function a(){j(F("update.statusRunningUpdater")),await new Promise((C)=>setTimeout(C,30)),J?.destroy(),process.stdout.write(`
227
+ `).map((J)=>J.trim()).filter(Boolean)}function pb(){if(!process.stdin.isTTY)return Promise.resolve();return new Promise((f)=>{let J=process.stdin,Y=()=>{J.off("data",Y),J.setRawMode?.(!1),J.pause(),f()};J.setRawMode?.(!0),J.resume(),J.once("data",Y)})}function _b(){let{theme:f}=i0(),J=z1(),[Y,z]=r(null),[G,X]=r([]),[q,Q]=r(!0),[H,B]=r("update"),[V,j]=r(null),U=U0(()=>Y()?.latest??s0),L=U0(()=>G()[0]?.url??pQ(U())),O=U0(()=>[{id:"update",key:"U",label:F("update.actions.updateNow"),detail:hJ},{id:"release",key:"R",label:F("update.actions.openRelease"),detail:L()??F("update.releaseUrlUnavailable")},{id:"close",key:"Q",label:F("update.actions.close"),detail:F("update.actions.closeDetail")}]);J1(()=>{M()});async function M(){let N=await wG({force:!0});z(N);let g=N?.latest??s0,C=await rQ({current:s0,latest:g});X(C),Q(!1)}function R(N){let g=O().map((_)=>_.id),y=(g.indexOf(H())+N+g.length)%g.length;B(g[y]??"update")}function S(N=H()){if(N==="close")process.exit(0);if(N==="release"){j($b(L())?F("update.statusReleaseOpened"):F("update.statusReleaseError"));return}a()}async function a(){j(F("update.statusRunningUpdater")),await new Promise((C)=>setTimeout(C,30)),J?.destroy(),process.stdout.write(`
228
228
  kobe ${s0} -> latest
229
229
  `),process.stdout.write(`running: ${hJ}
230
230
 
231
- `);let N=ib("sh",["-c",hJ],{stdio:"inherit"}),g=N.status??(N.error?1:0);if(N.error)process.stderr.write(`
231
+ `);let N=ab("sh",["-c",hJ],{stdio:"inherit"}),g=N.status??(N.error?1:0);if(N.error)process.stderr.write(`
232
232
  kobe update: failed to start updater: ${N.error.message}
233
233
  `);process.stdout.write(g===0?`
234
234
  ${F("update.updateComplete")}
235
235
  `:`
236
236
  ${F("update.updateFailed",{code:String(g)})}
237
- `),process.stdout.write(F("update.pressAnyKey")),await $b(),process.exit(g)}return Uf(()=>({bindings:[{key:"up",cmd:()=>R(-1)},{key:"down",cmd:()=>R(1)},{key:"k",cmd:()=>R(-1)},{key:"j",cmd:()=>R(1)},{key:"return",cmd:()=>S()},{key:"u",cmd:()=>S("update")},{key:"r",cmd:()=>S("release")},{key:"q",cmd:()=>S("close")},{key:"escape",cmd:()=>S("close")},{key:"ctrl+c",cmd:()=>S("close")}]})),(()=>{var N=W("box"),g=W("box"),C=W("text"),y=W("text"),_=W("box"),z0=W("text"),t=W("text"),Y0=x0("v"),T=W("text"),Q0=W("text"),p=x0("v"),D0=W("box"),g0=W("box"),$=W("text"),E=W("scrollbox"),f0=W("box");return D(N,g),D(N,_),D(N,D0),D(N,g0),D(N,E),Z(N,"flexDirection","column"),Z(N,"flexGrow",1),Z(N,"paddingTop",1),Z(N,"paddingLeft",2),Z(N,"paddingRight",2),D(g,C),D(g,y),Z(g,"flexDirection","row"),Z(g,"justifyContent","space-between"),Z(g,"flexShrink",0),Z(C,"wrapMode","none"),K(C,()=>F("update.pageTitle")),D(y,x0("q / esc")),Z(y,"wrapMode","none"),Z(y,"onMouseUp",()=>S("close")),D(_,z0),D(_,t),D(_,T),D(_,Q0),Z(_,"flexDirection","row"),Z(_,"gap",2),Z(_,"flexShrink",0),Z(_,"paddingTop",1),Z(z0,"wrapMode","none"),K(z0,()=>F("update.current")),D(t,Y0),Z(t,"wrapMode","none"),K(t,s0,null),Z(T,"wrapMode","none"),K(T,()=>F("update.latest")),D(Q0,p),Z(Q0,"wrapMode","none"),K(Q0,U,null),Z(D0,"flexDirection","column"),Z(D0,"flexShrink",0),Z(D0,"paddingTop",1),Z(D0,"gap",0),K(D0,b(Zf,{get each(){return O()},children:(I)=>(()=>{var G0=W("box"),x=W("box"),c=W("text"),Z0=x0("["),V0=x0("]"),H0=W("box"),y0=W("text"),w0=W("text");return D(G0,x),D(G0,H0),D(G0,w0),Z(G0,"flexDirection","row"),Z(G0,"gap",1),Z(G0,"paddingLeft",1),Z(G0,"paddingRight",1),Z(G0,"onMouseUp",()=>S(I.id)),D(x,c),Z(x,"width",4),Z(x,"flexShrink",0),D(c,Z0),D(c,V0),Z(c,"wrapMode","none"),K(c,()=>I.key,V0),D(H0,y0),Z(H0,"width",14),Z(H0,"flexShrink",0),Z(y0,"wrapMode","none"),K(y0,()=>I.label),Z(w0,"wrapMode","word"),K(w0,()=>I.detail),u((T0)=>{var r0=H()===I.id?f.primary:void 0,P=H()===I.id?f.selectedListItemText:f.accent,M0=xG.BOLD,J0=H()===I.id?f.selectedListItemText:f.text,F0=H()===I.id?f.selectedListItemText:f.textMuted;return r0!==T0.e&&(T0.e=Z(G0,"backgroundColor",r0,T0.e)),P!==T0.t&&(T0.t=Z(c,"fg",P,T0.t)),M0!==T0.a&&(T0.a=Z(c,"attributes",M0,T0.a)),J0!==T0.o&&(T0.o=Z(y0,"fg",J0,T0.o)),F0!==T0.i&&(T0.i=Z(w0,"fg",F0,T0.i)),T0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),G0})()})),K(N,b(X0,{get when(){return V()},get children(){var I=W("text");return Z(I,"wrapMode","word"),K(I,V),u((G0)=>Z(I,"fg",f.info,G0)),I}}),g0),D(g0,$),Z(g0,"flexShrink",0),Z(g0,"paddingTop",1),Z($,"wrapMode","none"),K($,()=>F("update.changesSectionHeader",{from:s0,to:U()})),D(E,f0),Z(E,"flexGrow",1),Z(E,"flexShrink",1),Z(E,"stickyScroll",!1),Z(f0,"flexDirection","column"),Z(f0,"paddingRight",1),Z(f0,"paddingBottom",1),Z(f0,"gap",0),K(f0,b(X0,{get when(){return q()},get children(){var I=W("text");return K(I,()=>F("update.loadingNotes")),u((G0)=>Z(I,"fg",f.textMuted,G0)),I}}),null),K(f0,b(X0,{get when(){return I0(()=>!q())()&&G().length===0},get children(){var I=W("text");return Z(I,"wrapMode","word"),K(I,()=>F("update.notesUnavailable")),u((G0)=>Z(I,"fg",f.textMuted,G0)),I}}),null),K(f0,b(Zf,{get each(){return G()},children:(I)=>(()=>{var G0=W("box"),x=W("text"),c=x0("v");return D(G0,x),Z(G0,"flexDirection","column"),Z(G0,"paddingBottom",1),Z(G0,"gap",0),D(x,c),Z(x,"wrapMode","none"),K(x,()=>I.version,null),K(G0,b(Zf,{get each(){return ab(I.body)},children:(Z0)=>(()=>{var V0=W("text");return Z(V0,"wrapMode","word"),K(V0,Z0),u((H0)=>Z(V0,"fg",f.textMuted,H0)),V0})()}),null),u((Z0)=>{var V0=f.text,H0=xG.BOLD;return V0!==Z0.e&&(Z0.e=Z(x,"fg",V0,Z0.e)),H0!==Z0.t&&(Z0.t=Z(x,"attributes",H0,Z0.t)),Z0},{e:void 0,t:void 0}),G0})()}),null),u((I)=>{var{background:G0,text:x}=f,c=xG.BOLD,Z0=f.textMuted,V0=f.textMuted,H0=f.text,y0=xG.BOLD,w0=f.textMuted,T0=Y()?.hasUpdate?f.warning:f.success,r0=xG.BOLD,P=f.textMuted,M0=xG.DIM,J0={trackOptions:{backgroundColor:f.background,foregroundColor:f.borderActive}};return G0!==I.e&&(I.e=Z(N,"backgroundColor",G0,I.e)),x!==I.t&&(I.t=Z(C,"fg",x,I.t)),c!==I.a&&(I.a=Z(C,"attributes",c,I.a)),Z0!==I.o&&(I.o=Z(y,"fg",Z0,I.o)),V0!==I.i&&(I.i=Z(z0,"fg",V0,I.i)),H0!==I.n&&(I.n=Z(t,"fg",H0,I.n)),y0!==I.s&&(I.s=Z(t,"attributes",y0,I.s)),w0!==I.h&&(I.h=Z(T,"fg",w0,I.h)),T0!==I.r&&(I.r=Z(Q0,"fg",T0,I.r)),r0!==I.d&&(I.d=Z(Q0,"attributes",r0,I.d)),P!==I.l&&(I.l=Z($,"fg",P,I.l)),M0!==I.u&&(I.u=Z($,"attributes",M0,I.u)),J0!==I.c&&(I.c=Z(E,"verticalScrollbarOptions",J0,I.c)),I},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0}),N})()}async function pb(){await L1({setup:()=>({root:()=>b(rb,{})})})}var fL=k(()=>{h();h();h();h();h();h();h();h();h();Wf();U1();xf();G1();nY();b1()});async function JL(f,J){if(!J)return 0;return pf(f).history.latestTranscriptMtimeForWorktree(J)}var YL=k(()=>{MY()});function _b(f){return f.trim().split(/\s+/)[0]??""}function GL(f,J,Y,z){let G=Xf(Y);if(f==="vim")return{bin:"vim",command:`vim ${G}`};if(f==="nvim")return{bin:"nvim",command:`nvim ${G}`};if(f==="nano")return{bin:"nano",command:`nano ${G}`};if(f==="emacs")return{bin:"emacs",command:`emacs ${G}`};let X=(J.trim()||(z??"").trim()).trim();if(!X)return null;let q=_b(X);if(!q)return null;let Q=X.includes(zL)?X.split(zL).join(G):`${X} ${G}`;return{bin:q,command:Q}}function ob(f,J,Y){let z=Xf(J);return["f=$(mktemp 2>/dev/null)",`if [ -n "$f" ] && git show ${Xf(`HEAD:./${Y}`)} > "$f" 2>/dev/null; then`,` ${f} -d "$f" ${z} -c 'setlocal nomodifiable' -c 'wincmd l'; r=$?`,"else",` ${f} ${z}; r=$?`,"fi",'rm -f "$f" 2>/dev/null; exit $r'].join(`
238
- `)}function sb(f,J){let Y=f.endsWith("/")?f:`${f}/`;return J.startsWith(Y)?J.slice(Y.length):null}async function tb(f){let J=_z(kf(pJ)),Y=kf(kY)??"",z=(process.env.VISUAL??process.env.EDITOR??"").trim();if(J!=="auto")return GL(J,Y,f,z);if(z)return GL("custom","",f,z);let G=Xf(f);for(let X of X7)if(await XL(X))return{bin:X,command:`${X} ${G}`};return null}async function XL(f){try{return await Bun.spawn(["sh","-c",`command -v ${Xf(f)} >/dev/null 2>&1`],{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function eb(f,J){try{return await Bun.spawn(["git","diff","--quiet","HEAD","--",J],{cwd:f,stdin:"ignore",stdout:"ignore",stderr:"ignore",env:x1()}).exited===1}catch{return!1}}async function ZL(f,J,Y){let z=await tb(Y);if(!z)return!1;if(!await XL(z.bin))return!1;let G=await fS(z,J,Y);return await HJ(f,{cwd:J,command:G,name:JS(Y)}),!0}async function fS(f,J,Y){let{bin:z,command:G}=f;if(z!=="nvim"&&z!=="vim")return G;if(G!==`${z} ${Xf(Y)}`)return G;let X=sb(J,Y);if(!X)return G;if(!await eb(J,X))return G;return ob(z,Y,X)}function JS(f){let J=f.slice(f.lastIndexOf("/")+1).trim();return J.length>0?J:"edit"}var zL="{file}";var qL=k(()=>{NY();gf();Zq();Tf();qJ()});async function v8(f,J){if(!J)throw Error("git(): cwd is required");let Y=await oz(J,f),z=Y.status??-1;if(z!==0){let G=(Y.stderr??"").trim(),X=(Y.stdout??"").trim();throw Error(`git ${f.join(" ")} (cwd=${J}) exited with code ${z}: ${G||X||"(no output)"}`)}return Y.stdout??""}async function m8(f){let Y=(await v8(["ls-files","--cached","--others","--exclude-standard","--full-name"],f)).split(`
239
- `).map((G)=>G.replace(/\r$/,"")),z=new Set;for(let G of Y)if(G.length>0)z.add(G);return Array.from(z).sort()}async function c8(f){let J=await v8(["status","--porcelain","--untracked-files=all"],f),Y=BL(J),z=null;try{let G=await v8(["diff","--no-color","--numstat","HEAD"],f);z=new Map(YS(G).map((X)=>[X.path,{added:X.added,deleted:X.deleted}]))}catch{z=new Map}return Y.map((G)=>{let X=z?.get(G.path);if(X)return{...G,added:X.added,deleted:X.deleted};return G})}function YS(f){let J=f.split(`
240
- `).map((z)=>z.replace(/\r$/,"")),Y=[];for(let z of J){if(z.length===0)continue;let G=z.indexOf("\t");if(G<0)continue;let X=z.indexOf("\t",G+1);if(X<0)continue;let q=z.slice(0,G),Q=z.slice(G+1,X),H=z.slice(X+1),B=H.indexOf(" -> ");if(B>=0)H=H.slice(B+4);let V=q==="-"?null:Number.parseInt(q,10),j=Q==="-"?null:Number.parseInt(Q,10);if(H.length===0)continue;Y.push({path:H,added:Number.isNaN(V)?null:V,deleted:Number.isNaN(j)?null:j})}return Y}function QL(f){let J={name:"",path:"",isDir:!0,children:[]};for(let Y of f){if(!Y)continue;let z=Y.split("/").filter((X)=>X.length>0);if(z.length===0)continue;let G=J;for(let X=0;X<z.length;X++){let q=z[X],H=X!==z.length-1,B=G.children.find((V)=>V.name===q&&V.isDir===H);if(!B)B={name:q,path:z.slice(0,X+1).join("/"),isDir:H,children:[]},G.children.push(B);G=B}}return HL(J),J}function HL(f){f.children.sort((J,Y)=>{if(J.isDir!==Y.isDir)return J.isDir?-1:1;return J.name.localeCompare(Y.name)});for(let J of f.children)HL(J)}function BL(f){let J=f.split(`
241
- `).map((z)=>z.replace(/\r$/,"")),Y=[];for(let z of J){if(z.length<4)continue;let G=z[0],X=z[1],q=z[2];if(G===void 0||X===void 0||q!==" ")continue;let Q=z.slice(3),H;if(G==="?"&&X==="?")H="?";else{let B=X!==" "?X:G;if(B==="M"||B==="A"||B==="D"||B==="R"||B==="C"||B==="U")H=B;else continue}if(H==="R"){let B=Q.indexOf(" -> ");if(B>=0)Q=Q.slice(B+4)}if(Q.length===0)continue;if(Q.endsWith("/"))continue;Y.push({path:Q,status:H})}return Y}var n8=k(()=>{qq()});function d8(f){Uf(()=>({enabled:f.focused(),bindings:mY({"files.nav":(J,Y)=>{if((Y??0)%2===0)f.moveDown();else f.moveUp()},"files.hierarchy":(J,Y)=>{if((Y??0)%2===0)f.collapseOrParent();else f.expandOrDescend()},"files.tab":(J,Y)=>{let z=f.currentTab(),G=aX.indexOf(z);if(G<0)return;let X=(Y??0)%2===0?-1:1,q=aX[(G+X+aX.length)%aX.length];if(q)f.setTab(q)},"files.open":()=>f.openCurrent(),"files.mention":()=>f.mentionCurrent?.(),"files.createPR":()=>f.createPR?.(),"files.openExternal":()=>f.openExternal(),"files.refresh":()=>f.refresh()})}))}var aX;var i8=k(()=>{SG();b1();aX=["all","changes"]});import{spawn as jL}from"child_process";import{existsSync as zS}from"fs";import{platform as GS}from"os";function WL(f){if(!f)return;let J=GS();if(J==="linux"){if(zS("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){$X("wslview",[f],()=>{let Y=jL("wslpath",["-w",f],{stdio:["ignore","pipe","ignore"]}),z="";Y.stdout?.on("data",(G)=>{z+=G.toString()}),Y.on("close",(G)=>{if(G===0)$X("explorer.exe",[z.trim()])})});return}$X("xdg-open",[f]);return}if(J==="darwin"){$X("open",[f]);return}if(J==="win32"){$X("cmd.exe",["/c","start","",f]);return}}function $X(f,J,Y){try{let z=jL(f,J,{stdio:"ignore",detached:!0});z.on("error",()=>Y?.()),z.unref()}catch{Y?.()}}var VL=()=>{};function l8(f,J,Y,z){for(let G of f.children)if(G.isDir){let X=J.has(G.path);if(z.push({kind:"dir",path:G.path,name:G.name,depth:Y,expanded:X,hasChildren:G.children.length>0}),X)l8(G,J,Y+1,z)}else z.push({kind:"file",path:G.path,name:G.name,depth:Y})}function KL(f,J){if(J<=0)return f;let Y=[...f];if(Y.length<=J)return f;return`\u2026${Y.slice(Y.length-Math.max(0,J-1)).join("")}`}function UL(f){return f.map((J)=>({kind:"status",path:J.path,status:J.status,added:J.added,deleted:J.deleted}))}function XS(f){return`${f.kind}\x00${f.path}`}function ZS(f,J){if(f.kind!==J.kind||f.path!==J.path)return!1;switch(f.kind){case"file":{let Y=J;return f.name===Y.name&&f.depth===Y.depth}case"dir":{let Y=J;return f.name===Y.name&&f.depth===Y.depth&&f.expanded===Y.expanded&&f.hasChildren===Y.hasChildren}case"status":{let Y=J;return f.status===Y.status&&f.added===Y.added&&f.deleted===Y.deleted}}}function DL(f,J){return IQ(f,J,XS,ZS)}function LL(f,J){if(f===J)return!0;if(f==null||J==null)return!1;if(f.length!==J.length)return!1;for(let Y=0;Y<f.length;Y++)if(f[Y]!==J[Y])return!1;return!0}function ML(f,J){if(f===J)return!0;if(f==null||J==null)return!1;if(f.length!==J.length)return!1;for(let Y=0;Y<f.length;Y++){let z=f[Y],G=J[Y];if(z.path!==G.path||z.status!==G.status||z.added!==G.added||z.deleted!==G.deleted)return!1}return!0}var FL=()=>{};import{watch as qS}from"fs";import{TextAttributes as rX}from"@opentui/core";function QS(f){switch(f){case"M":return"warning";case"A":return"success";case"D":return"error";case"?":return"textMuted";case"R":case"C":case"U":return"info"}}function BS(f){let J=f.toLowerCase();if(J.includes("not a git repository"))return F("files.error.notGitRepo");if(J.includes("does not exist")||J.includes("enoent"))return F("files.error.pathMissing");if(J.includes("permission denied")||J.includes("eacces"))return F("files.error.permissionDenied");if(J.includes("git: not found")||J.includes("command not found"))return F("files.error.gitNotInstalled");let Y=f.indexOf(": ");if(Y>=0&&f.startsWith("git "))return f.slice(Y+2).trim()||F("files.error.gitFailed");return f.trim()||F("files.error.gitFailed")}function jS(f){switch(f){case"all":return F("files.tabs.all");case"changes":return F("files.tabs.changes")}}function a8(f){let{theme:J}=i0(),Y=TJ(),z=()=>f.focused?f.focused():!0,[G,X]=r("all"),[q,Q]=r(0),[H,B]=r(0),[V,j]=r(null,{equals:LL}),[U,L]=r(null,{equals:ML}),[O,M]=r(null),[R,S]=r(new Set),a=0;async function N(E,f0){let I=++a;if(f0==null){j(null),L(null),M(null);return}M(null);try{if(E==="all"){let G0=await m8(f0);if(I!==a||f.worktreePath()!==f0)return;j(G0)}else if(E==="changes"){let G0=await c8(f0);if(I!==a||f.worktreePath()!==f0)return;L(G0)}}catch(G0){let x=G0 instanceof Error?G0.message:String(G0);if(I===a&&f.worktreePath()===f0)M(x)}}zf(O1(f.worktreePath,async(E)=>{j(null),L(null),M(null),Q(0),S(new Set),await N(G(),E)})),zf(O1(f.worktreePath,(E)=>{if(E==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let f0=null,I=null;try{I=qS(E,{recursive:!0},(G0,x)=>{if(x==null)return;let c=x.toString();if(c===".git"||c.startsWith(".git/")||c.startsWith(".git\\"))return;if(c.startsWith("node_modules/")||c.startsWith("node_modules\\"))return;if(f0!=null)clearTimeout(f0);f0=setTimeout(()=>{f0=null,B((Z0)=>Z0+1)},500)}),I.on("error",()=>{})}catch{}mf(()=>{if(f0!=null)clearTimeout(f0);if(I!=null)I.close()})})),zf(O1([G,H],async([E,f0])=>{let I=f.worktreePath();if(I==null)return;Q(0);let x=H()>0;if(E==="all"){if(V()==null||x)await N("all",I)}else if(E==="changes"){if(U()==null||x)await N("changes",I)}}));let g=U0(()=>{let E=V();if(E==null)return null;return QL(E)}),C=U0((E)=>{let f0=[];if(G()==="all"){let I=g();if(I!=null)l8(I,R(),0,f0)}else if(G()==="changes"){let I=U();if(I!=null)f0.push(...UL(I))}return DL(E??[],f0)},[]),y=U0(()=>{let E=0,f0=0;for(let I of C()){if(I.kind!=="status")continue;if(I.added!=null)E=Math.max(E,String(I.added).length+1);if(I.deleted!=null)f0=Math.max(f0,String(I.deleted).length+1)}return{added:E,deleted:f0}}),_=U0(()=>{let E=y(),f0=(E.added>0?E.added+1:0)+(E.deleted>0?E.deleted+1:0);return Math.max(8,Y().width-6-f0)});function z0(){let E=C();if(E.length===0)return;Q(Math.min(q()+1,E.length-1))}function t(){if(C().length===0)return;Q(Math.max(q()-1,0))}function Y0(){let E=C(),f0=q(),I=E[f0];if(!I)return;if(I.kind!=="dir")return;if(!I.expanded&&I.hasChildren)S((G0)=>{let x=new Set(G0);return x.add(I.path),x});else if(I.expanded){if(f0+1<E.length)Q(f0+1)}}function T(){if(G()!=="all")return;let E=C(),f0=q(),I=E[f0];if(!I)return;if(I.kind==="dir"&&I.expanded){S((x)=>{let c=new Set(x);return c.delete(I.path),c});return}if(I.kind!=="dir"&&I.kind!=="file")return;let G0=I.depth-1;if(G0<0)return;for(let x=f0-1;x>=0;x--){let c=E[x];if(!c)continue;if(c.kind==="dir"&&c.depth===G0){Q(x);return}}}function Q0(){let E=C(),f0=q();if(f0<0||f0>=E.length)return;let I=E[f0];if(!I)return;if(I.kind==="dir"){S((G0)=>{let x=new Set(G0);if(x.has(I.path))x.delete(I.path);else x.add(I.path);return x});return}f.onOpenFile(I.path)}function p(){let E=C(),f0=q();if(f0<0||f0>=E.length)return;let I=E[f0];if(!I||I.kind==="dir")return;f.onMention?.(I.path)}function D0(){B((E)=>E+1),f.onRefresh?.()}function g0(){let E=C(),f0=q();if(f0<0||f0>=E.length)return;let I=E[f0];if(!I||I.kind==="dir")return;let G0=f.worktreePath();if(!G0)return;let x=`${G0}/${I.path}`;WL(x)}d8({focused:z,moveDown:z0,moveUp:t,setTab:(E)=>X(E),currentTab:G,openCurrent:Q0,mentionCurrent:p,createPR:f.onCreatePR,openExternal:g0,refresh:D0,expandOrDescend:Y0,collapseOrParent:T});let $;return zf(O1([q,C],([E,f0])=>{if(!$)return;if(f0.length===0)return;let I=$.scrollTop,G0=$.viewport.height;if(G0<=0)return;if(E<I)$.scrollTo({x:0,y:E});else if(E>=I+G0)$.scrollTo({x:0,y:E-G0+1})})),(()=>{var E=W("box"),f0=W("box"),I=W("box"),G0=W("scrollbox");return D(E,f0),D(E,G0),Z(E,"flexDirection","column"),Z(E,"flexGrow",1),Z(E,"paddingTop",1),Z(E,"paddingBottom",1),Z(E,"paddingLeft",0),Z(E,"paddingRight",0),K(E,b(X0,{get when(){return f.onZenToggle||f.onCreatePR},get children(){var x=W("box");return Z(x,"flexDirection","row"),Z(x,"justifyContent","flex-end"),Z(x,"gap",2),Z(x,"paddingBottom",1),Z(x,"flexShrink",0),K(x,b(X0,{get when(){return f.onZenToggle},get children(){var c=W("box"),Z0=W("text"),V0=W("text");return D(c,Z0),D(c,V0),Z(c,"flexDirection","row"),Z(c,"gap",1),Z(c,"onMouseUp",()=>f.onZenToggle?.()),D(Z0,x0("\u262F")),Z(Z0,"wrapMode","none"),Z(V0,"wrapMode","none"),K(V0,()=>F("files.actions.zen")),u((H0)=>{var y0=J.accent,w0=rX.BOLD,T0=J.text;return y0!==H0.e&&(H0.e=Z(Z0,"fg",y0,H0.e)),w0!==H0.t&&(H0.t=Z(Z0,"attributes",w0,H0.t)),T0!==H0.a&&(H0.a=Z(V0,"fg",T0,H0.a)),H0},{e:void 0,t:void 0,a:void 0}),c}}),null),K(x,b(X0,{get when(){return f.onCreatePR},get children(){var c=W("box"),Z0=W("text"),V0=W("text");return D(c,Z0),D(c,V0),Z(c,"flexDirection","row"),Z(c,"gap",1),Z(c,"onMouseUp",()=>f.onCreatePR?.()),D(Z0,x0("[P]")),Z(Z0,"wrapMode","none"),Z(V0,"wrapMode","none"),K(V0,()=>F("files.actions.createPR")),u((H0)=>{var y0=J.accent,w0=rX.BOLD,T0=J.text;return y0!==H0.e&&(H0.e=Z(Z0,"fg",y0,H0.e)),w0!==H0.t&&(H0.t=Z(Z0,"attributes",w0,H0.t)),T0!==H0.a&&(H0.a=Z(V0,"fg",T0,H0.a)),H0},{e:void 0,t:void 0,a:void 0}),c}}),null),x}}),f0),D(f0,I),Z(f0,"flexDirection","row"),Z(f0,"justifyContent","space-between"),Z(f0,"paddingBottom",0),Z(f0,"flexShrink",0),Z(I,"flexDirection","row"),Z(I,"gap",2),K(I,b(Zf,{each:HS,children:(x)=>{let c=()=>G()===x;return(()=>{var Z0=W("text");return Z(Z0,"wrapMode","none"),Z(Z0,"onMouseUp",()=>X(x)),K(Z0,()=>jS(x)),u((V0)=>{var H0=c()?J.primary:J.textMuted,y0=c()?rX.BOLD:void 0;return H0!==V0.e&&(V0.e=Z(Z0,"fg",H0,V0.e)),y0!==V0.t&&(V0.t=Z(Z0,"attributes",y0,V0.t)),V0},{e:void 0,t:void 0}),Z0})()}})),K(f0,b(X0,{get when(){return f.cornerBadge?.()},children:(x)=>(()=>{var c=W("text");return Z(c,"wrapMode","none"),K(c,()=>x().text),u((Z0)=>{var V0=x().active?J.accent:J.textMuted,H0=x().active?rX.BOLD:void 0;return V0!==Z0.e&&(Z0.e=Z(c,"fg",V0,Z0.e)),H0!==Z0.t&&(Z0.t=Z(c,"attributes",H0,Z0.t)),Z0},{e:void 0,t:void 0}),c})()}),null),K(E,b(X0,{get when(){return G()==="changes"},get children(){var x=W("box"),c=W("text");return D(x,c),Z(x,"flexDirection","column"),Z(x,"paddingBottom",1),Z(x,"flexShrink",0),Z(x,"gap",0),Z(c,"wrapMode","none"),K(c,()=>F("files.legend.changes")),u((Z0)=>Z(c,"fg",J.textMuted,Z0)),x}}),G0),K(E,b(X0,{get when(){return G()!=="changes"},get children(){var x=W("box");return Z(x,"flexDirection","row"),Z(x,"paddingBottom",1),Z(x,"flexShrink",0),x}}),G0),hY((x)=>{$=x},G0),Z(G0,"flexGrow",1),Z(G0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),K(G0,b(X0,{get when(){return f.worktreePath()==null},get children(){var x=W("box"),c=W("text");return D(x,c),Z(x,"paddingTop",1),Z(x,"paddingLeft",1),K(c,()=>F("files.empty.noTask")),u((Z0)=>Z(c,"fg",J.textMuted,Z0)),x}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null)()&&O()!=null},get children(){var x=W("box"),c=W("text"),Z0=W("text");return D(x,c),D(x,Z0),Z(x,"paddingTop",1),Z(x,"paddingLeft",1),Z(x,"flexDirection","column"),Z(x,"gap",0),Z(c,"wrapMode","word"),K(c,()=>BS(O()??"")),Z(Z0,"wrapMode","word"),K(Z0,()=>F("files.error.retryHint")),u((V0)=>{var{error:H0,textMuted:y0}=J;return H0!==V0.e&&(V0.e=Z(c,"fg",H0,V0.e)),y0!==V0.t&&(V0.t=Z(Z0,"fg",y0,V0.t)),V0},{e:void 0,t:void 0}),x}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null&&O()==null&&C().length===0)()&&(G()==="all"&&V()!=null||G()==="changes"&&U()!=null)},get children(){var x=W("box"),c=W("text");return D(x,c),Z(x,"paddingTop",1),Z(x,"paddingLeft",1),K(c,(()=>{var Z0=I0(()=>G()==="all");return()=>Z0()?F("files.empty.noFiles"):F("files.empty.noChanges")})()),u((Z0)=>Z(c,"fg",J.textMuted,Z0)),x}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null&&O()==null)()&&C().length>0},get children(){var x=W("box");return Z(x,"flexShrink",0),Z(x,"gap",0),Z(x,"paddingRight",1),K(x,b(Zf,{get each(){return C()},children:(c,Z0)=>{let V0=()=>Z0()===q(),H0=(()=>{var J0=W("text");return Z(J0,"wrapMode","none"),K(J0,()=>V0()?"\u258C":" "),u((F0)=>Z(J0,"fg",V0()?J.focusAccent:void 0,F0)),J0})(),y0=()=>V0()?J.backgroundElement:void 0;if(c.kind==="dir"){let J0=" ".repeat(c.depth),F0=c.expanded?"\u25BE":"\u25B8";return(()=>{var a0=W("box"),p0=W("box"),u0=W("text");return D(a0,p0),Z(a0,"flexDirection","row"),Z(a0,"gap",0),Z(a0,"onMouseUp",()=>{Q(Z0()),S((_0)=>{let n=new Set(_0);if(n.has(c.path))n.delete(c.path);else n.add(c.path);return n})}),K(a0,H0,p0),D(p0,u0),Z(p0,"flexGrow",1),Z(p0,"paddingRight",1),Z(u0,"wrapMode","none"),K(u0,()=>`${J0}${F0} ${c.name}/`),u((_0)=>{var n=y0(),q0=J.textMuted,b0=rX.BOLD;return n!==_0.e&&(_0.e=Z(a0,"backgroundColor",n,_0.e)),q0!==_0.t&&(_0.t=Z(u0,"fg",q0,_0.t)),b0!==_0.a&&(_0.a=Z(u0,"attributes",b0,_0.a)),_0},{e:void 0,t:void 0,a:void 0}),a0})()}if(c.kind==="file"){let J0=" ".repeat(c.depth);return(()=>{var F0=W("box"),a0=W("box"),p0=W("text");return D(F0,a0),Z(F0,"flexDirection","row"),Z(F0,"gap",0),Z(F0,"onMouseUp",()=>{Q(Z0()),f.onOpenFile(c.path)}),K(F0,H0,a0),D(a0,p0),Z(a0,"flexGrow",1),Z(a0,"paddingRight",1),Z(p0,"wrapMode","none"),K(p0,()=>`${J0} ${c.name}`),u((u0)=>{var _0=y0(),n=J.text;return _0!==u0.e&&(u0.e=Z(F0,"backgroundColor",_0,u0.e)),n!==u0.t&&(u0.t=Z(p0,"fg",n,u0.t)),u0},{e:void 0,t:void 0}),F0})()}let w0=QS(c.status),T0=()=>{switch(w0){case"success":return J.success;case"warning":return J.warning;case"error":return J.error;case"info":return J.info;default:return J.textMuted}},r0=y(),P=c.added==null?" ".repeat(r0.added):`+${c.added}`.padStart(r0.added),M0=c.deleted==null?" ".repeat(r0.deleted):`-${c.deleted}`.padStart(r0.deleted);return(()=>{var J0=W("box"),F0=W("box"),a0=W("text"),p0=W("text");return D(J0,F0),Z(J0,"flexDirection","row"),Z(J0,"gap",0),Z(J0,"onMouseUp",()=>{Q(Z0()),f.onOpenFile(c.path)}),K(J0,H0,F0),D(F0,a0),D(F0,p0),Z(F0,"flexDirection","row"),Z(F0,"flexGrow",1),Z(F0,"gap",1),Z(F0,"paddingRight",1),Z(a0,"wrapMode","none"),K(a0,()=>c.status),Z(p0,"wrapMode","none"),Z(p0,"flexGrow",1),K(p0,()=>KL(c.path,_())),K(F0,b(X0,{get when(){return r0.added>0},get children(){var u0=W("text");return Z(u0,"wrapMode","none"),K(u0,P),u((_0)=>Z(u0,"fg",J.success,_0)),u0}}),null),K(F0,b(X0,{get when(){return r0.deleted>0},get children(){var u0=W("text");return Z(u0,"wrapMode","none"),K(u0,M0),u((_0)=>Z(u0,"fg",J.error,_0)),u0}}),null),u((u0)=>{var _0=y0(),n=T0(),q0=J.text;return _0!==u0.e&&(u0.e=Z(J0,"backgroundColor",_0,u0.e)),n!==u0.t&&(u0.t=Z(a0,"fg",n,u0.t)),q0!==u0.a&&(u0.a=Z(p0,"fg",q0,u0.a)),u0},{e:void 0,t:void 0,a:void 0}),J0})()}})),x}}),null),K(E,b(X0,{get when(){return f.worktreePath()!=null},get children(){var x=W("box"),c=W("text");return D(x,c),Z(x,"flexDirection","row"),Z(x,"paddingTop",1),Z(x,"flexShrink",0),Z(c,"wrapMode","none"),K(c,()=>F("files.footer.openHint")),u((Z0)=>Z(c,"fg",J.textMuted,Z0)),x}}),null),E})()}var HS;var OL=k(()=>{h();h();h();h();h();h();h();h();h();G1();h();Wf();xf();n8();i8();VL();FL();HS=["all","changes"]});var AL=k(()=>{OL();n8();i8()});import{promises as WS}from"fs";import VS from"path";async function PQ(f,J){let Y=new AbortController,z=setTimeout(()=>Y.abort(),KS);try{let G=await BJ("git",J,{cwd:f,env:x1(),signal:Y.signal});if(Y.signal.aborted)return null;if(G.status!==0)return null;return G.stdout.trim()}finally{clearTimeout(z)}}async function US(f){return await PQ(f,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function DS(f){let J=await PQ(f,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!J)return"main";return J.startsWith("origin/")?J.slice(7):J}async function LS(f){let J=await PQ(f,["rev-parse","--abbrev-ref","@{u}"]);return J!==null&&J.length>0}async function MS(f){let J=await PQ(f,["status","--porcelain"]);if(!J)return 0;return J.split(`
242
- `).filter((Y)=>Y.length>0).length}async function FS(f){let[J,Y,z,G]=await Promise.all([US(f),DS(f),LS(f),MS(f)]);return{branch:J,targetBranch:Y,hasUpstream:z,dirtyCount:G}}function OS(f){if(f<=0)return"There are no uncommitted changes.";if(f===1)return"There is 1 uncommitted change.";return`There are ${f} uncommitted changes.`}function AS(f){return f?"The current branch tracks an upstream.":"There is no upstream branch yet."}function gS(f,J){let Y={branch:J.branch,targetBranch:J.targetBranch,dirtyCountSentence:OS(J.dirtyCount),upstreamSentence:AS(J.hasUpstream)};return f.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(z,G)=>Object.hasOwn(Y,G)?Y[G]:z)}async function RS(f){let J=VS.join(f,".kobe","pr-instructions.md");try{let Y=await WS.readFile(J,"utf8");return Y.length>0?Y:gL}catch{return gL}}async function RL(f){let[J,Y]=await Promise.all([RS(f),FS(f)]);return gS(J,Y)}var KS=5000,gL=`The user likes the current state of the code.
237
+ `),process.stdout.write(F("update.pressAnyKey")),await pb(),process.exit(g)}return Uf(()=>({bindings:[{key:"up",cmd:()=>R(-1)},{key:"down",cmd:()=>R(1)},{key:"k",cmd:()=>R(-1)},{key:"j",cmd:()=>R(1)},{key:"return",cmd:()=>S()},{key:"u",cmd:()=>S("update")},{key:"r",cmd:()=>S("release")},{key:"q",cmd:()=>S("close")},{key:"escape",cmd:()=>S("close")},{key:"ctrl+c",cmd:()=>S("close")}]})),(()=>{var N=W("box"),g=W("box"),C=W("text"),y=W("text"),_=W("box"),z0=W("text"),t=W("text"),Y0=x0("v"),T=W("text"),Q0=W("text"),p=x0("v"),D0=W("box"),g0=W("box"),$=W("text"),E=W("scrollbox"),f0=W("box");return D(N,g),D(N,_),D(N,D0),D(N,g0),D(N,E),Z(N,"flexDirection","column"),Z(N,"flexGrow",1),Z(N,"paddingTop",1),Z(N,"paddingLeft",2),Z(N,"paddingRight",2),D(g,C),D(g,y),Z(g,"flexDirection","row"),Z(g,"justifyContent","space-between"),Z(g,"flexShrink",0),Z(C,"wrapMode","none"),K(C,()=>F("update.pageTitle")),D(y,x0("q / esc")),Z(y,"wrapMode","none"),Z(y,"onMouseUp",()=>S("close")),D(_,z0),D(_,t),D(_,T),D(_,Q0),Z(_,"flexDirection","row"),Z(_,"gap",2),Z(_,"flexShrink",0),Z(_,"paddingTop",1),Z(z0,"wrapMode","none"),K(z0,()=>F("update.current")),D(t,Y0),Z(t,"wrapMode","none"),K(t,s0,null),Z(T,"wrapMode","none"),K(T,()=>F("update.latest")),D(Q0,p),Z(Q0,"wrapMode","none"),K(Q0,U,null),Z(D0,"flexDirection","column"),Z(D0,"flexShrink",0),Z(D0,"paddingTop",1),Z(D0,"gap",0),K(D0,b(Zf,{get each(){return O()},children:(I)=>(()=>{var G0=W("box"),x=W("box"),c=W("text"),Z0=x0("["),V0=x0("]"),H0=W("box"),y0=W("text"),w0=W("text");return D(G0,x),D(G0,H0),D(G0,w0),Z(G0,"flexDirection","row"),Z(G0,"gap",1),Z(G0,"paddingLeft",1),Z(G0,"paddingRight",1),Z(G0,"onMouseUp",()=>S(I.id)),D(x,c),Z(x,"width",4),Z(x,"flexShrink",0),D(c,Z0),D(c,V0),Z(c,"wrapMode","none"),K(c,()=>I.key,V0),D(H0,y0),Z(H0,"width",14),Z(H0,"flexShrink",0),Z(y0,"wrapMode","none"),K(y0,()=>I.label),Z(w0,"wrapMode","word"),K(w0,()=>I.detail),u((T0)=>{var r0=H()===I.id?f.primary:void 0,P=H()===I.id?f.selectedListItemText:f.accent,M0=xG.BOLD,J0=H()===I.id?f.selectedListItemText:f.text,F0=H()===I.id?f.selectedListItemText:f.textMuted;return r0!==T0.e&&(T0.e=Z(G0,"backgroundColor",r0,T0.e)),P!==T0.t&&(T0.t=Z(c,"fg",P,T0.t)),M0!==T0.a&&(T0.a=Z(c,"attributes",M0,T0.a)),J0!==T0.o&&(T0.o=Z(y0,"fg",J0,T0.o)),F0!==T0.i&&(T0.i=Z(w0,"fg",F0,T0.i)),T0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),G0})()})),K(N,b(X0,{get when(){return V()},get children(){var I=W("text");return Z(I,"wrapMode","word"),K(I,V),u((G0)=>Z(I,"fg",f.info,G0)),I}}),g0),D(g0,$),Z(g0,"flexShrink",0),Z(g0,"paddingTop",1),Z($,"wrapMode","none"),K($,()=>F("update.changesSectionHeader",{from:s0,to:U()})),D(E,f0),Z(E,"flexGrow",1),Z(E,"flexShrink",1),Z(E,"stickyScroll",!1),Z(f0,"flexDirection","column"),Z(f0,"paddingRight",1),Z(f0,"paddingBottom",1),Z(f0,"gap",0),K(f0,b(X0,{get when(){return q()},get children(){var I=W("text");return K(I,()=>F("update.loadingNotes")),u((G0)=>Z(I,"fg",f.textMuted,G0)),I}}),null),K(f0,b(X0,{get when(){return I0(()=>!q())()&&G().length===0},get children(){var I=W("text");return Z(I,"wrapMode","word"),K(I,()=>F("update.notesUnavailable")),u((G0)=>Z(I,"fg",f.textMuted,G0)),I}}),null),K(f0,b(Zf,{get each(){return G()},children:(I)=>(()=>{var G0=W("box"),x=W("text"),c=x0("v");return D(G0,x),Z(G0,"flexDirection","column"),Z(G0,"paddingBottom",1),Z(G0,"gap",0),D(x,c),Z(x,"wrapMode","none"),K(x,()=>I.version,null),K(G0,b(Zf,{get each(){return rb(I.body)},children:(Z0)=>(()=>{var V0=W("text");return Z(V0,"wrapMode","word"),K(V0,Z0),u((H0)=>Z(V0,"fg",f.textMuted,H0)),V0})()}),null),u((Z0)=>{var V0=f.text,H0=xG.BOLD;return V0!==Z0.e&&(Z0.e=Z(x,"fg",V0,Z0.e)),H0!==Z0.t&&(Z0.t=Z(x,"attributes",H0,Z0.t)),Z0},{e:void 0,t:void 0}),G0})()}),null),u((I)=>{var{background:G0,text:x}=f,c=xG.BOLD,Z0=f.textMuted,V0=f.textMuted,H0=f.text,y0=xG.BOLD,w0=f.textMuted,T0=Y()?.hasUpdate?f.warning:f.success,r0=xG.BOLD,P=f.textMuted,M0=xG.DIM,J0={trackOptions:{backgroundColor:f.background,foregroundColor:f.borderActive}};return G0!==I.e&&(I.e=Z(N,"backgroundColor",G0,I.e)),x!==I.t&&(I.t=Z(C,"fg",x,I.t)),c!==I.a&&(I.a=Z(C,"attributes",c,I.a)),Z0!==I.o&&(I.o=Z(y,"fg",Z0,I.o)),V0!==I.i&&(I.i=Z(z0,"fg",V0,I.i)),H0!==I.n&&(I.n=Z(t,"fg",H0,I.n)),y0!==I.s&&(I.s=Z(t,"attributes",y0,I.s)),w0!==I.h&&(I.h=Z(T,"fg",w0,I.h)),T0!==I.r&&(I.r=Z(Q0,"fg",T0,I.r)),r0!==I.d&&(I.d=Z(Q0,"attributes",r0,I.d)),P!==I.l&&(I.l=Z($,"fg",P,I.l)),M0!==I.u&&(I.u=Z($,"attributes",M0,I.u)),J0!==I.c&&(I.c=Z(E,"verticalScrollbarOptions",J0,I.c)),I},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0}),N})()}async function ob(){await M1({setup:()=>({root:()=>b(_b,{})})})}var zL=k(()=>{h();h();h();h();h();h();h();h();h();Wf();D1();xf();X1();nY();S1()});async function GL(f,J){if(!J)return 0;return pf(f).history.latestTranscriptMtimeForWorktree(J)}var XL=k(()=>{UY()});function sb(f){return f.trim().split(/\s+/)[0]??""}function qL(f,J,Y,z){let G=Xf(Y);if(f==="vim")return{bin:"vim",command:`vim ${G}`};if(f==="nvim")return{bin:"nvim",command:`nvim ${G}`};if(f==="nano")return{bin:"nano",command:`nano ${G}`};if(f==="emacs")return{bin:"emacs",command:`emacs ${G}`};let X=(J.trim()||(z??"").trim()).trim();if(!X)return null;let q=sb(X);if(!q)return null;let Q=X.includes(ZL)?X.split(ZL).join(G):`${X} ${G}`;return{bin:q,command:Q}}function tb(f,J,Y){let z=Xf(J);return["f=$(mktemp 2>/dev/null)",`if [ -n "$f" ] && git show ${Xf(`HEAD:./${Y}`)} > "$f" 2>/dev/null; then`,` ${f} -d "$f" ${z} -c 'setlocal nomodifiable' -c 'wincmd l'; r=$?`,"else",` ${f} ${z}; r=$?`,"fi",'rm -f "$f" 2>/dev/null; exit $r'].join(`
238
+ `)}function eb(f,J){let Y=f.endsWith("/")?f:`${f}/`;return J.startsWith(Y)?J.slice(Y.length):null}async function fS(f){let J=pz(kf(_J)),Y=kf(RY)??"",z=(process.env.VISUAL??process.env.EDITOR??"").trim();if(J!=="auto")return qL(J,Y,f,z);if(z)return qL("custom","",f,z);let G=Xf(f);for(let X of sV)if(await QL(X))return{bin:X,command:`${X} ${G}`};return null}async function QL(f){try{return await Bun.spawn(["sh","-c",`command -v ${Xf(f)} >/dev/null 2>&1`],{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function JS(f,J){try{return await Bun.spawn(["git","diff","--quiet","HEAD","--",J],{cwd:f,stdin:"ignore",stdout:"ignore",stderr:"ignore",env:w1()}).exited===1}catch{return!1}}async function HL(f,J,Y){let z=await fS(Y);if(!z)return!1;if(!await QL(z.bin))return!1;let G=await YS(z,J,Y);return await QJ(f,{cwd:J,command:G,name:zS(Y)}),!0}async function YS(f,J,Y){let{bin:z,command:G}=f;if(z!=="nvim"&&z!=="vim")return G;if(G!==`${z} ${Xf(Y)}`)return G;let X=eb(J,Y);if(!X)return G;if(!await JS(J,X))return G;return tb(z,Y,X)}function zS(f){let J=f.slice(f.lastIndexOf("/")+1).trim();return J.length>0?J:"edit"}var ZL="{file}";var BL=k(()=>{CY();Af();Zq();Tf();zJ()});async function n8(f,J){if(!J)throw Error("git(): cwd is required");let Y=await _z(J,f),z=Y.status??-1;if(z!==0){let G=(Y.stderr??"").trim(),X=(Y.stdout??"").trim();throw Error(`git ${f.join(" ")} (cwd=${J}) exited with code ${z}: ${G||X||"(no output)"}`)}return Y.stdout??""}async function d8(f){let Y=(await n8(["ls-files","--cached","--others","--exclude-standard","--full-name"],f)).split(`
239
+ `).map((G)=>G.replace(/\r$/,"")),z=new Set;for(let G of Y)if(G.length>0)z.add(G);return Array.from(z).sort()}async function i8(f){let J=await n8(["status","--porcelain","--untracked-files=all"],f),Y=VL(J),z=null;try{let G=await n8(["diff","--no-color","--numstat","HEAD"],f);z=new Map(GS(G).map((X)=>[X.path,{added:X.added,deleted:X.deleted}]))}catch{z=new Map}return Y.map((G)=>{let X=z?.get(G.path);if(X)return{...G,added:X.added,deleted:X.deleted};return G})}function GS(f){let J=f.split(`
240
+ `).map((z)=>z.replace(/\r$/,"")),Y=[];for(let z of J){if(z.length===0)continue;let G=z.indexOf("\t");if(G<0)continue;let X=z.indexOf("\t",G+1);if(X<0)continue;let q=z.slice(0,G),Q=z.slice(G+1,X),H=z.slice(X+1),B=H.indexOf(" -> ");if(B>=0)H=H.slice(B+4);let V=q==="-"?null:Number.parseInt(q,10),j=Q==="-"?null:Number.parseInt(Q,10);if(H.length===0)continue;Y.push({path:H,added:Number.isNaN(V)?null:V,deleted:Number.isNaN(j)?null:j})}return Y}function jL(f){let J={name:"",path:"",isDir:!0,children:[]};for(let Y of f){if(!Y)continue;let z=Y.split("/").filter((X)=>X.length>0);if(z.length===0)continue;let G=J;for(let X=0;X<z.length;X++){let q=z[X],H=X!==z.length-1,B=G.children.find((V)=>V.name===q&&V.isDir===H);if(!B)B={name:q,path:z.slice(0,X+1).join("/"),isDir:H,children:[]},G.children.push(B);G=B}}return WL(J),J}function WL(f){f.children.sort((J,Y)=>{if(J.isDir!==Y.isDir)return J.isDir?-1:1;return J.name.localeCompare(Y.name)});for(let J of f.children)WL(J)}function VL(f){let J=f.split(`
241
+ `).map((z)=>z.replace(/\r$/,"")),Y=[];for(let z of J){if(z.length<4)continue;let G=z[0],X=z[1],q=z[2];if(G===void 0||X===void 0||q!==" ")continue;let Q=z.slice(3),H;if(G==="?"&&X==="?")H="?";else{let B=X!==" "?X:G;if(B==="M"||B==="A"||B==="D"||B==="R"||B==="C"||B==="U")H=B;else continue}if(H==="R"){let B=Q.indexOf(" -> ");if(B>=0)Q=Q.slice(B+4)}if(Q.length===0)continue;if(Q.endsWith("/"))continue;Y.push({path:Q,status:H})}return Y}var l8=k(()=>{qq()});function a8(f){Uf(()=>({enabled:f.focused(),bindings:mY({"files.nav":(J,Y)=>{if((Y??0)%2===0)f.moveDown();else f.moveUp()},"files.hierarchy":(J,Y)=>{if((Y??0)%2===0)f.collapseOrParent();else f.expandOrDescend()},"files.tab":(J,Y)=>{let z=f.currentTab(),G=$X.indexOf(z);if(G<0)return;let X=(Y??0)%2===0?-1:1,q=$X[(G+X+$X.length)%$X.length];if(q)f.setTab(q)},"files.open":()=>f.openCurrent(),"files.mention":()=>f.mentionCurrent?.(),"files.createPR":()=>f.createPR?.(),"files.openExternal":()=>f.openExternal(),"files.refresh":()=>f.refresh()})}))}var $X;var $8=k(()=>{SG();S1();$X=["all","changes"]});import{spawn as KL}from"child_process";import{existsSync as XS}from"fs";import{platform as ZS}from"os";function UL(f){if(!f)return;let J=ZS();if(J==="linux"){if(XS("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){rX("wslview",[f],()=>{let Y=KL("wslpath",["-w",f],{stdio:["ignore","pipe","ignore"]}),z="";Y.stdout?.on("data",(G)=>{z+=G.toString()}),Y.on("close",(G)=>{if(G===0)rX("explorer.exe",[z.trim()])})});return}rX("xdg-open",[f]);return}if(J==="darwin"){rX("open",[f]);return}if(J==="win32"){rX("cmd.exe",["/c","start","",f]);return}}function rX(f,J,Y){try{let z=KL(f,J,{stdio:"ignore",detached:!0});z.on("error",()=>Y?.()),z.unref()}catch{Y?.()}}var DL=()=>{};function r8(f,J,Y,z){for(let G of f.children)if(G.isDir){let X=J.has(G.path);if(z.push({kind:"dir",path:G.path,name:G.name,depth:Y,expanded:X,hasChildren:G.children.length>0}),X)r8(G,J,Y+1,z)}else z.push({kind:"file",path:G.path,name:G.name,depth:Y})}function LL(f,J){if(J<=0)return f;let Y=[...f];if(Y.length<=J)return f;return`\u2026${Y.slice(Y.length-Math.max(0,J-1)).join("")}`}function ML(f){return f.map((J)=>({kind:"status",path:J.path,status:J.status,added:J.added,deleted:J.deleted}))}function qS(f){return`${f.kind}\x00${f.path}`}function QS(f,J){if(f.kind!==J.kind||f.path!==J.path)return!1;switch(f.kind){case"file":{let Y=J;return f.name===Y.name&&f.depth===Y.depth}case"dir":{let Y=J;return f.name===Y.name&&f.depth===Y.depth&&f.expanded===Y.expanded&&f.hasChildren===Y.hasChildren}case"status":{let Y=J;return f.status===Y.status&&f.added===Y.added&&f.deleted===Y.deleted}}}function FL(f,J){return EQ(f,J,qS,QS)}function OL(f,J){if(f===J)return!0;if(f==null||J==null)return!1;if(f.length!==J.length)return!1;for(let Y=0;Y<f.length;Y++)if(f[Y]!==J[Y])return!1;return!0}function AL(f,J){if(f===J)return!0;if(f==null||J==null)return!1;if(f.length!==J.length)return!1;for(let Y=0;Y<f.length;Y++){let z=f[Y],G=J[Y];if(z.path!==G.path||z.status!==G.status||z.added!==G.added||z.deleted!==G.deleted)return!1}return!0}var gL=()=>{};import{watch as HS}from"fs";import{TextAttributes as pX}from"@opentui/core";function BS(f){switch(f){case"M":return"warning";case"A":return"success";case"D":return"error";case"?":return"textMuted";case"R":case"C":case"U":return"info"}}function WS(f){let J=f.toLowerCase();if(J.includes("not a git repository"))return F("files.error.notGitRepo");if(J.includes("does not exist")||J.includes("enoent"))return F("files.error.pathMissing");if(J.includes("permission denied")||J.includes("eacces"))return F("files.error.permissionDenied");if(J.includes("git: not found")||J.includes("command not found"))return F("files.error.gitNotInstalled");let Y=f.indexOf(": ");if(Y>=0&&f.startsWith("git "))return f.slice(Y+2).trim()||F("files.error.gitFailed");return f.trim()||F("files.error.gitFailed")}function VS(f){switch(f){case"all":return F("files.tabs.all");case"changes":return F("files.tabs.changes")}}function p8(f){let{theme:J}=i0(),Y=TJ(),z=()=>f.focused?f.focused():!0,[G,X]=r("all"),[q,Q]=r(0),[H,B]=r(0),[V,j]=r(null,{equals:OL}),[U,L]=r(null,{equals:AL}),[O,M]=r(null),[R,S]=r(new Set),a=0;async function N(E,f0){let I=++a;if(f0==null){j(null),L(null),M(null);return}M(null);try{if(E==="all"){let G0=await d8(f0);if(I!==a||f.worktreePath()!==f0)return;j(G0)}else if(E==="changes"){let G0=await i8(f0);if(I!==a||f.worktreePath()!==f0)return;L(G0)}}catch(G0){let x=G0 instanceof Error?G0.message:String(G0);if(I===a&&f.worktreePath()===f0)M(x)}}Gf(k1(f.worktreePath,async(E)=>{j(null),L(null),M(null),Q(0),S(new Set),await N(G(),E)})),Gf(k1(f.worktreePath,(E)=>{if(E==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let f0=null,I=null;try{I=HS(E,{recursive:!0},(G0,x)=>{if(x==null)return;let c=x.toString();if(c===".git"||c.startsWith(".git/")||c.startsWith(".git\\"))return;if(c.startsWith("node_modules/")||c.startsWith("node_modules\\"))return;if(f0!=null)clearTimeout(f0);f0=setTimeout(()=>{f0=null,B((Z0)=>Z0+1)},500)}),I.on("error",()=>{})}catch{}mf(()=>{if(f0!=null)clearTimeout(f0);if(I!=null)I.close()})})),Gf(k1([G,H],async([E,f0])=>{let I=f.worktreePath();if(I==null)return;Q(0);let x=H()>0;if(E==="all"){if(V()==null||x)await N("all",I)}else if(E==="changes"){if(U()==null||x)await N("changes",I)}}));let g=U0(()=>{let E=V();if(E==null)return null;return jL(E)}),C=U0((E)=>{let f0=[];if(G()==="all"){let I=g();if(I!=null)r8(I,R(),0,f0)}else if(G()==="changes"){let I=U();if(I!=null)f0.push(...ML(I))}return FL(E??[],f0)},[]),y=U0(()=>{let E=0,f0=0;for(let I of C()){if(I.kind!=="status")continue;if(I.added!=null)E=Math.max(E,String(I.added).length+1);if(I.deleted!=null)f0=Math.max(f0,String(I.deleted).length+1)}return{added:E,deleted:f0}}),_=U0(()=>{let E=y(),f0=(E.added>0?E.added+1:0)+(E.deleted>0?E.deleted+1:0);return Math.max(8,Y().width-6-f0)});function z0(){let E=C();if(E.length===0)return;Q(Math.min(q()+1,E.length-1))}function t(){if(C().length===0)return;Q(Math.max(q()-1,0))}function Y0(){let E=C(),f0=q(),I=E[f0];if(!I)return;if(I.kind!=="dir")return;if(!I.expanded&&I.hasChildren)S((G0)=>{let x=new Set(G0);return x.add(I.path),x});else if(I.expanded){if(f0+1<E.length)Q(f0+1)}}function T(){if(G()!=="all")return;let E=C(),f0=q(),I=E[f0];if(!I)return;if(I.kind==="dir"&&I.expanded){S((x)=>{let c=new Set(x);return c.delete(I.path),c});return}if(I.kind!=="dir"&&I.kind!=="file")return;let G0=I.depth-1;if(G0<0)return;for(let x=f0-1;x>=0;x--){let c=E[x];if(!c)continue;if(c.kind==="dir"&&c.depth===G0){Q(x);return}}}function Q0(){let E=C(),f0=q();if(f0<0||f0>=E.length)return;let I=E[f0];if(!I)return;if(I.kind==="dir"){S((G0)=>{let x=new Set(G0);if(x.has(I.path))x.delete(I.path);else x.add(I.path);return x});return}f.onOpenFile(I.path)}function p(){let E=C(),f0=q();if(f0<0||f0>=E.length)return;let I=E[f0];if(!I||I.kind==="dir")return;f.onMention?.(I.path)}function D0(){B((E)=>E+1),f.onRefresh?.()}function g0(){let E=C(),f0=q();if(f0<0||f0>=E.length)return;let I=E[f0];if(!I||I.kind==="dir")return;let G0=f.worktreePath();if(!G0)return;let x=`${G0}/${I.path}`;UL(x)}a8({focused:z,moveDown:z0,moveUp:t,setTab:(E)=>X(E),currentTab:G,openCurrent:Q0,mentionCurrent:p,createPR:f.onCreatePR,openExternal:g0,refresh:D0,expandOrDescend:Y0,collapseOrParent:T});let $;return Gf(k1([q,C],([E,f0])=>{if(!$)return;if(f0.length===0)return;let I=$.scrollTop,G0=$.viewport.height;if(G0<=0)return;if(E<I)$.scrollTo({x:0,y:E});else if(E>=I+G0)$.scrollTo({x:0,y:E-G0+1})})),(()=>{var E=W("box"),f0=W("box"),I=W("box"),G0=W("scrollbox");return D(E,f0),D(E,G0),Z(E,"flexDirection","column"),Z(E,"flexGrow",1),Z(E,"paddingTop",1),Z(E,"paddingBottom",1),Z(E,"paddingLeft",0),Z(E,"paddingRight",0),K(E,b(X0,{get when(){return f.onZenToggle||f.onCreatePR},get children(){var x=W("box");return Z(x,"flexDirection","row"),Z(x,"justifyContent","flex-end"),Z(x,"gap",2),Z(x,"paddingBottom",1),Z(x,"flexShrink",0),K(x,b(X0,{get when(){return f.onZenToggle},get children(){var c=W("box"),Z0=W("text"),V0=W("text");return D(c,Z0),D(c,V0),Z(c,"flexDirection","row"),Z(c,"gap",1),Z(c,"onMouseUp",()=>f.onZenToggle?.()),D(Z0,x0("[~]")),Z(Z0,"wrapMode","none"),Z(V0,"wrapMode","none"),K(V0,()=>F("files.actions.zen")),u((H0)=>{var y0=J.accent,w0=pX.BOLD,T0=J.text;return y0!==H0.e&&(H0.e=Z(Z0,"fg",y0,H0.e)),w0!==H0.t&&(H0.t=Z(Z0,"attributes",w0,H0.t)),T0!==H0.a&&(H0.a=Z(V0,"fg",T0,H0.a)),H0},{e:void 0,t:void 0,a:void 0}),c}}),null),K(x,b(X0,{get when(){return f.onCreatePR},get children(){var c=W("box"),Z0=W("text"),V0=W("text");return D(c,Z0),D(c,V0),Z(c,"flexDirection","row"),Z(c,"gap",1),Z(c,"onMouseUp",()=>f.onCreatePR?.()),D(Z0,x0("[P]")),Z(Z0,"wrapMode","none"),Z(V0,"wrapMode","none"),K(V0,()=>F("files.actions.createPR")),u((H0)=>{var y0=J.accent,w0=pX.BOLD,T0=J.text;return y0!==H0.e&&(H0.e=Z(Z0,"fg",y0,H0.e)),w0!==H0.t&&(H0.t=Z(Z0,"attributes",w0,H0.t)),T0!==H0.a&&(H0.a=Z(V0,"fg",T0,H0.a)),H0},{e:void 0,t:void 0,a:void 0}),c}}),null),x}}),f0),D(f0,I),Z(f0,"flexDirection","row"),Z(f0,"justifyContent","space-between"),Z(f0,"paddingBottom",0),Z(f0,"flexShrink",0),Z(I,"flexDirection","row"),Z(I,"gap",2),K(I,b(Zf,{each:jS,children:(x)=>{let c=()=>G()===x;return(()=>{var Z0=W("text");return Z(Z0,"wrapMode","none"),Z(Z0,"onMouseUp",()=>X(x)),K(Z0,()=>VS(x)),u((V0)=>{var H0=c()?J.primary:J.textMuted,y0=c()?pX.BOLD:void 0;return H0!==V0.e&&(V0.e=Z(Z0,"fg",H0,V0.e)),y0!==V0.t&&(V0.t=Z(Z0,"attributes",y0,V0.t)),V0},{e:void 0,t:void 0}),Z0})()}})),K(f0,b(X0,{get when(){return f.cornerBadge?.()},children:(x)=>(()=>{var c=W("text");return Z(c,"wrapMode","none"),K(c,()=>x().text),u((Z0)=>{var V0=x().active?J.accent:J.textMuted,H0=x().active?pX.BOLD:void 0;return V0!==Z0.e&&(Z0.e=Z(c,"fg",V0,Z0.e)),H0!==Z0.t&&(Z0.t=Z(c,"attributes",H0,Z0.t)),Z0},{e:void 0,t:void 0}),c})()}),null),K(E,b(X0,{get when(){return G()==="changes"},get children(){var x=W("box"),c=W("text");return D(x,c),Z(x,"flexDirection","column"),Z(x,"paddingBottom",1),Z(x,"flexShrink",0),Z(x,"gap",0),Z(c,"wrapMode","none"),K(c,()=>F("files.legend.changes")),u((Z0)=>Z(c,"fg",J.textMuted,Z0)),x}}),G0),K(E,b(X0,{get when(){return G()!=="changes"},get children(){var x=W("box");return Z(x,"flexDirection","row"),Z(x,"paddingBottom",1),Z(x,"flexShrink",0),x}}),G0),hY((x)=>{$=x},G0),Z(G0,"flexGrow",1),Z(G0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),K(G0,b(X0,{get when(){return f.worktreePath()==null},get children(){var x=W("box"),c=W("text");return D(x,c),Z(x,"paddingTop",1),Z(x,"paddingLeft",1),K(c,()=>F("files.empty.noTask")),u((Z0)=>Z(c,"fg",J.textMuted,Z0)),x}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null)()&&O()!=null},get children(){var x=W("box"),c=W("text"),Z0=W("text");return D(x,c),D(x,Z0),Z(x,"paddingTop",1),Z(x,"paddingLeft",1),Z(x,"flexDirection","column"),Z(x,"gap",0),Z(c,"wrapMode","word"),K(c,()=>WS(O()??"")),Z(Z0,"wrapMode","word"),K(Z0,()=>F("files.error.retryHint")),u((V0)=>{var{error:H0,textMuted:y0}=J;return H0!==V0.e&&(V0.e=Z(c,"fg",H0,V0.e)),y0!==V0.t&&(V0.t=Z(Z0,"fg",y0,V0.t)),V0},{e:void 0,t:void 0}),x}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null&&O()==null&&C().length===0)()&&(G()==="all"&&V()!=null||G()==="changes"&&U()!=null)},get children(){var x=W("box"),c=W("text");return D(x,c),Z(x,"paddingTop",1),Z(x,"paddingLeft",1),K(c,(()=>{var Z0=I0(()=>G()==="all");return()=>Z0()?F("files.empty.noFiles"):F("files.empty.noChanges")})()),u((Z0)=>Z(c,"fg",J.textMuted,Z0)),x}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null&&O()==null)()&&C().length>0},get children(){var x=W("box");return Z(x,"flexShrink",0),Z(x,"gap",0),Z(x,"paddingRight",1),K(x,b(Zf,{get each(){return C()},children:(c,Z0)=>{let V0=()=>Z0()===q(),H0=(()=>{var J0=W("text");return Z(J0,"wrapMode","none"),K(J0,()=>V0()?"\u258C":" "),u((F0)=>Z(J0,"fg",V0()?J.focusAccent:void 0,F0)),J0})(),y0=()=>V0()?J.backgroundElement:void 0;if(c.kind==="dir"){let J0=" ".repeat(c.depth),F0=c.expanded?"\u25BE":"\u25B8";return(()=>{var a0=W("box"),p0=W("box"),u0=W("text");return D(a0,p0),Z(a0,"flexDirection","row"),Z(a0,"gap",0),Z(a0,"onMouseUp",()=>{Q(Z0()),S((_0)=>{let n=new Set(_0);if(n.has(c.path))n.delete(c.path);else n.add(c.path);return n})}),K(a0,H0,p0),D(p0,u0),Z(p0,"flexGrow",1),Z(p0,"paddingRight",1),Z(u0,"wrapMode","none"),K(u0,()=>`${J0}${F0} ${c.name}/`),u((_0)=>{var n=y0(),q0=J.textMuted,b0=pX.BOLD;return n!==_0.e&&(_0.e=Z(a0,"backgroundColor",n,_0.e)),q0!==_0.t&&(_0.t=Z(u0,"fg",q0,_0.t)),b0!==_0.a&&(_0.a=Z(u0,"attributes",b0,_0.a)),_0},{e:void 0,t:void 0,a:void 0}),a0})()}if(c.kind==="file"){let J0=" ".repeat(c.depth);return(()=>{var F0=W("box"),a0=W("box"),p0=W("text");return D(F0,a0),Z(F0,"flexDirection","row"),Z(F0,"gap",0),Z(F0,"onMouseUp",()=>{Q(Z0()),f.onOpenFile(c.path)}),K(F0,H0,a0),D(a0,p0),Z(a0,"flexGrow",1),Z(a0,"paddingRight",1),Z(p0,"wrapMode","none"),K(p0,()=>`${J0} ${c.name}`),u((u0)=>{var _0=y0(),n=J.text;return _0!==u0.e&&(u0.e=Z(F0,"backgroundColor",_0,u0.e)),n!==u0.t&&(u0.t=Z(p0,"fg",n,u0.t)),u0},{e:void 0,t:void 0}),F0})()}let w0=BS(c.status),T0=()=>{switch(w0){case"success":return J.success;case"warning":return J.warning;case"error":return J.error;case"info":return J.info;default:return J.textMuted}},r0=y(),P=c.added==null?" ".repeat(r0.added):`+${c.added}`.padStart(r0.added),M0=c.deleted==null?" ".repeat(r0.deleted):`-${c.deleted}`.padStart(r0.deleted);return(()=>{var J0=W("box"),F0=W("box"),a0=W("text"),p0=W("text");return D(J0,F0),Z(J0,"flexDirection","row"),Z(J0,"gap",0),Z(J0,"onMouseUp",()=>{Q(Z0()),f.onOpenFile(c.path)}),K(J0,H0,F0),D(F0,a0),D(F0,p0),Z(F0,"flexDirection","row"),Z(F0,"flexGrow",1),Z(F0,"gap",1),Z(F0,"paddingRight",1),Z(a0,"wrapMode","none"),K(a0,()=>c.status),Z(p0,"wrapMode","none"),Z(p0,"flexGrow",1),K(p0,()=>LL(c.path,_())),K(F0,b(X0,{get when(){return r0.added>0},get children(){var u0=W("text");return Z(u0,"wrapMode","none"),K(u0,P),u((_0)=>Z(u0,"fg",J.success,_0)),u0}}),null),K(F0,b(X0,{get when(){return r0.deleted>0},get children(){var u0=W("text");return Z(u0,"wrapMode","none"),K(u0,M0),u((_0)=>Z(u0,"fg",J.error,_0)),u0}}),null),u((u0)=>{var _0=y0(),n=T0(),q0=J.text;return _0!==u0.e&&(u0.e=Z(J0,"backgroundColor",_0,u0.e)),n!==u0.t&&(u0.t=Z(a0,"fg",n,u0.t)),q0!==u0.a&&(u0.a=Z(p0,"fg",q0,u0.a)),u0},{e:void 0,t:void 0,a:void 0}),J0})()}})),x}}),null),K(E,b(X0,{get when(){return f.worktreePath()!=null},get children(){var x=W("box"),c=W("text");return D(x,c),Z(x,"flexDirection","row"),Z(x,"paddingTop",1),Z(x,"flexShrink",0),Z(c,"wrapMode","none"),K(c,()=>F("files.footer.openHint")),u((Z0)=>Z(c,"fg",J.textMuted,Z0)),x}}),null),E})()}var jS;var RL=k(()=>{h();h();h();h();h();h();h();h();h();X1();h();Wf();xf();l8();$8();DL();gL();jS=["all","changes"]});var CL=k(()=>{RL();l8();$8()});import{promises as KS}from"fs";import US from"path";async function cQ(f,J){let Y=new AbortController,z=setTimeout(()=>Y.abort(),DS);try{let G=await HJ("git",J,{cwd:f,env:w1(),signal:Y.signal});if(Y.signal.aborted)return null;if(G.status!==0)return null;return G.stdout.trim()}finally{clearTimeout(z)}}async function LS(f){return await cQ(f,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function MS(f){let J=await cQ(f,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!J)return"main";return J.startsWith("origin/")?J.slice(7):J}async function FS(f){let J=await cQ(f,["rev-parse","--abbrev-ref","@{u}"]);return J!==null&&J.length>0}async function OS(f){let J=await cQ(f,["status","--porcelain"]);if(!J)return 0;return J.split(`
242
+ `).filter((Y)=>Y.length>0).length}async function AS(f){let[J,Y,z,G]=await Promise.all([LS(f),MS(f),FS(f),OS(f)]);return{branch:J,targetBranch:Y,hasUpstream:z,dirtyCount:G}}function gS(f){if(f<=0)return"There are no uncommitted changes.";if(f===1)return"There is 1 uncommitted change.";return`There are ${f} uncommitted changes.`}function RS(f){return f?"The current branch tracks an upstream.":"There is no upstream branch yet."}function CS(f,J){let Y={branch:J.branch,targetBranch:J.targetBranch,dirtyCountSentence:gS(J.dirtyCount),upstreamSentence:RS(J.hasUpstream)};return f.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(z,G)=>Object.hasOwn(Y,G)?Y[G]:z)}async function kS(f){let J=US.join(f,".kobe","pr-instructions.md");try{let Y=await KS.readFile(J,"utf8");return Y.length>0?Y:kL}catch{return kL}}async function NL(f){let[J,Y]=await Promise.all([kS(f),AS(f)]);return CS(J,Y)}var DS=5000,kL=`The user likes the current state of the code.
243
243
 
244
244
  {{dirtyCountSentence}}
245
245
  The current branch is {{branch}}.
@@ -256,21 +256,37 @@ Follow these steps to create a PR:
256
256
  - Push to origin.
257
257
  - Use \`gh pr create --base {{targetBranch}}\` to create a PR onto the target branch. Keep the title under 80 characters. Keep the description under five sentences. Describe not just changes made in this session but ALL changes since the branch diverged from the target.
258
258
 
259
- If any of these steps fail, ask the user for help.`;var CL=k(()=>{NY();iX()});var $8={};jf($8,{startOpsPreview:()=>mS,startOpsHost:()=>ES,nextActivityPollDelay:()=>yL});import{createHash as CS}from"crypto";import{SyntaxStyle as kS}from"@opentui/core";function yL(f,J){if(J<yS)return NL;return Math.min(f*2,NS)}function TS(f){let{theme:J}=i0(),[Y,z]=r(0),[G,X]=r(0),q=!1;f1(()=>{let M=!1,R,S=NL,a=0,N=0;async function g(){try{let C=await JL(f.vendor,f.worktree);if(M)return;if(!q)q=!0,z(C),N=C;if(C>N)N=C,a=0;else a++;X(C)}catch{a++}finally{if(!M)S=yL(S,a),R=setTimeout(()=>void g(),S)}}g(),mf(()=>{if(M=!0,R)clearTimeout(R)})});let Q=()=>q&&G()>Y(),H=()=>Q()?{text:F("ops.badge.newActivity"),active:!0}:null;function B(){z(G())}f1(()=>{if(!f.targetPane)return;let M=RV(f.vendor),R=!1,S=null,a="",N=!1,g=0,C=null;async function y(Y0){if(Y0===C)return;C=Y0,await AY(f.targetPane,IS,Y0)}async function _(){try{a=kL(await rz(f.targetPane,80)),S=(await M.latestCompletion(f.worktree))?.id??null,await y(M.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function z0(){try{let Y0=kL(await rz(f.targetPane,80));if(R)return;if(Y0!==a)a=Y0,N=!0,g=0,await y(M.supportsCompletionMarkers()?"running":"unknown");else if(N)g++;if(!M.supportsCompletionMarkers()||!N||g<SS)return;let T=await M.latestCompletion(f.worktree);if(R||!T||T.id===S)return;S=T.id,N=!1,g=0,await y("done")}catch{}}_();let t=setInterval(()=>void z0(),bS);mf(()=>{R=!0,clearInterval(t)})});function V(M){if(!f.taskId)return;HJ(Lf(f.taskId),{cwd:f.worktree,command:eW({worktree:f.worktree,relPath:M,cliInvocation:Cf()}),name:uS(M)})}function j(M){if(!f.taskId){V(M);return}let R=`${f.worktree}/${M}`;ZL(Lf(f.taskId),f.worktree,R).then((S)=>{if(!S)V(M)})}function U(M){if(!f.targetPane)return;$Z(f.targetPane,`@${M} `)}async function L(){if(!f.targetPane)return;let M=await RL(f.worktree);await $Z(f.targetPane,M),await GX(f.targetPane,"Enter")}function O(){if(!f.taskId)return;let M=Lf(f.taskId),R=Cf(),S=`${_f()}${g1(R)} layout --session ${Xf(M)} --action zen-toggle`;h0(["run-shell","-b",S])}return(()=>{var M=W("box");return Z(M,"flexDirection","column"),Z(M,"flexGrow",1),K(M,b(a8,{worktreePath:()=>f.worktree,focused:()=>!0,onOpenFile:j,onMention:U,onCreatePR:()=>void L(),get onZenToggle(){return f.taskId?O:void 0},cornerBadge:H,onRefresh:B})),u((R)=>Z(M,"backgroundColor",J.background,R)),M})()}function uS(f){let J=f.lastIndexOf("/");return J>=0?f.slice(J+1):f}function kL(f){return CS("sha1").update(f).digest("hex")}async function ES(f){await L1({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(TS,f)})})}function xS(f){switch(f.slice(f.lastIndexOf(".")+1).toLowerCase()){case"ts":case"tsx":case"mts":case"cts":return"typescript";case"js":case"jsx":case"mjs":case"cjs":return"javascript";case"md":case"markdown":return"markdown";default:return}}async function wS(f,J){let Y=await oz(f,["diff","HEAD","--",J]);return Y.status===0?Y.stdout:""}async function hS(f,J){return await Z7(f,J)??""}function PS(f){let J={fg:f.primary},Y={fg:f.success},z={fg:f.info},G={fg:f.warning},X={fg:f.accent},q={fg:f.textMuted,italic:!0},Q={fg:f.textMuted},H={fg:f.text};return kS.fromStyles({keyword:J,"keyword.function":J,"keyword.return":J,"keyword.import":J,"keyword.exception":J,"keyword.conditional":J,"keyword.repeat":J,"keyword.operator":J,"keyword.modifier":J,"keyword.type":J,string:Y,"string.escape":Y,"string.regexp":Y,"string.special":Y,"character.special":Y,comment:q,"comment.documentation":q,function:z,"function.call":z,"function.method":z,"function.builtin":z,constructor:z,type:G,"type.builtin":G,constant:X,"constant.builtin":X,boolean:X,number:X,operator:Q,"punctuation.bracket":Q,"punctuation.delimiter":Q,"punctuation.special":Q,variable:H,"variable.member":H,"variable.parameter":H,"variable.builtin":X,property:H,attribute:G,label:H,module:H})}function vS(f){let{theme:J}=i0(),Y=PS(J),z=xS(f.relPath),[G]=VZ(()=>f.relPath,async(X)=>{let q=await wS(f.worktree,X);if(q.trim().length>0)return{kind:"diff",text:q};return{kind:"code",text:await hS(f.worktree,X)}});return Uf(()=>({bindings:[{key:"q",cmd:()=>process.exit(0)},{key:"escape",cmd:()=>process.exit(0)},{key:"ctrl+c",cmd:()=>process.exit(0)}]})),(()=>{var X=W("box"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("box");return D(X,q),D(X,V),Z(X,"flexDirection","column"),Z(X,"flexGrow",1),D(q,Q),D(q,H),D(q,B),Z(q,"flexDirection","row"),Z(q,"gap",1),Z(q,"paddingLeft",1),Z(q,"paddingRight",1),K(Q,()=>f.relPath),K(H,(()=>{var j=I0(()=>G()?.kind==="diff");return()=>j()?F("ops.preview.diffVsHead"):F("ops.preview.file")})()),K(B,()=>F("ops.preview.closeHint")),Z(V,"flexGrow",1),K(V,b(X0,{get when(){return G()},get fallback(){return(()=>{var j=W("text");return K(j,()=>F("ops.preview.loading")),u((U)=>Z(j,"fg",J.textMuted,U)),j})()},children:(j)=>b(X0,{get when(){return j().kind==="diff"},get fallback(){return(()=>{var U=W("code");return Z(U,"filetype",z),Z(U,"syntaxStyle",Y),u((L)=>Z(U,"content",j().text,L)),U})()},get children(){var U=W("diff");return Z(U,"view","unified"),Z(U,"filetype",z),Z(U,"syntaxStyle",Y),Z(U,"showLineNumbers",!0),u((L)=>Z(U,"diff",j().text,L)),U}})})),u((j)=>{var{background:U,accent:L,textMuted:O,textMuted:M}=J;return U!==j.e&&(j.e=Z(X,"backgroundColor",U,j.e)),L!==j.t&&(j.t=Z(Q,"fg",L,j.t)),O!==j.a&&(j.a=Z(H,"fg",O,j.a)),M!==j.o&&(j.o=Z(B,"fg",M,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),X})()}async function mS(f){await L1({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(vS,f)})})}var NL=2500,NS=20000,yS=3,bS=1500,SS=2,IS="@kobe_tab_state";var r8=k(()=>{h();h();h();h();h();h();h();lJ();oH();YL();Tf();qL();qJ();qq();Wf();xf();G1();nY();b1();AL();Qz();CL()});var TL={};jf(TL,{startDirectTmux:()=>nS,chooseInitialTask:()=>IL});import{resolve as bL}from"path";function IL(f,J={}){let Y=(q)=>q?f.find((Q)=>Q.id===q):void 0,z=Y(J.activeTaskId);if(z)return z;let G=Y(J.persistedTaskId);if(G)return G;if(J.cwdRepo){let q=f.find((Q)=>Q.kind==="main"&&Q.repo===J.cwdRepo);if(q)return q}let X=f.filter((q)=>!q.archived);return X.find((q)=>q.pinned)??X[0]??f[0]}async function SL(f){if(f.length===0)return null;try{return await Bun.spawn(f,{stdin:"inherit",stdout:"inherit",stderr:"inherit",env:process.env}).exited}catch{return null}}async function cS(f){sQ();let J=[...c1()];if(J.length===0)J=[vJ(bL(process.cwd())).path];for(let Y of J)try{await f.ensureMainTask(Y)}catch(z){console.error(`[kobe] ensureMainTask failed for ${Y}:`,z)}return J[0]??bL(process.cwd())}async function nS(){if(CZ("gui"),Promise.resolve().then(() => (Ij(),Sj)).then((Y)=>Y.ensureGlobalKobeHooks()),!await NJ()){console.error("kobe: tmux not found on PATH \u2014 install tmux to use kobe 0.6 direct mode"),process.exitCode=1;return}let f=await UJ(),J=new j1(f,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=f.socketPath,await J.init();let Y=await cS(J),z=IL(J.listTasks(),{activeTaskId:J.activeTaskSignal()(),persistedTaskId:kf("lastSelectedTaskId"),cwdRepo:Y});if(!z){let V=await rZ();if(await gz(),await lq(V),await SL(az(V))===null)console.error("kobe: failed to attach to the kobe-home session"),process.exitCode=1;return}let G=z.worktreePath||await J.ensureWorktree(z.id),X=Lf(z.id);await J.setActiveTask(z.id).catch(()=>{}),af("lastSelectedTaskId",z.id);let q=oJ(z.repo,G,{kind:"repo-init"});if(!await TY({name:X,cwd:G,command:N1(z.vendor),taskId:z.id,vendor:z.vendor,repo:z.repo,launchInit:q})){console.error(`kobe: tmux session ${X} failed to start (check the daemon log)`),process.exitCode=1;return}await gz(),await lq(X);let H=await SL(az(X));if(H===null){console.error(`kobe: failed to attach to tmux session ${X}`),process.exitCode=1;return}if(H!==0&&!await Hf(X)){console.error(`kobe: tmux session ${X} ended unexpectedly (attach exited ${H})`),process.exitCode=H;return}let B=J.getTask(z.id);if(B&&B.title===RJ&&B.worktreePath)try{let V=await dz(B.worktreePath,B.vendor);if(V)await J.setTitle(B.id,V)}catch(V){console.error("[kobe] auto-title failed:",V)}}finally{J.dispose()}}var uL=k(()=>{eY();y1();PY();E1();lZ();lG();GG();gf();Tf();yq();J1()});var EL={};jf(EL,{startTui:()=>dS});async function dS(){qU();let{startDirectTmux:f}=await Promise.resolve().then(() => (uL(),TL));await f()}var xL=k(()=>{GQ()});vQ();K1();import{resolve as PL}from"path";U1();function Q9(){return[`kobe ${s0}`,"","Usage: kobe [command] [options]","","Run with no command to launch the TUI.","","Commands:"," web [options] Launch the browser dashboard"," add [path] Save a repo path for the new-task picker"," adopt [glob] Import existing git worktrees as tasks"," export [--csv|--json] Print the task list (json/csv/table; daemon-free)"," repo <verb> Per-repo init script + first prompt (show|set|unset)"," api <verb> Scriptable RPC surface for agents (see `kobe api --help`)"," daemon <verb> Manage the daemon (start|stop|status|restart)"," theme <verb> Manage user themes (list|add|remove)"," skill <verb> Install the kobe agent skill (install|status|command)"," feedback Send feedback to GitHub Discussions"," update [target] Self-update kobe"," doctor Diagnose daemon / tmux / state (read-only)"," reset [--hard] Recover a wedged install"," reload Restart Tasks/Ops panes in place (engine untouched)"," kill-sessions Tear down kobe's tmux server (dev reset)","","Options:"," -v, --version Print version"," -h, --help Print this help"].join(`
260
- `)}var wL=`Usage: kobe add [path]
259
+ If any of these steps fail, ask the user for help.`;var yL=k(()=>{CY();lX()});var _8={};jf(_8,{startOpsPreview:()=>nS,startOpsHost:()=>wS,nextActivityPollDelay:()=>IL});import{createHash as NS}from"crypto";import{SyntaxStyle as yS}from"@opentui/core";function IL(f,J){if(J<SS)return SL;return Math.min(f*2,bS)}function ES(f){let{theme:J}=i0(),[Y,z]=r(0),[G,X]=r(0),q=!1;J1(()=>{let M=!1,R,S=SL,a=0,N=0;async function g(){try{let C=await GL(f.vendor,f.worktree);if(M)return;if(!q)q=!0,z(C),N=C;if(C>N)N=C,a=0;else a++;X(C)}catch{a++}finally{if(!M)S=IL(S,a),R=setTimeout(()=>void g(),S)}}g(),mf(()=>{if(M=!0,R)clearTimeout(R)})});let Q=()=>q&&G()>Y(),H=()=>Q()?{text:F("ops.badge.newActivity"),active:!0}:null;function B(){z(G())}J1(()=>{if(!f.targetPane)return;let M=EW(f.vendor),R=!1,S=null,a="",N=!1,g=0,C=null;async function y(Y0){if(Y0===C)return;C=Y0,await FY(f.targetPane,uS,Y0)}async function _(){try{a=bL(await $z(f.targetPane,80)),S=(await M.latestCompletion(f.worktree))?.id??null,await y(M.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function z0(){try{let Y0=bL(await $z(f.targetPane,80));if(R)return;if(Y0!==a)a=Y0,N=!0,g=0,await y(M.supportsCompletionMarkers()?"running":"unknown");else if(N)g++;if(!M.supportsCompletionMarkers()||!N||g<TS)return;let T=await M.latestCompletion(f.worktree);if(R||!T||T.id===S)return;S=T.id,N=!1,g=0,await y("done")}catch{}}_();let t=setInterval(()=>void z0(),IS);mf(()=>{R=!0,clearInterval(t)})});function V(M){if(!f.taskId)return;QJ(Lf(f.taskId),{cwd:f.worktree,command:HW({worktree:f.worktree,relPath:M,cliInvocation:Cf()}),name:xS(M)})}function j(M){if(!f.taskId){V(M);return}let R=`${f.worktree}/${M}`;HL(Lf(f.taskId),f.worktree,R).then((S)=>{if(!S)V(M)})}function U(M){if(!f.targetPane)return;$Z(f.targetPane,`@${M} `)}async function L(){if(!f.targetPane)return;let M=await NL(f.worktree);await $Z(f.targetPane,M),await zX(f.targetPane,"Enter")}function O(){if(!f.taskId)return;let M=Lf(f.taskId),R=Cf(),S=`${_f()}${g1(R)} layout --session ${Xf(M)} --action zen-toggle`;h0(["run-shell","-b",S])}return(()=>{var M=W("box");return Z(M,"flexDirection","column"),Z(M,"flexGrow",1),K(M,b(p8,{worktreePath:()=>f.worktree,focused:()=>!0,onOpenFile:j,onMention:U,onCreatePR:()=>void L(),get onZenToggle(){return f.taskId?O:void 0},cornerBadge:H,onRefresh:B})),u((R)=>Z(M,"backgroundColor",J.background,R)),M})()}function xS(f){let J=f.lastIndexOf("/");return J>=0?f.slice(J+1):f}function bL(f){return NS("sha1").update(f).digest("hex")}async function wS(f){await M1({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(ES,f)})})}function hS(f){switch(f.slice(f.lastIndexOf(".")+1).toLowerCase()){case"ts":case"tsx":case"mts":case"cts":return"typescript";case"js":case"jsx":case"mjs":case"cjs":return"javascript";case"md":case"markdown":return"markdown";default:return}}async function PS(f,J){let Y=await _z(f,["diff","HEAD","--",J]);return Y.status===0?Y.stdout:""}async function vS(f,J){return await tV(f,J)??""}function mS(f){let J={fg:f.primary},Y={fg:f.success},z={fg:f.info},G={fg:f.warning},X={fg:f.accent},q={fg:f.textMuted,italic:!0},Q={fg:f.textMuted},H={fg:f.text};return yS.fromStyles({keyword:J,"keyword.function":J,"keyword.return":J,"keyword.import":J,"keyword.exception":J,"keyword.conditional":J,"keyword.repeat":J,"keyword.operator":J,"keyword.modifier":J,"keyword.type":J,string:Y,"string.escape":Y,"string.regexp":Y,"string.special":Y,"character.special":Y,comment:q,"comment.documentation":q,function:z,"function.call":z,"function.method":z,"function.builtin":z,constructor:z,type:G,"type.builtin":G,constant:X,"constant.builtin":X,boolean:X,number:X,operator:Q,"punctuation.bracket":Q,"punctuation.delimiter":Q,"punctuation.special":Q,variable:H,"variable.member":H,"variable.parameter":H,"variable.builtin":X,property:H,attribute:G,label:H,module:H})}function cS(f){let{theme:J}=i0(),Y=mS(J),z=hS(f.relPath),[G]=PZ(()=>f.relPath,async(X)=>{let q=await PS(f.worktree,X);if(q.trim().length>0)return{kind:"diff",text:q};return{kind:"code",text:await vS(f.worktree,X)}});return Uf(()=>({bindings:[{key:"q",cmd:()=>process.exit(0)},{key:"escape",cmd:()=>process.exit(0)},{key:"ctrl+c",cmd:()=>process.exit(0)}]})),(()=>{var X=W("box"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("box");return D(X,q),D(X,V),Z(X,"flexDirection","column"),Z(X,"flexGrow",1),D(q,Q),D(q,H),D(q,B),Z(q,"flexDirection","row"),Z(q,"gap",1),Z(q,"paddingLeft",1),Z(q,"paddingRight",1),K(Q,()=>f.relPath),K(H,(()=>{var j=I0(()=>G()?.kind==="diff");return()=>j()?F("ops.preview.diffVsHead"):F("ops.preview.file")})()),K(B,()=>F("ops.preview.closeHint")),Z(V,"flexGrow",1),K(V,b(X0,{get when(){return G()},get fallback(){return(()=>{var j=W("text");return K(j,()=>F("ops.preview.loading")),u((U)=>Z(j,"fg",J.textMuted,U)),j})()},children:(j)=>b(X0,{get when(){return j().kind==="diff"},get fallback(){return(()=>{var U=W("code");return Z(U,"filetype",z),Z(U,"syntaxStyle",Y),u((L)=>Z(U,"content",j().text,L)),U})()},get children(){var U=W("diff");return Z(U,"view","unified"),Z(U,"filetype",z),Z(U,"syntaxStyle",Y),Z(U,"showLineNumbers",!0),u((L)=>Z(U,"diff",j().text,L)),U}})})),u((j)=>{var{background:U,accent:L,textMuted:O,textMuted:M}=J;return U!==j.e&&(j.e=Z(X,"backgroundColor",U,j.e)),L!==j.t&&(j.t=Z(Q,"fg",L,j.t)),O!==j.a&&(j.a=Z(H,"fg",O,j.a)),M!==j.o&&(j.o=Z(B,"fg",M,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),X})()}async function nS(f){await M1({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(cS,f)})})}var SL=2500,bS=20000,SS=3,IS=1500,TS=2,uS="@kobe_tab_state";var o8=k(()=>{h();h();h();h();h();h();h();lJ();hH();XL();Tf();BL();zJ();qq();Wf();xf();X1();nY();S1();CL();Qz();yL()});var xL={};jf(xL,{startDirectTmux:()=>iS,chooseInitialTask:()=>EL});import{resolve as TL}from"path";function EL(f,J={}){let Y=(q)=>q?f.find((Q)=>Q.id===q):void 0,z=Y(J.activeTaskId);if(z)return z;let G=Y(J.persistedTaskId);if(G)return G;if(J.cwdRepo){let q=f.find((Q)=>Q.kind==="main"&&Q.repo===J.cwdRepo);if(q)return q}let X=f.filter((q)=>!q.archived);return X.find((q)=>q.pinned)??X[0]??f[0]}async function uL(f){if(f.length===0)return null;try{return await Bun.spawn(f,{stdin:"inherit",stdout:"inherit",stderr:"inherit",env:process.env}).exited}catch{return null}}async function dS(f){JH();let J=[...O1()];if(J.length===0)J=[vJ(TL(process.cwd())).path];for(let Y of J)try{await f.ensureMainTask(Y)}catch(z){console.error(`[kobe] ensureMainTask failed for ${Y}:`,z)}return J[0]??TL(process.cwd())}async function iS(){if(HZ("gui"),Promise.resolve().then(() => (Ej(),uj)).then((Y)=>Y.ensureGlobalKobeHooks()),!await NJ()){console.error("kobe: tmux not found on PATH \u2014 install tmux to use kobe 0.6 direct mode"),process.exitCode=1;return}let f=await KJ(),J=new W1(f,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=f.socketPath,await J.init();let Y=await dS(J),z=EL(J.listTasks(),{activeTaskId:J.activeTaskSignal()(),persistedTaskId:kf("lastSelectedTaskId"),cwdRepo:Y});if(!z){let V=await rZ();if(await gz(),await aq(V),await uL(lz(V))===null)console.error("kobe: failed to attach to the kobe-home session"),process.exitCode=1;return}let G=z.worktreePath||await J.ensureWorktree(z.id),X=Lf(z.id);await J.setActiveTask(z.id).catch(()=>{}),af("lastSelectedTaskId",z.id);let q=sJ(z.repo,G,{kind:"repo-init"});if(!await SY({name:X,cwd:G,command:b1(z.vendor),taskId:z.id,vendor:z.vendor,repo:z.repo,launchInit:q})){console.error(`kobe: tmux session ${X} failed to start (check the daemon log)`),process.exitCode=1;return}await gz(),await aq(X);let H=await uL(lz(X));if(H===null){console.error(`kobe: failed to attach to tmux session ${X}`),process.exitCode=1;return}if(H!==0&&!await Hf(X)){console.error(`kobe: tmux session ${X} ended unexpectedly (attach exited ${H})`),process.exitCode=H;return}let B=J.getTask(z.id);if(B&&B.title===kJ&&B.worktreePath)try{let V=await Pz(B.worktreePath,B.vendor);if(V)await J.setTitle(B.id,V)}catch(V){console.error("[kobe] auto-title failed:",V)}}finally{J.dispose()}}var wL=k(()=>{sY();L1();PY();x1();IZ();eG();zG();Af();Tf();yq();Y1()});var hL={};jf(hL,{startTui:()=>lS});async function lS(){BU();let{startDirectTmux:f}=await Promise.resolve().then(() => (wL(),xL));await f()}var PL=k(()=>{qQ()});nQ();U1();import{resolve as t8}from"path";D1();function V9(){return[`kobe ${s0}`,"","Usage: kobe [command] [options]","","Run with no command to launch the TUI.","","Commands:"," web [options] Launch the browser dashboard"," add [path] Save a repo path for the new-task picker"," remove [path] Forget a saved project (inverse of add; non-destructive)"," adopt [glob] Import existing git worktrees as tasks"," export [--csv|--json] Print the task list (json/csv/table; daemon-free)"," repo <verb> Per-repo init script + first prompt (show|set|unset)"," api <verb> Scriptable RPC surface for agents (see `kobe api --help`)"," daemon <verb> Manage the daemon (start|stop|status|restart)"," theme <verb> Manage user themes (list|add|remove)"," skill <verb> Install the kobe agent skill (install|status|command)"," feedback Send feedback to GitHub Discussions"," update [target] Self-update kobe"," doctor Diagnose daemon / tmux / state (read-only)"," reset [--hard] Recover a wedged install"," reload Restart Tasks/Ops panes in place (engine untouched)"," kill-sessions Tear down kobe's tmux server (dev reset)","","Options:"," -v, --version Print version"," -h, --help Print this help"].join(`
260
+ `)}var vL=`Usage: kobe add [path]
261
261
  kobe add --remote --host <host> --user <user> --path <basePath> [--port N] [--key <path> | --password]
262
262
 
263
263
  Save a repo for the new-task picker. With --remote, register an SSH-backed
264
264
  project whose worktrees + engine run on <host> under <basePath>.
265
- `;async function iS(f){let J=f[0];if(J==="--help"||J==="-h"||J==="help"){process.stdout.write(wL);return}if(J==="--remote"){let{runAddRemote:X}=await Promise.resolve().then(() => (k9(),C9));await X(f.slice(1));return}if(J?.startsWith("-"))process.stderr.write(`kobe add: unknown flag "${J}"
265
+ `;async function aS(f){let J=f[0];if(J==="--help"||J==="-h"||J==="help"){process.stdout.write(vL);return}if(J==="--remote"){let{runAddRemote:q}=await Promise.resolve().then(() => (S9(),b9));await q(f.slice(1));return}if(J?.startsWith("-"))process.stderr.write(`kobe add: unknown flag "${J}"
266
+
267
+ ${vL}`),process.exit(2);let Y=t8(process.cwd(),J&&J.length>0?J:"."),{addSavedRepo:z,isGitRepo:G}=await Promise.resolve().then(() => (Af(),cJ));if(!G(Y))process.stderr.write(`kobe add: "${J&&J.length>0?J:"."}" is not a git repository (resolved to ${Y}).
268
+ `),process.exit(1);let X=z(Y);if(X.added)console.log(`added ${X.path} (${X.total} saved repo${X.total===1?"":"s"} total)`);else console.log(`already saved: ${X.path}`);await rS(X.path)}var mL=`Usage: kobe remove [path]
269
+
270
+ Forget a saved project (drop it from the new-task picker). Non-destructive:
271
+ the repo's files, worktrees, branches and tasks all stay on disk. A remote
272
+ (ssh://) project also has its stored connection config dropped.
273
+
274
+ path defaults to the current directory. Pass an exact saved entry (e.g. a
275
+ remote \`ssh://user@host\` key) to remove it verbatim. Run with no match to
276
+ print the current saved projects.
277
+ `;async function $S(f){let J=f[0];if(J==="--help"||J==="-h"||J==="help"){process.stdout.write(mL);return}if(J?.startsWith("-"))process.stderr.write(`kobe remove: unknown flag "${J}"
278
+
279
+ ${mL}`),process.exit(2);let{getSavedRepos:Y,resolveRepoRoot:z}=await Promise.resolve().then(() => (Af(),cJ)),G=Y();if(G.length===0){console.log("no saved projects to remove.");return}let X=J&&J.length>0?J:".",q=G.includes(X)?X:(()=>{let V=t8(process.cwd(),X),j=z(V);if(G.includes(j))return j;if(G.includes(V))return V;return null})();if(q===null){process.stderr.write(`kobe remove: "${X}" is not a saved project.
266
280
 
267
- ${wL}`),process.exit(2);let Y=PL(process.cwd(),J&&J.length>0?J:"."),{addSavedRepo:z}=await Promise.resolve().then(() => (gf(),qY)),G=z(Y);if(G.added)console.log(`added ${G.path} (${G.total} saved repo${G.total===1?"":"s"} total)`);else console.log(`already saved: ${G.path}`);await lS(G.path)}async function lS(f){let J=await vL(),Y;try{Y=await J.discoverAdoptableWorktrees(f)}catch(z){console.error(`(skipped worktree scan: ${z instanceof Error?z.message:String(z)})`);return}if(Y.length===0)return;console.log(`scanning ${f}: ${Y.length} unlinked worktree(s) \u2192 importing`),await mL(J,f,Y,iY(void 0))}async function vL(){let{TaskIndexStore:f}=await Promise.resolve().then(() => (vG(),zH)),{GitWorktreeManager:J}=await Promise.resolve().then(() => (qH(),p9)),{Orchestrator:Y}=await Promise.resolve().then(() => (lG(),FW)),z=new f;return await z.load(),new Y({store:z,worktrees:new J})}async function mL(f,J,Y,z){let{connectIfRunning:G}=await Promise.resolve().then(() => (y1(),Jj)),X=await G();try{for(let q of Y){let Q=X?(await X.request("worktree.adopt",{repo:J,worktreePath:q.path,branch:q.branch,vendor:z})).task:await f.adoptWorktree({repo:J,worktreePath:q.path,branch:q.branch,vendor:z});console.log(` adopted ${q.branch} \u2192 task ${Q.id} (${Q.title})`)}}finally{X?.close()}}var cL=["Usage: kobe adopt [glob] [--repo <path>] [--vendor <v>] [--yes]","","Import existing git worktrees in a repo as kobe tasks.","No glob \u2192 dry-run listing. With a glob \u2192 list matches; --yes adopts them.","","Options:"," --repo <path> Repo to scan (default: current directory)"," --vendor <v> Engine vendor for adopted tasks"," -y, --yes Actually adopt the matched worktrees"," -h, --help Print this help",""].join(`
268
- `);function p8(f){process.stderr.write(`kobe adopt: ${f}
281
+ Saved projects:
282
+ `);for(let V of G)process.stderr.write(` ${V}
283
+ `);process.exit(1)}let{connectIfRunning:Q}=await Promise.resolve().then(() => (L1(),lq)),H=await Q();try{if(H)await H.request("project.forget",{repo:q});else await(await e8()).forgetProject(q)}finally{H?.close()}let B=Y().length;console.log(`removed ${q} (${B} saved repo${B===1?"":"s"} left)`)}async function rS(f){let J=await e8(),Y;try{Y=await J.discoverAdoptableWorktrees(f)}catch(z){console.error(`(skipped worktree scan: ${z instanceof Error?z.message:String(z)})`);return}if(Y.length===0)return;console.log(`scanning ${f}: ${Y.length} unlinked worktree(s) \u2192 importing`),await nL(J,f,Y,iY(void 0))}async function e8(){let{TaskIndexStore:f}=await Promise.resolve().then(() => (OX(),jj)),{GitWorktreeManager:J}=await Promise.resolve().then(() => (Vj(),UK)),{Orchestrator:Y}=await Promise.resolve().then(() => (eG(),OV)),z=new f;return await z.load(),new Y({store:z,worktrees:new J})}async function nL(f,J,Y,z){let{connectIfRunning:G}=await Promise.resolve().then(() => (L1(),lq)),X=await G();try{for(let q of Y){let Q=X?(await X.request("worktree.adopt",{repo:J,worktreePath:q.path,branch:q.branch,vendor:z})).task:await f.adoptWorktree({repo:J,worktreePath:q.path,branch:q.branch,vendor:z});console.log(` adopted ${q.branch} \u2192 task ${Q.id} (${Q.title})`)}}finally{X?.close()}}var dL=["Usage: kobe adopt [glob] [--repo <path>] [--vendor <v>] [--yes]","","Import existing git worktrees in a repo as kobe tasks.","No glob \u2192 dry-run listing. With a glob \u2192 list matches; --yes adopts them.","","Options:"," --repo <path> Repo to scan (default: current directory)"," --vendor <v> Engine vendor for adopted tasks"," -y, --yes Actually adopt the matched worktrees"," -h, --help Print this help",""].join(`
284
+ `);function s8(f){process.stderr.write(`kobe adopt: ${f}
269
285
 
270
- ${cL}
271
- `),process.exit(2)}async function aS(f){let J,Y,z,G=!1;for(let U=0;U<f.length;U++){let L=f[U];if(L==="--help"||L==="-h"||L==="help"){process.stdout.write(`${cL}
272
- `);return}if(L==="--repo"){if(Y=f[++U],Y===void 0)p8("--repo requires a value")}else if(L==="--vendor"){if(z=f[++U],z===void 0)p8("--vendor requires a value")}else if(L==="--yes"||L==="-y")G=!0;else if(L&&!L.startsWith("-")&&J===void 0)J=L;else p8(`unexpected argument "${L}"`)}let{resolveRepoRoot:X}=await Promise.resolve().then(() => (gf(),qY)),q=X(PL(process.cwd(),Y&&Y.length>0?Y:".")),Q=iY(z),H=await vL(),B=await H.discoverAdoptableWorktrees(q);if(B.length===0){console.log(`no adoptable worktrees for ${q} \u2014 every git worktree here is already a task`);return}let V=(U)=>!J||_X(J,U.path);console.log(`adoptable worktrees in ${q}:`);for(let U of B){let L=J?V(U)?"*":" ":"-",O=[U.dirty?"dirty":"",U.kobeManaged?"":"external"].filter(Boolean).join(",");console.log(` ${L} ${U.branch} ${U.path}${O?` (${O})`:""}`)}if(!J){console.log(`
286
+ ${dL}
287
+ `),process.exit(2)}async function pS(f){let J,Y,z,G=!1;for(let U=0;U<f.length;U++){let L=f[U];if(L==="--help"||L==="-h"||L==="help"){process.stdout.write(`${dL}
288
+ `);return}if(L==="--repo"){if(Y=f[++U],Y===void 0)s8("--repo requires a value")}else if(L==="--vendor"){if(z=f[++U],z===void 0)s8("--vendor requires a value")}else if(L==="--yes"||L==="-y")G=!0;else if(L&&!L.startsWith("-")&&J===void 0)J=L;else s8(`unexpected argument "${L}"`)}let{resolveRepoRoot:X}=await Promise.resolve().then(() => (Af(),cJ)),q=X(t8(process.cwd(),Y&&Y.length>0?Y:".")),Q=iY(z),H=await e8(),B=await H.discoverAdoptableWorktrees(q);if(B.length===0){console.log(`no adoptable worktrees for ${q} \u2014 every git worktree here is already a task`);return}let V=(U)=>!J||oX(J,U.path);console.log(`adoptable worktrees in ${q}:`);for(let U of B){let L=J?V(U)?"*":" ":"-",O=[U.dirty?"dirty":"",U.kobeManaged?"":"external"].filter(Boolean).join(",");console.log(` ${L} ${U.branch} ${U.path}${O?` (${O})`:""}`)}if(!J){console.log(`
273
289
  pass a path glob to adopt, e.g. kobe adopt '${q}/*' --yes`);return}let j=B.filter(V);if(j.length===0){console.log(`
274
290
  no worktrees match glob ${JSON.stringify(J)}`);return}if(!G){console.log(`
275
- ${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await mL(H,q,j,Q),console.log(`done \u2014 adopted ${j.length} worktree(s)`)}function hL(f){f.write(`${Q9()}
276
- `)}function FJ(f){let J={};for(let Y=0;Y<f.length;Y++){let z=f[Y],G=f[Y+1];if(G===void 0)continue;if(z==="--task-id")J.taskId=G,Y++;else if(z==="--worktree")J.worktree=G,Y++;else if(z==="--target-pane")J.targetPane=G,Y++;else if(z==="--vendor")J.vendor=G,Y++;else if(z==="--preview")J.preview=G,Y++;else if(z==="--session")J.session=G,Y++;else if(z==="--repo")J.repo=G,Y++;else if(z==="--initial-task-id")J.initialTaskId=G,Y++;else if(z==="--action")J.action=G,Y++;else if(z==="--window")J.windowId=G,Y++;else if(z==="--cols")J.cols=G,Y++;else if(z==="--rows")J.rows=G,Y++;else if(z==="--status")J.status=G,Y++;else if(z==="--client")J.client=G,Y++}return J}async function $S(){let[,,...f]=process.argv,[J,...Y]=f;if(J==="--version"||J==="-v"||J==="version"){let{CURRENT_VERSION:G}=await Promise.resolve().then(() => (U1(),q9));console.log(`kobe ${G}`);return}if(J==="--help"||J==="-h"||J==="help"){hL(process.stdout);return}if(J==="add"){await iS(Y);return}if(J==="adopt"){await aS(Y);return}if(J==="export"){let{runExportSubcommand:G}=await Promise.resolve().then(() => (LK(),DK));await G(Y);return}if(J==="repo"){let{runRepoSubcommand:G}=await Promise.resolve().then(() => (AK(),OK));await G(Y);return}if(J==="api"){let{runApiSubcommand:G}=await Promise.resolve().then(() => (vK(),PK));await G(Y);return}if(J==="update"){let{runUpdateSubcommand:G}=await Promise.resolve().then(() => (iK(),dK));await G(Y);return}if(J==="theme"){let{runThemeSubcommand:G}=await Promise.resolve().then(() => (pK(),rK));await G(Y);return}if(J==="feedback"){let{runFeedbackSubcommand:G}=await Promise.resolve().then(() => (eK(),tK));await G(Y);return}if(J==="daemon"){let{runDaemonSubcommand:G}=await Promise.resolve().then(() => (GU(),zU));await G(Y);return}if(J==="doctor"){let{runDoctorSubcommand:G}=await Promise.resolve().then(() => (ZQ(),XQ));await G(Y);return}if(J==="web"){let{runWebSubcommand:G}=await Promise.resolve().then(() => (OU(),FU));await G(Y);return}if(J==="reset"){let{runResetSubcommand:G}=await Promise.resolve().then(() => (ZQ(),XQ));await G(Y);return}if(J==="reload"){let{runReloadSubcommand:G}=await Promise.resolve().then(() => (ZQ(),XQ));await G(Y);return}if(J==="skill"){let{runSkillSubcommand:G}=await Promise.resolve().then(() => (RU(),gU));await G(Y);return}if(J==="hook"){let{runHookSubcommand:G}=await Promise.resolve().then(() => (Ij(),Sj));await G(Y);return}if(J==="new-chattab"){let G=FJ(Y),X=G.session;if(!X)console.error("kobe new-chattab: --session <name> is required"),process.exit(2);let{windowIsSurface:q}=await Promise.resolve().then(() => (Tf(),XX));if(await q(X))return;let Q;if(G.vendor!==void 0){let B=G.vendor.trim(),{getCustomEngineIds:V}=await Promise.resolve().then(() => (gf(),qY)),{isBuiltinVendor:j}=await Promise.resolve().then(() => (K1(),f9));if(!(j(B)||V().includes(B))){let O=[...cf,...V()].join(", "),M=`kobe: unknown engine '${B}' (known: ${O})`,{runTmux:R}=await Promise.resolve().then(() => (Tf(),XX));await R(["display-message","-t",X,M]),console.error(M),process.exit(2)}Q=B;let{setPersistedString:L}=await Promise.resolve().then(() => (gf(),qY));L("lastSelectedVendor",Q)}let{newChatTab:H}=await Promise.resolve().then(() => (J1(),r1));await H(X,Q);return}if(J==="kill-sessions"){let{runTmux:G,KOBE_TMUX_SOCKET:X}=await Promise.resolve().then(() => (Tf(),XX)),q=await G(["kill-server"]);console.log(q===0?`kobe: killed all tmux sessions on the \`${X}\` socket`:`kobe: no tmux sessions to kill on the \`${X}\` socket`);return}if(J==="quick-create"){let X=FJ(Y).session;if(!X)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:q}=await Promise.resolve().then(() => (J1(),r1));await q(X);return}if(J==="focus-tasks"){let G=FJ(Y),X=G.session;if(!X)console.error("kobe focus-tasks: --session <name> is required"),process.exit(2);let{windowIsSurface:q}=await Promise.resolve().then(() => (Tf(),XX));if(G.windowId&&await q(G.windowId))return;let{selectTasksPane:Q}=await Promise.resolve().then(() => (J1(),r1));await Q(X,{windowId:G.windowId});return}if(J==="heal-layout"){let X=FJ(Y).session;if(!X)console.error("kobe heal-layout: --session <name> is required"),process.exit(2);let{healSessionLayout:q}=await Promise.resolve().then(() => (J1(),r1)),{coalesceLayoutWork:Q}=await Promise.resolve().then(() => (QG(),Sq));await Q(X,"heal",()=>q(X));return}if(J==="resync-window"){let G=FJ(Y),X=G.session;if(!X)console.error("kobe resync-window: --session <name> is required"),process.exit(2);let q=Number.parseInt(G.cols??"",10),Q=Number.parseInt(G.rows??"",10),H=Number.isInteger(q)&&q>0&&Number.isInteger(Q)&&Q>0?{columns:q,rows:Q}:null,{resyncWindowToClient:B}=await Promise.resolve().then(() => (J1(),r1)),{coalesceLayoutWork:V}=await Promise.resolve().then(() => (QG(),Sq));await V(X,"resync",()=>B(X,{size:H,status:G.status,clientName:G.client}));return}if(J==="capture-layout"){let X=FJ(Y).session;if(!X)console.error("kobe capture-layout: --session <name> is required"),process.exit(2);let{captureGlobalLayoutOnDrag:q}=await Promise.resolve().then(() => (J1(),r1)),{coalesceLayoutWork:Q,genAgeMs:H,RESIZE_GUARD_MS:B}=await Promise.resolve().then(() => (QG(),Sq));await Q(X,"capture",async()=>{if(H(X,"resize")<B)return;await q(X)});return}if(J==="layout"){let G=FJ(Y),X=G.session;if(!X)console.error("kobe layout: --session <name> is required"),process.exit(2);let q=G.action;if(!q||!new Set(["workspace-split","workspace-close","workspace-reset","tasks-toggle","tasks-restore","ops-toggle","terminal-toggle","zen-toggle","chat-tab-close"]).has(q))console.error("kobe layout: --action must be one of workspace-split, workspace-close, workspace-reset, tasks-toggle, tasks-restore, ops-toggle, terminal-toggle, zen-toggle, chat-tab-close"),process.exit(2);let{runLayoutAction:H}=await Promise.resolve().then(() => (J1(),r1));await H(X,q,{windowId:G.windowId});return}if(J==="quick-task"){let G=FJ(Y),{startQuickTaskHost:X}=await Promise.resolve().then(() => (p4(),r4));await X({session:G.session});return}if(J==="tasks"){let G=FJ(Y),{startTasksPane:X}=await Promise.resolve().then(() => (pD(),rD));await X({initialTaskId:G.initialTaskId});return}if(J==="settings"){let{startSettingsHost:G}=await Promise.resolve().then(() => (oD(),_D));await G();return}if(J==="help-page"){let{startHelpHost:G}=await Promise.resolve().then(() => (tD(),sD));await G();return}if(J==="new-task"){let G=FJ(Y),{startNewTaskHost:X}=await Promise.resolve().then(() => (U8(),m4));await X({defaultRepo:G.repo});return}if(J==="update-page"){let{startUpdateHost:G}=await Promise.resolve().then(() => (fL(),eD));await G();return}if(J==="ops"){let G=FJ(Y);if(!G.worktree)console.error("kobe ops: --worktree <path> is required"),process.exit(2);if(G.preview){let{startOpsPreview:q}=await Promise.resolve().then(() => (r8(),$8));await q({worktree:G.worktree,relPath:G.preview});return}let{startOpsHost:X}=await Promise.resolve().then(() => (r8(),$8));await X({taskId:G.taskId??"",worktree:G.worktree,targetPane:G.targetPane??null,vendor:iY(G.vendor)});return}if(J!==void 0)console.error(`kobe: unknown command '${J}'`),hL(process.stderr),process.exit(2);let{startTui:z}=await Promise.resolve().then(() => (xL(),EL));await z()}$S().catch((f)=>{console.error("kobe failed to start:",f),process.exit(1)});
291
+ ${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await nL(H,q,j,Q),console.log(`done \u2014 adopted ${j.length} worktree(s)`)}function cL(f){f.write(`${V9()}
292
+ `)}function FJ(f){let J={};for(let Y=0;Y<f.length;Y++){let z=f[Y],G=f[Y+1];if(G===void 0)continue;if(z==="--task-id")J.taskId=G,Y++;else if(z==="--worktree")J.worktree=G,Y++;else if(z==="--target-pane")J.targetPane=G,Y++;else if(z==="--vendor")J.vendor=G,Y++;else if(z==="--preview")J.preview=G,Y++;else if(z==="--session")J.session=G,Y++;else if(z==="--repo")J.repo=G,Y++;else if(z==="--initial-task-id")J.initialTaskId=G,Y++;else if(z==="--action")J.action=G,Y++;else if(z==="--window")J.windowId=G,Y++;else if(z==="--cols")J.cols=G,Y++;else if(z==="--rows")J.rows=G,Y++;else if(z==="--status")J.status=G,Y++;else if(z==="--client")J.client=G,Y++}return J}async function _S(){let[,,...f]=process.argv,[J,...Y]=f;if(J==="--version"||J==="-v"||J==="version"){let{CURRENT_VERSION:G}=await Promise.resolve().then(() => (D1(),W9));console.log(`kobe ${G}`);return}if(J==="--help"||J==="-h"||J==="help"){cL(process.stdout);return}if(J==="add"){await aS(Y);return}if(J==="remove"){await $S(Y);return}if(J==="adopt"){await pS(Y);return}if(J==="export"){let{runExportSubcommand:G}=await Promise.resolve().then(() => (OK(),FK));await G(Y);return}if(J==="repo"){let{runRepoSubcommand:G}=await Promise.resolve().then(() => (CK(),RK));await G(Y);return}if(J==="api"){let{runApiSubcommand:G}=await Promise.resolve().then(() => (nK(),cK));await G(Y);return}if(J==="update"){let{runUpdateSubcommand:G}=await Promise.resolve().then(() => ($K(),aK));await G(Y);return}if(J==="theme"){let{runThemeSubcommand:G}=await Promise.resolve().then(() => (sK(),oK));await G(Y);return}if(J==="feedback"){let{runFeedbackSubcommand:G}=await Promise.resolve().then(() => (YU(),JU));await G(Y);return}if(J==="daemon"){let{runDaemonSubcommand:G}=await Promise.resolve().then(() => (qU(),ZU));await G(Y);return}if(J==="doctor"){let{runDoctorSubcommand:G}=await Promise.resolve().then(() => (HQ(),QQ));await G(Y);return}if(J==="web"){let{runWebSubcommand:G}=await Promise.resolve().then(() => (RU(),gU));await G(Y);return}if(J==="reset"){let{runResetSubcommand:G}=await Promise.resolve().then(() => (HQ(),QQ));await G(Y);return}if(J==="reload"){let{runReloadSubcommand:G}=await Promise.resolve().then(() => (HQ(),QQ));await G(Y);return}if(J==="skill"){let{runSkillSubcommand:G}=await Promise.resolve().then(() => (NU(),kU));await G(Y);return}if(J==="hook"){let{runHookSubcommand:G}=await Promise.resolve().then(() => (Ej(),uj));await G(Y);return}if(J==="new-chattab"){let G=FJ(Y),X=G.session;if(!X)console.error("kobe new-chattab: --session <name> is required"),process.exit(2);let{windowIsSurface:q}=await Promise.resolve().then(() => (Tf(),GX));if(await q(X))return;let Q;if(G.vendor!==void 0){let B=G.vendor.trim(),{getCustomEngineIds:V}=await Promise.resolve().then(() => (Af(),cJ)),{isBuiltinVendor:j}=await Promise.resolve().then(() => (U1(),X9));if(!(j(B)||V().includes(B))){let O=[...cf,...V()].join(", "),M=`kobe: unknown engine '${B}' (known: ${O})`,{runTmux:R}=await Promise.resolve().then(() => (Tf(),GX));await R(["display-message","-t",X,M]),console.error(M),process.exit(2)}Q=B;let{setPersistedString:L}=await Promise.resolve().then(() => (Af(),cJ));L("lastSelectedVendor",Q)}let{newChatTab:H}=await Promise.resolve().then(() => (Y1(),r1));await H(X,Q);return}if(J==="kill-sessions"){let{runTmux:G,KOBE_TMUX_SOCKET:X}=await Promise.resolve().then(() => (Tf(),GX)),q=await G(["kill-server"]);console.log(q===0?`kobe: killed all tmux sessions on the \`${X}\` socket`:`kobe: no tmux sessions to kill on the \`${X}\` socket`);return}if(J==="quick-create"){let X=FJ(Y).session;if(!X)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:q}=await Promise.resolve().then(() => (Y1(),r1));await q(X);return}if(J==="focus-tasks"){let G=FJ(Y),X=G.session;if(!X)console.error("kobe focus-tasks: --session <name> is required"),process.exit(2);let{windowIsSurface:q}=await Promise.resolve().then(() => (Tf(),GX));if(G.windowId&&await q(G.windowId))return;let{selectTasksPane:Q}=await Promise.resolve().then(() => (Y1(),r1));await Q(X,{windowId:G.windowId});return}if(J==="heal-layout"){let X=FJ(Y).session;if(!X)console.error("kobe heal-layout: --session <name> is required"),process.exit(2);let{healSessionLayout:q}=await Promise.resolve().then(() => (Y1(),r1)),{coalesceLayoutWork:Q}=await Promise.resolve().then(() => (qG(),Sq));await Q(X,"heal",()=>q(X));return}if(J==="resync-window"){let G=FJ(Y),X=G.session;if(!X)console.error("kobe resync-window: --session <name> is required"),process.exit(2);let q=Number.parseInt(G.cols??"",10),Q=Number.parseInt(G.rows??"",10),H=Number.isInteger(q)&&q>0&&Number.isInteger(Q)&&Q>0?{columns:q,rows:Q}:null,{resyncWindowToClient:B}=await Promise.resolve().then(() => (Y1(),r1)),{coalesceLayoutWork:V}=await Promise.resolve().then(() => (qG(),Sq));await V(X,"resync",()=>B(X,{size:H,status:G.status,clientName:G.client}));return}if(J==="capture-layout"){let X=FJ(Y).session;if(!X)console.error("kobe capture-layout: --session <name> is required"),process.exit(2);let{captureGlobalLayoutOnDrag:q}=await Promise.resolve().then(() => (Y1(),r1)),{coalesceLayoutWork:Q,genAgeMs:H,RESIZE_GUARD_MS:B}=await Promise.resolve().then(() => (qG(),Sq));await Q(X,"capture",async()=>{if(H(X,"resize")<B)return;await q(X)});return}if(J==="layout"){let G=FJ(Y),X=G.session;if(!X)console.error("kobe layout: --session <name> is required"),process.exit(2);let q=G.action;if(!q||!new Set(["workspace-split","workspace-close","workspace-reset","tasks-toggle","tasks-restore","ops-toggle","terminal-toggle","zen-toggle","chat-tab-close"]).has(q))console.error("kobe layout: --action must be one of workspace-split, workspace-close, workspace-reset, tasks-toggle, tasks-restore, ops-toggle, terminal-toggle, zen-toggle, chat-tab-close"),process.exit(2);let{runLayoutAction:H}=await Promise.resolve().then(() => (Y1(),r1));await H(X,q,{windowId:G.windowId});return}if(J==="quick-task"){let G=FJ(Y),{startQuickTaskHost:X}=await Promise.resolve().then(() => (s4(),o4));await X({session:G.session});return}if(J==="tasks"){let G=FJ(Y),{startTasksPane:X}=await Promise.resolve().then(() => (sD(),oD));await X({initialTaskId:G.initialTaskId});return}if(J==="settings"){let{startSettingsHost:G}=await Promise.resolve().then(() => (eD(),tD));await G();return}if(J==="help-page"){let{startHelpHost:G}=await Promise.resolve().then(() => (JL(),fL));await G();return}if(J==="new-task"){let G=FJ(Y),{startNewTaskHost:X}=await Promise.resolve().then(() => (M8(),d4));await X({defaultRepo:G.repo});return}if(J==="update-page"){let{startUpdateHost:G}=await Promise.resolve().then(() => (zL(),YL));await G();return}if(J==="ops"){let G=FJ(Y);if(!G.worktree)console.error("kobe ops: --worktree <path> is required"),process.exit(2);if(G.preview){let{startOpsPreview:q}=await Promise.resolve().then(() => (o8(),_8));await q({worktree:G.worktree,relPath:G.preview});return}let{startOpsHost:X}=await Promise.resolve().then(() => (o8(),_8));await X({taskId:G.taskId??"",worktree:G.worktree,targetPane:G.targetPane??null,vendor:iY(G.vendor)});return}if(J!==void 0)console.error(`kobe: unknown command '${J}'`),cL(process.stderr),process.exit(2);let{startTui:z}=await Promise.resolve().then(() => (PL(),hL));await z()}_S().catch((f)=>{console.error("kobe failed to start:",f),process.exit(1)});