@sma1lboy/kobe 0.7.38 → 0.7.39

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 +166 -165
  2. package/package.json +1 -1
package/dist/cli/index.js CHANGED
@@ -1,103 +1,104 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var hL=Object.defineProperty;var PL=(f)=>f;function vL(f,J){this[f]=PL.bind(null,J)}var jf=(f,J)=>{for(var Y in J)hL(f,Y,{get:J[Y],enumerable:!0,configurable:!0,set:vL.bind(J,Y)})};var C=(f,J)=>()=>(f&&(J=f(f=0)),J);var $Z=import.meta.require;import{basename as mL}from"path";function cL(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 rZ(f,J){let Y;try{Y=cL(f)}catch{return!1}return Y.test(J)||Y.test(mL(J))}var hQ=()=>{};var e8={};jf(e8,{prevVendorWithin:()=>PQ,nextVendorWithin:()=>GY,nextVendor:()=>nL,isBuiltinVendor:()=>Q1,coerceVendorId:()=>mY,BUILTIN_VENDORS:()=>vY,ALL_VENDORS:()=>mf});function Q1(f){return f==="claude"||f==="codex"||f==="copilot"}function nL(f){let J=mf.indexOf(f);return mf[(J+1)%mf.length]??mf[0]}function GY(f,J){if(f.length===0)return J;let Y=f.indexOf(J);return f[(Y+1)%f.length]??f[0]??J}function PQ(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 mY(f){let J=f?.trim();return J&&J.length>0?J:"claude"}var vY,mf;var K1=C(()=>{vY=["claude","codex","copilot"],mf=[...vY]});var pZ;var f9=C(()=>{pZ={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.38",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 J9}from"crypto";import{homedir as iL}from"os";import{join as cY}from"path";function Y9(){return process.env.KOBE_DEV==="1"}function OJ(){return process.env.KOBE_HOME_DIR??iL()}function ef(){return cY(OJ(),".kobe")}function v1(){return cY(OJ(),".config","kobe","state.json")}function lL(){return cY(ef(),"settings")}function z9(){return cY(lL(),"keybindings.yaml")}function vQ(){return cY(ef(),"issue-assets")}function _Z(f,J,Y){let z=J9("sha1").update(`${J}@${f}:${Y??22}`).digest("hex").slice(0,16);return cY(ef(),"ssh",`${z}.sock`)}function G9(f){let J=J9("sha1").update(f).digest("hex").slice(0,16);return cY(ef(),"worktree-init",J)}var lf=()=>{};var X9={};jf(X9,{repoSlug:()=>nY,releasePageUrl:()=>iQ,recommendedGlobalInstallCommand:()=>nQ,isNewerSemver:()=>mQ,fetchReleaseSummaries:()=>rL,fetchReleaseNotesRange:()=>dQ,fetchReleaseNotes:()=>$L,compareSemver:()=>oZ,checkLatestVersion:()=>xG,UPDATE_SCRIPT_URL:()=>sZ,UPDATE_COMMAND:()=>wJ,PACKAGE_NAME:()=>cQ,CURRENT_VERSION:()=>o0});function nY(){let f=pZ.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 nQ(){return`npm install -g ${cQ}@latest`}async function aL(f){let J=new AbortController,Y=setTimeout(()=>J.abort(),tZ);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 Z=await G.json();if(typeof Z.version!=="string")return null;return Z.version}catch{return null}finally{clearTimeout(Y)}}function mQ(f,J){return oZ(f,J)>0}function oZ(f,J){let Y=(Z)=>Z.split("-")[0]??Z,z=Y(f).split(".").map((Z)=>Number.parseInt(Z,10)),G=Y(J).split(".").map((Z)=>Number.parseInt(Z,10));for(let Z=0;Z<3;Z++){let q=z[Z]??0,Q=G[Z]??0;if(Number.isNaN(q)||Number.isNaN(Q))return 0;if(q>Q)return 1;if(q<Q)return-1}return 0}async function xG(f={}){let J=process.env.KOBE_FAKE_UPDATE;if(J)return{current:o0,latest:J,hasUpdate:mQ(J,o0)};if(Y9()&&!f.force)return null;let Y=await aL(cQ);if(!Y)return null;return{current:o0,latest:Y,hasUpdate:mQ(Y,o0)}}function Z9(f){if(typeof f!=="string")return null;return f.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function $L(f){let J=nY();if(!J)return null;let Y=`v${f}`,z=new AbortController,G=setTimeout(()=>z.abort(),tZ);try{let Z=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(!Z.ok)return null;let q=await Z.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 dQ(f){let J=nY();if(!J)return[];let Y=f.limit??100,z=new AbortController,G=setTimeout(()=>z.abort(),tZ);try{let Z=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(!Z.ok)return[];let q=await Z.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(oZ(H,f.current)<=0)return null;if(oZ(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 rL(f=12){let J=nY();if(!J)return[];let Y=new AbortController,z=setTimeout(()=>Y.abort(),tZ);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 Z=await G.json();if(!Array.isArray(Z))return[];return Z.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 iQ(f){let J=nY();if(!J)return null;return`https://github.com/${J}/releases/tag/v${f}`}var o0,cQ,sZ="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",wJ,tZ=3000;var U1=C(()=>{f9();lf();o0=pZ.version,cQ=pZ.name;wJ=`curl -fsSL ${sZ} | sh`});import{spawn as pL,spawnSync as _L}from"child_process";import{existsSync as Q9}from"fs";import{mkdir as oL,readFile as sL,readdir as tL}from"fs/promises";function dY(f){return`'${f.replace(/'/g,"'\\''")}'`}function eL(f){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(f)?f:dY(f)}function B9(f){return f.map(dY).join(" ")}function fM(f,J){let Y=B9(f);return J?`cd ${dY(J)} && ${Y}`:Y}function JM(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}=${dY(z)}`).join(" ")} `}function wG(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 j9(f,J={}){return new Promise((Y)=>{let[z,...G]=f,Z="",q="",Q=!1,H=(V)=>{if(Q)return;Q=!0,Y({stdout:Z,stderr:q,exitCode:V})},B;try{B=pL(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)=>{Z+=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 eZ{isRemote=!1;run(f,J={}){return j9(f,{cwd:J.cwd,env:J.env?{...process.env,...J.env}:process.env,signal:J.signal})}async exists(f){return Q9(f)}existsSync(f){return Q9(f)}async mkdirp(f){await oL(f,{recursive:!0})}async readFile(f){try{return await sL(f,"utf8")}catch{return null}}async readdir(f){try{return await tL(f)}catch{return[]}}wrapCommand(f){return f}ensureReady(){}}class bz{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(f,J=H9,Y){this.spec=f;this.spawn=J;this.spawnAsync=Y??(this.spawn===H9?YM:async(z,G)=>this.spawn(z,G))}ensureReady(){if(this.masterUp)return;if(this.spawn([...wG(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let J=[...wG(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=`${JM(J.env)}${B9(f)}`,z=J.cwd?`cd ${dY(J.cwd)} && ${Y}`:Y;return this.spawnAsync([...wG(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([...wG(this.spec,{batch:!0}),fM(["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 ${dY(J.cwd)} && ${f}`:f;return`${wG(this.spec,{tty:J.tty}).map(eL).join(" ")} ${dY(Y)}`}}var H9=(f,J)=>{let[Y,...z]=f,G=_L(Y??"",z,{env:J?{...process.env,...J}:process.env,encoding:"utf8",shell:!1});return{stdout:G.stdout??"",stderr:G.stderr??"",exitCode:G.status??-1}},YM=(f,J,Y)=>j9(f,{env:J?{...process.env,...J}:process.env,signal:Y?.signal});var lQ=()=>{};import{spawnSync as zM}from"child_process";import{platform as GM}from"os";function W9(f,J,Y){return{service:ZM,account:Y?`${J}@${f}:${Y}`:`${J}@${f}`}}function $Q(f=aQ){return f.platform()==="darwin"}function V9(f,J,Y=aQ){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 fX(f,J=aQ){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 aQ,ZM="kobe-remote-ssh";var rQ=C(()=>{aQ={run(f){let[J,...Y]=f,z=zM(J??"",Y,{encoding:"utf8",shell:!1});return{stdout:z.stdout??"",exitCode:z.status??-1}},platform(){return GM()}}});import{mkdirSync as XM,readFileSync as qM,renameSync as QM,writeFileSync as HM}from"fs";import{dirname as BM}from"path";function cf(){try{let f=qM(v1(),"utf8"),J=JSON.parse(f);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return{}}function K9(f){let J=v1();XM(BM(J),{recursive:!0});let Y=`${J}.tmp`;HM(Y,JSON.stringify(f,null,2),"utf8"),QM(Y,J)}function Sz(f){let J=cf();if(f(J)!==!1)K9(J);return J}function iY(f){return Sz((J)=>{for(let[Y,z]of Object.entries(f))if(z===void 0)delete J[Y];else J[Y]=z;return})}function U9(f){K9(f)}var lY=C(()=>{lf()});var ZY={};jf(ZY,{statePath:()=>WM,setRepoInitOverride:()=>VM,setPersistedString:()=>af,resolveRepoRoot:()=>hJ,resolveMainRepoRoot:()=>jM,removeSavedRepo:()=>KM,remoteRepoKey:()=>O9,normalizeSavedRepos:()=>_Q,isRemoteRepoKey:()=>D1,isRemoteProjectsEnabled:()=>sQ,getSavedRepos:()=>m1,getRepoInitOverride:()=>oQ,getRemoteRepos:()=>eQ,getRemoteRepoConfig:()=>vJ,getPersistedString:()=>kf,getCustomEngineIds:()=>pQ,addSavedRepo:()=>PJ,addRemoteRepo:()=>fH});import{spawnSync as L9}from"child_process";import{realpathSync as D9}from"fs";function hJ(f){if(D1(f))return f;let J=L9("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(D9(f)===D9(Y))return f}catch{}return Y}function jM(f){if(D1(f))return f;let J=L9("git",["worktree","list","--porcelain"],{cwd:f,encoding:"utf8",shell:!1});if(J.status!==0)return hJ(f);return(J.stdout??"").split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim()||hJ(f)}function WM(){return v1()}function JX(f){let J=f.savedRepos;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string")}function m1(){return JX(cf())}function kf(f){let J=cf()[f];return typeof J==="string"?J:void 0}function af(f,J){iY({[f]:J})}function pQ(){let f=cf().customEngineIds;if(!Array.isArray(f))return[];return f.filter((J)=>typeof J==="string"&&J.trim().length>0)}function PJ(f){let J=hJ(f),Y={added:!1,path:J,total:0};return Sz((z)=>{let G=JX(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 _Q(){let f=m1(),J=new Set,Y=[],z=!1;for(let G of f){let Z=hJ(G);if(Z!==G)z=!0;if(J.has(Z)){z=!0;continue}J.add(Z),Y.push(Z)}if(!z)return;iY({savedRepos:Y})}function M9(f){let J=f.repoConfigs;if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function F9(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 oQ(f){return F9(M9(cf())[hJ(f)])}function VM(f,J){let Y=hJ(f),z={};return Sz((G)=>{let Z={...M9(G)},q=F9(Z[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}=Z;G.repoConfigs=V}else Z[Y]=z,G.repoConfigs=Z;return}),z}function KM(f){let J={removed:!1,path:f,total:0};return Sz((Y)=>{let z=JX(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 sQ(){return cf()["experimental.remoteProjects"]===!0}function O9(f,J,Y){return Y?`ssh://${J}@${f}:${Y}`:`ssh://${J}@${f}`}function tQ(f){let J=f.remoteRepos;if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function vJ(f){return tQ(cf())[f]??null}function eQ(){return tQ(cf())}function fH(f){let J=O9(f.host,f.user,f.port),Y=!1;return Sz((z)=>{let G={...tQ(z)};G[J]=f,z.remoteRepos=G;let Z=JX(z);if(Y=!Z.includes(J),Y)z.savedRepos=[...Z,J];return}),{key:J,added:Y}}var gf=C(()=>{lf();lY()});var R9={};jf(R9,{runAddRemote:()=>LM,parseRemoteFlags:()=>g9});import{createInterface as UM}from"readline";function g9(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(A9),process.exit(0);break;default:t1(`unknown flag "${z}"`)}}return J}function t1(f){process.stderr.write(`kobe add --remote: ${f}
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}
5
5
 
6
- ${A9}`),process.exit(2)}async function DM(f){let J=UM({input:process.stdin,output:process.stdout,terminal:!0}),Y=process.stdout,z=!1,G=Y._writeToOutput?.bind(Y);return Y._writeToOutput=(Z)=>{if(!z||!G)process.stdout.write(Z)},process.stdout.write(f),z=!0,new Promise((Z)=>{J.question("",(q)=>{if(z=!1,G)Y._writeToOutput=G;process.stdout.write(`
7
- `),J.close(),Z(q)})})}async function LM(f){if(!sQ())t1("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let J=g9(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(!$Q())t1("--password needs the macOS keychain (unsupported on this platform)");let Z=W9(J.host,J.user,J.port),q=await DM(`Password for ${J.user}@${J.host}: `);if(q.length===0)t1("empty password");if(!V9(Z,q))t1("failed to store the password in the keychain");Y={kind:"password",keychainRef:Z}}else Y={kind:"key",keyPath:J.key?.path};let{key:z,added:G}=fH({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 MM(J,Y)}async function MM(f,J){if(J.kind==="password"&&!$Q())return;let Y=J.kind==="key"?{kind:"key",keyPath:J.keyPath}:{kind:"password",getPassword:()=>fX(J.keychainRef)},z={host:f.host,user:f.user,port:f.port,auth:Y,controlPath:_Z(f.host,f.user,f.port)};process.stdout.write("checking connection\u2026 ");try{if((await new bz(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 A9;var C9=C(()=>{lf();lQ();rQ();gf();A9=`Usage: kobe add --remote --host <host> --user <user> --path <basePath>
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>
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 k9(f){return typeof f==="string"&&FM.includes(f)}var hG=(f)=>f,yf="claude",FM;var S1=C(()=>{FM=["backlog","in_progress","in_review","done","canceled","error"]});function OM(f,J){let Y="",z=f;for(let G=J-1;G>=0;G--){let Z=z%32;Y="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Z]+Y,z=(z-Z)/32}return Y}function b9(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 AM(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 gM(f){let J="";for(let Y of f)J+="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Y]??"0";return J}function S9(f=Date.now()){let J;if(f===N9){let Y=y9.slice();if(!AM(Y))J=b9(16);else J=Y}else J=b9(16);return N9=f,y9=J,OM(f,10)+gM(J)}var N9=-1,y9;var I9=C(()=>{y9=Array(16).fill(0)});var JH={};jf(JH,{TaskIndexStore:()=>Iz});import{mkdir as RM,open as CM,readFile as kM,rename as NM,unlink as T9}from"fs/promises";import{homedir as yM}from"os";import{dirname as bM,join as u9}from"path";class Iz{homeDir;kobeDir;path;tmpPath;cache={version:XY,tasks:[]};loaded=!1;listeners=new Set;saveChain=Promise.resolve();constructor(f={}){this.homeDir=f.homeDir??yM(),this.kobeDir=u9(this.homeDir,".kobe"),this.path=u9(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 kM(this.path,"utf8")}catch(Y){if(Y.code==="ENOENT")return this.cache={version:XY,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:XY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot()}return this.cache=SM(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 RM(bM(this.path),{recursive:!0});let f=this.snapshot(),J=`${JSON.stringify(f,null,2)}
14
- `,Y=await CM(this.tmpPath,"w",420);try{await Y.writeFile(J,"utf8"),await Y.sync()}finally{await Y.close()}await NM(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??yf,...f,id:hG(S9()),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:Z,...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),Z=G.indexOf(String(f));if(Z<0)throw Error(`task not movable in current group: ${f}`);let q=G[Z+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 Z=this.cache.tasks.findIndex((Q)=>Q.id===G.id);if(!(Z>=0?this.cache.tasks[Z]:void 0))throw Error(`task not found: ${G.id}`);return{idx:Z,position:G.position}}),Y=!1,z=new Map;for(let{idx:G,position:Z}of J){let q=this.cache.tasks[G];if(!q||q.position===Z)continue;if(!z.has(G))z.set(G,q);this.cache.tasks[G]={...q,position:Z},Y=!0}if(!Y)return;try{await this.save()}catch(G){for(let[Z,q]of z)this.cache.tasks[Z]=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 T9(this.path)}catch(f){if(f.code!=="ENOENT")throw f}try{await T9(this.tmpPath)}catch(f){if(f.code!=="ENOENT")throw f}this.cache={version:XY,tasks:[]},this.loaded=!1}assertLoaded(){if(!this.loaded)throw Error("TaskIndexStore: call load() before any other method")}snapshot(){return{version:XY,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 SM(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:XY,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:XY,tasks:[]};let G=Array.isArray(Y.tasks)?Y.tasks:[],Z=[];for(let q of G){let Q=IM(q);if(Q)Z.push(Q);else console.warn(`[kobe] dropping malformed task entry from ${J}: ${JSON.stringify(q)}`)}return{version:XY,tasks:Z}}function IM(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(!wM(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:hG(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:mY(typeof J.vendor==="string"?J.vendor:void 0),prStatus:TM(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 TM(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let J=f;if(!uM(J.provider)||!EM(J.lifecycle)||!xM(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 uM(f){return f==="github"||f==="gitlab"||f==="bitbucket"||f==="unknown"}function EM(f){return f==="creating"||f==="open"||f==="ready_to_merge"||f==="merged"||f==="closed"||f==="unknown"}function xM(f){return f==="none"||f==="pending"||f==="passing"||f==="failing"||f==="unknown"}function wM(f){return f==="backlog"||f==="in_progress"||f==="in_review"||f==="done"||f==="canceled"||f==="error"}var XY=3;var PG=C(()=>{S1();K1();I9()});function E9(f){let J=f.auth,Y=J.kind==="key"?{kind:"key",keyPath:J.keyPath}:{kind:"password",getPassword:()=>fX(J.keychainRef)};return{host:f.host,user:f.user,port:f.port,auth:Y,controlPath:_Z(f.host,f.user,f.port)}}function Tz(f){let J=vJ(f);if(!J)return new eZ;return new bz(E9(J))}function mJ(f){for(let J of Object.values(eQ()))if(f===J.basePath||f.startsWith(`${J.basePath}/`))return new bz(E9(J));return new eZ}function x9(f){return f&&D1(f)?f:void 0}function YX(f){let J=mJ(f);return J.isRemote||J.existsSync(f)}function bf(f){return mJ(f).isRemote?OJ():f}var e1=C(()=>{lf();gf();lQ();rQ()});var zX;var w9=C(()=>{zX=class zX 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 hM}from"crypto";import P9 from"fs";import I1 from"path";function v9(f){if(!I1.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return I1.join(ef(),PM,dM(f))}function m9(f){if(!I1.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[v9(f),...cM.map((J)=>I1.join(f,J))]}function c9(f,J){if(!J||/[/\\\0]/.test(J))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(J)}`);return I1.join(v9(f),J)}async function n9(f){if(D1(f)){let Y=vJ(f)?.basePath;if(!Y)return[];return Tz(f).readdir(i9(Y))}let J=new Set;for(let Y of m9(f))try{for(let z of P9.readdirSync(Y,{withFileTypes:!0}))if(z.isDirectory())J.add(z.name)}catch{}return[...J]}function YH(f,J){if(!I1.isAbsolute(f)||!I1.isAbsolute(J))return null;let Y=h9(J);for(let z of m9(f)){let G=h9(z),Z=I1.relative(G,Y);if(Z!==""&&!Z.startsWith("..")&&!I1.isAbsolute(Z))return z}return null}function d9(f,J){return YH(f,J)!==null}function i9(f){return`${nM(f)}/.kobe/worktrees`}function l9(f,J){if(!J||/[/\\\0]/.test(J))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(J)}`);return`${i9(f)}/${J}`}function nM(f){return f.length>1&&f.endsWith("/")?f.replace(/\/+$/,""):f}function h9(f){try{return P9.realpathSync(f)}catch{return I1.resolve(f)}}function dM(f){let Y=(I1.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=hM("sha1").update(I1.resolve(f)).digest("hex").slice(0,12);return`${Y}-${z}`}var PM="worktrees",vM=".kobe/worktrees",mM=".claude/worktrees",cM;var zH=C(()=>{lf();e1();gf();cM=[vM,mM]});var r9={};jf(r9,{GitWorktreeManager:()=>GX});import $9 from"fs";import fJ from"path";class GX{execDeps;constructor(f=iM){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 zX(J,Y.cwd,G);return G}async create(f,J,Y,z){let G=this.ctxFor(f);if(qY("repo",G.dir),qY("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?l9(J,f.slug):c9(f.repo,f.slug);return this.create(f.repo,f.branch,Y,f.baseRef)}async remove(f,J){qY("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 Z=z?["worktree","remove","--force",f]:["worktree","remove",f];await this.runGit(Y,Z,{cwd:G}),await this.runGit(Y,["worktree","prune"],{cwd:G,allowFail:!0})}async list(f){let J=this.ctxFor(f);qY("repo",J.dir);let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),z=GH(Y.stdout),G=[];for(let Z of z){if(!Z.path)continue;let q=J.remote?a9(J.dir,Z.path):YH(f,Z.path);if(!q)continue;if(!Z.branch||Z.detached)continue;let Q=vG(q),H=vG(Z.path),B=fJ.relative(Q,H),V=fJ.join(q,B),j=await this.isDirty(Z.path);G.push({path:V,branch:Z.branch,head:Z.head??"",dirty:j})}return G}async listAll(f){let J=this.ctxFor(f);qY("repo",J.dir);let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),z=GH(Y.stdout),G=J.remote?J.dir:vG(J.dir),Z=[];for(let q of z){if(!q.path)continue;if(q.bare)continue;if(!q.branch||q.detached)continue;if((J.remote?q.path:vG(q.path))===G)continue;let Q=await this.isDirty(q.path);Z.push({path:q.path,branch:q.branch,head:q.head??"",dirty:Q,kobeManaged:J.remote?a9(J.dir,q.path)!==null:d9(f,q.path),lastActivityMs:await this.lastActivityMs(J.exec,q.path)})}return Z.sort((q,Q)=>Q.lastActivityMs-q.lastActivityMs),Z}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 $9.statSync(J).mtimeMs}catch{}return 0}async isDirty(f){qY("path",f);let J=this.execDeps.execForPath(f);return(await this.runGit(J,["status","--porcelain"],{cwd:f})).stdout.length>0}async currentBranch(f){qY("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(qY("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=GH(Y.stdout),G=(Q)=>f.remote?Q:vG(Q),Z=G(J),q=z.find((Q)=>Q.path&&G(Q.path)===Z);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 zX)return null;throw Y}}}function GH(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 Z=G.slice(7);Y.branch=Z.startsWith("refs/heads/")?Z.slice(11):Z}else if(G==="detached")Y.detached=!0;else if(G==="bare")Y.bare=!0}if(Y)J.push(Y);return J}function a9(f,J){let Y=`${f.replace(/\/+$/,"")}/.kobe/worktrees`;return J===Y||J.startsWith(`${Y}/`)?Y:null}function qY(f,J){if(!J||!fJ.isAbsolute(J))throw Error(`${f} must be an absolute path, got: ${JSON.stringify(J)}`)}function vG(f){try{return $9.realpathSync(f)}catch{return fJ.resolve(f)}}var iM;var ZH=C(()=>{e1();gf();w9();zH();iM={execForRepo:Tz,execForPath:mJ,remoteBasePath(f){return vJ(f)?.basePath??null}}});function p9(f){let J=String(f),Y=J.length-1;return wf.context.id+(Y?String.fromCharCode(96+Y):"")+J}function QH(f){wf.context=f}function lM(){return{...wf.context,id:wf.getNextContextId(),count:0}}function aY(f,J){let Y=Uf,z=s0,G=f.length===0,Z=J===void 0?z:J,q=G?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:Z?Z.context:null,owner:Z},Q=G?()=>f(()=>{throw Error("Dispose method must be an explicit argument to createRoot function")}):()=>f(()=>$f(()=>QY(q)));YJ.afterCreateOwner&&YJ.afterCreateOwner(q),s0=q,Uf=null;try{return F1(Q,!0)}finally{Uf=Y,s0=z}}function r(f,J){J=J?Object.assign({},qX,J):qX;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(zW(Y),YJ.afterCreateSignal)YJ.afterCreateSignal(Y)}let z=(G)=>{if(typeof G==="function")if(B0&&B0.running&&B0.sources.has(Y))G=G(Y.tValue);else G=G(Y.value);return BH(Y,G)};return[GW.bind(Y),z]}function o9(f,J,Y){let z=dG(f,J,!0,T1,Y);if(Ez&&B0&&B0.running)nf.push(z);else $Y(z)}function AJ(f,J,Y){let z=dG(f,J,!1,T1,Y);if(Ez&&B0&&B0.running)nf.push(z);else $Y(z)}function ff(f,J,Y){YW=YF;let z=dG(f,J,!1,T1,Y),G=cG&&u1(cG);if(G)z.suspense=G;if(!Y||!Y.render)z.user=!0;H1?H1.push(z):$Y(z)}function K0(f,J,Y){Y=Y?Object.assign({},qX,Y):qX;let z=dG(f,J,!0,0,Y);if(z.observers=null,z.observerSlots=null,z.comparator=Y.equals||void 0,Ez&&B0&&B0.running)z.tState=T1,nf.push(z);else $Y(z);return GW.bind(z)}function oM(f){return f&&typeof f==="object"&&"then"in f}function jX(f,J,Y){let z,G,Z;if(typeof J==="function")z=f,G=J,Z=Y||{};else z=!0,G=f,Z=J||{};let q=null,Q=XH,H=null,B=!1,V=!1,j="initialValue"in Z,U=typeof z==="function"&&K0(z),L=new Set,[O,M]=(Z.storage||r)(Z.initialValue),[g,I]=r(void 0),[a,N]=r(void 0,{equals:!1}),[A,R]=r(j?"ready":"unresolved");if(wf.context){if(H=wf.getNextContextId(),Z.ssrLoadFrom==="initial")Q=Z.initialValue;else if(wf.load&&wf.has(H))Q=wf.load(H)}function S(T,Q0,t,V0){if(q===T){if(q=null,V0!==void 0&&(j=!0),(T===Q||Q0===Q)&&Z.onHydrated)queueMicrotask(()=>Z.onHydrated(V0,{value:Q0}));if(Q=XH,B0&&T&&B)B0.promises.delete(T),B=!1,F1(()=>{B0.running=!0,_(Q0,t)},!1);else _(Q0,t)}return Q0}function _(T,Q0){F1(()=>{if(Q0===void 0)M(()=>T);R(Q0!==void 0?"errored":j?"ready":"unresolved"),I(Q0);for(let t of L.keys())t.decrement();L.clear()},!1)}function z0(){let T=cG&&u1(cG),Q0=O(),t=g();if(t!==void 0&&!q)throw t;if(Uf&&!Uf.user&&T)o9(()=>{if(a(),q){if(T.resolved&&B0&&B)B0.promises.add(q);else if(!L.has(T))T.increment(),L.add(T)}});return Q0}function e(T=!0){if(T!==!1&&V)return;V=!1;let Q0=U?U():z;if(B=B0&&B0.running,Q0==null||Q0===!1){S(q,$f(O));return}if(B0&&q)B0.promises.delete(q);let t,V0=Q!==XH?Q:$f(()=>{try{return G(Q0,{value:O(),refetching:T})}catch(C0){t=C0}});if(t!==void 0){S(q,void 0,XX(t),Q0);return}else if(!oM(V0))return S(q,V0,void 0,Q0),V0;if(q=V0,"v"in V0){if(V0.s===1)S(q,V0.v,void 0,Q0);else S(q,void 0,XX(V0.v),Q0);return V0}return V=!0,queueMicrotask(()=>V=!1),F1(()=>{R(j?"refreshing":"pending"),N()},!1),V0.then((C0)=>S(V0,C0,void 0,Q0),(C0)=>S(V0,void 0,XX(C0),Q0))}Object.defineProperties(z0,{state:{get:()=>A()},error:{get:()=>g()},loading:{get(){let T=A();return T==="pending"||T==="refreshing"}},latest:{get(){if(!j)return z0();let T=g();if(T&&!q)throw T;return O()}}});let Y0=s0;if(U)o9(()=>(Y0=s0,e(!1)));else e(!1);return[z0,{refetch:(T)=>sM(Y0,()=>e(T)),mutate:M}]}function WX(f){return F1(f,!1)}function $f(f){if(!uz&&Uf===null)return f();let J=Uf;Uf=null;try{if(uz)return uz.untrack(f);return f()}finally{Uf=J}}function O1(f,J,Y){let z=Array.isArray(f),G,Z=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(Z)return Z=!1,q;let H=$f(()=>J(Q,G,q));return G=Q,H}}function f1(f){ff(()=>$f(f))}function vf(f){if(s0===null)console.warn("cleanups created outside a `createRoot` or `render` will never be run");else if(s0.cleanups===null)s0.cleanups=[f];else s0.cleanups.push(f);return f}function VX(){return Uf}function sM(f,J){let Y=s0,z=Uf;s0=f,Uf=null;try{return F1(J,!0)}catch(G){KX(G)}finally{s0=Y,Uf=z}}function tM(f){if(B0&&B0.running)return f(),B0.done;let J=Uf,Y=s0;return Promise.resolve().then(()=>{Uf=J,s0=Y;let z;if(Ez||cG)z=B0||(B0={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),Uf=s0=null,z?z.done:void 0})}function t9(f,J){let Y=dG(()=>$f(()=>{return Object.assign(f,{[pM]:!0}),f(J)}),void 0,!0,0);return Y.props=J,Y.observers=null,Y.observerSlots=null,Y.name=f.name,Y.component=f,$Y(Y),Y.tValue!==void 0?Y.tValue:Y.value}function zW(f){if(s0){if(s0.sourceMap)s0.sourceMap.push(f);else s0.sourceMap=[f];f.graph=s0}if(YJ.afterRegisterGraph)YJ.afterRegisterGraph(f)}function gJ(f,J){let Y=Symbol("context");return{id:Y,Provider:zF(Y,J),defaultValue:f}}function u1(f){let J;return s0&&s0.context&&(J=s0.context[f.id])!==void 0?J:f.defaultValue}function eM(f){let J=K0(f),Y=K0(()=>HH(J()),void 0,{name:"children"});return Y.toArray=()=>{let z=Y();return Array.isArray(z)?z:z!=null?[z]:[]},Y}function GW(){let f=B0&&B0.running;if(this.sources&&(f?this.tState:this.state))if((f?this.tState:this.state)===T1)$Y(this);else{let J=nf;nf=null,F1(()=>QX(this),!1),nf=J}if(Uf){let J=this.observers;if(!J||J[J.length-1]!==Uf){let Y=J?J.length:0;if(!Uf.sources)Uf.sources=[this],Uf.sourceSlots=[Y];else Uf.sources.push(this),Uf.sourceSlots.push(Y);if(!J)this.observers=[Uf],this.observerSlots=[Uf.sources.length-1];else J.push(Uf),this.observerSlots.push(Uf.sources.length-1)}}if(f&&B0.sources.has(this))return this.tValue;return this.value}function BH(f,J,Y){let z=B0&&B0.running&&B0.sources.has(f)?f.tValue:f.value;if(!f.comparator||!f.comparator(z,J)){if(B0){let G=B0.running;if(G||!Y&&B0.sources.has(f))B0.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 Z=f.observers[G],q=B0&&B0.running;if(q&&B0.disposed.has(Z))continue;if(q?!Z.tState:!Z.state){if(Z.pure)nf.push(Z);else H1.push(Z);if(Z.observers)XW(Z)}if(!q)Z.state=T1;else Z.tState=T1}if(nf.length>1e6){if(nf=[],aM)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return J}function $Y(f){if(!f.fn)return;QY(f);let J=BX;if(e9(f,B0&&B0.running&&B0.sources.has(f)?f.tValue:f.value,J),B0&&!B0.running&&B0.sources.has(f))queueMicrotask(()=>{F1(()=>{B0&&(B0.running=!0),Uf=s0=f,e9(f,f.tValue,J),Uf=s0=null},!1)})}function e9(f,J,Y){let z,G=s0,Z=Uf;Uf=s0=f;try{z=f.fn(J)}catch(q){if(f.pure)if(B0&&B0.running)f.tState=T1,f.tOwned&&f.tOwned.forEach(QY),f.tOwned=void 0;else f.state=T1,f.owned&&f.owned.forEach(QY),f.owned=null;return f.updatedAt=Y+1,KX(q)}finally{Uf=Z,s0=G}if(!f.updatedAt||f.updatedAt<=Y){if(f.updatedAt!=null&&"observers"in f)BH(f,z,!0);else if(B0&&B0.running&&f.pure){if(!B0.sources.has(f))f.value=z;B0.sources.add(f),f.tValue=z}else f.value=z;f.updatedAt=Y}}function dG(f,J,Y,z=T1,G){let Z={fn:f,state:z,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:J,owner:s0,context:s0?s0.context:null,pure:Y};if(B0&&B0.running)Z.state=0,Z.tState=z;if(s0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if(s0!==_M)if(B0&&B0.running&&s0.pure)if(!s0.tOwned)s0.tOwned=[Z];else s0.tOwned.push(Z);else if(!s0.owned)s0.owned=[Z];else s0.owned.push(Z);if(G&&G.name)Z.name=G.name;if(uz&&Z.fn){let q=Z.fn,[Q,H]=r(void 0,{equals:!1}),B=uz.factory(q,H);vf(()=>B.dispose());let V,j=()=>tM(H).then(()=>{if(V)V.dispose(),V=void 0});Z.fn=(U)=>{if(Q(),B0&&B0.running){if(!V)V=uz.factory(q,j);return V.track(U)}return B.track(U)}}return YJ.afterCreateOwner&&YJ.afterCreateOwner(Z),Z}function nG(f){let J=B0&&B0.running;if((J?f.tState:f.state)===0)return;if((J?f.tState:f.state)===mG)return QX(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<BX)){if(J&&B0.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,Z=Y[z+1];while((G=G.owner)&&G!==Z)if(B0.disposed.has(G))return}if((J?f.tState:f.state)===T1)$Y(f);else if((J?f.tState:f.state)===mG){let G=nf;nf=null,F1(()=>QX(f,Y[0]),!1),nf=G}}}function F1(f,J){if(nf)return f();let Y=!1;if(!J)nf=[];if(H1)Y=!0;else H1=[];BX++;try{let z=f();return fF(Y),z}catch(z){if(!Y)H1=null;nf=null,KX(z)}}function fF(f){if(nf){if(Ez&&B0&&B0.running)JF(nf);else ZW(nf);nf=null}if(f)return;let J;if(B0){if(!B0.promises.size&&!B0.queue.size){let{sources:z,disposed:G}=B0;H1.push.apply(H1,B0.effects),J=B0.resolve;for(let Z of H1)"tState"in Z&&(Z.state=Z.tState),delete Z.tState;B0=null,F1(()=>{for(let Z of G)QY(Z);for(let Z of z){if(Z.value=Z.tValue,Z.owned)for(let q=0,Q=Z.owned.length;q<Q;q++)QY(Z.owned[q]);if(Z.tOwned)Z.owned=Z.tOwned;delete Z.tValue,delete Z.tOwned,Z.tState=0}s9(!1)},!1)}else if(B0.running){B0.running=!1,B0.effects.push.apply(B0.effects,H1),H1=null,s9(!0);return}}let Y=H1;if(H1=null,Y.length)F1(()=>YW(Y),!1);else YJ.afterUpdate&&YJ.afterUpdate();if(J)J()}function ZW(f){for(let J=0;J<f.length;J++)nG(f[J])}function JF(f){for(let J=0;J<f.length;J++){let Y=f[J],z=B0.queue;if(!z.has(Y))z.add(Y),Ez(()=>{z.delete(Y),F1(()=>{B0.running=!0,nG(Y)},!1),B0&&(B0.running=!1)})}}function YF(f){let J,Y=0;for(J=0;J<f.length;J++){let z=f[J];if(!z.user)nG(z);else f[Y++]=z}if(wf.context){if(wf.count){wf.effects||(wf.effects=[]),wf.effects.push(...f.slice(0,Y));return}QH()}if(wf.effects&&(wf.done||!wf.count))f=[...wf.effects,...f],Y+=wf.effects.length,delete wf.effects;for(J=0;J<Y;J++)nG(f[J])}function QX(f,J){let Y=B0&&B0.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 Z=Y?G.tState:G.state;if(Z===T1){if(G!==J&&(!G.updatedAt||G.updatedAt<BX))nG(G)}else if(Z===mG)QX(G,J)}}}function XW(f){let J=B0&&B0.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=mG;else z.state=mG;if(z.pure)nf.push(z);else H1.push(z);z.observers&&XW(z)}}}function QY(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 Z=G.pop(),q=Y.observerSlots.pop();if(z<G.length)Z.sourceSlots[q]=z,G[z]=Z,Y.observerSlots[z]=q}}if(f.tOwned){for(J=f.tOwned.length-1;J>=0;J--)QY(f.tOwned[J]);delete f.tOwned}if(B0&&B0.running&&f.pure)qW(f,!0);else if(f.owned){for(J=f.owned.length-1;J>=0;J--)QY(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(B0&&B0.running)f.tState=0;else f.state=0;delete f.sourceMap}function qW(f,J){if(!J)f.tState=0,B0.disposed.add(f);if(f.owned)for(let Y=0;Y<f.owned.length;Y++)qW(f.owned[Y])}function XX(f){if(f instanceof Error)return f;return Error(typeof f==="string"?f:"Unknown error",{cause:f})}function fW(f,J,Y){try{for(let z of J)z(f)}catch(z){KX(z,Y&&Y.owner||null)}}function KX(f,J=s0){let Y=_9&&J&&J.context&&J.context[_9],z=XX(f);if(!Y)throw z;if(H1)H1.push({fn(){fW(z,Y,J)},state:T1});else fW(z,Y,J)}function HH(f){if(typeof f==="function"&&!f.length)return HH(f());if(Array.isArray(f)){let J=[];for(let Y=0;Y<f.length;Y++){let z=HH(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 zF(f,J){return function(z){let G;return AJ(()=>G=$f(()=>{return s0.context={...s0.context,[f]:z.value},eM(()=>z.children)}),void 0,J),G}}function JW(f){for(let J=0;J<f.length;J++)f[J]()}function ZF(f,J,Y={}){let z=[],G=[],Z=[],q=0,Q=J.length>1?[]:null;return vf(()=>JW(Z)),()=>{let H=f()||[],B=H.length,V,j;return H[HX],$f(()=>{let L,O,M,g,I,a,N,A,R;if(B===0){if(q!==0)JW(Z),Z=[],z=[],G=[],q=0,Q&&(Q=[]);if(Y.fallback)z=[GF],G[0]=aY((S)=>{return Z[0]=S,Y.fallback()}),q=1}else if(q===0){G=Array(B);for(j=0;j<B;j++)z[j]=H[j],G[j]=aY(U);q=B}else{M=Array(B),g=Array(B),Q&&(I=Array(B));for(a=0,N=Math.min(q,B);a<N&&z[a]===H[a];a++);for(N=q-1,A=B-1;N>=a&&A>=a&&z[N]===H[A];N--,A--)M[A]=G[N],g[A]=Z[N],Q&&(I[A]=Q[N]);L=new Map,O=Array(A+1);for(j=A;j>=a;j--)R=H[j],V=L.get(R),O[j]=V===void 0?-1:V,L.set(R,j);for(V=a;V<=N;V++)if(R=z[V],j=L.get(R),j!==void 0&&j!==-1)M[j]=G[V],g[j]=Z[V],Q&&(I[j]=Q[V]),j=O[j],L.set(R,j);else Z[V]();for(j=a;j<B;j++)if(j in M){if(G[j]=M[j],Z[j]=g[j],Q)Q[j]=I[j],Q[j](j)}else G[j]=aY(U);G=G.slice(0,q=B),z=H.slice(0)}return G});function U(L){if(Z[j]=L,Q){let[O,M]=r(j,{name:"index"});return Q[j]=M,J(H[j],O)}return J(H[j])}}}function QW(f,J){if(XF){if(wf.context){let Y=wf.context;QH(lM());let z=t9(f,J||{});return QH(Y),z}}return t9(f,J||{})}function ZX(){return!0}function qH(f){return!(f=typeof f==="function"?f():f)?{}:f}function QF(){for(let f=0,J=this.length;f<J;++f){let Y=this[f]();if(Y!==void 0)return Y}}function UX(...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,K0(Q)):Q}if(rM&&J)return new Proxy({get(q){for(let Q=f.length-1;Q>=0;Q--){let H=qH(f[Q])[q];if(H!==void 0)return H}},has(q){for(let Q=f.length-1;Q>=0;Q--)if(q in qH(f[Q]))return!0;return!1},keys(){let q=[];for(let Q=0;Q<f.length;Q++)q.push(...Object.keys(qH(f[Q])));return[...new Set(q)]}},qF);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:QF.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={},Z=Object.keys(z);for(let q=Z.length-1;q>=0;q--){let Q=Z[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 K0(ZF(()=>f.each,f.children,J||void 0),void 0,{name:"value"})}function X0(f){let J=f.keyed,Y=K0(()=>f.when,void 0,{name:"condition value"}),z=J?Y:K0(Y,void 0,{equals:(G,Z)=>!G===!Z,name:"condition"});return K0(()=>{let G=z();if(G){let Z=f.children;return typeof Z==="function"&&Z.length>0?$f(()=>Z(J?G:()=>{if(!$f(z))throw HF("Show");return Y()})):Z}return f.fallback},void 0,{name:"value"})}var wf,aM=!0,$M=(f,J)=>f===J,JJ,rM,HX,pM,qX,_9=null,YW,T1=1,mG=2,_M,XH,s0=null,B0=null,Ez=null,uz=null,Uf=null,nf=null,H1=null,BX=0,YJ,rI,s9,cG,GF,XF=!1,qF,HF=(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.`,HW;var Wf=C(()=>{wf={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return p9(this.context.count)},getNextContextId(){return p9(this.context.count++)}};JJ=Symbol("solid-proxy"),rM=typeof Proxy==="function",HX=Symbol("solid-track"),pM=Symbol("solid-dev-component"),qX={equals:$M},YW=ZW,_M={},XH={},YJ={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[rI,s9]=r(!1);GF=Symbol("fallback");qF={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:ZX,deleteProperty:ZX,getOwnPropertyDescriptor(f,J){return{configurable:!0,enumerable:!0,get(){return f.get(J)},set:ZX,deleteProperty:ZX}},ownKeys(f){return f.keys()}};HW={hooks:YJ,writeSignal:BH,registerGraph:zW};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 BF(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 jF(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 WF(f){if(!f||f.length===0)return"none";let J=!1,Y=!1;for(let z of f){let G=jF(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 jW(f,J){if(!f||typeof f.number!=="number")return null;return{provider:"github",lifecycle:BF(f.state,f.reviewDecision),checkState:WF(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 DX(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 BW="number,url,title,state,baseRefName,headRefName,reviewDecision,mergeable,statusCheckRollup";var jH,WH,VH,KH="DIRTY_WORKTREE",UH,DH;var LH=C(()=>{jH=class jH 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"}};WH=class WH extends Error{constructor(f){super(`task not found: ${f}`);this.name="TaskNotFoundError"}};VH=class VH extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};UH=class UH extends Error{taskId;constructor(f){super(`${KH}: task ${f} worktree has uncommitted or untracked changes`);this.taskId=f;this.name="DirtyWorktreeError"}};DH=class DH 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 WW(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 LX(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 VW;var KW=C(()=>{VW=["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 MH{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??VW,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 Z=`${z}-v${G}`;if(!J.has(Z))return this.addPending(f,Z),Z}}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 n9(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 UW=C(()=>{KW();zH()});var MW={};jf(MW,{PLACEHOLDER_TASK_TITLE:()=>RJ,Orchestrator:()=>MX});import{realpathSync as VF}from"fs";import{basename as KF,resolve as UF}from"path";function DW(f){return vJ(f)?.basePath??f}class MX{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 MH((Z)=>this.store.list().filter((q)=>q.repo===Z&&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=(Z)=>Y(()=>Z);let[z,G]=r(null);this.activeTaskAcc=z,this.setActiveTaskSig=(Z)=>G(()=>Z),this.unsubscribeStore=this.store.subscribe((Z)=>{this.setTasks(Z.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??yf,...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}=LW(f),z=this.store.list().find((q)=>q.kind==="main"&&LW(q.repo).key===Y);if(z)return z;let G=this.mainTaskLocks.get(Y);if(G)return G;let Z=(async()=>{return await this.store.create({repo:J,title:DF(J),branch:"",worktreePath:DW(J),status:"backlog",kind:"main",vendor:yf})})();this.mainTaskLocks.set(Y,Z);try{return await Z}finally{this.mainTaskLocks.delete(Y)}}async ensureWorktree(f){let J=this.requireTask(f);if(J.kind==="main")return DW(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 Z=await this.slugs.allocate(J.repo);try{let q=J.branch||LX(J.title,J.id),Q=this.pendingBaseRefs.get(J.id),H=await this.worktrees.createForTask({repo:J.repo,slug:Z,branch:q,baseRef:Q});this.slugs.commit(J.repo,Z),this.pendingBaseRefs.delete(J.id),await this.store.update(J.id,{worktreePath:H.path,branch:q})}catch(q){throw this.slugs.cancel(J.repo,Z),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!==LX(RJ,f.id))return;let Y=LX(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 jH(Y.status,J,Y.id);await this.store.update(Y.id,{status:J})}async setPRStatus(f,J){let Y=this.requireTask(f);if(DX(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 VH;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 UH(Y.id)}try{await this.worktrees.remove(Y.worktreePath,{force:z})}catch(G){throw new DH(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)=>xz(z.worktreePath)));return J.filter((z)=>!Y.has(xz(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=xz(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&&xz(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)=>xz(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 Z=f.branch?.trim()||G.branch,q=(f.title??KF(G.path)).trim()||RJ;return this.store.create({repo:f.repo,title:q,branch:Z,worktreePath:G.path,status:"backlog",kind:"task",vendor:f.vendor??yf})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(f){let J=this.store.get(f);if(!J)throw new WH(String(f));return J}}function DF(f){let J=f.split(/[/\\]/).filter(Boolean);return J.length>0?J[J.length-1]??f:f}function LW(f){let J=hJ(f);return{repo:J,key:D1(J)?J:xz(J)}}function xz(f){try{return VF(f)}catch{return UF(f)}}var RJ="(new task)";var iG=C(()=>{Wf();gf();S1();LH();UW()});function FX(f){return f.remoteVersion>=f.localMin&&f.localVersion>=f.remoteMin}function FW(f,J){if(!f)return!1;return f!==J}function MF(f){return typeof f==="string"&&LF.has(f)}function OW(f){if(!Array.isArray(f))return null;let J=new Set;for(let Y of f)if(MF(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 lG(f){return`${JSON.stringify(f)}
16
- `}var c1=3,HY=2,FH,LF;var rY=C(()=>{FH=["task.snapshot","issue.snapshot","active-task","update","engine-state","ui-prefs","keybindings","task.jobs","worktree.changes","session.deliver"],LF=new Set(FH)});import{createHash as FF}from"crypto";import{homedir as OX,tmpdir as OF}from"os";import{join as pY}from"path";function AF(f){return FF("sha1").update(f).digest("hex").slice(0,8)}function AH(f,J,Y,z){if(Buffer.byteLength(f,"utf8")<=OH)return f;let G=AF(J),Z=z===void 0?"":`-${z}`,q=pY(OF(),`kobe-${G}-${Y}${Z}.sock`);if(Buffer.byteLength(q,"utf8")<=OH)return q;throw Error(`kobe socket path exceeds ${OH} 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 AH(pY(Y,".kobe","daemon.sock"),Y,"daemon");let z=process.env.XDG_RUNTIME_DIR;if(z&&z.length>0)return AH(pY(z,"kobe.sock"),z,"daemon");let G=OX();return AH(pY(G,".kobe","daemon.sock"),G,"daemon")}function cJ(f=process.env.KOBE_HOME_DIR??OX()){let J=process.env.KOBE_DAEMON_PID_PATH;if(J&&J.length>0)return J;return pY(f,".kobe","daemon.pid")}function AX(f=process.env.KOBE_HOME_DIR??OX()){return pY(f,".kobe","daemon.log")}function AW(f=process.env.KOBE_HOME_DIR??OX()){return pY(f,".kobe","client.log")}var OH=100;var wz=()=>{};import{appendFile as gW,mkdir as gF}from"fs/promises";import{dirname as RF}from"path";function gX(f){kW=f}function CF(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 NW(f,J,Y=new Date){return`[${Y.toISOString()}] client ${kW} [${f}] pid=${process.pid}: ${J}
17
- `}function kF(){if(RW)return;RW=!0;try{process.stderr.write(`[kobe] client log write failed; continuing without it
18
- `)}catch{}}function yW(f){let J=AW();CW=CW.then(async()=>{try{await gW(J,f)}catch(Y){if(Y?.code==="ENOENT")await gF(RF(J),{recursive:!0}),await gW(J,f);else throw Y}}).catch(()=>kF())}function nJ(f,J){yW(NW(f,J))}function BY(f,J){let Y=CF(J);yW(NW(f,Y.stack??Y.message))}var kW="client",RW=!1,CW;var _Y=C(()=>{wz();CW=Promise.resolve()});import{connect as NF}from"net";import{StringDecoder as yF}from"string_decoder";class n1{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((Z,q)=>{this.pending.set(z,{resolve:(Q)=>Z(Q),reject:q})});return Y.write(lG({type:"request",id:z,name:f,payload:J})),G}openSocket(){return new Promise((f,J)=>{let Y=NF(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 Z=new yF("utf8");this.buffer="",Y.on("data",(q)=>this.onData(Z.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 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(`
19
19
  `);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){BY("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 aG=C(()=>{rY();_Y()});function RX(f){return bF.includes(f)}function bW(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 bF;var CX=C(()=>{bF=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function SF(){let f=process.env.KOBE_ENGINE_STATE_TTL_MS;if(f===void 0)return SW;let J=Number(f);return Number.isFinite(J)&&J>0?J:SW}class gH{bus;staleMs;now;activity=new Map;constructor(f,J=SF(),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=bW(z?.state,J,Y),Z=this.now(),q={state:G,detail:Y,at:Z};if(G!=="idle"&&G!=="turn_complete")q.lapse=setTimeout(()=>{let Q=this.activity.get(f);if(Q&&Q.at===Z)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 SW=600000;var IW=C(()=>{CX()});import{spawnSync as IF}from"child_process";import{existsSync as TF,statSync as uF}from"fs";import{homedir as EF}from"os";import $G from"path";async function TW(f=xF){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(),Z=Y($G.join(G,".claude","local","claude"));if(Z)return Z;let q=f.env("NVM_BIN");if(q){let B=Y($G.join(q,"claude"));if(B)return B}let Q=$G.join(G,".nvm","versions","node"),H=f.readdir(Q).sort().reverse();for(let B of H){let V=Y($G.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($G.join(G,B));if(V)return V}throw new kX(J)}var kX,xF;var uW=C(()=>{kX=class kX 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}};xF={fileExists(f){try{return uF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return EF()},which(f){let J=process.platform==="win32"?"where":"which",Y=IF(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&&TF(G)?G:void 0}return z},readdir(f){try{return $Z("fs").readdirSync(f)}catch{return[]}}}});import{spawnSync as wF}from"child_process";import{existsSync as hF,statSync as PF}from"fs";import{homedir as vF}from"os";import EW from"path";async function xW(f=mF){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 Z=f.env("NVM_BIN");if(Z){let q=Y(EW.join(Z,"codex"));if(q)return q}for(let q of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let Q=Y(EW.join(G,q));if(Q)return Q}throw new NX(J)}var NX,mF;var wW=C(()=>{NX=class NX 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}};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(`
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&&hF(G)?G:void 0}return z},readdir(f){try{return $Z("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 jY from"path";async function hW(f=lF){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"],Z=(V)=>{if(!V)return;for(let j of G){let U=Y(jY.join(V,j));if(U)return U}return};for(let V of["/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin"]){let j=Z(V);if(j)return j}let q=f.env("NVM_BIN"),Q=Z(q);if(Q)return Q;let H=f.home(),B=[jY.join(H,".npm-global/bin"),jY.join(H,".local/bin"),jY.join(H,".bun/bin"),jY.join(H,"bin")];if(f.platform()==="win32"){let V=f.env("APPDATA"),j=f.env("LOCALAPPDATA");if(B.unshift(jY.join(H,"AppData/Roaming/npm")),V)B.unshift(jY.join(V,"npm"));if(j)B.unshift(jY.join(j,"npm"))}for(let V of B){let j=Z(V);if(j)return j}throw new yX(J)}var yX,lF;var PW=C(()=>{yX=class yX 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}};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(`
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&&nF(G)?G:void 0}return z},platform(){return process.platform}}});import{readFileSync as aF,statSync as $F}from"fs";import{homedir as rF}from"os";import WY from"path";function pF(f,J){let Y=f("CLAUDE_CONFIG_DIR")?.trim();if(Y)return WY.join(Y,".claude.json");return WY.join(J,".claude.json")}function _F(f,J){let z=f("CODEX_HOME")?.trim()??WY.join(J,".codex");return WY.join(z,"auth.json")}function oF(f,J){let z=f("COPILOT_HOME")?.trim()??WY.join(J,".copilot");return WY.join(z,"config.json")}function sF(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 Z=Buffer.from(G,"base64").toString("utf8"),q=JSON.parse(Z);return typeof q==="object"&&q!==null?q:null}catch{return null}}async function SX(f){try{return{found:!0,path:await f()}}catch(J){if(J instanceof kX||J instanceof NX||J instanceof yX)return{found:!1,error:"not found on PATH"};return{found:!1,error:J instanceof Error?J.message:String(J)}}}async function vW(f){return(await Promise.all([["claude",()=>f.findClaudeBinary()],["codex",()=>f.findCodexBinary()],["copilot",()=>f.findCopilotBinary()]].map(async([z,G])=>(await SX(G)).found?z:null))).filter((z)=>z!==null)}function tF(f=hz){if(f!==hz)return vW(f);if(bX)return bX;let J=vW(f).catch((Y)=>{throw bX=null,Y});return bX=J,J}async function dJ(f=hz){return[...await tF(f),...pQ()]}async function IX(f=hz){let J=await SX(()=>f.findClaudeBinary()),Y=pF(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 Z=G?.oauthAccount;if(!Z||typeof Z!=="object")return{binary:J,account:{kind:"none"}};let q=Z,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 TX(f=hz){let J=await SX(()=>f.findCodexBinary()),Y=_F(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 Z=G??{},q=Z.tokens,Q=typeof q?.id_token==="string"?q.id_token:void 0;if(Q){let B=sF(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=Z.OPENAI_API_KEY;if(typeof H==="string"&&H.length>0)return{binary:J,account:{kind:"apikey"}};return{binary:J,account:{kind:"none"}}}async function uX(f=hz){let J=await SX(()=>f.findCopilotBinary());for(let Z of["COPILOT_GITHUB_TOKEN","GH_TOKEN","GITHUB_TOKEN"])if(f.env(Z)?.trim())return{binary:J,account:{kind:"token",source:Z}};let Y=oF(f.env,f.home()),z;try{z=f.readFile(Y)}catch(Z){return{binary:J,account:{kind:"none"},accountError:`read ${Y}: ${Z instanceof Error?Z.message:String(Z)}`}}if(z===null)return{binary:J,account:{kind:"none"}};let G;try{G=JSON.parse(z)}catch(Z){return{binary:J,account:{kind:"none"},accountError:`parse ${Y}: ${Z instanceof Error?Z.message:String(Z)}`}}if(!RH(G))return{binary:J,account:{kind:"none"}};if(mW(G,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:J,account:{kind:"oauth"}};return{binary:J,account:{kind:"none"}}}function RH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function mW(f,J,Y=0){if(Y>4||!RH(f))return!1;for(let[z,G]of Object.entries(f)){if(J.includes(z)&&typeof G==="string"&&G.length>0)return!0;if(RH(G)&&mW(G,J,Y+1))return!0}return!1}var hz,bX=null;var oY=C(()=>{gf();uW();wW();PW();hz={readFile(f){try{$F(f)}catch(J){if(J.code==="ENOENT")return null;throw J}return aF(f,"utf8")},env(f){return process.env[f]},home(){return rF()},findClaudeBinary(){return TW()},findCodexBinary(){return xW()},findCopilotBinary(){return hW()}}});function cW(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 nW(f){return f.isMeta===!0||f.isCompactSummary===!0}function dW(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 Ju,mkdir as Yu,readFile as eF,readdir as CH,stat as f3,unlink as zu,writeFile as Gu}from"fs/promises";import{homedir as iW}from"os";import EX from"path";function Y3(f){return f.replace(/[/.]/g,"-")}async function rG(f){if(!f)return[];let J=EX.join(iW(),".claude","projects",Y3(f)),Y;try{Y=await CH(J)}catch{return[]}let z=[];for(let G of Y){if(!G.endsWith(".jsonl"))continue;let Z=EX.join(J,G),q=0;try{q=(await f3(Z)).mtimeMs}catch{}z.push({sessionId:G.slice(0,-6),path:Z,mtimeMs:q})}return z.sort((G,Z)=>Z.mtimeMs-G.mtimeMs),z}async function lW(f){return(await rG(f))[0]?.mtimeMs??0}async function aW(f,J=J3){let Y=J.projectsDir(),z=await J.readdir(Y);for(let G of z){let Z=EX.join(Y,G,`${f}.jsonl`),q;try{q=await J.readFile(Z)}catch{continue}return z3(G3(q,f))}return[]}function z3(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 G3(f,J){let Y=[];for(let z of f.split(`
24
- `)){let G=z.trim();if(!G)continue;let Z;try{Z=JSON.parse(G)}catch{continue}if(!kH(Z))continue;let q=Z3(Z,J);if(q)Y.push(q)}return Y}function Z3(f,J){if(nW(f))return null;let Y=kH(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=cW(Y.content);if(z==="user"&&dW(G))return null;let Z=typeof f.timestamp==="string"?f.timestamp:new Date().toISOString(),q=typeof f.sessionId==="string"?f.sessionId:J,Q=X3(Y.usage);return Q?{role:z,blocks:G,timestamp:Z,sessionId:q,usage:Q}:{role:z,blocks:G,timestamp:Z,sessionId:q}}function X3(f){if(!kH(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 kH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var J3;var NH=C(()=>{J3={projectsDir(){return EX.join(iW(),".claude","projects")},async readdir(f){try{return await CH(f)}catch{return[]}},async readFile(f){return await eF(f,"utf8")},async pathExists(f){try{return await CH(f),!0}catch{return!1}}}});import{fileURLToPath as rW}from"url";function Cf(){if(import.meta.url.endsWith(".js"))return["kobe"];let J=rW(new URL("./index.ts",import.meta.url)),Y=rW(import.meta.resolve("@opentui/solid/preload"));return[process.execPath,"--preload",Y,"--conditions=browser",J]}var iJ=()=>{};function yH(f,J={}){if(J.bareSafe&&q3.test(f))return f;return`'${f.replace(/'/g,"'\\''")}'`}function xX(f,J={}){return f.map((Y)=>yH(Y,J)).join(" ")}var q3;var bH=C(()=>{q3=/^[A-Za-z0-9_/.:=-]+$/});function _G(f){return`kobe-hidden-${f.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function _W(f){let J=Number.parseInt(f.replace(/^@/,""),10);return Number.isFinite(J)&&J>=0?1000+J:1000}function tY(f){if(!Number.isFinite(f))return sY;return Math.max(Q3,Math.min(H3,Math.round(f)))}function $J(f){if(!Number.isFinite(f))return null;return Math.max(B3,Math.min(j3,Math.round(f)))}function zf(f){return yH(f)}function g1(f){return xX(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 SH(f){return`'${f.replace(/'/g,"'\\''")}'`}function oW(){return`clear; printf ${SH("\\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 sW(f,J){let Y=R1(f),z=J?.initScript?.trim();if(!z)return Y;let G=["{",z,"}"].join(`
25
- `);if(J?.markerPath){let Z=SH(J.markerPath),q=SH(W3(J.markerPath));return[`if [ ! -f ${Z} ]; then`,G,`if [ $? -eq 0 ]; then mkdir -p ${q} && : > ${Z}; fi`,"fi",Y].join(`
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(`
26
26
  `)}return[G,Y].join(`
27
- `)}function W3(f){let J=f.lastIndexOf("/");return J<=0?".":f.slice(0,J)}function pW(f){return`cd ${zf(f)} && while :; do clear; printf "\\033[1m# %s\\033[0m\\n\\n" ${zf(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 tW(f){let J=zf(f.worktree),Y=zf(f.relPath),z=f.cliInvocation.map(zf).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 eW(f){return`${g1([...f.cliInvocation,"update-page"])}`}function fV(f){let J=f.opener??"open";return[`tmux -L ${zf(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 mz(f){if(f.taskId&&f.claudePaneId){let J=f.cliInvocation.map(zf).join(" "),Y=f.vendor?` --vendor ${zf(f.vendor)}`:"";return`KOBE_FILETREE_WATCH=1 ${J} ops --task-id ${zf(f.taskId)} --worktree ${zf(f.cwd)} --target-pane ${zf(f.claudePaneId)}${Y} || { ${pW(f.cwd)}; }`}return pW(f.cwd)}var sY=32,d1="tasks",Pz="claude",GJ="ops",ZJ="shell",pG="workspace_aux",IH=4,XJ="@kobe_hidden_shell_pane",A1="@kobe_hidden_tasks_pane",vz="@kobe_zen_panes",lJ="@kobe_tasks_width",Q3=16,H3=120,wX=60,oG=50,eY="@kobe_right_width_pct",aJ="@kobe_ops_height_pct",B3=10,j3=90;var qJ=C(()=>{bH()});import{mkdir as V3,readFile as K3,writeFile as U3}from"fs/promises";import{dirname as D3}from"path";function L3(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 F3(f){try{let J=JSON.parse(await K3(f,"utf8"));return kJ(J)?J:{}}catch{return{}}}function O3(f){if(!kJ(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>kJ(J)&&typeof J.command==="string"&&J.command.includes(TH))}function A3(f){if(!kJ(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>kJ(J)&&typeof J.command==="string"&&M3.some((Y)=>J.command.includes(Y)))}function g3(f,J){let{hooks:Y,...z}=f,{WorktreeCreate:G,...Z}=kJ(Y)?Y:{},Q=(Array.isArray(G)?G:[]).filter((B)=>!O3(B));if(J!==null)Q.push({hooks:[{type:"command",command:J}]});let H={...Z};if(Q.length>0)H.WorktreeCreate=Q;return Object.keys(H).length>0?{...z,hooks:H}:{...z}}function R3(f=Cf()){let J={};for(let{event:Y,matcher:z,verb:G}of hX){let q={hooks:[{type:"command",command:g1([...f,"hook",G])}]};if(z)q.matcher=z;J[Y]=[q]}return J}function JV(f,J,Y=Cf()){let{hooks:z,...G}=f,Z=kJ(z)?{...z}:{},q=J?R3(Y):{};for(let{event:Q}of hX){let B=(Array.isArray(Z[Q])?Z[Q]:[]).filter((V)=>!A3(V));if(J&&Array.isArray(q[Q]))B.push(...q[Q]);if(B.length>0)Z[Q]=B;else delete Z[Q]}return Object.keys(Z).length>0?{...G,hooks:Z}:{...G}}function C3(f=Cf()){return{PostToolUse:[{matcher:"Bash",hooks:[{type:"command",command:g1([...f,"hook",TH])}]}]}}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(TH))}function YV(f,J,Y=Cf()){let{hooks:z,...G}=f,Z=kJ(z)?{...z}:{},q="PostToolUse",H=(Array.isArray(Z.PostToolUse)?Z.PostToolUse:[]).filter((B)=>!k3(B));if(J)H.push(...C3(Y).PostToolUse);if(H.length>0)Z.PostToolUse=H;else delete Z.PostToolUse;return Object.keys(Z).length>0?{...G,hooks:Z}:{...G}}class uH{vendor="claude";supportsHooks(){return!0}activityDetailFromPayload(f,J){if(f==="turn-failed")return{failure:L3(J.error_type)};if(f==="awaiting-input")return{waiting:"permission"};return}supportsWorktreeSync(){return!0}async installActivityHooks(f){await this.editSettings(f,(J)=>JV(J,!0))}async removeActivityHooks(f){await this.editSettings(f,(J)=>JV(J,!1))}async removeWorktreeSyncHook(f){await this.editSettings(f,(J)=>g3(J,null))}async installWorktreeWatchHook(f){await this.editSettings(f,(J)=>YV(J,!0))}async removeWorktreeWatchHook(f){await this.editSettings(f,(J)=>YV(J,!1))}async editSettings(f,J){try{let Y=await F3(f),z=J(Y);if(JSON.stringify(z)===JSON.stringify(Y))return;await V3(D3(f),{recursive:!0}),await U3(f,`${JSON.stringify(z,null,2)}
28
- `)}catch{}}}var hX,Mu,M3,TH="worktree-created";var zV=C(()=>{iJ();qJ();hX=[{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"}],Mu=hX.map((f)=>f.event);M3=hX.map((f)=>g1(["hook",f.verb]))});function EH(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(!N3(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 N3(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function GV(f){if(f.length===0)return!1;for(let J of f){if(J.type!=="text")return!1;let Y=(J.text??"").trim();if(!y3(Y)&&!b3(Y))return!1}return!0}function y3(f){return f.startsWith("<environment_context>")&&f.endsWith("</environment_context>")}function b3(f){return f.startsWith("# AGENTS.md instructions for ")&&f.includes(`
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(`
29
29
  <INSTRUCTIONS>
30
- `)&&f.endsWith("</INSTRUCTIONS>")}var ZV=()=>{};function XV(f,J={}){let Y=xH(f.input_tokens,0),z=xH(f.cached_input_tokens,0),G=xH(f.output_tokens,0),Z=Math.max(0,Y-z);if(Y<=0&&G<=0&&z<=0)return;return{input_tokens:Z,output_tokens:G,...z>0?{cache_read_input_tokens:z}:{},...S3(J.contextWindowTokens)?{context_window_tokens:J.contextWindowTokens}:{}}}function xH(f,J){return typeof f==="number"&&Number.isFinite(f)?f:J}function S3(f){return typeof f==="number"&&Number.isFinite(f)&&f>0}import{readFile as I3,readdir as T3,stat as u3,unlink as ku}from"fs/promises";import{homedir as E3}from"os";import fz from"path";async function vH(f=Jz){let J=f.sessionsDir(),Y=(await f.readdir(J)).sort().reverse(),z=[];for(let G of Y){let Z=fz.join(J,G),q=(await f.readdir(Z)).sort().reverse();for(let Q of q){let H=fz.join(Z,Q),B=(await f.readdir(H)).sort().reverse();for(let V of B){let j=fz.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(fz.join(j,L))}}}return z}async function x3(f,J=Jz){if(!f)return;let Y=f.toLowerCase(),z=await vH(J);for(let G of z)if(fz.basename(G).match(BV)?.[1]?.toLowerCase()===Y)return G;return}function w3(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 jV(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 Z=w3(G);if(Z)Y.set(f,Z);return Z}async function WV(f,J=Jz){if(!f)return[];let Y=await vH(J),z=[],G=0;for(let Z of Y){if(G>=h3)break;if(G++,await jV(Z,J)!==f)continue;let q=fz.basename(Z).match(BV)?.[1];if(q)z.push(q)}return z.reverse()}async function mH(f,J=Jz){if(!f)return null;let Y=await vH(J),z=0;for(let G of Y){if(z>=P3)break;if(z++,await jV(G,J)!==f)continue;try{return{path:G,mtimeMs:(await J.stat(G)).mtimeMs}}catch{}}return null}async function VV(f,J=Jz){return(await mH(f,J))?.mtimeMs??0}async function KV(f,J=Jz){return(await v3(f,J)).messages}async function v3(f,J=Jz){let Y=await x3(f,J);if(!Y)return{messages:[]};let z;try{z=await J.readFile(Y)}catch{return{messages:[]}}let G=m3(c3(z,f)),Z=a3(z);return{messages:G,...Z?{usageMetrics:Z}:{}}}function m3(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 c3(f,J){let Y=[];for(let z of f.split(`
32
- `)){let G=z.trim();if(!G)continue;let Z;try{Z=JSON.parse(G)}catch{continue}if(!sG(Z))continue;if(Z.type!=="response_item")continue;let q=sG(Z.payload)?Z.payload:void 0;if(!q)continue;let Q=typeof Z.timestamp==="string"?Z.timestamp:new Date().toISOString(),H=n3(q,Q,J);if(H)Y.push(H)}return Y}function n3(f,J,Y){if(f.type==="message"){let z=f.role;if(z!=="user"&&z!=="assistant"&&z!=="system")return;let G=EH(f.content);if(z==="user"&&GV(G))return;return{role:z,blocks:G,timestamp:J,sessionId:Y}}if(f.type==="reasoning")return d3(f,J,Y);if(f.type==="function_call")return wH(f,J,Y,{name:PH(f.name,"function_call"),input:hH(f.arguments)});if(f.type==="custom_tool_call")return wH(f,J,Y,{name:PH(f.name,"custom_tool_call"),input:hH(f.input)});if(f.type==="tool_search_call")return wH(f,J,Y,{name:"tool_search_call",input:PX(f,["type","call_id","status"])});if(f.type==="function_call_output"||f.type==="custom_tool_call_output")return QV(f,J,Y,hH(f.output));if(f.type==="tool_search_output")return QV(f,J,Y,PX(f,["type","call_id"]));if(f.type==="web_search_call"||f.type==="image_generation_call"||f.type==="local_shell_call")return i3(f,J,Y);return}function d3(f,J,Y){let z=l3(f);if(z.length===0)return;return{role:"assistant",blocks:[{type:"thinking",text:z}],timestamp:J,sessionId:Y}}function wH(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 QV(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 i3(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}`,Z=PH(f.name,z),q=PX(f,["type","call_id","status"]),Q=PX(f,["type","call_id"]);return{role:"assistant",timestamp:J,sessionId:Y,blocks:[{type:"tool_call",callId:G,name:Z,input:q},{type:"tool_result",callId:G,output:Q,isError:!1}]}}function l3(f){let J=HV(f.content);if(J.length>0)return J;let Y=typeof f.text==="string"?f.text:"";if(Y.length>0)return Y;return HV(f.summary)}function HV(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(!sG(Y))continue;let z=typeof Y.text==="string"?Y.text:"";if(z.length>0)J.push(z)}return J.join("")}function PX(f,J){let Y={};for(let[z,G]of Object.entries(f))if(!J.includes(z))Y[z]=G;return Y}function PH(f,J){return typeof f==="string"&&f.length>0?f:J}function hH(f){if(typeof f!=="string")return f;try{return JSON.parse(f)}catch{return f}}function a3(f){let J,Y=null;for(let z of f.split(`
33
- `)){let G=z.trim();if(!G)continue;let Z;try{Z=JSON.parse(G)}catch{continue}if(!sG(Z))continue;let q=typeof Z.timestamp==="string"?$3(Z.timestamp):null;if(Z.type==="response_item")continue;if(Z.type!=="turn.completed")continue;let Q=sG(Z.usage)?Z.usage:void 0;if(!Q)continue;let H=XV(Q);if(!H)continue;if(q!==null&&(Y===null||q>Y))Y=q,J=H;else if(Y===null)J=H}return J}function $3(f){let J=new Date(f).getTime();return Number.isFinite(J)?J:null}function sG(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var Jz,BV,qV,h3=200,P3=12;var cH=C(()=>{ZV();Jz={sessionsDir(){return fz.join(E3(),".codex","sessions")},async readdir(f){try{return await T3(f)}catch{return[]}},async readFile(f){return await I3(f,"utf8")},stat:u3};BV=/([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 DV(f){if(!vX(f))return;let J=vX(f.modelMetrics)?f.modelMetrics:void 0;if(!J)return;let Y=0,z=0,G=0;for(let q of Object.values(J)){if(!vX(q)||!vX(q.usage))continue;Y+=mX(q.usage.inputTokens,0),z+=mX(q.usage.outputTokens,0),G+=mX(q.usage.cacheReadTokens,0)}let Z=mX(f.currentTokens,0);if(Y===0&&z===0&&G===0&&Z===0)return;return{input_tokens:Y,output_tokens:z,...G>0?{cache_read_input_tokens:G}:{},...Z>0?{context_tokens:Z}:{}}}function vX(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function mX(f,J){return typeof f==="number"&&Number.isFinite(f)?f:J}import{readFile as r3,readdir as p3,rm as _3,stat as o3}from"fs/promises";import{homedir as s3}from"os";import KY from"path";async function dH(f=Yz){let J=KY.join(f.copilotDir(),"session-state");return(await f.readdir(J)).map((z)=>KY.join(J,z))}async function LV(f,J=Yz){let Y=[];for(let z of await dH(J)){let G=await iH(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 MV(f,J=Yz){if(!f)return 0;let Y=0;for(let z of await dH(J)){if((await iH(z,J)).cwd!==f)continue;try{let{mtimeMs:Z}=await J.stat(KY.join(z,"events.jsonl"));if(Z>Y)Y=Z}catch{}}return Y}async function t3(f,J=Yz){let Y=await e3(f,J);if(!Y)return{messages:[]};let z=await J.readFile(KY.join(Y,"events.jsonl")).catch(()=>""),G=JO(z,f);return{messages:G.messages,...G.usageMetrics?{usageMetrics:G.usageMetrics}:{}}}async function FV(f,J=Yz){return(await t3(f,J)).messages}async function e3(f,J=Yz){for(let Y of await dH(J)){if(KY.basename(Y)===f)return Y;let z=await iH(Y,J);if(z.id===f||z.name?.toLowerCase()===f.toLowerCase())return Y}return}async function iH(f,J=Yz){let Y=await J.readFile(KY.join(f,"workspace.yaml")).catch(()=>"");return fO(Y)}function fO(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],Z=z[2]??"";if(Z.startsWith('"')&&Z.endsWith('"'))Z=Z.slice(1,-1).replace(/\\"/g,'"');J[G]=Z}return{id:J.id,cwd:J.cwd,name:J.name,updatedAt:J.updated_at,createdAt:J.created_at}}function JO(f,J){let Y=[],z=new Map,G=J,Z,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(!nH(B)||typeof B.type!=="string")continue;let V=typeof B.timestamp==="string"?B.timestamp:new Date().toISOString(),j=nH(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,YO),"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(!nH(M))continue;let g=typeof M.id==="string"?M.id:typeof M.toolCallId==="string"?M.toolCallId:"tool",I=typeof M.name==="string"?M.name:typeof M.toolName==="string"?M.toolName:"tool";U.push({type:"tool_call",callId:g,name:I,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")Z=DV(j)}return{messages:Y,usageMetrics:Z,firstUserMessage:q}}function nH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var Yz,YO=200;var OV=C(()=>{Yz={copilotDir(){let f=process.env.COPILOT_HOME?.trim();if(f)return f;return KY.join(s3(),".copilot")},async readdir(f){try{return await p3(f)}catch{return[]}},async readFile(f){return await r3(f,"utf8")},stat:o3,async rm(f){await _3(f,{recursive:!0,force:!0})}}});function lH(f){return pf(f).createHookAdapter()}class tG{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 aH=C(()=>{UY()});import{readFile as AV}from"fs/promises";class cX{supportsCompletionMarkers(){return!0}}function gV(f){return pf(f).createTurnDetector()}function XO(f,J="claude",Y=0){let z=null,G=0;for(let Z of f.split(`
36
- `)){G++;let q=RV(Z);if(!q)continue;let Q=kV(q.message)?q.message:q;if(Q.role!=="assistant")continue;if(!("content"in Q))continue;let H=CV(q,Y),B={id:`claude:${J}:${H}:${G}`,timestampMs:H,source:"claude"};if(!z||B.timestampMs>=z.timestampMs)z=B}return z}function qO(f,J="codex"){let Y=null,z=0;for(let G of f.split(`
37
- `)){z++;let Z=RV(G);if(!Z||Z.type!=="turn.completed")continue;let q=CV(Z,0),Q={id:`codex:${J}:${q}:${z}`,timestampMs:q,source:"codex"};if(!Y||Q.timestampMs>=Y.timestampMs)Y=Q}return Y}function RV(f){let J=f.trim();if(!J)return null;try{let Y=JSON.parse(J);return kV(Y)?Y:null}catch{return null}}function CV(f,J){let Y=typeof f.timestamp==="string"?Date.parse(f.timestamp):Number.NaN;return Number.isFinite(Y)?Y:J}function kV(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var GO,$H,ZO,rH,nX;var pH=C(()=>{NH();cH();UY();GO={listSessionFiles:(f)=>rG(f),readFile:(f)=>AV(f,"utf8")};$H=class $H extends cX{deps;vendor="claude";cache=new Map;constructor(f=GO){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 Z=this.cache.get(G.path),q;if(Z&&G.mtimeMs>0&&Z.mtimeMs===G.mtimeMs)q=Z.marker;else{let Q=await this.deps.readFile(G.path).catch(()=>"");q=XO(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}};ZO={findLatestRollout:(f)=>mH(f),readFile:(f)=>AV(f,"utf8")};rH=class rH extends cX{deps;vendor="codex";cache=null;constructor(f=ZO){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=qO(Y,J.path);return this.cache={path:J.path,mtimeMs:J.mtimeMs,marker:z},z}};nX=class nX extends cX{vendor;constructor(f){super();this.vendor=f}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function VO(f){return{vendor:f,builtin:!1,displayName:f,defaultCommand:[f],history:QO,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new tG(f),createTurnDetector:()=>new nX(f)}}function pf(f){return Q1(f)?WO[f]:VO(f)}var QO,HO,BO,jO,WO;var UY=C(()=>{K1();oY();NH();zV();cH();OV();aH();pH();QO={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},HO={async listSessionIdsForWorktree(f){return[...await rG(f)].sort((Y,z)=>Y.mtimeMs-z.mtimeMs).map((Y)=>Y.sessionId)},readHistory:(f)=>aW(f),latestTranscriptMtimeForWorktree:(f)=>lW(f)},BO={listSessionIdsForWorktree:(f)=>WV(f),readHistory:(f)=>KV(f),latestTranscriptMtimeForWorktree:(f)=>VV(f)},jO={listSessionIdsForWorktree:(f)=>LV(f),readHistory:(f)=>FV(f),latestTranscriptMtimeForWorktree:(f)=>MV(f)},WO={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:HO,detectAccount:(f)=>IX(f),createHookAdapter:()=>new uH,createTurnDetector:()=>new $H},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:BO,detectAccount:(f)=>TX(f),createHookAdapter:()=>new tG("codex"),createTurnDetector:()=>new rH},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:jO,detectAccount:(f)=>uX(f),createHookAdapter:()=>new tG("copilot"),createTurnDetector:()=>new nX("copilot")}}});function NV(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=WW(Y);return z.length>0?Buffer.from(z,"utf8").toString("utf8"):z}async function cz(f,J=yf){if(!f)return"";let{history:Y}=pf(J),z=await Y.listSessionIdsForWorktree(f);for(let G of z.slice(0,KO)){let Z=NV(await Y.readHistory(G));if(Z)return Z}return""}async function yV(f,J){if(!J)return"";try{return NV(await pf(f).history.readHistory(J))}catch{return""}}var KO=8;var dX=C(()=>{UY();S1()});function nz(f,J,Y){if(!J)return f;let z=Tz(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}=${zf(Y)}`)}return f.length>0?`${f.join(" ")} `:""}var eG="@kobe_remote";var zz=C(()=>{e1();qJ()});var zZ={};jf(zZ,{windowIsSurface:()=>OO,windowCount:()=>LO,tmuxSessionName:()=>Mf,tmuxCommandSequence:()=>oH,tmuxAvailable:()=>NJ,tmuxArgs:()=>Gz,tagPaneRole:()=>IV,tagClaudePane:()=>FO,switchClientBeforeKill:()=>bJ,setWindowOption:()=>LY,setSessionOption:()=>lz,sessionExists:()=>Bf,sendKeys:()=>aX,sendKeyName:()=>YZ,runTmuxSequenceCapturing:()=>fZ,runTmuxSequence:()=>hf,runTmuxCapturing:()=>a0,runTmux:()=>v0,paneIdByRole:()=>tH,newWindow:()=>HJ,killSession:()=>i1,globalTasksPaneWidth:()=>lX,getSessionOptions:()=>C1,getSessionOption:()=>iX,getServerOptions:()=>DY,getServerOption:()=>SV,ensureFallbackSession:()=>$X,currentSessionName:()=>k1,claudePaneIdStrict:()=>az,claudePaneId:()=>eH,capturePaneById:()=>$z,attachArgv:()=>iz,SURFACE_WINDOW_OPTION:()=>fB,PANE_ROLE_OPTION:()=>JZ,KOBE_TMUX_SOCKET:()=>QJ,KOBE_HOME_SESSION:()=>TV,CLAUDE_ROLE_OPTION:()=>MO,CHAT_TAB_SESSION_ID_OPTION:()=>yJ});import{homedir as UO}from"os";function Gz(...f){return["tmux","-L",QJ,...f]}function Mf(f){return`kobe-${f.replace(/[^A-Za-z0-9_-]/g,"")}`}function iz(f){return Gz("attach-session","-t",`=${f}`)}async function _H(f){if(!f)return"";try{return await new Response(f).text()}catch{return""}}async function v0(f){try{let J=Bun.spawn(Gz(...f),{stdin:"ignore",cwd:dz,stdout:"ignore",stderr:"pipe"}),[Y,z]=await Promise.all([_H(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 DO(f){try{return await Bun.spawn(Gz(...f),{stdin:"ignore",cwd:dz,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function oH(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 hf(f){let J=oH(f);return J.length===0?0:v0(J)}async function a0(f){try{let J=Bun.spawn(Gz(...f),{stdin:"ignore",cwd:dz,stdout:"pipe",stderr:"pipe"}),[Y,z,G]=await Promise.all([_H(J.stdout),_H(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 fZ(f){let J=oH(f);return J.length===0?{code:0,stdout:""}:a0(J)}async function NJ(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:dz,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function Bf(f){return await DO(["has-session","-t",`=${f}`])===0}async function LO(f){let{code:J,stdout:Y}=await a0(["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 lz(f,J,Y){await v0(["set-option","-t",f,J,Y])}async function iX(f,J){let{code:Y,stdout:z}=await a0(["show-options","-v","-t",f,J]);return Y===0?z.trim():""}async function C1(f,J){let Y=Object.fromEntries(J.map((Z)=>[Z,void 0])),{code:z,stdout:G}=await fZ(J.map((Z)=>["show-options","-q","-t",f,Z]));if(z!==0)return Y;for(let Z of G.split(`
39
- `)){let q=Z.indexOf(" ");if(q<=0)continue;let Q=Z.slice(0,q);if(Q in Y)Y[Q]=Z.slice(q+1).trim()}return Y}async function SV(f){let{code:J,stdout:Y}=await a0(["show-options","-sqv",f]);return J===0?Y.trim():""}async function DY(f){let J=Object.fromEntries(f.map((G)=>[G,void 0])),{code:Y,stdout:z}=await fZ(f.map((G)=>["show-options","-sq",G]));if(Y!==0)return J;for(let G of z.split(`
40
- `)){let Z=G.indexOf(" ");if(Z<=0)continue;let q=G.slice(0,Z);if(q in J)J[q]=G.slice(Z+1).trim()}return J}async function lX(){let f=await SV(lJ),J=Number.parseInt(f,10);return Number.isFinite(J)&&J>0?tY(J):sY}async function IV(f,J){await v0(["set-option","-p","-t",f,JZ,J])}async function LY(f,J,Y){await v0(["set-window-option","-t",f,J,Y])}async function FO(f){await IV(f,sH)}async function tH(f,J,Y=!1){let{code:z,stdout:G}=await a0(["list-panes","-t",`=${f}`,"-F",`#{pane_id} #{${JZ}}`]);if(z!==0)return"";let Z="";for(let q of G.split(`
41
- `)){let[Q,H]=q.split("\t");if(!Q)continue;if(!Z)Z=Q.trim();if(H?.trim()===J)return Q.trim()}return Y?Z:""}async function eH(f){return tH(f,sH,!0)}async function az(f){return tH(f,sH,!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 a0(Y);return z===0?G:""}async function aX(f,J){await v0(["send-keys","-t",f,"-l","--",J])}async function YZ(f,J){await v0(["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 a0(Y),Z=G.trim();if(z===0&&Z)await LY(Z,fB,"1");return}Y.push(J.command),await v0(Y)}async function OO(f){let{code:J,stdout:Y}=await a0(["display-message","-t",f,"-p",`#{${fB}}`]);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 a0(f),G=z.trim();return Y===0&&G.length>0?G:null}async function i1(f){if(!f.startsWith("kobe-hidden-")){let J=_G(f);if(await Bf(J))await v0(["kill-session","-t",`=${J}`])}if(await Bf(f))await v0(["kill-session","-t",`=${f}`])}async function $X(){let f=TV;if(await Bf(f)){if(await iX(f,bV)==="tasks")return f;await v0(["kill-session","-t",`=${f}`])}let Y=(await a0(["new-session","-d","-s",f,"-c",dz,"-x","220","-y","50","-P","-F","#{pane_id}",oW()])).stdout.trim();if(Y){let z=await lX(),Z=(await a0(["split-window","-h","-b","-t",Y,"-l",`${z}`,"-c",dz,"-P","-F","#{pane_id}",R1(_f()+VY(Cf()))])).stdout.trim();if(Z)await hf([["set-option","-p","-t",Z,JZ,"tasks"],["select-pane","-t",Z]])}return await lz(f,bV,"tasks"),f}async function bJ(f,J){if(await k1()!==f)return;if(J&&J!==f&&await Bf(J)){await v0(["switch-client","-t",`=${J}`]);return}let z=await $X();await v0(["switch-client","-t",`=${z}`])}var QJ,dz,JZ="@kobe_role",MO,sH="claude",yJ="@kobe_session_id",fB="@kobe_surface",TV="kobe-home",bV="@kobe_home";var Sf=C(()=>{iJ();zz();qJ();QJ=process.env.KOBE_TMUX_SOCKET?.trim()||"kobe";dz=UO()||"/";MO=JZ});async function AO(f,J=uV){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 Z of z.split(`
42
- `)){let[q,Q,H]=Z.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 gO(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 RO(f){let{code:J,stdout:Y}=await f.capture(["show-window-options","-g","automatic-rename"]);return J===0&&/\boff\b/.test(Y)}async function CO(f,J,Y,z){return await z.run(["rename-window","-t",`=${f}:${J}`,"--",Y])===0}async function EV(f,J=kO){let Y=0,z=null,G=async(Z,q)=>{if(q.autoRename==="1")return!1;if(q.autoRename==="0"){if(z===null)z=await RO(J.runner);if(!z)return!0}return gO(Z,q.index,J.runner)};for(let Z of f.listTasks()){if(Z.archived||Z.kind==="main"||!Z.worktreePath)continue;let q=Mf(Z.id),Q=await AO(q,J.runner);if(Q.length===0)continue;let H=Q.reduce((V,j)=>Math.min(V,j.index),Number.POSITIVE_INFINITY),B=Z.vendor??yf;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(Z.worktreePath,B):"";if(j&&await CO(q,V.index,j,J.runner))Y++}catch{}}return Y}var uV,kO;var xV=C(()=>{dX();Sf();S1();uV={capture:a0,run:v0};kO={runner:uV,titleFromSessionId:yV,titleFromWorktree:cz}});function hV(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 wV(f,J,Y=new Date){let z=hV(J);return`[${Y.toISOString()}] daemon ${f}: ${z.stack??`${z.name}: ${z.message}`}
43
- `}function NO(f,J,Y=new Date){let z=hV(J);return`[${Y.toISOString()}] daemon error [${f}]: ${z.stack??`${z.name}: ${z.message}`}
44
- `}function If(f,J){process.stderr.write(NO(f,J))}function yO(f,J,Y=new Date){return`[${Y.toISOString()}] daemon [${f}]: ${J}
45
- `}function MY(f,J){process.stderr.write(yO(f,J))}function PV(f=(J)=>process.stderr.write(J)){if(JB||YB)return;JB=(J)=>f(wV("unhandledRejection",J)),YB=(J)=>f(wV("uncaughtException",J)),process.on("unhandledRejection",JB),process.on("uncaughtException",YB)}var JB,YB;async function bO(f,J=cz){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??yf);if(!G)continue;let Z=f.getTask(z.id);if(!Z||Z.title!==RJ)continue;await f.setTitle(z.id,G),Y.push({id:z.id,title:G})}catch(G){If("auto-title-poller",G)}}return Y}function vV(f,J=zB,Y){if(J<=0)return()=>{};let z=!1,Z=setInterval(()=>{if(Y&&!Y())return;if(z)return;z=!0,bO(f).then(()=>EV(f)).catch((q)=>If("auto-title-poller",q)).finally(()=>{z=!1})},J);return Z.unref?.(),()=>clearInterval(Z)}var zB=4000;var mV=C(()=>{dX();iG();xV();S1()});class GB{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 rX(){return cf()[Zz]===!0}var Zz="experimental.autoStatus";var GZ=C(()=>{lY()});async function cV(f,J,Y=rX){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 nV=C(()=>{GZ()});import{createHash as SO}from"crypto";import{homedir as IO}from"os";import OY from"path";function wO(){return OY.join(process.env.KOBE_HOME_DIR??IO(),".kobe")}function hO(f){let Y=(OY.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=SO("sha1").update(OY.resolve(f)).digest("hex").slice(0,12);return`${Y}-${z}`}function PO(f){if(!OY.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return OY.join(wO(),TO,hO(f))}function vO(f){if(!OY.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[PO(f),...xO.map((J)=>OY.join(f,J))]}function FY(f){return f.length>1&&f.endsWith("/")?f.slice(0,-1):f}function dV(f,J){return J===f||J.startsWith(`${f}/`)}function iV(f,J){let Y=FY(J),z,G=-1;for(let Z of f){if(!Z.worktreePath)continue;let q=FY(Z.worktreePath);if(dV(q,Y)&&q.length>G)G=q.length,z=Z.id}return z}function ZB(f,J){let Y=FY(J),z,G=-1;for(let Z of f){if(!Z.repo)continue;let q=FY(Z.repo);if(dV(q,Y)&&q.length>G)G=q.length,z=q}return z}function lV(f,J){let Y=FY(J),z=new Set,G=new Set;for(let Z of f){if(Z.repo)z.add(FY(Z.repo));if(Z.worktreePath)G.add(FY(Z.worktreePath))}for(let Z of z)for(let q of vO(Z).map(FY)){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:Z,worktreePath:V}}return}var TO="worktrees",uO=".kobe/worktrees",EO=".claude/worktrees",xO;var aV=C(()=>{xO=[uO,EO]});function QB(f){return{message:f instanceof Error?f.message:String(f),name:f instanceof Error?f.name:void 0}}async function ZZ(f,J,Y,z){let G=f.get(J);if(!G)throw Error(`unknown daemon request: ${J}`);return G.handle(HB(Y),z)}function XZ(){return new Map([{name:"hello",handle(J,Y){let z=typeof J.protocolVersion==="number"?J.protocolVersion:c1,G=typeof J.minProtocolVersion==="number"?J.minProtocolVersion:z;if(!FX({localVersion:c1,localMin:HY,remoteVersion:z,remoteMin:G}))throw Error(`daemon is protocol v${c1} (min v${HY}); this client is v${z} (min v${G}). Upgrade your kobe.`);return{protocolVersion:c1,minProtocolVersion:HY,kobeVersion:o0,capabilities:[...FH],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:o0,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=Af(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=Af(J,"repo"),G=await Y.orch.createTask({repo:z,title:l1(J,"title"),branch:l1(J,"branch"),baseRef:l1(J,"baseRef"),vendor:qB(J,"vendor"),modelEffort:l1(J,"effort")});return{taskId:G.id,task:zJ(G)}}},{name:"task.archive",async handle(J,Y){let z=Af(J,"taskId");return await Y.orch.setArchived(z,XB(J,"archived")),{}}},{name:"task.rename",async handle(J,Y){let z=Af(J,"taskId");return await Y.orch.setTitle(z,Af(J,"title")),{}}},{name:"task.setBranch",async handle(J,Y){let z=Af(J,"taskId");return await Y.orch.setBranch(z,Af(J,"branch")),{}}},{name:"task.setVendor",async handle(J,Y){let z=Af(J,"taskId"),G=qB(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=Af(J,"taskId");return await Y.orch.deleteTask(z,{force:XB(J,"force")}),Y.activity.clearTask(z),{}}},{name:"task.pin",async handle(J,Y){let z=Af(J,"taskId");return await Y.orch.setPinned(z,XB(J,"pinned")),{}}},{name:"task.move",async handle(J,Y){let z=Af(J,"taskId"),G=Af(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=Af(J,"taskId"),G=Af(J,"status");if(!k9(G))throw Error("status must be a TaskStatus");let Z=G==="done"?Y.orch.getTask(z):void 0,q=Z?.status;if(await Y.orch.setStatus(z,G),G==="done"&&q!=="done"&&Z)try{let Q=await Y.issues.mirrorTaskDone(Z.repo,z);if(Q)Y.bus.publish("issue.snapshot",Q)}catch(Q){If("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((Z)=>{if(typeof Z!=="object"||Z===null)throw Error("each move needs taskId and position");let q=Z,Q=Af(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=Af(J,"repo"),G=await Y.orch.ensureMainTask(z);return{task:zJ(G)}}},{name:"task.ensureWorktree",async handle(J,Y){let z=Af(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=Af(J,"repo");return{worktrees:await Y.orch.discoverAdoptableWorktrees(z)}}},{name:"worktree.adopt",async handle(J,Y){let z=await Y.orch.adoptWorktree({repo:Af(J,"repo"),worktreePath:Af(J,"worktreePath"),branch:l1(J,"branch"),vendor:qB(J,"vendor"),title:l1(J,"title"),ifExists:l1(J,"ifExists")==="return"?"return":"error"});return{task:zJ(z)}}},{name:"worktree.reconcile",async handle(J,Y){let z=Af(J,"cwd"),G=Af(J,"worktreePath"),Z=ZB(Y.orch.listTasks(),z)??ZB(Y.orch.listTasks(),G);if(!Z)return{adopted:!1};try{return{adopted:!0,taskId:(await Y.orch.adoptWorktree({repo:Z,worktreePath:G,ifExists:"return"})).id}}catch(q){return If("worktree-created",q),{adopted:!1}}}},{name:"task.setActive",async handle(J,Y){let z=l1(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(Af(J,"repoRoot"))}},{name:"issue.mutate",async handle(J,Y){let z=await Y.issues.mutate(Af(J,"repoRoot"),J.op);return Y.bus.publish("issue.snapshot",z),z}},{name:"session.deliver",async handle(J,Y){let z=Af(J,"taskId"),G=Af(J,"text"),Z=l1(J,"source");if(Z!==void 0&&Z!=="note"&&Z!=="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:Z??"dispatcher"}),{ok:!0}}},{name:"note.file",async handle(J,Y){let z=Af(J,"taskId"),G=Af(J,"text"),Z=Y.orch.getTask(z);if(!Z)throw Error(`task not found: ${z}`);let q=Y.orch.listTasks().find((H)=>(H.kind??"task")==="main"&&H.repo===Z.repo&&!H.archived);if(!q||q.id===Z.id)return{ok:!0,routed:!1};let Q=Z.title||Z.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=Af(J,"kind");if(!RX(z))throw Error(`unknown engine event kind: ${z}`);let G=l1(J,"taskId"),Z=l1(J,"cwd");if(!G&&Z&&z==="session-start"){let H=lV(Y.orch.listTasks(),Z);if(H)try{await Y.orch.adoptWorktree({repo:H.repo,worktreePath:H.worktreePath,ifExists:"return"})}catch(B){If("worktree-autosync",B)}}let q=G??(Z?iV(Y.orch.listTasks(),Z):void 0);if(!q)return{};let Q=mO(J);if(Y.activity.report(q,z,Q),z==="turn-start")cV(Y.orch,q).then((H)=>{if(H==="moved")console.log(`[status-rules] task ${q} auto-moved backlog \u2192 in_progress`)}).catch((H)=>If("status-rules",H));return{}}}].map((J)=>[J.name,J]))}function HB(f){if(!f||typeof f!=="object"||Array.isArray(f))return{};return f}function Af(f,J){let Y=f[J];if(typeof Y!=="string"||Y.length===0)throw Error(`${J} is required`);return Y}function l1(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 XB(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 qB(f,J){let Y=l1(f,J);return Y&&Y.trim().length>0?Y:void 0}function mO(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 pX=C(()=>{CX();nV();S1();U1();aV();rY()});import{execFile as cO}from"child_process";import{mkdir as nO,readFile as dO,realpath as $V,rename as iO,stat as lO,writeFile as aO}from"fs/promises";import{homedir as $O}from"os";import{dirname as rO,isAbsolute as pO,join as _O,resolve as rV}from"path";import{promisify as oO}from"util";function sO(f){return(f instanceof Error?f.message:String(f)).includes("not a git repository")}function oX(f=process.env.KOBE_HOME_DIR??$O()){return _O(f,".kobe","issues.json")}function _V(f){return typeof f==="string"&&pV.includes(f)}function tO(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:_V(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 eO(){return{version:1,repos:{}}}function fA(){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 JA(f){let{stdout:J}=await UB("git",["-C",f,"rev-parse","--git-common-dir"]),Y=J.trim();return $V(pO(Y)?Y:rV(f,Y))}async function YA(f){let{stdout:J}=await UB("git",["-C",f,"rev-parse","--show-toplevel"]);return J.trim()}async function zA(f){let{stdout:J}=await UB("git",["-C",f,"worktree","list","--porcelain"]),Y=J.split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim();return Y?$V(Y):YA(f)}async function BB(f){if(typeof f!=="string"||f.length===0)throw Error("repoRoot is required");let J=rV(f);if(!(await lO(J).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[z,G]=await Promise.all([zA(J),JA(J)]);return{repoRoot:z,repoKey:G}}catch(z){if(sO(z))throw Error("repoRoot is not a git repository");throw z}}async function jB(f){try{let J=JSON.parse(await dO(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 Z=G;Y[z]={repoRoot:typeof Z.repoRoot==="string"?Z.repoRoot:"",nextId:typeof Z.nextId==="number"?Z.nextId:1,issues:Array.isArray(Z.issues)?Z.issues.map(tO).filter((q)=>q!==null):[]}}return{version:1,repos:Y}}catch(J){if(J.code==="ENOENT")return eO();throw J}}async function WB(f,J){await nO(rO(f),{recursive:!0});let Y=`${f}.tmp`;await aO(Y,`${JSON.stringify(J,null,2)}
46
- `,"utf8"),await iO(Y,f)}function VB(f,J){return{repoRoot:f,exists:J!==null,nextId:J?.nextId??1,issues:J?.issues??[]}}async function KB(f,J){let z=(_X.get(f)??Promise.resolve()).then(J),G=z.then(()=>{return},()=>{return});return _X.set(f,G),G.then(()=>{if(_X.get(f)===G)_X.delete(f)}),z}class sX{path;constructor(f=oX()){this.path=f}async list(f){let{repoRoot:J,repoKey:Y}=await BB(f);return KB(this.path,async()=>{let z=await jB(this.path),G=z.repos[Y]??null;if(G&&G.repoRoot!==J)G.repoRoot=J,await WB(this.path,z);return VB(J,G)})}async mirrorTaskDone(f,J){let{repoRoot:Y,repoKey:z}=await BB(f);if(!J)return null;return KB(this.path,async()=>{let G=await jB(this.path),Z=G.repos[z];if(!Z)return null;let q=Z.issues.find((Q)=>Q.taskId===J);if(!q||q.status==="done")return null;return q.status="done",Z.repoRoot=Y,await WB(this.path,G),VB(Y,Z)})}async mutate(f,J){let{repoRoot:Y,repoKey:z}=await BB(f);if(!J||typeof J!=="object"||Array.isArray(J)||typeof J.type!=="string")throw Error("missing op");return KB(this.path,async()=>{let G=await jB(this.path),Z=G.repos[z];if(!Z)Z={repoRoot:Y,nextId:1,issues:[]},G.repos[z]=Z;Z.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");Z.issues=[{id:Z.nextId,title:q.title,status:"open",created:fA(),body:typeof q.body==="string"?q.body:""},...Z.issues],Z.nextId+=1}else if(q.type==="setStatus"){if(typeof q.id!=="number")throw Error("setStatus requires a numeric id");if(!_V(q.status))throw Error(`invalid status: must be one of ${pV.join(", ")}`);let Q=Z.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=Z.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=Z.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=Z.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=Z.issues.filter((H)=>H.id!==q.id);if(Q.length===Z.issues.length)throw Error(`no issue #${q.id}`);Z.issues=Q}else throw Error(`unknown op type: ${q.type}`);return await WB(this.path,G),VB(Y,Z)})}}var UB,pV,_X;var DB=C(()=>{UB=oO(cO),pV=["open","doing","hold","done"];_X=new Map});import{mkdirSync as GA,watch as ZA}from"fs";import{basename as XA,dirname as qA}from"path";function tX(f){if(f.debounceMs<=0)return()=>{};let J=qA(f.filePath),Y=new Set([XA(f.filePath),...f.matchBasenames??[]]),z=null,G=null,Z=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{GA(J,{recursive:!0}),Z=ZA(J,(H,B)=>{let V=B===null?null:String(B);if(V!==null&&!Y.has(V))return;Q()}),Z.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;Z?.close(),Z=null}}var LB=()=>{};import{homedir as QA}from"os";import{basename as HA,join as BA}from"path";function FB(f=process.env.KOBE_HOME_DIR??QA()){return BA(f,".kobe","settings","keybindings.yaml")}function oV(f,J={}){let Y=J.debounceMs??MB;if(Y<=0)return()=>{};let z=J.path??FB(),G=HA(z),Z=G.replace(/\.yaml$/,".yml"),q=0;return f.publish("keybindings",{rev:q}),tX({filePath:z,matchBasenames:[G,Z],debounceMs:Y,onTrigger:()=>{try{q+=1,f.publish("keybindings",{rev:q})}catch(H){If("keybindings-watcher",H)}},onError:(H)=>If("keybindings-watcher",H)})}var MB=200;var sV=C(()=>{LB()});class OB{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??MY}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 tV=()=>{};import{spawn as WA}from"child_process";function AB(f,J,Y,z){if(Y)return f+z.slowRetryMs;return J+Math.max(z.minIntervalMs,(J-f)*5)}function gB(f,J){return!f.inFlight&&J>=f.nextAllowedAt}function eX(f,J,Y,z){let G=Date.now();if(!gB(f,G))return!1;f.inFlight=!0;let Z=new AbortController,q=setTimeout(()=>Z.abort(),J.timeoutMs);return(async()=>{let Q,H=!1;try{Q=await Y(Z.signal),H=!0}catch{}clearTimeout(q);let B=Z.signal.aborted;if(f.nextAllowedAt=AB(G,Date.now(),B,J),f.inFlight=!1,H&&!B)z(Q)})(),!0}function BJ(f,J,Y){return new Promise((z)=>{let G="",Z=!1,q=(H)=>{if(Z)return;Z=!0,z({status:H,stdout:G})},Q=WA(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 qZ=()=>{};function LA(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 MA(f,J){let Y=J.tickMs??fq,z=[];for(let G of f.listTasks()){if(!LA(G)){J.schedule.delete(G.id);continue}let Z=J.schedule.get(G.id)??0;if(J.now<Z)continue;try{let q=await J.run(G.worktreePath,G.branch);if(q.kind==="empty"){J.schedule.set(G.id,J.now+VA);continue}let Q=jW(q.view,J.at),H=f.getTask(G.id);if(!H){J.schedule.delete(G.id);continue}if(!DX(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?KA:Y))}catch(q){If("pr-status-poller",q),J.schedule.set(G.id,J.now+Y)}}return z}function eV(f,J=fq,Y,z=DA){if(J<=0)return()=>{};let G=new Map,Z=!1,Q=setInterval(()=>{if(Y&&!Y())return;if(Z)return;Z=!0,MA(f,{run:z,now:Date.now(),at:new Date().toISOString(),schedule:G,tickMs:J}).catch((H)=>If("pr-status-poller",H)).finally(()=>{Z=!1})},J);return Q.unref?.(),()=>clearInterval(Q)}var fq=30000,VA=300000,KA=600000,UA=1e4,DA=async(f,J)=>{let Y=new AbortController,z=setTimeout(()=>Y.abort(),UA);try{let G=await BJ("gh",["pr","view",J,"--json",BW],{cwd:f,signal:Y.signal});if(G.status!==0)return{kind:"empty"};let Z=JSON.parse(G.stdout);return typeof Z.number==="number"?{kind:"pr",view:Z}:{kind:"empty"}}catch{return{kind:"empty"}}finally{clearTimeout(z)}};var f7=C(()=>{qZ();gf()});import{readFileSync as FA}from"fs";import{homedir as OA}from"os";import{basename as AA,join as gA}from"path";function CB(f=process.env.KOBE_HOME_DIR??OA()){return gA(f,".config","kobe","state.json")}function J7(f){let J={};try{let B=JSON.parse(FA(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"&&CA.includes(J.focusAccent)?J.focusAccent:null,Z=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:Z,keysCollapsed:q,projectFilter:Q}}function kA(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 Y7(f,J={}){let Y=J.debounceMs??RB;if(Y<=0)return()=>{};let z=J.pollMs??RA,G=J.statePath??CB(),Z=AA(G),q=J7(G);return f.publish("ui-prefs",q),tX({filePath:G,matchBasenames:[Z],debounceMs:Y,pollMs:z,onTrigger:()=>{try{let H=J7(G);if(kA(q,H))return;q=H,f.publish("ui-prefs",H)}catch(H){If("ui-prefs-watcher",H)}},onError:(H)=>If("ui-prefs-watcher",H)})}var RB=200,RA=250,CA;var z7=C(()=>{LB();CA=["primary","success","info"]});function kB(){return cf()[Xz]===!0}var Xz="experimental.dispatcher";var Jq=C(()=>{lY()});import{randomUUID as NA}from"crypto";function jJ(f){return`engineCommand.${f}`}function WJ(f){return`engineName.${f}`}function qz(f){return kf(WJ(f))?.trim()||NB[f]||f}function QZ(f){return pf(f??"claude").defaultCommand}function yA(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 Z=yA(z);if(Z.length>0)return Z}return QZ(Y)})();return bA(G,Y,J)}function bA(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)=>SA.has(z)))return{argv:f,sessionId:null};let Y=NA();return{argv:[...f,"--session-id",Y],sessionId:Y}}function Qz(){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 IA(f,J=Qz()){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 TA(f,J=Qz()){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 uA(f,J=Qz(),Y={}){let z=[];if((Y.status??rX)())z.push(IA(f,J));if((Y.notes??kB)())z.push(TA(f,J));return z.length>0?z.join(`
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
49
 
50
- `):null}function Yq(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=uA(Y,Qz(),z);if(!G)return f;return[...f,"--append-system-prompt",G]}function EA(f,J=Qz()){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 zq(f,J,Y,z=kB){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",EA(Y)]}var NB,SA;var E1=C(()=>{iJ();UY();GZ();Jq();gf();K1();NB=Object.fromEntries(vY.map((f)=>[f,pf(f).displayName]));SA=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});function pz(f){return Hz.includes(f)?f:"auto"}var Hz,G7,rJ="editor.kind",AY="editor.customCommand",Gq="auto";var Zq=C(()=>{Hz=["auto","vim","nvim","nano","emacs","custom"],G7=["nvim","vim","emacs","nano"]});function jz(f){return f==="taskpanel"?"taskpanel":"chattab"}var pJ="settings.surface",Bz="chattab";function x1(f=process.env){return{...f,...yB}}var yB;var gY=C(()=>{yB={GIT_OPTIONAL_LOCKS:"0"}});async function _z(f,J,Y={}){if(!f)return{stdout:"",stderr:"worktreePath is required",status:-1};let z=(Y.execForPath??mJ)(f),G=Y.timeoutMs&&Y.timeoutMs>0?new AbortController:null,Z=!1,q=G?setTimeout(()=>{Z=!0,G.abort()},Y.timeoutMs):null,Q;try{Q=await z.run(["git",...J],{cwd:f,env:yB,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(Z&&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 xA(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=xA(f,J);if(!z)return null;let G=(Y.execForPath??mJ)(f);try{return await G.readFile(z)}catch{return null}}var Xq=C(()=>{e1();gY()});import{statSync as wA}from"fs";async function HZ(f,J){let Y=await _z(f,J,{timeoutMs:hA}),z=Y.status??-1;return{ok:z===0,stdout:Y.stdout,stderr:Y.stderr,code:z}}function vA(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 X7(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,Z=z.match(/^\+\+\+ b\/(.*)$/m);if(Z&&Z[1]!=="/dev/null")G=Z[1];else{let q=z.match(/^diff --git a\/.* b\/(.*)$/m);if(q)G=q[1]}if(!G)continue;J.set(mA(G),z.endsWith(`
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(`
52
52
  `)?z:`${z}
53
- `)}return J}function mA(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 cA(f,J,Y){let z=Array(f.length),G=Math.max(1,Math.min(J,f.length)),Z=0;async function q(){while(Z<f.length){let Q=Z++;z[Q]=await Y(f[Q],Q)}}return await Promise.all(Array.from({length:G},()=>q())),z}async function nA(f,J){let Y=await HZ(f,["diff","--no-color","--no-index","--","/dev/null",J]);if(Y.stdout.trim())return Y.stdout.endsWith(`
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(`
55
55
  `)?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(!YX(z))return Response.json({error:"worktreePath does not exist"},{status:400});if(!mJ(z).isRemote)try{if(!wA(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 Z=await HZ(z,["rev-parse","--is-inside-work-tree"]);if(!Z.ok||Z.stdout.trim()!=="true")return Response.json({error:`not a git work tree: ${Z.stderr.trim()||z}`},{status:500});let[q,Q,H]=await Promise.all([HZ(z,["status","--porcelain=v1","-z","--untracked-files=all"]),HZ(z,["diff","--no-color"]),HZ(z,["diff","--no-color","--staged"])]);if(!q.ok)return Response.json({error:`git status failed: ${q.stderr.trim()}`},{status:500});let B=X7(Q.stdout),V=X7(H.stdout),j=q.stdout.split("\x00"),U=[],L=[];for(let g=0;g<j.length;g++){let I=j[g];if(!I)continue;let a=I[0]??" ",N=I[1]??" ",A=I.slice(3);if(!A)continue;if(a==="R"||a==="C"||N==="R"||N==="C")g++;let R=a==="?"&&N==="?",S=a!==" "&&a!=="?"?a:N,_=a!==" "&&a!=="?",z0="";if(R)L.push({fileIndex:U.length,path:A});else if(z0=V.get(A)??B.get(A)??"",V.has(A)&&B.has(A))z0=`${V.get(A)}${B.get(A)}`;U.push({path:A,status:R?"untracked":vA(S),staged:_,patch:z0})}if(L.length>0){let g=await cA(L,PA,(I)=>nA(z,I.path));for(let I=0;I<L.length;I++)U[L[I].fileIndex].patch=g[I]}U.sort((g,I)=>g.path.localeCompare(I.path));let O=[H.stdout,Q.stdout].filter(Boolean).join(`
57
- `),M={files:U,raw:O};return Response.json(M)}var hA=15000,PA=8;var Q7=C(()=>{e1();Xq()});import{isAbsolute as dA}from"path";function B7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function lA(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9._-]+$/.test(f)&&!f.includes("..")}async function aA(f){let J=f.searchParams.get("worktreePath"),Y=f.searchParams.get("vendor")??"claude";if(!J||!dA(J))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!B7(Y))return Response.json({error:"invalid vendor"},{status:400});try{let z=pf(Y).history,[G,Z]=await Promise.all([z.listSessionIdsForWorktree(J),z.latestTranscriptMtimeForWorktree(J)]);return Response.json({sessions:G,latestMtime:Z})}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}async function $A(f){let J=f.searchParams.get("vendor")??"claude",Y=f.searchParams.get("sessionId");if(!B7(J))return Response.json({error:"invalid vendor"},{status:400});if(!lA(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 j7(f,J){if(J.pathname!==H7&&J.pathname!==iA)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return J.pathname===H7?aA(J):$A(J)}var H7="/api/history/sessions",iA="/api/history/messages";var W7=C(()=>{UY()});import{mkdir as rA,readFile as pA,writeFile as _A}from"fs/promises";import{join as V7}from"path";function K7(){return V7(ef(),"notes")}function U7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function D7(f){return V7(K7(),`${f}.md`)}async function sA(f){let J=f.searchParams.get("taskId");if(!U7(J))return Response.json({error:"invalid taskId"},{status:400});try{let Y="";try{Y=await pA(D7(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 tA(f){let J;try{J=await f.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!U7(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 rA(K7(),{recursive:!0}),await _A(D7(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 L7(f,J){if(J.pathname!==oA)return null;if(f.method==="GET")return sA(J);if(f.method==="PUT")return tA(f);return Response.json({error:"method not allowed"},{status:405})}var oA="/api/notes";var M7=C(()=>{lf()});var oz;var qq=C(()=>{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 Qq=C(()=>{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 Hq=C(()=>{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 Bq=C(()=>{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 jq=C(()=>{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 Wq=C(()=>{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 Vq=C(()=>{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 SB(f,J,Y=[]){if(J===void 0)return null;if(typeof J!=="string")return SB(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 SB(f,z,[...Y,J])}function bB(f){return Math.max(0,Math.min(255,Math.round(f)))}function BZ(f,J,Y){let z=Number.parseInt(f.slice(1),16),G=Number.parseInt(J.slice(1),16),Z=(Q,H)=>Q>>H&255;return`#${(bB(Z(z,16)+(Z(G,16)-Z(z,16))*Y)<<16|bB(Z(z,8)+(Z(G,8)-Z(z,8))*Y)<<8|bB(Z(z,0)+(Z(G,0)-Z(z,0))*Y)).toString(16).padStart(6,"0")}`}function qg(f){let J=(Q)=>SB(f,f.theme[Q]),Y=J("background"),z=J("text");if(!Y||!z)return null;let G=J("textMuted")??BZ(z,Y,0.35),Z=J("primary")??z,q=J("border")??BZ(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")??BZ(q,z,0.3),fg:z,muted:G,subtle:BZ(G,Y,0.35),primary:Z,"primary-hover":BZ(Z,z,0.35),"kobe-orange":Z,"kobe-green":J("success")??z,"kobe-blue":J("info")??z,"kobe-red":J("error")??z,"kobe-yellow":J("warning")??z,"kobe-violet":J("secondary")??Z}}function F7(f,J){if(J.pathname!==Hg)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:Qg})}var Xg,Qg,Hg="/api/themes";var O7=C(()=>{qq();Qq();Hq();Bq();jq();Wq();Vq();Xg={claude:oz,conductor:sz,dracula:tz,nord:ez,opencode:fG,"osaka-jade":JG,tokyonight:YG};Qg=Object.fromEntries(Object.entries(Xg).map(([f,J])=>[f,qg(J)]).filter((f)=>f[1]!==null))});import{createHash as Bg,randomUUID as jg}from"crypto";import{mkdir as Wg}from"fs/promises";import{join as IB,resolve as Vg}from"path";function Dg(f){return Bg("sha1").update(f).digest("hex").slice(0,16)}async function Fg(f){let J=Number.parseInt(f.headers.get("content-length")??"",10);if(Number.isFinite(J)&&J>A7)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>A7)return Response.json({error:"asset too large"},{status:413});let Z=Kg[G.type];if(!Z)return Response.json({error:`unsupported content-type: ${G.type||"unknown"}`},{status:415});try{let q=Dg(z),Q=IB(vQ(),q);await Wg(Q,{recursive:!0});let B=`${jg()}.${Z}`;return await Bun.write(IB(Q,B),G),Response.json({url:`${Kq}/${q}/${B}`})}catch(q){return Response.json({error:q instanceof Error?q.message:String(q)},{status:500})}}async function Og(f){let J=f.slice(Kq.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(!Lg.test(z)||!Mg.test(G))return Response.json({error:"invalid asset path"},{status:400});let Z=vQ(),q=Vg(Z,z,G);if(q!==IB(Z,z,G)||!q.startsWith(`${Z}/`))return Response.json({error:"invalid asset path"},{status:400});let Q=G.slice(G.lastIndexOf(".")+1).toLowerCase(),H=Ug[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 g7(f,J){if(J.pathname===Kq){if(f.method==="POST")return Fg(f);return Response.json({error:"method not allowed"},{status:405})}if(J.pathname.startsWith(`${Kq}/`)){if(f.method==="GET")return Og(J.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var Kq="/api/issue-assets",A7=10485760,Kg,Ug,Lg,Mg;var R7=C(()=>{lf();Kg={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},Ug={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};Lg=/^[a-f0-9]{16}$/,Mg=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function C7(f,J=500){return Response.json({error:f instanceof Error?f.message:String(f)},{status:J})}function k7(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 Ag(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 C7(z,k7(z))}}async function gg(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 C7(G,k7(G))}}async function N7(f,J,Y){if(J.pathname!=="/api/issues")return null;if(f.method==="GET")return Ag(Y,J);if(f.method==="POST")return gg(Y,f);return Response.json({error:"method not allowed"},{status:405})}function y7(f){return Rg.has(String(f??"").trim().toLowerCase())}function b7(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 Cg(f){let J=b7(f);return J!==null&&y7(J)}function S7(f,J={}){if(!f)return!0;if(Cg(f))return!0;let Y=J.allowedHost?.trim();if(!Y)return!1;let z=b7(f);return z!==null&&z===Y}function I7(f){let J=String(f??"").trim();return J&&!y7(J)?J:void 0}var Rg;var T7=C(()=>{Rg=new Set(["localhost","127.0.0.1","::1","[::1]"])});var kg,u7;var E7=C(()=>{kg=["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"],u7=new Set(kg)});var TB={};jf(TB,{resolveRepoInit:()=>h7,resolveEngineLaunchInit:()=>_J});import{existsSync as w7,readFileSync as Ng}from"fs";import{join as Uq}from"path";function bg(f){return w7(Uq(f,x7))?`sh ${x7}`:void 0}function Sg(f){let J=Uq(f,yg);if(!w7(J))return;try{let Y=Ng(J,"utf8");return Y.trim().length>0?Y:void 0}catch{return}}function h7(f,J){let Y=f?oQ(f):{},z=bg(J)??Y.initScript,G=Sg(J)??Y.initPrompt;return{initScript:z&&z.trim().length>0?z:void 0,initPrompt:G&&G.trim().length>0?G:void 0}}function Ig(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 _J(f,J,Y={kind:"repo-init"}){let z=h7(f,J);return{initScript:z.initScript,firstMessage:Ig(Y,z)}}var x7,yg;var zG=C(()=>{gf();x7=Uq(".kobe","init.sh"),yg=Uq(".kobe","init-prompt.md")});import{existsSync as P7,readFileSync as Tg}from"fs";function v7(){Wz=null}function ug(){let f=z9();if(P7(f))return{canonical:f,found:f};let J=f.replace(/\.yaml$/,".yml");if(P7(J))return{canonical:f,found:J};return{canonical:f,found:null}}function Dq(){if(Wz)return Wz;let{canonical:f,found:J}=ug();if(!J)return Wz={path:f,exists:!1,doc:null,warnings:[]},Wz;let Y=[],z=null;try{let G=Tg(J,"utf8");z=Bun.YAML.parse(G)}catch(G){let Z=G instanceof Error?G.message:String(G);Y.push(`could not read/parse ${J}: ${Z}`)}return Wz={path:f,exists:!0,doc:z,warnings:Y},Wz}var Wz=null;var uB=C(()=>{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 mg(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 Z=new Set;for(let H of z){let B=wg[H];if(!B)return{error:`"${f}": unknown modifier "${H}" (use ctrl / cmd / alt / shift)`};Z.add(B)}if(G=hg[G]??G,Z.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=vg.filter((H)=>Z.has(H)).join("+"),Q=q?`${q}+${G}`:G;if(G.length>1&&!Pg.has(G))return{chord:Q,warning:`"${f}": unrecognized key name "${G}" \u2014 the chord may never fire`};return{chord:Q}}function Lq(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function cg(f){if(f==="darwin")return["darwin","macos","mac"];if(f==="win32")return["win32","windows"];return[f]}function ng(f){if(!Lq(f))return null;let J=f.bindings;if(Lq(J))return J;return f}function Mq(f,J,Y){let z=[];if(f===null||f===void 0)return{entries:[],warnings:z};if(!Lq(f))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let G=new Map,Z=[];if(f.bindings!==void 0)if(Lq(f.bindings))Z.push(f.bindings);else z.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let q of cg(J)){let Q=f[q];if(Q===void 0)continue;let H=ng(Q);if(H)Z.push(H);else z.push(`\`${q}:\` must be a mapping (or contain a \`bindings:\` mapping)`)}for(let q of Z)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=mg(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 dg(f,J){return f===J||f==="global"||J==="global"}function m7(f,J){let Y=[],z=[];for(let G of J){let Z=f.find((j)=>j.id===G.id);if(!Z){Y.push(`${G.id}: unknown binding id (press F1 in kobe for the full list)`);continue}let q=EB[G.id];if(q){Y.push(`${G.id}: not customizable \u2014 ${q}`);continue}if(Z.keys.length===0){Y.push(`${G.id}: not customizable \u2014 the key is handled outside the keymap (doc-only row)`);continue}let Q=Eg[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&&xg.has(Z.scope))return Y.push(`${G.id}: "${j}" dropped \u2014 a bare character on a ${Z.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=Z.keys,V=Z;if(V.keys=H,Z.hint)if(H.length===0)V.hint=void 0;else Z.hint.keys=H.join("/");z.push({id:G.id,keys:H,defaultKeys:B})}for(let G of z)for(let Z 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(Z))continue;if(!dg(q.scope,Q.scope))continue;Y.push(`${G.id}: "${Z}" also fires ${Q.id} (${Q.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:z,warnings:Y}}var EB,Eg,xg,wg,hg,Pg,vg;var Fq=C(()=>{EB={"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)"};Eg={"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")},xg=new Set(["global","workspace","terminal"]),wg={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},hg={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},Pg=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}`)]),vg=["ctrl","cmd","alt","shift"]});function ZG(f){return f in c7}function Uz(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 Z;if(z.length===1)Z=G.has("shift")?z.toUpperCase():z;else{let H=lg[z];if(!H)return{error:`"${f}": tmux can't bind the key "${z}"`};Z=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+Z}}function d7(){let f={};for(let[Y,z]of Object.entries(Kz)){let G=Uz(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=RY.map((Y)=>{let z=Uz(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 xB(f){let J=d7(),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!==RY.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=Uz(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 Kz)){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 Z=z.keys[0],q=Uz(Z,{allowBare:ZG(G)});if("error"in q){J.warnings.push(`${G}: ${q.error} \u2014 keeping the default`);continue}if(Z!==Kz[G])Y.add(G);J.binds[G]={chord:Z,key:q.key}}return J.overridden=Y,J}function wB(f){return f.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function i7(){Vz=null}function Oq(){if(Vz)return Vz;let f=Dq();if(!f.exists||f.doc===null)return Vz=d7(),Vz;let J=Mq(f.doc,process.platform,{chordOptsFor:wB}),Y=J.warnings.filter((G)=>G.startsWith("tmux.")),z=xB(J.entries);z.warnings=[...Y,...z.warnings];for(let G of z.warnings)console.warn(`[kobe/keybindings] ${G}`);return Vz=z,Vz}var ig,c7,n7,Kz,SJ="tmux.focus",RY,lg,Vz=null;var Aq=C(()=>{uB();Fq();ig={"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"},c7={"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"},n7=["F6","F7","F8","F9","F10","F11"],Kz={...ig,...c7};RY=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],lg={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 jZ(f,J){let Y=null;for(let G=0;G<24;G++){let Z=await az(f);if(Z){if(!J)return{pane:Z,ready:!0};let q=(await $z(Z)).trim();if(q.length>0&&q===Y)return{pane:Z,ready:!0};Y=q}await l7(250)}return{pane:await az(f)||await eH(f),ready:!1}}async function WZ(f,J){let Y=`kobe-api-${f.replace(/[^A-Za-z0-9]/g,"")}`;await v0(["set-buffer","-b",Y,"--",J]),await v0(["paste-buffer","-p","-d","-b",Y,"-t",f]),await l7(ag),await YZ(f,"Enter")}async function a7(f,J){let{pane:Y}=await jZ(f,!0);if(!Y)return;await WZ(Y,J.text)}var l7=(f)=>new Promise((J)=>setTimeout(J,f)),ag=150;var gq=C(()=>{Sf()});function $7(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 r7;var p7=C(()=>{qq();Qq();Hq();Bq();jq();Wq();Vq();r7={claude:oz,conductor:sz,nord:ez,opencode:fG,dracula:tz,tokyonight:YG,"osaka-jade":JG}});function $g(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,Z]=Y;return`#${z}${z}${G}${G}${Z}${Z}`.toLowerCase()}return`#${Y.slice(0,6)}`.toLowerCase()}function _7(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 $g(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 Z=f.theme[J];if(Z===void 0)return null;return G(Z,[J])}function Rq(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function Cq(f){if(!Rq(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(!Rq(Y))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in J&&J.defs!==void 0){if(!Rq(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(!Rq(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 Z=G;if(typeof Z.dark!=="string")return{ok:!1,reason:`theme.${z}.dark must be a string`};if(typeof Z.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 hB=()=>{};import{readFileSync as rg,readdirSync as pg}from"fs";import{join as o7}from"path";function XG(){return o7(ef(),"themes")}function VZ(){let f=XG(),J;try{J=pg(f)}catch{return[]}let Y=[];for(let z of J){if(!z.endsWith(".json"))continue;let G=o7(f,z),Z;try{let H=rg(G,"utf8");Z=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=Cq(Z);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 kq=C(()=>{lf();hB()});import{readFileSync as _g}from"fs";function sg(){try{let f=JSON.parse(_g(v1(),"utf8")),J=typeof f.activeTheme==="string"&&f.activeTheme?f.activeTheme:"claude",Y=typeof f.focusAccent==="string"&&og.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 tg(f){return VZ().find((Y)=>Y.name===f)?.theme??r7[f]??null}function VJ(f,...J){for(let Y of J){let z=_7(f,Y);if(z)return z}return null}function s7(f,J){let Y=VJ(f,"text"),z=VJ(f,"background"),G=VJ(f,"textMuted","text"),Z=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:Z,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 a1(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 e7(f){let J=a1({bg:f.statusBg,fg:f.statusFg}),Y=a1({bg:f.statusBg,fg:f.statusMutedFg}),z=a1({bg:f.statusBg,fg:f.windowFg});return[{key:"border",option:"pane-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:a1({fg:f.border})},{key:"active",option:"pane-active-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:a1({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:a1({bg:f.currentWindowBg,fg:f.currentWindowFg,attrs:["bold"]})},{key:"activity-window",option:"window-status-activity-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:a1({bg:f.statusBg,fg:f.activityFg})},{key:"bell-window",option:"window-status-bell-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:a1({bg:f.statusBg,fg:f.bellFg,attrs:["bold"]})},{key:"last-window",option:"window-status-last-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:a1({bg:f.statusBg,fg:f.statusFg})},{key:"message",option:"message-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:a1({bg:f.messageBg,fg:f.messageFg})},{key:"message-command",option:"message-command-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:a1({bg:f.messageBg,fg:f.messageCommandFg,attrs:["bold"]})},{key:"mode",option:"mode-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:a1({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 eg(f){let J=new Set(f.marker.split(",").map((Z)=>Z.trim()).filter(Boolean)),Y=[],z=[];for(let Z of e7(f.hexes))if(Z.value){if((f.current[Z.key]??"")!==Z.value)Y.push(["set-option",Z.setFlag,Z.option,Z.value]);z.push(Z.key)}else if(J.has(Z.key))Y.push(["set-option",Z.unsetFlag,Z.option]);let G=z.join(",");if(G!==f.marker)Y.push(G?["set-option","-g",PB,G]:["set-option","-gu",PB]);return Y}async function t7(f){let{code:J,stdout:Y}=await a0(f);return J===0?Y.trim():""}async function Dz(){try{let f=sg(),J=f.enabled?tg(f.themeName):null,Y=J?s7(J,f.focusAccentSlot):s7({theme:{}},f.focusAccentSlot),z=e7(Y),[G,...Z]=await Promise.all([t7(["show-options","-gqv",PB]),...z.map((H)=>t7(["show-options",H.showFlag,H.option]))]),q=Object.fromEntries(z.map((H,B)=>[H.key,Z[B]??""])),Q=eg({marker:G,current:q,hexes:Y});if(Q.length>0)await hf(Q)}catch{}}var PB="@kobe_border_theme",og;var Nq=C(()=>{lf();Sf();p7();kq();og=["primary","success","info"]});var yq={};jf(yq,{recordGen:()=>CY,isLatestGen:()=>G5,genAgeMs:()=>XR,coalesceLayoutWork:()=>qR,RESIZE_GUARD_MS:()=>ZR,LAYOUT_COALESCE_MS:()=>Y5});import{createHash as fR,randomUUID as JR}from"crypto";import{mkdirSync as YR,readFileSync as f5,renameSync as zR,writeFileSync as GR}from"fs";import{join as J5}from"path";function z5(){return J5(ef(),"layout-coord")}function vB(f,J){let Y=fR("sha1").update(f).digest("hex").slice(0,16);return J5(z5(),`${Y}.${J}`)}function CY(f,J){let Y=JR();try{YR(z5(),{recursive:!0});let z=vB(f,J),G=`${z}.${Y}.tmp`;GR(G,`${Date.now()}
58
- ${Y}`),zR(G,z)}catch{}return Y}function G5(f,J,Y){try{return f5(vB(f,J),"utf8").split(`
59
- `)[1]?.trim()===Y}catch{return!0}}function XR(f,J,Y=Date.now()){try{let z=Number.parseInt(f5(vB(f,J),"utf8").split(`
60
- `)[0]??"",10);return Number.isFinite(z)?Y-z:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function qR(f,J,Y,z=Y5){let G=CY(f,J);if(z>0)await new Promise((Z)=>setTimeout(Z,z));if(!G5(f,J,G))return;await Y()}var Y5=120,ZR=400;var qG=C(()=>{lf()});function HR(f){let J=[];for(let Y of f.split(`
61
- `)){let z=Y.trim();if(!z)continue;let[G,Z,q,Q,H]=z.split("\t");if(!G||!Z||!q)continue;let B=Number.parseInt(H?.trim()??"",10);J.push({windowId:G.trim(),paneId:Z.trim(),role:q.trim(),version:Q?.trim()??"",...Number.isFinite(B)?{paneWidth:B}:{}})}return J}function Z5(f,J){let Y=new Map;for(let G of f){let Z=Y.get(G.windowId)??[];Z.push(G),Y.set(G.windowId,Z)}let z=[];for(let G of Y.values()){let Z=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:Z&&(J.vendorChanged||Q?.version!==J.currentVersion);if(Q&&H)z.push({role:"ops",paneId:Q.paneId,claudePaneId:Z??null})}return z}async function mB(f){let{code:J,stdout:Y}=await a0(["list-panes","-s","-t",`=${f}`,"-F",QR]);if(J!==0)return null;return HR(Y)}function X5(f,J){let Y=Cf(),z=_f(),G=[];for(let Z of f){let q=Z.role==="tasks"?VY(Y,{initialTaskId:J.taskId}):mz({cwd:J.cwd,taskId:J.taskId,claudePaneId:Z.claudePaneId,cliInvocation:Y,vendor:J.vendor});G.push(["respawn-pane","-k","-t",Z.paneId,"-c",bf(J.cwd),R1(z+q)],["set-option","-p","-t",Z.paneId,"@kobe_role",Z.role],["set-option","-p","-t",Z.paneId,KJ,o0])}return G}async function q5(f,J,Y,z,G){let Z=await mB(f);if(!Z)return!1;let q=Z.filter((B)=>B.role==="claude");if(q.length===0)return!1;let Q=bf(J),H=[];for(let B of q){let V=rz(Y,G),j=R1(nz(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 hf(H),!0}async function Q5(){let f=await DY([lJ,eY,aJ]),J=Number.parseInt(f[lJ]??"",10),Y=Number.isFinite(J)&&J>0?tY(J):sY,z=BR({widthPct:$J(Number.parseInt(f[eY]??"",10)),heightPct:$J(Number.parseInt(f[aJ]??"",10))});return{tasksWidth:Y,rcArgs:z}}function BR(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 H5(){return(await Q5()).rcArgs}async function cB(f,J={}){let{tasksWidth:Y,rcArgs:z}=await Q5(),G=await mB(f);if(!G)return{rows:null,commands:[]};let Z=[];for(let q of G)if(q.role==="tasks"&&(J.force||q.paneWidth!==Y))Z.push(["resize-pane","-t",q.paneId,"-x",`${Y}`]);if(z.length>0){for(let q of G)if(q.role==="ops")Z.push(["resize-pane","-t",q.paneId,...z])}return{rows:G,commands:Z}}async function QG(f,J){CY(f,"resize");let{rows:Y,commands:z}=await cB(f);if(!Y)return;let G=[...z];if(J)G.push(...X5(Z5(Y,{currentVersion:o0,force:!1,vendorChanged:J.vendorChanged}),J));if(G.length>0)await hf(G)}async function B5(f){if(!await Bf(f))return;await QG(f)}async function KZ(f){let{code:J,stdout:Y}=await a0(["list-panes","-t",`=${f}`,"-F",`#{@kobe_role} #{pane_width} #{pane_height} #{window_width} #{window_height} #{window_zoomed_flag} #{${XJ}} #{${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),Z=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",lJ,`${tY(B)}`])}let H=z.find(([B])=>B?.trim()==="ops");if(H&&Number.isFinite(G)&&G>0&&Number.isFinite(Z)&&Z>0){let B=Number.parseInt(H[1]?.trim()??"",10),V=Number.parseInt(H[2]?.trim()??"",10),j=Number.isFinite(B)?$J(100*B/G):null,U=Number.isFinite(V)?$J(100*V/Z):null;if(j!==null)q.push(["set-option","-s",eY,`${j}`]);if(U!==null)q.push(["set-option","-s",aJ,`${U}`])}if(q.length>0)await hf(q)}function jR(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 j5(f){let{code:J,stdout:Y}=await a0(["list-panes","-t",`=${f}`,"-F",`#{@kobe_role} #{window_zoomed_flag} #{${XJ}} #{${A1}}`]);if(J!==0||!jR(Y))return;await KZ(f)}async function HG(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,Z=await mB(f);if(!Z)return;let q=X5(Z5(Z,{currentVersion:o0,force:!0}),{cwd:Y,taskId:z,vendor:G});if(q.length>0)await hf(q);await Dz()}var KJ="@kobe_pane_version",QR;var UZ=C(()=>{iJ();E1();e1();Sf();qJ();Nq();U1();zz();qG();QR=`#{window_id} #{pane_id} #{@kobe_role} #{${KJ}} #{pane_width}`});function Sq(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 Iq(f,J="kill-window"){return["bind-key","-n",f,"if-shell","-F","#{>:#{session_windows},1}",J,"display-message 'Cannot close the only ChatTab'"]}function Tq(f){return["bind-key","-n",f,"command-prompt","-I","#{window_name}","rename-window -- '%%'"]}function uq(f){return[["bind-key","-n",f,"command-prompt","-p",bq],["bind-key","T","command-prompt","-p",bq]]}function nB(f){return f.startsWith("C-")&&f.length===3?`^${f.slice(2)}`:f}function Eq(f){return`${[f.focusLeft?`${nB(f.focusLeft)} tasks`:null,f.detach?`${nB(f.detach)} detach`:null,f.newTab?`${nB(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 iB(f,J){let Y=_f(),z=await lX(),G=R1(J.opsCommand??Y+mz({cwd:J.cwd,taskId:J.taskId,claudePaneId:f,cliInvocation:J.inv,vendor:J.vendor})),{stdout:Z}=await fZ([["set-option","-p","-t",f,"@kobe_role","claude"],["set-window-option","-t",f,dB,"idle"],["split-window","-h","-b","-t",f,"-l",`${z}`,"-c",bf(J.cwd),"-P","-F","tasks=#{pane_id}",R1(Y+VY(J.inv,{initialTaskId:J.taskId}))],["split-window","-h","-t",f,"-l",`${100-wX}%`,"-c",bf(J.cwd),"-P","-F","ops=#{pane_id}",G],["split-window","-v","-l",`${100-oG}%`,"-c",bf(J.cwd),"-P","-F","shell=#{pane_id}"],["select-pane","-t",f]]),q=Object.fromEntries(Z.split(`
64
- `).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>Q.split("=",2)));if(await hf([...q.tasks?[["set-option","-p","-t",q.tasks,"@kobe_role",d1]]:[],...q.tasks?[["set-option","-p","-t",q.tasks,KJ,o0]]:[],...q.ops?[["set-option","-p","-t",q.ops,"@kobe_role",GJ]]:[],...q.ops?[["set-option","-p","-t",q.ops,KJ,o0]]:[],...q.shell?[["set-option","-p","-t",q.shell,"@kobe_role",ZJ]]:[]]),q.ops){let Q=await H5();if(Q.length>0)await v0(["resize-pane","-t",q.ops,...Q])}}async function W5(f,J){if(!await Bf(f))return;let Y=await C1(f,["@kobe_worktree","@kobe_task","@kobe_vendor",eG]),z=Y["@kobe_worktree"]||process.cwd(),G=Y["@kobe_task"]||void 0,Z=Y[eG]||void 0,q=J??Y["@kobe_vendor"];if(J)await WR(f,G,J);let Q=N1(q),H=rz(Q,q),B=Cf(),j=(await a0(["new-window","-t",`=${f}`,"-c",bf(z),"-P","-F","#{pane_id}",R1(nz(g1(H.argv),Z,z))])).stdout.trim();if(!j)return;if(H.sessionId)await LY(j,yJ,H.sessionId);await iB(j,{cwd:z,taskId:G,inv:B,vendor:q})}async function wq(f){if(!await Bf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),Z=`${_f()}${z.map(zf).join(" ")} settings`;await HJ(f,{cwd:bf(Y),command:Z,name:"settings",surface:!0})}async function hq(f){if(!await Bf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),Z=`${_f()}${z.map(zf).join(" ")} help-page`;await HJ(f,{cwd:bf(Y),command:Z,name:"help",surface:!0})}async function Pq(f,J){if(!await Bf(f))return;let z=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=Cf(),Z=_f(),q=J?` --repo ${zf(J)}`:"",Q=`${Z}${G.map(zf).join(" ")} new-task${q}`;await HJ(f,{cwd:bf(z),command:Q,name:"new task",surface:!0})}async function vq(f){if(!await Bf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),Z=`${_f()}${eW({cliInvocation:z})}`;await HJ(f,{cwd:bf(Y),command:Z,name:"update",surface:!0})}async function V5(f){if(!await Bf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),Z=`${_f()}${z.map(zf).join(" ")} quick-task --session ${zf(f)}`;await HJ(f,{cwd:bf(Y),command:Z,name:"quick task",surface:!0})}async function WR(f,J,Y){if(await lz(f,"@kobe_vendor",Y),!J)return;try{let{connectOrStartDaemon:z}=await Promise.resolve().then(() => (y1(),aB)),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 bq,dB="@kobe_tab_state",DZ="#{?#{==:#{@kobe_tab_state},running},\u25CF,#{?#{==:#{@kobe_tab_state},done},\u2713,#{?#{==:#{@kobe_tab_state},error},!,#{?#{==:#{@kobe_tab_state},unknown},?,\u25CB}}}} #I:#W",xq;var lB=C(()=>{iJ();E1();e1();Sf();qJ();K1();U1();zz();UZ();bq=`engine (${mf.join("/")}/\u2026)`;xq=DZ});function K5(){return cf()[mq]!==!1}var mq="zen.keepTasks";var $B=C(()=>{lY()});function KR(f){let J=[];for(let Y of f.split(`
65
- `)){let z=Y.trim();if(!z)continue;let[G,Z,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:Z?.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 UR(f){let J=f.find((z)=>z.role===Pz);if(!J)return{kind:"missing-engine"};let Y=f.filter((z)=>z.role===pG);if(Y.length+1>=IH)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 rB(f){return f.find((J)=>J.role===ZJ)??f.find((J)=>J.role==="")}function DR(f){return 100-($J(f??Number.NaN)??oG)}function LR(f){let J=Number.parseInt(f??"",10);return Number.isFinite(J)&&J>0?J:void 0}async function $1(f,J){let Y=J?.trim()||`=${f}`,{code:z,stdout:G}=await a0(["list-panes","-t",Y,"-F",VR]);return z===0?KR(G):null}async function MR(f){let{code:J,stdout:Y}=await a0(["list-windows","-t",`=${f}`,"-F","#{window_active}\t#{window_id}"]);if(J!==0)return"";for(let z of Y.split(`
66
- `)){let[G,Z]=z.split("\t");if(G?.trim()==="1"&&Z?.trim())return Z.trim()}return""}async function Lz(f,J){let{code:Y,stdout:z}=await a0(["show-options","-wqv","-t",f,J]);return Y===0?z.trim():""}async function pB(f,J,Y){await v0(["set-window-option","-t",f,J,Y])}async function kY(f,J){await v0(["set-window-option","-u","-t",f,J])}async function _B(f){let{code:J,stdout:Y}=await a0(["display-message","-p","-t",f,"#{pane_id}"]);return J===0&&Y.trim()===f}async function Tf(f,J){await v0(["display-message","-t",f,J])}async function cq(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 FR(f){let J=Cf(),Y=_f();return R1(Y+mz({cwd:f.cwd,taskId:f.taskId,claudePaneId:f.enginePaneId,cliInvocation:J,vendor:f.vendor}))}async function OR(f,J){return J?.trim()||await MR(f)}async function AR(f,J){let Y=await $1(f,J);if(!Y)return;let z=UR(Y);if(z.kind==="missing-engine"){await Tf(J,"kobe: no engine pane in this window");return}if(z.kind==="maxed"){await Tf(J,`kobe: workspace split limit is ${IH} panes`);return}let{cwd:G}=await cq(f),{code:Z,stdout:q}=await a0(["split-window",z.direction,"-t",z.targetPane,"-l","50%","-c",bf(G),"-P","-F","#{pane_id}",R1("true")]),Q=q.trim();if(Z!==0||!Q)return;await hf([["set-option","-p","-t",Q,"@kobe_role",pG],["select-pane","-t",Q]])}async function gR(f,J){let Y=await $1(f,J);if(!Y)return;let z=Y.filter((q)=>q.role===pG);if(z.length===0){await Tf(J,"kobe: no workspace split to close");return}let Z=z.find((q)=>q.active)??z[z.length-1];if(!Z)return;await v0(["kill-pane","-t",Z.paneId])}async function RR(f,J){let Y=await $1(f,J);if(!Y)return;let z=Y.filter((G)=>G.role===pG);if(z.length===0){await Tf(J,"kobe: no workspace splits to reset");return}await hf(z.map((G)=>["kill-pane","-t",G.paneId]))}async function U5(){let f=await DY([lJ]);return tY(LR(f[lJ])??sY)}async function CR(f){let{cwd:J,taskId:Y}=await cq(f),z=Cf(),G=_f();return{cwd:J,command:R1(G+VY(z,{initialTaskId:Y}))}}async function D5(f,J){let Y=await $1(f,J);if(!Y)return;let z=Y.find((M)=>M.role===GJ);if(z){await v0(["kill-pane","-t",z.paneId]);return}let G=rB(Y),Z=Y.find((M)=>M.role===Pz);if(!Z){await Tf(J,"kobe: cannot restore file pane in this layout");return}let{cwd:q,taskId:Q,vendor:H}=await cq(f),B=FR({cwd:q,taskId:Q,vendor:H,enginePaneId:Z.paneId}),V=G?["split-window","-v","-b","-t",G.paneId,"-l",`${await kR()}%`,"-c",bf(q),"-P","-F","#{pane_id}",B]:["split-window","-h","-t",Z.paneId,"-l",`${await oB()}%`,"-c",bf(q),"-P","-F","#{pane_id}",B],{code:j,stdout:U}=await a0(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,o0]];if(G?.role==="")O.push(["set-option","-p","-t",G.paneId,"@kobe_role",ZJ]);await hf(O)}async function kR(){let f=await DY([aJ]);return $J(Number.parseInt(f[aJ]??"",10))??oG}async function oB(){let f=await DY([eY]);return $J(Number.parseInt(f[eY]??"",10))??100-wX}async function L5(){let f=await DY([aJ]);return DR(Number.parseInt(f[aJ]??"",10))}async function NR(f){let{code:J,stdout:Y}=await a0(["list-windows","-t",`=${f}`,"-F","#{window_index}"]);if(J!==0)return new Set;return new Set(Y.split(`
67
- `).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)))}async function M5(f,J){let Y=await NR(f),z=_W(J);while(Y.has(z))z++;return z}async function F5(f){let J=_G(f);if(await Bf(J))return J;return await v0(["new-session","-d","-s",J,"-n","hidden-panes","-c",bf(process.cwd()),"while :; do sleep 3600; done"]),J}async function sB(f){let J=_G(f);if(!await Bf(J))return;let{code:Y,stdout:z}=await a0(["list-panes","-s","-t",`=${J}`,"-F","#{@kobe_role}"]);if(Y!==0)return;if(!z.split(`
68
- `).some((Z)=>{let q=Z.trim();return q===ZJ||q===d1}))await v0(["kill-session","-t",`=${J}`])}async function yR(f,J){await O5(f,J,XJ)}async function bR(f,J){await O5(f,J,A1)}async function O5(f,J,Y){let z=await Lz(J,Y);if(!z)return;if(await _B(z))await v0(["kill-pane","-t",z]);await kY(J,Y)}async function SR(f,J){await yR(f,J),await bR(f,J),await sB(f)}function A5(f){return f.find((J)=>J.role===Pz)??f[0]}async function tB(f,J,Y){let z=A5(Y);if(!z)return await Tf(J,"kobe: cannot restore Tasks pane in this layout"),!1;let G=await U5(),{cwd:Z,command:q}=await CR(f),{code:Q,stdout:H}=await a0(["split-window","-h","-b","-t",z.paneId,"-l",`${G}`,"-c",bf(Z),"-P","-F","#{pane_id}",q]),B=H.trim();if(Q!==0||!B)return!1;return await hf([["set-option","-p","-t",B,"@kobe_role",d1],["set-option","-p","-t",B,KJ,o0],["select-pane","-t",B]]),await kY(J,A1),await Tf(J,"kobe: Tasks pane restored"),!0}async function g5(f,J,Y){let z=await F5(f),G=await M5(z,J),{code:Z,stdout:q}=await a0(["break-pane","-d","-s",Y.paneId,"-t",`${z}:${G}`,"-P","-F","#{pane_id}"]),Q=q.trim()||Y.paneId;if(Z!==0||!Q){await Tf(J,"kobe: could not hide Tasks pane");return}await pB(J,A1,Q),await Tf(J,"kobe: Tasks pane hidden")}async function eB(f,J,Y){let z=await $1(f,J);if(!z)return;if(!await _B(Y)){await kY(J,A1);let q=z.find((Q)=>Q.role===d1);if(q){await v0(["select-pane","-t",q.paneId]);return}await tB(f,J,z);return}let G=A5(z);if(!G){await Tf(J,"kobe: cannot restore Tasks pane in this layout");return}if(await v0(["join-pane","-h","-b","-s",Y,"-t",G.paneId,"-l",`${await U5()}`])!==0){await Tf(J,"kobe: could not restore Tasks pane");return}await hf([["set-option","-p","-t",Y,"@kobe_role",d1],["set-option","-p","-t",Y,KJ,o0],["select-pane","-t",Y]]),await kY(J,A1),await sB(f),await Tf(J,"kobe: Tasks pane restored")}async function IR(f,J){let Y=await Lz(J,A1);if(Y){await eB(f,J,Y);return}let z=await $1(f,J);if(!z)return;let G=z.find((Z)=>Z.role===d1);if(G){await g5(f,J,G);return}await tB(f,J,z)}async function TR(f,J){let Y=await Lz(J,A1);if(Y){await eB(f,J,Y);return}let z=await $1(f,J);if(!z)return;let G=z.find((Z)=>Z.role===d1);if(G){await v0(["select-pane","-t",G.paneId]);return}await tB(f,J,z)}async function R5(f,J,Y){if(Y.role==="")await v0(["set-option","-p","-t",Y.paneId,"@kobe_role",ZJ]);let z=await F5(f),G=await M5(z,J),{code:Z,stdout:q}=await a0(["break-pane","-d","-s",Y.paneId,"-t",`${z}:${G}`,"-P","-F","#{pane_id}"]),Q=q.trim()||Y.paneId;if(Z!==0||!Q){await Tf(J,"kobe: could not hide terminal pane");return}await pB(J,XJ,Q),await Tf(J,"kobe: Terminal pane hidden")}async function C5(f,J,Y){let z=Y.find((V)=>V.role===GJ),G=Y.find((V)=>V.role===Pz);if(!z&&!G)return await Tf(J,"kobe: cannot restore terminal pane in this layout"),!1;let{cwd:Z}=await cq(f),q=z?["split-window","-v","-t",z.paneId,"-l",`${await L5()}%`,"-c",bf(Z),"-P","-F","#{pane_id}"]:["split-window","-h","-t",G?.paneId??"","-l",`${await oB()}%`,"-c",bf(Z),"-P","-F","#{pane_id}"],{code:Q,stdout:H}=await a0(q),B=H.trim();if(Q!==0||!B)return!1;return await v0(["set-option","-p","-t",B,"@kobe_role",ZJ]),await kY(J,XJ),await Tf(J,"kobe: Terminal pane restored"),!0}async function k5(f,J,Y){let z=await $1(f,J);if(!z)return;if(!await _B(Y)){await kY(J,XJ),await C5(f,J,z);return}let G=z.find((B)=>B.role===GJ),Z=z.find((B)=>B.role===Pz);if(!G&&!Z){await Tf(J,"kobe: cannot restore terminal pane in this layout");return}let q=G?["join-pane","-v","-s",Y,"-t",G.paneId,"-l",`${await L5()}%`]:["join-pane","-h","-s",Y,"-t",Z?.paneId??"","-l",`${await oB()}%`];if(await v0(q)!==0){await Tf(J,"kobe: could not restore terminal pane");return}await v0(["set-option","-p","-t",Y,"@kobe_role",ZJ]),await kY(J,XJ),await sB(f),z=await $1(f,J);let H=z?.find((B)=>B.paneId===Y);if(H)await v0(["select-pane","-t",H.paneId]);await Tf(J,"kobe: Terminal pane restored")}async function uR(f,J){let Y=await Lz(J,XJ);if(Y){await k5(f,J,Y);return}let z=await $1(f,J);if(!z)return;let G=rB(z);if(G){await R5(f,J,G);return}await C5(f,J,z)}async function ER(f,J){let Y=await Lz(J,vz);if(Y){await wR(f,J,Y);return}await xR(f,J)}async function xR(f,J){let Y=await $1(f,J);if(!Y)return;let z=[],G=Y.find((q)=>q.role===GJ);if(G)await v0(["kill-pane","-t",G.paneId]),z.push(GJ);let Z=rB(Y);if(Z)await R5(f,J,Z),z.push(ZJ);if(!K5()){let q=Y.find((Q)=>Q.role===d1);if(q)await g5(f,J,q),z.push(d1)}if(z.length===0){await Tf(J,"kobe: already focused \u2014 nothing to hide");return}await pB(J,vz,z.join(",")),await Tf(J,"kobe: Zen mode on")}async function wR(f,J,Y){let z=new Set(Y.split(",").map((G)=>G.trim()));if(z.has(d1)){let G=await Lz(J,A1);if(G)await eB(f,J,G)}if(z.has(GJ)){let G=await $1(f,J);if(G&&!G.some((Z)=>Z.role===GJ))await D5(f,J)}if(z.has(ZJ)){let G=await Lz(J,XJ);if(G)await k5(f,J,G)}await kY(J,vz),await Tf(J,"kobe: Zen mode off")}async function hR(f){let{code:J,stdout:Y}=await a0(["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 PR(f,J){if(await hR(f)<=1){await Tf(J,"Cannot close the only ChatTab");return}await SR(f,J),await v0(["kill-window","-t",J])}async function nq(f,J,Y={}){if(!await Bf(f))return;let z=await OR(f,Y.windowId);if(!z)return;switch(J){case"workspace-split":await AR(f,z);return;case"workspace-close":await gR(f,z);return;case"workspace-reset":await RR(f,z);return;case"tasks-toggle":await IR(f,z);return;case"tasks-restore":await TR(f,z);return;case"ops-toggle":await D5(f,z);return;case"terminal-toggle":await uR(f,z);return;case"zen-toggle":await ER(f,z);return;case"chat-tab-close":await PR(f,z);return}}var VR="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var fj=C(()=>{iJ();e1();$B();Sf();qJ();U1();zz();UZ()});var r1={};jf(r1,{tmuxWindowSizeArgsForClient:()=>zj,tmuxSessionName:()=>Mf,tmuxInitialSizeArgs:()=>y5,tmuxInitialClientSize:()=>Yj,tmuxAvailable:()=>NJ,switchClientBeforeKill:()=>bJ,sessionExists:()=>Bf,selectTasksPane:()=>aR,runLayoutAction:()=>nq,resyncWindowToClient:()=>cR,refreshKobeWorkspacePanes:()=>HG,quickCreate:()=>V5,prepareWindowForSwitch:()=>iq,prepareWindowForAttach:()=>dq,parseTmuxClientRows:()=>b5,parseObservedSession:()=>T5,openUpdateTab:()=>vq,openSettingsTab:()=>wq,openNewTaskTab:()=>Pq,openHelpTab:()=>hq,newChatTab:()=>W5,kobeStatusRight:()=>Eq,killSession:()=>i1,healSessionLayout:()=>B5,focusBindCommand:()=>I5,ensureSession:()=>yY,currentSessionName:()=>k1,clientsWithConflictingSize:()=>S5,chatTabSwitchBindings:()=>Sq,chatTabRenameBinding:()=>Tq,chatTabCloseBinding:()=>Iq,chatTabChooseEngineBindings:()=>uq,captureGlobalLayoutOnDrag:()=>j5,captureGlobalLayout:()=>KZ,attachArgv:()=>iz,PANE_VERSION_OPTION:()=>KJ,CHAT_TAB_STATUS_FORMAT:()=>DZ,CHAT_TAB_STATUS_CURRENT_FORMAT:()=>xq,CHAT_TAB_STATE_OPTION:()=>dB,CHAT_TAB_ENGINE_PROMPT:()=>bq});function y5(f=process.stdout,J=process.env){let Y=Yj(f,J);return Y?["-x",`${Y.columns}`,"-y",`${Y.rows}`]:[]}function Yj(f=process.stdout,J=process.env){let Y=NY(f.columns)??NY(J.COLUMNS),z=NY(f.rows)??NY(J.LINES);return Y&&z?{columns:Y,rows:z}:null}function NY(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 b5(f){let J=[];for(let Y of f.split(`
70
- `)){let[z,G,Z,q,Q]=Y.split("\t"),H=NY(Z?.trim()),B=NY(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 S5(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 zj(f,J){let Y=Math.max(1,f.rows-(J.status?.trim()==="on"?1:0));return["-x",`${f.columns}`,"-y",`${Y}`]}async function Gj(f,J,Y={}){if(!J)return;let{code:z,stdout:G}=await a0(["list-clients","-t",`=${f}`,"-F",vR]);if(z!==0)return;let Z=S5(b5(G),f,J,Y),q=[];if(Y.currentClientName)q.push(["refresh-client","-f","!ignore-size","-t",Y.currentClientName]);for(let Q of Z)q.push(["refresh-client","-f","ignore-size","-t",Q]);if(q.length>0)await hf(q)}async function dq(f){CY(f,"resize");let J=Yj();await Gj(f,J);let Y=J?["-x",`${J.columns}`,"-y",`${J.rows}`]:[];if(Y.length>0)await v0(["resize-window","-t",`=${f}`,...Y]);await QG(f)}async function mR(){let{code:f,stdout:J}=await a0(["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,Z]=J.trim().split("\t"),q=NY(z),Q=NY(G),H=q&&Q?{columns:q,rows:Q}:null;return{sizeArgs:H?zj(H,{status:Z}):[],clientSize:H,clientName:Y?.trim()||void 0}}async function iq(f){CY(f,"resize");let J=await mR();await Gj(f,J.clientSize,{currentClientName:J.clientName});let Y=J.sizeArgs;if(Y.length>0)await v0(["resize-window","-t",`=${f}`,...Y]);await QG(f)}async function cR(f,J){if(!J.size)return;CY(f,"resize"),await Gj(f,J.size,{currentClientName:J.clientName});let Y=zj(J.size,{status:J.status}),{commands:z}=await cB(f,{force:!0});await hf([["resize-window","-t",`=${f}`,...Y],...z])}function I5(f,J,Y){let z=`#{?window_zoomed_flag,1,#{?${nR[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 yY(f){let J=Jj.get(f.name);if(J)return J;let Y=lR(f);Jj.set(f.name,Y);try{return await Y}finally{Jj.delete(f.name)}}function T5(f){let J="",Y="",z=!1,G=new Set;for(let Z of f.split(`
71
- `)){let[q,Q,H,B,V]=Z.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 iR(f){if(!await Bf(f))return null;let{code:J,stdout:Y}=await a0(["list-panes","-s","-t",`=${f}`,"-F",dR]);if(J!==0)return{worktree:"",vendor:"",claudePaneAlive:!1,windowCount:0};return T5(Y)}async function lR(f){let J=f.launchInit,Y=await iR(f.name),z=$7(Y,{cwd:f.cwd,vendor:f.vendor,hasEngineCommand:f.command.length>0}),G=x9(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 q5(f.name,f.cwd,f.command,G,f.vendor)){if(f.vendor)await lz(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 i1(f.name);let Z=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=zq(Yq(q.argv,f.vendor,H),f.vendor,B),j=nz(g1(V),G,f.cwd),L=(await a0(["new-session","-d","-s",f.name,"-c",bf(f.cwd),...y5(),"-P","-F","#{pane_id}",sW(j,{initScript:G?void 0:J?.initScript,markerPath:!G&&J?.initScript?G9(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 LY(L,yJ,q.sessionId);await hf([...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,eG,G]]:[]]),await iB(L,{cwd:f.cwd,taskId:f.taskId,opsCommand:f.opsCommand,inv:Z,vendor:f.vendor});let O=_f(),M=Z.map(zf).join(" "),g=`${O}${M} new-chattab --session '#{session_name}'`,I=`${g} --vendor '%%'`,a=`run-shell ${zf(I)}`,N=`${O}${M} focus-tasks --session '#{session_name}' --window '#{window_id}'`,A=`run-shell ${zf(N)}`,R=(H0)=>`${O}${M} layout --session '#{session_name}' --window '#{window_id}' --action ${H0}`,S=R("tasks-restore"),_=`run-shell ${zf(S)}`,z0=R("chat-tab-close"),e=`run-shell ${zf(z0)}`,Y0=`${O}${M} heal-layout --session '#{session_name}'`,T=`run-shell -b ${zf(Y0)}`,Q0=`${O}${M} resync-window --session '#{session_name}' --client '#{client_name}' --cols '#{client_width}' --rows '#{client_height}' --status '#{status}'`,t=`run-shell -b ${zf(Q0)}`,V0=`${O}${M} capture-layout --session '#{session_name}'`,C0=`run-shell -b ${zf(V0)}`,$=fV({tmuxSocket:QJ}),x=Oq(),f0=n7.map((H0)=>["unbind-key","-n",H0]);if(x.overridden.has(SJ))for(let H0 of RY){let k0=Uz(H0);if("key"in k0)f0.push(["unbind-key","-n",k0.key])}for(let H0 of x.overridden){if(H0===SJ)continue;let k0=Kz[H0],x0=ZG(H0),y0=Uz(k0,{allowBare:x0});if("key"in y0)f0.push(x0?["unbind-key",y0.key]:["unbind-key","-n",y0.key])}let u=["-L","-D","-U","-R"],G0=x.focus.flatMap((H0,k0)=>{let x0=u[k0],y0=x0==="-L"?_:void 0;return H0&&x0?[I5(H0.key,x0,y0)]:[]}),w=x.binds,n=(H0,k0)=>{let x0=w[H0];return x0?[["bind-key",x0.key,"run-shell",R(k0)]]:[]},q0=(...H0)=>{let k0=H0.map((x0)=>w[x0]?.chord).filter((x0)=>!!x0);return k0.length>0?k0.join("/"):null};await hf([["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",DZ],["set-option","-g","window-status-current-format",xq],["set-option","-g","status-right",Eq({focusLeft:x.focus[0]?.key??null,detach:w["tmux.detach"]?.key??null,newTab:w["tmux.tab.new"]?.key??null,layoutSplits:q0("tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"),layoutPanes:q0("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",t],["set-hook","-g","window-layout-changed",C0],...f0,...w["tmux.detach"]?[["bind-key","-n",w["tmux.detach"].key,"if-shell","-F",`#{?#{${A1}},1,#{==:#{@kobe_role},tasks}}`,"detach-client",A]]:[],...G0,...w["tmux.tab.new"]?[["bind-key","-n",w["tmux.tab.new"].key,"run-shell",g]]:[],...w["tmux.tab.chooseEngine"]?uq(w["tmux.tab.chooseEngine"].key).map((H0)=>[...H0,a]):[],...w["tmux.tab.prev"]&&w["tmux.tab.next"]?Sq(w["tmux.tab.prev"].key,w["tmux.tab.next"].key):w["tmux.tab.prev"]?[["bind-key","-n",w["tmux.tab.prev"].key,"previous-window"]]:w["tmux.tab.next"]?[["bind-key","-n",w["tmux.tab.next"].key,"next-window"]]:[],...w["tmux.tab.close"]?[Iq(w["tmux.tab.close"].key,e)]:[],...w["tmux.tab.rename"]?[Tq(w["tmux.tab.rename"].key)]:[],...n("tmux.layout.workspaceSplit","workspace-split"),...n("tmux.layout.workspaceClose","workspace-close"),...n("tmux.layout.workspaceReset","workspace-reset"),...n("tmux.layout.tasksToggle","tasks-toggle"),...n("tmux.layout.opsToggle","ops-toggle"),...n("tmux.layout.terminalToggle","terminal-toggle"),...n("tmux.layout.zenToggle","zen-toggle"),["bind-key","f","run-shell",`${O}${M} quick-create --session '#{session_name}'`],["bind-key","u","display-popup","-E",$]]),await Dz(),await v0(["select-pane","-t",L]);let W0=J?.firstMessage;if(W0)a7(f.name,W0).catch((H0)=>console.error("[kobe tmux] first message delivery failed:",H0));return!0}async function N5(f,J,Y){let z=Y?.trim()||`=${f}`,{code:G,stdout:Z}=await a0(["list-panes","-t",z,"-F","#{pane_id}\t#{@kobe_role}"]);if(G!==0)return"";for(let q of Z.split(`
72
- `)){let[Q,H]=q.split("\t");if(Q?.trim()&&H?.trim()===J)return Q.trim()}return""}async function aR(f,J={}){if(!await Bf(f))return"";let Y=await N5(f,"tasks",J.windowId);if(!Y)await nq(f,"tasks-restore",{windowId:J.windowId}),Y=await N5(f,"tasks",J.windowId);if(!Y)return"";return await v0(["select-pane","-t",Y]),Y}var vR="#{client_name}\t#{client_session}\t#{client_width}\t#{client_height}\t#{client_flags}",nR,Jj,dR="#{window_id}\t#{window_active}\t#{@kobe_role}\t#{@kobe_worktree}\t#{@kobe_vendor}";var J1=C(()=>{iJ();E1();lf();e1();Sf();Aq();gq();qJ();Nq();lB();zz();fj();qG();UZ();Sf();lB();UZ();fj();nR={"-L":"pane_at_left","-D":"pane_at_bottom","-U":"pane_at_top","-R":"pane_at_right"};Jj=new Map});async function $R(f,J){let{task:Y}=await f.request("task.get",{taskId:J});return Y}async function Zj(f,J){let Y=await $R(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 u5(f,J){let{task:Y,worktreePath:z}=await Zj(f,J),G=Mf(J);if(!await Bf(G)){let Z=_J(Y.repo??"",z,{kind:"repo-init"});if(!await yY({name:G,cwd:z,command:N1(Y.vendor,Y.modelEffort),taskId:J,vendor:Y.vendor,launchInit:Z}))throw Error(`failed to start tmux session for ${J}`)}return{session:G,worktreePath:z}}function rR(f){return xX(f,{bareSafe:!0})}async function E5(f,J){let{task:Y,worktreePath:z}=await Zj(f,J),G=Y.kind==="main"?void 0:J,Z=Y.kind==="main"?J:void 0,q=[...zq(Yq(N1(Y.vendor,Y.modelEffort),Y.vendor,G),Y.vendor,Z)],Q=_J(Y.repo??"",z,{kind:"none"}),H=rR(q),B=Q.initScript?.trim()?`${Q.initScript}
73
- ${H}`:H,V=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:z,command:[V,"-ilc",B]}}async function x5(f,J){let{worktreePath:Y}=await Zj(f,J),z=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:Y,command:[z,"-il"]}}async function w5(f){let J=Mf(f);await bJ(J).catch(()=>{}),await i1(J).catch(()=>{})}var h5=C(()=>{E1();bH();zG();Sf();J1()});import{existsSync as pR}from"fs";import{join as P5,normalize as c5}from"path";function _R(f){let J=null,Y=null,z=new TextEncoder,G=new ReadableStream({start(Z){J=f((Q,H)=>{try{Z.enqueue(z.encode(`event: ${Q}
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}
74
75
  data: ${JSON.stringify(H)}
75
76
 
76
- `))}catch{}}),Y=setInterval(()=>{try{Z.enqueue(z.encode(`: ping
77
+ `))}catch{}}),Y=setInterval(()=>{try{X.enqueue(z.encode(`: ping
77
78
 
78
- `))}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 oR(f,J,Y){try{let{name:z,payload:G}=await f.json();if(!z)return Response.json({error:"missing rpc name"},{status:400});if(!u7.has(z))return Response.json({error:`rpc ${z} is not exposed to the web UI`},{status:403});let Z=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:Z})}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 sR(){try{let J=(await dJ()).map((Y)=>({id:Y,label:qz(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 tR(){return Response.json({api:Qz()})}function eR(){return Response.json({projects:m1()})}function bY(f,J=""){return typeof f==="string"?f:J}function f2(f,J){return typeof f==="boolean"?f:J}function a5(f){let J=f.customEngineIds;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string"&&l5.test(Y)&&!Q1(Y))}function J2(f){return f.split(/[-_]+/).filter(Boolean).map((J)=>`${J.slice(0,1).toUpperCase()}${J.slice(1)}`).join(" ")}function Y2(f,J){return bY(f[WJ(J)]).trim()||qz(J)}function z2(f,J){return bY(f[jJ(J)]).trim()||QZ(J).join(" ")}function $5(){let f=cf(),J=a5(f),Y=[...vY,...J],z=bY(f.lastSelectedVendor,"claude"),G=bY(f.focusAccent,"primary");return Response.json({activeTheme:bY(f.activeTheme,"claude"),transparentBackground:f2(f.transparentBackground,!1),focusAccent:i5.includes(G)?G:"primary",notificationsToast:f["notifications.toast.enabled"]!==!1,notificationsSound:f["notifications.sound.enabled"]!==!1,settingsSurface:jz(f[pJ]??Bz),editorKind:pz(f[rJ]??Gq),editorCustomCommand:bY(f[AY]),remoteProjects:f["experimental.remoteProjects"]===!0,autoStatus:f[Zz]===!0,dispatcher:f[Xz]===!0,defaultEngine:z,engines:Y.map((Z)=>({id:Z,label:Y2(f,Z),command:z2(f,Z),isBuiltin:Q1(Z),isCustom:!Q1(Z),isDefault:Z===z}))})}function LZ(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 G2(f){try{let J=await f.json(),Y={};if(LZ(Y,"activeTheme",J.activeTheme),BG(Y,"transparentBackground",J.transparentBackground),i5.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[pJ]=J.settingsSurface;if(Hz.includes(J.editorKind))Y[rJ]=J.editorKind;LZ(Y,AY,J.editorCustomCommand),BG(Y,"experimental.remoteProjects",J.remoteProjects),BG(Y,Zz,J.autoStatus),BG(Y,Xz,J.dispatcher),LZ(Y,"lastSelectedVendor",J.defaultEngine);let z=cf(),G=a5(z),Z=new Set([...vY,...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"||!Z.has(H.id))continue;LZ(Y,jJ(H.id),H.command),LZ(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(!l5.test(H)||Q1(H)||Z.has(H))return Response.json({error:"invalid or duplicate engine id"},{status:400});Y.customEngineIds=[...G,H],Y[jJ(H)]=bY(Q.command).trim();let B=bY(Q.label).trim();Y[WJ(H)]=B&&B!==H?B:J2(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)iY(Y);return $5()}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:400})}}async function Z2(f,J){try{let{taskId:Y}=await f.json();if(!Y)return Response.json({error:"missing taskId"},{status:400});return Response.json(await u5(J,Y))}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function v5(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 r5(){return Response.json({review:kf(lq.review)??null,pr:kf(lq.pr)??null})}async function X2(f){try{let J=await f.json();if(typeof J.review==="string")af(lq.review,J.review);if(typeof J.pr==="string")af(lq.pr,J.pr);return r5()}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:400})}}async function q2(f,J){let z=c5(P5(J,f==="/"?"/index.html":f));if(!z.startsWith(J))return new Response("forbidden",{status:403});let G=Bun.file(pR(z)?z:P5(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 Q2(f){let{link:J,sseSends:Y,staticDir:z}=f,G=f.tearDownSession??((Z)=>void w5(Z));return async function(q){let Q=new URL(q.url);if(Q.pathname===d5)return new Response(n5);if(!S7(q.headers.get("origin"),{allowedHost:f.allowedHost}))return new Response("forbidden: cross-origin request rejected",{status:403});if(Q.pathname==="/events")return _R((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 oR(q,J,G);if(Q.pathname==="/api/session"&&q.method==="POST")return Z2(q,J);if(Q.pathname==="/api/engine-spec"&&q.method==="GET")return v5(Q,J,E5);if(Q.pathname==="/api/terminal-spec"&&q.method==="GET")return v5(Q,J,x5);if(Q.pathname==="/api/engines"&&q.method==="GET")return sR();if(Q.pathname==="/api/cli-invocation"&&q.method==="GET")return tR();if(Q.pathname==="/api/projects"&&q.method==="GET")return eR();if(Q.pathname==="/api/settings"&&q.method==="GET")return $5();if(Q.pathname==="/api/settings"&&q.method==="PATCH")return G2(q);if(Q.pathname==="/api/quick-prompts"&&q.method==="GET")return r5();if(Q.pathname==="/api/quick-prompts"&&q.method==="PUT")return X2(q);let H=await L7(q,Q);if(H)return H;let B=await q7(q,Q);if(B)return B;let V=await j7(q,Q);if(V)return V;let j=await N7(q,Q,J);if(j)return j;let U=await g7(q,Q);if(U)return U;let L=F7(q,Q);if(L)return L;if(z)return q2(Q.pathname,z);return new Response("not found",{status:404})}}function Mz(f,J){let Y=f.snapshot().find((z)=>z.channel===J);return Y?Y.payload:null}function Xj(f){return f.length>1?f.replace(/\/+$/,""):f}function H2(f,J){let Y=Xj(J),z=new Set([J]);for(let G of f){let Z=Xj(G.repo),q=Xj(G.worktreePath);if(Z===Y||q===Y){if(G.repo)z.add(G.repo);if(G.worktreePath)z.add(G.worktreePath)}}return[...z]}function p5(f){let J=XZ();return{async request(Y,z){return await ZZ(J,Y,z,f.ctx(0))},snapshot(){let Y=f.orch.listTasks().map(zJ),z={},G=Mz(f.bus,"issue.snapshot");if(G)for(let Q of H2(Y,G.repoRoot))z[Q]={...G,repoRoot:Q};let Z=Mz(f.bus,"task.jobs"),q=Z?.phase==="running"?{[Z.taskId]:Z}:{};return{tasks:Y,activeTaskId:Mz(f.bus,"active-task")?.taskId??null,engineStates:f.activity.snapshotByTask(),update:Mz(f.bus,"update")?.info??null,jobs:q,worktreeChanges:Mz(f.bus,"worktree.changes")?.changes??{},issueSnapshots:z,deliver:Mz(f.bus,"session.deliver"),uiPrefs:Mz(f.bus,"ui-prefs"),connected:!0}}}}async function m5(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(`
79
- `).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function B2(f,J=d5){let Y;try{Y=(await(await fetch(`http://localhost:${f}${J}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Y!==n5)throw Error(`port ${f} is in use by a non-kobe service; refusing to replace it`);let z=await m5(f);for(let Z of z)try{process.kill(Z,"SIGTERM")}catch{}let G=Date.now()+2000;while(Date.now()<G){if((await m5(f)).length===0)return;await new Promise((Z)=>setTimeout(Z,100))}}async function _5(f){if(f.takeover!==!1)await B2(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=I7(z),Z=Q2({link:f.link,sseSends:J,staticDir:f.staticDir?c5(f.staticDir):void 0,allowedHost:G,onSseOpen:f.onSseOpen}),q=Bun.serve({port:f.port,hostname:z,idleTimeout:0,fetch:Z});return{port:q.port??f.port,hostname:z,close(){Y(),q.stop(!0)}}}var n5="kobe-web",d5="/__kobe_web",i5,l5,lq;var o5=C(()=>{oY();E1();UY();GZ();Jq();gf();lY();Zq();K1();Q7();W7();M7();O7();pX();rY();R7();T7();E7();h5();i5=["primary","success","info"],l5=/^[a-z][a-z0-9_-]{0,47}$/;lq={review:"boardPrompt.review",pr:"boardPrompt.pr"}});var s5={};jf(s5,{sameWorktreeChanges:()=>IJ,readWorktreeChanges:()=>W2,pickPushedChanges:()=>$q,parsePorcelain:()=>jG});import{spawnSync as j2}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)??aq}function W2(f){if(!f)return aq;try{let J=j2("git",["status","--porcelain=v1"],{cwd:f,encoding:"utf8",stdio:["ignore","pipe","pipe"],env:x1()});if(J.status!==0||!J.stdout)return aq;return jG(J.stdout)}catch{return aq}}function jG(f){let J=0,Y=0;for(let z of f.split(`
80
- `)){if(!z||z.startsWith("##"))continue;let G=z.charAt(0),Z=z.charAt(1);if(G==="D"||Z==="D")Y+=1;else J+=1}return{added:J,deleted:Y}}var aq;var WG=C(()=>{gY();aq={added:0,deleted:0}});async function D2(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 jG(Y.stdout)}function L2(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 t5{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=L2(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){If("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:V2,slowRetryMs:K2,minIntervalMs:U2},z=this.options.run??D2;eX(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 e5(f,J,Y=qj,z){if(Y<=0)return()=>{};let G=new t5(f,J,{hasSubscribers:z});G.tick();let Z=setInterval(()=>G.tick(),Y);return Z.unref?.(),()=>{clearInterval(Z),G.stop()}}var qj=2000,V2=4000,K2=60000,U2=1500;var fK=C(()=>{gY();qZ();gf();WG()});import{mkdir as JK,readFile as M2,unlink as Qj,writeFile as F2}from"fs/promises";import{createServer as O2}from"net";import{dirname as YK}from"path";import{StringDecoder as A2}from"string_decoder";function R2(){let f=process.env.KOBE_DAEMON_IDLE_GRACE_MS;if(f===void 0)return zK;let J=Number(f);return Number.isFinite(J)&&J>=0?J:zK}async function ZK(f,J={}){let Y=J.socketPath??CJ(J.homeDir),z=J.pidPath??cJ(J.homeDir),G=J.startedAt??new Date,Z=new Set,q=new Set,Q=1,H=new OB({clients:function*(){yield*Z,yield*q},idleGraceMs:R2(),onIdleStop:()=>void Y0().catch(($)=>If("daemon-idle-shutdown",$))}),B=new GB;B.onPublish(($)=>{GK(Z,{type:"event",name:$.channel,payload:$.payload})});let V=new gH(B),j=new sX(oX(J.homeDir));await JK(YK(Y),{recursive:!0}),await JK(YK(z),{recursive:!0}),await Qj(Y).catch(()=>{});let U=O2(($)=>{let x={id:Q++,connectedAt:new Date,socket:$,buffer:"",subscribed:!1,holdsLifetime:!1,channels:null};Z.add(x);let f0=new A2("utf8");$.on("data",(u)=>{x.buffer+=f0.write(u),C0(x)}),$.on("error",()=>{}),$.on("close",()=>{if(Z.delete(x),x.subscribed)MY("conn",`client #${x.id} (${x.holdsLifetime?"gui":"pane"}) disconnected \u2014 ${Z.size} client(s), ${H.guiCount()} gui left`);H.clientDisconnected(x.holdsLifetime)})}),L=f.subscribeTasks(($)=>{B.publish("task.snapshot",{tasks:$.map(zJ)})}),O=J.checkUpdate??xG,M=J.updatePollMs??g2,g=()=>{O().then(($)=>B.publish("update",{info:$})).catch(($)=>If("update-poller",$))},I=null;if(M>0)g(),I=setInterval(g,M),I.unref?.();let a=J.autoTitlePollMs??zB,N=vV(f,a,()=>H.hasSubscribers()),A=Y7(B,{statePath:CB(J.homeDir),debounceMs:J.uiPrefsDebounceMs??RB}),R=oV(B,{path:FB(J.homeDir),debounceMs:J.keybindingsDebounceMs??MB}),S=e5(f,B,J.worktreeChangesTickMs??qj,()=>H.hasSubscribers()),_=eV(f,J.prStatusPollMs??fq,()=>H.hasSubscribers()),z0=null,e={socketPath:Y,pidPath:z,startedAt:G,get webPort(){return z0?.port},clients:Z,async close(){if(H.markStopping(),L(),z0?.close(),z0=null,I)clearInterval(I);N(),_(),A(),R(),S(),V.close(),GK(Z,{type:"event",name:"daemon.stopping",payload:{}});for(let $ of Array.from(Z))$.socket.destroy();await new Promise(($)=>U.close(()=>$())),await Qj(Y).catch(()=>{}),await Qj(z).catch(()=>{})}};await new Promise(($,x)=>{let f0=U;f0.once("error",x),U.listen(Y,()=>{f0.removeListener("error",x),$()})}),await F2(z,`${process.pid}
81
- `,"utf8");async function Y0(){if(H.isStopping())return;H.markStopping(),await J.onStop?.(),setTimeout(()=>{e.close().catch(($)=>If("daemon-shutdown",$))},0).unref()}let T=XZ();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 $=p5({orch:f,bus:B,activity:V,ctx:Q0});z0=await _5({port:J.webPort,hostname:J.webHost,staticDir:J.webStaticDir,link:$,onEvent:(x)=>B.onPublish(x),onSseOpen:()=>{let x={subscribed:!0,holdsLifetime:!0};return q.add(x),H.guiAttached(),MY("conn",`web client subscribed \u2014 ${Z.size+q.size} client(s), ${H.guiCount()} gui`),()=>{q.delete(x),MY("conn",`web client disconnected \u2014 ${Z.size+q.size} client(s), ${H.guiCount()} gui left`),H.clientDisconnected(!0)}}}),MY("web",`daemon web transport listening on http://${z0.hostname}:${z0.port}`)}async function t($,x){if($.name==="subscribe"){let f0=HB($.payload),u=x.subscribed;x.subscribed=!0;let G0=f0.role==="gui"?"gui":"pane";x.holdsLifetime=G0==="gui",x.channels=OW(f0.channels);let w=!u;if(x.holdsLifetime)H.guiAttached();MY("conn",`client #${x.id} subscribed as ${G0}${x.channels?` [${[...x.channels].join(",")}]`:""} \u2014 ${Z.size} client(s), ${H.guiCount()} gui${w?" (collectors resume)":""}`);for(let n of B.snapshot()){if(x.channels&&!x.channels.has(n.channel))continue;MZ(x,{type:"event",name:n.channel,payload:n.payload})}if(!x.channels||x.channels.has("engine-state"))for(let n of V.currentNonIdle())MZ(x,{type:"event",name:"engine-state",payload:n});return{}}return ZZ(T,$.name,$.payload,Q0(x.id))}async function V0($,x){try{let f0=await t($,x);MZ(x,{type:"response",id:$.id,name:$.name,payload:f0})}catch(f0){MZ(x,{type:"response",id:$.id,name:$.name,error:QB(f0)})}}function C0($){let x=$.buffer.indexOf(`
82
- `);while(x!==-1){let f0=$.buffer.slice(0,x);if($.buffer=$.buffer.slice(x+1),f0.trim().length>0)try{let u=JSON.parse(f0);if(u.type!=="request")throw Error("daemon only accepts request frames from clients");V0(u,$)}catch(u){MZ($,{type:"response",id:"parse-error",error:{message:u instanceof Error?u.message:String(u)}})}x=$.buffer.indexOf(`
83
- `)}}return e}async function VG(f){try{let J=await M2(f,"utf8"),Y=Number(J.trim());return Number.isFinite(Y)?Y:null}catch{return null}}function MZ(f,J){f.socket.write(lG(J))}function GK(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??=lG(J),G.socket.write(z)}}var g2=21600000,zK=3000;var rq=C(()=>{U1();IW();mV();pX();DB();sV();tV();wz();f7();rY();z7();o5();fK();pX();DB()});import{unlink as XK}from"fs/promises";function C2(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&&C2(z),Z=G?"graceful":"absent",q=new n1(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{}Z="sigterm",V=!0}await new Promise((j)=>setTimeout(j,50))}try{process.kill(z,0),process.kill(z,"SIGKILL"),Z="sigkill",await new Promise((j)=>setTimeout(j,100))}catch{}}return await XK(f).catch(()=>{}),await XK(J).catch(()=>{}),{pid:Y,method:Z}}var pq=C(()=>{aG();rq()});var aB={};jf(aB,{testDaemonResponds:()=>_q,ensureDaemonReachable:()=>UG,connectOrStartDaemon:()=>UJ,connectIfRunning:()=>p1});import{spawn as k2}from"child_process";import{closeSync as N2,existsSync as y2,mkdirSync as b2,openSync as S2}from"fs";import{dirname as qK,resolve as Hj}from"path";import{fileURLToPath as I2}from"url";function E2(f,J,Y,z){let G="ignore",Z;try{b2(qK(z),{recursive:!0}),Z=S2(z,"a"),G=["ignore",Z,Z]}catch{G="ignore"}if(k2(f,[...J],{detached:!0,stdio:G,env:Y}).unref(),Z!==void 0)try{N2(Z)}catch{}}async function UG(){let f=CJ();if(await _q(f))return f;await KG(f,cJ()).catch(()=>{});let[J,...Y]=x2(T2);E2(J,Y,process.env,AX());let z=Date.now()+5000;while(Date.now()<z){if(await _q(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 UG(),J=new n1(f);return await J.connect(),J}async function p1(){let f=CJ();if(!await _q(f))return null;let J=new n1(f);return await J.connect(),J}async function _q(f,J=u2){let Y=new n1(f);try{await Y.connect()}catch{return Y.close(),!1}let z=Y.request("hello",{protocolVersion:c1}).then(()=>!0).catch(()=>!0),G,Z=new Promise((Q)=>{G=setTimeout(()=>Q(!1),J)}),q=await Promise.race([z,Z]);if(G)clearTimeout(G);return Y.close(),q}function x2(f){let J=I2(import.meta.url);if(J.startsWith("/$bunfs")||J.startsWith("B:\\~BUN"))return[process.execPath,...f];let Y=qK(J),z=[Hj(Y,"../cli/index.ts"),Hj(Y,"../../../kobe/src/cli/index.ts"),Hj(Y,"../cli/index.js")],G=z.find((Z)=>y2(Z));if(G)return[process.execPath,G,...f];throw Error(`kobe: could not locate kobe entry near ${Y}; checked ${z.join(", ")}`)}var T2,u2=3000;var y1=C(()=>{pq();wz();rY();aG();T2=["daemon","start"]});var jK={};jf(jK,{runExportSubcommand:()=>c2,renderExport:()=>BK});function w2(f){return{id:f.id,title:f.title,status:f.status,archived:String(f.archived),vendor:f.vendor??yf,branch:f.branch,repo:f.repo,worktreePath:f.worktreePath}}function Bj(f){process.stderr.write(`kobe export: ${f}
84
-
85
- ${HK}
86
- `),process.exit(2)}function h2(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)Bj("--format requires a value (json, csv, or table)");J=QK(G)}else if(z.startsWith("--format="))J=QK(z.slice(9));else Bj(`unexpected argument "${z}"`)}return J}function QK(f){if(f==="json"||f==="csv"||f==="table")return f;Bj(`unknown format "${f}" (expected json, csv, or table)`)}function P2(f){if(/[",\r\n]/.test(f))return`"${f.replace(/"/g,'""')}"`;return f}function v2(f){let J=[FZ.join(",")];for(let Y of f)J.push(FZ.map((z)=>P2(Y[z])).join(","));return J.join(`
87
- `)}function m2(f){let J={};for(let G of FZ)J[G]=Math.max(G.length,...f.map((Z)=>Z[G].length));let Y=(G)=>FZ.map((Z)=>G[Z].padEnd(J[Z])).join(" ").trimEnd(),z={};for(let G of FZ)z[G]=G;return[Y(z),...f.map(Y)].join(`
88
- `)}function BK(f,J){let Y=f.map(w2);if(J==="json")return JSON.stringify(Y,null,2);if(J==="csv")return v2(Y);return m2(Y)}async function c2(f){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(`${HK}
89
- `);return}let J=h2(f),{TaskIndexStore:Y}=await Promise.resolve().then(() => (PG(),JH)),z=new Y;await z.load();let G=z.list();if(G.length===0&&J==="table"){process.stdout.write(`no tasks
90
- `);return}process.stdout.write(`${BK(G,J)}
91
- `)}var HK,FZ;var WK=C(()=>{S1();HK=["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(`
92
- `),FZ=["id","title","status","archived","vendor","branch","repo","worktreePath"]});var UK={};jf(UK,{runRepoSubcommand:()=>l2});import{readFileSync as n2}from"fs";import{resolve as oq}from"path";function SY(f){process.stderr.write(`kobe repo: ${f}
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}
93
85
 
94
86
  ${KK}
95
- `),process.exit(2)}function VK(f){try{return n2(oq(process.cwd(),f),"utf8")}catch(J){SY(`cannot read ${f}: ${J instanceof Error?J.message:String(J)}`)}}function d2(f){let J={};for(let Y=0;Y<f.length;Y++){let z=f[Y],G=()=>{let Z=f[++Y];if(Z===void 0)SY(`${z} requires a value`);return Z};if(z==="--init-script")J.initScript=G();else if(z==="--init-script-file")J.initScript=VK(G());else if(z==="--init-prompt")J.initPrompt=G();else if(z==="--init-prompt-file")J.initPrompt=VK(G());else if(z.startsWith("-"))SY(`unknown flag "${z}"`);else if(J.path===void 0)J.path=z;else SY(`unexpected argument "${z}"`)}return J}function i2(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("-"))SY(`unknown flag "${G}"`);else if(J===void 0)J=G;else SY(`unexpected argument "${G}"`);if(!Y&&!z)Y=!0,z=!0;return{path:J,clearScript:Y,clearPrompt:z}}async function l2(f){let[J,...Y]=f;if(J===void 0||J==="--help"||J==="-h"||J==="help"){process.stdout.write(`${KK}
96
- `);return}let{getRepoInitOverride:z,setRepoInitOverride:G,resolveRepoRoot:Z}=await Promise.resolve().then(() => (gf(),ZY)),{existsSync:q}=await import("fs"),{join:Q}=await import("path");if(J==="show"){let[H]=Y.filter((L)=>!L.startsWith("-")),B=Z(oq(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?DG(V.initScript):"(unset)"}`),console.log(` override initPrompt: ${V.initPrompt?DG(V.initPrompt):"(unset)"}`);return}if(J==="set"){let H=d2(Y);if(H.initScript===void 0&&H.initPrompt===void 0)SY("set needs at least one of --init-script(-file) / --init-prompt(-file)");let B=Z(oq(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?DG(V.initScript):"(unset)"}`),console.log(` initPrompt: ${V.initPrompt?DG(V.initPrompt):"(unset)"}`);return}if(J==="unset"){let{path:H,clearScript:B,clearPrompt:V}=i2(Y),j=Z(oq(process.cwd(),H??".")),U=G(j,{...B?{initScript:""}:{},...V?{initPrompt:""}:{}});console.log(`cleared override for ${j}`),console.log(` initScript: ${U.initScript?DG(U.initScript):"(unset)"}`),console.log(` initPrompt: ${U.initPrompt?DG(U.initPrompt):"(unset)"}`);return}SY(`unknown verb "${J}"`)}function DG(f){let J=f.replace(/\s+/g," ").trim();return J.length>60?`"${J.slice(0,57)}\u2026"`:`"${J}"`}var KK;var DK=C(()=>{KK=["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(`
97
- `)});import{spawnSync as a2}from"child_process";function p2(f){let[J,Y]=f.split("/");if(!J||!Y)throw Error(`invalid GitHub repository slug: ${f}`);return{owner:J,name:Y}}function LK(f,J){let Y=f.trim();if(!Y)throw Error(`${J} is required`);return Y}function MK(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 FK(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 Z=typeof G.stdout==="string"?G.stdout:String(G.stdout??""),q=typeof G.stderr==="string"?G.stderr:String(G.stderr??""),Q;try{Q=JSON.parse(Z)}catch{throw Error(`failed to parse gh response: ${MK(q,void 0)}`)}if((G.status??0)!==0||Q.errors?.length)throw Error(MK(q,Q.errors));if(!Q.data)throw Error("GitHub CLI response did not include data");return Q.data}function _2(f){return`${f}
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}
98
99
 
99
100
  ---
100
- Submitted from kobe ${o0}.`}function LG(f,J={}){let Y=LK(f.title,"feedback title"),z=_2(LK(f.body,"feedback body")),G=(J.repoSlug??nY)();if(!G)throw Error("package repository is not a GitHub repository");let{owner:Z,name:q}=p2(G),Q=f.categorySlug?.trim()||jj,H={spawn:J.spawn??a2},V=FK($2,{owner:Z,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=FK(r2,{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 jj="feedback",$2=`
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
102
  query($owner: String!, $name: String!) {
102
103
  repository(owner: $owner, name: $name) {
103
104
  id
@@ -110,7 +111,7 @@ query($owner: String!, $name: String!) {
110
111
  }
111
112
  }
112
113
  }
113
- `,r2=`
114
+ `,e2=`
114
115
  mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!) {
115
116
  createDiscussion(input: {
116
117
  repositoryId: $repositoryId,
@@ -124,74 +125,74 @@ mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!)
124
125
  }
125
126
  }
126
127
  }
127
- `;var sq=C(()=>{U1()});async function OK(f={}){let J=f.mode==="require-running"?await p1():await UJ();if(!J)return null;return{client:J,close:()=>J.close()}}var AK=C(()=>{y1()});var uK={};jf(uK,{verbSchema:()=>Dj,verbHelp:()=>SK,validateAgainstSpec:()=>Kj,schemaIndex:()=>yK,runApiSubcommand:()=>OC,parseFlags:()=>Vj,parseAgentsSpec:()=>kK,invokeVerb:()=>FC,fullSchema:()=>bK,findVerb:()=>OZ,deliverPrompt:()=>IK,defaultApiRuntime:()=>Lj,apiUsage:()=>tq,VerbArgs:()=>Uj,VERB_GROUPS:()=>FG,VERBS:()=>OG,FANOUT_CAP:()=>MG,ApiError:()=>Ff,API_VERBS:()=>t2,API_SCHEMA_VERSION:()=>Wj});import{resolve as gK}from"path";function CK(f){for(let[J,Y]of Object.entries(FG))if(Y.includes(f))return J;return"other"}async function s2(f){let J=f.args.str("verb");if(J){let z=OZ(J);if(!z)throw new Ff(`unknown verb: ${J}`,"BAD_VERB");return Dj(z)}let Y=f.args.str("group");if(Y)return fC(Y);if(f.args.bool("all"))return bK();return yK()}function OZ(f){let J=eq[f]??f;return OG.find((Y)=>Y.name===J)}function Vj(f,J=new Set){let Y=new Map,z=!1,G=!1;for(let Z=0;Z<f.length;Z++){let q=f[Z];if(!q.startsWith("--")&&q!=="-h")throw new Ff(`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[Z+1];if(B===void 0||B.startsWith("--"))throw new Ff(`flag --${H} requires a value`,"BAD_FLAG");Y.set(H,B),Z+=1}return{flags:Y,pretty:z,help:G}}function Kj(f,J){let Y=new Set(f.flags.map((z)=>z.name));for(let z of J.keys())if(!Y.has(z))throw new Ff(`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 Ff(`--${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 Ff(`--${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 Z=Number.parseInt(G,10);if(!Number.isInteger(Z)||Z<=0)throw new Ff(`--${z.name} must be a positive integer`,"BAD_FLAG")}}}}class Uj{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 Ff(`--${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 Ff(`--${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 Ff(`--${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 Ff(`--${f} must be a positive integer`,"BAD_FLAG");return Y}path(f){let J=this.str(f);return J===void 0?void 0:gK(process.cwd(),J)}requirePath(f){return gK(process.cwd(),this.require(f))}}function kK(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 Ff(`--agents entry "${z}" must be vendor:count`,"BAD_FLAG");let Z=z.slice(0,G);if(!mf.includes(Z))throw new Ff(`--agents vendor "${Z}" must be one of ${mf.join(", ")}`,"BAD_FLAG");let q=Number.parseInt(z.slice(G+1),10);if(!Number.isInteger(q)||q<=0)throw new Ff(`--agents count for "${Z}" must be a positive integer`,"BAD_FLAG");if(J.length+q>MG)throw new Ff(`--agents requests ${J.length+q} agents, exceeds the cap of ${MG}`,"BAD_FLAG");for(let Q=0;Q<q;Q++)J.push(Z)}if(J.length===0)throw new Ff('--agents specified no agents (e.g. "claude:2,codex:1")',"BAD_FLAG");return J}function e2(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 Dj(f){return{name:f.name,group:CK(f.name),summary:f.summary,offline:f.offline??!1,flags:f.flags.map(e2)}}function yK(){return{apiVersion:Wj,kobeVersion:o0,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:FG,verbs:OG.map((f)=>({name:f.name,group:CK(f.name),summary:f.summary})),globalFlags:NK,aliases:eq}}function fC(f){let J=FG[f];if(!J)throw new Ff(`unknown group: ${f}. Groups: ${Object.keys(FG).join(", ")}`,"BAD_FLAG");return{group:f,verbs:J.map((Y)=>{let z=OZ(Y);return{name:Y,summary:z?.summary??""}})}}function bK(){return{apiVersion:Wj,kobeVersion:o0,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:NK,aliases:eq,groups:FG,verbs:OG.map(Dj)}}function JC(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 SK(f){let J=[`kobe api ${f.name} ${JC(f)}`.trimEnd(),"",f.summary,""],Y=Object.entries(eq).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)":"",Z=z.default!==void 0?` [default: ${z.default}]`:"",q=z.type==="enum"&&z.values?` {${z.values.join("|")}}`:"";J.push(` --${z.name}${q}${G}${Z} ${z.description}`)}J.push("")}return J.push("Global: [--pretty] [--help]"),J.join(`
128
- `)}function tq(){return["usage: kobe api <verb> [flags] [--pretty] [--help]","","Explore the full surface (names, flags, types) with: kobe api schema","","verbs:",...OG.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(`
129
- `)}function YC(f,J){let Y=J?JSON.stringify(f,null,2):JSON.stringify(f);process.stdout.write(`${Y}
130
- `)}function oJ(f,J,Y=1){process.stderr.write(`${JSON.stringify({error:{message:f,code:J}})}
131
- `),process.exit(Y)}async function IK(f,J,Y,z=zC){let G=J.worktreePath;if(!G)G=(await f.request("task.ensureWorktree",{taskId:J.id})).worktreePath;if(!G)throw new Ff(`task ${J.id} has no worktree`,"NO_WORKTREE");let Z=Mf(J.id),q=await z.sessionExists(Z);if(!q){let B=await z.resolveEngineLaunchInit(J.repo??"",G,{kind:"none"});if(!await z.ensureSession({name:Z,cwd:G,command:z.engineCommand(J.vendor),taskId:J.id,vendor:J.vendor,repo:J.repo,launchInit:B}))throw new Ff(`failed to start tmux session for ${J.id}`,"SESSION_FAILED")}let{pane:Q,ready:H}=await z.waitForEnginePane(Z,!q);if(!Q)throw new Ff(`no engine pane in session ${Z}`,"NO_ENGINE_PANE");return await z.pasteAndSubmit(Q,Y),{session:Z,pane:Q,started:!q,engineReady:H}}async function GC(f){let J=null,Y=f.onChannel("active-task",(z)=>{J=z.taskId});try{await f.subscribe()}finally{Y()}return J}function w1(f){if(!f.client)throw new Ff("daemon required","BAD_DAEMON");return f.client}async function DJ(f,J,Y){return w1(f).request(J,Y)}async function ZC(f){let J=f.args.str("title"),Y=f.args.str("body");if(J===void 0&&Y===void 0)throw new Ff("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 XC(f){let J=w1(f),{args:Y,runtime:z}=f,Z={repo:await z.resolveRepoRoot(Y.requirePath("repo"))},q=Y.str("title");if(q)Z.title=q;let Q=Y.str("branch");if(Q)Z.branch=Q;let H=Y.str("base-branch");if(H)Z.baseRef=H;let B=Y.vendor()??await z.defaultVendor();if(B)Z.vendor=B;let V=await J.request("task.create",Z),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 g=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:g.started,engineReady:g.engineReady,session:g.session}}async function qC(f){let J=w1(f),Y=f.args.require("prompt"),z=f.args.str("task-id");if(!z){let q=await GC(J);if(!q)throw new Ff("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}),Z=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:Z.session,started:Z.started,engineReady:Z.engineReady}}async function QC(f){let J=w1(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 HC(f){let J=w1(f),Y=f.args.require("task-id"),z=f.args.require("text");return await J.request("note.file",{taskId:Y,text:z})}async function BC(f){let J=w1(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 jC(f){return w1(f).request("task.list")}async function WC(f){let J=w1(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 VC(f){let J=w1(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 KC(f){let J=w1(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 UC(f){let J=w1(f),{args:Y}=f,z={repo:Y.requirePath("repo"),worktreePath:Y.requirePath("worktree")},G=Y.str("branch");if(G)z.branch=G;let Z=Y.vendor();if(Z)z.vendor=Z;let q=Y.str("title");if(q)z.title=q;return J.request("worktree.adopt",z)}async function DC(f){let J=w1(f),{args:Y,runtime:z}=f,G=await z.resolveRepoRoot(Y.requirePath("repo")),Z=Y.require("prompt"),q=Y.str("title"),Q=Y.str("base-branch"),H=Y.str("agents"),B=await z.defaultVendor(),V=H?kK(H):Array(Y.int("count")??1).fill(Y.vendor()??B??"claude");if(V.length>MG)throw new Ff(`fan-out of ${V.length} exceeds the cap of ${MG} \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},Z);j.push({taskId:O.taskId,vendor:U,started:M.started,engineReady:M.engineReady,session:M.session})}return{count:j.length,tasks:j}}async function LC(f){let J=w1(f),{args:Y,runtime:z}=f,G=Y.str("task-ids"),Z=Y.path("repo"),q;if(G)q=G.split(",").map((H)=>H.trim()).filter(Boolean);else if(Z){let H=await z.resolveRepoRoot(Z),{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 Ff("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 MC(f){return{ok:!0,discussion:LG({title:f.args.require("title"),body:f.args.require("body"),categorySlug:f.args.str("category")})}}function TK(f,J,Y,z){return{args:new Uj(f,J),client:Y,runtime:z}}async function FC(f,J,Y){let z=OZ(f);if(!z)throw new Ff(`unknown verb: ${f}`,"BAD_VERB");let G=new Set(z.flags.filter((q)=>q.type==="bool").map((q)=>q.name)),Z=Vj(J,G);return Kj(z,Z.flags),z.handler(TK(z,Z.flags,Y.client,Y.runtime??Lj))}async function OC(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(!J)oJ(tq(),"MISSING_VERB",2);process.stdout.write(`${tq()}
132
- `);return}let z=OZ(J);if(!z)oJ(`unknown verb: ${J}
133
- ${tq()}`,"BAD_VERB",2);let G=new Set(z.flags.filter((Q)=>Q.type==="bool").map((Q)=>Q.name)),Z;try{Z=Vj(Y,G)}catch(Q){if(Q instanceof Ff)oJ(Q.message,Q.code,2);oJ(Q instanceof Error?Q.message:String(Q),"BAD_FLAG",2)}if(Z.help){process.stdout.write(`${SK(z)}
134
- `);return}try{Kj(z,Z.flags)}catch(Q){if(Q instanceof Ff)oJ(Q.message,Q.code,2);oJ(Q instanceof Error?Q.message:String(Q),"BAD_FLAG",2)}let q=null;if(!z.offline)try{q=await OK()}catch(Q){oJ(`could not reach or start the kobe daemon: ${Q instanceof Error?Q.message:String(Q)}`,"BAD_DAEMON",2)}try{let Q=await z.handler(TK(z,Z.flags,q?.client??null,Lj));YC(Q,Z.pretty)}catch(Q){if(Q instanceof Ff)oJ(Q.message,Q.code,1);oJ(Q instanceof Error?Q.message:String(Q),"RPC_ERROR",1)}finally{q?.close()}}var Wj=2,MG=10,RK,o2,Ff,Vf,eq,FG,OG,t2,NK,zC,Lj;var EK=C(()=>{E1();sq();Sf();gq();K1();U1();AK();RK=["backlog","in_progress","in_review","done","canceled","error"],o2=["open","doing","hold","done"];Ff=class Ff 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:mf,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})},eq={"spawn-task":"add"},FG={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"]};OG=[{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:s2},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:jC},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[Vf.taskId()],handler:BC},{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:RK,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:XC},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${MG}.`,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:DC},{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:qC},{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:QC},{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:HC},{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:jj,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:MC},{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:o2,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:ZC},{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:LC},{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:RK,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:VC},{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:WC},{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:KC},{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:UC}],t2=OG.map((f)=>f.name);NK=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];zC={sessionExists:Bf,ensureSession:async(f)=>(await Promise.resolve().then(() => (J1(),r1))).ensureSession(f),waitForEnginePane:jZ,pasteAndSubmit:WZ,resolveEngineLaunchInit:async(f,J,Y)=>(await Promise.resolve().then(() => (zG(),TB))).resolveEngineLaunchInit(f,J,Y),engineCommand:N1};Lj={isTaskRunning:(f)=>Bf(Mf(f)),deliverPrompt:(f,J,Y)=>IK(f,J,Y),resolveRepoRoot:async(f)=>(await Promise.resolve().then(() => (gf(),ZY))).resolveMainRepoRoot(f),defaultVendor:async()=>{let{getPersistedString:f}=await Promise.resolve().then(() => (gf(),ZY)),J=f("lastSelectedVendor")?.trim();return J?J:void 0},readWorktreeChanges:async(f)=>(await Promise.resolve().then(() => (WG(),s5))).readWorktreeChanges(f),tearDownSession:async(f)=>{let J=Mf(f);await bJ(J).catch(()=>{}),await i1(J).catch(()=>{})}}});var PK={};jf(PK,{updatePlan:()=>xK,runUpdateSubcommand:()=>gC,parseUpdateArgs:()=>wK});import{spawnSync as AC}from"child_process";function xK(){return{command:"sh",args:["-c",wJ],display:wJ}}function wK(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}"
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}"
135
136
 
136
- `),hK(process.stderr),process.exit(2)}return{help:!1,dryRun:J}}function hK(f){f.write(["Usage: kobe update [--dry-run]","","Runs kobe's GitHub-hosted update script.","","Default command:",` ${wJ}`,"","Script URL:",` ${sZ}`,"","Manual fallback:",` ${nQ()}`,"","Examples:"," kobe update"," kobe update --dry-run",""].join(`
137
- `))}async function gC(f,J){let Y={spawn:J?.spawn??AC,stdout:J?.stdout??process.stdout,stderr:J?.stderr??process.stderr,exit:J?.exit??((q)=>process.exit(q))},z=wK(f);if(z.help){hK(Y.stdout);return}let G=xK();if(Y.stdout.write(`kobe ${o0} -> latest
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
138
139
  `),Y.stdout.write(`running: ${G.display}
139
- `),z.dryRun)return;let Z=Y.spawn(G.command,G.args,{stdio:"inherit"});if(Z.error)Y.stderr.write(`kobe update: failed to run ${G.command}: ${Z.error.message}
140
- `),Y.exit(1);Y.exit(Z.status??1)}var vK=C(()=>{U1()});var dK={};jf(dK,{runThemeSubcommand:()=>xC});import{existsSync as cK,mkdirSync as RC,readFileSync as CC,readdirSync as kC,unlinkSync as NC,writeFileSync as yC}from"fs";import{basename as mK,join as Fj,resolve as bC}from"path";function sJ(f){process.stderr.write(`kobe theme: ${f}
141
- `),process.exit(1)}function IY(f){process.stderr.write(`kobe theme: ${f}
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}
142
+ `),process.exit(1)}function xY(f){process.stderr.write(`kobe theme: ${f}
142
143
 
143
- `),nK(),process.exit(2)}function SC(){let f=[];f.push("bundled:");for(let z of[...Mj].sort())f.push(` ${z} [built-in]`);let J=XG(),Y=[];try{Y=kC(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),Z=Fj(J,z),q=Mj.includes(G)?" (overrides built-in)":"";f.push(` ${G}${q} ${Z}`)}process.stdout.write(`${f.join(`
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
145
  `)}
145
- `)}async function IC(f){if(/^https?:\/\//i.test(f)){let Z;try{Z=await fetch(f)}catch(V){sJ(`failed to fetch ${f}: ${V instanceof Error?V.message:String(V)}`)}if(!Z.ok)sJ(`failed to fetch ${f}: HTTP ${Z.status} ${Z.statusText}`);let q=await Z.text(),Q=f.split(/[?#]/)[0]??f,H=mK(Q)||"theme.json",B=H.endsWith(".json")?H.slice(0,-5):H;return{text:q,defaultName:B}}let J=bC(process.cwd(),f),Y;try{Y=CC(J,"utf8")}catch(Z){sJ(`failed to read ${J}: ${Z instanceof Error?Z.message:String(Z)}`)}let z=mK(J),G=z.endsWith(".json")?z.slice(0,-5):z;return{text:Y,defaultName:G}}function TC(f){let J=null,Y,z=!1;for(let G=0;G<f.length;G+=1){let Z=f[G];if(Z==="--force"||Z==="-f"){z=!0;continue}if(Z==="--name"||Z==="-n"){let q=f[G+1];if(q===void 0)IY("--name requires a value");Y=q,G+=1;continue}if(Z.startsWith("--name=")){Y=Z.slice(7);continue}if(Z.startsWith("--"))IY(`unknown flag: ${Z}`);if(J===null){J=Z;continue}IY(`unexpected positional argument: ${Z}`)}if(J===null)IY("missing <source> (URL or path to theme JSON)");return{source:J,opts:{name:Y,force:z}}}async function uC(f){let{source:J,opts:Y}=TC(f),{text:z,defaultName:G}=await IC(J),Z;try{Z=JSON.parse(z)}catch(V){sJ(`source is not valid JSON: ${V instanceof Error?V.message:String(V)}`)}let q=Cq(Z);if(!q.ok)sJ(`source is not a valid kobe theme: ${q.reason}`);let Q=Y.name??G;if(!Q||!/^[a-zA-Z0-9._-]+$/.test(Q))sJ(`invalid theme name "${Q}" (use letters, digits, '.', '_', '-')`);let H=XG();RC(H,{recursive:!0});let B=Fj(H,`${Q}.json`);if(cK(B)&&!Y.force)sJ(`${B} already exists (pass --force to overwrite)`);yC(B,`${JSON.stringify(q.theme,null,2)}
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
147
  `,"utf8"),process.stdout.write(`installed theme "${Q}" -> ${B}
147
- `)}function EC(f){let J=f[0];if(!J)IY("missing <name>");if(f.length>1)IY(`unexpected extra arguments after "${J}"`);if(Mj.includes(J))sJ(`"${J}" is a built-in theme and cannot be removed`);let Y=Fj(XG(),`${J}.json`);if(!cK(Y))sJ(`no user theme named "${J}" (looked for ${Y})`);NC(Y),process.stdout.write(`removed theme "${J}" (${Y})
148
- `)}function nK(){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: ${XG()}`,"Schema: https://raw.githubusercontent.com/sma1lboy/kobe/main/packages/kobe/src/tui/context/theme/theme.schema.json",""].join(`
149
- `))}async function xC(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(nK(),!J)process.exit(2);return}if(J==="list"||J==="ls"){if(Y.length>0)IY(`"${J}" takes no arguments`);SC();return}if(J==="add"){await uC(Y);return}if(J==="remove"||J==="rm"){EC(Y);return}IY(`unknown action "${J}" (try "list", "add", or "remove")`)}var Mj;var iK=C(()=>{lf();kq();hB();Mj=["claude","conductor","dracula","nord","opencode","osaka-jade","tokyonight"]});var rK={};jf(rK,{runFeedbackSubcommand:()=>hC,parseFeedbackArgs:()=>$K});import{readFileSync as lK}from"fs";function TY(f){process.stderr.write(`kobe feedback: ${f}
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}
150
151
 
151
- ${aK}
152
- `),process.exit(2)}function wC(f){if(f==="-")return lK(0,"utf8");return lK(f,"utf8")}function $K(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)TY("--title requires a value");continue}if(z==="--body"){if(J.body=f[++Y],J.body===void 0)TY("--body requires a value");continue}if(z==="--body-file"){if(J.bodyFile=f[++Y],J.bodyFile===void 0)TY("--body-file requires a value");continue}if(z==="--category"){if(J.category=f[++Y],J.category===void 0)TY("--category requires a value");continue}TY(`unexpected argument "${z}"`)}return J}async function hC(f){let J=$K(f);if(J.help){process.stdout.write(`${aK}
153
- `);return}if(!J.title)TY("--title is required");if(J.body&&J.bodyFile)TY("pass either --body or --body-file, not both");let Y=J.bodyFile?wC(J.bodyFile):J.body;if(!Y)TY("--body or --body-file is required");let z=LG({title:J.title,body:Y,categorySlug:J.category});console.log(`created Discussion #${z.number}: ${z.url}`)}var aK;var pK=C(()=>{sq();aK=["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(`
154
- `)});import{homedir as PC}from"os";async function _K(f={}){let J=f.homeDir??process.env.KOBE_HOME_DIR??PC(),Y=new Iz({homeDir:J});await Y.load();let z=new GX,G=new MX({store:Y,worktrees:z});return{homeDir:J,orchestrator:G,store:Y,worktrees:z,async close(){G.dispose()}}}var oK=C(()=>{iG();PG();ZH()});var tK={};jf(tK,{runDaemonSubcommand:()=>mC});function sK(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(`
155
- `))}function vC(){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 mC(f){let[J="status"]=f,Y=CJ(),z=cJ();if(J==="--help"||J==="-h"||J==="help"){sK(process.stdout);return}if(J==="status"){let Q=new n1(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 n1(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 UJ()).close(),console.log(`kobe daemon: restarted, listening on ${Y}`);return}if(J!=="start")process.stderr.write(`kobe daemon: unknown command "${J}"
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}"
156
157
 
157
- `),sK(process.stderr),process.exit(2);PV();let G=await _K(),Z=await ZK(G.orchestrator,{socketPath:Y,pidPath:z,homeDir:G.homeDir,webPort:vC(),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 ${Z.socketPath}`),Z.webPort)console.log(`kobe daemon: web transport listening on http://127.0.0.1:${Z.webPort}`);let q=async()=>{await Z.close(),await G.close(),process.exit(0)};process.once("SIGINT",()=>void q()),process.once("SIGTERM",()=>void q())}var eK=C(()=>{aG();y1();pq();wz();rq();oK()});import{existsSync as cC,readFileSync as nC}from"fs";import{homedir as dC}from"os";import{join as fU}from"path";function gj(f={}){return["skills","add",iC,"--skill","kobe","--agent",f.agent??fQ]}function JQ(f={}){return`npx ${gj(f).join(" ")}`}function Rj(f={}){let J=f.home??dC(),Y=f.cwd??process.cwd();return[fU(J,JU),fU(Y,JU)]}function lC(f){let J=f.match(/kobe-skill-version:\s*(\d+)/);return J?Number.parseInt(J[1],10):null}function gZ(f){let J=Rj(f).find((G)=>cC(G));if(!J)return{installed:!1,installedVersion:null,currentVersion:Oj,stale:!1};let Y=null;try{Y=lC(nC(J,"utf8"))}catch{Y=null}let z=Y===null||Y<Oj;return{installed:!0,installedVersion:Y,currentVersion:Oj,stale:z}}function YU(){let f=gZ();if(!f.installed){if(kf(Aj)==="1")return;af(Aj,"1"),process.stderr.write(`
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
159
  kobe: the kobe agent skill isn't installed \u2014 install it so your coding agent can drive kobe via \`kobe api\`:
159
- ${AZ}
160
- (wraps \`${JQ()}\`; check anytime with \`kobe doctor\`)
160
+ ${RX}
161
+ (wraps \`${zQ()}\`; check anytime with \`kobe doctor\`)
161
162
 
162
- `);return}if(f.stale){let J=`${Aj}: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=`${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
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:
164
- ${AZ}
165
+ ${RX}
165
166
 
166
- `)}}var Oj=2,JU=".claude/skills/kobe/SKILL.md",AZ="kobe skill install",iC="Sma1lboy/kobe",fQ="claude-code",Aj="skillHintSeen";var YQ=C(()=>{gf()});var zQ={};jf(zQ,{runResetSubcommand:()=>zk,runReloadSubcommand:()=>Gk,runDoctorSubcommand:()=>Jk});import{existsSync as aC,readFileSync as ZU,statSync as $C}from"fs";import{unlink as rC}from"fs/promises";import{join as XU}from"path";import{createInterface as pC}from"readline";function _C(f){try{return process.kill(f,0),!0}catch(J){return J.code==="EPERM"}}async function oC(f){let J=new n1(f);try{return await J.request("daemon.status")}catch{return null}finally{J.close()}}function sC(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 tC(f){if(f<1024)return`${f} B`;if(f<1048576)return`${(f/1024).toFixed(1)} KB`;return`${(f/1048576).toFixed(1)} MB`}function Cj(f){try{let J=$C(f);return`present (${tC(J.size)}, modified ${J.mtime.toISOString()})`}catch{return"absent"}}function qU(f){try{let J=JSON.parse(ZU(f,"utf8"));return Array.isArray(J.tasks)?J.tasks.length:null}catch{return null}}function eC(f,J){try{return ZU(f,"utf8").split(`
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
168
  `).filter((z)=>z.trim().length>0).slice(-J).join(`
168
- `)}catch{return""}}async function kj(f){let J=Bun.spawn(Gz(...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 fk(){if(!await NJ())return 0;let{code:f,stdout:J}=await kj(["list-sessions","-F","#{session_name}"]);if(f!==0)return 0;return J.split(`
169
- `).filter((Y)=>Y.trim().length>0).length}async function Jk(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 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(`
170
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(`
171
- `)),process.exit(2);let Y=CJ(),z=cJ(),G=AX(),Z=XU(ef(),"tasks.json"),q=v1(),Q=["kobe doctor",` home: ${OJ()}`,` socket: ${Y}`,""],H=await oC(Y);if(H){let j=typeof H.daemonPid==="number"?H.daemonPid:"?",U=typeof H.uptimeMs==="number"?sC(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!==o0)Q.push(` \u26A0 stale build: daemon is v${M}, you launched v${o0}`),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&&_C(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(aC(Y))Q.push(` orphan socket file present: ${Y}`);let U=eC(G,8);if(U){Q.push(" last lines of daemon.log:");for(let L of U.split(`
172
- `))Q.push(` \u2502 ${L}`)}}if(Q.push(""),await NJ())Q.push(`tmux: ${await fk()} kobe session(s) on \`${QJ}\` socket`);else Q.push("tmux: \u2717 not found on PATH (task sessions need tmux)");Q.push("");let B=gZ();if(!B.installed)Q.push("skill: \u2717 kobe agent skill not installed (optional \u2014 lets a coding agent drive `kobe api`)"),Q.push(` \u2192 ${AZ}`);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 ${AZ}`)}else Q.push(`skill: \u2713 kobe agent skill installed (v${B.installedVersion})`);Q.push("");let V=qU(Z);Q.push(`tasks.json: ${Cj(Z)}${V===null?"":` \u2014 ${V} task(s)`}`),Q.push(`state.json: ${Cj(q)}`),Q.push(`daemon.log: ${Cj(G)}`),console.log(Q.join(`
173
- `))}async function Yk(f){let J=pC({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 zU(f,J){try{await rC(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 GU(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(`
174
- `))}async function zk(f){if(f.includes("--help")||f.includes("-h")||f.includes("help")){GU(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=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}"
175
176
 
176
- `),GU(process.stderr),process.exit(2);let z=f.includes("--hard"),G=f.includes("--yes")||f.includes("-y"),Z=CJ(),q=cJ(),Q=XU(ef(),"tasks.json"),H=v1();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 (${Z})`),console.log(` \u2022 kill all kobe tmux sessions on the \`${QJ}\` socket`),z){let j=qU(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(`
177
- re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await Yk(z?`
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?`
178
179
  Stop daemon, kill sessions AND wipe task index? [y/N] `:`
179
- Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:B,method:V}=await KG(Z,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 kj(["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 zU(Q,"task index"),await zU(H,"UI state");console.log(`
180
- kobe: reset complete. Relaunch kobe to start fresh.`)}async function Gk(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 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(`
181
182
  `));return}let J=f.find((Q)=>Q.length>0);if(J!==void 0)process.stderr.write(`kobe reload: unexpected argument "${J}"
182
183
 
183
184
  Usage: kobe reload (takes no options)
184
- `),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 kj(["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(`
185
- `).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:Z}=await Promise.resolve().then(() => (J1(),r1)),q=0;for(let Q of G)try{await Z(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 GQ=C(()=>{aG();pq();wz();rq();lf();YQ();Sf();U1()});var KU={};jf(KU,{runWebSubcommand:()=>Wk});import{existsSync as BU}from"fs";import{homedir as Zk}from"os";import{resolve as ZQ}from"path";import{fileURLToPath as jU}from"url";function QU(){let f=process.env.KOBE_HOME_DIR?.trim();return f?`sandbox: ${f}`:`${Zk()}/.kobe (production)`}function qk(){let f=jU(import.meta.url),J=[ZQ(f,"../../../../kobe-web/dist"),ZQ(f,"../../web-ui")];for(let Y of J)if(BU(`${Y}/index.html`))return Y;return}function Qk(){let f=jU(import.meta.url),J=[ZQ(f,"../../../../kobe-web/pty-server.mjs"),ZQ(f,"../../web-ui/pty-server.mjs")];for(let Y of J)if(BU(Y))return Y;return}async function HU(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(`
186
- `).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function Hk(f){let J;try{J=(await(await fetch(`http://localhost:${f}${VU}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(J!==WU)throw Error(`PTY port ${f} is in use by a non-kobe service; refusing to replace it`);let Y=await HU(f);for(let G of Y)try{process.kill(G,"SIGTERM")}catch{}let z=Date.now()+2000;while(Date.now()<z){if((await HU(f)).length===0)return;await new Promise((G)=>setTimeout(G,100))}}async function Bk(f){let J=Qk();if(!J)return null;let Y=f.webPort+2;if(f.takeover)await Hk(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 jk(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}${VU}`,{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!==WU)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 Wk(f){if(f.includes("--help")||f.includes("-h")){process.stdout.write(Xk);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
187
- `),process.exit(2);J=z}try{let z=f.includes("--routes-only")||f.includes("--bridge-only"),G=!f.includes("--no-takeover"),Z=z?void 0:qk();if(!z&&!Z)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 jk(J,Z);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)
188
- `),process.stdout.write(` home: ${QU()}
189
- `);else if(q=await Bk({webPort:J,takeover:G}),process.stdout.write(`kobe web \u2192 http://localhost:${J}
190
- `),process.stdout.write(` home: ${QU()}
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()}
191
192
  `),!q)process.stderr.write(`kobe web: PTY server not found; terminal tabs will be unavailable
192
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
193
194
  `),H(),process.exit(1)}),await new Promise(()=>{})}catch(z){process.stderr.write(`kobe web: ${z instanceof Error?z.message:String(z)}
194
- `),process.exit(1)}}var WU="kobe-web",VU="/__kobe_web",Xk=`Usage: kobe web [options]
195
+ `),process.exit(1)}}var LU="kobe-web",MU="/__kobe_web",Wk=`Usage: kobe web [options]
195
196
 
196
197
  Launch the kobe web UI through daemon web transport on http://localhost:<port>.
197
198
 
@@ -200,45 +201,45 @@ Options:
200
201
  --routes-only Routes only; Vite serves the SPA separately.
201
202
  --no-takeover Reserved for compatibility; daemon owns the web port.
202
203
  -h, --help Show this help.
203
- `;var UU=C(()=>{y1()});var LU={};jf(LU,{runSkillSubcommand:()=>Kk});function Nj(){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: ${fQ}.`].join(`
204
- `)}function DU(f){let J=fQ;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 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
205
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}"
206
207
 
207
- ${Nj()}
208
- `),process.exit(2)}return J}async function Kk(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(process.stdout.write(`${Nj()}
209
- `),!J)process.exitCode=2;return}if(!Vk.includes(J))process.stderr.write(`kobe skill: unknown verb "${J}"
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}"
210
211
 
211
- ${Nj()}
212
- `),process.exit(2);if(J==="status"){let Q=gZ(),[H,B]=Rj(),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(`
213
- `));return}if(J==="command"){process.stdout.write(`${JQ({agent:DU(Y)})}
214
- `);return}let z=DU(Y),G=gj({agent:z});process.stdout.write(`kobe skill: running \`npx ${G.join(" ")}\`
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(" ")}\`
215
216
  `);let q=await Bun.spawn(["npx",...G],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(q!==0)process.stderr.write(`
216
217
  kobe skill install failed (npx exited ${q}). Is \`npx\` on PATH and are you online?
217
- You can run it yourself: ${JQ({agent:z})}
218
+ You can run it yourself: ${zQ({agent:z})}
218
219
  `),process.exit(q||1);process.stdout.write(`kobe skill: installed.
219
- `)}var Vk;var MU=C(()=>{YQ();Vk=["install","status","command"]});var bj={};jf(bj,{runHookSubcommand:()=>gk,readTextWithTimeout:()=>gU,parseWorktreeAddPath:()=>CU,ensureGlobalKobeHooks:()=>kk});import{homedir as Uk}from"os";import{join as OU,resolve as AU}from"path";async function gU(f,J=Dk){let Y;try{return await Promise.race([f(),new Promise((z)=>{Y=setTimeout(()=>z(""),J)})])}finally{if(Y!==void 0)clearTimeout(Y)}}async function RU(){try{let f=await gU(()=>Bun.stdin.text());if(!f.trim())return{};let J=JSON.parse(f);return J&&typeof J==="object"&&!Array.isArray(J)?J:{}}catch{return{}}}function Lk(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 Fk(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}function Ok(f){let J=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g,z;while((z=Y.exec(f))!==null)J.push(z[1]??z[2]??z[3]??"");return J}function CU(f){let J=Ok(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 Z=J[G];if(Z==="&&"||Z==="||"||Z===";"||Z==="|"||Z===">"||Z===">>")break;if(Z.startsWith("-")){G+=Y.has(Z)?2:1;continue}return Z}}return}async function Ak(){let f=await RU(),J=Fk(f.tool_input)?f.tool_input:{},Y=typeof J.command==="string"?J.command:"";if(!Y.includes("worktree"))return;let z=CU(Y);if(!z)return;let G=typeof f.cwd==="string"&&f.cwd?f.cwd:process.cwd(),Z=AU(G,z),q=await p1();if(!q)return;try{await q.request("worktree.reconcile",{cwd:G,worktreePath:Z})}finally{q.close()}}async function gk(f){let[J,...Y]=f;if(J==="setup"){await Nk(Y);return}if(J===Mk){try{await Ak()}catch{}return}try{if(!J||!RX(J))return;let z=await RU(),G=Lk(Y,"--task-id"),Z=typeof z.cwd==="string"&&z.cwd?z.cwd:process.cwd(),q;for(let H of kU())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:Z},kind:J,...q?{detail:q}:{}})}finally{Q.close()}}catch{}}function Rk(){return mf.map((f)=>lH(f)).filter((f)=>f.supportsWorktreeSync())}function kU(){return mf.map((f)=>lH(f)).filter((f)=>f.supportsHooks())}function yj(){return OU(Uk(),".claude","settings.json")}function Ck(f){if(!f||f==="off")return;if(f==="global")return yj();if(f.startsWith("repo:"))return OU(AU(f.slice(5)),".claude","settings.json");return f}async function kk(){try{let f=yj();for(let J of kU())await J.installActivityHooks(f),await J.installWorktreeWatchHook(f);await NU()}catch{}}async function NU(){let f=Rk();if(f.length===0)return;let J=kf(FU),Y=new Set([yj()]),z=Ck(J);if(z)Y.add(z);for(let G of f)for(let Z of Y)await G.removeWorktreeSyncHook(Z);if(J!=="off")af(FU,"off")}async function Nk(f){await NU(),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(`
220
- `))}var Dk=500,Mk="worktree-created",FU="externalWorktreeSync";var Sj=C(()=>{y1();aH();CX();gf();K1()});function bU(f){var J;if(f>=55296&&f<=57343||f>1114111)return 65533;return(J=yk.get(f))!==null&&J!==void 0?J:f}var Ij,yk,yU;var SU=C(()=>{yk=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]]),yU=(Ij=String.fromCodePoint)!==null&&Ij!==void 0?Ij:(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 IU(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,Z=0;G<Y;G+=2){let q=J.charCodeAt(G),Q=J.charCodeAt(G+1);z[Z++]=q|Q<<8}return z}var TU;var uU=C(()=>{TU=IU("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 EU=C(()=>{(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 Tj(f){return f>=uf.ZERO&&f<=uf.NINE}function bk(f){return f>=uf.UPPER_A&&f<=uf.UPPER_F||f>=uf.LOWER_A&&f<=uf.LOWER_F}function Sk(f){return f>=uf.UPPER_A&&f<=uf.UPPER_Z||f>=uf.LOWER_A&&f<=uf.LOWER_Z||Tj(f)}function Ik(f){return f===uf.EQUALS||Sk(f)}class uj{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=tJ.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)===uf.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)|xU)===uf.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(Tj(Y)||bk(Y)){let z=Y<=uf.NINE?Y-uf.ZERO:(Y|xU)-uf.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(Tj(Y))this.result=this.result*10+(Y-uf.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===uf.SEMI)this.consumed+=1;else if(this.decodeMode===tJ.Strict)return 0;if(this.emitCodePoint(bU(this.result),this.consumed),this.errors){if(f!==uf.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 Z=f.charCodeAt(J);if(Z===uf.SEMI&&G!==0&&(z&B1.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.treeIndex=uk(Y,z,this.treeIndex+Math.max(1,G),Z),this.treeIndex<0)return this.result===0||this.decodeMode===tJ.Attribute&&(G===0||Ik(Z))?0:this.emitNotTerminatedNamedEntity();if(z=Y[this.treeIndex],G=(z&B1.VALUE_LENGTH)>>14,G!==0){if(Z===uf.SEMI)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.decodeMode!==tJ.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!==tJ.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 Tk(f){let J="",Y=new uj(f,(z)=>J+=yU(z));return function(G,Z){let q=0,Q=0;while((Q=G.indexOf("&",Q))>=0){J+=G.slice(q,Q),Y.startEntity(Z);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 uk(f,J,Y,z){let G=(J&B1.BRANCH_LENGTH)>>7,Z=J&B1.JUMP_TABLE;if(G===0)return Z!==0&&z===Z?Y:-1;if(Z){let B=z-Z;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 Fz(f,J=tJ.Legacy){return Ek(f,J)}var uf,xU=32,of,tJ,Ek;var wU=C(()=>{SU();uU();EU();(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"})(uf||(uf={}));(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"})(tJ||(tJ={}));Ek=Tk(TU)});var hU,PU;var mU=C(()=>{wU();(function(f){f[f.XML=0]="XML",f[f.HTML=1]="HTML"})(hU||(hU={}));(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"})(PU||(PU={}))});import{CliRenderer as wk,createCliRenderer as hk,engine as Pk}from"@opentui/core";import{createTestRenderer as Im}from"@opentui/core/testing";import{ASCIIFontRenderable as vk,BoxRenderable as mk,CodeRenderable as ck,DiffRenderable as nk,InputRenderable as dk,LineNumberRenderable as ik,MarkdownRenderable as lk,ScrollBoxRenderable as ak,SelectRenderable as $k,TabSelectRenderable as rk,TextareaRenderable as pk,TextAttributes as Ej,TextNodeRenderable as _k,TextRenderable as ok}from"@opentui/core";import{engine as Em,Timeline as xm}from"@opentui/core";import{BaseRenderable as aU,createTextAttributes as tk,InputRenderable as xj,InputRenderableEvents as RZ,isTextNodeRenderable as Pj,parseColor as cU,Renderable as ek,RootTextNodeRenderable as fN,ScrollBoxRenderable as JN,SelectRenderable as nU,SelectRenderableEvents as wj,TabSelectRenderable as dU,TabSelectRenderableEvents as hj,TextNodeRenderable as YN,TextRenderable as $U}from"@opentui/core";import{BaseRenderable as jN,isTextNodeRenderable as WN,TextNodeRenderable as VN,TextRenderable as KN,Yoga as lU}from"@opentui/core";import{BoxRenderable as lm,RootRenderable as am}from"@opentui/core";import{TimeToFirstDrawRenderable as MN}from"@opentui/core";import{createSlotRegistry as pm}from"@opentui/core";function GN({createElement:f,createTextNode:J,createSlotNode:Y,isTextNode:z,replaceText:G,insertNode:Z,removeNode:q,setProperty:Q,getParentNode:H,getFirstChild:B,getNextSibling:V}){function j(N,A,R,S){if(R!==void 0&&!S)S=[];if(typeof A!=="function")return U(N,A,S,R);AJ((_)=>U(N,A(),_,R),S)}function U(N,A,R,S,_){while(typeof R==="function")R=R();if(A===R)return R;let z0=typeof A,e=S!==void 0;if(z0==="string"||z0==="number"){if(z0==="number")A=A.toString();if(e){let Y0=R[0];if(Y0&&z(Y0))G(Y0,A);else Y0=J(A);R=M(N,R,S,Y0)}else if(R!==""&&typeof R==="string")G(B(N),R=A);else M(N,R,S,J(A)),R=A}else if(A==null||z0==="boolean")R=M(N,R,S);else if(z0==="function")return AJ(()=>{let Y0=A();while(typeof Y0==="function")Y0=Y0();R=U(N,Y0,R,S)}),()=>R;else if(Array.isArray(A)){let Y0=[];if(L(Y0,A,_))return AJ(()=>R=U(N,Y0,R,S,!0)),()=>R;if(Y0.length===0){let T=M(N,R,S);if(e)return R=T}else if(Array.isArray(R))if(R.length===0)g(N,Y0,S);else O(N,R,Y0);else if(R==null||R==="")g(N,Y0);else O(N,e&&R||[B(N)],Y0);R=Y0}else{if(Array.isArray(R)){if(e)return R=M(N,R,S,A);M(N,R,null,A)}else if(R==null||R===""||!B(N))Z(N,A);else I(N,A,B(N));R=A}return R}function L(N,A,R){let S=!1;for(let _=0,z0=A.length;_<z0;_++){let e=A[_],Y0;if(e==null||e===!0||e===!1);else if(Array.isArray(e))S=L(N,e)||S;else if((Y0=typeof e)==="string"||Y0==="number")N.push(J(e));else if(Y0==="function")if(R){while(typeof e==="function")e=e();S=L(N,Array.isArray(e)?e:[e])||S}else N.push(e),S=!0;else N.push(e)}return S}function O(N,A,R){let S=R.length,_=A.length,z0=S,e=0,Y0=0,T=V(A[_-1]),Q0=null;while(e<_||Y0<z0){if(A[e]===R[Y0]){e++,Y0++;continue}while(A[_-1]===R[z0-1])_--,z0--;if(_===e){let t=z0<S?Y0?V(R[Y0-1]):R[z0-Y0]:T;while(Y0<z0)Z(N,R[Y0++],t)}else if(z0===Y0)while(e<_){if(!Q0||!Q0.has(A[e]))q(N,A[e]);e++}else if(A[e]===R[z0-1]&&R[Y0]===A[_-1]){let t=V(A[--_]);Z(N,R[Y0++],V(A[e++])),Z(N,R[--z0],t),A[_]=R[z0]}else{if(!Q0){Q0=new Map;let V0=Y0;while(V0<z0)Q0.set(R[V0],V0++)}let t=Q0.get(A[e]);if(t!=null)if(Y0<t&&t<z0){let V0=e,C0=1,$;while(++V0<_&&V0<z0){if(($=Q0.get(A[V0]))==null||$!==t+C0)break;C0++}if(C0>t-Y0){let x=A[e];while(Y0<t)Z(N,R[Y0++],x)}else I(N,R[Y0++],A[e++])}else e++;else q(N,A[e++])}}}function M(N,A,R,S){if(R===void 0){let z0;while(z0=B(N))q(N,z0);return S&&Z(N,S),S??""}let _=S||Y();if(A.length){let z0=!1;for(let e=A.length-1;e>=0;e--){let Y0=A[e];if(_!==Y0){let T=H(Y0)===N;if(!z0&&!e)T?I(N,_,Y0):Z(N,_,R);else T&&q(N,Y0)}else z0=!0}}else Z(N,_,R);return[_]}function g(N,A,R){for(let S=0,_=A.length;S<_;S++)Z(N,A[S],R)}function I(N,A,R){Z(N,A,R),q(N,R)}function a(N,A,R={},S){if(A||(A={}),!S)AJ(()=>R.children=U(N,A.children,R.children));return AJ(()=>A.ref&&A.ref(N)),AJ(()=>{for(let _ in A){if(_==="children"||_==="ref")continue;let z0=A[_];if(z0===R[_])continue;Q(N,_,z0,R[_]),R[_]=z0}}),R}return{render(N,A){let R;return aY((S)=>{R=S,j(A,N())}),R},insert:j,spread(N,A,R){if(typeof A==="function")AJ((S)=>a(N,A(),S,R));else a(N,A,void 0,R)},createElement:f,createTextNode:J,insertNode:Z,setProp(N,A,R,S){return Q(N,A,R,S),R},mergeProps:UX,effect:AJ,memo:zN,createComponent:QW,use(N,A,R){return $f(()=>N(A,R))}}}function ZN(f){let J=GN(f);return J.mergeProps=UX,J}function dj(f){if(!XQ.has(f))XQ.set(f,0);let J=XQ.get(f)+1;return XQ.set(f,J),`${f}-${J}`}function XN(f,J,Y){if(sf("Inserting node:",rf(J),"into parent:",rf(f),"with anchor:",rf(Y),J instanceof AG),J instanceof CZ)J.parent=f,J=J.getSlotChild(f);if(Y&&Y instanceof CZ)Y=Y.getSlotChild(f);if(Pj(J)){if(!(f instanceof $U)&&!Pj(f))throw Error(`Orphan text error: "${J.toChunks().map((Z)=>Z.text).join("")}" must have a <text> as a parent: ${f.id} above ${J.id}`)}if(!(f instanceof aU))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=vj(f),G=z.findIndex((Z)=>Z.id===Y.id);if(G===-1)sf("[INSERT]","Could not find anchor",rf(f),rf(Y),"[children]",...z.map((Z)=>Z.id));f.add(J,G)}function qN(f,J){if(sf("Removing node:",rf(J),"from parent:",rf(f)),J instanceof CZ)J.parent=null,J=J.getSlotChild(f);f.remove(J.id),process.nextTick(()=>{if(J instanceof aU&&!J.parent){J.destroyRecursively();return}})}function QN(f){sf("Creating text node:",f);let J=dj("text-node");if(typeof f==="number")f=f.toString();return AG.fromString(Fz(f),{id:J})}function HN(){let f=dj("slot-node");return sf("Creating slot node",f),new CZ(f)}function iU(f){sf("Getting parent of node:",rf(f));let J=f.parent??void 0;if(J instanceof fN)J=J.textParent??void 0;let Y=J?.parent?.parent?.parent;if(Y instanceof JN&&Y.content===J)J=Y;return J}function DN(f){Object.assign(eU,f)}function LN(){return eU}var nj,Y1=()=>{let f=u1(nj);if(!f)throw Error("No renderer found");return f},sk=(f)=>{let J=Y1();f1(()=>{J.on("resize",f)}),vf(()=>{J.off("resize",f)})},TJ=()=>{let f=Y1(),[J,Y]=r({width:f.width,height:f.height});return sk((G,Z)=>{Y({width:G,height:Z})}),J},zN=(f)=>K0(()=>f()),XQ,sf=(...f)=>{if(process.env.DEBUG)console.log("[Reconciler]",...f)},AG,rf=(f)=>{if(!f)return;return f.id},vj=(f)=>{let J;if(f instanceof $U)J=f.getTextChildren();else J=f.getChildren();return J},BN,E,I0,b,W,E0,D,K,nm,X,rU,uY,ij,pU,_U,CZ,kZ,qQ,mj,cj,oU,sU,tU,UN,eU,FN=(f,J)=>{let Y,z=!1,G=!1,Z=!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(Z){q=!0;return}Q()};try{Y=BN(()=>b(nj.Provider,{get value(){return f},get children(){return b(J,{})}}),f.root)}finally{Z=!1,f.destroy=Q}if(z)H();if(q)Q()},f6=async(f,J={})=>{let Y=J instanceof wk?J:await hk({...J,onDestroy:()=>{J.onDestroy?.()}});Pk.attach(Y),FN(Y,f)};var P=C(()=>{Wf();mU();Wf();Wf();Wf();nj=gJ();XQ=new Map;AG=class AG extends YN{static fromString(f,J={}){let Y=new AG(J);return Y.add(f),Y}};({render:BN,effect:E,memo:I0,createComponent:b,createElement:W,createTextNode:E0,insertNode:D,insert:K,spread:nm,setProp:X,mergeProps:rU,use:uY}=ZN({createElement(f){sf("Creating element:",f);let J=dj(f),Y=u1(nj);if(!Y)throw Error("No renderer found");let z=LN();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:QN,createSlotNode:HN,replaceText(f,J){if(sf("Replacing text:",J,"in node:",rf(f)),!(f instanceof AG))return;f.replace(Fz(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(Pj(f)){if(J==="href"){f.link={url:Y};return}if(J==="style"){f.attributes|=tk(Y),f.fg=Y.fg?cU(Y.fg):f.fg,f.bg=Y.bg?cU(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 ek))return;if(Y)f.focus();else f.blur();break;case"onChange":let G=void 0;if(f instanceof nU)G=wj.SELECTION_CHANGED;else if(f instanceof dU)G=hj.SELECTION_CHANGED;else if(f instanceof xj)G=RZ.CHANGE;if(!G)break;if(Y)f.on(G,Y);if(z)f.off(G,z);break;case"onInput":if(f instanceof xj){if(Y)f.on(RZ.INPUT,Y);if(z)f.off(RZ.INPUT,z)}break;case"onSubmit":if(f instanceof xj){if(Y)f.on(RZ.ENTER,Y);if(z)f.off(RZ.ENTER,z)}else f[J]=Y;break;case"onSelect":if(f instanceof nU){if(Y)f.on(wj.ITEM_SELECTED,Y);if(z)f.off(wj.ITEM_SELECTED,z)}else if(f instanceof dU){if(Y)f.on(hj.ITEM_SELECTED,Y);if(z)f.off(hj.ITEM_SELECTED,z)}break;case"style":for(let Z in Y){let q=Y[Z];if(z!==void 0&&q===z[Z])continue;f[Z]=q}break;case"text":case"content":{let Z=typeof Y==="string"?Y:Array.isArray(Y)?Y.join(""):`${Y}`;f[J]=Fz(Z);break}default:f[J]=Y}},isTextNode(f){return f instanceof AG},insertNode:XN,removeNode:qN,getParentNode:iU,getFirstChild(f){sf("Getting first child of node:",rf(f));let J=vj(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=iU(f);if(!J){sf("No parent found for node:",rf(f));return}let Y=vj(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}}));ij=class ij extends jN{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}};pU=class pU extends VN{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()}};_U=class _U extends ij{yogaNode;slotParent;destroyed=!1;constructor(f,J){super(f);this._visible=!1,this.slotParent=J,this.yogaNode=lU.default.Node.create(),this.yogaNode.setDisplay(lU.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};CZ=class CZ extends ij{layoutNode;textNode;destroyed=!1;constructor(f){super(f);this._visible=!1}getSlotChild(f){if(WN(f)||f instanceof KN){if(!this.textNode)this.textNode=new pU(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new _U(`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()}};kZ=class kZ extends _k{_ctx;constructor(f,J){super(J);this._ctx=f}};qQ=class qQ extends kZ{constructor(f,J){super(null,f);if(J==="b"||J==="strong")this.attributes=(this.attributes||0)|Ej.BOLD;else if(J==="i"||J==="em")this.attributes=(this.attributes||0)|Ej.ITALIC;else if(J==="u")this.attributes=(this.attributes||0)|Ej.UNDERLINE}};mj=class mj extends qQ{constructor(f){super(f,"b")}};cj=class cj extends qQ{constructor(f){super(f,"i")}};oU=class oU extends qQ{constructor(f){super(f,"u")}};sU=class sU extends kZ{constructor(f,J){super(null,J);this.add()}add(){return super.add(`
221
- `)}};tU=class tU extends kZ{constructor(f,J){let Y={...J,link:{url:J.href}};super(null,Y)}};UN={box:mk,text:ok,input:dk,select:$k,textarea:pk,ascii_font:vk,tab_select:rk,scrollbox:ak,code:ck,diff:nk,line_number:ik,markdown:lk,span:kZ,strong:mj,b:mj,em:cj,i:cj,u:oU,br:sU,a:tU},eU={...UN};DN({time_to_first_draw:MN})});function ON(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 Z=G;if(typeof Z?.added!=="number"||typeof Z.deleted!=="number")return null;Y.set(z,{added:Z.added,deleted:Z.deleted})}return Y}function AN(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,Z]=r(null),[q,Q]=r(null),[H,B]=r(null),[V,j]=r(new Map),[U,L]=r(new Map),[O,M]=r(null),[g,I]=r(null),[a,N]=r(null),[A,R]=r("online");this.tasksAcc=Y,this.setTasks=(S)=>z(()=>S),this.activeTaskAcc=G,this.setActiveTaskSig=(S)=>Z(()=>S),this.updateAcc=q,this.setUpdateSig=(S)=>Q(()=>S),this.daemonVersionAcc=H,this.setDaemonVersionSig=(S)=>B(()=>S),this.engineStateAcc=V,this.setEngineStateSig=(S)=>j(()=>S),this.taskJobsAcc=U,this.setTaskJobsSig=(S)=>L(()=>S),this.worktreeChangesAcc=O,this.setWorktreeChangesSig=(S)=>M(()=>S),this.uiPrefsAcc=g,this.setUiPrefsSig=(S)=>I(()=>S),this.keybindingsRevAcc=a,this.setKeybindingsRevSig=(S)=>N(()=>S),this.connectionStateAcc=A,this.setConnectionState=(S)=>R(()=>S),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("*",(S)=>this.handleEvent(S.name,S.payload)),this.client.onLifecycle("close",()=>{if(this.setConnectionState("disconnected"),this.role==="pane")nJ("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(),nJ("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)BY("orch-reconnect",Y);f=Math.min(f*2,3000)}}this.reconnecting=!1}async init(){let f=await this.client.request("hello",{protocolVersion:c1,minProtocolVersion:HY}),J=typeof f.protocolVersion==="number"?f.protocolVersion:c1,Y=typeof f.minProtocolVersion==="number"?f.minProtocolVersion:J;if(!FX({localVersion:c1,localMin:HY,remoteVersion:J,remoteMin:Y}))throw Error(`kobe daemon is protocol v${J} (min v${Y}); this client is v${c1} (min v${HY}). 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(NZ));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"),nJ("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()=>FW(this.daemonVersionAcc()??void 0,o0)}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 aY((Y)=>{return ff(()=>{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 NZ(z.task)}async ensureMainTask(f){let J=await this.client.request("task.ensureMain",{repo:f});return NZ(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 NZ(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(NZ)),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=ON(J);if(!Y)return;let z=this.worktreeChangesAcc();if(z&&AN(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 NZ(f){return{id:hG(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 EY=C(()=>{_Y();y1();rY();Wf();WG();S1();U1()});function z6(f){let J=f[JJ];if(!J){if(Object.defineProperty(f,JJ,{value:J=new Proxy(f,CN)}),!Array.isArray(f)){let Y=Object.keys(f),z=Object.getOwnPropertyDescriptors(f),G=Object.getPrototypeOf(f),Z=G!==null&&f!==null&&typeof f==="object"&&!Array.isArray(f)&&G!==Object.prototype;if(Z){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(Z&&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 QQ(f){let J;return f!=null&&typeof f==="object"&&(f[JJ]||!(J=Object.getPrototypeOf(f))||J===Object.prototype||Array.isArray(f))}function bZ(f,J=new Set){let Y,z,G,Z;if(Y=f!=null&&f[lj])return Y;if(!QQ(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=bZ(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(Z=q[H],Q[Z].get)continue;if(G=f[Z],(z=bZ(G,J))!==G)f[Z]=z}}return f}function HQ(f,J){let Y=f[J];if(!Y)Object.defineProperty(f,J,{value:Y=Object.create(null)});return Y}function SZ(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 gN(f,J){let Y=Reflect.getOwnPropertyDescriptor(f,J);if(!Y||Y.get||!Y.configurable||J===JJ||J===gG)return Y;return delete Y.value,delete Y.writable,Y.get=()=>f[JJ][J],Y}function G6(f){VX()&&SZ(HQ(f,gG),Y6)()}function RN(f){return G6(f),Reflect.ownKeys(f)}function BQ(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],Z=f.length;if(J6.onStoreNodeUpdate&&J6.onStoreNodeUpdate(f,J,Y,G),Y===void 0){if(delete f[J],f[eJ]&&f[eJ][J]&&G!==void 0)f[eJ][J].$()}else if(f[J]=Y,f[eJ]&&f[eJ][J]&&G===void 0)f[eJ][J].$();let q=HQ(f,gG),Q;if(Q=SZ(q,J,G))Q.$(()=>Y);if(Array.isArray(f)&&f.length!==Z){for(let H=f.length;H<Z;H++)(Q=q[H])&&Q.$();(Q=SZ(q,"length",Z))&&Q.$(f.length)}(Q=q[Y6])&&Q.$()}function Z6(f,J){let Y=Object.keys(J);for(let z=0;z<Y.length;z+=1){let G=Y[z];if(X6(G))continue;BQ(f,G,J[G])}}function X6(f){return f==="__proto__"||f==="constructor"||f==="prototype"}function kN(f,J){if(typeof J==="function")J=J(f);if(J=bZ(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)BQ(f,Y,G)}BQ(f,"length",z)}else Z6(f,J)}function yZ(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&&X6(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++)yZ(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))yZ(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)yZ(f,[j].concat(J),Y);return}else if(J.length>1){yZ(f[z],J,[z].concat(Y));return}G=f[z],Y=[z].concat(Y)}let Z=J[0];if(typeof Z==="function"){if(Z=Z(G,Y),Z===G)return}if(z===void 0&&Z==null)return;if(Z=bZ(Z),z===void 0||QQ(G)&&QQ(Z)&&!Array.isArray(Z))Z6(G,Z);else BQ(f,z,Z)}function uJ(...[f,J]){let Y=bZ(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=z6(Y);HW.registerGraph({value:Y,name:J&&J.name});function Z(...q){WX(()=>{z&&q.length===1?kN(Y,q[0]):yZ(Y,q)})}return[G,Z]}var lj,gG,eJ,Y6,J6,CN,Zc;var RG=C(()=>{Wf();lj=Symbol("store-raw"),gG=Symbol("store-node"),eJ=Symbol("store-has"),Y6=Symbol("store-self"),J6={onStoreNodeUpdate:null};CN={get(f,J,Y){if(J===lj)return f;if(J===JJ)return Y;if(J===HX)return G6(f),Y;let z=HQ(f,gG),G=z[J],Z=G?G():f[J];if(J===gG||J===eJ||J==="__proto__")return Z;if(!G){let q=Object.getOwnPropertyDescriptor(f,J);if(VX()&&(typeof Z!=="function"||f.hasOwnProperty(J))&&!(q&&q.get))Z=SZ(z,J,Z)()}return QQ(Z)?z6(Z):Z},has(f,J){if(J===lj||J===JJ||J===HX||J===gG||J===eJ||J==="__proto__")return!0;return VX()&&SZ(HQ(f,eJ),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:RN,getOwnPropertyDescriptor:gN};Zc=Symbol("store-root")});function jQ(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 aj=C(()=>{P();P();Wf()});import{RGBA as Oz}from"@opentui/core";function yN(){return Object.keys(z1.themes)}function IZ(f){return Boolean(z1.themes[f])}function rj(f,J){if(!f)return!1;if(!J||typeof J!=="object"||!J.theme)return!1;return Az("themes",{...z1.themes,[f]:J}),!0}function $j(f,J="dark"){let Y=f.defs??{};function z(H,B=[]){if(typeof H==="string"){if(H==="transparent"||H==="none")return Oz.fromInts(0,0,0,0);if(H.startsWith("#"))return Oz.fromHex(H);if(B.includes(H))return Oz.fromInts(0,0,0);let V=Y[H]??f.theme[H];if(V===void 0)return Oz.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 Z=G.text??Oz.fromHex("#ffffff"),q=G.background??Oz.fromHex("#000000");return{...{primary:G.primary??Z,secondary:G.secondary??Z,accent:G.accent??G.primary??Z,error:G.error??Z,warning:G.warning??Z,success:G.success??Z,info:G.info??Z,text:Z,textMuted:G.textMuted??Z,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??Z,borderActive:G.borderActive??G.border??Z,borderSubtle:G.borderSubtle??G.border??Z,diffAdded:G.diffAdded??G.success??Z,diffRemoved:G.diffRemoved??G.error??Z,diffContext:G.diffContext??G.textMuted??Z,diffHunkHeader:G.diffHunkHeader??G.textMuted??Z,diffAddedBg:G.diffAddedBg??q,diffRemovedBg:G.diffRemovedBg??q,selectedListItemText:G.selectedListItemText??q},...G}}var NN,gz,z1,Az,d0,q6;var Ef=C(()=>{P();Wf();RG();aj();qq();Qq();Hq();Bq();jq();Wq();Vq();NN={claude:oz,conductor:sz,nord:ez,opencode:fG,dracula:tz,tokyonight:YG,"osaka-jade":JG},gz=["primary","success","info"],[z1,Az]=uJ({themes:{...NN},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:d0,provider:q6}=jQ({name:"Theme",init:(f)=>{if(f.mode)Az("mode",f.mode);if(f.theme&&IZ(f.theme))Az("active",f.theme);let J=Y1(),Y=K0(()=>{let G=z1.themes[z1.active];if(G)return $j(G,z1.mode);let Z=z1.themes.claude??z1.themes.opencode??Object.values(z1.themes)[0];if(!Z)return $j({theme:{background:"#000000",text:"#ffffff"}},z1.mode);return $j(Z,z1.mode)}),z=K0(()=>{let G=Y(),Z=G[z1.focusAccent]??G.primary,q={...G,focusAccent:Z};if(!z1.transparentBackground)return q;let Q=Oz.fromInts(0,0,0,0);return{...q,background:Q,backgroundPanel:Q}});return ff(()=>{J?.setBackgroundColor(z().background)}),{theme:new Proxy({},{get(G,Z){let q=z();return q[Z]??q.text}}),get selected(){return z1.active},get transparentBackground(){return z1.transparentBackground},get focusAccent(){return z1.focusAccent},mode(){return z1.mode},set(G){if(!IZ(G))return!1;return Az("active",G),!0},setMode(G){Az("mode",G)},setTransparentBackground(G){Az("transparentBackground",G)},setFocusAccent(G){Az("focusAccent",G)},all(){return yN()},has(G){return IZ(G)}}}}))});var Q6,H6;var B6=C(()=>{Q6={cancel:"Cancel",confirm:"Confirm",rename:{defaultTitle:"Rename task",defaultFieldLabel:"title",footerHint:"enter {submitLabel} \xB7 esc cancel",defaultSubmitLabel:"rename"}},H6={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 j6,W6;var V6=C(()=>{j6={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"}},W6={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 K6,U6;var D6=C(()=>{K6={title:"kobe \u2014 keybindings",esc:"esc"},U6={title:"kobe \u2014 \u5FEB\u6377\u952E",esc:"esc"}});var L6,M6;var F6=C(()=>{L6={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)"}},M6={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 O6,A6;var g6=C(()=>{O6={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"}},A6={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 R6,C6;var k6=C(()=>{R6={badge:{newActivity:"\u25CF new"},preview:{diffVsHead:"diff vs HEAD",file:"file",closeHint:"\xB7 q to close",loading:"loading\u2026"}},C6={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 N6,y6;var b6=C(()=>{N6={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"},y6={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 S6,I6;var T6=C(()=>{S6={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)"}},I6={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 u6,E6;var x6=C(()=>{u6={view:{workspace:"Workspace",archives:"Archives"},header:{projects:"PROJECTS",tasks:"TASKS"},search:{placeholder:"fuzzy filter"},sort:"sort",project:{label:"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}"}},E6={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:{label:"\u9879\u76EE",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 w6,h6;var P6=C(()=>{w6={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`"}},h6={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 TZ(f){return typeof f==="string"&&Rz.some((J)=>J.id===f)}var bN,SN,Rz,CG,kG="en";var NG=C(()=>{B6();V6();D6();F6();g6();k6();b6();T6();x6();P6();bN={settings:S6,tasks:u6,files:j6,newTask:O6,ops:R6,update:w6,quickTask:N6,help:K6,common:Q6,keys:L6},SN={settings:I6,tasks:E6,files:W6,newTask:A6,ops:C6,update:h6,quickTask:y6,help:U6,common:H6,keys:M6},Rz=[{id:"en",label:"English"},{id:"zh",label:"\u4E2D\u6587"}],CG={en:bN,zh:SN}});function uZ(f){if(CG[f])IN("lang",f)}function _j(){return pj.lang}function v6(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 TN(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=pj.lang,z=v6(CG[Y],f)??v6(CG.en,f)??f;return TN(z,J)}function oj(f,J){let Y=pj.lang,z=(G)=>{return G.keys[f]?.[J]};return z(CG[Y])??z(CG.en)??J}var pj,IN;var G1=C(()=>{RG();NG();NG();[pj,IN]=uJ({lang:kG})});function uN(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((Z)=>G+Z)}function sj(f,J){if(J.defaultPrevented)return!1;let Y=uN(J);for(let z=f.length-1;z>=0;z--){let G=f[z];if(!G)continue;let Z=G.config();if(Z.enabled===!1)continue;let q=Z.bindings.find((Q)=>Y.includes(Q.key));if(q)return q.cmd(J,q.slot),J.preventDefault(),!0}return!1}function xN(){if(tj)return;let f=Y1();if(!f)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");tj=f.keyInput,m6=(J)=>{sj(WQ,J)},tj.on("keypress",m6)}function Df(f){xN();let J=EN++,Y={config:f,id:J};ff(()=>{f()}),WQ.push(Y),vf(()=>{let z=WQ.findIndex((G)=>G.id===J);if(z>=0)WQ.splice(z,1)})}var EN=1,WQ,tj=null,m6=null;var b1=C(()=>{P();Wf();WQ=[]});import{RGBA as c6}from"@opentui/core";function PN(f){let J=TJ(),Y=d0(),{theme:z}=Y,G=Y1(),Z=!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),X(B,"onMouseDown",()=>{Z=!!G?.getSelection()}),X(B,"onMouseUp",()=>{if(Z){Z=!1;return}f.onClose?.()}),X(B,"alignItems","center"),X(B,"justifyContent","center"),X(B,"position","absolute"),X(B,"zIndex",3000),X(B,"left",0),X(B,"top",0),X(V,"onMouseUp",(j)=>{Z=!1,j.stopPropagation()}),X(V,"flexShrink",1),X(V,"flexGrow",0),X(V,"paddingTop",1),K(V,()=>f.children),E((j)=>{var U=J().width,L=J().height,O=Y.transparentBackground?hN:wN,M=q(),g=J().width-2,I=H(),a=z.backgroundDialog;return U!==j.e&&(j.e=X(B,"width",U,j.e)),L!==j.t&&(j.t=X(B,"height",L,j.t)),O!==j.a&&(j.a=X(B,"backgroundColor",O,j.a)),M!==j.o&&(j.o=X(V,"width",M,j.o)),g!==j.i&&(j.i=X(V,"maxWidth",g,j.i)),I!==j.n&&(j.n=X(V,"maxHeight",I,j.n)),a!==j.s&&(j.s=X(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 vN(){let[f,J]=uJ({stack:[],size:"medium"}),Y=Y1(),z=null;function G(){setTimeout(()=>{if(!z)return;if(z.isDestroyed)return;function Z(Q){for(let H of Q.getChildren()){if(H===z)return!0;if(Z(H))return!0}return!1}let q=Y?.root;if(!q)return;if(!Z(q))return;z.focus()},1)}return Df(()=>({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 Z of f.stack)Z.onClose?.();WX(()=>{J("size","medium"),J("stack",[])}),G()},replace(Z,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:Z,onClose:q}])},push(Z,q){if(f.stack.length===0)z=Y?.currentFocusedRenderable??null,z?.blur();J("stack",[...f.stack,{element:Z,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(Z){J("size",Z)}}}function d6(f){let J=vN();return b(n6.Provider,{value:J,get children(){return[I0(()=>f.children),(()=>{var Y=W("box");return X(Y,"position","absolute"),X(Y,"zIndex",3000),K(Y,b(X0,{get when(){return J.stack.length},get children(){return b(PN,{onClose:()=>J.clear(),get size(){return J.size},get children(){return J.stack.at(-1).element()}})}})),Y})()]}})}function Pf(){let f=u1(n6);if(!f)throw Error("useDialog must be used within a DialogProvider");return f}var wN,hN,n6;var h1=C(()=>{P();P();P();P();P();P();P();P();Wf();RG();Ef();b1();wN=c6.fromInts(0,0,0,128),hN=c6.fromInts(0,0,0,64);n6=gJ()});import{spawnSync as ej}from"child_process";import*as l6 from"fs";function i6(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 a6(f){let J=f.trim();if(!J)return"repo path is required";let Y;try{Y=l6.statSync(J)}catch{return`path does not exist: ${J}`}if(!Y.isDirectory())return`not a directory: ${J}`;try{if(ej("git",["rev-parse","--git-dir"],{cwd:J,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return i6(J)}catch{return i6(J)}return null}function EZ(f){if(!f)return null;try{let J=ej("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 $6(f){if(!f)return[];try{let J=ej("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(`
222
- `).map((Y)=>Y.trim()).filter(Boolean).sort((Y,z)=>{let G=(Q)=>Q==="main"?0:Q==="master"?1:Q==="develop"?2:3,Z=G(Y),q=G(z);if(Z!==q)return Z-q;return Y.localeCompare(z)})}catch{return[]}}var LJ="main";var VQ=()=>{};import*as r6 from"fs";import*as KQ from"os";function W1(f){if(f==="~")return KQ.homedir();if(f.startsWith("~/"))return KQ.homedir()+f.slice(1);return f}function f8(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 J8(f){if(!f)return[];try{let J=r6.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 Y8(f,J){let Y=J.toLowerCase(),G=Y.startsWith(".")?f:f.filter((Z)=>!Z.startsWith("."));if(!Y)return G;return G.filter((Z)=>Z.toLowerCase().startsWith(Y))}function xZ(f,J,Y){let z=J+Y;if(f.startsWith("~")){let G=KQ.homedir();if(z===G)return"~";if(z.startsWith(`${G}/`))return`~${z.slice(G.length)}`}return z}var UQ=()=>{};import{spawn as mN}from"child_process";import*as Cz from"fs";import*as wZ from"path";function p6(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 _6(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 o6(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),Z;try{Z=Cz.statSync(G)}catch{return F("newTask.error.parentNotFound",{path:G})}if(!Z.isDirectory())return F("newTask.error.parentNotDir",{path:G});let q=wZ.join(G,Y);if(Cz.existsSync(q))return F("newTask.error.targetExists",{path:q});return null}function s6(f,J){return wZ.join(W1(f.trim()),J.trim())}function t6(f,J){let Y=J.trim();if(!Y)return J;let z=W1(f.trim());if(!z)return J;try{if(!Cz.statSync(z).isDirectory())return J}catch{return J}if(!Cz.existsSync(wZ.join(z,Y)))return Y;for(let G=2;G<1000;G++){let Z=`${Y}-${G}`;if(!Cz.existsSync(wZ.join(z,Z)))return Z}return Y}function e6(f,J,Y){return new Promise((z)=>{let G="";try{let Z=mN("git",["clone","--progress",f,J],{stdio:["ignore","ignore","pipe"]});Z.stderr?.setEncoding("utf-8"),Z.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)}}),Z.on("error",(q)=>{z({ok:!1,error:q.message})}),Z.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(Z){z({ok:!1,error:Z instanceof Error?Z.message:String(Z)})}})}var f4=C(()=>{G1();UQ()});function DQ(f){if(f==="existing")return"clone";if(f==="clone")return"adopt";return"existing"}function J4(f){if(f==="existing")return"adopt";if(f==="clone")return"existing";return"clone"}function Y4(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 z8(f,J="existing"){if(f==="confirm")return"tabs";if(f==="tabs")return"engine";if(f==="engine")return G8(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 G8(f){if(f==="clone")return"cloneUrl";if(f==="adopt")return"adoptFilter";return"repo"}function z4(f,J){let Y=J.trim();if(!Y)return f;return f.filter((z)=>rZ(Y,z.path))}function G4(f,J){let Y=new Set,z=[];for(let G of[f,...J]){let Z=G.trim();if(!Z||Y.has(Z))continue;Y.add(Z),z.push(Z)}return z}function Z4(f,J){let Y=J.trim().toLowerCase();if(!Y)return f;return f.filter((z)=>z.toLowerCase().includes(Y))}function X4(f,J){let Y=J.trim().toLowerCase();if(!Y)return f;return f.filter((z)=>z.toLowerCase().includes(Y))}function hZ(f,J,Y=cN){let z=f.length;if(z<=Y)return{items:f,start:0,total:z};let G=Math.floor(Y/2),Z=Math.max(0,J-G);if(Z+Y>z)Z=z-Y;return{items:f.slice(Z,Z+Y),start:Z,total:z}}function EJ(f,J){if(J<=0)return 0;return Math.max(0,Math.min(J-1,f))}function q4(f,J,Y){let z=J[Y];if(z)return z;return f.trim()||LJ}var cN=8;var Z8=C(()=>{hQ();VQ()});import{TextAttributes as _1}from"@opentui/core";function Q4(f){let J=Pf(),{theme:Y}=d0(),[z,G]=r("existing"),Z=()=>{let y=f.availableVendors;return y&&y.length>0?y:mf},q=(()=>{let y=Z(),A0=f.defaultVendor??"claude";return y.includes(A0)?A0:y[0]??"claude"})(),[Q,H]=r(q),[B,V]=r("tabs"),[j,U]=r(f.defaultRepo),[L,O]=r(EZ(W1(f.defaultRepo.trim()))??LJ),[M,g]=r(!1),[I,a]=r(""),[N,A]=r(f.defaultCloneParent?.trim()?f.defaultCloneParent:"~/"),[R,S]=r(""),[_,z0]=r(!1),[e,Y0]=r(LJ),[T,Q0]=r(!1),[t,V0]=r(""),C0=K0(()=>G4(f.defaultRepo,f.savedRepos)),$=K0(()=>Y4(j(),C0())),x=K0(()=>f8(j())),f0=K0(()=>J8(x().base)),u=K0(()=>Y8(f0(),x().filter)),G0=K0(()=>Z4(C0(),j())),w=K0(()=>$()==="browse"?u():G0()),[n,q0]=r(0),W0=K0(()=>hZ(w(),n())),[H0,k0]=r(!1),x0=K0(()=>$6(W1(j().trim()))),y0=K0(()=>X4(x0(),L())),[Gf,m]=r(0),L0=K0(()=>hZ(y0(),Gf())),s=K0(()=>f8(N())),R0=K0(()=>J8(s().base)),i0=K0(()=>Y8(R0(),s().filter)),[$0,w0]=r(0),v=K0(()=>hZ(i0(),$0())),[J0,M0]=r(!1),[_0,e0]=r(""),[T0,Xf]=r(0),[Qf,Rf]=r(new Set),[o]=jX(()=>z()==="adopt"?W1(j().trim()):null,async(y)=>f.discoverAdoptable?await f.discoverAdoptable(y):[]),p=K0(()=>z4(o()??[],_0())),Z0=K0(()=>hZ(p().map((y)=>y.path),T0())),D0=K0(()=>{let y=Z0();return p().slice(y.start,y.start+y.items.length)});ff(()=>{p(),Xf((y)=>EJ(y,p().length))});function j0(y){Rf((A0)=>{let m0=new Set(A0);if(m0.has(y))m0.delete(y);else m0.add(y);return m0})}function k(){let y=p()[T0()];if(y)j0(y.path)}ff(()=>{y0(),m(0)}),ff(()=>{let y=W1(j().trim());if(!y)return;if(M())return;let A0=EZ(y);if(A0)O(A0)}),ff(()=>{w(),q0(0)}),ff(()=>{i0(),w0(0)}),ff(()=>{let y=I(),A0=N();if(_())return;let m0=p6(y);S(t6(A0,m0))});let[N0,p0]=r(null);ff(()=>{j(),I(),N(),R(),_0(),p0(null)});function b0(){let y=W1(j().trim());if(!y)return;let A0=a6(y);if(A0){p0(A0),V("repo");return}let m0=L().trim()||LJ;f.onSubmit({repo:y,baseRef:m0,vendor:Q()}),J.clear()}async function U0(){if(T())return;let y=_6(I());if(y){p0(y),V("cloneUrl");return}let A0=o6(N(),R());if(A0){p0(A0),V(R().trim()?"cloneParent":"cloneFolder");return}let m0=s6(N(),R());Q0(!0),V0(F("newTask.clone.progressInto",{target:m0}));let u0=await e6(I().trim(),m0,(tf)=>{V0(tf)});if(Q0(!1),!u0.ok){p0(F("newTask.error.cloneFailed",{error:u0.error})),V("cloneUrl");return}let X1=e().trim()||LJ,V1=W1(N().trim());f.onSubmit({repo:u0.path,baseRef:X1,vendor:Q(),cloned:{parentDir:V1}}),J.clear()}function h0(){let y=p();if(y.length===0){p0(F("newTask.error.noAdoptable"));return}let A0=Qf(),m0=A0.size>0?y.filter((u0)=>A0.has(u0.path)):y.slice(T0(),T0()+1);if(m0.length===0)return;f.onSubmit({mode:"adopt",repo:W1(j().trim()),vendor:Q(),adopt:m0.map((u0)=>({worktreePath:u0.path,branch:u0.branch}))}),J.clear()}function O0(){if(z()==="clone"){U0();return}if(z()==="adopt"){h0();return}b0()}function r0(y){if(T())return;if(y===z())return;G(y),V(G8(y)),p0(null)}function l0(y){if(T())return;let A0=y===1?DQ(z()):J4(z());if(A0===z())return;G(A0),p0(null),V("tabs")}function Yf(y){H((A0)=>y===1?GY(Z(),A0):PQ(Z(),A0))}function S0(){if(!j().trim()&&$()==="saved"){let A0=w()[0];if(A0){U(A0),V("baseRef");return}}if($()==="browse"){let m0=u()[n()],u0=x();if(m0){U(xZ(j(),u0.base,m0)),q0(0),k0(!0),V("baseRef");return}V("baseRef");return}let y=w()[n()];if(y){U(y),V("baseRef");return}V("baseRef")}function xf(y){let m0=w()[y];if(!m0)return;if($()==="browse"){let u0=x();U(xZ(j(),u0.base,m0)),q0(y),k0(!0),V("baseRef");return}U(m0),q0(y),V("baseRef")}function df(){let A0=i0()[$0()],m0=s();if(A0){A(xZ(N(),m0.base,A0)),w0(0),M0(!0),V("cloneFolder");return}V("cloneFolder")}function d(y){let m0=i0()[y];if(!m0)return;let u0=s();A(xZ(N(),u0.base,m0)),w0(y),M0(!0),V("cloneFolder")}let g0=()=>{let y=p();if(y.length===0)return;let A0=y.every((m0)=>Qf().has(m0.path));Rf(A0?new Set:new Set(y.map((m0)=>m0.path)))};Df(()=>({bindings:[{key:"tab",cmd:()=>V((y)=>z8(y,z()))},{key:"ctrl+]",cmd:()=>r0(DQ(z()))},{key:"ctrl+[",cmd:()=>r0(DQ(z()))},{key:"ctrl+e",cmd:()=>H((y)=>GY(Z(),y))},{key:"up",cmd:()=>{if(T())return;if(z()==="existing"&&B()==="repo"){let y=w();if(y.length===0)return;q0(EJ(n()-1,y.length));return}if(z()==="existing"&&B()==="baseRef"){let y=y0();if(y.length===0)return;m(EJ(Gf()-1,y.length));return}if(z()==="clone"&&B()==="cloneParent"){let y=i0();if(y.length===0)return;w0(EJ($0()-1,y.length));return}if(z()==="adopt"){let y=p();if(y.length===0)return;Xf(EJ(T0()-1,y.length))}}},{key:"down",cmd:()=>{if(T())return;if(z()==="existing"&&B()==="repo"){let y=w();if(y.length===0)return;q0(EJ(n()+1,y.length));return}if(z()==="existing"&&B()==="baseRef"){let y=y0();if(y.length===0)return;m(EJ(Gf()+1,y.length));return}if(z()==="clone"&&B()==="cloneParent"){let y=i0();if(y.length===0)return;w0(EJ($0()+1,y.length));return}if(z()==="adopt"){let y=p();if(y.length===0)return;Xf(EJ(T0()+1,y.length))}}},...B()==="tabs"||B()==="engine"?[{key:"left",cmd:()=>B()==="tabs"?l0(-1):Yf(-1)},{key:"right",cmd:()=>B()==="tabs"?l0(1):Yf(1)},{key:"return",cmd:()=>V((y)=>z8(y,z()))}]:[],...z()==="adopt"?[{key:"ctrl+a",cmd:g0}]:[]]})),Df(()=>({enabled:B()==="confirm"&&!T(),bindings:[{key:"return",cmd:()=>O0()}]}));let Kf=(y)=>B()===y?Y.primary:Y.textMuted,qf=(y)=>B()===y?_1.BOLD|_1.UNDERLINE:void 0,Of=(y,A0)=>y?A0?_1.BOLD|_1.UNDERLINE:_1.BOLD:void 0;return(()=>{var y=W("box"),A0=W("box"),m0=W("text"),u0=W("box"),X1=W("box"),V1=W("text"),tf=W("box"),P1=W("box"),xJ=W("text"),M1=W("box"),yz=W("text"),YY=W("text");return D(y,A0),D(y,u0),D(y,M1),X(y,"paddingLeft",2),X(y,"paddingRight",2),X(y,"gap",0),D(A0,m0),X(A0,"flexDirection","row"),K(m0,()=>F("newTask.title")),D(u0,X1),X(u0,"gap",1),X(u0,"paddingTop",1),X(u0,"paddingBottom",1),K(u0,()=>{let c=()=>B()==="tabs",i=(l)=>l?Y.primary:Y.textMuted;return(()=>{var l=W("box"),h=W("text"),c0=W("text"),P0=W("text");return D(l,h),D(l,c0),D(l,P0),X(l,"flexDirection","row"),X(l,"gap",2),X(h,"onMouseUp",()=>r0("existing")),K(h,(()=>{var F0=I0(()=>z()==="existing");return()=>F0()?`\u25B8 ${F("newTask.tabs.existing")}`:` ${F("newTask.tabs.existing")}`})()),X(c0,"onMouseUp",()=>r0("clone")),K(c0,(()=>{var F0=I0(()=>z()==="clone");return()=>F0()?`\u25B8 ${F("newTask.tabs.clone")}`:` ${F("newTask.tabs.clone")}`})()),X(P0,"onMouseUp",()=>r0("adopt")),K(P0,(()=>{var F0=I0(()=>z()==="adopt");return()=>F0()?`\u25B8 ${F("newTask.tabs.adopt")}`:` ${F("newTask.tabs.adopt")}`})()),E((F0)=>{var n0=i(z()==="existing"),Hf=Of(z()==="existing",c()),Lf=i(z()==="clone"),q1=Of(z()==="clone",c()),s1=i(z()==="adopt"),zY=Of(z()==="adopt",c());return n0!==F0.e&&(F0.e=X(h,"fg",n0,F0.e)),Hf!==F0.t&&(F0.t=X(h,"attributes",Hf,F0.t)),Lf!==F0.a&&(F0.a=X(c0,"fg",Lf,F0.a)),q1!==F0.o&&(F0.o=X(c0,"attributes",q1,F0.o)),s1!==F0.i&&(F0.i=X(P0,"fg",s1,F0.i)),zY!==F0.n&&(F0.n=X(P0,"attributes",zY,F0.n)),F0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),l})()},X1),D(X1,V1),D(X1,tf),X(X1,"gap",0),K(V1,()=>F("newTask.field.engine")),D(tf,P1),D(tf,xJ),X(tf,"flexDirection","row"),X(tf,"gap",2),K(tf,b(Zf,{get each(){return Z()},children:(c)=>{let i=()=>Q()===c;return(()=>{var l=W("text");return X(l,"onMouseUp",()=>H(c)),K(l,()=>i()?"\u25B8 ":" ",null),K(l,c,null),E((h)=>{var c0=i()?Y.primary:Y.textMuted,P0=i()?_1.BOLD:void 0;return c0!==h.e&&(h.e=X(l,"fg",c0,h.e)),P0!==h.t&&(h.t=X(l,"attributes",P0,h.t)),h},{e:void 0,t:void 0}),l})()}}),P1),X(P1,"flexGrow",1),K(xJ,()=>F("newTask.hint.engineCycle")),K(u0,b(X0,{get when(){return z()==="existing"},get children(){return[(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),K(i,()=>F("newTask.field.repo")),X(l,"onInput",(h)=>{k0(!1),U(Z1(h))}),X(l,"onSubmit",()=>{if(!j().trim())return;S0()}),E((h)=>{var c0=Kf("repo"),P0=qf("repo"),F0=j(),n0=f.defaultRepo,Hf=B()==="repo";return c0!==h.e&&(h.e=X(i,"fg",c0,h.e)),P0!==h.t&&(h.t=X(i,"attributes",P0,h.t)),F0!==h.a&&(h.a=X(l,"value",F0,h.a)),n0!==h.o&&(h.o=X(l,"placeholder",n0,h.o)),Hf!==h.i&&(h.i=X(l,"focused",Hf,h.i)),h},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),c})(),b(X0,{get when(){return I0(()=>B()==="repo"&&w().length>0)()&&!H0()},get children(){var c=W("box");return X(c,"gap",0),X(c,"paddingLeft",2),K(c,b(X0,{get when(){return W0().start>0},get children(){var i=W("text");return X(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:W0().start})),E((l)=>X(i,"fg",Y.textMuted,l)),i}}),null),K(c,b(Zf,{get each(){return W0().items},children:(i,l)=>{let h=()=>W0().start+l(),c0=()=>h()===n(),P0=()=>$()==="saved"&&i===f.defaultRepo,F0=()=>$()==="saved"&&j().trim()===i,n0=()=>$()==="browse"?"/":"",Hf=()=>P0()?` ${F("newTask.hint.currentDir")}`:"";return(()=>{var Lf=W("text");return X(Lf,"wrapMode","none"),X(Lf,"onMouseUp",()=>xf(h())),K(Lf,()=>c0()?"\u25B8 ":" ",null),K(Lf,i,null),K(Lf,n0,null),K(Lf,Hf,null),E((q1)=>{var s1=c0()?Y.primary:F0()?Y.accent:Y.textMuted,zY=c0()?_1.BOLD:void 0;return s1!==q1.e&&(q1.e=X(Lf,"fg",s1,q1.e)),zY!==q1.t&&(q1.t=X(Lf,"attributes",zY,q1.t)),q1},{e:void 0,t:void 0}),Lf})()}}),null),K(c,b(X0,{get when(){return W0().start+W0().items.length<W0().total},get children(){var i=W("text");return X(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:W0().total-W0().start-W0().items.length})),E((l)=>X(i,"fg",Y.textMuted,l)),i}}),null),c}}),(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),K(i,()=>F("newTask.field.fromBranch")),X(l,"placeholder",LJ),X(l,"onInput",(h)=>{g(!0),O(Z1(h))}),X(l,"onSubmit",()=>{O(q4(L(),y0(),Gf())),g(!0),b0()}),E((h)=>{var c0=Kf("baseRef"),P0=qf("baseRef"),F0=L(),n0=B()==="baseRef";return c0!==h.e&&(h.e=X(i,"fg",c0,h.e)),P0!==h.t&&(h.t=X(i,"attributes",P0,h.t)),F0!==h.a&&(h.a=X(l,"value",F0,h.a)),n0!==h.o&&(h.o=X(l,"focused",n0,h.o)),h},{e:void 0,t:void 0,a:void 0,o:void 0}),c})(),b(X0,{get when(){return I0(()=>B()==="baseRef"&&y0().length===0)()&&N0()==null},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"gap",0),X(c,"paddingLeft",2),X(c,"paddingBottom",1),X(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>x0().length===0);return()=>l()?F("newTask.hint.noBranchesFound"):F("newTask.hint.noMatchBranch")})()),E((l)=>X(i,"fg",Y.textMuted,l)),c}}),b(X0,{get when(){return I0(()=>B()==="baseRef")()&&y0().length>0},get children(){var c=W("box");return X(c,"gap",0),X(c,"paddingLeft",2),X(c,"paddingBottom",1),K(c,b(X0,{get when(){return L0().start>0},get children(){var i=W("text");return X(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:L0().start})),E((l)=>X(i,"fg",Y.textMuted,l)),i}}),null),K(c,b(Zf,{get each(){return L0().items},children:(i,l)=>{let h=()=>L0().start+l(),c0=()=>h()===Gf(),P0=()=>L().trim()===i;return(()=>{var F0=W("text");return X(F0,"wrapMode","none"),X(F0,"onMouseUp",()=>{O(i),g(!0),m(h()),V("confirm")}),K(F0,()=>c0()?"\u25B8 ":" ",null),K(F0,i,null),E((n0)=>{var Hf=c0()?Y.primary:P0()?Y.accent:Y.textMuted,Lf=c0()?_1.BOLD:void 0;return Hf!==n0.e&&(n0.e=X(F0,"fg",Hf,n0.e)),Lf!==n0.t&&(n0.t=X(F0,"attributes",Lf,n0.t)),n0},{e:void 0,t:void 0}),F0})()}}),null),K(c,b(X0,{get when(){return L0().start+L0().items.length<L0().total},get children(){var i=W("text");return X(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:L0().total-L0().start-L0().items.length})),E((l)=>X(i,"fg",Y.textMuted,l)),i}}),null),c}})]}}),null),K(u0,b(X0,{get when(){return z()==="clone"},get children(){return[(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),K(i,()=>F("newTask.field.gitUrl")),X(l,"placeholder","https://github.com/user/repo.git"),X(l,"onInput",(h)=>a(Z1(h))),X(l,"onSubmit",()=>{if(!I().trim())return;V("cloneParent")}),E((h)=>{var c0=Kf("cloneUrl"),P0=qf("cloneUrl"),F0=I(),n0=B()==="cloneUrl";return c0!==h.e&&(h.e=X(i,"fg",c0,h.e)),P0!==h.t&&(h.t=X(i,"attributes",P0,h.t)),F0!==h.a&&(h.a=X(l,"value",F0,h.a)),n0!==h.o&&(h.o=X(l,"focused",n0,h.o)),h},{e:void 0,t:void 0,a:void 0,o:void 0}),c})(),(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),K(i,()=>F("newTask.field.parentDir")),X(l,"placeholder","~/"),X(l,"onInput",(h)=>{M0(!1),A(Z1(h))}),X(l,"onSubmit",()=>df()),E((h)=>{var c0=Kf("cloneParent"),P0=qf("cloneParent"),F0=N(),n0=B()==="cloneParent";return c0!==h.e&&(h.e=X(i,"fg",c0,h.e)),P0!==h.t&&(h.t=X(i,"attributes",P0,h.t)),F0!==h.a&&(h.a=X(l,"value",F0,h.a)),n0!==h.o&&(h.o=X(l,"focused",n0,h.o)),h},{e:void 0,t:void 0,a:void 0,o:void 0}),c})(),b(X0,{get when(){return B()==="cloneParent"},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"paddingLeft",2),X(i,"wrapMode","none"),K(i,()=>F("newTask.hint.remembered")),E((l)=>X(i,"fg",Y.textMuted,l)),c}}),b(X0,{get when(){return I0(()=>B()==="cloneParent"&&i0().length>0)()&&!J0()},get children(){var c=W("box");return X(c,"gap",0),X(c,"paddingLeft",2),K(c,b(X0,{get when(){return v().start>0},get children(){var i=W("text");return X(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:v().start})),E((l)=>X(i,"fg",Y.textMuted,l)),i}}),null),K(c,b(Zf,{get each(){return v().items},children:(i,l)=>{let h=()=>v().start+l(),c0=()=>h()===$0();return(()=>{var P0=W("text"),F0=E0("/");return D(P0,F0),X(P0,"wrapMode","none"),X(P0,"onMouseUp",()=>d(h())),K(P0,()=>c0()?"\u25B8 ":" ",F0),K(P0,i,F0),E((n0)=>{var Hf=c0()?Y.primary:Y.textMuted,Lf=c0()?_1.BOLD:void 0;return Hf!==n0.e&&(n0.e=X(P0,"fg",Hf,n0.e)),Lf!==n0.t&&(n0.t=X(P0,"attributes",Lf,n0.t)),n0},{e:void 0,t:void 0}),P0})()}}),null),K(c,b(X0,{get when(){return v().start+v().items.length<v().total},get children(){var i=W("text");return X(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:v().total-v().start-v().items.length})),E((l)=>X(i,"fg",Y.textMuted,l)),i}}),null),c}}),(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),K(i,()=>F("newTask.field.folderName")),X(l,"onInput",(h)=>{z0(!0),S(Z1(h))}),X(l,"onSubmit",()=>V("cloneBaseRef")),E((h)=>{var c0=Kf("cloneFolder"),P0=qf("cloneFolder"),F0=R(),n0=F("newTask.placeholder.folderName"),Hf=B()==="cloneFolder";return c0!==h.e&&(h.e=X(i,"fg",c0,h.e)),P0!==h.t&&(h.t=X(i,"attributes",P0,h.t)),F0!==h.a&&(h.a=X(l,"value",F0,h.a)),n0!==h.o&&(h.o=X(l,"placeholder",n0,h.o)),Hf!==h.i&&(h.i=X(l,"focused",Hf,h.i)),h},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),c})(),(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),K(i,()=>F("newTask.field.baseBranch")),X(l,"placeholder",LJ),X(l,"onInput",(h)=>Y0(Z1(h))),X(l,"onSubmit",()=>void U0()),E((h)=>{var c0=Kf("cloneBaseRef"),P0=qf("cloneBaseRef"),F0=e(),n0=B()==="cloneBaseRef";return c0!==h.e&&(h.e=X(i,"fg",c0,h.e)),P0!==h.t&&(h.t=X(i,"attributes",P0,h.t)),F0!==h.a&&(h.a=X(l,"value",F0,h.a)),n0!==h.o&&(h.o=X(l,"focused",n0,h.o)),h},{e:void 0,t:void 0,a:void 0,o:void 0}),c})(),b(X0,{get when(){return T()},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"gap",0),X(c,"paddingLeft",2),X(i,"wrapMode","none"),K(i,()=>t()||F("newTask.clone.progressFallback")),E((l)=>X(i,"fg",Y.textMuted,l)),c}})]}}),null),K(u0,b(X0,{get when(){return z()==="adopt"},get children(){return[(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),K(i,()=>F("newTask.field.adoptFilter")),X(l,"onInput",(h)=>e0(Z1(h))),X(l,"onSubmit",()=>k()),E((h)=>{var c0=Kf("adoptFilter"),P0=qf("adoptFilter"),F0=_0(),n0=F("newTask.placeholder.adoptFilter"),Hf=B()==="adoptFilter";return c0!==h.e&&(h.e=X(i,"fg",c0,h.e)),P0!==h.t&&(h.t=X(i,"attributes",P0,h.t)),F0!==h.a&&(h.a=X(l,"value",F0,h.a)),n0!==h.o&&(h.o=X(l,"placeholder",n0,h.o)),Hf!==h.i&&(h.i=X(l,"focused",Hf,h.i)),h},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),c})(),(()=>{var c=W("box"),i=W("text");return D(c,i),X(c,"paddingLeft",2),X(i,"wrapMode","none"),K(i,()=>F("newTask.adopt.repoLine",{path:W1(j().trim())||F("newTask.adopt.repoNone")})),E((l)=>X(i,"fg",Y.textMuted,l)),c})(),b(X0,{get when(){return o.loading},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"paddingLeft",2),X(i,"wrapMode","none"),K(i,()=>F("newTask.hint.scanningWorktrees")),E((l)=>X(i,"fg",Y.textMuted,l)),c}}),b(X0,{get when(){return I0(()=>!o.loading)()&&p().length===0},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"paddingLeft",2),X(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>(o()??[]).length===0);return()=>l()?F("newTask.adopt.noUnlinked"):F("newTask.adopt.noMatch")})()),E((l)=>X(i,"fg",Y.textMuted,l)),c}}),b(X0,{get when(){return p().length>0},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"gap",0),X(c,"paddingLeft",2),K(c,b(X0,{get when(){return Z0().start>0},get children(){var l=W("text");return X(l,"wrapMode","none"),K(l,()=>F("newTask.picker.moreAbove",{count:Z0().start})),E((h)=>X(l,"fg",Y.textMuted,h)),l}}),i),K(c,b(Zf,{get each(){return D0()},children:(l,h)=>{let c0=()=>Z0().start+h(),P0=()=>c0()===T0(),F0=()=>Qf().has(l.path),n0=()=>[l.dirty?"dirty":"",l.kobeManaged?"":"external"].filter(Boolean).join(",");return(()=>{var Hf=W("text");return X(Hf,"wrapMode","none"),X(Hf,"onMouseUp",()=>{Xf(c0()),j0(l.path)}),K(Hf,()=>P0()?"\u25B8 ":" ",null),K(Hf,()=>F0()?"[x] ":"[ ] ",null),K(Hf,()=>l.branch,null),K(Hf,(()=>{var Lf=I0(()=>!!n0());return()=>Lf()?` (${n0()})`:""})(),null),E((Lf)=>{var q1=P0()?Y.primary:F0()?Y.accent:Y.textMuted,s1=P0()?_1.BOLD:void 0;return q1!==Lf.e&&(Lf.e=X(Hf,"fg",q1,Lf.e)),s1!==Lf.t&&(Lf.t=X(Hf,"attributes",s1,Lf.t)),Lf},{e:void 0,t:void 0}),Hf})()}}),i),K(c,b(X0,{get when(){return Z0().start+Z0().items.length<Z0().total},get children(){var l=W("text");return X(l,"wrapMode","none"),K(l,()=>F("newTask.picker.moreBelow",{count:Z0().total-Z0().start-Z0().items.length})),E((h)=>X(l,"fg",Y.textMuted,h)),l}}),i),X(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>Qf().size>0);return()=>l()?F("newTask.adopt.hintSelected",{count:Qf().size}):F("newTask.adopt.hintDefault")})()),E((l)=>X(i,"fg",Y.textMuted,l)),c}})]}}),null),K(u0,b(X0,{get when(){return N0()},get children(){var c=W("text"),i=E0("\u203B ");return D(c,i),X(c,"wrapMode","word"),K(c,N0,null),E((l)=>X(c,"fg",Y.error,l)),c}}),null),D(M1,yz),D(M1,YY),X(M1,"flexDirection","row"),X(M1,"justifyContent","space-between"),X(M1,"alignItems","center"),X(M1,"paddingTop",1),X(M1,"paddingBottom",1),K(yz,()=>F("newTask.hint.legend")),X(YY,"onMouseUp",()=>O0()),K(YY,(()=>{var c=I0(()=>!!T());return()=>c()?F("newTask.button.cloning"):I0(()=>B()==="confirm")()?F("newTask.button.createFocused"):F("newTask.button.create")})()),E((c)=>{var i=_1.BOLD,l=Y.text,h=Kf("engine"),c0=qf("engine"),P0=Y.textMuted,F0=Y.textMuted,n0=B()==="confirm"?Y.primary:Y.text,Hf=B()==="confirm"?_1.BOLD:void 0;return i!==c.e&&(c.e=X(m0,"attributes",i,c.e)),l!==c.t&&(c.t=X(m0,"fg",l,c.t)),h!==c.a&&(c.a=X(V1,"fg",h,c.a)),c0!==c.o&&(c.o=X(V1,"attributes",c0,c.o)),P0!==c.i&&(c.i=X(xJ,"fg",P0,c.i)),F0!==c.n&&(c.n=X(yz,"fg",F0,c.n)),n0!==c.s&&(c.s=X(YY,"fg",n0,c.s)),Hf!==c.h&&(c.h=X(YY,"attributes",Hf,c.h)),c},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),y})()}var H4=C(()=>{P();P();P();P();P();P();P();P();G1();K1();Wf();Ef();VQ();b1();UQ();h1();f4();Z8()});function nN(f,J,Y,z){return new Promise((G)=>{f.replace(()=>b(Q4,{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:(Z)=>G(Z),onCancel:()=>G(void 0)}),()=>G(void 0)),f.setSize("medium")})}var LQ;var yG=C(()=>{P();H4();Z8();LQ={show:nN}});function B4(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 j4}from"@opentui/core";function dN(f){let J=Pf(),{theme:Y}=d0(),[z,G]=r("prompt"),[Z,q]=r(""),[Q,H]=r(f.defaultVendor),[B,V]=r(f.defaultBaseRef);function j(M){let g=MQ.indexOf(z());G(MQ[(g+M+MQ.length)%MQ.length]??"prompt")}function U(M){let g=f.engines;if(g.length===0)return;if(M>0){H((a)=>GY(g,a));return}let I=Math.max(0,g.indexOf(Q()));H(g[(I-1+g.length)%g.length]??Q())}function L(){let M=Z().trim();if(!M){G("prompt");return}f.onSubmit({prompt:M,vendor:Q(),baseRef:B().trim()||f.defaultBaseRef}),J.clear()}Df(()=>({enabled:!0,bindings:B4(z(),{cycleField:j,stepEngine:U,commit:L})}));let O=(M)=>z()===M?Y.accent:Y.textMuted;return(()=>{var M=W("box"),g=W("box"),I=W("text"),a=W("text"),N=W("box"),A=W("text"),R=W("input"),S=W("box"),_=W("text"),z0=W("box"),e=W("text"),Y0=W("input"),T=W("box"),Q0=W("text");return D(M,g),D(M,N),D(M,S),D(M,z0),D(M,T),X(M,"paddingLeft",2),X(M,"paddingRight",2),X(M,"gap",1),D(g,I),D(g,a),X(g,"flexDirection","row"),X(g,"justifyContent","space-between"),K(I,()=>F("quickTask.title",{repoLabel:f.repoLabel})),X(a,"onMouseUp",()=>f.onCancel()),K(a,()=>F("quickTask.esc")),D(N,A),D(N,R),X(N,"gap",0),K(A,()=>F("quickTask.promptLabel")),X(R,"onInput",(t)=>q(Z1(t))),X(R,"onSubmit",()=>L()),D(S,_),X(S,"flexDirection","row"),X(S,"gap",2),K(_,()=>F("quickTask.engineLabel")),K(S,b(Zf,{get each(){return f.engines},children:(t)=>(()=>{var V0=W("text");return X(V0,"onMouseUp",()=>{H(t),G("engine")}),K(V0,()=>f.engineLabel(t)),E((C0)=>{var $=Q()===t?Y.primary:Y.textMuted,x=Q()===t?j4.BOLD:void 0;return $!==C0.e&&(C0.e=X(V0,"fg",$,C0.e)),x!==C0.t&&(C0.t=X(V0,"attributes",x,C0.t)),C0},{e:void 0,t:void 0}),V0})()}),null),D(z0,e),D(z0,Y0),X(z0,"gap",0),K(e,()=>F("quickTask.branchLabel")),X(Y0,"onInput",(t)=>V(Z1(t))),X(Y0,"onSubmit",()=>L()),D(T,Q0),X(T,"paddingBottom",1),K(Q0,()=>F("quickTask.legend")),E((t)=>{var V0=j4.BOLD,C0=Y.text,$=Y.textMuted,x=O("prompt"),f0=Z(),u=F("quickTask.promptPlaceholder"),G0=z()==="prompt",w=O("engine"),n=O("branch"),q0=B(),W0=f.defaultBaseRef,H0=z()==="branch",k0=Y.textMuted;return V0!==t.e&&(t.e=X(I,"attributes",V0,t.e)),C0!==t.t&&(t.t=X(I,"fg",C0,t.t)),$!==t.a&&(t.a=X(a,"fg",$,t.a)),x!==t.o&&(t.o=X(A,"fg",x,t.o)),f0!==t.i&&(t.i=X(R,"value",f0,t.i)),u!==t.n&&(t.n=X(R,"placeholder",u,t.n)),G0!==t.s&&(t.s=X(R,"focused",G0,t.s)),w!==t.h&&(t.h=X(_,"fg",w,t.h)),n!==t.r&&(t.r=X(e,"fg",n,t.r)),q0!==t.d&&(t.d=X(Y0,"value",q0,t.d)),W0!==t.l&&(t.l=X(Y0,"placeholder",W0,t.l)),H0!==t.u&&(t.u=X(Y0,"focused",H0,t.u)),k0!==t.c&&(t.c=X(Q0,"fg",k0,t.c)),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}),M})()}function iN(f,J){return new Promise((Y)=>{f.replace(()=>b(dN,rU(J,{onSubmit:(z)=>Y(z),onCancel:()=>Y(void 0)})),()=>Y(void 0)),f.setSize("medium")})}var MQ,W4;var V4=C(()=>{P();P();P();P();P();P();P();Wf();K1();Ef();G1();b1();h1();yG();MQ=["prompt","engine","branch"];W4={show:iN}});async function K4(f={}){let J=f.logTag??"orch-connect",Y=f.connect??p1,z=null;try{let G=await Y();if(!G)return nJ(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 BY(J,G),z?.dispose(),null}}var U4=C(()=>{_Y();y1();EY()});function D4(f){let[J,Y]=r(f.initial??"sidebar"),[z,G]=r(0),Z=Y1();function q(j){if(G((L)=>L+1),J()===j)return;let U=Z?.currentFocusedRenderable;if(U&&!U.isDestroyed)try{U.blur()}catch{}Y(j)}function Q(j){let L=(FQ.indexOf(J())+j+FQ.length)%FQ.length;q(FQ[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(lN.Provider,{value:V,get children(){return f.children}})}var FQ,lN;var L4=C(()=>{P();P();Wf();FQ=["sidebar","workspace","files","terminal"],lN=gJ(null)});function M4(){for(let f of xY){let J=aN.get(f.id);if(!J)continue;let Y=f;Y.keys=[...J.keys],Y.hint=J.hint?{...J.hint}:void 0}}function F4(){$N((f)=>f+1)}function q8(f){return rN.get(f)}function pN(f){return q8(f)?.keys??[]}function wY(f){let J=[];for(let Y in f){let z=f[Y];if(!z)continue;let G=pN(Y);if(G.length===0){console.warn(`[kobe/keybindings] bindByIds: id="${Y}" has no chords (or doesn't exist in KobeKeymap)`);continue}G.forEach((Z,q)=>J.push({key:Z,cmd:z,slot:q}))}return J}var xY,aN,X8,$N,rN;var bG=C(()=>{Wf();xY=[{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"}}],aN=new Map(xY.map((f)=>[f.id,{keys:[...f.keys],hint:f.hint?{...f.hint}:void 0}]));[X8,$N]=r(0);rN=new Map(xY.map((f)=>[f.id,f]))});function OQ(){if(hY)return hY;let f=Dq();if(!f.exists)return hY={path:f.path,exists:!1,applied:[],warnings:[]},hY;let J=[...f.warnings],Y=Mq(f.doc,process.platform,{chordOptsFor:wB});J.push(...Y.warnings);let z=Y.entries.filter((Q)=>Q.id.startsWith("tmux.")),G=Y.entries.filter((Q)=>!Q.id.startsWith("tmux.")),Z=m7(xY,G);J.push(...Z.warnings);let q=[...Z.applied];if(z.length>0){let Q=xB(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:RY});continue}let B=Q.binds[H];q.push({id:H,keys:B?[B.chord]:[],defaultKeys:[Kz[H]]});let V=xY.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 hY={path:f.path,exists:!0,applied:q,warnings:J},hY}function O4(){return hY??OQ()}function A4(){hY=null,v7(),i7(),M4();let f=OQ();return F4(),f}var hY=null;var Q8=C(()=>{uB();Aq();Fq();bG()});var _N=250,SG,g4;var PZ=C(()=>{RG();lY();aj();({use:SG,provider:g4}=jQ({name:"KV",init:()=>{let[f,J]=uJ(cf()),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 iY(H),Y.clear(),!0}catch(H){return console.error(`[kobe] kv ${Q} failed:`,H),!1}}function Z(){if(z)clearTimeout(z);z=setTimeout(()=>{z=null,G("write")},_N)}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),Z()},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{U9({})}catch(Q){console.error("[kobe] kv clear write failed:",Q)}}};return q}}))});var AQ="../pulse-n3cq1btw.wav";var R4=()=>{};import{existsSync as sN,mkdirSync as tN}from"fs";import{tmpdir as eN}from"os";import{basename as fy,isAbsolute as Jy,join as H8,resolve as Yy}from"path";function Gy(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 Zy(){if(gQ!==void 0)return gQ;let J=(process.env.PATH??"").split(":").filter(Boolean);return gQ=zy.find((Y)=>J.some((z)=>sN(H8(z,Y))))??null,gQ}async function Xy(){return N4??=(async()=>{tN(k4,{recursive:!0});let f=H8(k4,fy(C4)),J=Bun.file(f);if(await J.exists())return f;return await Bun.write(J,Bun.file(C4)),f})(),N4}function y4(f=0.4){let J=Zy();if(!J)return;Xy().then((Y)=>{try{Bun.spawn(Gy(J,Y,f),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var C4,k4,zy,gQ,N4;var b4=C(()=>{R4();C4=Jy(AQ)?AQ:Yy(import.meta.dir,AQ),k4=H8(eN(),"kobe-sfx"),zy=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function S4(f,J){return`${f}:${J}`}function T4(f){let J=SG(),[Y,z]=r([]),[G,Z]=r(new Map),q=0;function Q(j){if(Z((U)=>{let L=new Map(U),O=S4(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{}y4()}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),qy)}}function H(j){z((U)=>U.filter((L)=>L.id!==j))}function B(j,U){Z((L)=>{let O=S4(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(I4.Provider,{value:V,get children(){return f.children}})}function RQ(){let f=u1(I4);if(!f)throw Error("useNotifications must be used within a NotificationsProvider");return f}var qy=4500,I4;var CQ=C(()=>{P();Wf();b4();PZ();I4=gJ()});function B8(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=Hy(J.focusAccent);if(Y&&Y!==f.focusAccent())f.setFocusAccent(Y)}}function Hy(f){if(f===null)return"primary";return Qy.includes(f)?f:null}var Qy;var u4=C(()=>{Qy=["primary","success","info"]});import{readFileSync as By}from"fs";function E4(f){try{let J=JSON.parse(By(v1(),"utf8")),Y=typeof J.activeTheme==="string"&&IZ(J.activeTheme)?J.activeTheme:f,z=J.transparentBackground===!0,G=typeof J.focusAccent==="string"&&gz.includes(J.focusAccent)?J.focusAccent:null,Z=TZ(J[kQ])?J[kQ]:kG;return{theme:Y,transparent:z,focusAccent:G,locale:Z}}catch{return{theme:f,transparent:!1,focusAccent:null,locale:kG}}}var kQ="locale";var j8=C(()=>{lf();Ef();NG()});function Wy(f){if(f)gX(f);OQ();for(let{name:J,theme:Y}of VZ())rj(J,Y)}function Vy(f){let J={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return f?{...J,onDestroy:f}:J}function Ky(f){let J=()=>f.children,Y=()=>f.notifications?b(T4,{get children(){return J()}}):J(),z=()=>b(d6,{get children(){return Y()}}),G=()=>f.focus?b(D4,{initial:"sidebar",get children(){return z()}}):z(),Z=()=>f.kv?b(g4,{get children(){return G()}}):G();return b(q6,{mode:"dark",get theme(){return f.theme},get children(){return Z()}})}function Uy(f){let J=d0(),Y={selectedTheme:()=>J.selected,hasTheme:(Q)=>J.has(Q),setTheme:(Q)=>J.set(Q),reloadUserThemes:()=>{for(let{name:Q,theme:H}of VZ())rj(Q,H)},transparentBackground:()=>J.transparentBackground,setTransparentBackground:(Q)=>J.setTransparentBackground(Q),focusAccent:()=>J.focusAccent,setFocusAccent:(Q)=>J.setFocusAccent(Q)};B8(Y,{theme:f.boot.theme,transparentBackground:f.boot.transparent,focusAccent:f.boot.focusAccent}),uZ(f.boot.locale);let[z,G]=r(null),Z=!1;f1(()=>{(async()=>{let Q=await K4({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!Q)return;if(Z){Q.dispose();return}G(Q)})()}),ff(()=>{let Q=z()?.uiPrefsSignal()();if(!Q)return;if(B8(Y,Q),TZ(Q.locale))uZ(Q.locale)});let q=null;return ff(()=>{let Q=z()?.keybindingsRevSignal()();if(Q==null)return;if(q===null||Q===q){q=Q;return}q=Q,A4()}),vf(()=>{Z=!0,z()?.dispose()}),null}async function L1(f){Wy(f.logContext);let J=E4(jy),Y=await f.setup(J),z=f.providers?.kv??!0,G=f.providers?.focus??!0,Z=f.providers?.notifications??!1;await f6(()=>b(Ky,{get theme(){return J.theme},kv:z,focus:G,notifications:Z,get children(){return[b(Uy,{boot:J}),I0(()=>Y.root())]}}),Vy(Y.onDestroy))}var jy="claude";var PY=C(()=>{P();P();P();_Y();Wf();U4();L4();Q8();PZ();CQ();Ef();kq();G1();h1();u4();j8()});async function W8(f,J,Y,z,G={}){let Z=Mf(J.id);if(await Bf(Z))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(() => (zG(),TB)),B=H(Y,q,{kind:G.includeInitPrompt?"repo-init":"none"});if(!await Q({name:Z,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 NQ(f,J,Y,z,G={}){await W8(f,J,Y,z,G),await f.setActiveTask(J.id).catch(()=>{});let{prepareWindowForSwitch:Z}=await Promise.resolve().then(() => (J1(),r1));await Z(Mf(J.id)),await v0(["switch-client","-t",`=${Mf(J.id)}`])}var V8=C(()=>{E1();Sf()});var x4={};jf(x4,{startNewTaskHost:()=>Dy,NewTaskPage:()=>yQ});function yQ(f){let{theme:J}=d0(),Y=Pf();f1(()=>{z()});async function z(){let G=m1(),Z=f.defaultRepo||G[0]||process.cwd(),q=kf("lastSelectedVendor")??yf,Q=await dJ(),H=f.orchestrator,B=await LQ.show(Y,Z,G,{defaultVendor:q,availableVendors:Q,discoverAdoptable:H?(j)=>H.discoverAdoptableWorktrees(j):void 0});if(!B)process.exit(0);if(af("lastSelectedVendor",B.vendor),PJ(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 NQ(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 X(G,"flexDirection","column"),X(G,"flexGrow",1),E((Z)=>X(G,"backgroundColor",J.background,Z)),G})()}async function Dy(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(yQ,{get defaultRepo(){return f.defaultRepo},orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var K8=C(()=>{P();P();P();P();y1();Wf();EY();oY();gf();S1();yG();Ef();PY();V8();h1()});function bQ(f,J,Y,z,G={}){if(f.length===0)return J;let Z=new Map;for(let H of f)Z.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=Z.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 w4(f,J){if(!f)return!0;let Y=f.toLowerCase(),z=J.toLowerCase(),G=0;for(let Z=0;Z<z.length&&G<Y.length;Z++)if(z.charCodeAt(Z)===Y.charCodeAt(G))G++;return G===Y.length}function Ly(f,J){let Y=J==="archived";return f.filter((z)=>z.archived===Y)}function U8(f,J,Y,z="default",G){let Z=Ly(f,J),q=Y?.trim()??"",Q=G?o1(G):null,H=q?Z.filter((M)=>w4(q,`${M.title} ${MJ(M.repo)}`)):Z,B=[],V=[],j=[],U=new Set;for(let M of H){if(M.kind==="main"){let g=o1(M.repo);if(U.has(g))continue;U.add(g),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,g)=>MJ(M.repo).localeCompare(MJ(g.repo))),z==="recent")V.sort(h4),j.sort(h4);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 h4(f,J){let Y=P4(J)-P4(f);if(Y!==0)return Y;return String(J.id).localeCompare(String(f.id))}function P4(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 My(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 v4(f,J){let Y=J==="archived",z=new Map;for(let Z of f){let q=o1(Z.repo),Q=z.get(q)??{repo:Z.repo,count:0};if(Z.kind==="main")Q.repo=Z.repo;else if(Z.archived===Y)Q.count+=1;z.set(q,Q)}let G=[...z.values()].map((Z)=>Z.repo);return[...z.values()].map((Z)=>({repo:Z.repo,label:My(Z.repo,G),count:Z.count})).sort((Z,q)=>Z.label.localeCompare(q.label))}function m4(f,J){if(f.length===0)return-1;if(!J)return f[0]?.flatIndex??-1;let Y=o1(J),z=f.find((Z)=>Z.task.kind!=="main"&&o1(Z.task.repo)===Y);if(z)return z.flatIndex;return f.find((Z)=>Z.task.kind==="main"&&o1(Z.task.repo)===Y)?.flatIndex??f[0]?.flatIndex??-1}function D8(f){return f.map((J)=>J.task.id)}function c4(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 Fy(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 n4(f,J){return bQ(f,J,(Y)=>Y.task.id,(Y,z)=>Y.flatIndex===z.flatIndex&&Fy(Y.task,z.task),{samePosition:!0})}var SQ=()=>{};var d4={};jf(d4,{startQuickTaskHost:()=>Ry});async function Oy(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)??m1()[0],Z=G??z??process.cwd();if(!G)return{ctx:null,fallbackRepo:Z};let q=await dJ(),Q=kf("lastSelectedVendor")??yf,H=q.length===0||q.includes(Q)?Q:q[0]??Q,B=EZ(W1(G))??LJ,V=q.length>0?q:[H];return{ctx:{repo:G,vendor:H,baseRef:B,engines:V},fallbackRepo:Z}}async function Ay(f,J,Y,z,G){let Z=await W8(f,J,Y,z),q=Mf(J.id),{pane:Q}=await jZ(q,!Z);if(Q)await WZ(Q,G)}function gy(f){let{theme:J}=d0(),Y=Pf();f1(()=>{z()});async function z(){let G=f.ctx,Z=await W4.show(Y,{repoLabel:MJ(G.repo),engines:G.engines,defaultVendor:G.vendor,defaultBaseRef:G.baseRef,engineLabel:qz});if(Z===void 0)process.exit(0);af("lastSelectedVendor",Z.vendor),PJ(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:Z.baseRef,vendor:Z.vendor});await Ay(q,Q,G.repo,Z.vendor,Z.prompt),await NQ(q,Q,G.repo,Z.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 X(G,"flexDirection","column"),X(G,"flexGrow",1),E((Z)=>X(G,"backgroundColor",J.background,Z)),G})()}async function Ry(f){await L1({setup:async()=>{let J=null;try{let G=await UJ(),Z=new j1(G);await Z.init(),J=Z}catch(G){console.error("[kobe quick-task] daemon unavailable; cannot create task:",G)}let{ctx:Y,fallbackRepo:z}=await Oy(J,f.session);return{root:()=>Y?b(gy,{ctx:Y,orchestrator:J}):b(yQ,{defaultRepo:z,orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var i4=C(()=>{P();P();P();P();y1();Wf();EY();oY();E1();gf();Sf();gq();S1();V4();Ef();VQ();PY();UQ();V8();K8();SQ();h1()});function TQ(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 IQ(f,J){if(f.includes("/"))return f.split("/").map((G)=>IQ(G,J)).join("/");let Y=f.toLowerCase();if(Y==="tab")return"tab";let z=ky[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 IG(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("+")?IG(Q,J):IQ(Q,!0)}`}let G=Y.split("+");if(G.length===1)return IQ(G[0]??"",!1);let Z=G[G.length-1]??"";return`${G.slice(0,-1).map((Q)=>Cy[Q.toLowerCase().trim()]??Q).join("")} ${IQ(Z,!0)}`}var Cy,ky;var L8=C(()=>{Cy={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},ky={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 l4}from"@opentui/core";function Ny(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 TG(f={}){let J=Pf(),{theme:Y}=d0(),z=()=>Ny(xY),G=()=>f.onClose?f.onClose():J.clear(),[Z,q]=r("\u2303B");return f1(()=>{a0(["show-options","-g","prefix"]).then(({code:Q,stdout:H})=>{if(Q!==0)return;let B=TQ(H);if(B)q(B)})}),Df(()=>({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),X(Q,"paddingLeft",2),X(Q,"paddingRight",2),X(Q,"gap",1),X(Q,"flexShrink",1),D(H,B),D(H,V),X(H,"flexDirection","row"),X(H,"justifyContent","space-between"),X(H,"flexShrink",0),K(B,()=>F("help.title")),X(V,"onMouseUp",G),K(V,()=>F("help.esc")),D(j,U),X(j,"flexShrink",1),X(j,"flexGrow",1),X(j,"stickyScroll",!1),X(U,"paddingBottom",1),X(U,"gap",1),X(U,"paddingRight",1),K(U,b(Zf,{get each(){return z()},children:(L)=>(()=>{var O=W("box"),M=W("text");return D(O,M),X(O,"gap",0),K(M,()=>oj("category",L.category)),K(O,b(Zf,{get each(){return L.rows},children:(g)=>{let I=g.hint?.keys??g.keys[0]??"\u2014",a=()=>I==="\u2014"?"\u2014":IG(I,Z()),N=()=>(g.hint?g.keys:g.keys.slice(1)).map((A)=>IG(A,Z()));return(()=>{var A=W("box"),R=W("box"),S=W("text"),_=W("box"),z0=W("text");return D(A,R),D(A,_),X(A,"flexDirection","row"),X(A,"gap",2),X(A,"paddingLeft",1),D(R,S),X(R,"width",14),K(S,a),D(_,z0),X(_,"flexGrow",1),K(z0,()=>oj("desc",g.id)),K(A,(()=>{var e=I0(()=>N().length>0);return()=>e()?(()=>{var Y0=W("box"),T=W("text");return D(Y0,T),K(T,()=>`(${N().join(", ")})`),E((Q0)=>X(T,"fg",Y.textMuted,Q0)),Y0})():null})(),null),E((e)=>{var{primary:Y0,text:T}=Y;return Y0!==e.e&&(e.e=X(S,"fg",Y0,e.e)),T!==e.t&&(e.t=X(z0,"fg",T,e.t)),e},{e:void 0,t:void 0}),A})()}}),null),E((g)=>{var I=Y.accent,a=l4.BOLD;return I!==g.e&&(g.e=X(M,"fg",I,g.e)),a!==g.t&&(g.t=X(M,"attributes",a,g.t)),g},{e:void 0,t:void 0}),O})()})),E((L)=>{var O=l4.BOLD,M=Y.text,g=Y.textMuted,I={trackOptions:{backgroundColor:Y.backgroundDialog,foregroundColor:Y.borderActive}};return O!==L.e&&(L.e=X(B,"attributes",O,L.e)),M!==L.t&&(L.t=X(B,"fg",M,L.t)),g!==L.a&&(L.a=X(V,"fg",g,L.a)),I!==L.o&&(L.o=X(j,"verticalScrollbarOptions",I,L.o)),L},{e:void 0,t:void 0,a:void 0,o:void 0}),Q})()}var M8=C(()=>{P();P();P();P();P();P();P();Wf();Sf();bG();Ef();G1();L8();b1();h1();TG.show=(f)=>{f.replace(()=>b(TG,{}))}});import{TextAttributes as yy}from"@opentui/core";function a4(f){let J=Pf(),{theme:Y}=d0(),[z,G]=r(f.currentTitle);function Z(){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),X(q,"paddingLeft",2),X(q,"paddingRight",2),X(q,"gap",1),D(Q,H),D(Q,B),X(Q,"flexDirection","row"),X(Q,"justifyContent","space-between"),K(H,()=>f.dialogTitle??F("common.rename.defaultTitle")),D(B,E0("esc")),X(B,"onMouseUp",()=>f.onCancel()),D(V,j),D(V,U),X(V,"gap",0),K(j,()=>f.fieldLabel??F("common.rename.defaultFieldLabel")),X(U,"focused",!0),X(U,"onInput",(M)=>G(Z1(M))),X(U,"onSubmit",()=>Z()),D(L,O),X(L,"paddingBottom",1),K(O,()=>F("common.rename.footerHint",{submitLabel:f.submitLabel??F("common.rename.defaultSubmitLabel")})),E((M)=>{var g=yy.BOLD,I=Y.text,a=Y.textMuted,N=Y.accent,A=z(),R=f.placeholder??f.currentTitle,S=Y.textMuted;return g!==M.e&&(M.e=X(H,"attributes",g,M.e)),I!==M.t&&(M.t=X(H,"fg",I,M.t)),a!==M.a&&(M.a=X(B,"fg",a,M.a)),N!==M.o&&(M.o=X(j,"fg",N,M.o)),A!==M.i&&(M.i=X(U,"value",A,M.i)),R!==M.n&&(M.n=X(U,"placeholder",R,M.n)),S!==M.s&&(M.s=X(O,"fg",S,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 $4=C(()=>{P();P();P();P();P();P();P();G1();Wf();Ef();h1();yG()});function by(f,J,Y={}){return new Promise((z)=>{f.replace(()=>b(a4,{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 fY;var F8=C(()=>{P();$4();fY={show:by}});import{TextAttributes as Sy}from"@opentui/core";function Iy(f){if(!f)return f;return f.charAt(0).toUpperCase()+f.slice(1)}function JY(f){let J=Pf(),{theme:Y}=d0(),[z,G]=uJ({active:f.initialActive??"confirm"});return Df(()=>({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 Z=W("box"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("box");return D(Z,q),D(Z,B),D(Z,V),X(Z,"paddingLeft",2),X(Z,"paddingRight",2),X(Z,"paddingBottom",1),X(Z,"gap",0),D(q,Q),D(q,H),X(q,"flexDirection","row"),X(q,"justifyContent","space-between"),K(Q,()=>f.title),D(H,E0("esc")),X(H,"onMouseUp",()=>J.clear()),K(B,()=>f.message),X(V,"flexDirection","row"),X(V,"justifyContent","flex-end"),X(V,"paddingTop",1),K(V,b(Zf,{each:["cancel","confirm"],children:(j)=>(()=>{var U=W("box"),L=W("text");return D(U,L),X(U,"paddingLeft",1),X(U,"paddingRight",1),X(U,"onMouseUp",()=>{if(j==="confirm")f.onConfirm?.();if(j==="cancel")f.onCancel?.();J.clear()}),K(L,()=>Iy(j==="cancel"?f.label??F("common.cancel"):f.confirmLabel??F("common.confirm"))),E((O)=>{var M=j===z.active?Y.primary:void 0,g=j===z.active?Y.selectedListItemText:Y.textMuted;return M!==O.e&&(O.e=X(U,"backgroundColor",M,O.e)),g!==O.t&&(O.t=X(L,"fg",g,O.t)),O},{e:void 0,t:void 0}),U})()})),E((j)=>{var U=Sy.BOLD,L=Y.text,O=Y.textMuted,M=Y.textMuted;return U!==j.e&&(j.e=X(Q,"attributes",U,j.e)),L!==j.t&&(j.t=X(Q,"fg",L,j.t)),O!==j.a&&(j.a=X(H,"fg",O,j.a)),M!==j.o&&(j.o=X(B,"fg",M,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),Z})()}var O8=C(()=>{P();P();P();P();P();P();P();G1();Wf();RG();Ef();b1();h1();JY.show=(f,J,Y,z,G,Z)=>{return new Promise((q)=>{f.replace(()=>b(JY,{title:J,message:Y,onConfirm:()=>q(!0),onCancel:()=>q(!1),label:z,confirmLabel:G,get initialActive(){return Z?.initialActive}}),()=>q(void 0)),f.setSize("small")})}});import{unlinkSync as Ty}from"fs";import{join as uy}from"path";function r4(f){return f instanceof j1}function p4(f,J){try{f?.destroy()}catch(Y){console.error(`kobe: renderer.destroy() failed during ${J}:`,Y)}}async function A8(f,J,Y){if(await JY.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{Ty(uy(OJ(),".kobe","tasks.json"))}catch(G){if(G.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",G)}p4(Y,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
223
- `),process.exit(0)}async function g8(f,J,Y){if(!(J instanceof j1))return;if(await JY.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;p4(Y,"daemon restart"),process.stderr.write(`kobe: window closed. Relaunch kobe to start fresh.
224
- `),process.exit(0)}var _4=C(()=>{EY();lf();O8()});function Ey(f){return`theme:${f}`}function R8(f){return`language:${f}`}function C8(f){return`accent:${f}`}function xy(f){return`engine:${f}`}function vZ(f){return`surface:${f}`}function k8(f){return[...f.themeNames.map((J)=>({id:Ey(J),kind:"theme",name:J})),...Rz.map((J)=>({id:R8(J.id),kind:"language",locale:J.id})),{id:"transparent",kind:"transparent"},...f.focusAccentSlots.map((J)=>({id:C8(J),kind:"focusAccent",slot:J})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:"zen-keep-tasks",kind:"zenKeepTasks"},{id:vZ("chattab"),kind:"surface",surface:"chattab"},{id:vZ("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function wy(f){return[...f.map((J)=>({id:xy(J),kind:"engine",vendor:J})),{id:"add-engine",kind:"engineAdd"}]}function hy(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function mZ(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 o4(f,J){switch(f){case"general":return k8(J);case"engines":return wy(J.engineList);case"accounts":case"keys":return[];case"feedback":return hy();case"dev":return mZ(J.hasDaemon)}}function cZ(f,J){return f.findIndex((Y)=>Y.id===J)}function uQ(f,J){return f[J]}var kz;var N8=C(()=>{NG();kz=[{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 t0}from"@opentui/core";function s4(f){let{theme:J}=d0();return(()=>{var Y=W("box");return X(Y,"flexDirection","column"),X(Y,"flexShrink",0),X(Y,"width",14),X(Y,"gap",1),K(Y,b(Zf,{each:kz,children:(z,G)=>{let Z=()=>G()===f.cursor(),q=()=>Z()&&f.level()==="sidebar";return(()=>{var Q=W("box"),H=W("text");return D(Q,H),X(Q,"paddingLeft",1),X(Q,"paddingRight",1),X(Q,"onMouseUp",()=>f.switchSection(z.id)),X(H,"wrapMode","none"),K(H,()=>F(`settings.sections.${z.id}`)),E((B)=>{var V=q()?J.primary:void 0,j=q()?J.selectedListItemText:Z()?J.accent:J.textMuted,U=Z()?t0.BOLD:void 0;return V!==B.e&&(B.e=X(Q,"backgroundColor",V,B.e)),j!==B.t&&(B.t=X(H,"fg",j,B.t)),U!==B.a&&(B.a=X(H,"attributes",U,B.a)),B},{e:void 0,t:void 0,a:void 0}),Q})()}})),Y})()}function t4(f){let J=d0(),{theme:Y}=J,z=()=>k8({themeNames:f.themeNames(),focusAccentSlots:gz}),G=(R)=>cZ(z(),R),Z=()=>G("transparent"),q=()=>G("toast"),Q=()=>G("sound"),H=()=>G("zen-keep-tasks"),B=()=>G(vZ("chattab")),V=()=>G(vZ("taskpanel")),j=()=>G("editor-kind"),U=()=>G("editor-custom"),L=()=>f.bodyRow()===Z(),O=()=>f.bodyRow()===q(),M=()=>f.bodyRow()===Q(),g=()=>f.bodyRow()===H(),I=()=>f.bodyRow()===B(),a=()=>f.bodyRow()===V(),N=()=>f.bodyRow()===j(),A=()=>f.bodyRow()===U();return(()=>{var R=W("box"),S=W("text"),_=W("text"),z0=W("box"),e=W("box"),Y0=W("text"),T=W("text"),Q0=W("box"),t=W("text"),V0=W("text"),C0=W("box"),$=W("text"),x=W("box"),f0=W("text"),u=W("text"),G0=W("box"),w=W("text"),n=W("text"),q0=W("box"),W0=W("text"),H0=E0(" "),k0=W("box"),x0=W("text"),y0=E0(" "),Gf=W("box"),m=W("text"),L0=W("text"),s=W("box"),R0=W("text"),i0=E0(" "),$0=W("box"),w0=W("text"),v=W("text"),J0=W("box"),M0=W("text"),_0=E0(" "),e0=W("box"),T0=W("text"),Xf=E0(" "),Qf=W("box"),Rf=W("text"),o=W("text"),p=W("box"),Z0=W("text"),D0=W("box"),j0=W("text");return D(R,S),D(R,_),D(R,z0),D(R,e),D(R,Q0),D(R,x),D(R,G0),D(R,Gf),D(R,$0),D(R,Qf),X(R,"flexDirection","column"),X(R,"gap",1),K(S,()=>F("settings.general.theme")),K(_,()=>F("settings.general.themeHint")),X(z0,"flexDirection","column"),X(z0,"gap",0),K(z0,b(Zf,{get each(){return f.themeNames()},children:(k,N0)=>{let p0=()=>f.level()==="body"&&f.bodyRow()===N0(),b0=()=>k===J.selected;return(()=>{var U0=W("box"),h0=W("text");return D(U0,h0),X(U0,"flexDirection","row"),X(U0,"gap",1),X(U0,"paddingLeft",1),X(U0,"paddingRight",1),X(U0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(N0()),f.setThemeCursor(N0()),f.selectTheme(k)}),X(h0,"wrapMode","none"),K(h0,()=>b0()?"\u25CF ":" ",null),K(h0,k,null),E((O0)=>{var r0=p0()?Y.primary:void 0,l0=p0()?Y.selectedListItemText:b0()?Y.accent:Y.text,Yf=p0()||b0()?t0.BOLD:void 0;return r0!==O0.e&&(O0.e=X(U0,"backgroundColor",r0,O0.e)),l0!==O0.t&&(O0.t=X(h0,"fg",l0,O0.t)),Yf!==O0.a&&(O0.a=X(h0,"attributes",Yf,O0.a)),O0},{e:void 0,t:void 0,a:void 0}),U0})()}})),D(e,Y0),D(e,T),X(e,"flexDirection","column"),X(e,"gap",0),X(e,"paddingTop",1),K(Y0,()=>F("settings.general.language")),X(T,"wrapMode","word"),K(T,()=>F("settings.general.languageHint")),K(e,b(Zf,{each:Rz,children:(k)=>{let N0=()=>G(R8(k.id)),p0=()=>f.level()==="body"&&f.bodyRow()===N0(),b0=()=>f.currentLocale()===k.id;return(()=>{var U0=W("box"),h0=W("text");return D(U0,h0),X(U0,"flexDirection","row"),X(U0,"gap",1),X(U0,"paddingLeft",1),X(U0,"paddingRight",1),X(U0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(N0()),f.selectLanguage(k.id)}),X(h0,"wrapMode","none"),K(h0,()=>b0()?"\u25CF ":" ",null),K(h0,()=>k.label,null),E((O0)=>{var r0=p0()?Y.primary:void 0,l0=p0()?Y.selectedListItemText:b0()?Y.accent:Y.text,Yf=p0()||b0()?t0.BOLD:void 0;return r0!==O0.e&&(O0.e=X(U0,"backgroundColor",r0,O0.e)),l0!==O0.t&&(O0.t=X(h0,"fg",l0,O0.t)),Yf!==O0.a&&(O0.a=X(h0,"attributes",Yf,O0.a)),O0},{e:void 0,t:void 0,a:void 0}),U0})()}}),null),D(Q0,t),D(Q0,V0),D(Q0,C0),X(Q0,"flexDirection","column"),X(Q0,"gap",0),X(Q0,"paddingTop",1),K(t,()=>F("settings.general.transparent")),X(V0,"wrapMode","word"),K(V0,()=>F("settings.general.transparentHint")),D(C0,$),X(C0,"flexDirection","row"),X(C0,"paddingLeft",1),X(C0,"paddingRight",1),X(C0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Z()),f.toggleTransparent()}),X($,"wrapMode","none"),K($,(()=>{var k=I0(()=>!!J.transparentBackground);return()=>k()?F("settings.general.on"):F("settings.general.off")})()),D(x,f0),D(x,u),X(x,"flexDirection","column"),X(x,"gap",0),X(x,"paddingTop",1),K(f0,()=>F("settings.general.focusAccent")),X(u,"wrapMode","word"),K(u,()=>F("settings.general.focusAccentHint")),K(x,b(Zf,{each:gz,children:(k)=>{let N0=()=>G(C8(k)),p0=()=>f.level()==="body"&&f.bodyRow()===N0(),b0=()=>J.focusAccent===k;return(()=>{var U0=W("box"),h0=W("text");return D(U0,h0),X(U0,"flexDirection","row"),X(U0,"gap",1),X(U0,"paddingLeft",1),X(U0,"paddingRight",1),X(U0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(N0()),f.selectFocusAccent(k)}),X(h0,"wrapMode","none"),K(h0,()=>b0()?"\u25CF ":" ",null),K(h0,()=>F(`settings.general.accent${k.charAt(0).toUpperCase()}${k.slice(1)}`),null),E((O0)=>{var r0=p0()?Y.primary:void 0,l0=p0()?Y.selectedListItemText:b0()?Y.focusAccent:Y.text,Yf=p0()||b0()?t0.BOLD:void 0;return r0!==O0.e&&(O0.e=X(U0,"backgroundColor",r0,O0.e)),l0!==O0.t&&(O0.t=X(h0,"fg",l0,O0.t)),Yf!==O0.a&&(O0.a=X(h0,"attributes",Yf,O0.a)),O0},{e:void 0,t:void 0,a:void 0}),U0})()}}),null),D(G0,w),D(G0,n),D(G0,q0),D(G0,k0),X(G0,"flexDirection","column"),X(G0,"gap",0),X(G0,"paddingTop",1),K(w,()=>F("settings.general.notifications")),X(n,"wrapMode","word"),K(n,()=>F("settings.general.notificationsHint")),D(q0,W0),X(q0,"flexDirection","row"),X(q0,"gap",1),X(q0,"paddingLeft",1),X(q0,"paddingRight",1),X(q0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(q()),f.toggleToast()}),D(W0,H0),X(W0,"wrapMode","none"),K(W0,()=>f.toastEnabled()?"[x]":"[ ]",H0),K(W0,()=>F("settings.general.toast"),null),D(k0,x0),X(k0,"flexDirection","row"),X(k0,"gap",1),X(k0,"paddingLeft",1),X(k0,"paddingRight",1),X(k0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Q()),f.toggleSound()}),D(x0,y0),X(x0,"wrapMode","none"),K(x0,()=>f.soundEnabled()?"[x]":"[ ]",y0),K(x0,()=>F("settings.general.sound"),null),D(Gf,m),D(Gf,L0),D(Gf,s),X(Gf,"flexDirection","column"),X(Gf,"gap",0),X(Gf,"paddingTop",1),K(m,()=>F("settings.general.zen")),X(L0,"wrapMode","word"),K(L0,()=>F("settings.general.zenHint")),D(s,R0),X(s,"flexDirection","row"),X(s,"gap",1),X(s,"paddingLeft",1),X(s,"paddingRight",1),X(s,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(H()),f.toggleZenKeepsTasks()}),D(R0,i0),X(R0,"wrapMode","none"),K(R0,()=>f.zenKeepsTasks()?"[x]":"[ ]",i0),K(R0,()=>F("settings.general.zenKeepTasks"),null),D($0,w0),D($0,v),D($0,J0),D($0,e0),X($0,"flexDirection","column"),X($0,"gap",0),X($0,"paddingTop",1),K(w0,()=>F("settings.general.surface")),X(v,"wrapMode","word"),K(v,()=>F("settings.general.surfaceHint")),D(J0,M0),X(J0,"flexDirection","row"),X(J0,"gap",1),X(J0,"paddingLeft",1),X(J0,"paddingRight",1),X(J0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(B()),f.selectSurface("chattab")}),D(M0,_0),X(M0,"wrapMode","none"),K(M0,()=>f.settingsSurface()==="chattab"?"[x]":"[ ]",_0),K(M0,()=>F("settings.general.surfaceChattab"),null),D(e0,T0),X(e0,"flexDirection","row"),X(e0,"gap",1),X(e0,"paddingLeft",1),X(e0,"paddingRight",1),X(e0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(V()),f.selectSurface("taskpanel")}),D(T0,Xf),X(T0,"wrapMode","none"),K(T0,()=>f.settingsSurface()==="taskpanel"?"[x]":"[ ]",Xf),K(T0,()=>F("settings.general.surfaceTaskpanel"),null),D(Qf,Rf),D(Qf,o),D(Qf,p),D(Qf,D0),X(Qf,"flexDirection","column"),X(Qf,"gap",0),X(Qf,"paddingTop",1),K(Rf,()=>F("settings.general.editor")),X(o,"wrapMode","word"),K(o,()=>F("settings.general.editorHint")),D(p,Z0),X(p,"flexDirection","row"),X(p,"gap",1),X(p,"paddingLeft",1),X(p,"paddingRight",1),X(p,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(j()),f.cycleEditorKind()}),X(Z0,"wrapMode","none"),K(Z0,()=>F("settings.general.editorRow",{kind:f.editorKind()})),D(D0,j0),X(D0,"flexDirection","row"),X(D0,"gap",1),X(D0,"paddingLeft",1),X(D0,"paddingRight",1),X(D0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(U()),f.editEditorCustom()}),X(j0,"wrapMode","none"),K(j0,()=>F("settings.general.editorCustom",{cmd:f.editorCustomCommand().trim()||F("settings.general.editorCustomUnset")})),E((k)=>{var N0=Y.text,p0=t0.BOLD,b0=Y.textMuted,U0=Y.text,h0=t0.BOLD,O0=Y.textMuted,r0=Y.text,l0=t0.BOLD,Yf=Y.textMuted,S0=L()?Y.primary:void 0,xf=L()?Y.selectedListItemText:J.transparentBackground?Y.accent:Y.textMuted,df=t0.BOLD,d=Y.text,g0=t0.BOLD,Kf=Y.textMuted,qf=Y.text,Of=t0.BOLD,y=Y.textMuted,A0=O()?Y.primary:void 0,m0=O()?Y.selectedListItemText:f.toastEnabled()?Y.accent:Y.textMuted,u0=t0.BOLD,X1=M()?Y.primary:void 0,V1=M()?Y.selectedListItemText:f.soundEnabled()?Y.accent:Y.textMuted,tf=t0.BOLD,P1=Y.text,xJ=t0.BOLD,M1=Y.textMuted,yz=g()?Y.primary:void 0,YY=g()?Y.selectedListItemText:f.zenKeepsTasks()?Y.accent:Y.textMuted,c=t0.BOLD,i=Y.text,l=t0.BOLD,h=Y.textMuted,c0=I()?Y.primary:void 0,P0=I()?Y.selectedListItemText:f.settingsSurface()==="chattab"?Y.accent:Y.textMuted,F0=t0.BOLD,n0=a()?Y.primary:void 0,Hf=a()?Y.selectedListItemText:f.settingsSurface()==="taskpanel"?Y.accent:Y.textMuted,Lf=t0.BOLD,q1=Y.text,s1=t0.BOLD,zY=Y.textMuted,p8=N()?Y.primary:void 0,_8=N()?Y.selectedListItemText:Y.accent,o8=t0.BOLD,s8=A()?Y.primary:void 0,t8=A()?Y.selectedListItemText:f.editorKind()==="custom"?Y.text:Y.textMuted;return N0!==k.e&&(k.e=X(S,"fg",N0,k.e)),p0!==k.t&&(k.t=X(S,"attributes",p0,k.t)),b0!==k.a&&(k.a=X(_,"fg",b0,k.a)),U0!==k.o&&(k.o=X(Y0,"fg",U0,k.o)),h0!==k.i&&(k.i=X(Y0,"attributes",h0,k.i)),O0!==k.n&&(k.n=X(T,"fg",O0,k.n)),r0!==k.s&&(k.s=X(t,"fg",r0,k.s)),l0!==k.h&&(k.h=X(t,"attributes",l0,k.h)),Yf!==k.r&&(k.r=X(V0,"fg",Yf,k.r)),S0!==k.d&&(k.d=X(C0,"backgroundColor",S0,k.d)),xf!==k.l&&(k.l=X($,"fg",xf,k.l)),df!==k.u&&(k.u=X($,"attributes",df,k.u)),d!==k.c&&(k.c=X(f0,"fg",d,k.c)),g0!==k.w&&(k.w=X(f0,"attributes",g0,k.w)),Kf!==k.m&&(k.m=X(u,"fg",Kf,k.m)),qf!==k.f&&(k.f=X(w,"fg",qf,k.f)),Of!==k.y&&(k.y=X(w,"attributes",Of,k.y)),y!==k.g&&(k.g=X(n,"fg",y,k.g)),A0!==k.p&&(k.p=X(q0,"backgroundColor",A0,k.p)),m0!==k.b&&(k.b=X(W0,"fg",m0,k.b)),u0!==k.T&&(k.T=X(W0,"attributes",u0,k.T)),X1!==k.A&&(k.A=X(k0,"backgroundColor",X1,k.A)),V1!==k.O&&(k.O=X(x0,"fg",V1,k.O)),tf!==k.I&&(k.I=X(x0,"attributes",tf,k.I)),P1!==k.S&&(k.S=X(m,"fg",P1,k.S)),xJ!==k.W&&(k.W=X(m,"attributes",xJ,k.W)),M1!==k.C&&(k.C=X(L0,"fg",M1,k.C)),yz!==k.B&&(k.B=X(s,"backgroundColor",yz,k.B)),YY!==k.v&&(k.v=X(R0,"fg",YY,k.v)),c!==k.k&&(k.k=X(R0,"attributes",c,k.k)),i!==k.x&&(k.x=X(w0,"fg",i,k.x)),l!==k.j&&(k.j=X(w0,"attributes",l,k.j)),h!==k.q&&(k.q=X(v,"fg",h,k.q)),c0!==k.z&&(k.z=X(J0,"backgroundColor",c0,k.z)),P0!==k.P&&(k.P=X(M0,"fg",P0,k.P)),F0!==k.H&&(k.H=X(M0,"attributes",F0,k.H)),n0!==k.F&&(k.F=X(e0,"backgroundColor",n0,k.F)),Hf!==k.M&&(k.M=X(T0,"fg",Hf,k.M)),Lf!==k.D&&(k.D=X(T0,"attributes",Lf,k.D)),q1!==k.R&&(k.R=X(Rf,"fg",q1,k.R)),s1!==k.E&&(k.E=X(Rf,"attributes",s1,k.E)),zY!==k.L&&(k.L=X(o,"fg",zY,k.L)),p8!==k.N&&(k.N=X(p,"backgroundColor",p8,k.N)),_8!==k.G&&(k.G=X(Z0,"fg",_8,k.G)),o8!==k.U&&(k.U=X(Z0,"attributes",o8,k.U)),s8!==k.K&&(k.K=X(D0,"backgroundColor",s8,k.K)),t8!==k.V&&(k.V=X(j0,"fg",t8,k.V)),k},{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}),R})()}function e4(f){let{theme:J}=d0(),Y=()=>f.vendors.length;return(()=>{var z=W("box"),G=W("text"),Z=W("text"),q=W("box"),Q=W("box"),H=W("text");return D(z,G),D(z,Z),D(z,q),X(z,"flexDirection","column"),X(z,"gap",1),K(G,()=>F("settings.engines.title")),X(Z,"wrapMode","word"),K(Z,()=>F("settings.engines.hint")),D(q,Q),X(q,"flexDirection","column"),X(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),X(U,"flexDirection","row"),X(U,"gap",1),X(U,"paddingLeft",1),X(U,"paddingRight",1),X(U,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(V()),f.editEngine(B)}),X(L,"wrapMode","none"),K(L,()=>f.isDefaultEngine(B)?"\u25CF":" "),X(O,"wrapMode","none"),K(O,()=>f.displayName(B)),X(M,"wrapMode","none"),K(M,()=>f.commandText(B),null),K(M,(()=>{var g=I0(()=>!!f.isDefault(B));return()=>g()?F("settings.engines.defaultTag"):I0(()=>!!f.isCustom(B))()?F("settings.engines.customTag"):""})(),null),E((g)=>{var I=j()?J.primary:void 0,a=j()?J.selectedListItemText:J.accent,N=t0.BOLD,A=j()?J.selectedListItemText:J.text,R=t0.BOLD,S=j()?J.selectedListItemText:f.isDefault(B)?J.textMuted:J.accent;return I!==g.e&&(g.e=X(U,"backgroundColor",I,g.e)),a!==g.t&&(g.t=X(L,"fg",a,g.t)),N!==g.a&&(g.a=X(L,"attributes",N,g.a)),A!==g.o&&(g.o=X(O,"fg",A,g.o)),R!==g.i&&(g.i=X(O,"attributes",R,g.i)),S!==g.n&&(g.n=X(M,"fg",S,g.n)),g},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),U})()}}),Q),D(Q,H),X(Q,"flexDirection","row"),X(Q,"paddingLeft",1),X(Q,"paddingRight",1),X(Q,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Y()),f.onAddEngine()}),X(H,"wrapMode","none"),K(H,()=>F("settings.engines.addEngine")),E((B)=>{var V=J.text,j=t0.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=X(G,"fg",V,B.e)),j!==B.t&&(B.t=X(G,"attributes",j,B.t)),U!==B.a&&(B.a=X(Z,"fg",U,B.a)),L!==B.o&&(B.o=X(Q,"backgroundColor",L,B.o)),O!==B.i&&(B.i=X(H,"fg",O,B.i)),B},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),z})()}function fD(f){let{theme:J}=d0(),Y=(z)=>z.binary.found?`Binary: ${z.binary.path}`:`Binary: ${z.binary.error}`;return(()=>{var z=W("box"),G=W("text"),Z=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,Z),D(z,q),D(z,H),D(z,V),X(z,"flexDirection","column"),X(z,"gap",1),K(G,()=>F("settings.accounts.title")),X(Z,"wrapMode","word"),K(Z,()=>F("settings.accounts.hint")),D(q,Q),X(q,"flexDirection","column"),X(q,"gap",0),D(Q,E0("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")),E((L)=>X(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),X(L,"flexDirection","column"),X(L,"gap",0),X(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="oauth"){let g=[M.organization,M.billingType].filter((I)=>!!I).join(" \xB7 ");return(()=>{var I=W("text");return X(I,"wrapMode","word"),K(I,()=>F("settings.accounts.loggedIn",{email:M.email}),null),K(I,g?` (${g})`:"",null),E((a)=>X(I,"fg",J.success,a)),I})()}return(()=>{var g=W("text");return K(g,()=>F("settings.accounts.notLoggedIn")),E((I)=>X(g,"fg",J.textMuted,I)),g})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var g=W("text");return X(g,"wrapMode","word"),K(g,()=>`! ${M()}`),E((I)=>X(g,"fg",J.warning,I)),g})()}),null),E((M)=>X(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),D(H,B),X(H,"flexDirection","column"),X(H,"gap",0),D(B,E0("codex")),K(H,b(X0,{get when(){return f.codexStatus()===null},get children(){var U=W("text");return K(U,()=>F("settings.accounts.checking")),E((L)=>X(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),X(L,"flexDirection","column"),X(L,"gap",0),X(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="chatgpt")return(()=>{var g=W("text");return X(g,"wrapMode","word"),K(g,()=>F("settings.accounts.chatgptLogin",{email:M.email}),null),K(g,(()=>{var I=I0(()=>!!M.plan);return()=>I()?` (${M.plan})`:""})(),null),E((I)=>X(g,"fg",J.success,I)),g})();if(M.kind==="apikey")return(()=>{var g=W("text");return K(g,()=>F("settings.accounts.apiKeyConfigured")),E((I)=>X(g,"fg",J.success,I)),g})();return(()=>{var g=W("text");return K(g,()=>F("settings.accounts.notLoggedIn")),E((I)=>X(g,"fg",J.textMuted,I)),g})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var g=W("text");return X(g,"wrapMode","word"),K(g,()=>`! ${M()}`),E((I)=>X(g,"fg",J.warning,I)),g})()}),null),E((M)=>X(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),D(V,j),X(V,"flexDirection","column"),X(V,"gap",0),D(j,E0("copilot")),K(V,b(X0,{get when(){return f.copilotStatus()===null},get children(){var U=W("text");return K(U,()=>F("settings.accounts.checking")),E((L)=>X(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),X(L,"flexDirection","column"),X(L,"gap",0),X(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="token")return(()=>{var g=W("text");return K(g,()=>F("settings.accounts.tokenConfigured",{source:M.source})),E((I)=>X(g,"fg",J.success,I)),g})();if(M.kind==="oauth")return(()=>{var g=W("text");return K(g,()=>F("settings.accounts.copilotDetected")),E((I)=>X(g,"fg",J.success,I)),g})();return(()=>{var g=W("text");return K(g,()=>F("settings.accounts.notLoggedIn")),E((I)=>X(g,"fg",J.textMuted,I)),g})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var g=W("text");return X(g,"wrapMode","word"),K(g,()=>`! ${M()}`),E((I)=>X(g,"fg",J.warning,I)),g})()}),null),E((M)=>X(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),E((U)=>{var L=J.text,O=t0.BOLD,M=J.textMuted,g=J.text,I=t0.BOLD,a=J.text,N=t0.BOLD,A=J.text,R=t0.BOLD;return L!==U.e&&(U.e=X(G,"fg",L,U.e)),O!==U.t&&(U.t=X(G,"attributes",O,U.t)),M!==U.a&&(U.a=X(Z,"fg",M,U.a)),g!==U.o&&(U.o=X(Q,"fg",g,U.o)),I!==U.i&&(U.i=X(Q,"attributes",I,U.i)),a!==U.n&&(U.n=X(B,"fg",a,U.n)),N!==U.s&&(U.s=X(B,"attributes",N,U.s)),A!==U.h&&(U.h=X(j,"fg",A,U.h)),R!==U.r&&(U.r=X(j,"attributes",R,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 JD(f){let{theme:J}=d0(),Y=()=>f.level()==="body",z=()=>Y()&&f.bodyRow()===0,G=()=>Y()&&f.bodyRow()===1,Z=()=>Y()&&f.bodyRow()===2,q=(H)=>H?J.primary:J.textMuted,Q=(H)=>H?t0.BOLD|t0.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"),g=W("text"),I=W("input"),a=W("box"),N=W("text");return D(H,B),D(H,V),D(H,j),X(H,"flexDirection","column"),X(H,"gap",1),K(B,()=>F("settings.feedback.title")),X(V,"wrapMode","word"),K(V,()=>F("settings.feedback.hint")),D(j,U),D(j,M),D(j,a),X(j,"flexDirection","column"),X(j,"gap",1),D(U,L),D(U,O),X(U,"gap",0),K(L,()=>F("settings.feedback.titleLabel")),X(O,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(0)}),X(O,"onInput",(A)=>f.setTitle(Z1(A))),X(O,"onSubmit",()=>f.onTitleSubmit()),D(M,g),D(M,I),X(M,"gap",0),K(g,()=>F("settings.feedback.descriptionLabel")),X(I,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(1)}),X(I,"onInput",(A)=>f.setBody(Z1(A))),X(I,"onSubmit",()=>f.onBodySubmit()),D(a,N),X(a,"flexDirection","row"),X(a,"paddingLeft",1),X(a,"paddingRight",1),X(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 A=W("text");return X(A,"wrapMode","word"),K(A,()=>f.status()),E((R)=>X(A,"fg",f.status().startsWith("error:")?J.warning:J.success,R)),A}}),null),E((A)=>{var R=J.text,S=t0.BOLD,_=J.textMuted,z0=q(z()),e=Q(z()),Y0=f.title(),T=F("settings.feedback.titlePlaceholder"),Q0=z(),t=q(G()),V0=Q(G()),C0=f.body(),$=F("settings.feedback.descriptionPlaceholder"),x=G(),f0=Z()?J.primary:J.backgroundElement,u=Z()?J.selectedListItemText:J.accent,G0=t0.BOLD;return R!==A.e&&(A.e=X(B,"fg",R,A.e)),S!==A.t&&(A.t=X(B,"attributes",S,A.t)),_!==A.a&&(A.a=X(V,"fg",_,A.a)),z0!==A.o&&(A.o=X(L,"fg",z0,A.o)),e!==A.i&&(A.i=X(L,"attributes",e,A.i)),Y0!==A.n&&(A.n=X(O,"value",Y0,A.n)),T!==A.s&&(A.s=X(O,"placeholder",T,A.s)),Q0!==A.h&&(A.h=X(O,"focused",Q0,A.h)),t!==A.r&&(A.r=X(g,"fg",t,A.r)),V0!==A.d&&(A.d=X(g,"attributes",V0,A.d)),C0!==A.l&&(A.l=X(I,"value",C0,A.l)),$!==A.u&&(A.u=X(I,"placeholder",$,A.u)),x!==A.c&&(A.c=X(I,"focused",x,A.c)),f0!==A.w&&(A.w=X(a,"backgroundColor",f0,A.w)),u!==A.m&&(A.m=X(N,"fg",u,A.m)),G0!==A.f&&(A.f=X(N,"attributes",G0,A.f)),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}),H})()}function YD(f){let{theme:J}=d0(),Y=()=>f.level()==="body"&&f.bodyRow()===0,z=()=>f.level()==="body"&&f.bodyRow()===1,G=()=>cZ(mZ(f.hasDaemon),"remote-projects"),Z=()=>f.level()==="body"&&f.bodyRow()===G(),q=()=>cZ(mZ(f.hasDaemon),"auto-status"),Q=()=>f.level()==="body"&&f.bodyRow()===q(),H=()=>cZ(mZ(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"),g=W("box"),I=W("text"),a=W("text"),N=W("box"),A=W("text"),R=W("text"),S=W("box"),_=W("text"),z0=W("text"),e=W("box"),Y0=W("text");return D(V,j),D(V,U),D(V,L),D(V,M),D(V,g),X(V,"flexDirection","column"),X(V,"gap",1),K(j,()=>F("settings.dev.reset")),X(U,"wrapMode","word"),K(U,()=>F("settings.dev.resetHint")),D(L,O),X(L,"flexDirection","row"),X(L,"paddingLeft",1),X(L,"paddingRight",1),X(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"),t=W("text"),V0=W("box"),C0=W("text");return D(T,Q0),D(T,t),D(T,V0),X(T,"flexDirection","column"),X(T,"gap",0),X(T,"paddingTop",1),K(Q0,()=>F("settings.dev.restart")),X(t,"wrapMode","word"),K(t,()=>F("settings.dev.restartHint")),D(V0,C0),X(V0,"flexDirection","row"),X(V0,"paddingLeft",1),X(V0,"paddingRight",1),X(V0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(1),f.confirmRestartDaemon()}),K(C0,()=>F("settings.dev.restartButton")),E(($)=>{var x=J.text,f0=t0.BOLD,u=J.textMuted,G0=z()?J.primary:J.backgroundElement,w=z()?J.selectedListItemText:J.accent,n=t0.BOLD;return x!==$.e&&($.e=X(Q0,"fg",x,$.e)),f0!==$.t&&($.t=X(Q0,"attributes",f0,$.t)),u!==$.a&&($.a=X(t,"fg",u,$.a)),G0!==$.o&&($.o=X(V0,"backgroundColor",G0,$.o)),w!==$.i&&($.i=X(C0,"fg",w,$.i)),n!==$.n&&($.n=X(C0,"attributes",n,$.n)),$},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),T}}),M),X(M,"wrapMode","word"),K(M,()=>F("settings.dev.doctorHint")),D(g,I),D(g,a),D(g,N),D(g,R),D(g,S),D(g,z0),D(g,e),X(g,"flexDirection","column"),X(g,"gap",0),X(g,"paddingTop",1),K(I,()=>F("settings.dev.experimental")),X(a,"wrapMode","word"),K(a,()=>F("settings.dev.remoteHint")),D(N,A),X(N,"flexDirection","row"),X(N,"paddingLeft",1),X(N,"paddingRight",1),X(N,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(G()),f.toggleRemoteProjects()}),K(A,(()=>{var T=I0(()=>!!f.remoteProjectsEnabled());return()=>T()?F("settings.dev.remoteOn"):F("settings.dev.remoteOff")})()),X(R,"wrapMode","word"),K(R,()=>F("settings.dev.autoStatusHint")),D(S,_),X(S,"flexDirection","row"),X(S,"paddingLeft",1),X(S,"paddingRight",1),X(S,"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")})()),X(z0,"wrapMode","word"),K(z0,()=>F("settings.dev.dispatcherHint")),D(e,Y0),X(e,"flexDirection","row"),X(e,"paddingLeft",1),X(e,"paddingRight",1),X(e,"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")})()),E((T)=>{var Q0=J.text,t=t0.BOLD,V0=J.textMuted,C0=Y()?J.primary:J.backgroundElement,$=Y()?J.selectedListItemText:J.warning,x=t0.BOLD,f0=J.textMuted,u=J.text,G0=t0.BOLD,w=J.textMuted,n=Z()?J.primary:J.backgroundElement,q0=Z()?J.selectedListItemText:J.text,W0=f.remoteProjectsEnabled()?t0.BOLD:void 0,H0=J.textMuted,k0=Q()?J.primary:J.backgroundElement,x0=Q()?J.selectedListItemText:J.text,y0=f.autoStatusEnabled()?t0.BOLD:void 0,Gf=J.textMuted,m=B()?J.primary:J.backgroundElement,L0=B()?J.selectedListItemText:J.text,s=f.dispatcherEnabled()?t0.BOLD:void 0;return Q0!==T.e&&(T.e=X(j,"fg",Q0,T.e)),t!==T.t&&(T.t=X(j,"attributes",t,T.t)),V0!==T.a&&(T.a=X(U,"fg",V0,T.a)),C0!==T.o&&(T.o=X(L,"backgroundColor",C0,T.o)),$!==T.i&&(T.i=X(O,"fg",$,T.i)),x!==T.n&&(T.n=X(O,"attributes",x,T.n)),f0!==T.s&&(T.s=X(M,"fg",f0,T.s)),u!==T.h&&(T.h=X(I,"fg",u,T.h)),G0!==T.r&&(T.r=X(I,"attributes",G0,T.r)),w!==T.d&&(T.d=X(a,"fg",w,T.d)),n!==T.l&&(T.l=X(N,"backgroundColor",n,T.l)),q0!==T.u&&(T.u=X(A,"fg",q0,T.u)),W0!==T.c&&(T.c=X(A,"attributes",W0,T.c)),H0!==T.w&&(T.w=X(R,"fg",H0,T.w)),k0!==T.m&&(T.m=X(S,"backgroundColor",k0,T.m)),x0!==T.f&&(T.f=X(_,"fg",x0,T.f)),y0!==T.y&&(T.y=X(_,"attributes",y0,T.y)),Gf!==T.g&&(T.g=X(z0,"fg",Gf,T.g)),m!==T.p&&(T.p=X(e,"backgroundColor",m,T.p)),L0!==T.b&&(T.b=X(Y0,"fg",L0,T.b)),s!==T.T&&(T.T=X(Y0,"attributes",s,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 zD(){let{theme:f}=d0(),J=O4(),Y=Object.keys(EB).sort();return(()=>{var z=W("box"),G=W("text"),Z=W("text"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("text");return D(z,G),D(z,Z),D(z,q),D(z,B),D(z,V),X(z,"flexDirection","column"),X(z,"gap",1),K(G,()=>F("settings.keybindings.title")),X(Z,"wrapMode","word"),K(Z,()=>F("settings.keybindings.hint")),D(q,Q),D(q,H),X(q,"flexDirection","column"),X(q,"gap",0),K(Q,()=>F("settings.keybindings.configFile")),X(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"),g=W("text"),I=W("text"),a=W("text"),N=W("text"),A=W("text"),R=W("text");return D(j,U),D(j,L),D(j,O),D(j,M),D(j,g),D(j,I),D(j,a),D(j,N),D(j,A),D(j,R),X(j,"flexDirection","column"),X(j,"gap",0),K(U,()=>F("settings.keybindings.example")),D(L,E0("bindings:")),D(O,E0(" chat.fork.new: ctrl+g # string = one chord")),D(M,E0(" sidebar.select: [enter] # list = several chords")),D(g,E0(" files.createPR: null # null = unbind")),D(I,E0(" tmux.tab.new: ctrl+y # tmux session key (see below)")),D(a,E0(" tmux.layout.workspaceSplit: g # prefix g")),D(N,E0("darwin: # platform overlay (also: linux)")),D(A,E0(" bindings:")),D(R,E0(" palette.open: [cmd+p, ctrl+p]")),E((S)=>{var _=f.text,z0=t0.BOLD,e=f.textMuted,Y0=f.textMuted,T=f.textMuted,Q0=f.textMuted,t=f.textMuted,V0=f.textMuted,C0=f.textMuted,$=f.textMuted,x=f.textMuted;return _!==S.e&&(S.e=X(U,"fg",_,S.e)),z0!==S.t&&(S.t=X(U,"attributes",z0,S.t)),e!==S.a&&(S.a=X(L,"fg",e,S.a)),Y0!==S.o&&(S.o=X(O,"fg",Y0,S.o)),T!==S.i&&(S.i=X(M,"fg",T,S.i)),Q0!==S.n&&(S.n=X(g,"fg",Q0,S.n)),t!==S.s&&(S.s=X(I,"fg",t,S.s)),V0!==S.h&&(S.h=X(a,"fg",V0,S.h)),C0!==S.r&&(S.r=X(N,"fg",C0,S.r)),$!==S.d&&(S.d=X(A,"fg",$,S.d)),x!==S.l&&(S.l=X(R,"fg",x,S.l)),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,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),X(j,"flexDirection","column"),X(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")),E((O)=>X(L,"fg",f.textMuted,O)),L}}),null),K(j,b(Zf,{get each(){return J.applied},children:(L)=>(()=>{var O=W("text");return X(O,"wrapMode","word"),K(O,()=>`${L.id} \u2192 ${L.keys.length>0?L.keys.join(" / "):"(unbound)"} (default: ${L.defaultKeys.join(" / ")})`),E((M)=>X(O,"fg",f.text,M)),O})()}),null),E((L)=>{var O=f.text,M=t0.BOLD;return O!==L.e&&(L.e=X(U,"fg",O,L.e)),M!==L.t&&(L.t=X(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),X(j,"flexDirection","column"),X(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 X(O,"wrapMode","word"),K(O,`! ${L}`),E((M)=>X(O,"fg",f.warning,M)),O})()}),null),E((L)=>{var O=f.warning,M=t0.BOLD;return O!==L.e&&(L.e=X(U,"fg",O,L.e)),M!==L.t&&(L.t=X(U,"attributes",M,L.t)),L},{e:void 0,t:void 0}),j}}),B),D(B,E0("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.")),X(B,"wrapMode","word"),X(V,"wrapMode","word"),K(V,()=>`Fixed (not rebindable): ${Y.join(", ")}.`),E((j)=>{var U=f.text,L=t0.BOLD,O=f.textMuted,M=f.text,g=t0.BOLD,I=f.textMuted,a=f.textMuted,N=f.textMuted;return U!==j.e&&(j.e=X(G,"fg",U,j.e)),L!==j.t&&(j.t=X(G,"attributes",L,j.t)),O!==j.a&&(j.a=X(Z,"fg",O,j.a)),M!==j.o&&(j.o=X(Q,"fg",M,j.o)),g!==j.i&&(j.i=X(Q,"attributes",g,j.i)),I!==j.n&&(j.n=X(H,"fg",I,j.n)),a!==j.s&&(j.s=X(B,"fg",a,j.s)),N!==j.h&&(j.h=X(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 GD=C(()=>{P();P();P();P();P();P();P();P();Wf();Q8();Ef();G1();NG();Fq();yG();N8()});import{TextAttributes as Py}from"@opentui/core";function vy(f){return f.split(/[-_]+/).filter((J)=>J.length>0).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function Nz(f){let J=Pf(),Y=d0(),z=Y1(),{theme:G}=Y,[Z,q]=r("sidebar"),[Q,H]=r("general"),[B,V]=r(0),[j,U]=r(0),[L,O]=r(""),[M,g]=r(""),[I,a]=r(""),N=K0(()=>Y.all().slice().sort()),[,A]=r(Math.max(0,N().findIndex((d)=>d===Y.selected))),R=r4(f.orchestrator),[S,_]=r(null),[z0,e]=r(null),[Y0,T]=r(null),Q0=!1;ff(()=>{if(Q()!=="accounts"||Q0)return;Q0=!0,IX().then(_),TX().then(e),uX().then(T)});function t(){return o4(Q(),{themeNames:N(),focusAccentSlots:gz,engineList:w0(),hasDaemon:R})}function V0(){return t().length}function C0(){return jz(f.kv.get(pJ,Bz))}function $(d){if(Y.selected===d)return;if(!Y.set(d))return;f.kv.set("activeTheme",d),f.onVisualPrefsChange?.()}function x(){return _j()}function f0(d){if(_j()===d)return;uZ(d),f.kv.set(kQ,d),f.onVisualPrefsChange?.()}function u(d){if(Y.transparentBackground===d)return;Y.setTransparentBackground(d),f.kv.set("transparentBackground",d),f.onVisualPrefsChange?.()}function G0(){u(!Y.transparentBackground)}function w(d){if(Y.focusAccent===d)return;Y.setFocusAccent(d),f.kv.set("focusAccent",d),f.onVisualPrefsChange?.()}function n(d){f.kv.set(pJ,d)}function q0(){return f.kv.get("notifications.toast.enabled",!0)!==!1}function W0(){return f.kv.get("notifications.sound.enabled",!0)!==!1}function H0(){f.kv.set("notifications.toast.enabled",!q0())}function k0(){f.kv.set("notifications.sound.enabled",!W0())}function x0(){return f.kv.get(mq,!0)!==!1}function y0(){f.kv.set(mq,!x0())}function Gf(){return f.kv.get("experimental.remoteProjects",!1)===!0}function m(){f.kv.set("experimental.remoteProjects",!Gf())}function L0(){return f.kv.get(Zz,!1)===!0}function s(){f.kv.set(Zz,!L0())}function R0(){return f.kv.get(Xz,!1)===!0}function i0(){f.kv.set(Xz,!R0())}function $0(){let d=f.kv.get("customEngineIds",[]);return Array.isArray(d)?d.filter((g0)=>typeof g0==="string"&&g0.trim().length>0):[]}function w0(){return[...mf,...$0()]}function v(d){let g0=f.kv.get(jJ(d),"");return typeof g0==="string"?g0.trim():""}function J0(d){return v(d)||QZ(d).join(" ")}function M0(d){return Q1(d)&&v(d).length===0&&!e0(d)}function _0(d){let g0=f.kv.get(WJ(d),"");return typeof g0==="string"?g0.trim():""}function e0(d){return _0(d).length>0}function T0(d){return _0(d)||NB[d]||d}let[Xf,Qf]=r(kf("lastSelectedVendor")??yf);function Rf(d){return Xf()===d}function o(d){af("lastSelectedVendor",d),f.kv.set("lastSelectedVendor",d),Qf(d)}async function p(d){let g0=await fY.show(J,J0(d),{dialogTitle:`${T0(d)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(g0===void 0)return;f.kv.set(jJ(d),g0.trim())}async function Z0(d){let g0=await fY.show(J,T0(d),{dialogTitle:`${T0(d)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(g0===void 0)return;f.kv.set(WJ(d),g0.trim())}function D0(d){if(f.kv.set(jJ(d),""),f.kv.set(WJ(d),""),!Q1(d))f.kv.set("customEngineIds",$0().filter((g0)=>g0!==d)),U((g0)=>Math.max(0,Math.min(g0,w0().length)))}async function j0(){let d=await fY.show(J,"",{dialogTitle:"Add engine",fieldLabel:"id",submitLabel:"next",placeholder:"lowercase slug, e.g. aider"});if(d===void 0)return;let g0=d.trim().toLowerCase();if(!g0||Q1(g0)||$0().includes(g0))return;let Kf=await fY.show(J,"",{dialogTitle:`Add engine \xB7 ${g0}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(Kf===void 0)return;let qf=await fY.show(J,g0,{dialogTitle:`Add engine \xB7 ${g0}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(f.kv.set("customEngineIds",[...$0(),g0]),Kf.trim())f.kv.set(jJ(g0),Kf.trim());let Of=qf?.trim()??"";f.kv.set(WJ(g0),Of&&Of!==g0?Of:vy(g0))}function k(){if(Q()!=="engines"||Z()!=="body")return null;let d=uQ(t(),j());return d?.kind==="engine"?d.vendor:null}function N0(){return pz(f.kv.get(rJ,Gq))}function p0(){let d=Hz.indexOf(N0()),g0=Hz[(d+1)%Hz.length];if(g0)f.kv.set(rJ,g0)}function b0(){let d=f.kv.get(AY,"");return typeof d==="string"?d:""}async function U0(){let d=await fY.show(J,b0(),{dialogTitle:"Custom editor command (use {file} for the path)",fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(d===void 0)return;let g0=d.trim();if(f.kv.set(AY,g0),g0)f.kv.set(rJ,"custom")}async function h0(){a("submitting...");try{let d=LG({title:L(),body:M()});a(`sent: ${d.url}`),O(""),g(""),U(0)}catch(d){a(`error: ${d instanceof Error?d.message:String(d)}`)}}let O0=()=>Q()==="feedback"&&Z()==="body";function r0(d){let g0=j()+d;if(g0<0||g0>2){q("sidebar");return}U(g0)}function l0(){if(Z()!=="sidebar"||V0()===0)return;if(q("body"),U(0),Q()==="general")A(0)}function Yf(d){if(Z()==="sidebar"){let qf=(B()+d+kz.length)%kz.length;V(qf);let Of=kz[qf];if(Of)H(Of.id),U(0);return}let g0=V0();if(g0===0)return;let Kf=(j()+d+g0)%g0;if(U(Kf),uQ(t(),Kf)?.kind==="theme")A(Kf)}function S0(d){H(d),V(kz.findIndex((g0)=>g0.id===d)),U(0),q("sidebar")}let xf={theme:(d)=>$(d.name),language:(d)=>f0(d.locale),transparent:()=>G0(),focusAccent:(d)=>w(d.slot),toast:()=>H0(),sound:()=>k0(),zenKeepTasks:()=>y0(),surface:(d)=>n(d.surface),editorKind:()=>p0(),editorCustom:()=>void U0(),engine:(d)=>void p(d.vendor),engineAdd:()=>void j0(),feedbackTitle:()=>U(0),feedbackBody:()=>U(1),feedbackSend:()=>void h0(),devReset:()=>void A8(J,f.kv,z),devRestartDaemon:()=>void g8(J,f.orchestrator,z),devRemoteProjects:()=>m(),devAutoStatus:()=>s(),devDispatcher:()=>i0()};function df(){let d=uQ(t(),j());if(!d)return;xf[d.kind](d)}return Df(()=>({enabled:(!f.standalone||J.stack.length===0)&&!O0(),bindings:[{key:"down",cmd:()=>Yf(1)},{key:"up",cmd:()=>Yf(-1)},{key:"j",cmd:()=>Yf(1)},{key:"k",cmd:()=>Yf(-1)},{key:"tab",cmd:()=>Yf(1)},{key:"right",cmd:l0},{key:"l",cmd:l0},{key:"left",cmd:()=>q("sidebar")},{key:"h",cmd:()=>q("sidebar")},{key:"return",cmd:()=>{if(Z()==="sidebar"){l0();return}df()}},{key:"t",cmd:G0},{key:"r",cmd:()=>{let d=k();if(d)Z0(d)}},{key:"x",cmd:()=>{let d=k();if(d)D0(d)}},{key:"d",cmd:()=>{let d=k();if(d)o(d)}}]})),Df(()=>({enabled:O0(),bindings:[{key:"tab",cmd:()=>r0(1)},{key:"shift+tab",cmd:()=>r0(-1)}]})),Df(()=>({enabled:O0()&&j()===2,bindings:[{key:"return",cmd:()=>void h0()}]})),(()=>{var d=W("box"),g0=W("box"),Kf=W("text"),qf=W("text"),Of=W("box"),y=W("box"),A0=W("box"),m0=W("text");return D(d,g0),D(d,Of),D(d,A0),X(d,"paddingLeft",2),X(d,"paddingRight",2),X(d,"paddingBottom",1),X(d,"gap",1),D(g0,Kf),D(g0,qf),X(g0,"flexDirection","row"),X(g0,"justifyContent","space-between"),K(Kf,()=>F("settings.title")),X(qf,"onMouseUp",()=>f.onClose()),K(qf,()=>F("settings.esc")),D(Of,y),X(Of,"flexDirection","row"),X(Of,"gap",2),K(Of,b(s4,{level:Z,cursor:B,switchSection:S0}),y),X(y,"flexGrow",1),X(y,"flexShrink",1),X(y,"flexDirection","column"),X(y,"gap",1),K(y,b(X0,{get when(){return Q()==="general"},get children(){return b(t4,{level:Z,bodyRow:j,setLevel:q,setBodyRow:U,themeNames:N,setThemeCursor:A,selectTheme:$,currentLocale:x,selectLanguage:f0,toggleTransparent:G0,selectFocusAccent:w,toastEnabled:q0,soundEnabled:W0,toggleToast:H0,toggleSound:k0,zenKeepsTasks:x0,toggleZenKeepsTasks:y0,settingsSurface:C0,selectSurface:n,editorKind:N0,cycleEditorKind:p0,editorCustomCommand:b0,editEditorCustom:()=>void U0()})}}),null),K(y,b(X0,{get when(){return Q()==="engines"},get children(){return b(e4,{level:Z,bodyRow:j,setLevel:q,setBodyRow:U,get vendors(){return w0()},isCustom:(u0)=>!Q1(u0),displayName:T0,commandText:J0,isDefault:M0,isDefaultEngine:Rf,editEngine:(u0)=>void p(u0),renameEngine:(u0)=>void Z0(u0),resetEngine:D0,onAddEngine:()=>void j0()})}}),null),K(y,b(X0,{get when(){return Q()==="accounts"},get children(){return b(fD,{claudeStatus:S,codexStatus:z0,copilotStatus:Y0})}}),null),K(y,b(X0,{get when(){return Q()==="keys"},get children(){return b(zD,{})}}),null),K(y,b(X0,{get when(){return Q()==="feedback"},get children(){return b(JD,{level:Z,bodyRow:j,setLevel:q,setBodyRow:U,title:L,setTitle:(u0)=>{O(u0),a("")},body:M,setBody:(u0)=>{g(u0),a("")},status:I,onTitleSubmit:()=>U(1),onBodySubmit:()=>void h0(),submit:()=>void h0()})}}),null),K(y,b(X0,{get when(){return Q()==="dev"},get children(){return b(YD,{level:Z,bodyRow:j,setLevel:q,setBodyRow:U,hasDaemon:R,confirmReset:()=>void A8(J,f.kv,z),confirmRestartDaemon:()=>void g8(J,f.orchestrator,z),remoteProjectsEnabled:Gf,toggleRemoteProjects:m,autoStatusEnabled:L0,toggleAutoStatus:s,dispatcherEnabled:R0,toggleDispatcher:i0})}}),null),D(A0,m0),X(A0,"paddingTop",0),K(m0,(()=>{var u0=I0(()=>!!O0());return()=>u0()?F("settings.nav.feedback"):F("settings.nav.default")})()),E((u0)=>{var X1=Py.BOLD,V1=G.text,tf=G.textMuted,P1=G.textMuted;return X1!==u0.e&&(u0.e=X(Kf,"attributes",X1,u0.e)),V1!==u0.t&&(u0.t=X(Kf,"fg",V1,u0.t)),tf!==u0.a&&(u0.a=X(qf,"fg",tf,u0.a)),P1!==u0.o&&(u0.o=X(m0,"fg",P1,u0.o)),u0},{e:void 0,t:void 0,a:void 0,o:void 0}),d})()}var y8=C(()=>{P();P();P();P();P();P();P();P();Wf();oY();E1();sq();GZ();Jq();gf();$B();S1();K1();Ef();G1();Zq();b1();j8();h1();F8();_4();N8();GD();Nz.show=(f,J,Y)=>{let z=!1;return new Promise((G)=>{f.replace(()=>b(Nz,{kv:J,orchestrator:Y,onVisualPrefsChange:()=>{z=!0},onClose:()=>G({visualPrefsChanged:z})}),()=>G({visualPrefsChanged:z}))})}});import{TextAttributes as my}from"@opentui/core";function XD(){let{theme:f}=d0(),J=TJ(),Y=RQ(),z=()=>Y.toasts().slice(-ZD),G=()=>Math.max(0,J().width-cy-ny),Z=()=>Math.max(0,J().height-dy-ZD-1);return b(X0,{get when(){return Y.toasts().length>0},get children(){var q=W("box");return X(q,"position","absolute"),X(q,"zIndex",2500),X(q,"width",40),X(q,"flexDirection","column"),X(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),X(j,"flexDirection","row"),X(j,"gap",1),X(j,"paddingLeft",1),X(j,"paddingRight",1),X(j,"onMouseUp",()=>Y.dismiss(Q.id)),X(U,"wrapMode","none"),K(U,V),X(L,"wrapMode","none"),K(L,()=>Q.title),E((O)=>{var M=H(),g=B(),I=my.BOLD,a=B();return M!==O.e&&(O.e=X(j,"backgroundColor",M,O.e)),g!==O.t&&(O.t=X(U,"fg",g,O.t)),I!==O.a&&(O.a=X(U,"attributes",I,O.a)),a!==O.o&&(O.o=X(L,"fg",a,O.o)),O},{e:void 0,t:void 0,a:void 0,o:void 0}),j})()}})),E((Q)=>{var H=G(),B=Z();return H!==Q.e&&(Q.e=X(q,"left",H,Q.e)),B!==Q.t&&(Q.t=X(q,"top",B,Q.t)),Q},{e:void 0,t:void 0}),q}})}var ZD=4,cy=40,ny=2,dy=2;var qD=C(()=>{P();P();P();P();P();P();P();Wf();CQ();Ef()});import{TextAttributes as iy}from"@opentui/core";function ly(f,J){let Y=f?`v${f}`:F("update.skew.olderBuild");return F("update.skew.hint",{daemon:Y,clientVersion:J})}function QD(f){let{theme:J}=d0(),Y=()=>Math.max(4,f.width()-2);return b(X0,{get when(){return f.stale()},get children(){var z=W("box"),G=W("text"),Z=W("box"),q=W("text"),Q=W("box"),H=W("text");return D(z,G),D(z,Z),D(z,Q),X(z,"flexDirection","column"),X(z,"flexShrink",0),X(z,"paddingLeft",1),X(z,"paddingRight",1),X(z,"paddingBottom",1),X(G,"wrapMode","none"),K(G,()=>"\u2594".repeat(Y())),D(Z,q),X(Z,"flexDirection","row"),X(Z,"gap",1),X(q,"wrapMode","none"),K(q,()=>F("update.skew.title")),D(Q,H),X(Q,"flexDirection","row"),X(Q,"gap",1),X(H,"wrapMode","word"),K(H,()=>ly(f.daemonVersion(),f.clientVersion)),E((B)=>{var{warning:V,warning:j}=J,U=iy.BOLD,L=J.text;return V!==B.e&&(B.e=X(G,"fg",V,B.e)),j!==B.t&&(B.t=X(q,"fg",j,B.t)),U!==B.a&&(B.a=X(q,"attributes",U,B.a)),L!==B.o&&(B.o=X(H,"fg",L,B.o)),B},{e:void 0,t:void 0,a:void 0,o:void 0}),z}})}var HD=C(()=>{P();P();P();P();P();P();Wf();Ef();G1()});function BD(f,J){return f.find((Y)=>Y.id!==J&&!Y.archived)}async function ay(f){let J=f.tasks.find((Z)=>Z.id===f.taskId);if(!J)return null;let Y=!J.archived;try{await f.orch.setArchived(f.taskId,Y)}catch(Z){return f.logger.error(`${f.logPrefix} archive failed:`,Z),null}if(!Y)return{archived:Y};let z=Mf(f.taskId),G=BD(f.tasks,f.taskId);if(await bJ(z,G?Mf(G.id):void 0).catch((Z)=>{f.logger.error(`${f.logPrefix} switch-client failed:`,Z)}),f.updateActiveTask)await f.orch.setActiveTask(G?.id??null).catch(()=>{});return await i1(z).catch((Z)=>{f.logger.error(`${f.logPrefix} kill tmux session failed:`,Z)}),{archived:Y,nextTask:G}}async function $y(f){let J=BD(f.tasks,f.taskId),Y=Mf(f.taskId);if(f.switchBeforeKill)await bJ(Y,J?Mf(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 i1(Y).catch((z)=>{f.logger.error(`${f.logPrefix} kill tmux session failed:`,z)}),{nextTask:J}}async function jD(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 ay({orch:f.orch,tasks:f.tasks(),taskId:J,logger:f.logger,logPrefix:f.logPrefix,updateActiveTask:f.updateActiveTask}))return;await f.reload?.()}async function WD(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(KH)){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:Z}=await $y({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,Z)}async function VD(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 KD(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 UD(f,J){let Y=f.tasks().find((Z)=>Z.id===J);if(!Y||!f.orch)return;let z=await dJ(),G=GY(z,Y.vendor??yf);try{await f.orch.setVendor(J,G)}catch(Z){f.logger.error(`${f.logPrefix} task.setVendor failed:`,Z),f.notifyError?.(`Couldn't switch engine: ${Z instanceof Error?Z.message:String(Z)}`);return}f.notifyInfo?.(`Engine \u2192 ${qz(G)} (applies on reopen)`),await f.reload?.()}async function DD(f){let J=m1(),Y=f.cursorRepo()??J[0]??process.cwd();if(f.openCreateSurface&&await f.openCreateSurface(Y))return;let z=f.lastVendor()??yf,G=await dJ();if(G.length===0)f.notifyInfo?.("No engine CLI detected \u2014 install claude or codex, or add one in Settings \u2192 Engines");let Z=f.orch,q=await f.promptNewTask(Y,J,{defaultVendor:z,availableVendors:G,discoverAdoptable:Z?(H)=>Z.discoverAdoptableWorktrees(H):void 0});if(!q)return;if(f.rememberVendor(q.vendor),PJ(q.repo),f.onRepoSaved?.(),!Z){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 Z.adoptWorktree({repo:q.repo,worktreePath:H.worktreePath,branch:H.branch,vendor:q.vendor})).id;else Q=(await Z.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 LD=C(()=>{oY();E1();LH();gf();S1();K1();J1()});import{spawn as ry}from"child_process";import{existsSync as py}from"fs";import{basename as _y,delimiter as oy,isAbsolute as sy,join as ty}from"path";function b8(f,J,Y){if(sy(f))return Y(f);let z=J.PATH??"";for(let G of z.split(oy)){if(!G)continue;if(Y(ty(G,f)))return!0}return!1}function Jb(f){let J=_y(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 MD(f={}){let J=f.env??process.env,Y=f.platform??process.platform,z=f.exists??py,G=J.KOBE_OPEN_EDITOR?.trim();if(G)return{id:"env",label:Jb(G),command:G,args:[]};for(let Z of ey)if(b8(Z.command,J,z))return{id:Z.id,label:Z.label,command:Z.command,args:[]};if(Y==="darwin"&&b8("open",J,z)){for(let Z of fb)if(Z.paths.some((q)=>z(q)))return{id:Z.id,label:Z.label,command:"open",args:["-a",Z.appName]};return{id:"mac-open",label:"Finder",command:"open",args:[]}}if(Y==="linux"&&b8("xdg-open",J,z))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function Yb(f,J){return[J.command,[...J.args,f]]}function FD(f,J,Y={}){if(!f)return!1;let z=Y.spawn??ry,[G,Z]=Yb(f,J);try{let q=z(G,Z,{detached:!0,stdio:"ignore"});if(q.pid===void 0)return!1;return q.unref(),!0}catch{return!1}}var ey,fb;var OD=C(()=>{ey=[{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"}],fb=[{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 EQ(f){let J=new Map;function Y(z){let G=J.get(z);if(!G){let[Z,q]=r(f.initial,f.equals?{equals:f.equals}:void 0);G={read:Z,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);eX(G,f,(Z)=>f.run(z,Z),(Z)=>G.write(Z))},reset(){J.clear()}}}var nZ=C(()=>{Wf();qZ();qZ()});import{stat as zb}from"fs/promises";import{join as Gb}from"path";async function Qb(f){try{let J=await zb(Gb(f,".git","HEAD"));return`${J.mtimeMs}:${J.size}`}catch{return null}}async function Hb(f,J,Y=BJ){let z=await Qb(f);if(z!==null){let Q=AD.get(f);if(Q&&Q.fingerprint===z)return Q.value}let G="",Z=await Y("git",["symbolic-ref","--short","HEAD"],{cwd:f,env:x1(),signal:J}),q=Z.status===0?Z.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)AD.set(f,{fingerprint:z,value:G});return G}function RD(f){return gD.read(f)}function CD(f){gD.poll(f)}var Zb=2000,Xb=30000,qb=1500,AD,gD;var kD=C(()=>{gY();nZ();AD=new Map;gD=EQ({initial:"",timeoutMs:Zb,slowRetryMs:Xb,minIntervalMs:qb,run:(f,J)=>Hb(f,J)})});function S8(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)},Z=()=>{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(){Z(),q(1)},moveUp(){Z(),q(-1)},selectCurrent(){Z();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)Z(),Q(0);else G()},pressShiftG(){Z(),Q(f.getFlatIds().length-1)},isChordArmed(){return Y},disarmChord(){Z()}}}function ND(f){let J=S8({getCursor:()=>f.cursorIndex(),setCursor:(Z)=>f.setCursorIndex(Z),getFlatIds:()=>f.flatTaskIds(),onSelect:(Z)=>f.onSelect(Z)}),Y=()=>{let Z=f.flatTaskIds(),q=f.cursorIndex();if(q<0||q>=Z.length)return;return Z[q]},z=()=>f.searchMode?.()??!1,G=()=>f.moveMode?.()??!1;Df(()=>({enabled:f.focused()&&!z(),bindings:wY({"sidebar.nav":(Z,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":(Z)=>{if(G())return;if(Z.shift)J.pressShiftG();else J.pressG()},"sidebar.delete":()=>{if(G())return;let Z=Y();if(Z!==void 0)f.onDeleteRequest?.(Z)},"sidebar.archive":()=>{if(G())return;let Z=Y();if(Z!==void 0)f.onArchiveRequest?.(Z)},"sidebar.localMerge":(Z)=>{if(!Z.shift)return;let q=Y();if(q!==void 0)f.onLocalMergeRequest?.(q)},"sidebar.rename":()=>{if(G())return;let Z=Y();if(Z!==void 0)f.onRenameRequest?.(Z)},"sidebar.pin":(Z)=>{if(G())return;if(!Z.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?.()}})})),Df(()=>({enabled:f.focused()&&G(),bindings:[{key:"escape",cmd:()=>f.onMoveModeExit?.()}]})),Df(()=>({enabled:f.focused(),bindings:wY({"sidebar.view":(Z,q)=>{f.onViewSwitch?.((q??0)%2===0?-1:1)}})})),Df(()=>({enabled:f.focused()&&z(),bindings:wY({"sidebar.search.nav":(Z,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 yD=C(()=>{bG();b1()});function I8(f,J){if(J<=0)return"";if(f.length<=J)return f;return`${f.slice(0,Math.max(0,J-1))}\u2026`}function T8(f,J){return` ${I8(f,Math.max(0,J))}`}function jb(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 Wb(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 ID(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 Vb(){return F("tasks.subtitle.noTracking")}function Kb(){return F("tasks.subtitle.materializing")}function Ub(f){if(f.kind==="main")return!1;return f.vendor!==void 0&&!Q1(f.vendor)}function u8(f){let{task:J}=f,Y=J.kind==="main",z=Y?f.mainBranch??"":J.branch,G=Bb[J.status],Z=f.activity?.state,q=Z!==void 0,Q=Db(Z),H=Wb(Z),B=Ub(J)&&!q,V=f.job!==void 0,j=V||!B&&(Z==="running"||f.live||!q&&!Y&&J.status==="in_progress"),U=uG[f.spinnerFrame]??uG[0],L=V?"primary":B?"textMuted":H?.tone??(j?"primary":Q?.tone??G.tone),O=B?Vb():jb(J.status),M=V?f.truncateBranch(Kb(),f.subtitleBudget):H?f.truncateBranch(H.text,f.subtitleBudget):z.length>0?f.truncateBranch(z,f.subtitleBudget):f.truncateBranch(O,f.subtitleBudget),g=B?bD:Q?.glyph??G.glyph,I=B?bD:Q?.glyph??"\u2605";return{isMain:Y,titleText:Y?MJ(J.repo):J.title,subtitleText:M,loading:j,stateGlyph:j?U:g,projectGlyph:j?U:I,tone:L}}function E8(f,J){if(!f.loading)return f;let Y=uG[J()%uG.length]??"\u280B";if(Y===f.stateGlyph&&Y===f.projectGlyph)return f;return{...f,stateGlyph:Y,projectGlyph:Y}}function Db(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 Bb,uG,SD=100,bD="\xB7";var TD=C(()=>{G1();K1();SQ();Bb={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"}};uG=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function x8(f){return uD.read(f)}function w8(f){uD.poll(f)}var Lb=4000,Mb=60000,Fb=1500,Ob,uD;var ED=C(()=>{gY();nZ();WG();nZ();Ob={added:0,deleted:0},uD=EQ({initial:Ob,equals:IJ,timeoutMs:Lb,slowRetryMs:Mb,minIntervalMs:Fb,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 jG(Y.stdout)}})});import{TextAttributes as Nf}from"@opentui/core";function Ab(f){switch(f){case"active":return F("tasks.view.workspace");case"archived":return F("tasks.view.archives")}}function wD(f,J=Rb){if(f.length<=J)return f;return`${f.slice(0,Math.max(0,J-1))}\u2026`}function Cb(f){let J=0;for(let Y of f)J+=(Y.codePointAt(0)??0)>=4352?2:1;return J}function kb(f,J){if(J<=0||f.length<=J)return f;return`\u2026${f.slice(f.length-Math.max(0,J-1))}`}function hD(f){let{theme:J}=d0(),Y=()=>f.focused?f.focused():!0,[z,G]=r("active"),[Z,q]=r(!1),[Q,H]=r(""),[B,V]=r(null),j=()=>f.projectFilter?.()??B(),U=(v)=>{if(f.onProjectFilterChange)f.onProjectFilterChange(v);else V(v)};function L(){H(""),q(!0),f.onSearchActiveChange?.(!0)}function O(v){q(!1),H(""),f.onSearchActiveChange?.(!1)}ff(()=>{if(!Z())return;let v=Y1();if(!v)return;let J0=(M0)=>{if(M0.defaultPrevented)return;if(!Y())return;if(M0.ctrl||M0.meta||M0.option)return;if(M0.name==="backspace"){H((T0)=>T0.slice(0,-1));return}let _0=M0.sequence;if(!_0||_0.length!==1)return;let e0=_0.charCodeAt(0);if(e0<32||e0===127)return;H((T0)=>T0+_0)};v.keyInput.on("keypress",J0),vf(()=>v.keyInput.off("keypress",J0))});let[M,g]=r(0),I=setInterval(()=>g((v)=>v+1),gb);vf(()=>clearInterval(I));let[a,N]=r(0),A=setInterval(()=>N((v)=>(v+1)%uG.length),SD);vf(()=>clearInterval(A));let R=()=>f.sortMode?.()??"default",S=K0(()=>v4(f.tasks(),z())),_=K0(()=>{let v=j();if(!v)return null;let J0=o1(v);return S().find((M0)=>o1(M0.repo)===J0)??null}),z0=K0(()=>_()?.repo??null),e=K0(()=>_()?.label??"all"),Y0=K0(()=>{let v=_();return v?v.count:S().reduce((J0,M0)=>J0+M0.count,0)}),T=K0((v)=>n4(v,U8(f.tasks(),z(),Z()?Q():"",R(),z0())),[]),Q0=K0(()=>D8(T())),t=K0(()=>c4(T())),V0=K0(()=>t().projectRows),C0=K0(()=>t().taskRows),$=K0(()=>{let v=new Map;for(let J0 of T())v.set(J0.flatIndex,J0);return v}),x=K0(()=>D8(U8(f.tasks(),z(),"",R(),z0())).length),f0=K0(()=>C0().length>0);ff(()=>{let v=j(),J0=S();if(v!==null&&J0.length>0&&(J0.length<=1||_()===null))U(null)});function u(){let v=S();if(v.length<=1){U(null);return}let J0=z0(),M0=J0?o1(J0):null,_0=M0===null?-1:v.findIndex((T0)=>o1(T0.repo)===M0),e0=v[_0+1];U(e0?.repo??null)}let G0=()=>f.width?f.width():xD,w=K0(()=>Math.max(6,G0()-9)),n=K0(()=>Math.max(6,G0()-16)),q0=TJ(),W0=K0(()=>{let v=Math.max(2,Math.min(10,Math.floor(q0().height*0.25))),J0=Math.max(2,V0().length*2);return Math.min(v,J0)}),[H0,k0]=r(null),[x0,y0]=r(-1),Gf,m,L0,s=new Map;ff(()=>{let v=f.width?f.width():xD,J0=L0;if(!J0)return;J0.width=v,J0.flexShrink=1,J0.minHeight=0}),ff(O1([x0,T],([v])=>{let J0=$().get(v);if(!J0)return;let M0=J0.task.kind==="main"?Gf:m;if(!M0)return;if(M0.viewport.height<=0)return;let _0=s.get(v);if(!_0)return;M0.scrollChildIntoView(_0.id)})),ff(O1(()=>[f.selectedId(),Q0()],([v,J0])=>{let M0=$f(x0);if(v===null){if(M0===-1&&J0.length>0)y0(0);else if(M0>=J0.length)y0(Math.max(0,J0.length-1));else if(J0.length===0)y0(-1);return}let _0=J0.indexOf(v);if(_0>=0){if(_0!==M0)y0(_0)}else if(J0.length===0)y0(-1);else if(M0<0||M0>=J0.length)y0(J0.length-1)})),ff(O1(z,()=>{let v=Q0();y0(v.length>0?0:-1)},{defer:!0})),ff(O1(z0,(v)=>y0(m4(T(),v)),{defer:!0})),ff(O1([Z,Q],()=>{if(!Z())return;let v=Q0();y0(v.length>0?0:-1)}));function R0(v){let J0=z(),M0=dZ.findIndex((T0)=>T0.view===J0);if(M0<0)return;let _0=(M0+v+dZ.length)%dZ.length,e0=dZ[_0];if(e0)G(e0.view)}ND({focused:Y,cursorIndex:x0,setCursorIndex:y0,flatTaskIds:Q0,onSelect:(v)=>{f.onSelect(v),f.onActivate?.(v)},onDeleteRequest:(v)=>f.onDeleteRequest?.(v),onArchiveRequest:(v)=>f.onArchiveRequest?.(v),onLocalMergeRequest:(v)=>f.onLocalMergeRequest?.(v),moveMode:f.moveMode,onMoveRequest:(v,J0)=>f.onMoveRequest?.(v,J0),onMoveModeExit:()=>f.onMoveModeExit?.(),onRenameRequest:(v)=>f.onRenameRequest?.(v),onPinRequest:(v)=>f.onPinRequest?.(v),onViewSwitch:(v)=>R0(v),onSortModeToggle:()=>f.onSortModeToggle?.(),onProjectFilterToggle:()=>u(),searchMode:Z,onSearchEnter:()=>L(),onSearchExit:(v)=>O(v)});let i0=(v)=>(()=>{var J0=W("box"),M0=W("box"),_0=W("text"),e0=W("text");return D(J0,M0),X(J0,"flexDirection","column"),X(J0,"flexShrink",0),K(J0,b(X0,{get when(){return v.topPad},get children(){var T0=W("box"),Xf=W("text");return D(T0,Xf),X(T0,"flexShrink",0),D(Xf,E0(" ")),X(Xf,"wrapMode","none"),T0}}),M0),D(M0,_0),D(M0,e0),X(M0,"flexDirection","row"),X(M0,"flexShrink",0),X(M0,"gap",1),X(M0,"paddingLeft",1),X(M0,"paddingRight",1),X(_0,"wrapMode","none"),K(_0,()=>v.label),X(e0,"wrapMode","none"),K(e0,()=>"\u2500".repeat(Math.max(2,G0()-10-v.label.length-(v.suffix?.length??0)))),K(M0,b(X0,{get when(){return v.suffix},get children(){var T0=W("text");return X(T0,"wrapMode","none"),K(T0,()=>v.suffix),E((Xf)=>{var Qf=J.info,Rf=Nf.BOLD;return Qf!==Xf.e&&(Xf.e=X(T0,"fg",Qf,Xf.e)),Rf!==Xf.t&&(Xf.t=X(T0,"attributes",Rf,Xf.t)),Xf},{e:void 0,t:void 0}),T0}}),null),E((T0)=>{var Xf=J.textMuted,Qf=Nf.BOLD,Rf=J.border;return Xf!==T0.e&&(T0.e=X(_0,"fg",Xf,T0.e)),Qf!==T0.t&&(T0.t=X(_0,"attributes",Qf,T0.t)),Rf!==T0.a&&(T0.a=X(e0,"fg",Rf,T0.a)),T0},{e:void 0,t:void 0,a:void 0}),J0})(),$0=(v)=>{switch(v){case"success":return J.success;case"warning":return J.warning;case"primary":return J.primary;case"error":return J.error;default:return J.textMuted}},w0=(v)=>{let J0=v.row.task,M0=v.row.flatIndex,_0=()=>M0===x0(),e0=()=>J0.id===f.selectedId(),T0=K0(()=>{let j0=f.chatRunState?.();if(!j0)return!1;let k=`${J0.id}:`;for(let[N0,p0]of j0)if(p0==="running"&&N0.startsWith(k))return!0;return!1}),Xf=K0(()=>{let j0=$q(f.worktreeChanges?.(),J0.worktreePath);if(j0)return j0;if(M(),!J0.archived)w8(J0.worktreePath);return x8(J0.worktreePath)},void 0,{equals:IJ}),Qf=K0(()=>{return M(),CD(J0.repo),RD(J0.repo)}),Rf=K0(()=>u8({task:J0,activity:f.engineState?.().get(J0.id),job:f.taskJobs?.().get(J0.id),live:T0(),spinnerFrame:0,subtitleBudget:n(),truncateBranch:wD,mainBranch:Qf()})),o=K0(()=>E8(Rf(),a)),p=()=>!o().loading?J.primary:$0(o().tone),Z0=()=>_0()?J.focusAccent:e0()?J.primary:void 0,D0=()=>_0()||e0()?"\u258C":" ";return(()=>{var j0=W("box"),k=W("box"),N0=W("box"),p0=W("text"),b0=W("box"),U0=W("text"),h0=W("text"),O0=W("box"),r0=W("text"),l0=W("box"),Yf=W("text");return D(j0,k),X(j0,"flexDirection","column"),X(j0,"gap",0),X(j0,"paddingBottom",0),D(k,N0),D(k,O0),uY((S0)=>{s.set(M0,S0),vf(()=>{if(s.get(M0)===S0)s.delete(M0)})},k),X(k,"flexDirection","column"),X(k,"gap",0),X(k,"onMouseUp",()=>{if(f.onSelect(J0.id),f.activateOnClick)f.onActivate?.(J0.id)}),X(k,"onMouseOver",(S0)=>k0({task:J0,x:S0.x,y:S0.y})),X(k,"onMouseOut",()=>k0((S0)=>S0?.task.id===J0.id?null:S0)),D(N0,p0),D(N0,b0),X(N0,"flexDirection","row"),X(N0,"gap",0),X(p0,"wrapMode","none"),K(p0,D0),D(b0,U0),D(b0,h0),X(b0,"flexDirection","row"),X(b0,"flexGrow",1),X(b0,"paddingRight",1),X(b0,"gap",0),X(U0,"wrapMode","none"),K(U0,()=>o().projectGlyph),X(h0,"wrapMode","none"),X(h0,"flexGrow",1),K(h0,()=>T8(o().titleText,w())),D(O0,r0),D(O0,l0),X(O0,"flexDirection","row"),X(O0,"gap",0),X(r0,"wrapMode","none"),K(r0,D0),D(l0,Yf),X(l0,"flexDirection","row"),X(l0,"flexGrow",1),X(l0,"paddingLeft",2),X(l0,"paddingRight",1),X(l0,"gap",1),X(Yf,"wrapMode","none"),X(Yf,"flexGrow",1),K(Yf,()=>o().subtitleText),K(l0,b(X0,{get when(){return Xf().added>0},get children(){var S0=W("text"),xf=E0("+");return D(S0,xf),X(S0,"wrapMode","none"),K(S0,()=>Xf().added,null),E((df)=>X(S0,"fg",J.success,df)),S0}}),null),K(l0,b(X0,{get when(){return Xf().deleted>0},get children(){var S0=W("text"),xf=E0("\u2212");return D(S0,xf),X(S0,"wrapMode","none"),K(S0,()=>Xf().deleted,null),E((df)=>X(S0,"fg",J.error,df)),S0}}),null),E((S0)=>{var xf=_0()?J.backgroundElement:void 0,df=Z0(),d=p(),g0=Nf.BOLD,Kf=J.text,qf=Nf.BOLD,Of=Z0(),y=J.textMuted,A0=Nf.DIM;return xf!==S0.e&&(S0.e=X(k,"backgroundColor",xf,S0.e)),df!==S0.t&&(S0.t=X(p0,"fg",df,S0.t)),d!==S0.a&&(S0.a=X(U0,"fg",d,S0.a)),g0!==S0.o&&(S0.o=X(U0,"attributes",g0,S0.o)),Kf!==S0.i&&(S0.i=X(h0,"fg",Kf,S0.i)),qf!==S0.n&&(S0.n=X(h0,"attributes",qf,S0.n)),Of!==S0.s&&(S0.s=X(r0,"fg",Of,S0.s)),y!==S0.h&&(S0.h=X(Yf,"fg",y,S0.h)),A0!==S0.r&&(S0.r=X(Yf,"attributes",A0,S0.r)),S0},{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}),j0})()};return(()=>{var v=W("box"),J0=W("box"),M0=W("box"),_0=W("text"),e0=W("box"),T0=W("box"),Xf=W("text"),Qf=W("scrollbox"),Rf=W("box");return D(v,J0),D(v,e0),D(v,Qf),uY((o)=>{L0=o},v),X(v,"flexGrow",1),X(v,"minHeight",0),X(v,"flexDirection","column"),X(v,"paddingTop",1),X(v,"paddingBottom",1),X(v,"paddingLeft",0),X(v,"paddingRight",0),D(J0,M0),X(J0,"flexDirection","row"),X(J0,"justifyContent","space-between"),X(J0,"gap",1),X(J0,"paddingBottom",1),X(J0,"paddingLeft",1),X(J0,"paddingRight",1),D(M0,_0),X(M0,"flexDirection","row"),X(M0,"gap",1),D(_0,E0("KOBE")),X(_0,"wrapMode","none"),K(M0,b(X0,{get when(){return f.headerStatus?.()},children:(o)=>(()=>{var p=W("text");return X(p,"wrapMode","none"),X(p,"onMouseUp",()=>f.onHeaderStatusClick?.()),K(p,()=>o().label),E((Z0)=>{var D0=o().emphasize?J.warning:J.textMuted,j0=o().emphasize?Nf.BOLD:Nf.DIM;return D0!==Z0.e&&(Z0.e=X(p,"fg",D0,Z0.e)),j0!==Z0.t&&(Z0.t=X(p,"attributes",j0,Z0.t)),Z0},{e:void 0,t:void 0}),p})()}),null),K(J0,b(X0,{get when(){return f.onAddTask},get children(){var o=W("text");return D(o,E0("[+]")),X(o,"wrapMode","none"),X(o,"onMouseUp",()=>f.onAddTask?.()),E((p)=>{var Z0=J.primary,D0=Nf.BOLD;return Z0!==p.e&&(p.e=X(o,"fg",Z0,p.e)),D0!==p.t&&(p.t=X(o,"attributes",D0,p.t)),p},{e:void 0,t:void 0}),o}}),null),K(v,b(X0,{get when(){return Z()},get children(){var o=W("box"),p=W("text"),Z0=W("text"),D0=W("text");return D(o,p),D(o,Z0),D(o,D0),X(o,"flexDirection","row"),X(o,"gap",0),X(o,"paddingBottom",1),X(o,"paddingLeft",1),D(p,E0("/")),X(p,"wrapMode","none"),X(Z0,"wrapMode","none"),K(Z0,Q),D(D0,E0("\u2588")),X(D0,"wrapMode","none"),K(o,b(X0,{get when(){return Q().length===0},get children(){var j0=W("text"),k=E0(" ");return D(j0,k),X(j0,"wrapMode","none"),K(j0,()=>F("tasks.search.placeholder"),null),E((N0)=>X(j0,"fg",J.textMuted,N0)),j0}}),null),K(o,b(X0,{get when(){return Q().length>0},get children(){var j0=W("text"),k=E0(" "),N0=E0("/");return D(j0,k),D(j0,N0),X(j0,"wrapMode","none"),K(j0,()=>Q0().length,N0),K(j0,x,null),E((p0)=>X(j0,"fg",J.textMuted,p0)),j0}}),null),E((j0)=>{var{info:k,text:N0,info:p0}=J,b0=Nf.BLINK;return k!==j0.e&&(j0.e=X(p,"fg",k,j0.e)),N0!==j0.t&&(j0.t=X(Z0,"fg",N0,j0.t)),p0!==j0.a&&(j0.a=X(D0,"fg",p0,j0.a)),b0!==j0.o&&(j0.o=X(D0,"attributes",b0,j0.o)),j0},{e:void 0,t:void 0,a:void 0,o:void 0}),o}}),e0),D(e0,T0),X(e0,"flexDirection","row"),X(e0,"justifyContent","space-between"),X(e0,"gap",1),X(e0,"paddingBottom",1),X(e0,"paddingLeft",1),X(e0,"paddingRight",1),D(T0,Xf),X(T0,"flexDirection","row"),X(T0,"gap",2),K(T0,b(Zf,{each:dZ,children:(o)=>{let p=()=>z()===o.view;return(()=>{var Z0=W("text");return X(Z0,"wrapMode","none"),X(Z0,"onMouseUp",()=>G(o.view)),K(Z0,()=>Ab(o.view)),E((D0)=>{var j0=p()?J.primary:J.textMuted,k=p()?Nf.BOLD:void 0;return j0!==D0.e&&(D0.e=X(Z0,"fg",j0,D0.e)),k!==D0.t&&(D0.t=X(Z0,"attributes",k,D0.t)),D0},{e:void 0,t:void 0}),Z0})()}}),Xf),D(Xf,E0("[/]")),X(Xf,"wrapMode","none"),K(e0,b(X0,{get when(){return f.sortMode},get children(){var o=W("text");return X(o,"wrapMode","none"),X(o,"onMouseUp",()=>f.onSortModeToggle?.()),K(o,()=>F("tasks.sort")),E((p)=>{var Z0=J.textMuted,D0=Nf.DIM;return Z0!==p.e&&(p.e=X(o,"fg",Z0,p.e)),D0!==p.t&&(p.t=X(o,"attributes",D0,p.t)),p},{e:void 0,t:void 0}),o}}),null),K(v,b(X0,{get when(){return S().length>1},get children(){var o=W("box"),p=W("box"),Z0=W("text"),D0=W("text"),j0=W("text"),k=E0(" ");return D(o,p),D(o,j0),X(o,"flexDirection","row"),X(o,"justifyContent","space-between"),X(o,"gap",1),X(o,"paddingBottom",1),X(o,"paddingLeft",1),X(o,"paddingRight",1),X(o,"onMouseUp",()=>u()),D(p,Z0),D(p,D0),X(p,"flexDirection","row"),X(p,"gap",1),X(Z0,"wrapMode","none"),K(Z0,()=>F("tasks.project.label")),X(D0,"wrapMode","none"),K(D0,e),D(j0,k),X(j0,"wrapMode","none"),K(j0,Y0,k),K(j0,(()=>{var N0=I0(()=>Y0()===1);return()=>N0()?F("tasks.project.taskSingular"):F("tasks.project.taskPlural")})(),null),E((N0)=>{var p0=J.textMuted,b0=Nf.BOLD,U0=z0()?J.primary:J.textMuted,h0=z0()?Nf.BOLD:void 0,O0=J.textMuted,r0=Nf.DIM;return p0!==N0.e&&(N0.e=X(Z0,"fg",p0,N0.e)),b0!==N0.t&&(N0.t=X(Z0,"attributes",b0,N0.t)),U0!==N0.a&&(N0.a=X(D0,"fg",U0,N0.a)),h0!==N0.o&&(N0.o=X(D0,"attributes",h0,N0.o)),O0!==N0.i&&(N0.i=X(j0,"fg",O0,N0.i)),r0!==N0.n&&(N0.n=X(j0,"attributes",r0,N0.n)),N0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),o}}),Qf),K(v,b(X0,{get when(){return V0().length>0},get children(){var o=W("box"),p=W("scrollbox"),Z0=W("box");return D(o,p),X(o,"flexDirection","column"),X(o,"flexShrink",0),K(o,b(i0,{get label(){return F("tasks.header.projects")}}),p),D(p,Z0),uY((D0)=>{Gf=D0},p),X(p,"flexShrink",0),X(p,"flexGrow",0),X(p,"minHeight",0),X(p,"stickyScroll",!1),X(p,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),X(Z0,"flexShrink",0),X(Z0,"gap",0),X(Z0,"paddingRight",1),K(Z0,b(Zf,{get each(){return V0()},children:(D0)=>b(w0,{row:D0})})),E((D0)=>X(p,"maxHeight",W0(),D0)),o}}),Qf),K(v,b(i0,{get label(){return F("tasks.header.tasks")},get suffix(){return I0(()=>R()==="default")()?void 0:R()},get topPad(){return V0().length>0}}),Qf),D(Qf,Rf),uY((o)=>{m=o},Qf),X(Qf,"flexGrow",1),X(Qf,"minHeight",0),X(Qf,"stickyScroll",!1),X(Qf,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),X(Rf,"flexShrink",0),X(Rf,"gap",0),X(Rf,"paddingRight",1),K(Rf,b(Zf,{get each(){return C0()},children:(o)=>{let{task:p,flatIndex:Z0}=o,D0=()=>Z0===x0(),j0=()=>p.id===f.selectedId(),k=K0(()=>{let r0=f.chatRunState?.();if(!r0)return!1;let l0=`${p.id}:`;for(let[Yf,S0]of r0)if(S0==="running"&&Yf.startsWith(l0))return!0;return!1}),N0=K0(()=>{let r0=$q(f.worktreeChanges?.(),p.worktreePath);if(r0)return r0;if(M(),!p.archived)w8(p.worktreePath);return x8(p.worktreePath)},void 0,{equals:IJ}),p0=K0(()=>u8({task:p,activity:f.engineState?.().get(p.id),job:f.taskJobs?.().get(p.id),live:k(),spinnerFrame:0,subtitleBudget:n(),truncateBranch:wD,mainBranch:""})),b0=K0(()=>E8(p0(),a)),U0=()=>$0(b0().tone),h0=()=>D0()?J.focusAccent:j0()?J.primary:void 0,O0=()=>D0()||j0()?"\u258C":" ";return(()=>{var r0=W("box"),l0=W("box"),Yf=W("box"),S0=W("text"),xf=W("box"),df=W("text"),d=W("text"),g0=W("box"),Kf=W("text"),qf=W("box"),Of=W("text");return D(r0,l0),X(r0,"flexDirection","column"),X(r0,"gap",0),X(r0,"paddingBottom",1),D(l0,Yf),D(l0,g0),uY((y)=>{s.set(Z0,y),vf(()=>{if(s.get(Z0)===y)s.delete(Z0)})},l0),X(l0,"flexDirection","column"),X(l0,"gap",0),X(l0,"onMouseUp",()=>{if(f.onSelect(p.id),f.activateOnClick)f.onActivate?.(p.id)}),X(l0,"onMouseOver",(y)=>k0({task:p,x:y.x,y:y.y})),X(l0,"onMouseOut",()=>k0((y)=>y?.task.id===p.id?null:y)),D(Yf,S0),D(Yf,xf),X(Yf,"flexDirection","row"),X(Yf,"gap",0),X(S0,"wrapMode","none"),K(S0,O0),D(xf,df),D(xf,d),X(xf,"flexDirection","row"),X(xf,"flexGrow",1),X(xf,"paddingRight",1),X(xf,"gap",0),X(df,"wrapMode","none"),K(df,()=>b0().stateGlyph),X(d,"wrapMode","none"),X(d,"flexGrow",1),K(d,()=>T8(b0().titleText,w())),K(xf,b(X0,{get when(){return I0(()=>!!f.moveMode?.())()&&D0()},get children(){var y=W("text");return X(y,"wrapMode","none"),K(y,()=>F("tasks.moveChip")),E((A0)=>X(y,"fg",J.warning,A0)),y}}),null),D(g0,Kf),D(g0,qf),X(g0,"flexDirection","row"),X(g0,"gap",0),X(Kf,"wrapMode","none"),K(Kf,O0),D(qf,Of),X(qf,"flexDirection","row"),X(qf,"flexGrow",1),X(qf,"paddingLeft",2),X(qf,"paddingRight",1),X(qf,"gap",1),X(Of,"wrapMode","none"),X(Of,"flexGrow",1),K(Of,()=>b0().subtitleText),K(qf,b(X0,{get when(){return p.pinned===!0},get children(){var y=W("text");return D(y,E0("\u25B4")),X(y,"wrapMode","none"),E((A0)=>X(y,"fg",J.warning,A0)),y}}),null),K(qf,b(X0,{get when(){return ID(p)},children:(y)=>(()=>{var A0=W("text");return X(A0,"wrapMode","none"),K(A0,()=>y().glyph),E((m0)=>X(A0,"fg",$0(y().tone),m0)),A0})()}),null),K(qf,b(X0,{get when(){return N0().added>0},get children(){var y=W("text"),A0=E0("+");return D(y,A0),X(y,"wrapMode","none"),K(y,()=>N0().added,null),E((m0)=>X(y,"fg",J.success,m0)),y}}),null),K(qf,b(X0,{get when(){return N0().deleted>0},get children(){var y=W("text"),A0=E0("\u2212");return D(y,A0),X(y,"wrapMode","none"),K(y,()=>N0().deleted,null),E((m0)=>X(y,"fg",J.error,m0)),y}}),null),E((y)=>{var A0=D0()?J.backgroundElement:void 0,m0=h0(),u0=U0(),X1=Nf.BOLD,V1=J.text,tf=j0()||D0()?Nf.BOLD:void 0,P1=h0(),xJ=J.textMuted,M1=Nf.DIM;return A0!==y.e&&(y.e=X(l0,"backgroundColor",A0,y.e)),m0!==y.t&&(y.t=X(S0,"fg",m0,y.t)),u0!==y.a&&(y.a=X(df,"fg",u0,y.a)),X1!==y.o&&(y.o=X(df,"attributes",X1,y.o)),V1!==y.i&&(y.i=X(d,"fg",V1,y.i)),tf!==y.n&&(y.n=X(d,"attributes",tf,y.n)),P1!==y.s&&(y.s=X(Kf,"fg",P1,y.s)),xJ!==y.h&&(y.h=X(Of,"fg",xJ,y.h)),M1!==y.r&&(y.r=X(Of,"attributes",M1,y.r)),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}),r0})()}}),null),K(Rf,b(X0,{get when(){return Q0().length===0},get children(){var o=W("box"),p=W("text");return D(o,p),X(o,"paddingTop",1),X(o,"paddingLeft",1),K(p,(()=>{var Z0=I0(()=>!!(Z()&&Q().trim().length>0));return()=>Z0()?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")})()),E((Z0)=>X(p,"fg",J.textMuted,Z0)),o}}),null),K(Rf,b(X0,{get when(){return I0(()=>!!(z0()&&Q0().length>0&&!f0()))()&&!(Z()&&Q().trim().length>0)},get children(){var o=W("box"),p=W("text");return D(o,p),X(o,"paddingTop",1),X(o,"paddingLeft",1),X(p,"wrapMode","none"),K(p,(()=>{var Z0=I0(()=>z()==="active");return()=>Z0()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject")})()),E((Z0)=>{var D0=J.textMuted,j0=Nf.DIM;return D0!==Z0.e&&(Z0.e=X(p,"fg",D0,Z0.e)),j0!==Z0.t&&(Z0.t=X(p,"attributes",j0,Z0.t)),Z0},{e:void 0,t:void 0}),o}}),null),K(Rf,b(X0,{get when(){return I0(()=>z()==="archived")()&&Q0().length>0},get children(){var o=W("box"),p=W("text");return D(o,p),X(o,"paddingTop",1),X(o,"paddingLeft",1),X(p,"wrapMode","none"),K(p,()=>F("tasks.archiveHint")),E((Z0)=>{var D0=J.textMuted,j0=Nf.DIM;return D0!==Z0.e&&(Z0.e=X(p,"fg",D0,Z0.e)),j0!==Z0.t&&(Z0.t=X(p,"attributes",j0,Z0.t)),Z0},{e:void 0,t:void 0}),o}}),null),K(v,b(X0,{get when(){return f.zenActive?.()},get children(){var o=W("box"),p=W("text");return D(o,p),X(o,"flexShrink",0),X(o,"paddingLeft",1),X(o,"paddingRight",1),X(o,"paddingTop",1),D(p,E0("\u262F ZEN")),X(p,"wrapMode","none"),E((Z0)=>{var D0=J.accent,j0=Nf.BOLD;return D0!==Z0.e&&(Z0.e=X(p,"fg",D0,Z0.e)),j0!==Z0.t&&(Z0.t=X(p,"attributes",j0,Z0.t)),Z0},{e:void 0,t:void 0}),o}}),null),K(v,b(X0,{get when(){return H0()},children:(o)=>{let p=K0(()=>{let b0=o().task,U0=[];if(U0.push({text:b0.kind==="main"?MJ(b0.repo):b0.title,bold:!0}),b0.branch.length>0)U0.push({text:`\u2387 ${b0.branch}`});if(b0.worktreePath.length>0)U0.push({text:b0.worktreePath,dim:!0});return U0}),Z0=72,D0=K0(()=>Math.min(68,Math.max(...p().map((b0)=>Cb(b0.text))))),j0=K0(()=>D0()+4),k=K0(()=>p().length+2),N0=K0(()=>Math.max(0,Math.min(o().x+2,q0().width-j0()-1))),p0=K0(()=>Math.max(0,Math.min(o().y+1,q0().height-k()-1)));return(()=>{var b0=W("box");return X(b0,"position","absolute"),X(b0,"zIndex",2600),X(b0,"flexDirection","column"),X(b0,"border",!0),X(b0,"paddingLeft",1),X(b0,"paddingRight",1),K(b0,b(Zf,{get each(){return p()},children:(U0)=>(()=>{var h0=W("text");return X(h0,"wrapMode","none"),K(h0,(()=>{var O0=I0(()=>!!U0.dim);return()=>O0()?kb(U0.text,D0()):I8(U0.text,D0())})()),E((O0)=>{var r0=U0.dim?J.textMuted:J.text,l0=U0.bold?Nf.BOLD:U0.dim?Nf.DIM:void 0;return r0!==O0.e&&(O0.e=X(h0,"fg",r0,O0.e)),l0!==O0.t&&(O0.t=X(h0,"attributes",l0,O0.t)),O0},{e:void 0,t:void 0}),h0})()})),E((U0)=>{var h0=N0(),O0=p0(),r0=j0(),l0=J.focusAccent,Yf=J.backgroundElement;return h0!==U0.e&&(U0.e=X(b0,"left",h0,U0.e)),O0!==U0.t&&(U0.t=X(b0,"top",O0,U0.t)),r0!==U0.a&&(U0.a=X(b0,"width",r0,U0.a)),l0!==U0.o&&(U0.o=X(b0,"borderColor",l0,U0.o)),Yf!==U0.i&&(U0.i=X(b0,"backgroundColor",Yf,U0.i)),U0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),b0})()}}),null),E((o)=>{var p=Y()?J.focusAccent:J.textMuted,Z0=Nf.BOLD,D0=J.textMuted,j0=Nf.DIM;return p!==o.e&&(o.e=X(_0,"fg",p,o.e)),Z0!==o.t&&(o.t=X(_0,"attributes",Z0,o.t)),D0!==o.a&&(o.a=X(Xf,"fg",D0,o.a)),j0!==o.o&&(o.o=X(Xf,"attributes",j0,o.o)),o},{e:void 0,t:void 0,a:void 0,o:void 0}),v})()}var xD=32,dZ,gb=2000,Rb=16;var PD=C(()=>{P();P();P();P();P();P();P();P();P();G1();P();Wf();Ef();Ef();kD();SQ();yD();TD();WG();ED();dZ=[{view:"active"},{view:"archived"}]});var dD={};jf(dD,{startTasksPane:()=>Ib,legendRowCap:()=>nD,legendCap:()=>cD});import{existsSync as vD}from"fs";import{stat as Nb}from"fs/promises";import{TextAttributes as xQ}from"@opentui/core";function h8(f){return!!f&&YX(f)}function mD(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 bb(f){let{theme:J}=d0(),Y=Pf(),z=SG(),G=RQ(),[Z,q]=r(f.tasks().some((m)=>m.id===f.initialTaskId)?f.initialTaskId:f.tasks()[0]?.id??null);function Q(m){G.notify({kind:"error",taskId:Z()??"",tabId:"",title:m})}function H(m){G.notify({kind:"done",taskId:Z()??"",tabId:"",title:m})}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),g=(m)=>{M(m),z.set("tasksPane.projectFilter",m)},[I,a]=r(null),[N,A]=r(!1);{let m=process.env.TMUX_PANE;if(m){let L0=()=>{a0(["show-options","-wqv","-t",m,vz]).then(({code:R0,stdout:i0})=>{A(R0===0&&i0.trim().length>0)})};L0();let s=setInterval(L0,1000);vf(()=>clearInterval(s))}}let R=TJ(),S=!f.initialTaskId;ff(()=>{let m=f.orch?.activeTaskSignal()();if(!m)return;if(!S){if(m!==f.initialTaskId)return;S=!0}q(m)}),ff(O1(()=>f.orch?.uiPrefsSignal()(),(m)=>{if(m&&m.sortMode!==$f(j))U(m.sortMode);if(m&&m.projectFilter!==$f(O))M(m.projectFilter)})),ff(()=>{let m=f.orch?.updateSignal()();if(m)a(m)});let _={orch:f.orch,tasks:()=>f.tasks(),confirm:async(m)=>await JY.show(Y,m.title,m.body,m.cancelLabel,m.confirmLabel)===!0,promptText:(m,L0)=>fY.show(Y,m,L0),logger:console,logPrefix:"[kobe tasks]",notifyError:Q,notifyInfo:H,reload:()=>f.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(m,L0)=>{if(Z()!==m)return;let s=f.tasks();q(L0?.id??(s.find((R0)=>!R0.archived)??s[0])?.id??null)},promptNewTask:(m,L0,s)=>LQ.show(Y,m,L0,s),cursorRepo:()=>{let m=f.tasks();return(m.find((L0)=>L0.id===Z())??m[0])?.repo},lastVendor:()=>kf("lastSelectedVendor"),rememberVendor:(m)=>af("lastSelectedVendor",m),openCreateSurface:async(m)=>{if(jz(z.get(pJ,Bz))!=="chattab")return!1;let s=await k1();if(!s)return!1;return await Pq(s,m),!0},selectTask:(m)=>q(m),enterTask:(m)=>H0(m)};async function z0(){await DD(_)}async function e(){if(jz(z.get(pJ,Bz))==="chattab"){let s=await k1();if(s){await wq(s);return}}if(!(await Nz.show(Y,z,f.orch??void 0)).visualPrefsChanged)return;if(!z.flush())return;try{let s=await k1();if(s)await HG(s)}catch(s){console.error("[kobe tasks] failed to refresh workspace panes:",s)}}async function Y0(){let m=await k1();if(m){await hq(m);return}TG.show(Y)}async function T(){if(!I()?.hasUpdate){H(F("tasks.toast.alreadyLatest",{version:o0}));return}let L0=await k1();if(!L0)return;await vq(L0)}async function Q0(m){await jD(_,m)}async function t(m){await WD(_,m)}async function V0(m){await VD(_,m)}async function C0(m){await KD(_,m)}async function $(m){await UD(_,m)}async function x(m){let s=f.tasks().find((i0)=>i0.id===m)?.worktreePath;if(!s||!vD(s)){if(!f.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),Q(F("tasks.toast.noDaemonWorktree"));return}try{s=await f.orch.ensureWorktree(m)}catch(i0){console.error("[kobe tasks] task.ensureWorktree failed:",i0),Q(mD(i0));return}await f.reload()}if(!s||!vD(s))return;let R0=MD();if(!R0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),Q(F("tasks.toast.noEditor"));return}if(!FD(s,R0))console.error(`[kobe tasks] failed to open worktree with ${R0.label}`),Q(F("tasks.toast.openWorktreeFailed",{label:R0.label}))}async function f0(){if(!process.env.TMUX_PANE)return;let m=await k1();if(!m)return;let L0=await az(m);if(!L0)return;await v0(["select-pane","-t",L0])}async function u(m,L0){let s=f.tasks().find((R0)=>R0.id===m);if(!s||s.kind==="main"||!f.orch)return;try{await f.orch.moveTask(m,L0)}catch(R0){console.error("[kobe tasks] task.move failed:",R0),Q(F("tasks.toast.moveTaskFailed",{message:R0 instanceof Error?R0.message:String(R0)}));return}q(m),await f.reload()}let[G0,w]=r(z.get("tasksPane.keysCollapsed",!1)===!0),n=(m)=>{w(m),z.set("tasksPane.keysCollapsed",m)};ff(O1(()=>f.orch?.uiPrefsSignal()(),(m)=>{if(m&&m.keysCollapsed!==$f(G0))w(m.keysCollapsed)}));let[q0,W0]=r(!1);Df(()=>({enabled:Y.stack.length===0&&!q0(),bindings:wY({"help.open":()=>void Y0(),"task.new":()=>void z0(),"settings.open.sidebar":()=>void e(),"tasks.update":()=>void T(),"tasks.openWorktree":()=>{let m=Z();if(m)x(m)},"tasks.renameBranch":()=>{let m=Z();if(m)C0(m)},"tasks.cycleEngine":()=>{let m=Z();if(m)$(m)},"tasks.toggleKeys":()=>n(!G0()),"tasks.focusEngine":()=>void f0().catch((m)=>console.error("[kobe tasks] focus engine pane failed:",m))})}));async function H0(m){let L0=Mf(m),s=f.tasks().find((J0)=>J0.id===m),R0=await k1();if(R0&&R0!==L0)await KZ(R0);if(await Bf(L0)){let J0=await iX(L0,"@kobe_worktree")||s?.worktreePath||"";if(h8(J0)){let M0=s?.repo?_J(s.repo,J0,{kind:"repo-init"}):void 0;await yY({name:L0,cwd:J0,command:N1(s?.vendor),taskId:m,vendor:s?.vendor,repo:s?.repo,launchInit:M0})}await iq(L0),await v0(["switch-client","-t",`=${L0}`]),f.orch?.setActiveTask(m).catch(()=>{});return}let $0=s?.worktreePath;if(!h8($0)){if(!f.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),Q(F("tasks.toast.noDaemonOpen"));return}try{$0=await f.orch.ensureWorktree(m)}catch(J0){console.error("[kobe tasks] task.ensureWorktree failed:",J0),Q(mD(J0));return}await f.reload()}if(!h8($0))return;let w0=s?.repo?_J(s.repo,$0,{kind:"repo-init"}):void 0;if(!await yY({name:L0,cwd:$0,command:N1(s?.vendor),taskId:m,vendor:s?.vendor,repo:s?.repo,launchInit:w0})){console.error(`[kobe tasks] failed to start session ${L0}`),Q(F("tasks.toast.sessionStartFailed"));return}await iq(L0),await v0(["switch-client","-t",`=${L0}`]),f.orch?.setActiveTask(m).catch(()=>{})}let k0=K0(()=>{let m=I();if(m?.hasUpdate)return{label:`v${m.latest} \u2191`,emphasize:!0};return{label:`v${o0}`,emphasize:!1}}),x0=()=>f.orch?.daemonStaleSignal()()??!1,y0=()=>f.orch?.daemonVersionSignal()()??null,Gf=K0(()=>f.tasks().find((m)=>m.id===Z())?.kind==="main");return(()=>{var m=W("box"),L0=W("box");return D(m,L0),X(m,"flexDirection","column"),X(m,"flexGrow",1),K(m,b(QD,{stale:x0,daemonVersion:y0,clientVersion:o0,width:()=>R().width}),L0),X(L0,"flexGrow",1),X(L0,"flexShrink",1),K(L0,b(hD,{get tasks(){return f.tasks},selectedId:Z,onSelect:q,onActivate:(s)=>void H0(s),activateOnClick:!0,headerStatus:k0,onHeaderStatusClick:()=>void T(),onAddTask:()=>void z0(),zenActive:N,width:()=>R().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 s=f.orch;if(!s||s.connectionStateSignal()()!=="online")return null;return s.worktreeChangesSignal()()}:void 0},onRenameRequest:(s)=>void V0(s),onDeleteRequest:(s)=>void t(s),onArchiveRequest:(s)=>void Q0(s),onLocalMergeRequest:(s)=>{let R0=f.tasks().find((i0)=>i0.id===s);if(!R0||R0.kind==="main")return;q(s),V((i0)=>!i0)},moveMode:B,onMoveRequest:(s,R0)=>void u(s,R0),onMoveModeExit:()=>V(!1),sortMode:j,projectFilter:O,onProjectFilterChange:g,onSortModeToggle:()=>{let s=j()==="default"?"recent":"default";U(s),z.set("activeSortMode",s)},focused:()=>Y.stack.length===0,onSearchActiveChange:W0})),K(m,b(Sb,{moveMode:B,selectedIsMain:Gf,collapsed:G0,onToggleCollapsed:()=>n(!G0())}),null),E((s)=>X(m,"backgroundColor",J.background,s)),m})()}function cD(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 nD(f){let J=f.map(cD).filter((Y)=>Y!==null);return J.length>0?J.join("/"):null}function Sb(f){let{theme:J}=d0(),[Y,z]=r("Prefix");f1(()=>{a0(["show-options","-g","prefix"]).then(({code:U,stdout:L})=>{if(U!==0)return;let O=TQ(L);if(O)z(O)})});let G=()=>{X8();let U=Oq(),L=U.binds,O=[],M=U.focus.filter((I)=>I!==null).map((I)=>I.chord);if(M.length===4&&M.every((I,a)=>I===RY[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 g=(I,a)=>{let N=a.map((A)=>L[A]?.chord).filter((A)=>!!A);if(N.length>0)O.push({k:`prefix ${N.join("/")}`,label:I})};if(L["tmux.detach"])O.push({k:L["tmux.detach"].chord,label:F("tasks.hints.detach")});return g(F("tasks.hints.splits"),["tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"]),g(F("tasks.hints.panes"),["tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle"]),O},Z=()=>{X8();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=nD(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():Z(),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),X(U,"flexShrink",0),X(U,"flexDirection","column"),X(U,"paddingLeft",1),X(U,"paddingRight",1),X(U,"paddingTop",1),X(U,"paddingBottom",1),X(U,"gap",0),X(L,"wrapMode","none"),X(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 g=W("box"),I=W("box"),a=W("text"),N=E0("["),A=E0("]"),R=W("box"),S=W("text");return D(g,I),D(g,R),X(g,"flexDirection","row"),X(g,"gap",1),X(g,"justifyContent","space-between"),D(I,a),X(I,"width",10),X(I,"flexShrink",0),D(a,N),D(a,A),X(a,"wrapMode","none"),K(a,()=>IG(O.k,Y()),A),D(R,S),X(R,"flexShrink",0),X(S,"wrapMode","none"),K(S,()=>V(O.label)),E((_)=>{var z0=M()?J.textMuted:J.accent,e=M()?xQ.DIM:xQ.BOLD,Y0=B(),T=J.textMuted,Q0=M()?xQ.DIM:void 0;return z0!==_.e&&(_.e=X(a,"fg",z0,_.e)),e!==_.t&&(_.t=X(a,"attributes",e,_.t)),Y0!==_.a&&(_.a=X(R,"width",Y0,_.a)),T!==_.o&&(_.o=X(S,"fg",T,_.o)),Q0!==_.i&&(_.i=X(S,"attributes",Q0,_.i)),_},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),g})()}})}}),null),E((O)=>{var M=J.textMuted,g=xQ.DIM;return M!==O.e&&(O.e=X(L,"fg",M,O.e)),g!==O.t&&(O.t=X(L,"attributes",g,O.t)),O},{e:void 0,t:void 0}),U})()}async function Ib(f={}){await L1({logContext:"tasks",providers:{notifications:!0},setup:()=>Tb(f)})}async function Tb(f){let J=new Iz({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 nJ("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(B){BY("tasks-boot",B),nJ("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let Z=()=>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 Nb(J.filePath);B=`${V.mtimeMs}:${V.size}`}catch{}if(B===Q)return;Q=B,await q()})().catch(()=>{})},yb);return{root:()=>[b(bb,{tasks:Z,get initialTaskId(){return f.initialTaskId},orch:G,reload:q}),b(XD,{})],onDestroy:()=>{if(H)clearInterval(H);G?.dispose()}}}var yb=1500;var iD=C(()=>{P();P();P();P();P();P();P();P();Sf();qJ();G1();P();_Y();y1();Wf();EY();E1();lf();e1();PG();zG();gf();Aq();U1();M8();yG();F8();y8();qD();HD();bG();PZ();CQ();Ef();L8();PY();b1();LD();OD();PD();J1();h1();O8()});var lD={};jf(lD,{startSettingsHost:()=>Eb});function ub(f){let J=SG(),Y=Pf(),{theme:z}=d0(),G=!1,Z=!1;async function q(){if(Z)return;Z=!0;try{if(J.flush()&&G){let H=await k1();if(H)await HG(H)}}catch(Q){console.error("[kobe settings] failed to refresh workspace panes:",Q)}finally{process.exit(0)}}return Df(()=>({enabled:Y.stack.length===0,bindings:[{key:"escape",cmd:q},{key:"q",cmd:q},{key:"ctrl+c",cmd:q}]})),(()=>{var Q=W("scrollbox");return X(Q,"flexGrow",1),X(Q,"paddingTop",1),X(Q,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),K(Q,b(Nz,{kv:J,get orchestrator(){return f.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{G=!0},onClose:q})),E((H)=>X(Q,"backgroundColor",z.background,H)),Q})()}async function Eb(){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(ub,{orchestrator:f}),onDestroy:()=>{f?.dispose()}}}})}var aD=C(()=>{P();P();P();P();P();P();y1();EY();y8();PZ();Ef();PY();b1();J1();h1()});var $D={};jf($D,{startHelpHost:()=>wb});function xb(){let f=Pf(),{theme:J}=d0();function Y(){process.exit(0)}return Df(()=>({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 X(z,"flexGrow",1),X(z,"paddingTop",1),K(z,b(TG,{onClose:Y})),E((G)=>X(z,"backgroundColor",J.background,G)),z})()}async function wb(){await L1({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(xb,{})})})}var rD=C(()=>{P();P();P();P();P();M8();Ef();PY();b1();h1()});var pD={};jf(pD,{startUpdateHost:()=>db});import{spawn as hb,spawnSync as Pb}from"child_process";import{TextAttributes as EG}from"@opentui/core";function vb(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 hb(Y,z,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function mb(f){return f.replace(/\r\n/g,`
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,`
225
226
  `).split(`
226
- `).map((J)=>J.trim()).filter(Boolean)}function cb(){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 nb(){let{theme:f}=d0(),J=Y1(),[Y,z]=r(null),[G,Z]=r([]),[q,Q]=r(!0),[H,B]=r("update"),[V,j]=r(null),U=K0(()=>Y()?.latest??o0),L=K0(()=>G()[0]?.url??iQ(U())),O=K0(()=>[{id:"update",key:"U",label:F("update.actions.updateNow"),detail:wJ},{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 xG({force:!0});z(N);let A=N?.latest??o0,R=await dQ({current:o0,latest:A});Z(R),Q(!1)}function g(N){let A=O().map((_)=>_.id),S=(A.indexOf(H())+N+A.length)%A.length;B(A[S]??"update")}function I(N=H()){if(N==="close")process.exit(0);if(N==="release"){j(vb(L())?F("update.statusReleaseOpened"):F("update.statusReleaseError"));return}a()}async function a(){j(F("update.statusRunningUpdater")),await new Promise((R)=>setTimeout(R,30)),J?.destroy(),process.stdout.write(`
227
- kobe ${o0} -> latest
228
- `),process.stdout.write(`running: ${wJ}
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(`
228
+ kobe ${s0} -> latest
229
+ `),process.stdout.write(`running: ${hJ}
229
230
 
230
- `);let N=Pb("sh",["-c",wJ],{stdio:"inherit"}),A=N.status??(N.error?1:0);if(N.error)process.stderr.write(`
231
+ `);let N=ib("sh",["-c",hJ],{stdio:"inherit"}),g=N.status??(N.error?1:0);if(N.error)process.stderr.write(`
231
232
  kobe update: failed to start updater: ${N.error.message}
232
- `);process.stdout.write(A===0?`
233
+ `);process.stdout.write(g===0?`
233
234
  ${F("update.updateComplete")}
234
235
  `:`
235
- ${F("update.updateFailed",{code:String(A)})}
236
- `),process.stdout.write(F("update.pressAnyKey")),await cb(),process.exit(A)}return Df(()=>({bindings:[{key:"up",cmd:()=>g(-1)},{key:"down",cmd:()=>g(1)},{key:"k",cmd:()=>g(-1)},{key:"j",cmd:()=>g(1)},{key:"return",cmd:()=>I()},{key:"u",cmd:()=>I("update")},{key:"r",cmd:()=>I("release")},{key:"q",cmd:()=>I("close")},{key:"escape",cmd:()=>I("close")},{key:"ctrl+c",cmd:()=>I("close")}]})),(()=>{var N=W("box"),A=W("box"),R=W("text"),S=W("text"),_=W("box"),z0=W("text"),e=W("text"),Y0=E0("v"),T=W("text"),Q0=W("text"),t=E0("v"),V0=W("box"),C0=W("box"),$=W("text"),x=W("scrollbox"),f0=W("box");return D(N,A),D(N,_),D(N,V0),D(N,C0),D(N,x),X(N,"flexDirection","column"),X(N,"flexGrow",1),X(N,"paddingTop",1),X(N,"paddingLeft",2),X(N,"paddingRight",2),D(A,R),D(A,S),X(A,"flexDirection","row"),X(A,"justifyContent","space-between"),X(A,"flexShrink",0),X(R,"wrapMode","none"),K(R,()=>F("update.pageTitle")),D(S,E0("q / esc")),X(S,"wrapMode","none"),X(S,"onMouseUp",()=>I("close")),D(_,z0),D(_,e),D(_,T),D(_,Q0),X(_,"flexDirection","row"),X(_,"gap",2),X(_,"flexShrink",0),X(_,"paddingTop",1),X(z0,"wrapMode","none"),K(z0,()=>F("update.current")),D(e,Y0),X(e,"wrapMode","none"),K(e,o0,null),X(T,"wrapMode","none"),K(T,()=>F("update.latest")),D(Q0,t),X(Q0,"wrapMode","none"),K(Q0,U,null),X(V0,"flexDirection","column"),X(V0,"flexShrink",0),X(V0,"paddingTop",1),X(V0,"gap",0),K(V0,b(Zf,{get each(){return O()},children:(u)=>(()=>{var G0=W("box"),w=W("box"),n=W("text"),q0=E0("["),W0=E0("]"),H0=W("box"),k0=W("text"),x0=W("text");return D(G0,w),D(G0,H0),D(G0,x0),X(G0,"flexDirection","row"),X(G0,"gap",1),X(G0,"paddingLeft",1),X(G0,"paddingRight",1),X(G0,"onMouseUp",()=>I(u.id)),D(w,n),X(w,"width",4),X(w,"flexShrink",0),D(n,q0),D(n,W0),X(n,"wrapMode","none"),K(n,()=>u.key,W0),D(H0,k0),X(H0,"width",14),X(H0,"flexShrink",0),X(k0,"wrapMode","none"),K(k0,()=>u.label),X(x0,"wrapMode","word"),K(x0,()=>u.detail),E((y0)=>{var Gf=H()===u.id?f.primary:void 0,m=H()===u.id?f.selectedListItemText:f.accent,L0=EG.BOLD,s=H()===u.id?f.selectedListItemText:f.text,R0=H()===u.id?f.selectedListItemText:f.textMuted;return Gf!==y0.e&&(y0.e=X(G0,"backgroundColor",Gf,y0.e)),m!==y0.t&&(y0.t=X(n,"fg",m,y0.t)),L0!==y0.a&&(y0.a=X(n,"attributes",L0,y0.a)),s!==y0.o&&(y0.o=X(k0,"fg",s,y0.o)),R0!==y0.i&&(y0.i=X(x0,"fg",R0,y0.i)),y0},{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 u=W("text");return X(u,"wrapMode","word"),K(u,V),E((G0)=>X(u,"fg",f.info,G0)),u}}),C0),D(C0,$),X(C0,"flexShrink",0),X(C0,"paddingTop",1),X($,"wrapMode","none"),K($,()=>F("update.changesSectionHeader",{from:o0,to:U()})),D(x,f0),X(x,"flexGrow",1),X(x,"flexShrink",1),X(x,"stickyScroll",!1),X(f0,"flexDirection","column"),X(f0,"paddingRight",1),X(f0,"paddingBottom",1),X(f0,"gap",0),K(f0,b(X0,{get when(){return q()},get children(){var u=W("text");return K(u,()=>F("update.loadingNotes")),E((G0)=>X(u,"fg",f.textMuted,G0)),u}}),null),K(f0,b(X0,{get when(){return I0(()=>!q())()&&G().length===0},get children(){var u=W("text");return X(u,"wrapMode","word"),K(u,()=>F("update.notesUnavailable")),E((G0)=>X(u,"fg",f.textMuted,G0)),u}}),null),K(f0,b(Zf,{get each(){return G()},children:(u)=>(()=>{var G0=W("box"),w=W("text"),n=E0("v");return D(G0,w),X(G0,"flexDirection","column"),X(G0,"paddingBottom",1),X(G0,"gap",0),D(w,n),X(w,"wrapMode","none"),K(w,()=>u.version,null),K(G0,b(Zf,{get each(){return mb(u.body)},children:(q0)=>(()=>{var W0=W("text");return X(W0,"wrapMode","word"),K(W0,q0),E((H0)=>X(W0,"fg",f.textMuted,H0)),W0})()}),null),E((q0)=>{var W0=f.text,H0=EG.BOLD;return W0!==q0.e&&(q0.e=X(w,"fg",W0,q0.e)),H0!==q0.t&&(q0.t=X(w,"attributes",H0,q0.t)),q0},{e:void 0,t:void 0}),G0})()}),null),E((u)=>{var{background:G0,text:w}=f,n=EG.BOLD,q0=f.textMuted,W0=f.textMuted,H0=f.text,k0=EG.BOLD,x0=f.textMuted,y0=Y()?.hasUpdate?f.warning:f.success,Gf=EG.BOLD,m=f.textMuted,L0=EG.DIM,s={trackOptions:{backgroundColor:f.background,foregroundColor:f.borderActive}};return G0!==u.e&&(u.e=X(N,"backgroundColor",G0,u.e)),w!==u.t&&(u.t=X(R,"fg",w,u.t)),n!==u.a&&(u.a=X(R,"attributes",n,u.a)),q0!==u.o&&(u.o=X(S,"fg",q0,u.o)),W0!==u.i&&(u.i=X(z0,"fg",W0,u.i)),H0!==u.n&&(u.n=X(e,"fg",H0,u.n)),k0!==u.s&&(u.s=X(e,"attributes",k0,u.s)),x0!==u.h&&(u.h=X(T,"fg",x0,u.h)),y0!==u.r&&(u.r=X(Q0,"fg",y0,u.r)),Gf!==u.d&&(u.d=X(Q0,"attributes",Gf,u.d)),m!==u.l&&(u.l=X($,"fg",m,u.l)),L0!==u.u&&(u.u=X($,"attributes",L0,u.u)),s!==u.c&&(u.c=X(x,"verticalScrollbarOptions",s,u.c)),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,d:void 0,l:void 0,u:void 0,c:void 0}),N})()}async function db(){await L1({setup:()=>({root:()=>b(nb,{})})})}var _D=C(()=>{P();P();P();P();P();P();P();P();P();Wf();U1();Ef();G1();PY();b1()});async function oD(f,J){if(!J)return 0;return pf(f).history.latestTranscriptMtimeForWorktree(J)}var sD=C(()=>{UY()});function ib(f){return f.trim().split(/\s+/)[0]??""}function eD(f,J,Y,z){let G=zf(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 Z=(J.trim()||(z??"").trim()).trim();if(!Z)return null;let q=ib(Z);if(!q)return null;let Q=Z.includes(tD)?Z.split(tD).join(G):`${Z} ${G}`;return{bin:q,command:Q}}function lb(f,J,Y){let z=zf(J);return["f=$(mktemp 2>/dev/null)",`if [ -n "$f" ] && git show ${zf(`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(`
237
- `)}function ab(f,J){let Y=f.endsWith("/")?f:`${f}/`;return J.startsWith(Y)?J.slice(Y.length):null}async function $b(f){let J=pz(kf(rJ)),Y=kf(AY)??"",z=(process.env.VISUAL??process.env.EDITOR??"").trim();if(J!=="auto")return eD(J,Y,f,z);if(z)return eD("custom","",f,z);let G=zf(f);for(let Z of G7)if(await fL(Z))return{bin:Z,command:`${Z} ${G}`};return null}async function fL(f){try{return await Bun.spawn(["sh","-c",`command -v ${zf(f)} >/dev/null 2>&1`],{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function rb(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 JL(f,J,Y){let z=await $b(Y);if(!z)return!1;if(!await fL(z.bin))return!1;let G=await pb(z,J,Y);return await HJ(f,{cwd:J,command:G,name:_b(Y)}),!0}async function pb(f,J,Y){let{bin:z,command:G}=f;if(z!=="nvim"&&z!=="vim")return G;if(G!==`${z} ${zf(Y)}`)return G;let Z=ab(J,Y);if(!Z)return G;if(!await rb(J,Z))return G;return lb(z,Y,Z)}function _b(f){let J=f.slice(f.lastIndexOf("/")+1).trim();return J.length>0?J:"edit"}var tD="{file}";var YL=C(()=>{gY();gf();Zq();Sf();qJ()});async function P8(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(),Z=(Y.stdout??"").trim();throw Error(`git ${f.join(" ")} (cwd=${J}) exited with code ${z}: ${G||Z||"(no output)"}`)}return Y.stdout??""}async function v8(f){let Y=(await P8(["ls-files","--cached","--others","--exclude-standard","--full-name"],f)).split(`
238
- `).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 m8(f){let J=await P8(["status","--porcelain","--untracked-files=all"],f),Y=ZL(J),z=null;try{let G=await P8(["diff","--no-color","--numstat","HEAD"],f);z=new Map(ob(G).map((Z)=>[Z.path,{added:Z.added,deleted:Z.deleted}]))}catch{z=new Map}return Y.map((G)=>{let Z=z?.get(G.path);if(Z)return{...G,added:Z.added,deleted:Z.deleted};return G})}function ob(f){let J=f.split(`
239
- `).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 Z=z.indexOf("\t",G+1);if(Z<0)continue;let q=z.slice(0,G),Q=z.slice(G+1,Z),H=z.slice(Z+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 zL(f){let J={name:"",path:"",isDir:!0,children:[]};for(let Y of f){if(!Y)continue;let z=Y.split("/").filter((Z)=>Z.length>0);if(z.length===0)continue;let G=J;for(let Z=0;Z<z.length;Z++){let q=z[Z],H=Z!==z.length-1,B=G.children.find((V)=>V.name===q&&V.isDir===H);if(!B)B={name:q,path:z.slice(0,Z+1).join("/"),isDir:H,children:[]},G.children.push(B);G=B}}return GL(J),J}function GL(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)GL(J)}function ZL(f){let J=f.split(`
240
- `).map((z)=>z.replace(/\r$/,"")),Y=[];for(let z of J){if(z.length<4)continue;let G=z[0],Z=z[1],q=z[2];if(G===void 0||Z===void 0||q!==" ")continue;let Q=z.slice(3),H;if(G==="?"&&Z==="?")H="?";else{let B=Z!==" "?Z: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 c8=C(()=>{Xq()});function n8(f){Df(()=>({enabled:f.focused(),bindings:wY({"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=iZ.indexOf(z);if(G<0)return;let Z=(Y??0)%2===0?-1:1,q=iZ[(G+Z+iZ.length)%iZ.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 iZ;var d8=C(()=>{bG();b1();iZ=["all","changes"]});import{spawn as XL}from"child_process";import{existsSync as sb}from"fs";import{platform as tb}from"os";function qL(f){if(!f)return;let J=tb();if(J==="linux"){if(sb("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){lZ("wslview",[f],()=>{let Y=XL("wslpath",["-w",f],{stdio:["ignore","pipe","ignore"]}),z="";Y.stdout?.on("data",(G)=>{z+=G.toString()}),Y.on("close",(G)=>{if(G===0)lZ("explorer.exe",[z.trim()])})});return}lZ("xdg-open",[f]);return}if(J==="darwin"){lZ("open",[f]);return}if(J==="win32"){lZ("cmd.exe",["/c","start","",f]);return}}function lZ(f,J,Y){try{let z=XL(f,J,{stdio:"ignore",detached:!0});z.on("error",()=>Y?.()),z.unref()}catch{Y?.()}}var QL=()=>{};function i8(f,J,Y,z){for(let G of f.children)if(G.isDir){let Z=J.has(G.path);if(z.push({kind:"dir",path:G.path,name:G.name,depth:Y,expanded:Z,hasChildren:G.children.length>0}),Z)i8(G,J,Y+1,z)}else z.push({kind:"file",path:G.path,name:G.name,depth:Y})}function HL(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 BL(f){return f.map((J)=>({kind:"status",path:J.path,status:J.status,added:J.added,deleted:J.deleted}))}function eb(f){return`${f.kind}\x00${f.path}`}function fS(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 jL(f,J){return bQ(f,J,eb,fS)}function WL(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 VL(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 KL=()=>{};import{watch as JS}from"fs";import{TextAttributes as aZ}from"@opentui/core";function YS(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 GS(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 ZS(f){switch(f){case"all":return F("files.tabs.all");case"changes":return F("files.tabs.changes")}}function l8(f){let{theme:J}=d0(),Y=TJ(),z=()=>f.focused?f.focused():!0,[G,Z]=r("all"),[q,Q]=r(0),[H,B]=r(0),[V,j]=r(null,{equals:WL}),[U,L]=r(null,{equals:VL}),[O,M]=r(null),[g,I]=r(new Set),a=0;async function N(x,f0){let u=++a;if(f0==null){j(null),L(null),M(null);return}M(null);try{if(x==="all"){let G0=await v8(f0);if(u!==a||f.worktreePath()!==f0)return;j(G0)}else if(x==="changes"){let G0=await m8(f0);if(u!==a||f.worktreePath()!==f0)return;L(G0)}}catch(G0){let w=G0 instanceof Error?G0.message:String(G0);if(u===a&&f.worktreePath()===f0)M(w)}}ff(O1(f.worktreePath,async(x)=>{j(null),L(null),M(null),Q(0),I(new Set),await N(G(),x)})),ff(O1(f.worktreePath,(x)=>{if(x==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let f0=null,u=null;try{u=JS(x,{recursive:!0},(G0,w)=>{if(w==null)return;let n=w.toString();if(n===".git"||n.startsWith(".git/")||n.startsWith(".git\\"))return;if(n.startsWith("node_modules/")||n.startsWith("node_modules\\"))return;if(f0!=null)clearTimeout(f0);f0=setTimeout(()=>{f0=null,B((q0)=>q0+1)},500)}),u.on("error",()=>{})}catch{}vf(()=>{if(f0!=null)clearTimeout(f0);if(u!=null)u.close()})})),ff(O1([G,H],async([x,f0])=>{let u=f.worktreePath();if(u==null)return;Q(0);let w=H()>0;if(x==="all"){if(V()==null||w)await N("all",u)}else if(x==="changes"){if(U()==null||w)await N("changes",u)}}));let A=K0(()=>{let x=V();if(x==null)return null;return zL(x)}),R=K0((x)=>{let f0=[];if(G()==="all"){let u=A();if(u!=null)i8(u,g(),0,f0)}else if(G()==="changes"){let u=U();if(u!=null)f0.push(...BL(u))}return jL(x??[],f0)},[]),S=K0(()=>{let x=0,f0=0;for(let u of R()){if(u.kind!=="status")continue;if(u.added!=null)x=Math.max(x,String(u.added).length+1);if(u.deleted!=null)f0=Math.max(f0,String(u.deleted).length+1)}return{added:x,deleted:f0}}),_=K0(()=>{let x=S(),f0=(x.added>0?x.added+1:0)+(x.deleted>0?x.deleted+1:0);return Math.max(8,Y().width-6-f0)});function z0(){let x=R();if(x.length===0)return;Q(Math.min(q()+1,x.length-1))}function e(){if(R().length===0)return;Q(Math.max(q()-1,0))}function Y0(){let x=R(),f0=q(),u=x[f0];if(!u)return;if(u.kind!=="dir")return;if(!u.expanded&&u.hasChildren)I((G0)=>{let w=new Set(G0);return w.add(u.path),w});else if(u.expanded){if(f0+1<x.length)Q(f0+1)}}function T(){if(G()!=="all")return;let x=R(),f0=q(),u=x[f0];if(!u)return;if(u.kind==="dir"&&u.expanded){I((w)=>{let n=new Set(w);return n.delete(u.path),n});return}if(u.kind!=="dir"&&u.kind!=="file")return;let G0=u.depth-1;if(G0<0)return;for(let w=f0-1;w>=0;w--){let n=x[w];if(!n)continue;if(n.kind==="dir"&&n.depth===G0){Q(w);return}}}function Q0(){let x=R(),f0=q();if(f0<0||f0>=x.length)return;let u=x[f0];if(!u)return;if(u.kind==="dir"){I((G0)=>{let w=new Set(G0);if(w.has(u.path))w.delete(u.path);else w.add(u.path);return w});return}f.onOpenFile(u.path)}function t(){let x=R(),f0=q();if(f0<0||f0>=x.length)return;let u=x[f0];if(!u||u.kind==="dir")return;f.onMention?.(u.path)}function V0(){B((x)=>x+1),f.onRefresh?.()}function C0(){let x=R(),f0=q();if(f0<0||f0>=x.length)return;let u=x[f0];if(!u||u.kind==="dir")return;let G0=f.worktreePath();if(!G0)return;let w=`${G0}/${u.path}`;qL(w)}n8({focused:z,moveDown:z0,moveUp:e,setTab:(x)=>Z(x),currentTab:G,openCurrent:Q0,mentionCurrent:t,createPR:f.onCreatePR,openExternal:C0,refresh:V0,expandOrDescend:Y0,collapseOrParent:T});let $;return ff(O1([q,R],([x,f0])=>{if(!$)return;if(f0.length===0)return;let u=$.scrollTop,G0=$.viewport.height;if(G0<=0)return;if(x<u)$.scrollTo({x:0,y:x});else if(x>=u+G0)$.scrollTo({x:0,y:x-G0+1})})),(()=>{var x=W("box"),f0=W("box"),u=W("box"),G0=W("scrollbox");return D(x,f0),D(x,G0),X(x,"flexDirection","column"),X(x,"flexGrow",1),X(x,"paddingTop",1),X(x,"paddingBottom",1),X(x,"paddingLeft",0),X(x,"paddingRight",0),K(x,b(X0,{get when(){return f.onZenToggle||f.onCreatePR},get children(){var w=W("box");return X(w,"flexDirection","row"),X(w,"justifyContent","flex-end"),X(w,"gap",2),X(w,"paddingBottom",1),X(w,"flexShrink",0),K(w,b(X0,{get when(){return f.onZenToggle},get children(){var n=W("box"),q0=W("text"),W0=W("text");return D(n,q0),D(n,W0),X(n,"flexDirection","row"),X(n,"gap",1),X(n,"onMouseUp",()=>f.onZenToggle?.()),D(q0,E0("\u262F")),X(q0,"wrapMode","none"),X(W0,"wrapMode","none"),K(W0,()=>F("files.actions.zen")),E((H0)=>{var k0=J.accent,x0=aZ.BOLD,y0=J.text;return k0!==H0.e&&(H0.e=X(q0,"fg",k0,H0.e)),x0!==H0.t&&(H0.t=X(q0,"attributes",x0,H0.t)),y0!==H0.a&&(H0.a=X(W0,"fg",y0,H0.a)),H0},{e:void 0,t:void 0,a:void 0}),n}}),null),K(w,b(X0,{get when(){return f.onCreatePR},get children(){var n=W("box"),q0=W("text"),W0=W("text");return D(n,q0),D(n,W0),X(n,"flexDirection","row"),X(n,"gap",1),X(n,"onMouseUp",()=>f.onCreatePR?.()),D(q0,E0("[P]")),X(q0,"wrapMode","none"),X(W0,"wrapMode","none"),K(W0,()=>F("files.actions.createPR")),E((H0)=>{var k0=J.accent,x0=aZ.BOLD,y0=J.text;return k0!==H0.e&&(H0.e=X(q0,"fg",k0,H0.e)),x0!==H0.t&&(H0.t=X(q0,"attributes",x0,H0.t)),y0!==H0.a&&(H0.a=X(W0,"fg",y0,H0.a)),H0},{e:void 0,t:void 0,a:void 0}),n}}),null),w}}),f0),D(f0,u),X(f0,"flexDirection","row"),X(f0,"justifyContent","space-between"),X(f0,"paddingBottom",0),X(f0,"flexShrink",0),X(u,"flexDirection","row"),X(u,"gap",2),K(u,b(Zf,{each:zS,children:(w)=>{let n=()=>G()===w;return(()=>{var q0=W("text");return X(q0,"wrapMode","none"),X(q0,"onMouseUp",()=>Z(w)),K(q0,()=>ZS(w)),E((W0)=>{var H0=n()?J.primary:J.textMuted,k0=n()?aZ.BOLD:void 0;return H0!==W0.e&&(W0.e=X(q0,"fg",H0,W0.e)),k0!==W0.t&&(W0.t=X(q0,"attributes",k0,W0.t)),W0},{e:void 0,t:void 0}),q0})()}})),K(f0,b(X0,{get when(){return f.cornerBadge?.()},children:(w)=>(()=>{var n=W("text");return X(n,"wrapMode","none"),K(n,()=>w().text),E((q0)=>{var W0=w().active?J.accent:J.textMuted,H0=w().active?aZ.BOLD:void 0;return W0!==q0.e&&(q0.e=X(n,"fg",W0,q0.e)),H0!==q0.t&&(q0.t=X(n,"attributes",H0,q0.t)),q0},{e:void 0,t:void 0}),n})()}),null),K(x,b(X0,{get when(){return G()==="changes"},get children(){var w=W("box"),n=W("text");return D(w,n),X(w,"flexDirection","column"),X(w,"paddingBottom",1),X(w,"flexShrink",0),X(w,"gap",0),X(n,"wrapMode","none"),K(n,()=>F("files.legend.changes")),E((q0)=>X(n,"fg",J.textMuted,q0)),w}}),G0),K(x,b(X0,{get when(){return G()!=="changes"},get children(){var w=W("box");return X(w,"flexDirection","row"),X(w,"paddingBottom",1),X(w,"flexShrink",0),w}}),G0),uY((w)=>{$=w},G0),X(G0,"flexGrow",1),X(G0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),K(G0,b(X0,{get when(){return f.worktreePath()==null},get children(){var w=W("box"),n=W("text");return D(w,n),X(w,"paddingTop",1),X(w,"paddingLeft",1),K(n,()=>F("files.empty.noTask")),E((q0)=>X(n,"fg",J.textMuted,q0)),w}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null)()&&O()!=null},get children(){var w=W("box"),n=W("text"),q0=W("text");return D(w,n),D(w,q0),X(w,"paddingTop",1),X(w,"paddingLeft",1),X(w,"flexDirection","column"),X(w,"gap",0),X(n,"wrapMode","word"),K(n,()=>GS(O()??"")),X(q0,"wrapMode","word"),K(q0,()=>F("files.error.retryHint")),E((W0)=>{var{error:H0,textMuted:k0}=J;return H0!==W0.e&&(W0.e=X(n,"fg",H0,W0.e)),k0!==W0.t&&(W0.t=X(q0,"fg",k0,W0.t)),W0},{e:void 0,t:void 0}),w}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null&&O()==null&&R().length===0)()&&(G()==="all"&&V()!=null||G()==="changes"&&U()!=null)},get children(){var w=W("box"),n=W("text");return D(w,n),X(w,"paddingTop",1),X(w,"paddingLeft",1),K(n,(()=>{var q0=I0(()=>G()==="all");return()=>q0()?F("files.empty.noFiles"):F("files.empty.noChanges")})()),E((q0)=>X(n,"fg",J.textMuted,q0)),w}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null&&O()==null)()&&R().length>0},get children(){var w=W("box");return X(w,"flexShrink",0),X(w,"gap",0),X(w,"paddingRight",1),K(w,b(Zf,{get each(){return R()},children:(n,q0)=>{let W0=()=>q0()===q(),H0=(()=>{var s=W("text");return X(s,"wrapMode","none"),K(s,()=>W0()?"\u258C":" "),E((R0)=>X(s,"fg",W0()?J.focusAccent:void 0,R0)),s})(),k0=()=>W0()?J.backgroundElement:void 0;if(n.kind==="dir"){let s=" ".repeat(n.depth),R0=n.expanded?"\u25BE":"\u25B8";return(()=>{var i0=W("box"),$0=W("box"),w0=W("text");return D(i0,$0),X(i0,"flexDirection","row"),X(i0,"gap",0),X(i0,"onMouseUp",()=>{Q(q0()),I((v)=>{let J0=new Set(v);if(J0.has(n.path))J0.delete(n.path);else J0.add(n.path);return J0})}),K(i0,H0,$0),D($0,w0),X($0,"flexGrow",1),X($0,"paddingRight",1),X(w0,"wrapMode","none"),K(w0,()=>`${s}${R0} ${n.name}/`),E((v)=>{var J0=k0(),M0=J.textMuted,_0=aZ.BOLD;return J0!==v.e&&(v.e=X(i0,"backgroundColor",J0,v.e)),M0!==v.t&&(v.t=X(w0,"fg",M0,v.t)),_0!==v.a&&(v.a=X(w0,"attributes",_0,v.a)),v},{e:void 0,t:void 0,a:void 0}),i0})()}if(n.kind==="file"){let s=" ".repeat(n.depth);return(()=>{var R0=W("box"),i0=W("box"),$0=W("text");return D(R0,i0),X(R0,"flexDirection","row"),X(R0,"gap",0),X(R0,"onMouseUp",()=>{Q(q0()),f.onOpenFile(n.path)}),K(R0,H0,i0),D(i0,$0),X(i0,"flexGrow",1),X(i0,"paddingRight",1),X($0,"wrapMode","none"),K($0,()=>`${s} ${n.name}`),E((w0)=>{var v=k0(),J0=J.text;return v!==w0.e&&(w0.e=X(R0,"backgroundColor",v,w0.e)),J0!==w0.t&&(w0.t=X($0,"fg",J0,w0.t)),w0},{e:void 0,t:void 0}),R0})()}let x0=YS(n.status),y0=()=>{switch(x0){case"success":return J.success;case"warning":return J.warning;case"error":return J.error;case"info":return J.info;default:return J.textMuted}},Gf=S(),m=n.added==null?" ".repeat(Gf.added):`+${n.added}`.padStart(Gf.added),L0=n.deleted==null?" ".repeat(Gf.deleted):`-${n.deleted}`.padStart(Gf.deleted);return(()=>{var s=W("box"),R0=W("box"),i0=W("text"),$0=W("text");return D(s,R0),X(s,"flexDirection","row"),X(s,"gap",0),X(s,"onMouseUp",()=>{Q(q0()),f.onOpenFile(n.path)}),K(s,H0,R0),D(R0,i0),D(R0,$0),X(R0,"flexDirection","row"),X(R0,"flexGrow",1),X(R0,"gap",1),X(R0,"paddingRight",1),X(i0,"wrapMode","none"),K(i0,()=>n.status),X($0,"wrapMode","none"),X($0,"flexGrow",1),K($0,()=>HL(n.path,_())),K(R0,b(X0,{get when(){return Gf.added>0},get children(){var w0=W("text");return X(w0,"wrapMode","none"),K(w0,m),E((v)=>X(w0,"fg",J.success,v)),w0}}),null),K(R0,b(X0,{get when(){return Gf.deleted>0},get children(){var w0=W("text");return X(w0,"wrapMode","none"),K(w0,L0),E((v)=>X(w0,"fg",J.error,v)),w0}}),null),E((w0)=>{var v=k0(),J0=y0(),M0=J.text;return v!==w0.e&&(w0.e=X(s,"backgroundColor",v,w0.e)),J0!==w0.t&&(w0.t=X(i0,"fg",J0,w0.t)),M0!==w0.a&&(w0.a=X($0,"fg",M0,w0.a)),w0},{e:void 0,t:void 0,a:void 0}),s})()}})),w}}),null),K(x,b(X0,{get when(){return f.worktreePath()!=null},get children(){var w=W("box"),n=W("text");return D(w,n),X(w,"flexDirection","row"),X(w,"paddingTop",1),X(w,"flexShrink",0),X(n,"wrapMode","none"),K(n,()=>F("files.footer.openHint")),E((q0)=>X(n,"fg",J.textMuted,q0)),w}}),null),x})()}var zS;var UL=C(()=>{P();P();P();P();P();P();P();P();P();G1();P();Wf();Ef();c8();d8();QL();KL();zS=["all","changes"]});var DL=C(()=>{UL();c8();d8()});import{promises as XS}from"fs";import qS from"path";async function wQ(f,J){let Y=new AbortController,z=setTimeout(()=>Y.abort(),QS);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 HS(f){return await wQ(f,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function BS(f){let J=await wQ(f,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!J)return"main";return J.startsWith("origin/")?J.slice(7):J}async function jS(f){let J=await wQ(f,["rev-parse","--abbrev-ref","@{u}"]);return J!==null&&J.length>0}async function WS(f){let J=await wQ(f,["status","--porcelain"]);if(!J)return 0;return J.split(`
241
- `).filter((Y)=>Y.length>0).length}async function VS(f){let[J,Y,z,G]=await Promise.all([HS(f),BS(f),jS(f),WS(f)]);return{branch:J,targetBranch:Y,hasUpstream:z,dirtyCount:G}}function KS(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 US(f){return f?"The current branch tracks an upstream.":"There is no upstream branch yet."}function DS(f,J){let Y={branch:J.branch,targetBranch:J.targetBranch,dirtyCountSentence:KS(J.dirtyCount),upstreamSentence:US(J.hasUpstream)};return f.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(z,G)=>Object.hasOwn(Y,G)?Y[G]:z)}async function LS(f){let J=qS.join(f,".kobe","pr-instructions.md");try{let Y=await XS.readFile(J,"utf8");return Y.length>0?Y:LL}catch{return LL}}async function ML(f){let[J,Y]=await Promise.all([LS(f),VS(f)]);return DS(J,Y)}var QS=5000,LL=`The user likes the current state of the code.
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.
242
243
 
243
244
  {{dirtyCountSentence}}
244
245
  The current branch is {{branch}}.
@@ -255,21 +256,21 @@ Follow these steps to create a PR:
255
256
  - Push to origin.
256
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.
257
258
 
258
- If any of these steps fail, ask the user for help.`;var FL=C(()=>{gY();nZ()});var a8={};jf(a8,{startOpsPreview:()=>ES,startOpsHost:()=>yS,nextActivityPollDelay:()=>gL});import{createHash as MS}from"crypto";import{SyntaxStyle as FS}from"@opentui/core";function gL(f,J){if(J<AS)return AL;return Math.min(f*2,OS)}function kS(f){let{theme:J}=d0(),[Y,z]=r(0),[G,Z]=r(0),q=!1;f1(()=>{let M=!1,g,I=AL,a=0,N=0;async function A(){try{let R=await oD(f.vendor,f.worktree);if(M)return;if(!q)q=!0,z(R),N=R;if(R>N)N=R,a=0;else a++;Z(R)}catch{a++}finally{if(!M)I=gL(I,a),g=setTimeout(()=>void A(),I)}}A(),vf(()=>{if(M=!0,g)clearTimeout(g)})});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=gV(f.vendor),g=!1,I=null,a="",N=!1,A=0,R=null;async function S(Y0){if(Y0===R)return;R=Y0,await LY(f.targetPane,CS,Y0)}async function _(){try{a=OL(await $z(f.targetPane,80)),I=(await M.latestCompletion(f.worktree))?.id??null,await S(M.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function z0(){try{let Y0=OL(await $z(f.targetPane,80));if(g)return;if(Y0!==a)a=Y0,N=!0,A=0,await S(M.supportsCompletionMarkers()?"running":"unknown");else if(N)A++;if(!M.supportsCompletionMarkers()||!N||A<RS)return;let T=await M.latestCompletion(f.worktree);if(g||!T||T.id===I)return;I=T.id,N=!1,A=0,await S("done")}catch{}}_();let e=setInterval(()=>void z0(),gS);vf(()=>{g=!0,clearInterval(e)})});function V(M){if(!f.taskId)return;HJ(Mf(f.taskId),{cwd:f.worktree,command:tW({worktree:f.worktree,relPath:M,cliInvocation:Cf()}),name:NS(M)})}function j(M){if(!f.taskId){V(M);return}let g=`${f.worktree}/${M}`;JL(Mf(f.taskId),f.worktree,g).then((I)=>{if(!I)V(M)})}function U(M){if(!f.targetPane)return;aX(f.targetPane,`@${M} `)}async function L(){if(!f.targetPane)return;let M=await ML(f.worktree);await aX(f.targetPane,M),await YZ(f.targetPane,"Enter")}function O(){if(!f.taskId)return;let M=Mf(f.taskId),g=Cf(),I=`${_f()}${g1(g)} layout --session ${zf(M)} --action zen-toggle`;v0(["run-shell","-b",I])}return(()=>{var M=W("box");return X(M,"flexDirection","column"),X(M,"flexGrow",1),K(M,b(l8,{worktreePath:()=>f.worktree,focused:()=>!0,onOpenFile:j,onMention:U,onCreatePR:()=>void L(),get onZenToggle(){return f.taskId?O:void 0},cornerBadge:H,onRefresh:B})),E((g)=>X(M,"backgroundColor",J.background,g)),M})()}function NS(f){let J=f.lastIndexOf("/");return J>=0?f.slice(J+1):f}function OL(f){return MS("sha1").update(f).digest("hex")}async function yS(f){await L1({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(kS,f)})})}function bS(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 SS(f,J){let Y=await _z(f,["diff","HEAD","--",J]);return Y.status===0?Y.stdout:""}async function IS(f,J){return await Z7(f,J)??""}function TS(f){let J={fg:f.primary},Y={fg:f.success},z={fg:f.info},G={fg:f.warning},Z={fg:f.accent},q={fg:f.textMuted,italic:!0},Q={fg:f.textMuted},H={fg:f.text};return FS.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:Z,"constant.builtin":Z,boolean:Z,number:Z,operator:Q,"punctuation.bracket":Q,"punctuation.delimiter":Q,"punctuation.special":Q,variable:H,"variable.member":H,"variable.parameter":H,"variable.builtin":Z,property:H,attribute:G,label:H,module:H})}function uS(f){let{theme:J}=d0(),Y=TS(J),z=bS(f.relPath),[G]=jX(()=>f.relPath,async(Z)=>{let q=await SS(f.worktree,Z);if(q.trim().length>0)return{kind:"diff",text:q};return{kind:"code",text:await IS(f.worktree,Z)}});return Df(()=>({bindings:[{key:"q",cmd:()=>process.exit(0)},{key:"escape",cmd:()=>process.exit(0)},{key:"ctrl+c",cmd:()=>process.exit(0)}]})),(()=>{var Z=W("box"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("box");return D(Z,q),D(Z,V),X(Z,"flexDirection","column"),X(Z,"flexGrow",1),D(q,Q),D(q,H),D(q,B),X(q,"flexDirection","row"),X(q,"gap",1),X(q,"paddingLeft",1),X(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")),X(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")),E((U)=>X(j,"fg",J.textMuted,U)),j})()},children:(j)=>b(X0,{get when(){return j().kind==="diff"},get fallback(){return(()=>{var U=W("code");return X(U,"filetype",z),X(U,"syntaxStyle",Y),E((L)=>X(U,"content",j().text,L)),U})()},get children(){var U=W("diff");return X(U,"view","unified"),X(U,"filetype",z),X(U,"syntaxStyle",Y),X(U,"showLineNumbers",!0),E((L)=>X(U,"diff",j().text,L)),U}})})),E((j)=>{var{background:U,accent:L,textMuted:O,textMuted:M}=J;return U!==j.e&&(j.e=X(Z,"backgroundColor",U,j.e)),L!==j.t&&(j.t=X(Q,"fg",L,j.t)),O!==j.a&&(j.a=X(H,"fg",O,j.a)),M!==j.o&&(j.o=X(B,"fg",M,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),Z})()}async function ES(f){await L1({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(uS,f)})})}var AL=2500,OS=20000,AS=3,gS=1500,RS=2,CS="@kobe_tab_state";var $8=C(()=>{P();P();P();P();P();P();P();iJ();pH();sD();Sf();YL();qJ();Xq();Wf();Ef();G1();PY();b1();DL();zz();FL()});var NL={};jf(NL,{startDirectTmux:()=>wS,chooseInitialTask:()=>kL});import{resolve as RL}from"path";function kL(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 Z=f.filter((q)=>!q.archived);return Z.find((q)=>q.pinned)??Z[0]??f[0]}async function CL(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 xS(f){_Q();let J=[...m1()];if(J.length===0)J=[PJ(RL(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]??RL(process.cwd())}async function wS(){if(gX("gui"),Promise.resolve().then(() => (Sj(),bj)).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 xS(J),z=kL(J.listTasks(),{activeTaskId:J.activeTaskSignal()(),persistedTaskId:kf("lastSelectedTaskId"),cwdRepo:Y});if(!z){let V=await $X();if(await Dz(),await dq(V),await CL(iz(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),Z=Mf(z.id);await J.setActiveTask(z.id).catch(()=>{}),af("lastSelectedTaskId",z.id);let q=_J(z.repo,G,{kind:"repo-init"});if(!await yY({name:Z,cwd:G,command:N1(z.vendor),taskId:z.id,vendor:z.vendor,repo:z.repo,launchInit:q})){console.error(`kobe: tmux session ${Z} failed to start (check the daemon log)`),process.exitCode=1;return}await Dz(),await dq(Z);let H=await CL(iz(Z));if(H===null){console.error(`kobe: failed to attach to tmux session ${Z}`),process.exitCode=1;return}if(H!==0&&!await Bf(Z)){console.error(`kobe: tmux session ${Z} 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 cz(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 yL=C(()=>{_Y();y1();EY();E1();dX();iG();zG();gf();Sf();Nq();J1()});var bL={};jf(bL,{startTui:()=>hS});async function hS(){YU();let{startDirectTmux:f}=await Promise.resolve().then(() => (yL(),NL));await f()}var SL=C(()=>{YQ()});hQ();K1();import{resolve as uL}from"path";U1();function q9(){return[`kobe ${o0}`,"","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(`
259
- `)}var IL=`Usage: kobe add [path]
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]
260
261
  kobe add --remote --host <host> --user <user> --path <basePath> [--port N] [--key <path> | --password]
261
262
 
262
263
  Save a repo for the new-task picker. With --remote, register an SSH-backed
263
264
  project whose worktrees + engine run on <host> under <basePath>.
264
- `;async function PS(f){let J=f[0];if(J==="--help"||J==="-h"||J==="help"){process.stdout.write(IL);return}if(J==="--remote"){let{runAddRemote:Z}=await Promise.resolve().then(() => (C9(),R9));await Z(f.slice(1));return}if(J?.startsWith("-"))process.stderr.write(`kobe add: unknown flag "${J}"
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
266
 
266
- ${IL}`),process.exit(2);let Y=uL(process.cwd(),J&&J.length>0?J:"."),{addSavedRepo:z}=await Promise.resolve().then(() => (gf(),ZY)),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 vS(G.path)}async function vS(f){let J=await EL(),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 xL(J,f,Y,mY(void 0))}async function EL(){let{TaskIndexStore:f}=await Promise.resolve().then(() => (PG(),JH)),{GitWorktreeManager:J}=await Promise.resolve().then(() => (ZH(),r9)),{Orchestrator:Y}=await Promise.resolve().then(() => (iG(),MW)),z=new f;return await z.load(),new Y({store:z,worktrees:new J})}async function xL(f,J,Y,z){let{connectIfRunning:G}=await Promise.resolve().then(() => (y1(),aB)),Z=await G();try{for(let q of Y){let Q=Z?(await Z.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{Z?.close()}}var wL=["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(`
267
- `);function r8(f){process.stderr.write(`kobe adopt: ${f}
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}
268
269
 
269
- ${wL}
270
- `),process.exit(2)}async function mS(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(`${wL}
271
- `);return}if(L==="--repo"){if(Y=f[++U],Y===void 0)r8("--repo requires a value")}else if(L==="--vendor"){if(z=f[++U],z===void 0)r8("--vendor requires a value")}else if(L==="--yes"||L==="-y")G=!0;else if(L&&!L.startsWith("-")&&J===void 0)J=L;else r8(`unexpected argument "${L}"`)}let{resolveRepoRoot:Z}=await Promise.resolve().then(() => (gf(),ZY)),q=Z(uL(process.cwd(),Y&&Y.length>0?Y:".")),Q=mY(z),H=await EL(),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||rZ(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(`
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(`
272
273
  pass a path glob to adopt, e.g. kobe adopt '${q}/*' --yes`);return}let j=B.filter(V);if(j.length===0){console.log(`
273
274
  no worktrees match glob ${JSON.stringify(J)}`);return}if(!G){console.log(`
274
- ${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await xL(H,q,j,Q),console.log(`done \u2014 adopted ${j.length} worktree(s)`)}function TL(f){f.write(`${q9()}
275
- `)}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 cS(){let[,,...f]=process.argv,[J,...Y]=f;if(J==="--version"||J==="-v"||J==="version"){let{CURRENT_VERSION:G}=await Promise.resolve().then(() => (U1(),X9));console.log(`kobe ${G}`);return}if(J==="--help"||J==="-h"||J==="help"){TL(process.stdout);return}if(J==="add"){await PS(Y);return}if(J==="adopt"){await mS(Y);return}if(J==="export"){let{runExportSubcommand:G}=await Promise.resolve().then(() => (WK(),jK));await G(Y);return}if(J==="repo"){let{runRepoSubcommand:G}=await Promise.resolve().then(() => (DK(),UK));await G(Y);return}if(J==="api"){let{runApiSubcommand:G}=await Promise.resolve().then(() => (EK(),uK));await G(Y);return}if(J==="update"){let{runUpdateSubcommand:G}=await Promise.resolve().then(() => (vK(),PK));await G(Y);return}if(J==="theme"){let{runThemeSubcommand:G}=await Promise.resolve().then(() => (iK(),dK));await G(Y);return}if(J==="feedback"){let{runFeedbackSubcommand:G}=await Promise.resolve().then(() => (pK(),rK));await G(Y);return}if(J==="daemon"){let{runDaemonSubcommand:G}=await Promise.resolve().then(() => (eK(),tK));await G(Y);return}if(J==="doctor"){let{runDoctorSubcommand:G}=await Promise.resolve().then(() => (GQ(),zQ));await G(Y);return}if(J==="web"){let{runWebSubcommand:G}=await Promise.resolve().then(() => (UU(),KU));await G(Y);return}if(J==="reset"){let{runResetSubcommand:G}=await Promise.resolve().then(() => (GQ(),zQ));await G(Y);return}if(J==="reload"){let{runReloadSubcommand:G}=await Promise.resolve().then(() => (GQ(),zQ));await G(Y);return}if(J==="skill"){let{runSkillSubcommand:G}=await Promise.resolve().then(() => (MU(),LU));await G(Y);return}if(J==="hook"){let{runHookSubcommand:G}=await Promise.resolve().then(() => (Sj(),bj));await G(Y);return}if(J==="new-chattab"){let G=FJ(Y),Z=G.session;if(!Z)console.error("kobe new-chattab: --session <name> is required"),process.exit(2);let{windowIsSurface:q}=await Promise.resolve().then(() => (Sf(),zZ));if(await q(Z))return;let Q;if(G.vendor!==void 0){let B=G.vendor.trim(),{getCustomEngineIds:V}=await Promise.resolve().then(() => (gf(),ZY)),{isBuiltinVendor:j}=await Promise.resolve().then(() => (K1(),e8));if(!(j(B)||V().includes(B))){let O=[...mf,...V()].join(", "),M=`kobe: unknown engine '${B}' (known: ${O})`,{runTmux:g}=await Promise.resolve().then(() => (Sf(),zZ));await g(["display-message","-t",Z,M]),console.error(M),process.exit(2)}Q=B;let{setPersistedString:L}=await Promise.resolve().then(() => (gf(),ZY));L("lastSelectedVendor",Q)}let{newChatTab:H}=await Promise.resolve().then(() => (J1(),r1));await H(Z,Q);return}if(J==="kill-sessions"){let{runTmux:G,KOBE_TMUX_SOCKET:Z}=await Promise.resolve().then(() => (Sf(),zZ)),q=await G(["kill-server"]);console.log(q===0?`kobe: killed all tmux sessions on the \`${Z}\` socket`:`kobe: no tmux sessions to kill on the \`${Z}\` socket`);return}if(J==="quick-create"){let Z=FJ(Y).session;if(!Z)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:q}=await Promise.resolve().then(() => (J1(),r1));await q(Z);return}if(J==="focus-tasks"){let G=FJ(Y),Z=G.session;if(!Z)console.error("kobe focus-tasks: --session <name> is required"),process.exit(2);let{windowIsSurface:q}=await Promise.resolve().then(() => (Sf(),zZ));if(G.windowId&&await q(G.windowId))return;let{selectTasksPane:Q}=await Promise.resolve().then(() => (J1(),r1));await Q(Z,{windowId:G.windowId});return}if(J==="heal-layout"){let Z=FJ(Y).session;if(!Z)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(),yq));await Q(Z,"heal",()=>q(Z));return}if(J==="resync-window"){let G=FJ(Y),Z=G.session;if(!Z)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(),yq));await V(Z,"resync",()=>B(Z,{size:H,status:G.status,clientName:G.client}));return}if(J==="capture-layout"){let Z=FJ(Y).session;if(!Z)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(),yq));await Q(Z,"capture",async()=>{if(H(Z,"resize")<B)return;await q(Z)});return}if(J==="layout"){let G=FJ(Y),Z=G.session;if(!Z)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(Z,q,{windowId:G.windowId});return}if(J==="quick-task"){let G=FJ(Y),{startQuickTaskHost:Z}=await Promise.resolve().then(() => (i4(),d4));await Z({session:G.session});return}if(J==="tasks"){let G=FJ(Y),{startTasksPane:Z}=await Promise.resolve().then(() => (iD(),dD));await Z({initialTaskId:G.initialTaskId});return}if(J==="settings"){let{startSettingsHost:G}=await Promise.resolve().then(() => (aD(),lD));await G();return}if(J==="help-page"){let{startHelpHost:G}=await Promise.resolve().then(() => (rD(),$D));await G();return}if(J==="new-task"){let G=FJ(Y),{startNewTaskHost:Z}=await Promise.resolve().then(() => (K8(),x4));await Z({defaultRepo:G.repo});return}if(J==="update-page"){let{startUpdateHost:G}=await Promise.resolve().then(() => (_D(),pD));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(() => ($8(),a8));await q({worktree:G.worktree,relPath:G.preview});return}let{startOpsHost:Z}=await Promise.resolve().then(() => ($8(),a8));await Z({taskId:G.taskId??"",worktree:G.worktree,targetPane:G.targetPane??null,vendor:mY(G.vendor)});return}if(J!==void 0)console.error(`kobe: unknown command '${J}'`),TL(process.stderr),process.exit(2);let{startTui:z}=await Promise.resolve().then(() => (SL(),bL));await z()}cS().catch((f)=>{console.error("kobe failed to start:",f),process.exit(1)});
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)});