@sma1lboy/kobe 0.7.36 → 0.7.37

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 +181 -181
  2. package/package.json +1 -1
package/dist/cli/index.js CHANGED
@@ -1,103 +1,103 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var CL=Object.defineProperty;var SL=(J)=>J;function yL(J,Y){this[J]=SL.bind(null,Y)}var Q1=(J,Y)=>{for(var Z in Y)CL(J,Z,{get:Y[Z],enumerable:!0,configurable:!0,set:yL.bind(Y,Z)})};var S=(J,Y)=>()=>(J&&(Y=J(J=0)),Y);var uG=import.meta.require;import{basename as kL}from"path";function IL(J){let Y="";for(let Z=0;Z<J.length;Z++){let f=J[Z];if(f==="*")if(J[Z+1]==="*")Y+=".*",Z++;else Y+="[^/]*";else if(f==="?")Y+="[^/]";else if(f&&"\\^$.|+()[]{}".includes(f))Y+=`\\${f}`;else Y+=f}return new RegExp(`^${Y}$`)}function xG(J,Y){let Z;try{Z=IL(J)}catch{return!1}return Z.test(Y)||Z.test(kL(Y))}var Rq=()=>{};var g9={};Q1(g9,{prevVendorWithin:()=>gq,nextVendorWithin:()=>sY,nextVendor:()=>NL,isBuiltinVendor:()=>e1,coerceVendorId:()=>TZ,BUILTIN_VENDORS:()=>bZ,ALL_VENDORS:()=>h1});function e1(J){return J==="claude"||J==="codex"||J==="copilot"}function NL(J){let Y=h1.indexOf(J);return h1[(Y+1)%h1.length]??h1[0]}function sY(J,Y){if(J.length===0)return Y;let Z=J.indexOf(Y);return J[(Z+1)%J.length]??J[0]??Y}function gq(J,Y){if(J.length===0)return Y;let Z=J.indexOf(Y);if(Z<0)return J[J.length-1]??Y;return J[(Z-1+J.length)%J.length]??Y}function TZ(J){let Y=J?.trim();return Y&&Y.length>0?Y:"claude"}var bZ,h1;var zJ=S(()=>{bZ=["claude","codex","copilot"],h1=[...bZ]});var wG;var C9=S(()=>{wG={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.36",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",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 S9}from"crypto";import{homedir as TL}from"os";import{join as EZ}from"path";function y9(){return process.env.KOBE_DEV==="1"}function qY(){return process.env.KOBE_HOME_DIR??TL()}function r1(){return EZ(qY(),".kobe")}function EJ(){return EZ(qY(),".config","kobe","state.json")}function EL(){return EZ(r1(),"settings")}function k9(){return EZ(EL(),"keybindings.yaml")}function Cq(){return EZ(r1(),"issue-assets")}function hG(J,Y,Z){let f=S9("sha1").update(`${Y}@${J}:${Z??22}`).digest("hex").slice(0,16);return EZ(r1(),"ssh",`${f}.sock`)}function I9(J){let Y=S9("sha1").update(J).digest("hex").slice(0,16);return EZ(r1(),"worktree-init",Y)}var c1=()=>{};var b9={};Q1(b9,{repoSlug:()=>uZ,releasePageUrl:()=>Nq,recommendedGlobalInstallCommand:()=>kq,isNewerSemver:()=>Sq,fetchReleaseSummaries:()=>wL,fetchReleaseNotesRange:()=>Iq,fetchReleaseNotes:()=>xL,compareSemver:()=>PG,checkLatestVersion:()=>RX,UPDATE_SCRIPT_URL:()=>vG,UPDATE_COMMAND:()=>kY,PACKAGE_NAME:()=>yq,CURRENT_VERSION:()=>n0});function uZ(){let J=wG.repository?.url;if(!J)return null;let Y=J.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!Y||!Y[1]||!Y[2])return null;return`${Y[1]}/${Y[2]}`}function kq(){return`npm install -g ${yq}@latest`}async function uL(J){let Y=new AbortController,Z=setTimeout(()=>Y.abort(),mG);try{let f=J.replace("/","%2F"),X=await fetch(`https://registry.npmjs.org/${f}/latest`,{signal:Y.signal,headers:{accept:"application/json"}});if(!X.ok)return null;let G=await X.json();if(typeof G.version!=="string")return null;return G.version}catch{return null}finally{clearTimeout(Z)}}function Sq(J,Y){return PG(J,Y)>0}function PG(J,Y){let Z=(G)=>G.split("-")[0]??G,f=Z(J).split(".").map((G)=>Number.parseInt(G,10)),X=Z(Y).split(".").map((G)=>Number.parseInt(G,10));for(let G=0;G<3;G++){let Q=f[G]??0,q=X[G]??0;if(Number.isNaN(Q)||Number.isNaN(q))return 0;if(Q>q)return 1;if(Q<q)return-1}return 0}async function RX(J={}){let Y=process.env.KOBE_FAKE_UPDATE;if(Y)return{current:n0,latest:Y,hasUpdate:Sq(Y,n0)};if(y9()&&!J.force)return null;let Z=await uL(yq);if(!Z)return null;return{current:n0,latest:Z,hasUpdate:Sq(Z,n0)}}function N9(J){if(typeof J!=="string")return null;return J.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function xL(J){let Y=uZ();if(!Y)return null;let Z=`v${J}`,f=new AbortController,X=setTimeout(()=>f.abort(),mG);try{let G=await fetch(`https://api.github.com/repos/${Y}/releases/tags/${Z}`,{signal:f.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return null;let Q=await G.json();if(typeof Q.body!=="string"||typeof Q.html_url!=="string")return null;return{body:Q.body,url:Q.html_url,version:J}}catch{return null}finally{clearTimeout(X)}}async function Iq(J){let Y=uZ();if(!Y)return[];let Z=J.limit??100,f=new AbortController,X=setTimeout(()=>f.abort(),mG);try{let G=await fetch(`https://api.github.com/repos/${Y}/releases?per_page=${Z}`,{signal:f.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return[];let Q=await G.json();if(!Array.isArray(Q))return[];return Q.map((q)=>{let B=N9(q.tag_name);if(!B||typeof q.html_url!=="string"||typeof q.body!=="string")return null;if(PG(B,J.current)<=0)return null;if(PG(B,J.latest)>0)return null;return{version:B,url:q.html_url,body:q.body}}).filter((q)=>q!==null)}catch{return[]}finally{clearTimeout(X)}}async function wL(J=12){let Y=uZ();if(!Y)return[];let Z=new AbortController,f=setTimeout(()=>Z.abort(),mG);try{let X=await fetch(`https://api.github.com/repos/${Y}/releases?per_page=${J}`,{signal:Z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!X.ok)return[];let G=await X.json();if(!Array.isArray(G))return[];return G.map((Q)=>{let q=N9(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(f)}}function Nq(J){let Y=uZ();if(!Y)return null;return`https://github.com/${Y}/releases/tag/v${J}`}var n0,yq,vG="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",kY,mG=3000;var QJ=S(()=>{C9();c1();n0=wG.version,yq=wG.name;kY=`curl -fsSL ${vG} | sh`});import{spawn as hL,spawnSync as PL}from"child_process";import{existsSync as E9}from"fs";import{mkdir as vL,readFile as mL,readdir as cL}from"fs/promises";function xZ(J){return`'${J.replace(/'/g,"'\\''")}'`}function dL(J){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(J)?J:xZ(J)}function x9(J){return J.map(xZ).join(" ")}function nL(J,Y){let Z=x9(J);return Y?`cd ${xZ(Y)} && ${Z}`:Z}function iL(J){if(!J)return"";let Y=Object.entries(J).filter(([Z])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(Z));if(Y.length===0)return"";return`${Y.map(([Z,f])=>`${Z}=${xZ(f)}`).join(" ")} `}function gX(J,Y={}){let Z=["ssh"];if(Y.tty)Z.push("-tt");if(Y.batch)Z.push("-o","BatchMode=yes");if(Z.push("-o","ControlMaster=auto","-o",`ControlPath=${J.controlPath}`,"-o","ControlPersist=300"),Z.push("-o","StrictHostKeyChecking=accept-new"),J.port)Z.push("-p",String(J.port));if(J.auth.kind==="key"&&J.auth.keyPath)Z.push("-i",J.auth.keyPath);return Z.push(`${J.user}@${J.host}`),Z}function w9(J,Y={}){return new Promise((Z)=>{let[f,...X]=J,G="",Q="",q=!1,B=(K)=>{if(q)return;q=!0,Z({stdout:G,stderr:Q,exitCode:K})},H;try{H=hL(f??"",X,{cwd:Y.cwd,env:Y.env,shell:!1,signal:Y.signal})}catch{B(-1);return}H.stdout?.setEncoding("utf8"),H.stdout?.on("data",(K)=>{G+=K}),H.stderr?.setEncoding("utf8"),H.stderr?.on("data",(K)=>{Q+=K}),H.on("error",()=>B(-1)),H.on("close",(K)=>B(K??-1))})}class cG{isRemote=!1;run(J,Y={}){return w9(J,{cwd:Y.cwd,env:Y.env?{...process.env,...Y.env}:process.env,signal:Y.signal})}async exists(J){return E9(J)}existsSync(J){return E9(J)}async mkdirp(J){await vL(J,{recursive:!0})}async readFile(J){try{return await mL(J,"utf8")}catch{return null}}async readdir(J){try{return await cL(J)}catch{return[]}}wrapCommand(J){return J}ensureReady(){}}class Mf{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(J,Y=u9,Z){this.spec=J;this.spawn=Y;this.spawnAsync=Z??(this.spawn===u9?lL:async(f,X)=>this.spawn(f,X))}ensureReady(){if(this.masterUp)return;if(this.spawn([...gX(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let Y=[...gX(this.spec,{batch:this.spec.auth.kind!=="password"}),"-fN"];if(this.spec.auth.kind==="password"){let Z=this.spec.auth.getPassword();if(Z!=null){this.spawn(["sshpass","-e",...Y],{SSHPASS:Z}),this.masterUp=!0;return}}this.spawn(Y),this.masterUp=!0}async run(J,Y={}){this.ensureReady();let Z=`${iL(Y.env)}${x9(J)}`,f=Y.cwd?`cd ${xZ(Y.cwd)} && ${Z}`:Z;return this.spawnAsync([...gX(this.spec,{batch:!0}),f],void 0,{signal:Y.signal})}async exists(J){return(await this.run(["test","-e",J])).exitCode===0}existsSync(J){return this.ensureReady(),this.spawn([...gX(this.spec,{batch:!0}),nL(["test","-e",J])]).exitCode===0}async mkdirp(J){await this.run(["mkdir","-p",J])}async readFile(J){let Y=await this.run(["cat",J]);return Y.exitCode===0?Y.stdout:null}async readdir(J){let Y=await this.run(["ls","-1A",J]);if(Y.exitCode!==0)return[];return Y.stdout.split(`
4
- `).filter((Z)=>Z.length>0)}wrapCommand(J,Y={}){let Z=Y.cwd?`cd ${xZ(Y.cwd)} && ${J}`:J;return`${gX(this.spec,{tty:Y.tty}).map(dL).join(" ")} ${xZ(Z)}`}}var u9=(J,Y)=>{let[Z,...f]=J,X=PL(Z??"",f,{env:Y?{...process.env,...Y}:process.env,encoding:"utf8",shell:!1});return{stdout:X.stdout??"",stderr:X.stderr??"",exitCode:X.status??-1}},lL=(J,Y,Z)=>w9(J,{env:Y?{...process.env,...Y}:process.env,signal:Z?.signal});var bq=()=>{};import{spawnSync as $L}from"child_process";import{platform as aL}from"os";function h9(J,Y,Z){return{service:pL,account:Z?`${Y}@${J}:${Z}`:`${Y}@${J}`}}function Eq(J=Tq){return J.platform()==="darwin"}function P9(J,Y,Z=Tq){if(Z.platform()!=="darwin")return!1;let{exitCode:f}=Z.run(["security","add-generic-password","-U","-s",J.service,"-a",J.account,"-w",Y]);return f===0}function dG(J,Y=Tq){if(Y.platform()!=="darwin")return null;let{stdout:Z,exitCode:f}=Y.run(["security","find-generic-password","-s",J.service,"-a",J.account,"-w"]);if(f!==0)return null;return Z.replace(/\n$/,"")}var Tq,pL="kobe-remote-ssh";var uq=S(()=>{Tq={run(J){let[Y,...Z]=J,f=$L(Y??"",Z,{encoding:"utf8",shell:!1});return{stdout:f.stdout??"",exitCode:f.status??-1}},platform(){return aL()}}});import{mkdirSync as _L,readFileSync as rL,renameSync as oL,writeFileSync as sL}from"fs";import{dirname as tL}from"path";function $1(){try{let J=rL(EJ(),"utf8"),Y=JSON.parse(J);if(Y&&typeof Y==="object"&&!Array.isArray(Y))return Y}catch{}return{}}function v9(J){let Y=EJ();_L(tL(Y),{recursive:!0});let Z=`${Y}.tmp`;sL(Z,JSON.stringify(J,null,2),"utf8"),oL(Z,Y)}function Ff(J){let Y=$1();if(J(Y)!==!1)v9(Y);return Y}function wZ(J){return Ff((Y)=>{for(let[Z,f]of Object.entries(J))if(f===void 0)delete Y[Z];else Y[Z]=f;return})}function m9(J){v9(J)}var Of=S(()=>{c1()});var tY={};Q1(tY,{statePath:()=>JD,setRepoInitOverride:()=>YD,setPersistedString:()=>d1,resolveRepoRoot:()=>IY,resolveMainRepoRoot:()=>eL,removeSavedRepo:()=>ZD,remoteRepoKey:()=>l9,normalizeSavedRepos:()=>wq,isRemoteRepoKey:()=>xJ,isRemoteProjectsEnabled:()=>Pq,getSavedRepos:()=>uJ,getRepoInitOverride:()=>hq,getRemoteRepos:()=>mq,getRemoteRepoConfig:()=>bY,getPersistedString:()=>C1,getCustomEngineIds:()=>xq,addSavedRepo:()=>NY,addRemoteRepo:()=>cq});import{spawnSync as d9}from"child_process";import{realpathSync as c9}from"fs";function IY(J){if(xJ(J))return J;let Y=d9("git",["rev-parse","--show-toplevel"],{cwd:J,encoding:"utf8",shell:!1});if(Y.status!==0)return J;let Z=(Y.stdout??"").trim();if(!Z)return J;try{if(c9(J)===c9(Z))return J}catch{}return Z}function eL(J){if(xJ(J))return J;let Y=d9("git",["worktree","list","--porcelain"],{cwd:J,encoding:"utf8",shell:!1});if(Y.status!==0)return IY(J);return(Y.stdout??"").split(/\r?\n/).find((f)=>f.startsWith("worktree "))?.slice(9).trim()||IY(J)}function JD(){return EJ()}function nG(J){let Y=J.savedRepos;if(!Array.isArray(Y))return[];return Y.filter((Z)=>typeof Z==="string")}function uJ(){return nG($1())}function C1(J){let Y=$1()[J];return typeof Y==="string"?Y:void 0}function d1(J,Y){wZ({[J]:Y})}function xq(){let J=$1().customEngineIds;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string"&&Y.trim().length>0)}function NY(J){let Y=IY(J),Z={added:!1,path:Y,total:0};return Ff((f)=>{let X=nG(f);if(X.includes(Y))return Z={added:!1,path:Y,total:X.length},!1;f.savedRepos=[...X,Y],Z={added:!0,path:Y,total:X.length+1};return}),Z}function wq(){let J=uJ(),Y=new Set,Z=[],f=!1;for(let X of J){let G=IY(X);if(G!==X)f=!0;if(Y.has(G)){f=!0;continue}Y.add(G),Z.push(G)}if(!f)return;wZ({savedRepos:Z})}function n9(J){let Y=J.repoConfigs;if(!Y||typeof Y!=="object"||Array.isArray(Y))return{};return Y}function i9(J){if(!J||typeof J!=="object")return{};let Y=J;return{initScript:typeof Y.initScript==="string"&&Y.initScript.length>0?Y.initScript:void 0,initPrompt:typeof Y.initPrompt==="string"&&Y.initPrompt.length>0?Y.initPrompt:void 0}}function hq(J){return i9(n9($1())[IY(J)])}function YD(J,Y){let Z=IY(J),f={};return Ff((X)=>{let G={...n9(X)},Q=i9(G[Z]),q=Y.initScript===void 0?Q.initScript:Y.initScript||void 0,B=Y.initPrompt===void 0?Q.initPrompt:Y.initPrompt||void 0;if(f={...q?{initScript:q}:{},...B?{initPrompt:B}:{}},!f.initScript&&!f.initPrompt){let{[Z]:H,...K}=G;X.repoConfigs=K}else G[Z]=f,X.repoConfigs=G;return}),f}function ZD(J){let Y={removed:!1,path:J,total:0};return Ff((Z)=>{let f=nG(Z);if(!f.includes(J))return Y={removed:!1,path:J,total:f.length},!1;Z.savedRepos=f.filter((X)=>X!==J),Y={removed:!0,path:J,total:f.length-1};return}),Y}function xJ(J){return J.startsWith("ssh://")}function Pq(){return $1()["experimental.remoteProjects"]===!0}function l9(J,Y,Z){return Z?`ssh://${Y}@${J}:${Z}`:`ssh://${Y}@${J}`}function vq(J){let Y=J.remoteRepos;if(!Y||typeof Y!=="object"||Array.isArray(Y))return{};return Y}function bY(J){return vq($1())[J]??null}function mq(){return vq($1())}function cq(J){let Y=l9(J.host,J.user,J.port),Z=!1;return Ff((f)=>{let X={...vq(f)};X[Y]=J,f.remoteRepos=X;let G=nG(f);if(Z=!G.includes(Y),Z)f.savedRepos=[...G,Y];return}),{key:Y,added:Z}}var A1=S(()=>{c1();Of()});var p9={};Q1(p9,{runAddRemote:()=>GD,parseRemoteFlags:()=>a9});import{createInterface as fD}from"readline";function a9(J){let Y={};for(let Z=0;Z<J.length;Z++){let f=J[Z];switch(f){case"--host":Y.host=J[++Z];break;case"--user":Y.user=J[++Z];break;case"--path":Y.path=J[++Z];break;case"--port":{let X=Number(J[++Z]);if(!Number.isInteger(X)||X<=0)lJ(`invalid --port "${J[Z]}"`);Y.port=X;break}case"--key":{let X=J[Z+1];if(X&&!X.startsWith("-"))Y.key={present:!0,path:X},Z++;else Y.key={present:!0};break}case"--password":Y.password=!0;break;case"--help":case"-h":process.stdout.write($9),process.exit(0);break;default:lJ(`unknown flag "${f}"`)}}return Y}function lJ(J){process.stderr.write(`kobe add --remote: ${J}
3
+ var nL=Object.defineProperty;var iL=(J)=>J;function lL(J,Y){this[J]=iL.bind(null,Y)}var q1=(J,Y)=>{for(var Z in Y)nL(J,Z,{get:Y[Z],enumerable:!0,configurable:!0,set:lL.bind(Y,Z)})};var S=(J,Y)=>()=>(J&&(Y=J(J=0)),Y);var Pz=import.meta.require;import{basename as $L}from"path";function aL(J){let Y="";for(let Z=0;Z<J.length;Z++){let X=J[Z];if(X==="*")if(J[Z+1]==="*")Y+=".*",Z++;else Y+="[^/]*";else if(X==="?")Y+="[^/]";else if(X&&"\\^$.|+()[]{}".includes(X))Y+=`\\${X}`;else Y+=X}return new RegExp(`^${Y}$`)}function vz(J,Y){let Z;try{Z=aL(J)}catch{return!1}return Z.test(Y)||Z.test($L(Y))}var kq=()=>{};var xW={};q1(xW,{prevVendorWithin:()=>Iq,nextVendorWithin:()=>eY,nextVendor:()=>pL,isBuiltinVendor:()=>XJ,coerceVendorId:()=>wZ,BUILTIN_VENDORS:()=>xZ,ALL_VENDORS:()=>m1});function XJ(J){return J==="claude"||J==="codex"||J==="copilot"}function pL(J){let Y=m1.indexOf(J);return m1[(Y+1)%m1.length]??m1[0]}function eY(J,Y){if(J.length===0)return Y;let Z=J.indexOf(Y);return J[(Z+1)%J.length]??J[0]??Y}function Iq(J,Y){if(J.length===0)return Y;let Z=J.indexOf(Y);if(Z<0)return J[J.length-1]??Y;return J[(Z-1+J.length)%J.length]??Y}function wZ(J){let Y=J?.trim();return Y&&Y.length>0?Y:"claude"}var xZ,m1;var BJ=S(()=>{xZ=["claude","codex","copilot"],m1=[...xZ]});var mz;var wW=S(()=>{mz={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.37",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",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 hW}from"crypto";import{homedir as rL}from"os";import{join as hZ}from"path";function PW(){return process.env.KOBE_DEV==="1"}function DY(){return process.env.KOBE_HOME_DIR??rL()}function o1(){return hZ(DY(),".kobe")}function xJ(){return hZ(DY(),".config","kobe","state.json")}function oL(){return hZ(o1(),"settings")}function vW(){return hZ(oL(),"keybindings.yaml")}function Nq(){return hZ(o1(),"issue-assets")}function cz(J,Y,Z){let X=hW("sha1").update(`${Y}@${J}:${Z??22}`).digest("hex").slice(0,16);return hZ(o1(),"ssh",`${X}.sock`)}function mW(J){let Y=hW("sha1").update(J).digest("hex").slice(0,16);return hZ(o1(),"worktree-init",Y)}var n1=()=>{};var dW={};q1(dW,{repoSlug:()=>PZ,releasePageUrl:()=>xq,recommendedGlobalInstallCommand:()=>Eq,isNewerSemver:()=>bq,fetchReleaseSummaries:()=>eL,fetchReleaseNotesRange:()=>uq,fetchReleaseNotes:()=>tL,compareSemver:()=>dz,checkLatestVersion:()=>yG,UPDATE_SCRIPT_URL:()=>nz,UPDATE_COMMAND:()=>EY,PACKAGE_NAME:()=>Tq,CURRENT_VERSION:()=>i0});function PZ(){let J=mz.repository?.url;if(!J)return null;let Y=J.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!Y||!Y[1]||!Y[2])return null;return`${Y[1]}/${Y[2]}`}function Eq(){return`npm install -g ${Tq}@latest`}async function sL(J){let Y=new AbortController,Z=setTimeout(()=>Y.abort(),iz);try{let X=J.replace("/","%2F"),G=await fetch(`https://registry.npmjs.org/${X}/latest`,{signal:Y.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(Z)}}function bq(J,Y){return dz(J,Y)>0}function dz(J,Y){let Z=(z)=>z.split("-")[0]??z,X=Z(J).split(".").map((z)=>Number.parseInt(z,10)),G=Z(Y).split(".").map((z)=>Number.parseInt(z,10));for(let z=0;z<3;z++){let f=X[z]??0,q=G[z]??0;if(Number.isNaN(f)||Number.isNaN(q))return 0;if(f>q)return 1;if(f<q)return-1}return 0}async function yG(J={}){let Y=process.env.KOBE_FAKE_UPDATE;if(Y)return{current:i0,latest:Y,hasUpdate:bq(Y,i0)};if(PW()&&!J.force)return null;let Z=await sL(Tq);if(!Z)return null;return{current:i0,latest:Z,hasUpdate:bq(Z,i0)}}function cW(J){if(typeof J!=="string")return null;return J.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function tL(J){let Y=PZ();if(!Y)return null;let Z=`v${J}`,X=new AbortController,G=setTimeout(()=>X.abort(),iz);try{let z=await fetch(`https://api.github.com/repos/${Y}/releases/tags/${Z}`,{signal:X.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!z.ok)return null;let f=await z.json();if(typeof f.body!=="string"||typeof f.html_url!=="string")return null;return{body:f.body,url:f.html_url,version:J}}catch{return null}finally{clearTimeout(G)}}async function uq(J){let Y=PZ();if(!Y)return[];let Z=J.limit??100,X=new AbortController,G=setTimeout(()=>X.abort(),iz);try{let z=await fetch(`https://api.github.com/repos/${Y}/releases?per_page=${Z}`,{signal:X.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!z.ok)return[];let f=await z.json();if(!Array.isArray(f))return[];return f.map((q)=>{let B=cW(q.tag_name);if(!B||typeof q.html_url!=="string"||typeof q.body!=="string")return null;if(dz(B,J.current)<=0)return null;if(dz(B,J.latest)>0)return null;return{version:B,url:q.html_url,body:q.body}}).filter((q)=>q!==null)}catch{return[]}finally{clearTimeout(G)}}async function eL(J=12){let Y=PZ();if(!Y)return[];let Z=new AbortController,X=setTimeout(()=>Z.abort(),iz);try{let G=await fetch(`https://api.github.com/repos/${Y}/releases?per_page=${J}`,{signal:Z.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((f)=>{let q=cW(f.tag_name);if(!q||typeof f.html_url!=="string")return null;return{version:q,url:f.html_url}}).filter((f)=>f!==null)}catch{return[]}finally{clearTimeout(X)}}function xq(J){let Y=PZ();if(!Y)return null;return`https://github.com/${Y}/releases/tag/v${J}`}var i0,Tq,nz="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",EY,iz=3000;var jJ=S(()=>{wW();n1();i0=mz.version,Tq=mz.name;EY=`curl -fsSL ${nz} | sh`});import{spawn as JD,spawnSync as YD}from"child_process";import{existsSync as iW}from"fs";import{mkdir as ZD,readFile as XD,readdir as GD}from"fs/promises";function vZ(J){return`'${J.replace(/'/g,"'\\''")}'`}function zD(J){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(J)?J:vZ(J)}function $W(J){return J.map(vZ).join(" ")}function QD(J,Y){let Z=$W(J);return Y?`cd ${vZ(Y)} && ${Z}`:Z}function fD(J){if(!J)return"";let Y=Object.entries(J).filter(([Z])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(Z));if(Y.length===0)return"";return`${Y.map(([Z,X])=>`${Z}=${vZ(X)}`).join(" ")} `}function SG(J,Y={}){let Z=["ssh"];if(Y.tty)Z.push("-tt");if(Y.batch)Z.push("-o","BatchMode=yes");if(Z.push("-o","ControlMaster=auto","-o",`ControlPath=${J.controlPath}`,"-o","ControlPersist=300"),Z.push("-o","StrictHostKeyChecking=accept-new"),J.port)Z.push("-p",String(J.port));if(J.auth.kind==="key"&&J.auth.keyPath)Z.push("-i",J.auth.keyPath);return Z.push(`${J.user}@${J.host}`),Z}function aW(J,Y={}){return new Promise((Z)=>{let[X,...G]=J,z="",f="",q=!1,B=(K)=>{if(q)return;q=!0,Z({stdout:z,stderr:f,exitCode:K})},j;try{j=JD(X??"",G,{cwd:Y.cwd,env:Y.env,shell:!1,signal:Y.signal})}catch{B(-1);return}j.stdout?.setEncoding("utf8"),j.stdout?.on("data",(K)=>{z+=K}),j.stderr?.setEncoding("utf8"),j.stderr?.on("data",(K)=>{f+=K}),j.on("error",()=>B(-1)),j.on("close",(K)=>B(K??-1))})}class lz{isRemote=!1;run(J,Y={}){return aW(J,{cwd:Y.cwd,env:Y.env?{...process.env,...Y.env}:process.env,signal:Y.signal})}async exists(J){return iW(J)}existsSync(J){return iW(J)}async mkdirp(J){await ZD(J,{recursive:!0})}async readFile(J){try{return await XD(J,"utf8")}catch{return null}}async readdir(J){try{return await GD(J)}catch{return[]}}wrapCommand(J){return J}ensureReady(){}}class CX{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(J,Y=lW,Z){this.spec=J;this.spawn=Y;this.spawnAsync=Z??(this.spawn===lW?qD:async(X,G)=>this.spawn(X,G))}ensureReady(){if(this.masterUp)return;if(this.spawn([...SG(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let Y=[...SG(this.spec,{batch:this.spec.auth.kind!=="password"}),"-fN"];if(this.spec.auth.kind==="password"){let Z=this.spec.auth.getPassword();if(Z!=null){this.spawn(["sshpass","-e",...Y],{SSHPASS:Z}),this.masterUp=!0;return}}this.spawn(Y),this.masterUp=!0}async run(J,Y={}){this.ensureReady();let Z=`${fD(Y.env)}${$W(J)}`,X=Y.cwd?`cd ${vZ(Y.cwd)} && ${Z}`:Z;return this.spawnAsync([...SG(this.spec,{batch:!0}),X],void 0,{signal:Y.signal})}async exists(J){return(await this.run(["test","-e",J])).exitCode===0}existsSync(J){return this.ensureReady(),this.spawn([...SG(this.spec,{batch:!0}),QD(["test","-e",J])]).exitCode===0}async mkdirp(J){await this.run(["mkdir","-p",J])}async readFile(J){let Y=await this.run(["cat",J]);return Y.exitCode===0?Y.stdout:null}async readdir(J){let Y=await this.run(["ls","-1A",J]);if(Y.exitCode!==0)return[];return Y.stdout.split(`
4
+ `).filter((Z)=>Z.length>0)}wrapCommand(J,Y={}){let Z=Y.cwd?`cd ${vZ(Y.cwd)} && ${J}`:J;return`${SG(this.spec,{tty:Y.tty}).map(zD).join(" ")} ${vZ(Z)}`}}var lW=(J,Y)=>{let[Z,...X]=J,G=YD(Z??"",X,{env:Y?{...process.env,...Y}:process.env,encoding:"utf8",shell:!1});return{stdout:G.stdout??"",stderr:G.stderr??"",exitCode:G.status??-1}},qD=(J,Y,Z)=>aW(J,{env:Y?{...process.env,...Y}:process.env,signal:Z?.signal});var wq=()=>{};import{spawnSync as BD}from"child_process";import{platform as jD}from"os";function pW(J,Y,Z){return{service:HD,account:Z?`${Y}@${J}:${Z}`:`${Y}@${J}`}}function Pq(J=hq){return J.platform()==="darwin"}function _W(J,Y,Z=hq){if(Z.platform()!=="darwin")return!1;let{exitCode:X}=Z.run(["security","add-generic-password","-U","-s",J.service,"-a",J.account,"-w",Y]);return X===0}function $z(J,Y=hq){if(Y.platform()!=="darwin")return null;let{stdout:Z,exitCode:X}=Y.run(["security","find-generic-password","-s",J.service,"-a",J.account,"-w"]);if(X!==0)return null;return Z.replace(/\n$/,"")}var hq,HD="kobe-remote-ssh";var vq=S(()=>{hq={run(J){let[Y,...Z]=J,X=BD(Y??"",Z,{encoding:"utf8",shell:!1});return{stdout:X.stdout??"",exitCode:X.status??-1}},platform(){return jD()}}});import{mkdirSync as WD,readFileSync as VD,renameSync as KD,writeFileSync as UD}from"fs";import{dirname as LD}from"path";function c1(){try{let J=VD(xJ(),"utf8"),Y=JSON.parse(J);if(Y&&typeof Y==="object"&&!Array.isArray(Y))return Y}catch{}return{}}function rW(J){let Y=xJ();WD(LD(Y),{recursive:!0});let Z=`${Y}.tmp`;UD(Z,JSON.stringify(J,null,2),"utf8"),KD(Z,Y)}function gX(J){let Y=c1();if(J(Y)!==!1)rW(Y);return Y}function mZ(J){return gX((Y)=>{for(let[Z,X]of Object.entries(J))if(X===void 0)delete Y[Z];else Y[Z]=X;return})}function oW(J){rW(J)}var cZ=S(()=>{n1()});var JZ={};q1(JZ,{statePath:()=>MD,setRepoInitOverride:()=>FD,setPersistedString:()=>i1,resolveRepoRoot:()=>uY,resolveMainRepoRoot:()=>DD,removeSavedRepo:()=>OD,remoteRepoKey:()=>Y9,normalizeSavedRepos:()=>cq,isRemoteRepoKey:()=>HJ,isRemoteProjectsEnabled:()=>nq,getSavedRepos:()=>wJ,getRepoInitOverride:()=>dq,getRemoteRepos:()=>lq,getRemoteRepoConfig:()=>wY,getPersistedString:()=>g1,getCustomEngineIds:()=>mq,addSavedRepo:()=>xY,addRemoteRepo:()=>$q});import{spawnSync as tW}from"child_process";import{realpathSync as sW}from"fs";function uY(J){if(HJ(J))return J;let Y=tW("git",["rev-parse","--show-toplevel"],{cwd:J,encoding:"utf8",shell:!1});if(Y.status!==0)return J;let Z=(Y.stdout??"").trim();if(!Z)return J;try{if(sW(J)===sW(Z))return J}catch{}return Z}function DD(J){if(HJ(J))return J;let Y=tW("git",["worktree","list","--porcelain"],{cwd:J,encoding:"utf8",shell:!1});if(Y.status!==0)return uY(J);return(Y.stdout??"").split(/\r?\n/).find((X)=>X.startsWith("worktree "))?.slice(9).trim()||uY(J)}function MD(){return xJ()}function az(J){let Y=J.savedRepos;if(!Array.isArray(Y))return[];return Y.filter((Z)=>typeof Z==="string")}function wJ(){return az(c1())}function g1(J){let Y=c1()[J];return typeof Y==="string"?Y:void 0}function i1(J,Y){mZ({[J]:Y})}function mq(){let J=c1().customEngineIds;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string"&&Y.trim().length>0)}function xY(J){let Y=uY(J),Z={added:!1,path:Y,total:0};return gX((X)=>{let G=az(X);if(G.includes(Y))return Z={added:!1,path:Y,total:G.length},!1;X.savedRepos=[...G,Y],Z={added:!0,path:Y,total:G.length+1};return}),Z}function cq(){let J=wJ(),Y=new Set,Z=[],X=!1;for(let G of J){let z=uY(G);if(z!==G)X=!0;if(Y.has(z)){X=!0;continue}Y.add(z),Z.push(z)}if(!X)return;mZ({savedRepos:Z})}function eW(J){let Y=J.repoConfigs;if(!Y||typeof Y!=="object"||Array.isArray(Y))return{};return Y}function J9(J){if(!J||typeof J!=="object")return{};let Y=J;return{initScript:typeof Y.initScript==="string"&&Y.initScript.length>0?Y.initScript:void 0,initPrompt:typeof Y.initPrompt==="string"&&Y.initPrompt.length>0?Y.initPrompt:void 0}}function dq(J){return J9(eW(c1())[uY(J)])}function FD(J,Y){let Z=uY(J),X={};return gX((G)=>{let z={...eW(G)},f=J9(z[Z]),q=Y.initScript===void 0?f.initScript:Y.initScript||void 0,B=Y.initPrompt===void 0?f.initPrompt:Y.initPrompt||void 0;if(X={...q?{initScript:q}:{},...B?{initPrompt:B}:{}},!X.initScript&&!X.initPrompt){let{[Z]:j,...K}=z;G.repoConfigs=K}else z[Z]=X,G.repoConfigs=z;return}),X}function OD(J){let Y={removed:!1,path:J,total:0};return gX((Z)=>{let X=az(Z);if(!X.includes(J))return Y={removed:!1,path:J,total:X.length},!1;Z.savedRepos=X.filter((G)=>G!==J),Y={removed:!0,path:J,total:X.length-1};return}),Y}function HJ(J){return J.startsWith("ssh://")}function nq(){return c1()["experimental.remoteProjects"]===!0}function Y9(J,Y,Z){return Z?`ssh://${Y}@${J}:${Z}`:`ssh://${Y}@${J}`}function iq(J){let Y=J.remoteRepos;if(!Y||typeof Y!=="object"||Array.isArray(Y))return{};return Y}function wY(J){return iq(c1())[J]??null}function lq(){return iq(c1())}function $q(J){let Y=Y9(J.host,J.user,J.port),Z=!1;return gX((X)=>{let G={...iq(X)};G[Y]=J,X.remoteRepos=G;let z=az(X);if(Z=!z.includes(Y),Z)X.savedRepos=[...z,Y];return}),{key:Y,added:Z}}var O1=S(()=>{n1();cZ()});var G9={};q1(G9,{runAddRemote:()=>CD,parseRemoteFlags:()=>X9});import{createInterface as AD}from"readline";function X9(J){let Y={};for(let Z=0;Z<J.length;Z++){let X=J[Z];switch(X){case"--host":Y.host=J[++Z];break;case"--user":Y.user=J[++Z];break;case"--path":Y.path=J[++Z];break;case"--port":{let G=Number(J[++Z]);if(!Number.isInteger(G)||G<=0)_J(`invalid --port "${J[Z]}"`);Y.port=G;break}case"--key":{let G=J[Z+1];if(G&&!G.startsWith("-"))Y.key={present:!0,path:G},Z++;else Y.key={present:!0};break}case"--password":Y.password=!0;break;case"--help":case"-h":process.stdout.write(Z9),process.exit(0);break;default:_J(`unknown flag "${X}"`)}}return Y}function _J(J){process.stderr.write(`kobe add --remote: ${J}
5
5
 
6
- ${$9}`),process.exit(2)}async function XD(J){let Y=fD({input:process.stdin,output:process.stdout,terminal:!0}),Z=process.stdout,f=!1,X=Z._writeToOutput?.bind(Z);return Z._writeToOutput=(G)=>{if(!f||!X)process.stdout.write(G)},process.stdout.write(J),f=!0,new Promise((G)=>{Y.question("",(Q)=>{if(f=!1,X)Z._writeToOutput=X;process.stdout.write(`
7
- `),Y.close(),G(Q)})})}async function GD(J){if(!Pq())lJ("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let Y=a9(J);if(!Y.host)lJ("--host is required");if(!Y.user)lJ("--user is required");if(!Y.path)lJ("--path (remote base path) is required");if(Y.key&&Y.password)lJ("choose ONE of --key or --password, not both");if(!Y.key&&!Y.password)lJ("an auth method is required: --key [path] or --password");let Z;if(Y.password){if(!Eq())lJ("--password needs the macOS keychain (unsupported on this platform)");let G=h9(Y.host,Y.user,Y.port),Q=await XD(`Password for ${Y.user}@${Y.host}: `);if(Q.length===0)lJ("empty password");if(!P9(G,Q))lJ("failed to store the password in the keychain");Z={kind:"password",keychainRef:G}}else Z={kind:"key",keyPath:Y.key?.path};let{key:f,added:X}=cq({host:Y.host,user:Y.user,port:Y.port,basePath:Y.path,auth:Z});console.log(X?`added remote project ${f} (base ${Y.path})`:`updated remote project ${f} (base ${Y.path})`),await zD(Y,Z)}async function zD(J,Y){if(Y.kind==="password"&&!Eq())return;let Z=Y.kind==="key"?{kind:"key",keyPath:Y.keyPath}:{kind:"password",getPassword:()=>dG(Y.keychainRef)},f={host:J.host,user:J.user,port:J.port,auth:Z,controlPath:hG(J.host,J.user,J.port)};process.stdout.write("checking connection\u2026 ");try{if((await new Mf(f).run(["test","-d",J.path])).exitCode===0)console.log("ok");else console.log(`reachable, but base path "${J.path}" is not a directory (you can create it later)`)}catch(X){console.log(`could not connect (${X instanceof Error?X.message:String(X)})`),console.log("the project is saved; fix the host/credentials and it will connect on first use.")}}var $9;var _9=S(()=>{c1();bq();uq();A1();$9=`Usage: kobe add --remote --host <host> --user <user> --path <basePath>
6
+ ${Z9}`),process.exit(2)}async function RD(J){let Y=AD({input:process.stdin,output:process.stdout,terminal:!0}),Z=process.stdout,X=!1,G=Z._writeToOutput?.bind(Z);return Z._writeToOutput=(z)=>{if(!X||!G)process.stdout.write(z)},process.stdout.write(J),X=!0,new Promise((z)=>{Y.question("",(f)=>{if(X=!1,G)Z._writeToOutput=G;process.stdout.write(`
7
+ `),Y.close(),z(f)})})}async function CD(J){if(!nq())_J("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let Y=X9(J);if(!Y.host)_J("--host is required");if(!Y.user)_J("--user is required");if(!Y.path)_J("--path (remote base path) is required");if(Y.key&&Y.password)_J("choose ONE of --key or --password, not both");if(!Y.key&&!Y.password)_J("an auth method is required: --key [path] or --password");let Z;if(Y.password){if(!Pq())_J("--password needs the macOS keychain (unsupported on this platform)");let z=pW(Y.host,Y.user,Y.port),f=await RD(`Password for ${Y.user}@${Y.host}: `);if(f.length===0)_J("empty password");if(!_W(z,f))_J("failed to store the password in the keychain");Z={kind:"password",keychainRef:z}}else Z={kind:"key",keyPath:Y.key?.path};let{key:X,added:G}=$q({host:Y.host,user:Y.user,port:Y.port,basePath:Y.path,auth:Z});console.log(G?`added remote project ${X} (base ${Y.path})`:`updated remote project ${X} (base ${Y.path})`),await gD(Y,Z)}async function gD(J,Y){if(Y.kind==="password"&&!Pq())return;let Z=Y.kind==="key"?{kind:"key",keyPath:Y.keyPath}:{kind:"password",getPassword:()=>$z(Y.keychainRef)},X={host:J.host,user:J.user,port:J.port,auth:Z,controlPath:cz(J.host,J.user,J.port)};process.stdout.write("checking connection\u2026 ");try{if((await new CX(X).run(["test","-d",J.path])).exitCode===0)console.log("ok");else console.log(`reachable, but base path "${J.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 Z9;var z9=S(()=>{n1();wq();vq();O1();Z9=`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 r9(J){return typeof J==="string"&&QD.includes(J)}var CX=(J)=>J,k1="claude",QD;var RJ=S(()=>{QD=["backlog","in_progress","in_review","done","canceled","error"]});function qD(J,Y){let Z="",f=J;for(let X=Y-1;X>=0;X--){let G=f%32;Z="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[G]+Z,f=(f-G)/32}return Z}function t9(J){let Y=new Uint8Array(J);crypto.getRandomValues(Y);let Z=Array(J);for(let f=0;f<J;f++)Z[f]=(Y[f]??0)&31;return Z}function BD(J){for(let Y=J.length-1;Y>=0;Y--){let Z=J[Y]??0;if(Z<31)return J[Y]=Z+1,!0;J[Y]=0}return!1}function HD(J){let Y="";for(let Z of J)Y+="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Z]??"0";return Y}function e9(J=Date.now()){let Y;if(J===o9){let Z=s9.slice();if(!BD(Z))Y=t9(16);else Y=Z}else Y=t9(16);return o9=J,s9=Y,qD(J,10)+HD(Y)}var o9=-1,s9;var JW=S(()=>{s9=Array(16).fill(0)});var dq={};Q1(dq,{TaskIndexStore:()=>Af});import{mkdir as jD,open as WD,readFile as VD,rename as KD,unlink as YW}from"fs/promises";import{homedir as UD}from"os";import{dirname as LD,join as ZW}from"path";class Af{homeDir;kobeDir;path;tmpPath;cache={version:eY,tasks:[]};loaded=!1;listeners=new Set;saveChain=Promise.resolve();constructor(J={}){this.homeDir=J.homeDir??UD(),this.kobeDir=ZW(this.homeDir,".kobe"),this.path=ZW(this.kobeDir,"tasks.json"),this.tmpPath=`${this.path}.tmp`}subscribe(J){if(this.listeners.add(J),this.loaded)try{J(this.cache.tasks.slice())}catch(Y){console.error("[kobe TaskIndexStore] listener threw on subscribe:",Y)}return()=>{this.listeners.delete(J)}}get filePath(){return this.path}get stateDir(){return this.kobeDir}async load(){let J;try{J=await VD(this.path,"utf8")}catch(Z){if(Z.code==="ENOENT")return this.cache={version:eY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot();throw Z}let Y;try{Y=JSON.parse(J)}catch(Z){return console.warn(`[kobe] tasks.json at ${this.path} is corrupted (${Z.message}); recovering with empty index. The stale file is left in place.`),this.cache={version:eY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot()}return this.cache=DD(Y,this.path),this.loaded=!0,this.notifyListeners(),this.snapshot()}async save(){this.assertLoaded();let J=this.saveChain.then(()=>this.doSave());return this.saveChain=J.catch(()=>{}),J}async doSave(){await jD(LD(this.path),{recursive:!0});let J=this.snapshot(),Y=`${JSON.stringify(J,null,2)}
14
- `,Z=await WD(this.tmpPath,"w",420);try{await Z.writeFile(Y,"utf8"),await Z.sync()}finally{await Z.close()}await KD(this.tmpPath,this.path)}get(J){return this.assertLoaded(),this.cache.tasks.find((Y)=>Y.id===J)}list(){return this.assertLoaded(),this.cache.tasks.slice()}async create(J){this.assertLoaded();let Y=new Date().toISOString(),Z={archived:!1,vendor:J.vendor??k1,...J,id:CX(e9()),createdAt:Y,updatedAt:Y};return this.cache.tasks.push(Z),await this.save(),this.notifyListeners(),Z}async update(J,Y){this.assertLoaded();let Z=this.cache.tasks.findIndex((B)=>B.id===J);if(Z<0)throw Error(`task not found: ${J}`);let f=this.cache.tasks[Z];if(!f)throw Error(`task not found: ${J}`);let{id:X,createdAt:G,...Q}=Y,q={...f,...Q,id:f.id,createdAt:f.createdAt,updatedAt:new Date().toISOString()};return this.cache.tasks[Z]=q,await this.save(),this.notifyListeners(),q}async move(J,Y,Z){this.assertLoaded();let f=this.cache.tasks.find((L)=>L.id===J);if(!f)throw Error(`task not found: ${J}`);let X=Z?.length?Z:this.cache.tasks.map((L)=>L.id),G=X.indexOf(String(J));if(G<0)throw Error(`task not movable in current group: ${J}`);let Q=X[G+Y];if(!Q)return f;let q=this.cache.tasks.findIndex((L)=>L.id===J),B=this.cache.tasks.findIndex((L)=>L.id===Q);if(q<0||B<0||q===B)return f;let[H]=this.cache.tasks.splice(q,1);if(!H)return f;let K=q<B?B-1:B,j=Y>0?K+1:K,U={...H,updatedAt:new Date().toISOString()};return this.cache.tasks.splice(j,0,U),await this.save(),this.notifyListeners(),U}async reorder(J){this.assertLoaded();let Y=J.map((X)=>{let G=this.cache.tasks.findIndex((q)=>q.id===X.id);if(!(G>=0?this.cache.tasks[G]:void 0))throw Error(`task not found: ${X.id}`);return{idx:G,position:X.position}}),Z=!1,f=new Map;for(let{idx:X,position:G}of Y){let Q=this.cache.tasks[X];if(!Q||Q.position===G)continue;if(!f.has(X))f.set(X,Q);this.cache.tasks[X]={...Q,position:G},Z=!0}if(!Z)return;try{await this.save()}catch(X){for(let[G,Q]of f)this.cache.tasks[G]=Q;throw X}this.notifyListeners()}async archive(J,Y="done"){return this.update(J,{status:Y})}async remove(J){this.assertLoaded();let Y=this.cache.tasks.findIndex((Z)=>Z.id===J);if(Y<0)return;this.cache.tasks.splice(Y,1),await this.save(),this.notifyListeners()}async _unlinkForTests(){try{await YW(this.path)}catch(J){if(J.code!=="ENOENT")throw J}try{await YW(this.tmpPath)}catch(J){if(J.code!=="ENOENT")throw J}this.cache={version:eY,tasks:[]},this.loaded=!1}assertLoaded(){if(!this.loaded)throw Error("TaskIndexStore: call load() before any other method")}snapshot(){return{version:eY,tasks:this.cache.tasks.slice()}}notifyListeners(){if(this.listeners.size===0)return;let J=this.cache.tasks.slice();for(let Y of this.listeners)try{Y(J)}catch(Z){console.error("[kobe TaskIndexStore] listener threw on notify:",Z)}}}function DD(J,Y){if(!J||typeof J!=="object"||Array.isArray(J))return console.warn(`[kobe] tasks.json at ${Y} is not an object; recovering with empty index.`),{version:eY,tasks:[]};let Z=J,f=Z.version;if(f!==void 0&&f!==1&&f!==2&&f!==3)return console.warn(`[kobe] tasks.json at ${Y} has unsupported version=${String(f)}; recovering with empty index.`),{version:eY,tasks:[]};let X=Array.isArray(Z.tasks)?Z.tasks:[],G=[];for(let Q of X){let q=MD(Q);if(q)G.push(q);else console.warn(`[kobe] dropping malformed task entry from ${Y}: ${JSON.stringify(Q)}`)}return{version:eY,tasks:G}}function MD(J){if(!J||typeof J!=="object")return null;let Y=J;if(typeof Y.id!=="string"||typeof Y.title!=="string"||typeof Y.repo!=="string"||typeof Y.branch!=="string"||typeof Y.worktreePath!=="string"||typeof Y.status!=="string"||typeof Y.createdAt!=="string"||typeof Y.updatedAt!=="string")return null;if(!gD(Y.status))return null;let Z=typeof Y.archived==="boolean"?Y.archived:!1,f=Y.kind==="main"?"main":"task",X=f==="main"?Y.status==="in_progress"||Y.status==="done"?"backlog":Y.status:Y.status==="done"&&!Z?"in_progress":Y.status;return{id:CX(Y.id),title:Y.title,repo:Y.repo,branch:Y.branch,worktreePath:Y.worktreePath,status:X,archived:Z,pinned:typeof Y.pinned==="boolean"?Y.pinned:!1,kind:f,vendor:TZ(typeof Y.vendor==="string"?Y.vendor:void 0),prStatus:FD(Y.prStatus),...typeof Y.position==="number"&&Number.isFinite(Y.position)?{position:Y.position}:{},...typeof Y.modelEffort==="string"&&Y.modelEffort.length>0?{modelEffort:Y.modelEffort}:{},createdAt:Y.createdAt,updatedAt:Y.updatedAt}}function FD(J){if(!J||typeof J!=="object"||Array.isArray(J))return;let Y=J;if(!OD(Y.provider)||!AD(Y.lifecycle)||!RD(Y.checkState))return;return{provider:Y.provider,lifecycle:Y.lifecycle,checkState:Y.checkState,...typeof Y.number==="number"&&Number.isFinite(Y.number)?{number:Y.number}:{},...typeof Y.url==="string"?{url:Y.url}:{},...typeof Y.title==="string"?{title:Y.title}:{},...typeof Y.baseRef==="string"?{baseRef:Y.baseRef}:{},...typeof Y.headRef==="string"?{headRef:Y.headRef}:{},...typeof Y.reviewDecision==="string"?{reviewDecision:Y.reviewDecision}:{},...typeof Y.mergeable==="string"?{mergeable:Y.mergeable}:{},...typeof Y.lastCheckedAt==="string"?{lastCheckedAt:Y.lastCheckedAt}:{},...typeof Y.lastError==="string"?{lastError:Y.lastError}:{}}}function OD(J){return J==="github"||J==="gitlab"||J==="bitbucket"||J==="unknown"}function AD(J){return J==="creating"||J==="open"||J==="ready_to_merge"||J==="merged"||J==="closed"||J==="unknown"}function RD(J){return J==="none"||J==="pending"||J==="passing"||J==="failing"||J==="unknown"}function gD(J){return J==="backlog"||J==="in_progress"||J==="in_review"||J==="done"||J==="canceled"||J==="error"}var eY=3;var SX=S(()=>{RJ();zJ();JW()});function fW(J){let Y=J.auth,Z=Y.kind==="key"?{kind:"key",keyPath:Y.keyPath}:{kind:"password",getPassword:()=>dG(Y.keychainRef)};return{host:J.host,user:J.user,port:J.port,auth:Z,controlPath:hG(J.host,J.user,J.port)}}function Rf(J){let Y=bY(J);if(!Y)return new cG;return new Mf(fW(Y))}function TY(J){for(let Y of Object.values(mq()))if(J===Y.basePath||J.startsWith(`${Y.basePath}/`))return new Mf(fW(Y));return new cG}function XW(J){return J&&xJ(J)?J:void 0}function iG(J){let Y=TY(J);return Y.isRemote||Y.existsSync(J)}function I1(J){return TY(J).isRemote?qY():J}var $J=S(()=>{c1();A1();bq();uq()});var lG;var GW=S(()=>{lG=class lG extends Error{args;cwd;exitCode;stdout;stderr;constructor(J,Y,Z){super(`git ${J.join(" ")} (cwd=${Y}) exited with code ${Z.exitCode}: ${Z.stderr.trim()||Z.stdout.trim()}`);this.name="GitCommandError",this.args=J,this.cwd=Y,this.exitCode=Z.exitCode,this.stdout=Z.stdout,this.stderr=Z.stderr}}});import{createHash as CD}from"crypto";import QW from"fs";import gJ from"path";function qW(J){if(!gJ.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return gJ.join(r1(),SD,bD(J))}function BW(J){if(!gJ.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[qW(J),...ID.map((Y)=>gJ.join(J,Y))]}function HW(J,Y){if(!Y||/[/\\\0]/.test(Y))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(Y)}`);return gJ.join(qW(J),Y)}async function jW(J){if(xJ(J)){let Z=bY(J)?.basePath;if(!Z)return[];return Rf(J).readdir(VW(Z))}let Y=new Set;for(let Z of BW(J))try{for(let f of QW.readdirSync(Z,{withFileTypes:!0}))if(f.isDirectory())Y.add(f.name)}catch{}return[...Y]}function nq(J,Y){if(!gJ.isAbsolute(J)||!gJ.isAbsolute(Y))return null;let Z=zW(Y);for(let f of BW(J)){let X=zW(f),G=gJ.relative(X,Z);if(G!==""&&!G.startsWith("..")&&!gJ.isAbsolute(G))return f}return null}function WW(J,Y){return nq(J,Y)!==null}function VW(J){return`${ND(J)}/.kobe/worktrees`}function KW(J,Y){if(!Y||/[/\\\0]/.test(Y))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(Y)}`);return`${VW(J)}/${Y}`}function ND(J){return J.length>1&&J.endsWith("/")?J.replace(/\/+$/,""):J}function zW(J){try{return QW.realpathSync(J)}catch{return gJ.resolve(J)}}function bD(J){let Z=(gJ.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",f=CD("sha1").update(gJ.resolve(J)).digest("hex").slice(0,12);return`${Z}-${f}`}var SD="worktrees",yD=".kobe/worktrees",kD=".claude/worktrees",ID;var iq=S(()=>{c1();$J();A1();ID=[yD,kD]});var DW={};Q1(DW,{GitWorktreeManager:()=>$G});import LW from"fs";import aJ from"path";class $G{execDeps;constructor(J=TD){this.execDeps=J}ctxFor(J){let Y=this.execDeps.remoteBasePath(J);return Y?{exec:this.execDeps.execForRepo(J),dir:Y,remote:!0}:{exec:this.execDeps.execForRepo(J),dir:J,remote:!1}}async runGit(J,Y,Z){if(!Z.cwd)throw Error("runGit(): cwd is required; refusing to inherit from process.cwd()");let f=await J.run(["git",...Y],{cwd:Z.cwd,env:Z.env}),X={stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode};if(X.exitCode!==0&&!Z.allowFail)throw new lG(Y,Z.cwd,X);return X}async create(J,Y,Z,f){let X=this.ctxFor(J);if(JZ("repo",X.dir),JZ("path",Z),!Y)throw Error("create(): branch must be a non-empty string");if(await X.exec.exists(Z)){let B=await this.tryDescribe(X,Z);if(B){if(B.branch!==Y)throw Error(`worktree at ${Z} is on branch '${B.branch}', refusing to hijack to '${Y}'`);return B}throw Error(`create(): ${Z} exists but is not a registered git worktree`)}await X.exec.mkdirp(aJ.dirname(Z));let Q=await this.branchExists(X,Y)?["worktree","add",Z,Y]:f?["worktree","add","-b",Y,Z,f]:["worktree","add","-b",Y,Z];await this.runGit(X.exec,Q,{cwd:X.dir});let q=await this.tryDescribe(X,Z);if(!q)throw Error(`create(): git reported success but ${Z} is not a worktree`);if(q.branch!==Y)throw Error(`create(): post-condition failed \u2014 expected branch '${Y}' at ${Z}, got '${q.branch}'`);return q}async createForTask(J){let Y=this.execDeps.remoteBasePath(J.repo),Z=Y?KW(Y,J.slug):HW(J.repo,J.slug);return this.create(J.repo,J.branch,Z,J.baseRef)}async remove(J,Y){JZ("path",J);let Z=this.execDeps.execForPath(J),f=Y?.force===!0;if(!await Z.exists(J)){let Q=await this.findRepoFor(Z,J);if(Q)await this.runGit(Z,["worktree","prune"],{cwd:Q,allowFail:!0});return}let X=await this.findRepoFor(Z,J);if(!X)throw Error(`remove(): ${J} is not a git worktree`);if(!f){if(await this.isDirty(J))throw Error(`remove(): refusing to remove dirty worktree at ${J} (pass { force: true } to override)`)}let G=f?["worktree","remove","--force",J]:["worktree","remove",J];await this.runGit(Z,G,{cwd:X}),await this.runGit(Z,["worktree","prune"],{cwd:X,allowFail:!0})}async list(J){let Y=this.ctxFor(J);JZ("repo",Y.dir);let Z=await this.runGit(Y.exec,["worktree","list","--porcelain"],{cwd:Y.dir}),f=lq(Z.stdout),X=[];for(let G of f){if(!G.path)continue;let Q=Y.remote?UW(Y.dir,G.path):nq(J,G.path);if(!Q)continue;if(!G.branch||G.detached)continue;let q=yX(Q),B=yX(G.path),H=aJ.relative(q,B),K=aJ.join(Q,H),j=await this.isDirty(G.path);X.push({path:K,branch:G.branch,head:G.head??"",dirty:j})}return X}async listAll(J){let Y=this.ctxFor(J);JZ("repo",Y.dir);let Z=await this.runGit(Y.exec,["worktree","list","--porcelain"],{cwd:Y.dir}),f=lq(Z.stdout),X=Y.remote?Y.dir:yX(Y.dir),G=[];for(let Q of f){if(!Q.path)continue;if(Q.bare)continue;if(!Q.branch||Q.detached)continue;if((Y.remote?Q.path:yX(Q.path))===X)continue;let q=await this.isDirty(Q.path);G.push({path:Q.path,branch:Q.branch,head:Q.head??"",dirty:q,kobeManaged:Y.remote?UW(Y.dir,Q.path)!==null:WW(J,Q.path),lastActivityMs:await this.lastActivityMs(Y.exec,Q.path)})}return G.sort((Q,q)=>q.lastActivityMs-Q.lastActivityMs),G}async lastActivityMs(J,Y){try{let Z=await this.runGit(J,["log","-1","--format=%ct"],{cwd:Y}),f=Number.parseInt(Z.stdout.trim(),10);if(Number.isFinite(f)&&f>0)return f*1000}catch{}if(!J.isRemote)try{return LW.statSync(Y).mtimeMs}catch{}return 0}async isDirty(J){JZ("path",J);let Y=this.execDeps.execForPath(J);return(await this.runGit(Y,["status","--porcelain"],{cwd:J})).stdout.length>0}async currentBranch(J){JZ("path",J);let Y=this.execDeps.execForPath(J),f=(await this.runGit(Y,["rev-parse","--abbrev-ref","HEAD"],{cwd:J})).stdout.trim();if(!f||f==="HEAD")throw Error(`currentBranch(): ${J} is in detached-HEAD state`);return f}async renameBranch(J,Y,Z){if(JZ("path",J),Y===Z)return;let f=this.execDeps.execForPath(J),X=await this.findRepoFor(f,J);if(!X)throw Error(`renameBranch(): ${J} is not a git worktree`);await this.runGit(f,["branch","-m",Y,Z],{cwd:X})}async tryDescribe(J,Y){let Z=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),f=lq(Z.stdout),X=(q)=>J.remote?q:yX(q),G=X(Y),Q=f.find((q)=>q.path&&X(q.path)===G);if(!Q||!Q.path||!Q.branch||Q.detached)return null;return{path:Y,branch:Q.branch,head:Q.head??"",dirty:await this.isDirty(Q.path)}}async branchExists(J,Y){let Z=`refs/heads/${Y}`;return(await this.runGit(J.exec,["show-ref","--verify","--quiet",Z],{cwd:J.dir,allowFail:!0})).exitCode===0}async findRepoFor(J,Y){try{let Z=await this.runGit(J,["rev-parse","--git-common-dir"],{cwd:Y,allowFail:!0});if(Z.exitCode!==0)return null;let f=Z.stdout.trim();if(!f)return null;let X=aJ.isAbsolute(f)?f:aJ.resolve(Y,f);return aJ.basename(X)===".git"?aJ.dirname(X):X}catch(Z){if(Z instanceof lG)return null;throw Z}}}function lq(J){let Y=[],Z=null;for(let f of J.split(`
15
- `)){let X=f.replace(/\r$/,"");if(X===""){if(Z)Y.push(Z);Z=null;continue}if(!Z)Z={};if(X.startsWith("worktree "))Z.path=X.slice(9);else if(X.startsWith("HEAD "))Z.head=X.slice(5);else if(X.startsWith("branch ")){let G=X.slice(7);Z.branch=G.startsWith("refs/heads/")?G.slice(11):G}else if(X==="detached")Z.detached=!0;else if(X==="bare")Z.bare=!0}if(Z)Y.push(Z);return Y}function UW(J,Y){let Z=`${J.replace(/\/+$/,"")}/.kobe/worktrees`;return Y===Z||Y.startsWith(`${Z}/`)?Z:null}function JZ(J,Y){if(!Y||!aJ.isAbsolute(Y))throw Error(`${J} must be an absolute path, got: ${JSON.stringify(Y)}`)}function yX(J){try{return LW.realpathSync(J)}catch{return aJ.resolve(J)}}var TD;var $q=S(()=>{$J();A1();GW();iq();TD={execForRepo:Rf,execForPath:TY,remoteBasePath(J){return bY(J)?.basePath??null}}});function MW(J){let Y=String(J),Z=Y.length-1;return u1.context.id+(Z?String.fromCharCode(96+Z):"")+Y}function _q(J){u1.context=J}function ED(){return{...u1.context,id:u1.getNextContextId(),count:0}}function hZ(J,Y){let Z=W1,f=i0,X=J.length===0,G=Y===void 0?f:Y,Q=X?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:G?G.context:null,owner:G},q=X?()=>J(()=>{throw Error("Dispose method must be an explicit argument to createRoot function")}):()=>J(()=>n1(()=>YZ(Q)));_J.afterCreateOwner&&_J.afterCreateOwner(Q),i0=Q,W1=null;try{return jJ(q,!0)}finally{W1=Z,i0=f}}function p(J,Y){Y=Y?Object.assign({},_G,Y):_G;let Z={value:J,observers:null,observerSlots:null,comparator:Y.equals||void 0};{if(Y.name)Z.name=Y.name;if(Y.internal)Z.internal=!0;else if(kW(Z),_J.afterCreateSignal)_J.afterCreateSignal(Z)}let f=(X)=>{if(typeof X==="function")if(j0&&j0.running&&j0.sources.has(Z))X=X(Z.tValue);else X=X(Z.value);return oq(Z,X)};return[IW.bind(Z),f]}function OW(J,Y,Z){let f=bX(J,Y,!0,CJ,Z);if(Cf&&j0&&j0.running)P1.push(f);else PZ(f)}function BY(J,Y,Z){let f=bX(J,Y,!1,CJ,Z);if(Cf&&j0&&j0.running)P1.push(f);else PZ(f)}function p0(J,Y,Z){yW=lD;let f=bX(J,Y,!1,CJ,Z),X=IX&&SJ(IX);if(X)f.suspense=X;if(!Z||!Z.render)f.user=!0;JJ?JJ.push(f):PZ(f)}function V0(J,Y,Z){Z=Z?Object.assign({},_G,Z):_G;let f=bX(J,Y,!0,0,Z);if(f.observers=null,f.observerSlots=null,f.comparator=Z.equals||void 0,Cf&&j0&&j0.running)f.tState=CJ,P1.push(f);else PZ(f);return IW.bind(f)}function vD(J){return J&&typeof J==="object"&&"then"in J}function tG(J,Y,Z){let f,X,G;if(typeof Y==="function")f=J,X=Y,G=Z||{};else f=!0,X=J,G=Y||{};let Q=null,q=aq,B=null,H=!1,K=!1,j="initialValue"in G,U=typeof f==="function"&&V0(f),L=new Set,[F,D]=(G.storage||p)(G.initialValue),[O,A]=p(void 0),[l,R]=p(void 0,{equals:!1}),[C,g]=p(j?"ready":"unresolved");if(u1.context){if(B=u1.getNextContextId(),G.ssrLoadFrom==="initial")q=G.initialValue;else if(u1.load&&u1.has(B))q=u1.load(B)}function y(u,B0,Y0,W0){if(Q===u){if(Q=null,W0!==void 0&&(j=!0),(u===q||B0===q)&&G.onHydrated)queueMicrotask(()=>G.onHydrated(W0,{value:B0}));if(q=aq,j0&&u&&H)j0.promises.delete(u),H=!1,jJ(()=>{j0.running=!0,$(B0,Y0)},!1);else $(B0,Y0)}return B0}function $(u,B0){jJ(()=>{if(B0===void 0)D(()=>u);g(B0!==void 0?"errored":j?"ready":"unresolved"),A(B0);for(let Y0 of L.keys())Y0.decrement();L.clear()},!1)}function G0(){let u=IX&&SJ(IX),B0=F(),Y0=O();if(Y0!==void 0&&!Q)throw Y0;if(W1&&!W1.user&&u)OW(()=>{if(l(),Q){if(u.resolved&&j0&&H)j0.promises.add(Q);else if(!L.has(u))u.increment(),L.add(u)}});return B0}function t(u=!0){if(u!==!1&&K)return;K=!1;let B0=U?U():f;if(H=j0&&j0.running,B0==null||B0===!1){y(Q,n1(F));return}if(j0&&Q)j0.promises.delete(Q);let Y0,W0=q!==aq?q:n1(()=>{try{return X(B0,{value:F(),refetching:u})}catch(o){Y0=o}});if(Y0!==void 0){y(Q,void 0,pG(Y0),B0);return}else if(!vD(W0))return y(Q,W0,void 0,B0),W0;if(Q=W0,"v"in W0){if(W0.s===1)y(Q,W0.v,void 0,B0);else y(Q,void 0,pG(W0.v),B0);return W0}return K=!0,queueMicrotask(()=>K=!1),jJ(()=>{g(j?"refreshing":"pending"),R()},!1),W0.then((o)=>y(W0,o,void 0,B0),(o)=>y(W0,void 0,pG(o),B0))}Object.defineProperties(G0,{state:{get:()=>C()},error:{get:()=>O()},loading:{get(){let u=C();return u==="pending"||u==="refreshing"}},latest:{get(){if(!j)return G0();let u=O();if(u&&!Q)throw u;return F()}}});let Z0=i0;if(U)OW(()=>(Z0=i0,t(!1)));else t(!1);return[G0,{refetch:(u)=>mD(Z0,()=>t(u)),mutate:D}]}function eG(J){return jJ(J,!1)}function n1(J){if(!gf&&W1===null)return J();let Y=W1;W1=null;try{if(gf)return gf.untrack(J);return J()}finally{W1=Y}}function WJ(J,Y,Z){let f=Array.isArray(J),X,G=Z&&Z.defer;return(Q)=>{let q;if(f){q=Array(J.length);for(let H=0;H<J.length;H++)q[H]=J[H]()}else q=J();if(G)return G=!1,Q;let B=n1(()=>Y(q,X,Q));return X=q,B}}function o1(J){p0(()=>n1(J))}function i1(J){if(i0===null)console.warn("cleanups created outside a `createRoot` or `render` will never be run");else if(i0.cleanups===null)i0.cleanups=[J];else i0.cleanups.push(J);return J}function Jz(){return W1}function mD(J,Y){let Z=i0,f=W1;i0=J,W1=null;try{return jJ(Y,!0)}catch(X){Yz(X)}finally{i0=Z,W1=f}}function cD(J){if(j0&&j0.running)return J(),j0.done;let Y=W1,Z=i0;return Promise.resolve().then(()=>{W1=Y,i0=Z;let f;if(Cf||IX)f=j0||(j0={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),f.done||(f.done=new Promise((X)=>f.resolve=X)),f.running=!0;return jJ(J,!1),W1=i0=null,f?f.done:void 0})}function RW(J,Y){let Z=bX(()=>n1(()=>{return Object.assign(J,{[hD]:!0}),J(Y)}),void 0,!0,0);return Z.props=Y,Z.observers=null,Z.observerSlots=null,Z.name=J.name,Z.component=J,PZ(Z),Z.tValue!==void 0?Z.tValue:Z.value}function kW(J){if(i0){if(i0.sourceMap)i0.sourceMap.push(J);else i0.sourceMap=[J];J.graph=i0}if(_J.afterRegisterGraph)_J.afterRegisterGraph(J)}function HY(J,Y){let Z=Symbol("context");return{id:Z,Provider:$D(Z,Y),defaultValue:J}}function SJ(J){let Y;return i0&&i0.context&&(Y=i0.context[J.id])!==void 0?Y:J.defaultValue}function dD(J){let Y=V0(J),Z=V0(()=>rq(Y()),void 0,{name:"children"});return Z.toArray=()=>{let f=Z();return Array.isArray(f)?f:f!=null?[f]:[]},Z}function IW(){let J=j0&&j0.running;if(this.sources&&(J?this.tState:this.state))if((J?this.tState:this.state)===CJ)PZ(this);else{let Y=P1;P1=null,jJ(()=>rG(this),!1),P1=Y}if(W1){let Y=this.observers;if(!Y||Y[Y.length-1]!==W1){let Z=Y?Y.length:0;if(!W1.sources)W1.sources=[this],W1.sourceSlots=[Z];else W1.sources.push(this),W1.sourceSlots.push(Z);if(!Y)this.observers=[W1],this.observerSlots=[W1.sources.length-1];else Y.push(W1),this.observerSlots.push(W1.sources.length-1)}}if(J&&j0.sources.has(this))return this.tValue;return this.value}function oq(J,Y,Z){let f=j0&&j0.running&&j0.sources.has(J)?J.tValue:J.value;if(!J.comparator||!J.comparator(f,Y)){if(j0){let X=j0.running;if(X||!Z&&j0.sources.has(J))j0.sources.add(J),J.tValue=Y;if(!X)J.value=Y}else J.value=Y;if(J.observers&&J.observers.length)jJ(()=>{for(let X=0;X<J.observers.length;X+=1){let G=J.observers[X],Q=j0&&j0.running;if(Q&&j0.disposed.has(G))continue;if(Q?!G.tState:!G.state){if(G.pure)P1.push(G);else JJ.push(G);if(G.observers)bW(G)}if(!Q)G.state=CJ;else G.tState=CJ}if(P1.length>1e6){if(P1=[],uD)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return Y}function PZ(J){if(!J.fn)return;YZ(J);let Y=sG;if(gW(J,j0&&j0.running&&j0.sources.has(J)?J.tValue:J.value,Y),j0&&!j0.running&&j0.sources.has(J))queueMicrotask(()=>{jJ(()=>{j0&&(j0.running=!0),W1=i0=J,gW(J,J.tValue,Y),W1=i0=null},!1)})}function gW(J,Y,Z){let f,X=i0,G=W1;W1=i0=J;try{f=J.fn(Y)}catch(Q){if(J.pure)if(j0&&j0.running)J.tState=CJ,J.tOwned&&J.tOwned.forEach(YZ),J.tOwned=void 0;else J.state=CJ,J.owned&&J.owned.forEach(YZ),J.owned=null;return J.updatedAt=Z+1,Yz(Q)}finally{W1=G,i0=X}if(!J.updatedAt||J.updatedAt<=Z){if(J.updatedAt!=null&&"observers"in J)oq(J,f,!0);else if(j0&&j0.running&&J.pure){if(!j0.sources.has(J))J.value=f;j0.sources.add(J),J.tValue=f}else J.value=f;J.updatedAt=Z}}function bX(J,Y,Z,f=CJ,X){let G={fn:J,state:f,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:Y,owner:i0,context:i0?i0.context:null,pure:Z};if(j0&&j0.running)G.state=0,G.tState=f;if(i0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if(i0!==PD)if(j0&&j0.running&&i0.pure)if(!i0.tOwned)i0.tOwned=[G];else i0.tOwned.push(G);else if(!i0.owned)i0.owned=[G];else i0.owned.push(G);if(X&&X.name)G.name=X.name;if(gf&&G.fn){let Q=G.fn,[q,B]=p(void 0,{equals:!1}),H=gf.factory(Q,B);i1(()=>H.dispose());let K,j=()=>cD(B).then(()=>{if(K)K.dispose(),K=void 0});G.fn=(U)=>{if(q(),j0&&j0.running){if(!K)K=gf.factory(Q,j);return K.track(U)}return H.track(U)}}return _J.afterCreateOwner&&_J.afterCreateOwner(G),G}function NX(J){let Y=j0&&j0.running;if((Y?J.tState:J.state)===0)return;if((Y?J.tState:J.state)===kX)return rG(J);if(J.suspense&&n1(J.suspense.inFallback))return J.suspense.effects.push(J);let Z=[J];while((J=J.owner)&&(!J.updatedAt||J.updatedAt<sG)){if(Y&&j0.disposed.has(J))return;if(Y?J.tState:J.state)Z.push(J)}for(let f=Z.length-1;f>=0;f--){if(J=Z[f],Y){let X=J,G=Z[f+1];while((X=X.owner)&&X!==G)if(j0.disposed.has(X))return}if((Y?J.tState:J.state)===CJ)PZ(J);else if((Y?J.tState:J.state)===kX){let X=P1;P1=null,jJ(()=>rG(J,Z[0]),!1),P1=X}}}function jJ(J,Y){if(P1)return J();let Z=!1;if(!Y)P1=[];if(JJ)Z=!0;else JJ=[];sG++;try{let f=J();return nD(Z),f}catch(f){if(!Z)JJ=null;P1=null,Yz(f)}}function nD(J){if(P1){if(Cf&&j0&&j0.running)iD(P1);else NW(P1);P1=null}if(J)return;let Y;if(j0){if(!j0.promises.size&&!j0.queue.size){let{sources:f,disposed:X}=j0;JJ.push.apply(JJ,j0.effects),Y=j0.resolve;for(let G of JJ)"tState"in G&&(G.state=G.tState),delete G.tState;j0=null,jJ(()=>{for(let G of X)YZ(G);for(let G of f){if(G.value=G.tValue,G.owned)for(let Q=0,q=G.owned.length;Q<q;Q++)YZ(G.owned[Q]);if(G.tOwned)G.owned=G.tOwned;delete G.tValue,delete G.tOwned,G.tState=0}AW(!1)},!1)}else if(j0.running){j0.running=!1,j0.effects.push.apply(j0.effects,JJ),JJ=null,AW(!0);return}}let Z=JJ;if(JJ=null,Z.length)jJ(()=>yW(Z),!1);else _J.afterUpdate&&_J.afterUpdate();if(Y)Y()}function NW(J){for(let Y=0;Y<J.length;Y++)NX(J[Y])}function iD(J){for(let Y=0;Y<J.length;Y++){let Z=J[Y],f=j0.queue;if(!f.has(Z))f.add(Z),Cf(()=>{f.delete(Z),jJ(()=>{j0.running=!0,NX(Z)},!1),j0&&(j0.running=!1)})}}function lD(J){let Y,Z=0;for(Y=0;Y<J.length;Y++){let f=J[Y];if(!f.user)NX(f);else J[Z++]=f}if(u1.context){if(u1.count){u1.effects||(u1.effects=[]),u1.effects.push(...J.slice(0,Z));return}_q()}if(u1.effects&&(u1.done||!u1.count))J=[...u1.effects,...J],Z+=u1.effects.length,delete u1.effects;for(Y=0;Y<Z;Y++)NX(J[Y])}function rG(J,Y){let Z=j0&&j0.running;if(Z)J.tState=0;else J.state=0;for(let f=0;f<J.sources.length;f+=1){let X=J.sources[f];if(X.sources){let G=Z?X.tState:X.state;if(G===CJ){if(X!==Y&&(!X.updatedAt||X.updatedAt<sG))NX(X)}else if(G===kX)rG(X,Y)}}}function bW(J){let Y=j0&&j0.running;for(let Z=0;Z<J.observers.length;Z+=1){let f=J.observers[Z];if(Y?!f.tState:!f.state){if(Y)f.tState=kX;else f.state=kX;if(f.pure)P1.push(f);else JJ.push(f);f.observers&&bW(f)}}}function YZ(J){let Y;if(J.sources)while(J.sources.length){let Z=J.sources.pop(),f=J.sourceSlots.pop(),X=Z.observers;if(X&&X.length){let G=X.pop(),Q=Z.observerSlots.pop();if(f<X.length)G.sourceSlots[Q]=f,X[f]=G,Z.observerSlots[f]=Q}}if(J.tOwned){for(Y=J.tOwned.length-1;Y>=0;Y--)YZ(J.tOwned[Y]);delete J.tOwned}if(j0&&j0.running&&J.pure)TW(J,!0);else if(J.owned){for(Y=J.owned.length-1;Y>=0;Y--)YZ(J.owned[Y]);J.owned=null}if(J.cleanups){for(Y=J.cleanups.length-1;Y>=0;Y--)J.cleanups[Y]();J.cleanups=null}if(j0&&j0.running)J.tState=0;else J.state=0;delete J.sourceMap}function TW(J,Y){if(!Y)J.tState=0,j0.disposed.add(J);if(J.owned)for(let Z=0;Z<J.owned.length;Z++)TW(J.owned[Z])}function pG(J){if(J instanceof Error)return J;return Error(typeof J==="string"?J:"Unknown error",{cause:J})}function CW(J,Y,Z){try{for(let f of Y)f(J)}catch(f){Yz(f,Z&&Z.owner||null)}}function Yz(J,Y=i0){let Z=FW&&Y&&Y.context&&Y.context[FW],f=pG(J);if(!Z)throw f;if(JJ)JJ.push({fn(){CW(f,Z,Y)},state:CJ});else CW(f,Z,Y)}function rq(J){if(typeof J==="function"&&!J.length)return rq(J());if(Array.isArray(J)){let Y=[];for(let Z=0;Z<J.length;Z++){let f=rq(J[Z]);if(Array.isArray(f))if(f.length<32768)Y.push.apply(Y,f);else for(let X=0;X<f.length;X++)Y.push(f[X]);else Y.push(f)}return Y}return J}function $D(J,Y){return function(f){let X;return BY(()=>X=n1(()=>{return i0.context={...i0.context,[J]:f.value},dD(()=>f.children)}),void 0,Y),X}}function SW(J){for(let Y=0;Y<J.length;Y++)J[Y]()}function pD(J,Y,Z={}){let f=[],X=[],G=[],Q=0,q=Y.length>1?[]:null;return i1(()=>SW(G)),()=>{let B=J()||[],H=B.length,K,j;return B[oG],n1(()=>{let L,F,D,O,A,l,R,C,g;if(H===0){if(Q!==0)SW(G),G=[],f=[],X=[],Q=0,q&&(q=[]);if(Z.fallback)f=[aD],X[0]=hZ((y)=>{return G[0]=y,Z.fallback()}),Q=1}else if(Q===0){X=Array(H);for(j=0;j<H;j++)f[j]=B[j],X[j]=hZ(U);Q=H}else{D=Array(H),O=Array(H),q&&(A=Array(H));for(l=0,R=Math.min(Q,H);l<R&&f[l]===B[l];l++);for(R=Q-1,C=H-1;R>=l&&C>=l&&f[R]===B[C];R--,C--)D[C]=X[R],O[C]=G[R],q&&(A[C]=q[R]);L=new Map,F=Array(C+1);for(j=C;j>=l;j--)g=B[j],K=L.get(g),F[j]=K===void 0?-1:K,L.set(g,j);for(K=l;K<=R;K++)if(g=f[K],j=L.get(g),j!==void 0&&j!==-1)D[j]=X[K],O[j]=G[K],q&&(A[j]=q[K]),j=F[j],L.set(g,j);else G[K]();for(j=l;j<H;j++)if(j in D){if(X[j]=D[j],G[j]=O[j],q)q[j]=A[j],q[j](j)}else X[j]=hZ(U);X=X.slice(0,Q=H),f=B.slice(0)}return X});function U(L){if(G[j]=L,q){let[F,D]=p(j,{name:"index"});return q[j]=D,Y(B[j],F)}return Y(B[j])}}}function EW(J,Y){if(_D){if(u1.context){let Z=u1.context;_q(ED());let f=RW(J,Y||{});return _q(Z),f}}return RW(J,Y||{})}function aG(){return!0}function pq(J){return!(J=typeof J==="function"?J():J)?{}:J}function oD(){for(let J=0,Y=this.length;J<Y;++J){let Z=this[J]();if(Z!==void 0)return Z}}function Zz(...J){let Y=!1;for(let Q=0;Q<J.length;Q++){let q=J[Q];Y=Y||!!q&&pJ in q,J[Q]=typeof q==="function"?(Y=!0,V0(q)):q}if(wD&&Y)return new Proxy({get(Q){for(let q=J.length-1;q>=0;q--){let B=pq(J[q])[Q];if(B!==void 0)return B}},has(Q){for(let q=J.length-1;q>=0;q--)if(Q in pq(J[q]))return!0;return!1},keys(){let Q=[];for(let q=0;q<J.length;q++)Q.push(...Object.keys(pq(J[q])));return[...new Set(Q)]}},rD);let Z={},f=Object.create(null);for(let Q=J.length-1;Q>=0;Q--){let q=J[Q];if(!q)continue;let B=Object.getOwnPropertyNames(q);for(let H=B.length-1;H>=0;H--){let K=B[H];if(K==="__proto__"||K==="constructor")continue;let j=Object.getOwnPropertyDescriptor(q,K);if(!f[K])f[K]=j.get?{enumerable:!0,configurable:!0,get:oD.bind(Z[K]=[j.get.bind(q)])}:j.value!==void 0?j:void 0;else{let U=Z[K];if(U){if(j.get)U.push(j.get.bind(q));else if(j.value!==void 0)U.push(()=>j.value)}}}}let X={},G=Object.keys(f);for(let Q=G.length-1;Q>=0;Q--){let q=G[Q],B=f[q];if(B&&B.get)Object.defineProperty(X,q,B);else X[q]=B?B.value:void 0}return X}function Y1(J){let Y="fallback"in J&&{fallback:()=>J.fallback};return V0(pD(()=>J.each,J.children,Y||void 0),void 0,{name:"value"})}function z0(J){let Y=J.keyed,Z=V0(()=>J.when,void 0,{name:"condition value"}),f=Y?Z:V0(Z,void 0,{equals:(X,G)=>!X===!G,name:"condition"});return V0(()=>{let X=f();if(X){let G=J.children;return typeof G==="function"&&G.length>0?n1(()=>G(Y?X:()=>{if(!n1(f))throw sD("Show");return Z()})):G}return J.fallback},void 0,{name:"value"})}var u1,uD=!0,xD=(J,Y)=>J===Y,pJ,wD,oG,hD,_G,FW=null,yW,CJ=1,kX=2,PD,aq,i0=null,j0=null,Cf=null,gf=null,W1=null,P1=null,JJ=null,sG=0,_J,RN,AW,IX,aD,_D=!1,rD,sD=(J)=>`Attempting to access a stale value from <${J}> 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.`,uW;var q1=S(()=>{u1={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return MW(this.context.count)},getNextContextId(){return MW(this.context.count++)}};pJ=Symbol("solid-proxy"),wD=typeof Proxy==="function",oG=Symbol("solid-track"),hD=Symbol("solid-dev-component"),_G={equals:xD},yW=NW,PD={},aq={},_J={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[RN,AW]=p(!1);aD=Symbol("fallback");rD={get(J,Y,Z){if(Y===pJ)return Z;return J.get(Y)},has(J,Y){if(Y===pJ)return!0;return J.has(Y)},set:aG,deleteProperty:aG,getOwnPropertyDescriptor(J,Y){return{configurable:!0,enumerable:!0,get(){return J.get(Y)},set:aG,deleteProperty:aG}},ownKeys(J){return J.keys()}};uW={hooks:_J,writeSignal:oq,registerGraph:kW};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.")});var sq,tq,eq,JB="DIRTY_WORKTREE",YB,ZB;var fB=S(()=>{sq=class sq extends Error{from;to;taskId;constructor(J,Y,Z){super(`illegal transition for task ${Z}: ${J} -> ${Y}`);this.from=J;this.to=Y;this.taskId=Z;this.name="IllegalTransitionError"}};tq=class tq extends Error{constructor(J){super(`task not found: ${J}`);this.name="TaskNotFoundError"}};eq=class eq extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};YB=class YB extends Error{taskId;constructor(J){super(`${JB}: task ${J} worktree has uncommitted or untracked changes`);this.taskId=J;this.name="DirtyWorktreeError"}};ZB=class ZB extends Error{taskId;cause;constructor(J,Y){super(`failed to remove worktree for task ${J}: ${Y instanceof Error?Y.message:String(Y)}`);this.taskId=J;this.cause=Y;this.name="WorktreeRemoveFailedError"}}});function xW(J){if(typeof J!=="string")return"";let Y=J.replace(/\s+/g," ").trim();if(Y.length===0)return"";let Z=[...Y];if(Z.length<=40)return Y;return`${Z.slice(0,40).join("")}\u2026`}function fz(J,Y){let Z=J.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,32),f=Y.slice(-6).toLowerCase();return`kobe/${Z||"task"}-${f}`}var wW;var hW=S(()=>{wW=["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 XB{activeSlugs;random;pool;pendingByRepo=new Map;chain=Promise.resolve();constructor(J,Y={}){this.activeSlugs=J;if(this.random=Y.random??Math.random,this.pool=Y.pool??wW,this.pool.length===0)throw Error("SlugAllocator: animal pool cannot be empty")}async allocate(J){let Y=this.chain,Z;this.chain=new Promise((f)=>{Z=f}),await Y;try{return await this.pickLocked(J)}finally{Z()}}commit(J,Y){this.deletePending(J,Y)}cancel(J,Y){this.deletePending(J,Y)}async pickLocked(J){let Y=await this.occupiedSlugs(J),Z=this.pool.filter((X)=>!Y.has(X));if(Z.length>0){let X=Z[Math.floor(this.random()*Z.length)];return this.addPending(J,X),X}let f=this.pool[Math.floor(this.random()*this.pool.length)];for(let X=2;;X++){let G=`${f}-v${X}`;if(!Y.has(G))return this.addPending(J,G),G}}async occupiedSlugs(J){let Y=new Set(this.pendingByRepo.get(J)??[]);for(let Z of this.activeSlugs(J))if(Z)Y.add(Z);for(let Z of await jW(J))Y.add(Z);return Y}addPending(J,Y){let Z=this.pendingByRepo.get(J);if(!Z)Z=new Set,this.pendingByRepo.set(J,Z);Z.add(Y)}deletePending(J,Y){let Z=this.pendingByRepo.get(J);if(!Z)return;if(Z.delete(Y),Z.size===0)this.pendingByRepo.delete(J)}}var PW=S(()=>{hW();iq()});var cW={};Q1(cW,{PLACEHOLDER_TASK_TITLE:()=>jY,Orchestrator:()=>Xz});import{realpathSync as tD}from"fs";import{basename as eD,resolve as JM}from"path";function vW(J){return bY(J)?.basePath??J}class Xz{store;worktrees;slugs;tasksAcc;setTasks;activeTaskAcc;setActiveTaskSig;unsubscribeStore;worktreeLocks=new Map;mainTaskLocks=new Map;constructor(J){this.store=J.store,this.worktrees=J.worktrees,this.slugs=new XB((G)=>this.store.list().filter((Q)=>Q.repo===G&&Q.kind!=="main").map((Q)=>{return Q.worktreePath.match(/([^/\\]+)[/\\]*$/)?.[1]??""}).filter((Q)=>Q.length>0));let[Y,Z]=p(this.store.list());this.tasksAcc=Y,this.setTasks=(G)=>Z(()=>G);let[f,X]=p(null);this.activeTaskAcc=f,this.setActiveTaskSig=(G)=>X(()=>G),this.unsubscribeStore=this.store.subscribe((G)=>{this.setTasks(G.slice())})}async init(){}activeTaskSignal(){return this.activeTaskAcc}async setActiveTask(J){let Y=J===null?null:String(J);if(this.setActiveTaskSig(Y),Y&&this.store.get(Y))await this.store.update(Y,{})}tasksSignal(){return this.tasksAcc}subscribeTasks(J){return this.store.subscribe(J)}dispose(){this.unsubscribeStore()}listTasks(){return this.store.list()}getTask(J){return this.store.get(J)}async createTask(J){if(!J.repo)throw Error("createTask: repo is required");let Y=(J.title??jY).trim()||jY,Z=await this.store.create({repo:J.repo,title:Y,branch:J.branch??"",worktreePath:"",status:"backlog",kind:"task",vendor:J.vendor??k1,...J.modelEffort?{modelEffort:J.modelEffort}:{}});if(J.baseRef)this.pendingBaseRefs.set(Z.id,J.baseRef);return Z}async ensureMainTask(J){let{repo:Y,key:Z}=mW(J),f=this.store.list().find((Q)=>Q.kind==="main"&&mW(Q.repo).key===Z);if(f)return f;let X=this.mainTaskLocks.get(Z);if(X)return X;let G=(async()=>{return await this.store.create({repo:Y,title:YM(Y),branch:"",worktreePath:vW(Y),status:"backlog",kind:"main",vendor:k1})})();this.mainTaskLocks.set(Z,G);try{return await G}finally{this.mainTaskLocks.delete(Z)}}async ensureWorktree(J){let Y=this.requireTask(J);if(Y.kind==="main")return vW(Y.repo);if(Y.worktreePath)return Y.worktreePath;let Z=this.worktreeLocks.get(Y.id);if(Z)return await Z,this.requireTask(Y.id).worktreePath;let f=(async()=>{let G=await this.slugs.allocate(Y.repo);try{let Q=Y.branch||fz(Y.title,Y.id),q=this.pendingBaseRefs.get(Y.id),B=await this.worktrees.createForTask({repo:Y.repo,slug:G,branch:Q,baseRef:q});this.slugs.commit(Y.repo,G),this.pendingBaseRefs.delete(Y.id),await this.store.update(Y.id,{worktreePath:B.path,branch:Q})}catch(Q){throw this.slugs.cancel(Y.repo,G),Q}})();this.worktreeLocks.set(Y.id,f);try{await f}finally{this.worktreeLocks.delete(Y.id)}return this.requireTask(Y.id).worktreePath}async setTitle(J,Y){let Z=Y.trim();if(!Z)throw Error("setTitle: title is required (empty or whitespace-only rejected)");let f=this.requireTask(J);if(f.title===Z)return;await this.store.update(f.id,{title:Z}),await this.followBranchToTitle(f,Z)}async followBranchToTitle(J,Y){if(J.kind==="main"||!J.worktreePath)return;if(J.branch!==fz(jY,J.id))return;let Z=fz(Y,J.id);if(Z===J.branch)return;try{await this.setBranch(J.id,Z)}catch(f){console.error(`[kobe] follow-branch-to-title failed for ${J.id}:`,f)}}async setBranch(J,Y){let Z=Y.trim();if(!Z)throw Error("setBranch: branch is required (empty or whitespace-only rejected)");let f=this.requireTask(J);if(f.kind==="main")throw Error("setBranch: a main task tracks the repo's own branch; rename it with git directly");if(f.branch===Z)return;if(f.worktreePath)await this.worktrees.renameBranch(f.worktreePath,f.branch,Z);await this.store.update(f.id,{branch:Z})}async setVendor(J,Y){let Z=this.requireTask(J);if(Z.vendor===Y)return;await this.store.update(Z.id,{vendor:Y})}async setPinned(J,Y){let Z=this.requireTask(J);if(Z.kind==="main")return;let f=Y??!Z.pinned;if((Z.pinned??!1)===f)return;await this.store.update(Z.id,{pinned:f})}async moveTask(J,Y){let Z=this.requireTask(J);if(Z.kind==="main")return;let f=this.store.list().filter((X)=>(X.kind??"task")!=="main"&&X.archived===Z.archived&&(X.pinned??!1)===(Z.pinned??!1)).map((X)=>String(X.id));await this.store.move(Z.id,Y,f)}async setArchived(J,Y){let Z=this.requireTask(J);if(Z.kind==="main")return;let f=Y??!Z.archived;if(Z.archived===f)return;await this.store.update(Z.id,{archived:f})}async reorderTasks(J){if(J.length===0)return;for(let Y of J){if(this.requireTask(Y.taskId).kind==="main")throw Error(`cannot reorder a main task: ${Y.taskId}`);if(!Number.isFinite(Y.position))throw Error(`position must be a finite number: ${Y.taskId}`)}await this.store.reorder(J.map((Y)=>({id:Y.taskId,position:Y.position})))}async setStatus(J,Y){let Z=this.requireTask(J);if(Z.status===Y)return;if(Z.status==="done"&&Y==="error"||Z.status==="error"&&Y==="done")throw new sq(Z.status,Y,Z.id);await this.store.update(Z.id,{status:Y})}async deleteTask(J,Y){let Z=this.store.get(J);if(!Z)return;if(Z.kind==="main")throw new eq;let f=Y?.force===!0;if(Z.worktreePath){if(!f){let X=!1;try{X=await this.worktrees.isDirty(Z.worktreePath)}catch{}if(X)throw new YB(Z.id)}try{await this.worktrees.remove(Z.worktreePath,{force:f})}catch(X){throw new ZB(Z.id,X)}}await this.store.remove(Z.id),this.pendingBaseRefs.delete(Z.id),this.worktreeLocks.delete(Z.id)}async discoverAdoptableWorktrees(J){if(!J)throw Error("discoverAdoptableWorktrees: repo is required");let Y=await this.worktrees.listAll(J),Z=new Set(this.store.list().filter((f)=>f.worktreePath).map((f)=>Sf(f.worktreePath)));return Y.filter((f)=>!Z.has(Sf(f.path)))}async adoptWorktree(J){if(!J.repo)throw Error("adoptWorktree: repo is required");if(!J.worktreePath)throw Error("adoptWorktree: worktreePath is required");let Y=Sf(J.worktreePath),Z=this.adoptLocks.get(Y);if(Z)return Z;let f=this.adoptWorktreeLocked(J,Y);this.adoptLocks.set(Y,f);try{return await f}finally{this.adoptLocks.delete(Y)}}async adoptWorktreeLocked(J,Y){let Z=this.store.list().find((q)=>q.worktreePath&&Sf(q.worktreePath)===Y);if(Z){if(J.ifExists==="return")return Z;throw Error(`adoptWorktree: ${J.worktreePath} is already adopted as a task`)}let X=(await this.worktrees.listAll(J.repo)).find((q)=>Sf(q.path)===Y);if(!X)throw Error(`adoptWorktree: ${J.worktreePath} is not an adoptable git worktree of ${J.repo} (unknown, detached, or the main checkout)`);let G=J.branch?.trim()||X.branch,Q=(J.title??eD(X.path)).trim()||jY;return this.store.create({repo:J.repo,title:Q,branch:G,worktreePath:X.path,status:"backlog",kind:"task",vendor:J.vendor??k1})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(J){let Y=this.store.get(J);if(!Y)throw new tq(String(J));return Y}}function YM(J){let Y=J.split(/[/\\]/).filter(Boolean);return Y.length>0?Y[Y.length-1]??J:J}function mW(J){let Y=IY(J);return{repo:Y,key:xJ(Y)?Y:Sf(Y)}}function Sf(J){try{return tD(J)}catch{return JM(J)}}var jY="(new task)";var TX=S(()=>{q1();A1();RJ();fB();PW()});function Gz(J){return J.remoteVersion>=J.localMin&&J.localVersion>=J.remoteMin}function dW(J,Y){if(!J)return!1;return J!==Y}function fM(J){return typeof J==="string"&&ZM.has(J)}function nW(J){if(!Array.isArray(J))return null;let Y=new Set;for(let Z of J)if(fM(Z))Y.add(Z);return Y.size>0?Y:null}function rJ(J){return{id:J.id,title:J.title,repo:J.repo,branch:J.branch,worktreePath:J.worktreePath,kind:J.kind??"task",status:J.status,archived:J.archived,pinned:J.pinned??!1,vendor:J.vendor,prStatus:J.prStatus,position:J.position,modelEffort:J.modelEffort,createdAt:J.createdAt,updatedAt:J.updatedAt}}function EX(J){return`${JSON.stringify(J)}
16
- `}var wJ=3,ZZ=2,GB,ZM;var vZ=S(()=>{GB=["task.snapshot","issue.snapshot","active-task","update","engine-state","ui-prefs","keybindings","task.jobs","worktree.changes","session.deliver"],ZM=new Set(GB)});import{createHash as XM}from"crypto";import{homedir as zz,tmpdir as GM}from"os";import{join as mZ}from"path";function zM(J){return XM("sha1").update(J).digest("hex").slice(0,8)}function QB(J,Y,Z,f){if(Buffer.byteLength(J,"utf8")<=zB)return J;let X=zM(Y),G=f===void 0?"":`-${f}`,Q=mZ(GM(),`kobe-${X}-${Z}${G}.sock`);if(Buffer.byteLength(Q,"utf8")<=zB)return Q;throw Error(`kobe socket path exceeds ${zB} bytes even after fallback: ${Q}`)}function WY(J){let Y=process.env.KOBE_DAEMON_SOCKET_PATH;if(Y&&Y.length>0)return Y;let Z=J??process.env.KOBE_HOME_DIR;if(Z&&Z.length>0)return QB(mZ(Z,".kobe","daemon.sock"),Z,"daemon");let f=process.env.XDG_RUNTIME_DIR;if(f&&f.length>0)return QB(mZ(f,"kobe.sock"),f,"daemon");let X=zz();return QB(mZ(X,".kobe","daemon.sock"),X,"daemon")}function EY(J=process.env.KOBE_HOME_DIR??zz()){let Y=process.env.KOBE_DAEMON_PID_PATH;if(Y&&Y.length>0)return Y;return mZ(J,".kobe","daemon.pid")}function Qz(J=process.env.KOBE_HOME_DIR??zz()){return mZ(J,".kobe","daemon.log")}function iW(J=process.env.KOBE_HOME_DIR??zz()){return mZ(J,".kobe","client.log")}var zB=100;var yf=()=>{};import{appendFile as lW,mkdir as QM}from"fs/promises";import{dirname as qM}from"path";function qz(J){pW=J}function BM(J){if(J instanceof Error)return{message:J.message,stack:J.stack};let Y;try{Y=typeof J==="string"?J:JSON.stringify(J)}catch{Y=String(J)}return{message:Y}}function _W(J,Y,Z=new Date){return`[${Z.toISOString()}] client ${pW} [${J}] pid=${process.pid}: ${Y}
17
- `}function HM(){if($W)return;$W=!0;try{process.stderr.write(`[kobe] client log write failed; continuing without it
18
- `)}catch{}}function rW(J){let Y=iW();aW=aW.then(async()=>{try{await lW(Y,J)}catch(Z){if(Z?.code==="ENOENT")await QM(qM(Y),{recursive:!0}),await lW(Y,J);else throw Z}}).catch(()=>HM())}function uY(J,Y){rW(_W(J,Y))}function fZ(J,Y){let Z=BM(Y);rW(_W(J,Z.stack??Z.message))}var pW="client",$W=!1,aW;var cZ=S(()=>{yf();aW=Promise.resolve()});import{connect as jM}from"net";import{StringDecoder as WM}from"string_decoder";class hJ{socketPath;socket=null;buffer="";nextId=1;pending=new Map;handlers=new Map;lifecycleHandlers=new Map;connecting=null;disposed=!1;constructor(J){this.socketPath=J}connect(){if(this.socket)return Promise.resolve();if(this.disposed)return Promise.reject(Error("daemon client disposed"));if(this.connecting)return this.connecting;let J=this.openSocket();this.connecting=J;let Y=()=>{if(this.connecting===J)this.connecting=null};return J.then(Y,Y),J}get isDisposed(){return this.disposed}close(){this.disposed=!0,this.socket?.end(),this.socket=null,this.failPending()}forceDisconnect(){let J=this.socket;if(!J)return;this.socket=null,J.destroy(),this.failPending()}failPending(){if(this.pending.size===0)return;let J=Error("daemon connection closed");for(let Y of this.pending.values())Y.reject(J);this.pending.clear()}on(J,Y){let Z=this.handlers.get(J);if(!Z)Z=new Set,this.handlers.set(J,Z);return Z.add(Y),()=>{if(Z?.delete(Y),Z?.size===0)this.handlers.delete(J)}}onChannel(J,Y){return this.on(J,(Z)=>Y(Z.payload))}subscribe(J={}){let Y={};if(J.channels)Y.channels=J.channels;if(J.role)Y.role=J.role;return this.request("subscribe",Y)}onLifecycle(J,Y){let Z=this.lifecycleHandlers.get(J);if(!Z)Z=new Set,this.lifecycleHandlers.set(J,Z);return Z.add(Y),()=>{if(Z?.delete(Y),Z?.size===0)this.lifecycleHandlers.delete(J)}}async request(J,Y){await this.connect();let Z=this.socket;if(!Z)throw Error("daemon connection is not open");let f=String(this.nextId++),X=new Promise((G,Q)=>{this.pending.set(f,{resolve:(q)=>G(q),reject:Q})});return Z.write(EX({type:"request",id:f,name:J,payload:Y})),X}openSocket(){return new Promise((J,Y)=>{let Z=jM(this.socketPath);this.socket=Z;let f=()=>{Z.off("error",X),J()},X=(Q)=>{if(Z.off("connect",f),this.socket===Z)this.socket=null;Y(Q)};Z.once("connect",f),Z.once("error",X);let G=new WM("utf8");this.buffer="",Z.on("data",(Q)=>this.onData(G.write(Q))),Z.on("close",()=>this.onSocketClose(Z))})}onSocketClose(J){if(this.socket!==J)return;this.socket=null,this.failPending(),this.emitLifecycle("close")}emitLifecycle(J){for(let Y of this.lifecycleHandlers.get(J)??[])try{Y()}catch(Z){console.error(`[kobe] lifecycle handler for "${J}" threw:`,Z)}}onData(J){this.buffer+=J;let Y=this.buffer.indexOf(`
13
+ `});function Q9(J){return typeof J==="string"&&yD.includes(J)}var kG=(J)=>J,k1="claude",yD;var SJ=S(()=>{yD=["backlog","in_progress","in_review","done","canceled","error"]});function SD(J,Y){let Z="",X=J;for(let G=Y-1;G>=0;G--){let z=X%32;Z="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[z]+Z,X=(X-z)/32}return Z}function B9(J){let Y=new Uint8Array(J);crypto.getRandomValues(Y);let Z=Array(J);for(let X=0;X<J;X++)Z[X]=(Y[X]??0)&31;return Z}function kD(J){for(let Y=J.length-1;Y>=0;Y--){let Z=J[Y]??0;if(Z<31)return J[Y]=Z+1,!0;J[Y]=0}return!1}function ID(J){let Y="";for(let Z of J)Y+="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Z]??"0";return Y}function j9(J=Date.now()){let Y;if(J===f9){let Z=q9.slice();if(!kD(Z))Y=B9(16);else Y=Z}else Y=B9(16);return f9=J,q9=Y,SD(J,10)+ID(Y)}var f9=-1,q9;var H9=S(()=>{q9=Array(16).fill(0)});var aq={};q1(aq,{TaskIndexStore:()=>yX});import{mkdir as ND,open as bD,readFile as TD,rename as ED,unlink as W9}from"fs/promises";import{homedir as uD}from"os";import{dirname as xD,join as V9}from"path";class yX{homeDir;kobeDir;path;tmpPath;cache={version:YZ,tasks:[]};loaded=!1;listeners=new Set;saveChain=Promise.resolve();constructor(J={}){this.homeDir=J.homeDir??uD(),this.kobeDir=V9(this.homeDir,".kobe"),this.path=V9(this.kobeDir,"tasks.json"),this.tmpPath=`${this.path}.tmp`}subscribe(J){if(this.listeners.add(J),this.loaded)try{J(this.cache.tasks.slice())}catch(Y){console.error("[kobe TaskIndexStore] listener threw on subscribe:",Y)}return()=>{this.listeners.delete(J)}}get filePath(){return this.path}get stateDir(){return this.kobeDir}async load(){let J;try{J=await TD(this.path,"utf8")}catch(Z){if(Z.code==="ENOENT")return this.cache={version:YZ,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot();throw Z}let Y;try{Y=JSON.parse(J)}catch(Z){return console.warn(`[kobe] tasks.json at ${this.path} is corrupted (${Z.message}); recovering with empty index. The stale file is left in place.`),this.cache={version:YZ,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot()}return this.cache=wD(Y,this.path),this.loaded=!0,this.notifyListeners(),this.snapshot()}async save(){this.assertLoaded();let J=this.saveChain.then(()=>this.doSave());return this.saveChain=J.catch(()=>{}),J}async doSave(){await ND(xD(this.path),{recursive:!0});let J=this.snapshot(),Y=`${JSON.stringify(J,null,2)}
14
+ `,Z=await bD(this.tmpPath,"w",420);try{await Z.writeFile(Y,"utf8"),await Z.sync()}finally{await Z.close()}await ED(this.tmpPath,this.path)}get(J){return this.assertLoaded(),this.cache.tasks.find((Y)=>Y.id===J)}list(){return this.assertLoaded(),this.cache.tasks.slice()}async create(J){this.assertLoaded();let Y=new Date().toISOString(),Z={archived:!1,vendor:J.vendor??k1,...J,id:kG(j9()),createdAt:Y,updatedAt:Y};return this.cache.tasks.push(Z),await this.save(),this.notifyListeners(),Z}async update(J,Y){this.assertLoaded();let Z=this.cache.tasks.findIndex((B)=>B.id===J);if(Z<0)throw Error(`task not found: ${J}`);let X=this.cache.tasks[Z];if(!X)throw Error(`task not found: ${J}`);let{id:G,createdAt:z,...f}=Y,q={...X,...f,id:X.id,createdAt:X.createdAt,updatedAt:new Date().toISOString()};return this.cache.tasks[Z]=q,await this.save(),this.notifyListeners(),q}async move(J,Y,Z){this.assertLoaded();let X=this.cache.tasks.find((L)=>L.id===J);if(!X)throw Error(`task not found: ${J}`);let G=Z?.length?Z:this.cache.tasks.map((L)=>L.id),z=G.indexOf(String(J));if(z<0)throw Error(`task not movable in current group: ${J}`);let f=G[z+Y];if(!f)return X;let q=this.cache.tasks.findIndex((L)=>L.id===J),B=this.cache.tasks.findIndex((L)=>L.id===f);if(q<0||B<0||q===B)return X;let[j]=this.cache.tasks.splice(q,1);if(!j)return X;let K=q<B?B-1:B,H=Y>0?K+1:K,U={...j,updatedAt:new Date().toISOString()};return this.cache.tasks.splice(H,0,U),await this.save(),this.notifyListeners(),U}async reorder(J){this.assertLoaded();let Y=J.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}}),Z=!1,X=new Map;for(let{idx:G,position:z}of Y){let f=this.cache.tasks[G];if(!f||f.position===z)continue;if(!X.has(G))X.set(G,f);this.cache.tasks[G]={...f,position:z},Z=!0}if(!Z)return;try{await this.save()}catch(G){for(let[z,f]of X)this.cache.tasks[z]=f;throw G}this.notifyListeners()}async archive(J,Y="done"){return this.update(J,{status:Y})}async remove(J){this.assertLoaded();let Y=this.cache.tasks.findIndex((Z)=>Z.id===J);if(Y<0)return;this.cache.tasks.splice(Y,1),await this.save(),this.notifyListeners()}async _unlinkForTests(){try{await W9(this.path)}catch(J){if(J.code!=="ENOENT")throw J}try{await W9(this.tmpPath)}catch(J){if(J.code!=="ENOENT")throw J}this.cache={version:YZ,tasks:[]},this.loaded=!1}assertLoaded(){if(!this.loaded)throw Error("TaskIndexStore: call load() before any other method")}snapshot(){return{version:YZ,tasks:this.cache.tasks.slice()}}notifyListeners(){if(this.listeners.size===0)return;let J=this.cache.tasks.slice();for(let Y of this.listeners)try{Y(J)}catch(Z){console.error("[kobe TaskIndexStore] listener threw on notify:",Z)}}}function wD(J,Y){if(!J||typeof J!=="object"||Array.isArray(J))return console.warn(`[kobe] tasks.json at ${Y} is not an object; recovering with empty index.`),{version:YZ,tasks:[]};let Z=J,X=Z.version;if(X!==void 0&&X!==1&&X!==2&&X!==3)return console.warn(`[kobe] tasks.json at ${Y} has unsupported version=${String(X)}; recovering with empty index.`),{version:YZ,tasks:[]};let G=Array.isArray(Z.tasks)?Z.tasks:[],z=[];for(let f of G){let q=hD(f);if(q)z.push(q);else console.warn(`[kobe] dropping malformed task entry from ${Y}: ${JSON.stringify(f)}`)}return{version:YZ,tasks:z}}function hD(J){if(!J||typeof J!=="object")return null;let Y=J;if(typeof Y.id!=="string"||typeof Y.title!=="string"||typeof Y.repo!=="string"||typeof Y.branch!=="string"||typeof Y.worktreePath!=="string"||typeof Y.status!=="string"||typeof Y.createdAt!=="string"||typeof Y.updatedAt!=="string")return null;if(!dD(Y.status))return null;let Z=typeof Y.archived==="boolean"?Y.archived:!1,X=Y.kind==="main"?"main":"task",G=X==="main"?Y.status==="in_progress"||Y.status==="done"?"backlog":Y.status:Y.status==="done"&&!Z?"in_progress":Y.status;return{id:kG(Y.id),title:Y.title,repo:Y.repo,branch:Y.branch,worktreePath:Y.worktreePath,status:G,archived:Z,pinned:typeof Y.pinned==="boolean"?Y.pinned:!1,kind:X,vendor:wZ(typeof Y.vendor==="string"?Y.vendor:void 0),prStatus:PD(Y.prStatus),...typeof Y.position==="number"&&Number.isFinite(Y.position)?{position:Y.position}:{},...typeof Y.modelEffort==="string"&&Y.modelEffort.length>0?{modelEffort:Y.modelEffort}:{},createdAt:Y.createdAt,updatedAt:Y.updatedAt}}function PD(J){if(!J||typeof J!=="object"||Array.isArray(J))return;let Y=J;if(!vD(Y.provider)||!mD(Y.lifecycle)||!cD(Y.checkState))return;return{provider:Y.provider,lifecycle:Y.lifecycle,checkState:Y.checkState,...typeof Y.number==="number"&&Number.isFinite(Y.number)?{number:Y.number}:{},...typeof Y.url==="string"?{url:Y.url}:{},...typeof Y.title==="string"?{title:Y.title}:{},...typeof Y.baseRef==="string"?{baseRef:Y.baseRef}:{},...typeof Y.headRef==="string"?{headRef:Y.headRef}:{},...typeof Y.reviewDecision==="string"?{reviewDecision:Y.reviewDecision}:{},...typeof Y.mergeable==="string"?{mergeable:Y.mergeable}:{},...typeof Y.lastCheckedAt==="string"?{lastCheckedAt:Y.lastCheckedAt}:{},...typeof Y.lastError==="string"?{lastError:Y.lastError}:{}}}function vD(J){return J==="github"||J==="gitlab"||J==="bitbucket"||J==="unknown"}function mD(J){return J==="creating"||J==="open"||J==="ready_to_merge"||J==="merged"||J==="closed"||J==="unknown"}function cD(J){return J==="none"||J==="pending"||J==="passing"||J==="failing"||J==="unknown"}function dD(J){return J==="backlog"||J==="in_progress"||J==="in_review"||J==="done"||J==="canceled"||J==="error"}var YZ=3;var IG=S(()=>{SJ();BJ();H9()});function K9(J){let Y=J.auth,Z=Y.kind==="key"?{kind:"key",keyPath:Y.keyPath}:{kind:"password",getPassword:()=>$z(Y.keychainRef)};return{host:J.host,user:J.user,port:J.port,auth:Z,controlPath:cz(J.host,J.user,J.port)}}function SX(J){let Y=wY(J);if(!Y)return new lz;return new CX(K9(Y))}function hY(J){for(let Y of Object.values(lq()))if(J===Y.basePath||J.startsWith(`${Y.basePath}/`))return new CX(K9(Y));return new lz}function U9(J){return J&&HJ(J)?J:void 0}function pz(J){let Y=hY(J);return Y.isRemote||Y.existsSync(J)}function I1(J){return hY(J).isRemote?DY():J}var rJ=S(()=>{n1();O1();wq();vq()});var _z;var L9=S(()=>{_z=class _z extends Error{args;cwd;exitCode;stdout;stderr;constructor(J,Y,Z){super(`git ${J.join(" ")} (cwd=${Y}) exited with code ${Z.exitCode}: ${Z.stderr.trim()||Z.stdout.trim()}`);this.name="GitCommandError",this.args=J,this.cwd=Y,this.exitCode=Z.exitCode,this.stdout=Z.stdout,this.stderr=Z.stderr}}});import{createHash as nD}from"crypto";import M9 from"fs";import kJ from"path";function F9(J){if(!kJ.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return kJ.join(o1(),iD,_D(J))}function O9(J){if(!kJ.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[F9(J),...aD.map((Y)=>kJ.join(J,Y))]}function A9(J,Y){if(!Y||/[/\\\0]/.test(Y))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(Y)}`);return kJ.join(F9(J),Y)}async function R9(J){if(HJ(J)){let Z=wY(J)?.basePath;if(!Z)return[];return SX(J).readdir(g9(Z))}let Y=new Set;for(let Z of O9(J))try{for(let X of M9.readdirSync(Z,{withFileTypes:!0}))if(X.isDirectory())Y.add(X.name)}catch{}return[...Y]}function pq(J,Y){if(!kJ.isAbsolute(J)||!kJ.isAbsolute(Y))return null;let Z=D9(Y);for(let X of O9(J)){let G=D9(X),z=kJ.relative(G,Z);if(z!==""&&!z.startsWith("..")&&!kJ.isAbsolute(z))return X}return null}function C9(J,Y){return pq(J,Y)!==null}function g9(J){return`${pD(J)}/.kobe/worktrees`}function y9(J,Y){if(!Y||/[/\\\0]/.test(Y))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(Y)}`);return`${g9(J)}/${Y}`}function pD(J){return J.length>1&&J.endsWith("/")?J.replace(/\/+$/,""):J}function D9(J){try{return M9.realpathSync(J)}catch{return kJ.resolve(J)}}function _D(J){let Z=(kJ.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",X=nD("sha1").update(kJ.resolve(J)).digest("hex").slice(0,12);return`${Z}-${X}`}var iD="worktrees",lD=".kobe/worktrees",$D=".claude/worktrees",aD;var _q=S(()=>{n1();rJ();O1();aD=[lD,$D]});var I9={};q1(I9,{GitWorktreeManager:()=>rz});import k9 from"fs";import oJ from"path";class rz{execDeps;constructor(J=rD){this.execDeps=J}ctxFor(J){let Y=this.execDeps.remoteBasePath(J);return Y?{exec:this.execDeps.execForRepo(J),dir:Y,remote:!0}:{exec:this.execDeps.execForRepo(J),dir:J,remote:!1}}async runGit(J,Y,Z){if(!Z.cwd)throw Error("runGit(): cwd is required; refusing to inherit from process.cwd()");let X=await J.run(["git",...Y],{cwd:Z.cwd,env:Z.env}),G={stdout:X.stdout,stderr:X.stderr,exitCode:X.exitCode};if(G.exitCode!==0&&!Z.allowFail)throw new _z(Y,Z.cwd,G);return G}async create(J,Y,Z,X){let G=this.ctxFor(J);if(ZZ("repo",G.dir),ZZ("path",Z),!Y)throw Error("create(): branch must be a non-empty string");if(await G.exec.exists(Z)){let B=await this.tryDescribe(G,Z);if(B){if(B.branch!==Y)throw Error(`worktree at ${Z} is on branch '${B.branch}', refusing to hijack to '${Y}'`);return B}throw Error(`create(): ${Z} exists but is not a registered git worktree`)}await G.exec.mkdirp(oJ.dirname(Z));let f=await this.branchExists(G,Y)?["worktree","add",Z,Y]:X?["worktree","add","-b",Y,Z,X]:["worktree","add","-b",Y,Z];await this.runGit(G.exec,f,{cwd:G.dir});let q=await this.tryDescribe(G,Z);if(!q)throw Error(`create(): git reported success but ${Z} is not a worktree`);if(q.branch!==Y)throw Error(`create(): post-condition failed \u2014 expected branch '${Y}' at ${Z}, got '${q.branch}'`);return q}async createForTask(J){let Y=this.execDeps.remoteBasePath(J.repo),Z=Y?y9(Y,J.slug):A9(J.repo,J.slug);return this.create(J.repo,J.branch,Z,J.baseRef)}async remove(J,Y){ZZ("path",J);let Z=this.execDeps.execForPath(J),X=Y?.force===!0;if(!await Z.exists(J)){let f=await this.findRepoFor(Z,J);if(f)await this.runGit(Z,["worktree","prune"],{cwd:f,allowFail:!0});return}let G=await this.findRepoFor(Z,J);if(!G)throw Error(`remove(): ${J} is not a git worktree`);if(!X){if(await this.isDirty(J))throw Error(`remove(): refusing to remove dirty worktree at ${J} (pass { force: true } to override)`)}let z=X?["worktree","remove","--force",J]:["worktree","remove",J];await this.runGit(Z,z,{cwd:G}),await this.runGit(Z,["worktree","prune"],{cwd:G,allowFail:!0})}async list(J){let Y=this.ctxFor(J);ZZ("repo",Y.dir);let Z=await this.runGit(Y.exec,["worktree","list","--porcelain"],{cwd:Y.dir}),X=rq(Z.stdout),G=[];for(let z of X){if(!z.path)continue;let f=Y.remote?S9(Y.dir,z.path):pq(J,z.path);if(!f)continue;if(!z.branch||z.detached)continue;let q=NG(f),B=NG(z.path),j=oJ.relative(q,B),K=oJ.join(f,j),H=await this.isDirty(z.path);G.push({path:K,branch:z.branch,head:z.head??"",dirty:H})}return G}async listAll(J){let Y=this.ctxFor(J);ZZ("repo",Y.dir);let Z=await this.runGit(Y.exec,["worktree","list","--porcelain"],{cwd:Y.dir}),X=rq(Z.stdout),G=Y.remote?Y.dir:NG(Y.dir),z=[];for(let f of X){if(!f.path)continue;if(f.bare)continue;if(!f.branch||f.detached)continue;if((Y.remote?f.path:NG(f.path))===G)continue;let q=await this.isDirty(f.path);z.push({path:f.path,branch:f.branch,head:f.head??"",dirty:q,kobeManaged:Y.remote?S9(Y.dir,f.path)!==null:C9(J,f.path),lastActivityMs:await this.lastActivityMs(Y.exec,f.path)})}return z.sort((f,q)=>q.lastActivityMs-f.lastActivityMs),z}async lastActivityMs(J,Y){try{let Z=await this.runGit(J,["log","-1","--format=%ct"],{cwd:Y}),X=Number.parseInt(Z.stdout.trim(),10);if(Number.isFinite(X)&&X>0)return X*1000}catch{}if(!J.isRemote)try{return k9.statSync(Y).mtimeMs}catch{}return 0}async isDirty(J){ZZ("path",J);let Y=this.execDeps.execForPath(J);return(await this.runGit(Y,["status","--porcelain"],{cwd:J})).stdout.length>0}async currentBranch(J){ZZ("path",J);let Y=this.execDeps.execForPath(J),X=(await this.runGit(Y,["rev-parse","--abbrev-ref","HEAD"],{cwd:J})).stdout.trim();if(!X||X==="HEAD")throw Error(`currentBranch(): ${J} is in detached-HEAD state`);return X}async renameBranch(J,Y,Z){if(ZZ("path",J),Y===Z)return;let X=this.execDeps.execForPath(J),G=await this.findRepoFor(X,J);if(!G)throw Error(`renameBranch(): ${J} is not a git worktree`);await this.runGit(X,["branch","-m",Y,Z],{cwd:G})}async tryDescribe(J,Y){let Z=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),X=rq(Z.stdout),G=(q)=>J.remote?q:NG(q),z=G(Y),f=X.find((q)=>q.path&&G(q.path)===z);if(!f||!f.path||!f.branch||f.detached)return null;return{path:Y,branch:f.branch,head:f.head??"",dirty:await this.isDirty(f.path)}}async branchExists(J,Y){let Z=`refs/heads/${Y}`;return(await this.runGit(J.exec,["show-ref","--verify","--quiet",Z],{cwd:J.dir,allowFail:!0})).exitCode===0}async findRepoFor(J,Y){try{let Z=await this.runGit(J,["rev-parse","--git-common-dir"],{cwd:Y,allowFail:!0});if(Z.exitCode!==0)return null;let X=Z.stdout.trim();if(!X)return null;let G=oJ.isAbsolute(X)?X:oJ.resolve(Y,X);return oJ.basename(G)===".git"?oJ.dirname(G):G}catch(Z){if(Z instanceof _z)return null;throw Z}}}function rq(J){let Y=[],Z=null;for(let X of J.split(`
15
+ `)){let G=X.replace(/\r$/,"");if(G===""){if(Z)Y.push(Z);Z=null;continue}if(!Z)Z={};if(G.startsWith("worktree "))Z.path=G.slice(9);else if(G.startsWith("HEAD "))Z.head=G.slice(5);else if(G.startsWith("branch ")){let z=G.slice(7);Z.branch=z.startsWith("refs/heads/")?z.slice(11):z}else if(G==="detached")Z.detached=!0;else if(G==="bare")Z.bare=!0}if(Z)Y.push(Z);return Y}function S9(J,Y){let Z=`${J.replace(/\/+$/,"")}/.kobe/worktrees`;return Y===Z||Y.startsWith(`${Z}/`)?Z:null}function ZZ(J,Y){if(!Y||!oJ.isAbsolute(Y))throw Error(`${J} must be an absolute path, got: ${JSON.stringify(Y)}`)}function NG(J){try{return k9.realpathSync(J)}catch{return oJ.resolve(J)}}var rD;var oq=S(()=>{rJ();O1();L9();_q();rD={execForRepo:SX,execForPath:hY,remoteBasePath(J){return wY(J)?.basePath??null}}});function N9(J){let Y=String(J),Z=Y.length-1;return x1.context.id+(Z?String.fromCharCode(96+Z):"")+Y}function eq(J){x1.context=J}function oD(){return{...x1.context,id:x1.getNextContextId(),count:0}}function dZ(J,Y){let Z=W1,X=l0,G=J.length===0,z=Y===void 0?X:Y,f=G?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:z?z.context:null,owner:z},q=G?()=>J(()=>{throw Error("Dispose method must be an explicit argument to createRoot function")}):()=>J(()=>l1(()=>XZ(f)));tJ.afterCreateOwner&&tJ.afterCreateOwner(f),l0=f,W1=null;try{return UJ(q,!0)}finally{W1=Z,l0=X}}function p(J,Y){Y=Y?Object.assign({},tz,Y):tz;let Z={value:J,observers:null,observerSlots:null,comparator:Y.equals||void 0};{if(Y.name)Z.name=Y.name;if(Y.internal)Z.internal=!0;else if(v9(Z),tJ.afterCreateSignal)tJ.afterCreateSignal(Z)}let X=(G)=>{if(typeof G==="function")if(B0&&B0.running&&B0.sources.has(Z))G=G(Z.tValue);else G=G(Z.value);return YB(Z,G)};return[m9.bind(Z),X]}function T9(J,Y,Z){let X=uG(J,Y,!0,IJ,Z);if(IX&&B0&&B0.running)d1.push(X);else nZ(X)}function MY(J,Y,Z){let X=uG(J,Y,!1,IJ,Z);if(IX&&B0&&B0.running)d1.push(X);else nZ(X)}function s0(J,Y,Z){P9=qM;let X=uG(J,Y,!1,IJ,Z),G=TG&&NJ(TG);if(G)X.suspense=G;if(!Z||!Z.render)X.user=!0;GJ?GJ.push(X):nZ(X)}function U0(J,Y,Z){Z=Z?Object.assign({},tz,Z):tz;let X=uG(J,Y,!0,0,Z);if(X.observers=null,X.observerSlots=null,X.comparator=Z.equals||void 0,IX&&B0&&B0.running)X.tState=IJ,d1.push(X);else nZ(X);return m9.bind(X)}function ZM(J){return J&&typeof J==="object"&&"then"in J}function ZQ(J,Y,Z){let X,G,z;if(typeof Y==="function")X=J,G=Y,z=Z||{};else X=!0,G=J,z=Y||{};let f=null,q=sq,B=null,j=!1,K=!1,H="initialValue"in z,U=typeof X==="function"&&U0(X),L=new Set,[F,D]=(z.storage||p)(z.initialValue),[A,R]=p(void 0),[l,g]=p(void 0,{equals:!1}),[k,C]=p(H?"ready":"unresolved");if(x1.context){if(B=x1.getNextContextId(),z.ssrLoadFrom==="initial")q=z.initialValue;else if(x1.load&&x1.has(B))q=x1.load(B)}function N(u,Q0,t,j0){if(f===u){if(f=null,j0!==void 0&&(H=!0),(u===q||Q0===q)&&z.onHydrated)queueMicrotask(()=>z.onHydrated(j0,{value:Q0}));if(q=sq,B0&&u&&j)B0.promises.delete(u),j=!1,UJ(()=>{B0.running=!0,_(Q0,t)},!1);else _(Q0,t)}return Q0}function _(u,Q0){UJ(()=>{if(Q0===void 0)D(()=>u);C(Q0!==void 0?"errored":H?"ready":"unresolved"),R(Q0);for(let t of L.keys())t.decrement();L.clear()},!1)}function X0(){let u=TG&&NJ(TG),Q0=F(),t=A();if(t!==void 0&&!f)throw t;if(W1&&!W1.user&&u)T9(()=>{if(l(),f){if(u.resolved&&B0&&j)B0.promises.add(f);else if(!L.has(u))u.increment(),L.add(u)}});return Q0}function s(u=!0){if(u!==!1&&K)return;K=!1;let Q0=U?U():X;if(j=B0&&B0.running,Q0==null||Q0===!1){N(f,l1(F));return}if(B0&&f)B0.promises.delete(f);let t,j0=q!==sq?q:l1(()=>{try{return G(Q0,{value:F(),refetching:u})}catch(S0){t=S0}});if(t!==void 0){N(f,void 0,sz(t),Q0);return}else if(!ZM(j0))return N(f,j0,void 0,Q0),j0;if(f=j0,"v"in j0){if(j0.s===1)N(f,j0.v,void 0,Q0);else N(f,void 0,sz(j0.v),Q0);return j0}return K=!0,queueMicrotask(()=>K=!1),UJ(()=>{C(H?"refreshing":"pending"),g()},!1),j0.then((S0)=>N(j0,S0,void 0,Q0),(S0)=>N(j0,void 0,sz(S0),Q0))}Object.defineProperties(X0,{state:{get:()=>k()},error:{get:()=>A()},loading:{get(){let u=k();return u==="pending"||u==="refreshing"}},latest:{get(){if(!H)return X0();let u=A();if(u&&!f)throw u;return F()}}});let Y0=l0;if(U)T9(()=>(Y0=l0,s(!1)));else s(!1);return[X0,{refetch:(u)=>XM(Y0,()=>s(u)),mutate:D}]}function XQ(J){return UJ(J,!1)}function l1(J){if(!kX&&W1===null)return J();let Y=W1;W1=null;try{if(kX)return kX.untrack(J);return J()}finally{W1=Y}}function LJ(J,Y,Z){let X=Array.isArray(J),G,z=Z&&Z.defer;return(f)=>{let q;if(X){q=Array(J.length);for(let j=0;j<J.length;j++)q[j]=J[j]()}else q=J();if(z)return z=!1,f;let B=l1(()=>Y(q,G,f));return G=q,B}}function s1(J){s0(()=>l1(J))}function P1(J){if(l0===null)console.warn("cleanups created outside a `createRoot` or `render` will never be run");else if(l0.cleanups===null)l0.cleanups=[J];else l0.cleanups.push(J);return J}function GQ(){return W1}function XM(J,Y){let Z=l0,X=W1;l0=J,W1=null;try{return UJ(Y,!0)}catch(G){zQ(G)}finally{l0=Z,W1=X}}function GM(J){if(B0&&B0.running)return J(),B0.done;let Y=W1,Z=l0;return Promise.resolve().then(()=>{W1=Y,l0=Z;let X;if(IX||TG)X=B0||(B0={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),X.done||(X.done=new Promise((G)=>X.resolve=G)),X.running=!0;return UJ(J,!1),W1=l0=null,X?X.done:void 0})}function u9(J,Y){let Z=uG(()=>l1(()=>{return Object.assign(J,{[JM]:!0}),J(Y)}),void 0,!0,0);return Z.props=Y,Z.observers=null,Z.observerSlots=null,Z.name=J.name,Z.component=J,nZ(Z),Z.tValue!==void 0?Z.tValue:Z.value}function v9(J){if(l0){if(l0.sourceMap)l0.sourceMap.push(J);else l0.sourceMap=[J];J.graph=l0}if(tJ.afterRegisterGraph)tJ.afterRegisterGraph(J)}function FY(J,Y){let Z=Symbol("context");return{id:Z,Provider:BM(Z,Y),defaultValue:J}}function NJ(J){let Y;return l0&&l0.context&&(Y=l0.context[J.id])!==void 0?Y:J.defaultValue}function zM(J){let Y=U0(J),Z=U0(()=>JB(Y()),void 0,{name:"children"});return Z.toArray=()=>{let X=Z();return Array.isArray(X)?X:X!=null?[X]:[]},Z}function m9(){let J=B0&&B0.running;if(this.sources&&(J?this.tState:this.state))if((J?this.tState:this.state)===IJ)nZ(this);else{let Y=d1;d1=null,UJ(()=>ez(this),!1),d1=Y}if(W1){let Y=this.observers;if(!Y||Y[Y.length-1]!==W1){let Z=Y?Y.length:0;if(!W1.sources)W1.sources=[this],W1.sourceSlots=[Z];else W1.sources.push(this),W1.sourceSlots.push(Z);if(!Y)this.observers=[W1],this.observerSlots=[W1.sources.length-1];else Y.push(W1),this.observerSlots.push(W1.sources.length-1)}}if(J&&B0.sources.has(this))return this.tValue;return this.value}function YB(J,Y,Z){let X=B0&&B0.running&&B0.sources.has(J)?J.tValue:J.value;if(!J.comparator||!J.comparator(X,Y)){if(B0){let G=B0.running;if(G||!Z&&B0.sources.has(J))B0.sources.add(J),J.tValue=Y;if(!G)J.value=Y}else J.value=Y;if(J.observers&&J.observers.length)UJ(()=>{for(let G=0;G<J.observers.length;G+=1){let z=J.observers[G],f=B0&&B0.running;if(f&&B0.disposed.has(z))continue;if(f?!z.tState:!z.state){if(z.pure)d1.push(z);else GJ.push(z);if(z.observers)d9(z)}if(!f)z.state=IJ;else z.tState=IJ}if(d1.length>1e6){if(d1=[],sD)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return Y}function nZ(J){if(!J.fn)return;XZ(J);let Y=YQ;if(x9(J,B0&&B0.running&&B0.sources.has(J)?J.tValue:J.value,Y),B0&&!B0.running&&B0.sources.has(J))queueMicrotask(()=>{UJ(()=>{B0&&(B0.running=!0),W1=l0=J,x9(J,J.tValue,Y),W1=l0=null},!1)})}function x9(J,Y,Z){let X,G=l0,z=W1;W1=l0=J;try{X=J.fn(Y)}catch(f){if(J.pure)if(B0&&B0.running)J.tState=IJ,J.tOwned&&J.tOwned.forEach(XZ),J.tOwned=void 0;else J.state=IJ,J.owned&&J.owned.forEach(XZ),J.owned=null;return J.updatedAt=Z+1,zQ(f)}finally{W1=z,l0=G}if(!J.updatedAt||J.updatedAt<=Z){if(J.updatedAt!=null&&"observers"in J)YB(J,X,!0);else if(B0&&B0.running&&J.pure){if(!B0.sources.has(J))J.value=X;B0.sources.add(J),J.tValue=X}else J.value=X;J.updatedAt=Z}}function uG(J,Y,Z,X=IJ,G){let z={fn:J,state:X,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:Y,owner:l0,context:l0?l0.context:null,pure:Z};if(B0&&B0.running)z.state=0,z.tState=X;if(l0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if(l0!==YM)if(B0&&B0.running&&l0.pure)if(!l0.tOwned)l0.tOwned=[z];else l0.tOwned.push(z);else if(!l0.owned)l0.owned=[z];else l0.owned.push(z);if(G&&G.name)z.name=G.name;if(kX&&z.fn){let f=z.fn,[q,B]=p(void 0,{equals:!1}),j=kX.factory(f,B);P1(()=>j.dispose());let K,H=()=>GM(B).then(()=>{if(K)K.dispose(),K=void 0});z.fn=(U)=>{if(q(),B0&&B0.running){if(!K)K=kX.factory(f,H);return K.track(U)}return j.track(U)}}return tJ.afterCreateOwner&&tJ.afterCreateOwner(z),z}function EG(J){let Y=B0&&B0.running;if((Y?J.tState:J.state)===0)return;if((Y?J.tState:J.state)===bG)return ez(J);if(J.suspense&&l1(J.suspense.inFallback))return J.suspense.effects.push(J);let Z=[J];while((J=J.owner)&&(!J.updatedAt||J.updatedAt<YQ)){if(Y&&B0.disposed.has(J))return;if(Y?J.tState:J.state)Z.push(J)}for(let X=Z.length-1;X>=0;X--){if(J=Z[X],Y){let G=J,z=Z[X+1];while((G=G.owner)&&G!==z)if(B0.disposed.has(G))return}if((Y?J.tState:J.state)===IJ)nZ(J);else if((Y?J.tState:J.state)===bG){let G=d1;d1=null,UJ(()=>ez(J,Z[0]),!1),d1=G}}}function UJ(J,Y){if(d1)return J();let Z=!1;if(!Y)d1=[];if(GJ)Z=!0;else GJ=[];YQ++;try{let X=J();return QM(Z),X}catch(X){if(!Z)GJ=null;d1=null,zQ(X)}}function QM(J){if(d1){if(IX&&B0&&B0.running)fM(d1);else c9(d1);d1=null}if(J)return;let Y;if(B0){if(!B0.promises.size&&!B0.queue.size){let{sources:X,disposed:G}=B0;GJ.push.apply(GJ,B0.effects),Y=B0.resolve;for(let z of GJ)"tState"in z&&(z.state=z.tState),delete z.tState;B0=null,UJ(()=>{for(let z of G)XZ(z);for(let z of X){if(z.value=z.tValue,z.owned)for(let f=0,q=z.owned.length;f<q;f++)XZ(z.owned[f]);if(z.tOwned)z.owned=z.tOwned;delete z.tValue,delete z.tOwned,z.tState=0}E9(!1)},!1)}else if(B0.running){B0.running=!1,B0.effects.push.apply(B0.effects,GJ),GJ=null,E9(!0);return}}let Z=GJ;if(GJ=null,Z.length)UJ(()=>P9(Z),!1);else tJ.afterUpdate&&tJ.afterUpdate();if(Y)Y()}function c9(J){for(let Y=0;Y<J.length;Y++)EG(J[Y])}function fM(J){for(let Y=0;Y<J.length;Y++){let Z=J[Y],X=B0.queue;if(!X.has(Z))X.add(Z),IX(()=>{X.delete(Z),UJ(()=>{B0.running=!0,EG(Z)},!1),B0&&(B0.running=!1)})}}function qM(J){let Y,Z=0;for(Y=0;Y<J.length;Y++){let X=J[Y];if(!X.user)EG(X);else J[Z++]=X}if(x1.context){if(x1.count){x1.effects||(x1.effects=[]),x1.effects.push(...J.slice(0,Z));return}eq()}if(x1.effects&&(x1.done||!x1.count))J=[...x1.effects,...J],Z+=x1.effects.length,delete x1.effects;for(Y=0;Y<Z;Y++)EG(J[Y])}function ez(J,Y){let Z=B0&&B0.running;if(Z)J.tState=0;else J.state=0;for(let X=0;X<J.sources.length;X+=1){let G=J.sources[X];if(G.sources){let z=Z?G.tState:G.state;if(z===IJ){if(G!==Y&&(!G.updatedAt||G.updatedAt<YQ))EG(G)}else if(z===bG)ez(G,Y)}}}function d9(J){let Y=B0&&B0.running;for(let Z=0;Z<J.observers.length;Z+=1){let X=J.observers[Z];if(Y?!X.tState:!X.state){if(Y)X.tState=bG;else X.state=bG;if(X.pure)d1.push(X);else GJ.push(X);X.observers&&d9(X)}}}function XZ(J){let Y;if(J.sources)while(J.sources.length){let Z=J.sources.pop(),X=J.sourceSlots.pop(),G=Z.observers;if(G&&G.length){let z=G.pop(),f=Z.observerSlots.pop();if(X<G.length)z.sourceSlots[f]=X,G[X]=z,Z.observerSlots[X]=f}}if(J.tOwned){for(Y=J.tOwned.length-1;Y>=0;Y--)XZ(J.tOwned[Y]);delete J.tOwned}if(B0&&B0.running&&J.pure)n9(J,!0);else if(J.owned){for(Y=J.owned.length-1;Y>=0;Y--)XZ(J.owned[Y]);J.owned=null}if(J.cleanups){for(Y=J.cleanups.length-1;Y>=0;Y--)J.cleanups[Y]();J.cleanups=null}if(B0&&B0.running)J.tState=0;else J.state=0;delete J.sourceMap}function n9(J,Y){if(!Y)J.tState=0,B0.disposed.add(J);if(J.owned)for(let Z=0;Z<J.owned.length;Z++)n9(J.owned[Z])}function sz(J){if(J instanceof Error)return J;return Error(typeof J==="string"?J:"Unknown error",{cause:J})}function w9(J,Y,Z){try{for(let X of Y)X(J)}catch(X){zQ(X,Z&&Z.owner||null)}}function zQ(J,Y=l0){let Z=b9&&Y&&Y.context&&Y.context[b9],X=sz(J);if(!Z)throw X;if(GJ)GJ.push({fn(){w9(X,Z,Y)},state:IJ});else w9(X,Z,Y)}function JB(J){if(typeof J==="function"&&!J.length)return JB(J());if(Array.isArray(J)){let Y=[];for(let Z=0;Z<J.length;Z++){let X=JB(J[Z]);if(Array.isArray(X))if(X.length<32768)Y.push.apply(Y,X);else for(let G=0;G<X.length;G++)Y.push(X[G]);else Y.push(X)}return Y}return J}function BM(J,Y){return function(X){let G;return MY(()=>G=l1(()=>{return l0.context={...l0.context,[J]:X.value},zM(()=>X.children)}),void 0,Y),G}}function h9(J){for(let Y=0;Y<J.length;Y++)J[Y]()}function HM(J,Y,Z={}){let X=[],G=[],z=[],f=0,q=Y.length>1?[]:null;return P1(()=>h9(z)),()=>{let B=J()||[],j=B.length,K,H;return B[JQ],l1(()=>{let L,F,D,A,R,l,g,k,C;if(j===0){if(f!==0)h9(z),z=[],X=[],G=[],f=0,q&&(q=[]);if(Z.fallback)X=[jM],G[0]=dZ((N)=>{return z[0]=N,Z.fallback()}),f=1}else if(f===0){G=Array(j);for(H=0;H<j;H++)X[H]=B[H],G[H]=dZ(U);f=j}else{D=Array(j),A=Array(j),q&&(R=Array(j));for(l=0,g=Math.min(f,j);l<g&&X[l]===B[l];l++);for(g=f-1,k=j-1;g>=l&&k>=l&&X[g]===B[k];g--,k--)D[k]=G[g],A[k]=z[g],q&&(R[k]=q[g]);L=new Map,F=Array(k+1);for(H=k;H>=l;H--)C=B[H],K=L.get(C),F[H]=K===void 0?-1:K,L.set(C,H);for(K=l;K<=g;K++)if(C=X[K],H=L.get(C),H!==void 0&&H!==-1)D[H]=G[K],A[H]=z[K],q&&(R[H]=q[K]),H=F[H],L.set(C,H);else z[K]();for(H=l;H<j;H++)if(H in D){if(G[H]=D[H],z[H]=A[H],q)q[H]=R[H],q[H](H)}else G[H]=dZ(U);G=G.slice(0,f=j),X=B.slice(0)}return G});function U(L){if(z[H]=L,q){let[F,D]=p(H,{name:"index"});return q[H]=D,Y(B[H],F)}return Y(B[H])}}}function i9(J,Y){if(WM){if(x1.context){let Z=x1.context;eq(oD());let X=u9(J,Y||{});return eq(Z),X}}return u9(J,Y||{})}function oz(){return!0}function tq(J){return!(J=typeof J==="function"?J():J)?{}:J}function KM(){for(let J=0,Y=this.length;J<Y;++J){let Z=this[J]();if(Z!==void 0)return Z}}function QQ(...J){let Y=!1;for(let f=0;f<J.length;f++){let q=J[f];Y=Y||!!q&&sJ in q,J[f]=typeof q==="function"?(Y=!0,U0(q)):q}if(eD&&Y)return new Proxy({get(f){for(let q=J.length-1;q>=0;q--){let B=tq(J[q])[f];if(B!==void 0)return B}},has(f){for(let q=J.length-1;q>=0;q--)if(f in tq(J[q]))return!0;return!1},keys(){let f=[];for(let q=0;q<J.length;q++)f.push(...Object.keys(tq(J[q])));return[...new Set(f)]}},VM);let Z={},X=Object.create(null);for(let f=J.length-1;f>=0;f--){let q=J[f];if(!q)continue;let B=Object.getOwnPropertyNames(q);for(let j=B.length-1;j>=0;j--){let K=B[j];if(K==="__proto__"||K==="constructor")continue;let H=Object.getOwnPropertyDescriptor(q,K);if(!X[K])X[K]=H.get?{enumerable:!0,configurable:!0,get:KM.bind(Z[K]=[H.get.bind(q)])}:H.value!==void 0?H:void 0;else{let U=Z[K];if(U){if(H.get)U.push(H.get.bind(q));else if(H.value!==void 0)U.push(()=>H.value)}}}}let G={},z=Object.keys(X);for(let f=z.length-1;f>=0;f--){let q=z[f],B=X[q];if(B&&B.get)Object.defineProperty(G,q,B);else G[q]=B?B.value:void 0}return G}function X1(J){let Y="fallback"in J&&{fallback:()=>J.fallback};return U0(HM(()=>J.each,J.children,Y||void 0),void 0,{name:"value"})}function z0(J){let Y=J.keyed,Z=U0(()=>J.when,void 0,{name:"condition value"}),X=Y?Z:U0(Z,void 0,{equals:(G,z)=>!G===!z,name:"condition"});return U0(()=>{let G=X();if(G){let z=J.children;return typeof z==="function"&&z.length>0?l1(()=>z(Y?G:()=>{if(!l1(X))throw UM("Show");return Z()})):z}return J.fallback},void 0,{name:"value"})}var x1,sD=!0,tD=(J,Y)=>J===Y,sJ,eD,JQ,JM,tz,b9=null,P9,IJ=1,bG=2,YM,sq,l0=null,B0=null,IX=null,kX=null,W1=null,d1=null,GJ=null,YQ=0,tJ,_N,E9,TG,jM,WM=!1,VM,UM=(J)=>`Attempting to access a stale value from <${J}> 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.`,l9;var B1=S(()=>{x1={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return N9(this.context.count)},getNextContextId(){return N9(this.context.count++)}};sJ=Symbol("solid-proxy"),eD=typeof Proxy==="function",JQ=Symbol("solid-track"),JM=Symbol("solid-dev-component"),tz={equals:tD},P9=c9,YM={},sq={},tJ={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[_N,E9]=p(!1);jM=Symbol("fallback");VM={get(J,Y,Z){if(Y===sJ)return Z;return J.get(Y)},has(J,Y){if(Y===sJ)return!0;return J.has(Y)},set:oz,deleteProperty:oz,getOwnPropertyDescriptor(J,Y){return{configurable:!0,enumerable:!0,get(){return J.get(Y)},set:oz,deleteProperty:oz}},ownKeys(J){return J.keys()}};l9={hooks:tJ,writeSignal:YB,registerGraph:v9};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 LM(J,Y){switch((J??"").toUpperCase()){case"MERGED":return"merged";case"CLOSED":return"closed";case"OPEN":return(Y??"").toUpperCase()==="APPROVED"?"ready_to_merge":"open";default:return"unknown"}}function DM(J){let Y=(J.status??"").toUpperCase(),Z=(J.conclusion??"").toUpperCase(),X=(J.state??"").toUpperCase();if(Y&&Y!=="COMPLETED")return"pending";if(Z){if(Z==="SUCCESS"||Z==="NEUTRAL"||Z==="SKIPPED")return"passing";return"failing"}if(X==="SUCCESS")return"passing";if(X==="PENDING"||X==="EXPECTED")return"pending";if(X==="FAILURE"||X==="ERROR")return"failing";return"unknown"}function MM(J){if(!J||J.length===0)return"none";let Y=!1,Z=!1;for(let X of J){let G=DM(X);if(G==="failing")return"failing";if(G==="pending")Y=!0;else if(G==="passing")Z=!0}if(Y)return"pending";if(Z)return"passing";return"unknown"}function a9(J,Y){if(!J||typeof J.number!=="number")return null;return{provider:"github",lifecycle:LM(J.state,J.reviewDecision),checkState:MM(J.statusCheckRollup),number:J.number,url:J.url,title:J.title,baseRef:J.baseRefName,headRef:J.headRefName,reviewDecision:J.reviewDecision||void 0,mergeable:J.mergeable||void 0,lastCheckedAt:Y}}function fQ(J,Y){if(J===Y)return!0;if(!J||!Y)return!1;return J.provider===Y.provider&&J.lifecycle===Y.lifecycle&&J.checkState===Y.checkState&&J.number===Y.number&&J.url===Y.url&&J.title===Y.title&&J.baseRef===Y.baseRef&&J.headRef===Y.headRef&&J.reviewDecision===Y.reviewDecision&&J.mergeable===Y.mergeable}var $9="number,url,title,state,baseRefName,headRefName,reviewDecision,mergeable,statusCheckRollup";var ZB,XB,GB,zB="DIRTY_WORKTREE",QB,fB;var qB=S(()=>{ZB=class ZB extends Error{from;to;taskId;constructor(J,Y,Z){super(`illegal transition for task ${Z}: ${J} -> ${Y}`);this.from=J;this.to=Y;this.taskId=Z;this.name="IllegalTransitionError"}};XB=class XB extends Error{constructor(J){super(`task not found: ${J}`);this.name="TaskNotFoundError"}};GB=class GB extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};QB=class QB extends Error{taskId;constructor(J){super(`${zB}: task ${J} worktree has uncommitted or untracked changes`);this.taskId=J;this.name="DirtyWorktreeError"}};fB=class fB extends Error{taskId;cause;constructor(J,Y){super(`failed to remove worktree for task ${J}: ${Y instanceof Error?Y.message:String(Y)}`);this.taskId=J;this.cause=Y;this.name="WorktreeRemoveFailedError"}}});function p9(J){if(typeof J!=="string")return"";let Y=J.replace(/\s+/g," ").trim();if(Y.length===0)return"";let Z=[...Y];if(Z.length<=40)return Y;return`${Z.slice(0,40).join("")}\u2026`}function qQ(J,Y){let Z=J.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,32),X=Y.slice(-6).toLowerCase();return`kobe/${Z||"task"}-${X}`}var _9;var r9=S(()=>{_9=["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 BB{activeSlugs;random;pool;pendingByRepo=new Map;chain=Promise.resolve();constructor(J,Y={}){this.activeSlugs=J;if(this.random=Y.random??Math.random,this.pool=Y.pool??_9,this.pool.length===0)throw Error("SlugAllocator: animal pool cannot be empty")}async allocate(J){let Y=this.chain,Z;this.chain=new Promise((X)=>{Z=X}),await Y;try{return await this.pickLocked(J)}finally{Z()}}commit(J,Y){this.deletePending(J,Y)}cancel(J,Y){this.deletePending(J,Y)}async pickLocked(J){let Y=await this.occupiedSlugs(J),Z=this.pool.filter((G)=>!Y.has(G));if(Z.length>0){let G=Z[Math.floor(this.random()*Z.length)];return this.addPending(J,G),G}let X=this.pool[Math.floor(this.random()*this.pool.length)];for(let G=2;;G++){let z=`${X}-v${G}`;if(!Y.has(z))return this.addPending(J,z),z}}async occupiedSlugs(J){let Y=new Set(this.pendingByRepo.get(J)??[]);for(let Z of this.activeSlugs(J))if(Z)Y.add(Z);for(let Z of await R9(J))Y.add(Z);return Y}addPending(J,Y){let Z=this.pendingByRepo.get(J);if(!Z)Z=new Set,this.pendingByRepo.set(J,Z);Z.add(Y)}deletePending(J,Y){let Z=this.pendingByRepo.get(J);if(!Z)return;if(Z.delete(Y),Z.size===0)this.pendingByRepo.delete(J)}}var o9=S(()=>{r9();_q()});var e9={};q1(e9,{PLACEHOLDER_TASK_TITLE:()=>OY,Orchestrator:()=>BQ});import{realpathSync as FM}from"fs";import{basename as OM,resolve as AM}from"path";function s9(J){return wY(J)?.basePath??J}class BQ{store;worktrees;slugs;tasksAcc;setTasks;activeTaskAcc;setActiveTaskSig;unsubscribeStore;worktreeLocks=new Map;mainTaskLocks=new Map;constructor(J){this.store=J.store,this.worktrees=J.worktrees,this.slugs=new BB((z)=>this.store.list().filter((f)=>f.repo===z&&f.kind!=="main").map((f)=>{return f.worktreePath.match(/([^/\\]+)[/\\]*$/)?.[1]??""}).filter((f)=>f.length>0));let[Y,Z]=p(this.store.list());this.tasksAcc=Y,this.setTasks=(z)=>Z(()=>z);let[X,G]=p(null);this.activeTaskAcc=X,this.setActiveTaskSig=(z)=>G(()=>z),this.unsubscribeStore=this.store.subscribe((z)=>{this.setTasks(z.slice())})}async init(){}activeTaskSignal(){return this.activeTaskAcc}async setActiveTask(J){let Y=J===null?null:String(J);if(this.setActiveTaskSig(Y),Y&&this.store.get(Y))await this.store.update(Y,{})}tasksSignal(){return this.tasksAcc}subscribeTasks(J){return this.store.subscribe(J)}dispose(){this.unsubscribeStore()}listTasks(){return this.store.list()}getTask(J){return this.store.get(J)}async createTask(J){if(!J.repo)throw Error("createTask: repo is required");let Y=(J.title??OY).trim()||OY,Z=await this.store.create({repo:J.repo,title:Y,branch:J.branch??"",worktreePath:"",status:"backlog",kind:"task",vendor:J.vendor??k1,...J.modelEffort?{modelEffort:J.modelEffort}:{}});if(J.baseRef)this.pendingBaseRefs.set(Z.id,J.baseRef);return Z}async ensureMainTask(J){let{repo:Y,key:Z}=t9(J),X=this.store.list().find((f)=>f.kind==="main"&&t9(f.repo).key===Z);if(X)return X;let G=this.mainTaskLocks.get(Z);if(G)return G;let z=(async()=>{return await this.store.create({repo:Y,title:RM(Y),branch:"",worktreePath:s9(Y),status:"backlog",kind:"main",vendor:k1})})();this.mainTaskLocks.set(Z,z);try{return await z}finally{this.mainTaskLocks.delete(Z)}}async ensureWorktree(J){let Y=this.requireTask(J);if(Y.kind==="main")return s9(Y.repo);if(Y.worktreePath)return Y.worktreePath;let Z=this.worktreeLocks.get(Y.id);if(Z)return await Z,this.requireTask(Y.id).worktreePath;let X=(async()=>{let z=await this.slugs.allocate(Y.repo);try{let f=Y.branch||qQ(Y.title,Y.id),q=this.pendingBaseRefs.get(Y.id),B=await this.worktrees.createForTask({repo:Y.repo,slug:z,branch:f,baseRef:q});this.slugs.commit(Y.repo,z),this.pendingBaseRefs.delete(Y.id),await this.store.update(Y.id,{worktreePath:B.path,branch:f})}catch(f){throw this.slugs.cancel(Y.repo,z),f}})();this.worktreeLocks.set(Y.id,X);try{await X}finally{this.worktreeLocks.delete(Y.id)}return this.requireTask(Y.id).worktreePath}async setTitle(J,Y){let Z=Y.trim();if(!Z)throw Error("setTitle: title is required (empty or whitespace-only rejected)");let X=this.requireTask(J);if(X.title===Z)return;await this.store.update(X.id,{title:Z}),await this.followBranchToTitle(X,Z)}async followBranchToTitle(J,Y){if(J.kind==="main"||!J.worktreePath)return;if(J.branch!==qQ(OY,J.id))return;let Z=qQ(Y,J.id);if(Z===J.branch)return;try{await this.setBranch(J.id,Z)}catch(X){console.error(`[kobe] follow-branch-to-title failed for ${J.id}:`,X)}}async setBranch(J,Y){let Z=Y.trim();if(!Z)throw Error("setBranch: branch is required (empty or whitespace-only rejected)");let X=this.requireTask(J);if(X.kind==="main")throw Error("setBranch: a main task tracks the repo's own branch; rename it with git directly");if(X.branch===Z)return;if(X.worktreePath)await this.worktrees.renameBranch(X.worktreePath,X.branch,Z);await this.store.update(X.id,{branch:Z})}async setVendor(J,Y){let Z=this.requireTask(J);if(Z.vendor===Y)return;await this.store.update(Z.id,{vendor:Y})}async setPinned(J,Y){let Z=this.requireTask(J);if(Z.kind==="main")return;let X=Y??!Z.pinned;if((Z.pinned??!1)===X)return;await this.store.update(Z.id,{pinned:X})}async moveTask(J,Y){let Z=this.requireTask(J);if(Z.kind==="main")return;let X=this.store.list().filter((G)=>(G.kind??"task")!=="main"&&G.archived===Z.archived&&(G.pinned??!1)===(Z.pinned??!1)).map((G)=>String(G.id));await this.store.move(Z.id,Y,X)}async setArchived(J,Y){let Z=this.requireTask(J);if(Z.kind==="main")return;let X=Y??!Z.archived;if(Z.archived===X)return;await this.store.update(Z.id,{archived:X})}async reorderTasks(J){if(J.length===0)return;for(let Y of J){if(this.requireTask(Y.taskId).kind==="main")throw Error(`cannot reorder a main task: ${Y.taskId}`);if(!Number.isFinite(Y.position))throw Error(`position must be a finite number: ${Y.taskId}`)}await this.store.reorder(J.map((Y)=>({id:Y.taskId,position:Y.position})))}async setStatus(J,Y){let Z=this.requireTask(J);if(Z.status===Y)return;if(Z.status==="done"&&Y==="error"||Z.status==="error"&&Y==="done")throw new ZB(Z.status,Y,Z.id);await this.store.update(Z.id,{status:Y})}async setPRStatus(J,Y){let Z=this.requireTask(J);if(fQ(Z.prStatus,Y??void 0))return;await this.store.update(Z.id,{prStatus:Y??void 0})}async deleteTask(J,Y){let Z=this.store.get(J);if(!Z)return;if(Z.kind==="main")throw new GB;let X=Y?.force===!0;if(Z.worktreePath){if(!X){let G=!1;try{G=await this.worktrees.isDirty(Z.worktreePath)}catch{}if(G)throw new QB(Z.id)}try{await this.worktrees.remove(Z.worktreePath,{force:X})}catch(G){throw new fB(Z.id,G)}}await this.store.remove(Z.id),this.pendingBaseRefs.delete(Z.id),this.worktreeLocks.delete(Z.id)}async discoverAdoptableWorktrees(J){if(!J)throw Error("discoverAdoptableWorktrees: repo is required");let Y=await this.worktrees.listAll(J),Z=new Set(this.store.list().filter((X)=>X.worktreePath).map((X)=>NX(X.worktreePath)));return Y.filter((X)=>!Z.has(NX(X.path)))}async adoptWorktree(J){if(!J.repo)throw Error("adoptWorktree: repo is required");if(!J.worktreePath)throw Error("adoptWorktree: worktreePath is required");let Y=NX(J.worktreePath),Z=this.adoptLocks.get(Y);if(Z)return Z;let X=this.adoptWorktreeLocked(J,Y);this.adoptLocks.set(Y,X);try{return await X}finally{this.adoptLocks.delete(Y)}}async adoptWorktreeLocked(J,Y){let Z=this.store.list().find((q)=>q.worktreePath&&NX(q.worktreePath)===Y);if(Z){if(J.ifExists==="return")return Z;throw Error(`adoptWorktree: ${J.worktreePath} is already adopted as a task`)}let G=(await this.worktrees.listAll(J.repo)).find((q)=>NX(q.path)===Y);if(!G)throw Error(`adoptWorktree: ${J.worktreePath} is not an adoptable git worktree of ${J.repo} (unknown, detached, or the main checkout)`);let z=J.branch?.trim()||G.branch,f=(J.title??OM(G.path)).trim()||OY;return this.store.create({repo:J.repo,title:f,branch:z,worktreePath:G.path,status:"backlog",kind:"task",vendor:J.vendor??k1})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(J){let Y=this.store.get(J);if(!Y)throw new XB(String(J));return Y}}function RM(J){let Y=J.split(/[/\\]/).filter(Boolean);return Y.length>0?Y[Y.length-1]??J:J}function t9(J){let Y=uY(J);return{repo:Y,key:HJ(Y)?Y:NX(Y)}}function NX(J){try{return FM(J)}catch{return AM(J)}}var OY="(new task)";var xG=S(()=>{B1();O1();SJ();qB();o9()});function jQ(J){return J.remoteVersion>=J.localMin&&J.localVersion>=J.remoteMin}function J7(J,Y){if(!J)return!1;return J!==Y}function gM(J){return typeof J==="string"&&CM.has(J)}function Y7(J){if(!Array.isArray(J))return null;let Y=new Set;for(let Z of J)if(gM(Z))Y.add(Z);return Y.size>0?Y:null}function eJ(J){return{id:J.id,title:J.title,repo:J.repo,branch:J.branch,worktreePath:J.worktreePath,kind:J.kind??"task",status:J.status,archived:J.archived,pinned:J.pinned??!1,vendor:J.vendor,prStatus:J.prStatus,position:J.position,modelEffort:J.modelEffort,createdAt:J.createdAt,updatedAt:J.updatedAt}}function wG(J){return`${JSON.stringify(J)}
16
+ `}var hJ=3,GZ=2,jB,CM;var iZ=S(()=>{jB=["task.snapshot","issue.snapshot","active-task","update","engine-state","ui-prefs","keybindings","task.jobs","worktree.changes","session.deliver"],CM=new Set(jB)});import{createHash as yM}from"crypto";import{homedir as HQ,tmpdir as SM}from"os";import{join as lZ}from"path";function kM(J){return yM("sha1").update(J).digest("hex").slice(0,8)}function WB(J,Y,Z,X){if(Buffer.byteLength(J,"utf8")<=HB)return J;let G=kM(Y),z=X===void 0?"":`-${X}`,f=lZ(SM(),`kobe-${G}-${Z}${z}.sock`);if(Buffer.byteLength(f,"utf8")<=HB)return f;throw Error(`kobe socket path exceeds ${HB} bytes even after fallback: ${f}`)}function AY(J){let Y=process.env.KOBE_DAEMON_SOCKET_PATH;if(Y&&Y.length>0)return Y;let Z=J??process.env.KOBE_HOME_DIR;if(Z&&Z.length>0)return WB(lZ(Z,".kobe","daemon.sock"),Z,"daemon");let X=process.env.XDG_RUNTIME_DIR;if(X&&X.length>0)return WB(lZ(X,"kobe.sock"),X,"daemon");let G=HQ();return WB(lZ(G,".kobe","daemon.sock"),G,"daemon")}function PY(J=process.env.KOBE_HOME_DIR??HQ()){let Y=process.env.KOBE_DAEMON_PID_PATH;if(Y&&Y.length>0)return Y;return lZ(J,".kobe","daemon.pid")}function WQ(J=process.env.KOBE_HOME_DIR??HQ()){return lZ(J,".kobe","daemon.log")}function Z7(J=process.env.KOBE_HOME_DIR??HQ()){return lZ(J,".kobe","client.log")}var HB=100;var bX=()=>{};import{appendFile as X7,mkdir as IM}from"fs/promises";import{dirname as NM}from"path";function VQ(J){Q7=J}function bM(J){if(J instanceof Error)return{message:J.message,stack:J.stack};let Y;try{Y=typeof J==="string"?J:JSON.stringify(J)}catch{Y=String(J)}return{message:Y}}function f7(J,Y,Z=new Date){return`[${Z.toISOString()}] client ${Q7} [${J}] pid=${process.pid}: ${Y}
17
+ `}function TM(){if(G7)return;G7=!0;try{process.stderr.write(`[kobe] client log write failed; continuing without it
18
+ `)}catch{}}function q7(J){let Y=Z7();z7=z7.then(async()=>{try{await X7(Y,J)}catch(Z){if(Z?.code==="ENOENT")await IM(NM(Y),{recursive:!0}),await X7(Y,J);else throw Z}}).catch(()=>TM())}function vY(J,Y){q7(f7(J,Y))}function zZ(J,Y){let Z=bM(Y);q7(f7(J,Z.stack??Z.message))}var Q7="client",G7=!1,z7;var $Z=S(()=>{bX();z7=Promise.resolve()});import{connect as EM}from"net";import{StringDecoder as uM}from"string_decoder";class PJ{socketPath;socket=null;buffer="";nextId=1;pending=new Map;handlers=new Map;lifecycleHandlers=new Map;connecting=null;disposed=!1;constructor(J){this.socketPath=J}connect(){if(this.socket)return Promise.resolve();if(this.disposed)return Promise.reject(Error("daemon client disposed"));if(this.connecting)return this.connecting;let J=this.openSocket();this.connecting=J;let Y=()=>{if(this.connecting===J)this.connecting=null};return J.then(Y,Y),J}get isDisposed(){return this.disposed}close(){this.disposed=!0,this.socket?.end(),this.socket=null,this.failPending()}forceDisconnect(){let J=this.socket;if(!J)return;this.socket=null,J.destroy(),this.failPending()}failPending(){if(this.pending.size===0)return;let J=Error("daemon connection closed");for(let Y of this.pending.values())Y.reject(J);this.pending.clear()}on(J,Y){let Z=this.handlers.get(J);if(!Z)Z=new Set,this.handlers.set(J,Z);return Z.add(Y),()=>{if(Z?.delete(Y),Z?.size===0)this.handlers.delete(J)}}onChannel(J,Y){return this.on(J,(Z)=>Y(Z.payload))}subscribe(J={}){let Y={};if(J.channels)Y.channels=J.channels;if(J.role)Y.role=J.role;return this.request("subscribe",Y)}onLifecycle(J,Y){let Z=this.lifecycleHandlers.get(J);if(!Z)Z=new Set,this.lifecycleHandlers.set(J,Z);return Z.add(Y),()=>{if(Z?.delete(Y),Z?.size===0)this.lifecycleHandlers.delete(J)}}async request(J,Y){await this.connect();let Z=this.socket;if(!Z)throw Error("daemon connection is not open");let X=String(this.nextId++),G=new Promise((z,f)=>{this.pending.set(X,{resolve:(q)=>z(q),reject:f})});return Z.write(wG({type:"request",id:X,name:J,payload:Y})),G}openSocket(){return new Promise((J,Y)=>{let Z=EM(this.socketPath);this.socket=Z;let X=()=>{Z.off("error",G),J()},G=(f)=>{if(Z.off("connect",X),this.socket===Z)this.socket=null;Y(f)};Z.once("connect",X),Z.once("error",G);let z=new uM("utf8");this.buffer="",Z.on("data",(f)=>this.onData(z.write(f))),Z.on("close",()=>this.onSocketClose(Z))})}onSocketClose(J){if(this.socket!==J)return;this.socket=null,this.failPending(),this.emitLifecycle("close")}emitLifecycle(J){for(let Y of this.lifecycleHandlers.get(J)??[])try{Y()}catch(Z){console.error(`[kobe] lifecycle handler for "${J}" threw:`,Z)}}onData(J){this.buffer+=J;let Y=this.buffer.indexOf(`
19
19
  `);while(Y!==-1){let Z=this.buffer.slice(0,Y);if(this.buffer=this.buffer.slice(Y+1),Z.trim().length>0)this.onLine(Z);Y=this.buffer.indexOf(`
20
- `)}}onLine(J){let Y;try{Y=JSON.parse(J)}catch(f){fZ("client-frame",f);return}if(Y.type==="event"){this.emit(Y);return}if(Y.type!=="response")return;let Z=this.pending.get(Y.id);if(!Z)return;if(this.pending.delete(Y.id),Y.error){let f=Error(Y.error.message);if(Y.error.name)f.name=Y.error.name;Z.reject(f)}else Z.resolve(Y.payload)}emit(J){for(let Y of this.handlers.get(J.name)??[])Y(J);for(let Y of this.handlers.get("*")??[])Y(J)}}var uX=S(()=>{vZ();cZ()});function Bz(J){return VM.includes(J)}function oW(J,Y,Z){switch(Y){case"session-start":case"session-end":return"idle";case"turn-start":return"running";case"turn-complete":return"turn_complete";case"turn-failed":return Z?.failure==="rate_limit"||Z?.failure==="billing"?"rate_limited":"error";case"awaiting-input":return Z?.waiting==="permission"?"permission_needed":"running"}}var VM;var Hz=S(()=>{VM=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function KM(){let J=process.env.KOBE_ENGINE_STATE_TTL_MS;if(J===void 0)return sW;let Y=Number(J);return Number.isFinite(Y)&&Y>0?Y:sW}class qB{bus;staleMs;now;activity=new Map;constructor(J,Y=KM(),Z=()=>Date.now()){this.bus=J;this.staleMs=Y;this.now=Z}report(J,Y,Z){let f=this.activity.get(J);if(f?.lapse)clearTimeout(f.lapse);let X=oW(f?.state,Y,Z),G=this.now(),Q={state:X,detail:Z,at:G};if(X!=="idle"&&X!=="turn_complete")Q.lapse=setTimeout(()=>{let q=this.activity.get(J);if(q&&q.at===G)this.publishIdle(J)},this.staleMs),Q.lapse.unref?.();this.activity.set(J,Q),this.bus.publish("engine-state",this.payload(J,Q))}clearTask(J){let Y=this.activity.get(J);if(Y?.lapse)clearTimeout(Y.lapse);if(this.activity.delete(J),Y)this.bus.publish("engine-state",{taskId:J,state:"idle",at:this.now()})}snapshotByTask(){let J={};for(let[Y,Z]of this.activity)J[Y]=this.payload(Y,Z);return J}currentNonIdle(){let J=[];for(let[Y,Z]of this.activity)if(Z.state!=="idle")J.push(this.payload(Y,Z));return J}close(){for(let J of this.activity.values())if(J.lapse)clearTimeout(J.lapse);this.activity.clear()}publishIdle(J){let Y={state:"idle",at:this.now()};this.activity.set(J,Y),this.bus.publish("engine-state",this.payload(J,Y))}payload(J,Y){return{taskId:J,state:Y.state,...Y.detail?{detail:Y.detail}:{},at:Y.at}}}var sW=600000;var tW=S(()=>{Hz()});import{spawnSync as UM}from"child_process";import{existsSync as LM,statSync as DM}from"fs";import{homedir as MM}from"os";import xX from"path";async function eW(J=FM){let Y=[],Z=(H)=>{if(!H)return;return Y.push(H),J.fileExists(H)?H:void 0},f=J.which("claude");if(f){if(Y.push(`which:${f}`),J.fileExists(f))return f}let X=J.home(),G=Z(xX.join(X,".claude","local","claude"));if(G)return G;let Q=J.env("NVM_BIN");if(Q){let H=Z(xX.join(Q,"claude"));if(H)return H}let q=xX.join(X,".nvm","versions","node"),B=J.readdir(q).sort().reverse();for(let H of B){let K=Z(xX.join(q,H,"bin","claude"));if(K)return K}for(let H of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude","/bin/claude"]){let K=Z(H);if(K)return K}for(let H of[".local/bin/claude",".npm-global/bin/claude",".yarn/bin/claude",".bun/bin/claude","bin/claude"]){let K=Z(xX.join(X,H));if(K)return K}throw new jz(Y)}var jz,FM;var J8=S(()=>{jz=class jz extends Error{checkedPaths;constructor(J){super(`Claude Code binary not found. Checked: ${J.join(", ")}. Ensure 'claude' is on PATH, or install at ~/.claude/local/claude.`);this.name="ClaudeBinaryNotFoundError",this.checkedPaths=J}};FM={fileExists(J){try{return DM(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return MM()},which(J){let Y=process.platform==="win32"?"where":"which",Z=UM(Y,[J],{encoding:"utf8"});if(Z.status!==0)return;let f=Z.stdout.split(`
21
- `).map((X)=>X.trim()).filter(Boolean)[0];if(!f)return;if(f.startsWith("claude:")&&f.includes("aliased to")){let X=f.split("aliased to")[1]?.trim();return X&&LM(X)?X:void 0}return f},readdir(J){try{return uG("fs").readdirSync(J)}catch{return[]}}}});import{spawnSync as OM}from"child_process";import{existsSync as AM,statSync as RM}from"fs";import{homedir as gM}from"os";import Y8 from"path";async function Z8(J=CM){let Y=[],Z=(Q)=>{if(!Q)return;return Y.push(Q),J.fileExists(Q)?Q:void 0},f=J.which("codex");if(f){if(Y.push(`which:${f}`),J.fileExists(f))return f}let X=J.home();for(let Q of["/opt/homebrew/bin/codex","/usr/local/bin/codex","/usr/bin/codex","/bin/codex"]){let q=Z(Q);if(q)return q}let G=J.env("NVM_BIN");if(G){let Q=Z(Y8.join(G,"codex"));if(Q)return Q}for(let Q of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let q=Z(Y8.join(X,Q));if(q)return q}throw new Wz(Y)}var Wz,CM;var f8=S(()=>{Wz=class Wz extends Error{checkedPaths;constructor(J){super(`Codex CLI binary not found. Checked: ${J.join(", ")}. Ensure 'codex' is on PATH (e.g. \`brew install codex\` or the official installer).`);this.name="CodexBinaryNotFoundError",this.checkedPaths=J}};CM={fileExists(J){try{return RM(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return gM()},which(J){let Y=process.platform==="win32"?"where":"which",Z=OM(Y,[J],{encoding:"utf8"});if(Z.status!==0)return;let f=Z.stdout.split(`
22
- `).map((X)=>X.trim()).filter(Boolean)[0];if(!f)return;if(f.startsWith("codex:")&&f.includes("aliased to")){let X=f.split("aliased to")[1]?.trim();return X&&AM(X)?X:void 0}return f},readdir(J){try{return uG("fs").readdirSync(J)}catch{return[]}}}});import{spawnSync as SM}from"child_process";import{existsSync as yM,statSync as kM}from"fs";import{homedir as IM}from"os";import XZ from"path";async function X8(J=NM){let Y=[],Z=(K)=>{if(!K)return;return Y.push(K),J.fileExists(K)?K:void 0},f=J.which("copilot");if(f){if(Y.push(`which:${f}`),J.fileExists(f))return f}let X=J.platform()==="win32"?["copilot.exe","copilot.cmd","copilot"]:["copilot"],G=(K)=>{if(!K)return;for(let j of X){let U=Z(XZ.join(K,j));if(U)return U}return};for(let K of["/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin"]){let j=G(K);if(j)return j}let Q=J.env("NVM_BIN"),q=G(Q);if(q)return q;let B=J.home(),H=[XZ.join(B,".npm-global/bin"),XZ.join(B,".local/bin"),XZ.join(B,".bun/bin"),XZ.join(B,"bin")];if(J.platform()==="win32"){let K=J.env("APPDATA"),j=J.env("LOCALAPPDATA");if(H.unshift(XZ.join(B,"AppData/Roaming/npm")),K)H.unshift(XZ.join(K,"npm"));if(j)H.unshift(XZ.join(j,"npm"))}for(let K of H){let j=G(K);if(j)return j}throw new Vz(Y)}var Vz,NM;var G8=S(()=>{Vz=class Vz extends Error{checkedPaths;constructor(J){super(`GitHub Copilot CLI binary not found. Checked: ${J.join(", ")}. Ensure 'copilot' is on PATH (for example \`npm install -g @github/copilot\` or \`brew install copilot-cli\`).`);this.name="CopilotBinaryNotFoundError",this.checkedPaths=J}};NM={fileExists(J){try{return kM(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return IM()},which(J){let Y=process.platform==="win32"?"where":"which",Z=SM(Y,[J],{encoding:"utf8"});if(Z.status!==0)return;let f=Z.stdout.split(`
23
- `).map((X)=>X.trim()).filter(Boolean)[0];if(!f)return;if(f.startsWith("copilot:")&&f.includes("aliased to")){let X=f.split("aliased to")[1]?.trim();return X&&yM(X)?X:void 0}return f},platform(){return process.platform}}});import{readFileSync as bM,statSync as TM}from"fs";import{homedir as EM}from"os";import GZ from"path";function uM(J,Y){let Z=J("CLAUDE_CONFIG_DIR")?.trim();if(Z)return GZ.join(Z,".claude.json");return GZ.join(Y,".claude.json")}function xM(J,Y){let f=J("CODEX_HOME")?.trim()??GZ.join(Y,".codex");return GZ.join(f,"auth.json")}function wM(J,Y){let f=J("COPILOT_HOME")?.trim()??GZ.join(Y,".copilot");return GZ.join(f,"config.json")}function hM(J){let Y=J.split(".");if(Y.length!==3)return null;let Z=Y[1];if(!Z)return null;let f=Z.replace(/-/g,"+").replace(/_/g,"/"),X=f+"=".repeat((4-f.length%4)%4);try{let G=Buffer.from(X,"base64").toString("utf8"),Q=JSON.parse(G);return typeof Q==="object"&&Q!==null?Q:null}catch{return null}}async function Uz(J){try{return{found:!0,path:await J()}}catch(Y){if(Y instanceof jz||Y instanceof Wz||Y instanceof Vz)return{found:!1,error:"not found on PATH"};return{found:!1,error:Y instanceof Error?Y.message:String(Y)}}}async function z8(J){return(await Promise.all([["claude",()=>J.findClaudeBinary()],["codex",()=>J.findCodexBinary()],["copilot",()=>J.findCopilotBinary()]].map(async([f,X])=>(await Uz(X)).found?f:null))).filter((f)=>f!==null)}function PM(J=kf){if(J!==kf)return z8(J);if(Kz)return Kz;let Y=z8(J).catch((Z)=>{throw Kz=null,Z});return Kz=Y,Y}async function xY(J=kf){return[...await PM(J),...xq()]}async function Lz(J=kf){let Y=await Uz(()=>J.findClaudeBinary()),Z=uM(J.env,J.home()),f;try{f=J.readFile(Z)}catch(B){return{binary:Y,account:{kind:"none"},accountError:`read ${Z}: ${B instanceof Error?B.message:String(B)}`}}if(f===null)return{binary:Y,account:{kind:"none"}};let X;try{X=JSON.parse(f)}catch(B){return{binary:Y,account:{kind:"none"},accountError:`parse ${Z}: ${B instanceof Error?B.message:String(B)}`}}let G=X?.oauthAccount;if(!G||typeof G!=="object")return{binary:Y,account:{kind:"none"}};let Q=G,q=typeof Q.emailAddress==="string"?Q.emailAddress:void 0;if(!q)return{binary:Y,account:{kind:"none"}};return{binary:Y,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 Dz(J=kf){let Y=await Uz(()=>J.findCodexBinary()),Z=xM(J.env,J.home()),f;try{f=J.readFile(Z)}catch(H){return{binary:Y,account:{kind:"none"},accountError:`read ${Z}: ${H instanceof Error?H.message:String(H)}`}}if(f===null)return{binary:Y,account:{kind:"none"}};let X;try{X=JSON.parse(f)}catch(H){return{binary:Y,account:{kind:"none"},accountError:`parse ${Z}: ${H instanceof Error?H.message:String(H)}`}}let G=X??{},Q=G.tokens,q=typeof Q?.id_token==="string"?Q.id_token:void 0;if(q){let H=hM(q);if(!H)return{binary:Y,account:{kind:"none"},accountError:"codex id_token: malformed JWT"};let K=typeof H.email==="string"?H.email:void 0,j=H["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(K)return{binary:Y,account:{kind:"chatgpt",email:K,plan:L}};return{binary:Y,account:{kind:"none"},accountError:"codex id_token: no email claim"}}let B=G.OPENAI_API_KEY;if(typeof B==="string"&&B.length>0)return{binary:Y,account:{kind:"apikey"}};return{binary:Y,account:{kind:"none"}}}async function Mz(J=kf){let Y=await Uz(()=>J.findCopilotBinary());for(let G of["COPILOT_GITHUB_TOKEN","GH_TOKEN","GITHUB_TOKEN"])if(J.env(G)?.trim())return{binary:Y,account:{kind:"token",source:G}};let Z=wM(J.env,J.home()),f;try{f=J.readFile(Z)}catch(G){return{binary:Y,account:{kind:"none"},accountError:`read ${Z}: ${G instanceof Error?G.message:String(G)}`}}if(f===null)return{binary:Y,account:{kind:"none"}};let X;try{X=JSON.parse(f)}catch(G){return{binary:Y,account:{kind:"none"},accountError:`parse ${Z}: ${G instanceof Error?G.message:String(G)}`}}if(!BB(X))return{binary:Y,account:{kind:"none"}};if(Q8(X,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:Y,account:{kind:"oauth"}};return{binary:Y,account:{kind:"none"}}}function BB(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function Q8(J,Y,Z=0){if(Z>4||!BB(J))return!1;for(let[f,X]of Object.entries(J)){if(Y.includes(f)&&typeof X==="string"&&X.length>0)return!0;if(BB(X)&&Q8(X,Y,Z+1))return!0}return!1}var kf,Kz=null;var dZ=S(()=>{A1();J8();f8();G8();kf={readFile(J){try{TM(J)}catch(Y){if(Y.code==="ENOENT")return null;throw Y}return bM(J,"utf8")},env(J){return process.env[J]},home(){return EM()},findClaudeBinary(){return eW()},findCodexBinary(){return Z8()},findCopilotBinary(){return X8()}}});function q8(J){if(typeof J==="string")return J.length>0?[{type:"text",text:J}]:[];if(!Array.isArray(J))return[];let Y=[];for(let Z of J){if(typeof Z==="string"){if(Z.length>0)Y.push({type:"text",text:Z});continue}if(!Z||typeof Z!=="object")continue;let f=Z;if(f.type==="text"&&typeof f.text==="string"){Y.push({type:"text",text:f.text});continue}if(f.type==="tool_use"){Y.push({type:"tool_call",callId:typeof f.id==="string"?f.id:"",name:typeof f.name==="string"?f.name:"",input:f.input});continue}if(f.type==="tool_result"){Y.push({type:"tool_result",callId:typeof f.tool_use_id==="string"?f.tool_use_id:"",output:f.content,isError:f.is_error===!0});continue}if(f.type==="thinking"&&typeof f.thinking==="string")Y.push({type:"thinking",text:f.thinking})}return Y}function B8(J){return J.isMeta===!0||J.isCompactSummary===!0}function H8(J){if(J.length===0)return!1;for(let Y of J){if(Y.type!=="text")return!1;let Z=Y.text.trim();if(!Z.startsWith("<command-name>")&&!Z.startsWith("<command-message>")&&!Z.startsWith("<local-command"))return!1}return!0}import{appendFile as Ib,mkdir as Nb,readFile as vM,readdir as HB,stat as mM,unlink as bb,writeFile as Tb}from"fs/promises";import{homedir as j8}from"os";import Fz from"path";function dM(J){return J.replace(/[/.]/g,"-")}async function wX(J){if(!J)return[];let Y=Fz.join(j8(),".claude","projects",dM(J)),Z;try{Z=await HB(Y)}catch{return[]}let f=[];for(let X of Z){if(!X.endsWith(".jsonl"))continue;let G=Fz.join(Y,X),Q=0;try{Q=(await mM(G)).mtimeMs}catch{}f.push({sessionId:X.slice(0,-6),path:G,mtimeMs:Q})}return f.sort((X,G)=>G.mtimeMs-X.mtimeMs),f}async function W8(J){return(await wX(J))[0]?.mtimeMs??0}async function V8(J,Y=cM){let Z=Y.projectsDir(),f=await Y.readdir(Z);for(let X of f){let G=Fz.join(Z,X,`${J}.jsonl`),Q;try{Q=await Y.readFile(G)}catch{continue}return nM(iM(Q,J))}return[]}function nM(J){return J.map((Y,Z)=>({msg:Y,idx:Z})).sort((Y,Z)=>{if(Y.msg.timestamp<Z.msg.timestamp)return-1;if(Y.msg.timestamp>Z.msg.timestamp)return 1;return Y.idx-Z.idx}).map((Y)=>Y.msg)}function iM(J,Y){let Z=[];for(let f of J.split(`
24
- `)){let X=f.trim();if(!X)continue;let G;try{G=JSON.parse(X)}catch{continue}if(!jB(G))continue;let Q=lM(G,Y);if(Q)Z.push(Q)}return Z}function lM(J,Y){if(B8(J))return null;let Z=jB(J.message)?J.message:J,f=Z.role;if(f!=="user"&&f!=="assistant"&&f!=="system")return null;if(!("content"in Z))return null;let X=q8(Z.content);if(f==="user"&&H8(X))return null;let G=typeof J.timestamp==="string"?J.timestamp:new Date().toISOString(),Q=typeof J.sessionId==="string"?J.sessionId:Y,q=$M(Z.usage);return q?{role:f,blocks:X,timestamp:G,sessionId:Q,usage:q}:{role:f,blocks:X,timestamp:G,sessionId:Q}}function $M(J){if(!jB(J))return;let Y=typeof J.input_tokens==="number"?J.input_tokens:void 0,Z=typeof J.output_tokens==="number"?J.output_tokens:void 0;if(Y===void 0||Z===void 0)return;let f=typeof J.cache_read_input_tokens==="number"?J.cache_read_input_tokens:void 0,X=typeof J.cache_creation_input_tokens==="number"?J.cache_creation_input_tokens:void 0;return{input_tokens:Y,output_tokens:Z,...f!==void 0?{cache_read_input_tokens:f}:{},...X!==void 0?{cache_creation_input_tokens:X}:{}}}function jB(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var cM;var WB=S(()=>{cM={projectsDir(){return Fz.join(j8(),".claude","projects")},async readdir(J){try{return await HB(J)}catch{return[]}},async readFile(J){return await vM(J,"utf8")},async pathExists(J){try{return await HB(J),!0}catch{return!1}}}});import{fileURLToPath as U8}from"url";function S1(){if(import.meta.url.endsWith(".js"))return["kobe"];let Y=U8(new URL("./index.ts",import.meta.url)),Z=U8(import.meta.resolve("@opentui/solid/preload"));return[process.execPath,"--preload",Z,"--conditions=browser",Y]}var wY=()=>{};function VB(J,Y={}){if(Y.bareSafe&&aM.test(J))return J;return`'${J.replace(/'/g,"'\\''")}'`}function Oz(J,Y={}){return J.map((Z)=>VB(Z,Y)).join(" ")}var aM;var KB=S(()=>{aM=/^[A-Za-z0-9_/.:=-]+$/});function PX(J){return`kobe-hidden-${J.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function D8(J){let Y=Number.parseInt(J.replace(/^@/,""),10);return Number.isFinite(Y)&&Y>=0?1000+Y:1000}function lZ(J){if(!Number.isFinite(J))return nZ;return Math.max(pM,Math.min(_M,Math.round(J)))}function cY(J){if(!Number.isFinite(J))return null;return Math.max(rM,Math.min(oM,Math.round(J)))}function Z1(J){return VB(J)}function PJ(J){return Oz(J)}function VJ(J){return`${J}; __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 UB(J){return`'${J.replace(/'/g,"'\\''")}'`}function M8(){return`clear; printf ${UB("\\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 F8(J,Y){let Z=VJ(J),f=Y?.initScript?.trim();if(!f)return Z;let X=["{",f,"}"].join(`
25
- `);if(Y?.markerPath){let G=UB(Y.markerPath),Q=UB(sM(Y.markerPath));return[`if [ ! -f ${G} ]; then`,X,`if [ $? -eq 0 ]; then mkdir -p ${Q} && : > ${G}; fi`,"fi",Z].join(`
26
- `)}return[X,Z].join(`
27
- `)}function sM(J){let Y=J.lastIndexOf("/");return Y<=0?".":J.slice(0,Y)}function L8(J){return`cd ${Z1(J)} && while :; do clear; printf "\\033[1m# %s\\033[0m\\n\\n" ${Z1(J)}; 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 O8(J){let Y=Z1(J.worktree),Z=Z1(J.relPath),f=J.cliInvocation.map(Z1).join(" "),X=`cd ${Y} && if ! git diff --quiet HEAD -- ${Z} 2>/dev/null; then git diff HEAD -- ${Z} | { delta --paging=always 2>/dev/null || less -R; }; else bat --style=plain --paging=always ${Z} 2>/dev/null || \${PAGER:-less} ${Z} 2>/dev/null || cat ${Z}; fi`;return`${f} ops --worktree ${Y} --preview ${Z} || { ${X}; }`}function A8(J){return`${PJ([...J.cliInvocation,"update-page"])}`}function R8(J){let Y=J.opener??"open";return[`tmux -L ${Z1(J.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{} ${Y} {}`].join(" | ")}function zZ(J,Y={}){let Z=[...J,"tasks"];if(Y.initialTaskId)Z.push("--initial-task-id",Y.initialTaskId);return PJ(Z)}function Nf(J){if(J.taskId&&J.claudePaneId){let Y=J.cliInvocation.map(Z1).join(" "),Z=J.vendor?` --vendor ${Z1(J.vendor)}`:"";return`KOBE_FILETREE_WATCH=1 ${Y} ops --task-id ${Z1(J.taskId)} --worktree ${Z1(J.cwd)} --target-pane ${Z1(J.claudePaneId)}${Z} || { ${L8(J.cwd)}; }`}return L8(J.cwd)}var nZ=32,hY="tasks",If="claude",iZ="ops",PY="shell",hX="workspace_aux",LB=4,VY="@kobe_hidden_shell_pane",yJ="@kobe_hidden_tasks_pane",vY="@kobe_tasks_width",pM=16,_M=120,Az=60,vX=50,$Z="@kobe_right_width_pct",mY="@kobe_ops_height_pct",rM=10,oM=90;var KY=S(()=>{KB()});import{mkdir as tM,readFile as eM,writeFile as JF}from"fs/promises";import{dirname as YF}from"path";function ZF(J){if(typeof J!=="string")return"other";if(J==="rate_limit"||J==="overloaded")return"rate_limit";if(J==="billing_error")return"billing";return"other"}function UY(J){return!!J&&typeof J==="object"&&!Array.isArray(J)}async function XF(J){try{let Y=JSON.parse(await eM(J,"utf8"));return UY(Y)?Y:{}}catch{return{}}}function GF(J){if(!UY(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>UY(Y)&&typeof Y.command==="string"&&Y.command.includes(DB))}function zF(J){if(!UY(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>UY(Y)&&typeof Y.command==="string"&&fF.some((Z)=>Y.command.includes(Z)))}function QF(J,Y){let{hooks:Z,...f}=J,{WorktreeCreate:X,...G}=UY(Z)?Z:{},q=(Array.isArray(X)?X:[]).filter((H)=>!GF(H));if(Y!==null)q.push({hooks:[{type:"command",command:Y}]});let B={...G};if(q.length>0)B.WorktreeCreate=q;return Object.keys(B).length>0?{...f,hooks:B}:{...f}}function qF(J=S1()){let Y={};for(let{event:Z,matcher:f,verb:X}of Rz){let Q={hooks:[{type:"command",command:PJ([...J,"hook",X])}]};if(f)Q.matcher=f;Y[Z]=[Q]}return Y}function g8(J,Y,Z=S1()){let{hooks:f,...X}=J,G=UY(f)?{...f}:{},Q=Y?qF(Z):{};for(let{event:q}of Rz){let H=(Array.isArray(G[q])?G[q]:[]).filter((K)=>!zF(K));if(Y&&Array.isArray(Q[q]))H.push(...Q[q]);if(H.length>0)G[q]=H;else delete G[q]}return Object.keys(G).length>0?{...X,hooks:G}:{...X}}function BF(J=S1()){return{PostToolUse:[{matcher:"Bash",hooks:[{type:"command",command:PJ([...J,"hook",DB])}]}]}}function HF(J){if(!UY(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>UY(Y)&&typeof Y.command==="string"&&Y.command.includes(DB))}function C8(J,Y,Z=S1()){let{hooks:f,...X}=J,G=UY(f)?{...f}:{},Q="PostToolUse",B=(Array.isArray(G.PostToolUse)?G.PostToolUse:[]).filter((H)=>!HF(H));if(Y)B.push(...BF(Z).PostToolUse);if(B.length>0)G.PostToolUse=B;else delete G.PostToolUse;return Object.keys(G).length>0?{...X,hooks:G}:{...X}}class MB{vendor="claude";supportsHooks(){return!0}activityDetailFromPayload(J,Y){if(J==="turn-failed")return{failure:ZF(Y.error_type)};if(J==="awaiting-input")return{waiting:"permission"};return}supportsWorktreeSync(){return!0}async installActivityHooks(J){await this.editSettings(J,(Y)=>g8(Y,!0))}async removeActivityHooks(J){await this.editSettings(J,(Y)=>g8(Y,!1))}async removeWorktreeSyncHook(J){await this.editSettings(J,(Y)=>QF(Y,null))}async installWorktreeWatchHook(J){await this.editSettings(J,(Y)=>C8(Y,!0))}async removeWorktreeWatchHook(J){await this.editSettings(J,(Y)=>C8(Y,!1))}async editSettings(J,Y){try{let Z=await XF(J),f=Y(Z);if(JSON.stringify(f)===JSON.stringify(Z))return;await tM(YF(J),{recursive:!0}),await JF(J,`${JSON.stringify(f,null,2)}
28
- `)}catch{}}}var Rz,$b,fF,DB="worktree-created";var S8=S(()=>{wY();KY();Rz=[{event:"SessionStart",verb:"session-start"},{event:"UserPromptSubmit",verb:"turn-start"},{event:"Stop",verb:"turn-complete"},{event:"StopFailure",verb:"turn-failed"},{event:"Notification",matcher:"permission_prompt",verb:"awaiting-input"},{event:"SessionEnd",verb:"session-end"}],$b=Rz.map((J)=>J.event);fF=Rz.map((J)=>PJ(["hook",J.verb]))});function FB(J){if(typeof J==="string")return J.length>0?[{type:"text",text:J}]:[];if(!Array.isArray(J))return[];let Y=[];for(let Z of J){if(typeof Z==="string"){if(Z.length>0)Y.push({type:"text",text:Z});continue}if(!jF(Z))continue;let f=typeof Z.type==="string"?Z.type:void 0;if(f==="input_text"||f==="output_text"){let X=typeof Z.text==="string"?Z.text:"";if(X.length>0)Y.push({type:"text",text:X});continue}if(f)Y.push({type:"text",text:`[codex: ${f}]`})}return Y}function jF(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function y8(J){if(J.length===0)return!1;for(let Y of J){if(Y.type!=="text")return!1;let Z=(Y.text??"").trim();if(!WF(Z)&&!VF(Z))return!1}return!0}function WF(J){return J.startsWith("<environment_context>")&&J.endsWith("</environment_context>")}function VF(J){return J.startsWith("# AGENTS.md instructions for ")&&J.includes(`
20
+ `)}}onLine(J){let Y;try{Y=JSON.parse(J)}catch(X){zZ("client-frame",X);return}if(Y.type==="event"){this.emit(Y);return}if(Y.type!=="response")return;let Z=this.pending.get(Y.id);if(!Z)return;if(this.pending.delete(Y.id),Y.error){let X=Error(Y.error.message);if(Y.error.name)X.name=Y.error.name;Z.reject(X)}else Z.resolve(Y.payload)}emit(J){for(let Y of this.handlers.get(J.name)??[])Y(J);for(let Y of this.handlers.get("*")??[])Y(J)}}var hG=S(()=>{iZ();$Z()});function KQ(J){return xM.includes(J)}function B7(J,Y,Z){switch(Y){case"session-start":case"session-end":return"idle";case"turn-start":return"running";case"turn-complete":return"turn_complete";case"turn-failed":return Z?.failure==="rate_limit"||Z?.failure==="billing"?"rate_limited":"error";case"awaiting-input":return Z?.waiting==="permission"?"permission_needed":"running"}}var xM;var UQ=S(()=>{xM=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function wM(){let J=process.env.KOBE_ENGINE_STATE_TTL_MS;if(J===void 0)return j7;let Y=Number(J);return Number.isFinite(Y)&&Y>0?Y:j7}class VB{bus;staleMs;now;activity=new Map;constructor(J,Y=wM(),Z=()=>Date.now()){this.bus=J;this.staleMs=Y;this.now=Z}report(J,Y,Z){let X=this.activity.get(J);if(X?.lapse)clearTimeout(X.lapse);let G=B7(X?.state,Y,Z),z=this.now(),f={state:G,detail:Z,at:z};if(G!=="idle"&&G!=="turn_complete")f.lapse=setTimeout(()=>{let q=this.activity.get(J);if(q&&q.at===z)this.publishIdle(J)},this.staleMs),f.lapse.unref?.();this.activity.set(J,f),this.bus.publish("engine-state",this.payload(J,f))}clearTask(J){let Y=this.activity.get(J);if(Y?.lapse)clearTimeout(Y.lapse);if(this.activity.delete(J),Y)this.bus.publish("engine-state",{taskId:J,state:"idle",at:this.now()})}snapshotByTask(){let J={};for(let[Y,Z]of this.activity)J[Y]=this.payload(Y,Z);return J}currentNonIdle(){let J=[];for(let[Y,Z]of this.activity)if(Z.state!=="idle")J.push(this.payload(Y,Z));return J}close(){for(let J of this.activity.values())if(J.lapse)clearTimeout(J.lapse);this.activity.clear()}publishIdle(J){let Y={state:"idle",at:this.now()};this.activity.set(J,Y),this.bus.publish("engine-state",this.payload(J,Y))}payload(J,Y){return{taskId:J,state:Y.state,...Y.detail?{detail:Y.detail}:{},at:Y.at}}}var j7=600000;var H7=S(()=>{UQ()});import{spawnSync as hM}from"child_process";import{existsSync as PM,statSync as vM}from"fs";import{homedir as mM}from"os";import PG from"path";async function W7(J=cM){let Y=[],Z=(j)=>{if(!j)return;return Y.push(j),J.fileExists(j)?j:void 0},X=J.which("claude");if(X){if(Y.push(`which:${X}`),J.fileExists(X))return X}let G=J.home(),z=Z(PG.join(G,".claude","local","claude"));if(z)return z;let f=J.env("NVM_BIN");if(f){let j=Z(PG.join(f,"claude"));if(j)return j}let q=PG.join(G,".nvm","versions","node"),B=J.readdir(q).sort().reverse();for(let j of B){let K=Z(PG.join(q,j,"bin","claude"));if(K)return K}for(let j of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude","/bin/claude"]){let K=Z(j);if(K)return K}for(let j of[".local/bin/claude",".npm-global/bin/claude",".yarn/bin/claude",".bun/bin/claude","bin/claude"]){let K=Z(PG.join(G,j));if(K)return K}throw new LQ(Y)}var LQ,cM;var V7=S(()=>{LQ=class LQ extends Error{checkedPaths;constructor(J){super(`Claude Code binary not found. Checked: ${J.join(", ")}. Ensure 'claude' is on PATH, or install at ~/.claude/local/claude.`);this.name="ClaudeBinaryNotFoundError",this.checkedPaths=J}};cM={fileExists(J){try{return vM(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return mM()},which(J){let Y=process.platform==="win32"?"where":"which",Z=hM(Y,[J],{encoding:"utf8"});if(Z.status!==0)return;let X=Z.stdout.split(`
21
+ `).map((G)=>G.trim()).filter(Boolean)[0];if(!X)return;if(X.startsWith("claude:")&&X.includes("aliased to")){let G=X.split("aliased to")[1]?.trim();return G&&PM(G)?G:void 0}return X},readdir(J){try{return Pz("fs").readdirSync(J)}catch{return[]}}}});import{spawnSync as dM}from"child_process";import{existsSync as nM,statSync as iM}from"fs";import{homedir as lM}from"os";import K7 from"path";async function U7(J=$M){let Y=[],Z=(f)=>{if(!f)return;return Y.push(f),J.fileExists(f)?f:void 0},X=J.which("codex");if(X){if(Y.push(`which:${X}`),J.fileExists(X))return X}let G=J.home();for(let f of["/opt/homebrew/bin/codex","/usr/local/bin/codex","/usr/bin/codex","/bin/codex"]){let q=Z(f);if(q)return q}let z=J.env("NVM_BIN");if(z){let f=Z(K7.join(z,"codex"));if(f)return f}for(let f of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let q=Z(K7.join(G,f));if(q)return q}throw new DQ(Y)}var DQ,$M;var L7=S(()=>{DQ=class DQ extends Error{checkedPaths;constructor(J){super(`Codex CLI binary not found. Checked: ${J.join(", ")}. Ensure 'codex' is on PATH (e.g. \`brew install codex\` or the official installer).`);this.name="CodexBinaryNotFoundError",this.checkedPaths=J}};$M={fileExists(J){try{return iM(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return lM()},which(J){let Y=process.platform==="win32"?"where":"which",Z=dM(Y,[J],{encoding:"utf8"});if(Z.status!==0)return;let X=Z.stdout.split(`
22
+ `).map((G)=>G.trim()).filter(Boolean)[0];if(!X)return;if(X.startsWith("codex:")&&X.includes("aliased to")){let G=X.split("aliased to")[1]?.trim();return G&&nM(G)?G:void 0}return X},readdir(J){try{return Pz("fs").readdirSync(J)}catch{return[]}}}});import{spawnSync as aM}from"child_process";import{existsSync as pM,statSync as _M}from"fs";import{homedir as rM}from"os";import QZ from"path";async function D7(J=oM){let Y=[],Z=(K)=>{if(!K)return;return Y.push(K),J.fileExists(K)?K:void 0},X=J.which("copilot");if(X){if(Y.push(`which:${X}`),J.fileExists(X))return X}let G=J.platform()==="win32"?["copilot.exe","copilot.cmd","copilot"]:["copilot"],z=(K)=>{if(!K)return;for(let H of G){let U=Z(QZ.join(K,H));if(U)return U}return};for(let K of["/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin"]){let H=z(K);if(H)return H}let f=J.env("NVM_BIN"),q=z(f);if(q)return q;let B=J.home(),j=[QZ.join(B,".npm-global/bin"),QZ.join(B,".local/bin"),QZ.join(B,".bun/bin"),QZ.join(B,"bin")];if(J.platform()==="win32"){let K=J.env("APPDATA"),H=J.env("LOCALAPPDATA");if(j.unshift(QZ.join(B,"AppData/Roaming/npm")),K)j.unshift(QZ.join(K,"npm"));if(H)j.unshift(QZ.join(H,"npm"))}for(let K of j){let H=z(K);if(H)return H}throw new MQ(Y)}var MQ,oM;var M7=S(()=>{MQ=class MQ extends Error{checkedPaths;constructor(J){super(`GitHub Copilot CLI binary not found. Checked: ${J.join(", ")}. Ensure 'copilot' is on PATH (for example \`npm install -g @github/copilot\` or \`brew install copilot-cli\`).`);this.name="CopilotBinaryNotFoundError",this.checkedPaths=J}};oM={fileExists(J){try{return _M(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return rM()},which(J){let Y=process.platform==="win32"?"where":"which",Z=aM(Y,[J],{encoding:"utf8"});if(Z.status!==0)return;let X=Z.stdout.split(`
23
+ `).map((G)=>G.trim()).filter(Boolean)[0];if(!X)return;if(X.startsWith("copilot:")&&X.includes("aliased to")){let G=X.split("aliased to")[1]?.trim();return G&&pM(G)?G:void 0}return X},platform(){return process.platform}}});import{readFileSync as sM,statSync as tM}from"fs";import{homedir as eM}from"os";import fZ from"path";function JF(J,Y){let Z=J("CLAUDE_CONFIG_DIR")?.trim();if(Z)return fZ.join(Z,".claude.json");return fZ.join(Y,".claude.json")}function YF(J,Y){let X=J("CODEX_HOME")?.trim()??fZ.join(Y,".codex");return fZ.join(X,"auth.json")}function ZF(J,Y){let X=J("COPILOT_HOME")?.trim()??fZ.join(Y,".copilot");return fZ.join(X,"config.json")}function XF(J){let Y=J.split(".");if(Y.length!==3)return null;let Z=Y[1];if(!Z)return null;let X=Z.replace(/-/g,"+").replace(/_/g,"/"),G=X+"=".repeat((4-X.length%4)%4);try{let z=Buffer.from(G,"base64").toString("utf8"),f=JSON.parse(z);return typeof f==="object"&&f!==null?f:null}catch{return null}}async function OQ(J){try{return{found:!0,path:await J()}}catch(Y){if(Y instanceof LQ||Y instanceof DQ||Y instanceof MQ)return{found:!1,error:"not found on PATH"};return{found:!1,error:Y instanceof Error?Y.message:String(Y)}}}async function F7(J){return(await Promise.all([["claude",()=>J.findClaudeBinary()],["codex",()=>J.findCodexBinary()],["copilot",()=>J.findCopilotBinary()]].map(async([X,G])=>(await OQ(G)).found?X:null))).filter((X)=>X!==null)}function GF(J=TX){if(J!==TX)return F7(J);if(FQ)return FQ;let Y=F7(J).catch((Z)=>{throw FQ=null,Z});return FQ=Y,Y}async function mY(J=TX){return[...await GF(J),...mq()]}async function AQ(J=TX){let Y=await OQ(()=>J.findClaudeBinary()),Z=JF(J.env,J.home()),X;try{X=J.readFile(Z)}catch(B){return{binary:Y,account:{kind:"none"},accountError:`read ${Z}: ${B instanceof Error?B.message:String(B)}`}}if(X===null)return{binary:Y,account:{kind:"none"}};let G;try{G=JSON.parse(X)}catch(B){return{binary:Y,account:{kind:"none"},accountError:`parse ${Z}: ${B instanceof Error?B.message:String(B)}`}}let z=G?.oauthAccount;if(!z||typeof z!=="object")return{binary:Y,account:{kind:"none"}};let f=z,q=typeof f.emailAddress==="string"?f.emailAddress:void 0;if(!q)return{binary:Y,account:{kind:"none"}};return{binary:Y,account:{kind:"oauth",email:q,organization:typeof f.organizationName==="string"?f.organizationName:void 0,displayName:typeof f.displayName==="string"?f.displayName:void 0,billingType:typeof f.billingType==="string"?f.billingType:void 0}}}async function RQ(J=TX){let Y=await OQ(()=>J.findCodexBinary()),Z=YF(J.env,J.home()),X;try{X=J.readFile(Z)}catch(j){return{binary:Y,account:{kind:"none"},accountError:`read ${Z}: ${j instanceof Error?j.message:String(j)}`}}if(X===null)return{binary:Y,account:{kind:"none"}};let G;try{G=JSON.parse(X)}catch(j){return{binary:Y,account:{kind:"none"},accountError:`parse ${Z}: ${j instanceof Error?j.message:String(j)}`}}let z=G??{},f=z.tokens,q=typeof f?.id_token==="string"?f.id_token:void 0;if(q){let j=XF(q);if(!j)return{binary:Y,account:{kind:"none"},accountError:"codex id_token: malformed JWT"};let K=typeof j.email==="string"?j.email:void 0,H=j["https://api.openai.com/auth"],U=typeof H==="object"&&H!==null&&!Array.isArray(H)?H:void 0,L=typeof U?.chatgpt_plan_type==="string"?U.chatgpt_plan_type:void 0;if(K)return{binary:Y,account:{kind:"chatgpt",email:K,plan:L}};return{binary:Y,account:{kind:"none"},accountError:"codex id_token: no email claim"}}let B=z.OPENAI_API_KEY;if(typeof B==="string"&&B.length>0)return{binary:Y,account:{kind:"apikey"}};return{binary:Y,account:{kind:"none"}}}async function CQ(J=TX){let Y=await OQ(()=>J.findCopilotBinary());for(let z of["COPILOT_GITHUB_TOKEN","GH_TOKEN","GITHUB_TOKEN"])if(J.env(z)?.trim())return{binary:Y,account:{kind:"token",source:z}};let Z=ZF(J.env,J.home()),X;try{X=J.readFile(Z)}catch(z){return{binary:Y,account:{kind:"none"},accountError:`read ${Z}: ${z instanceof Error?z.message:String(z)}`}}if(X===null)return{binary:Y,account:{kind:"none"}};let G;try{G=JSON.parse(X)}catch(z){return{binary:Y,account:{kind:"none"},accountError:`parse ${Z}: ${z instanceof Error?z.message:String(z)}`}}if(!KB(G))return{binary:Y,account:{kind:"none"}};if(O7(G,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:Y,account:{kind:"oauth"}};return{binary:Y,account:{kind:"none"}}}function KB(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function O7(J,Y,Z=0){if(Z>4||!KB(J))return!1;for(let[X,G]of Object.entries(J)){if(Y.includes(X)&&typeof G==="string"&&G.length>0)return!0;if(KB(G)&&O7(G,Y,Z+1))return!0}return!1}var TX,FQ=null;var aZ=S(()=>{O1();V7();L7();M7();TX={readFile(J){try{tM(J)}catch(Y){if(Y.code==="ENOENT")return null;throw Y}return sM(J,"utf8")},env(J){return process.env[J]},home(){return eM()},findClaudeBinary(){return W7()},findCodexBinary(){return U7()},findCopilotBinary(){return D7()}}});function A7(J){if(typeof J==="string")return J.length>0?[{type:"text",text:J}]:[];if(!Array.isArray(J))return[];let Y=[];for(let Z of J){if(typeof Z==="string"){if(Z.length>0)Y.push({type:"text",text:Z});continue}if(!Z||typeof Z!=="object")continue;let X=Z;if(X.type==="text"&&typeof X.text==="string"){Y.push({type:"text",text:X.text});continue}if(X.type==="tool_use"){Y.push({type:"tool_call",callId:typeof X.id==="string"?X.id:"",name:typeof X.name==="string"?X.name:"",input:X.input});continue}if(X.type==="tool_result"){Y.push({type:"tool_result",callId:typeof X.tool_use_id==="string"?X.tool_use_id:"",output:X.content,isError:X.is_error===!0});continue}if(X.type==="thinking"&&typeof X.thinking==="string")Y.push({type:"thinking",text:X.thinking})}return Y}function R7(J){return J.isMeta===!0||J.isCompactSummary===!0}function C7(J){if(J.length===0)return!1;for(let Y of J){if(Y.type!=="text")return!1;let Z=Y.text.trim();if(!Z.startsWith("<command-name>")&&!Z.startsWith("<command-message>")&&!Z.startsWith("<local-command"))return!1}return!0}import{appendFile as ZT,mkdir as XT,readFile as zF,readdir as UB,stat as QF,unlink as GT,writeFile as zT}from"fs/promises";import{homedir as g7}from"os";import gQ from"path";function qF(J){return J.replace(/[/.]/g,"-")}async function vG(J){if(!J)return[];let Y=gQ.join(g7(),".claude","projects",qF(J)),Z;try{Z=await UB(Y)}catch{return[]}let X=[];for(let G of Z){if(!G.endsWith(".jsonl"))continue;let z=gQ.join(Y,G),f=0;try{f=(await QF(z)).mtimeMs}catch{}X.push({sessionId:G.slice(0,-6),path:z,mtimeMs:f})}return X.sort((G,z)=>z.mtimeMs-G.mtimeMs),X}async function y7(J){return(await vG(J))[0]?.mtimeMs??0}async function S7(J,Y=fF){let Z=Y.projectsDir(),X=await Y.readdir(Z);for(let G of X){let z=gQ.join(Z,G,`${J}.jsonl`),f;try{f=await Y.readFile(z)}catch{continue}return BF(jF(f,J))}return[]}function BF(J){return J.map((Y,Z)=>({msg:Y,idx:Z})).sort((Y,Z)=>{if(Y.msg.timestamp<Z.msg.timestamp)return-1;if(Y.msg.timestamp>Z.msg.timestamp)return 1;return Y.idx-Z.idx}).map((Y)=>Y.msg)}function jF(J,Y){let Z=[];for(let X of J.split(`
24
+ `)){let G=X.trim();if(!G)continue;let z;try{z=JSON.parse(G)}catch{continue}if(!LB(z))continue;let f=HF(z,Y);if(f)Z.push(f)}return Z}function HF(J,Y){if(R7(J))return null;let Z=LB(J.message)?J.message:J,X=Z.role;if(X!=="user"&&X!=="assistant"&&X!=="system")return null;if(!("content"in Z))return null;let G=A7(Z.content);if(X==="user"&&C7(G))return null;let z=typeof J.timestamp==="string"?J.timestamp:new Date().toISOString(),f=typeof J.sessionId==="string"?J.sessionId:Y,q=WF(Z.usage);return q?{role:X,blocks:G,timestamp:z,sessionId:f,usage:q}:{role:X,blocks:G,timestamp:z,sessionId:f}}function WF(J){if(!LB(J))return;let Y=typeof J.input_tokens==="number"?J.input_tokens:void 0,Z=typeof J.output_tokens==="number"?J.output_tokens:void 0;if(Y===void 0||Z===void 0)return;let X=typeof J.cache_read_input_tokens==="number"?J.cache_read_input_tokens:void 0,G=typeof J.cache_creation_input_tokens==="number"?J.cache_creation_input_tokens:void 0;return{input_tokens:Y,output_tokens:Z,...X!==void 0?{cache_read_input_tokens:X}:{},...G!==void 0?{cache_creation_input_tokens:G}:{}}}function LB(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var fF;var DB=S(()=>{fF={projectsDir(){return gQ.join(g7(),".claude","projects")},async readdir(J){try{return await UB(J)}catch{return[]}},async readFile(J){return await zF(J,"utf8")},async pathExists(J){try{return await UB(J),!0}catch{return!1}}}});import{fileURLToPath as I7}from"url";function R1(){if(import.meta.url.endsWith(".js"))return["kobe"];let Y=I7(new URL("./index.ts",import.meta.url)),Z=I7(import.meta.resolve("@opentui/solid/preload"));return[process.execPath,"--preload",Z,"--conditions=browser",Y]}var cY=()=>{};function MB(J,Y={}){if(Y.bareSafe&&VF.test(J))return J;return`'${J.replace(/'/g,"'\\''")}'`}function yQ(J,Y={}){return J.map((Z)=>MB(Z,Y)).join(" ")}var VF;var FB=S(()=>{VF=/^[A-Za-z0-9_/.:=-]+$/});function cG(J){return`kobe-hidden-${J.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function b7(J){let Y=Number.parseInt(J.replace(/^@/,""),10);return Number.isFinite(Y)&&Y>=0?1000+Y:1000}function _Z(J){if(!Number.isFinite(J))return pZ;return Math.max(KF,Math.min(UF,Math.round(J)))}function iY(J){if(!Number.isFinite(J))return null;return Math.max(LF,Math.min(DF,Math.round(J)))}function J1(J){return MB(J)}function MJ(J){return yQ(J)}function FJ(J){return`${J}; __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 OB(J){return`'${J.replace(/'/g,"'\\''")}'`}function T7(){return`clear; printf ${OB("\\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 E7(J,Y){let Z=FJ(J),X=Y?.initScript?.trim();if(!X)return Z;let G=["{",X,"}"].join(`
25
+ `);if(Y?.markerPath){let z=OB(Y.markerPath),f=OB(MF(Y.markerPath));return[`if [ ! -f ${z} ]; then`,G,`if [ $? -eq 0 ]; then mkdir -p ${f} && : > ${z}; fi`,"fi",Z].join(`
26
+ `)}return[G,Z].join(`
27
+ `)}function MF(J){let Y=J.lastIndexOf("/");return Y<=0?".":J.slice(0,Y)}function N7(J){return`cd ${J1(J)} && while :; do clear; printf "\\033[1m# %s\\033[0m\\n\\n" ${J1(J)}; 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 u7(J){let Y=J1(J.worktree),Z=J1(J.relPath),X=J.cliInvocation.map(J1).join(" "),G=`cd ${Y} && if ! git diff --quiet HEAD -- ${Z} 2>/dev/null; then git diff HEAD -- ${Z} | { delta --paging=always 2>/dev/null || less -R; }; else bat --style=plain --paging=always ${Z} 2>/dev/null || \${PAGER:-less} ${Z} 2>/dev/null || cat ${Z}; fi`;return`${X} ops --worktree ${Y} --preview ${Z} || { ${G}; }`}function x7(J){return`${MJ([...J.cliInvocation,"update-page"])}`}function w7(J){let Y=J.opener??"open";return[`tmux -L ${J1(J.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{} ${Y} {}`].join(" | ")}function qZ(J,Y={}){let Z=[...J,"tasks"];if(Y.initialTaskId)Z.push("--initial-task-id",Y.initialTaskId);return MJ(Z)}function xX(J){if(J.taskId&&J.claudePaneId){let Y=J.cliInvocation.map(J1).join(" "),Z=J.vendor?` --vendor ${J1(J.vendor)}`:"";return`KOBE_FILETREE_WATCH=1 ${Y} ops --task-id ${J1(J.taskId)} --worktree ${J1(J.cwd)} --target-pane ${J1(J.claudePaneId)}${Z} || { ${N7(J.cwd)}; }`}return N7(J.cwd)}var pZ=32,vJ="tasks",EX="claude",JY="ops",YY="shell",mG="workspace_aux",AB=4,ZY="@kobe_hidden_shell_pane",DJ="@kobe_hidden_tasks_pane",uX="@kobe_zen_panes",dY="@kobe_tasks_width",KF=16,UF=120,SQ=60,dG=50,rZ="@kobe_right_width_pct",nY="@kobe_ops_height_pct",LF=10,DF=90;var XY=S(()=>{FB()});import{mkdir as FF,readFile as OF,writeFile as AF}from"fs/promises";import{dirname as RF}from"path";function CF(J){if(typeof J!=="string")return"other";if(J==="rate_limit"||J==="overloaded")return"rate_limit";if(J==="billing_error")return"billing";return"other"}function RY(J){return!!J&&typeof J==="object"&&!Array.isArray(J)}async function yF(J){try{let Y=JSON.parse(await OF(J,"utf8"));return RY(Y)?Y:{}}catch{return{}}}function SF(J){if(!RY(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>RY(Y)&&typeof Y.command==="string"&&Y.command.includes(RB))}function kF(J){if(!RY(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>RY(Y)&&typeof Y.command==="string"&&gF.some((Z)=>Y.command.includes(Z)))}function IF(J,Y){let{hooks:Z,...X}=J,{WorktreeCreate:G,...z}=RY(Z)?Z:{},q=(Array.isArray(G)?G:[]).filter((j)=>!SF(j));if(Y!==null)q.push({hooks:[{type:"command",command:Y}]});let B={...z};if(q.length>0)B.WorktreeCreate=q;return Object.keys(B).length>0?{...X,hooks:B}:{...X}}function NF(J=R1()){let Y={};for(let{event:Z,matcher:X,verb:G}of kQ){let f={hooks:[{type:"command",command:MJ([...J,"hook",G])}]};if(X)f.matcher=X;Y[Z]=[f]}return Y}function h7(J,Y,Z=R1()){let{hooks:X,...G}=J,z=RY(X)?{...X}:{},f=Y?NF(Z):{};for(let{event:q}of kQ){let j=(Array.isArray(z[q])?z[q]:[]).filter((K)=>!kF(K));if(Y&&Array.isArray(f[q]))j.push(...f[q]);if(j.length>0)z[q]=j;else delete z[q]}return Object.keys(z).length>0?{...G,hooks:z}:{...G}}function bF(J=R1()){return{PostToolUse:[{matcher:"Bash",hooks:[{type:"command",command:MJ([...J,"hook",RB])}]}]}}function TF(J){if(!RY(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>RY(Y)&&typeof Y.command==="string"&&Y.command.includes(RB))}function P7(J,Y,Z=R1()){let{hooks:X,...G}=J,z=RY(X)?{...X}:{},f="PostToolUse",B=(Array.isArray(z.PostToolUse)?z.PostToolUse:[]).filter((j)=>!TF(j));if(Y)B.push(...bF(Z).PostToolUse);if(B.length>0)z.PostToolUse=B;else delete z.PostToolUse;return Object.keys(z).length>0?{...G,hooks:z}:{...G}}class CB{vendor="claude";supportsHooks(){return!0}activityDetailFromPayload(J,Y){if(J==="turn-failed")return{failure:CF(Y.error_type)};if(J==="awaiting-input")return{waiting:"permission"};return}supportsWorktreeSync(){return!0}async installActivityHooks(J){await this.editSettings(J,(Y)=>h7(Y,!0))}async removeActivityHooks(J){await this.editSettings(J,(Y)=>h7(Y,!1))}async removeWorktreeSyncHook(J){await this.editSettings(J,(Y)=>IF(Y,null))}async installWorktreeWatchHook(J){await this.editSettings(J,(Y)=>P7(Y,!0))}async removeWorktreeWatchHook(J){await this.editSettings(J,(Y)=>P7(Y,!1))}async editSettings(J,Y){try{let Z=await yF(J),X=Y(Z);if(JSON.stringify(X)===JSON.stringify(Z))return;await FF(RF(J),{recursive:!0}),await AF(J,`${JSON.stringify(X,null,2)}
28
+ `)}catch{}}}var kQ,FT,gF,RB="worktree-created";var v7=S(()=>{cY();XY();kQ=[{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"}],FT=kQ.map((J)=>J.event);gF=kQ.map((J)=>MJ(["hook",J.verb]))});function gB(J){if(typeof J==="string")return J.length>0?[{type:"text",text:J}]:[];if(!Array.isArray(J))return[];let Y=[];for(let Z of J){if(typeof Z==="string"){if(Z.length>0)Y.push({type:"text",text:Z});continue}if(!EF(Z))continue;let X=typeof Z.type==="string"?Z.type:void 0;if(X==="input_text"||X==="output_text"){let G=typeof Z.text==="string"?Z.text:"";if(G.length>0)Y.push({type:"text",text:G});continue}if(X)Y.push({type:"text",text:`[codex: ${X}]`})}return Y}function EF(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function m7(J){if(J.length===0)return!1;for(let Y of J){if(Y.type!=="text")return!1;let Z=(Y.text??"").trim();if(!uF(Z)&&!xF(Z))return!1}return!0}function uF(J){return J.startsWith("<environment_context>")&&J.endsWith("</environment_context>")}function xF(J){return J.startsWith("# AGENTS.md instructions for ")&&J.includes(`
29
29
  <INSTRUCTIONS>
30
- `)&&J.endsWith("</INSTRUCTIONS>")}var k8=()=>{};function I8(J,Y={}){let Z=OB(J.input_tokens,0),f=OB(J.cached_input_tokens,0),X=OB(J.output_tokens,0),G=Math.max(0,Z-f);if(Z<=0&&X<=0&&f<=0)return;return{input_tokens:G,output_tokens:X,...f>0?{cache_read_input_tokens:f}:{},...KF(Y.contextWindowTokens)?{context_window_tokens:Y.contextWindowTokens}:{}}}function OB(J,Y){return typeof J==="number"&&Number.isFinite(J)?J:Y}function KF(J){return typeof J==="number"&&Number.isFinite(J)&&J>0}import{readFile as UF,readdir as LF,stat as DF,unlink as tb}from"fs/promises";import{homedir as MF}from"os";import aZ from"path";async function CB(J=pZ){let Y=J.sessionsDir(),Z=(await J.readdir(Y)).sort().reverse(),f=[];for(let X of Z){let G=aZ.join(Y,X),Q=(await J.readdir(G)).sort().reverse();for(let q of Q){let B=aZ.join(G,q),H=(await J.readdir(B)).sort().reverse();for(let K of H){let j=aZ.join(B,K),U=(await J.readdir(j)).filter((L)=>L.startsWith("rollout-")&&L.endsWith(".jsonl"));U.sort().reverse();for(let L of U)f.push(aZ.join(j,L))}}}return f}async function FF(J,Y=pZ){if(!J)return;let Z=J.toLowerCase(),f=await CB(Y);for(let X of f)if(aZ.basename(X).match(E8)?.[1]?.toLowerCase()===Z)return X;return}function OF(J){for(let Y of J.split(`
31
- `)){let Z=Y.trim();if(!Z)continue;try{let f=JSON.parse(Z);if(f.type==="session_meta")return f.payload?.cwd??""}catch{}return""}return""}async function u8(J,Y){let Z=N8.get(Y);if(!Z)Z=new Map,N8.set(Y,Z);let f=Z.get(J);if(f!==void 0)return f;let X;try{X=await Y.readFile(J)}catch{return null}let G=OF(X);if(G)Z.set(J,G);return G}async function x8(J,Y=pZ){if(!J)return[];let Z=await CB(Y),f=[],X=0;for(let G of Z){if(X>=AF)break;if(X++,await u8(G,Y)!==J)continue;let Q=aZ.basename(G).match(E8)?.[1];if(Q)f.push(Q)}return f.reverse()}async function SB(J,Y=pZ){if(!J)return null;let Z=await CB(Y),f=0;for(let X of Z){if(f>=RF)break;if(f++,await u8(X,Y)!==J)continue;try{return{path:X,mtimeMs:(await Y.stat(X)).mtimeMs}}catch{}}return null}async function w8(J,Y=pZ){return(await SB(J,Y))?.mtimeMs??0}async function h8(J,Y=pZ){return(await gF(J,Y)).messages}async function gF(J,Y=pZ){let Z=await FF(J,Y);if(!Z)return{messages:[]};let f;try{f=await Y.readFile(Z)}catch{return{messages:[]}}let X=CF(SF(f,J)),G=bF(f);return{messages:X,...G?{usageMetrics:G}:{}}}function CF(J){return J.map((Y,Z)=>({msg:Y,idx:Z})).sort((Y,Z)=>{if(Y.msg.timestamp<Z.msg.timestamp)return-1;if(Y.msg.timestamp>Z.msg.timestamp)return 1;return Y.idx-Z.idx}).map((Y)=>Y.msg)}function SF(J,Y){let Z=[];for(let f of J.split(`
32
- `)){let X=f.trim();if(!X)continue;let G;try{G=JSON.parse(X)}catch{continue}if(!mX(G))continue;if(G.type!=="response_item")continue;let Q=mX(G.payload)?G.payload:void 0;if(!Q)continue;let q=typeof G.timestamp==="string"?G.timestamp:new Date().toISOString(),B=yF(Q,q,Y);if(B)Z.push(B)}return Z}function yF(J,Y,Z){if(J.type==="message"){let f=J.role;if(f!=="user"&&f!=="assistant"&&f!=="system")return;let X=FB(J.content);if(f==="user"&&y8(X))return;return{role:f,blocks:X,timestamp:Y,sessionId:Z}}if(J.type==="reasoning")return kF(J,Y,Z);if(J.type==="function_call")return AB(J,Y,Z,{name:gB(J.name,"function_call"),input:RB(J.arguments)});if(J.type==="custom_tool_call")return AB(J,Y,Z,{name:gB(J.name,"custom_tool_call"),input:RB(J.input)});if(J.type==="tool_search_call")return AB(J,Y,Z,{name:"tool_search_call",input:gz(J,["type","call_id","status"])});if(J.type==="function_call_output"||J.type==="custom_tool_call_output")return b8(J,Y,Z,RB(J.output));if(J.type==="tool_search_output")return b8(J,Y,Z,gz(J,["type","call_id"]));if(J.type==="web_search_call"||J.type==="image_generation_call"||J.type==="local_shell_call")return IF(J,Y,Z);return}function kF(J,Y,Z){let f=NF(J);if(f.length===0)return;return{role:"assistant",blocks:[{type:"thinking",text:f}],timestamp:Y,sessionId:Z}}function AB(J,Y,Z,f){let X=typeof J.call_id==="string"?J.call_id:void 0;if(!X)return;return{role:"assistant",blocks:[{type:"tool_call",callId:X,name:f.name,input:f.input}],timestamp:Y,sessionId:Z}}function b8(J,Y,Z,f){let X=typeof J.call_id==="string"?J.call_id:void 0;if(!X)return;return{role:"user",blocks:[{type:"tool_result",callId:X,output:f,isError:!1}],timestamp:Y,sessionId:Z}}function IF(J,Y,Z){let f=typeof J.type==="string"?J.type:"tool",X=typeof J.call_id==="string"&&J.call_id.length>0?J.call_id:`${f}:${Y}`,G=gB(J.name,f),Q=gz(J,["type","call_id","status"]),q=gz(J,["type","call_id"]);return{role:"assistant",timestamp:Y,sessionId:Z,blocks:[{type:"tool_call",callId:X,name:G,input:Q},{type:"tool_result",callId:X,output:q,isError:!1}]}}function NF(J){let Y=T8(J.content);if(Y.length>0)return Y;let Z=typeof J.text==="string"?J.text:"";if(Z.length>0)return Z;return T8(J.summary)}function T8(J){if(typeof J==="string")return J;if(!Array.isArray(J))return"";let Y=[];for(let Z of J){if(typeof Z==="string"){Y.push(Z);continue}if(!mX(Z))continue;let f=typeof Z.text==="string"?Z.text:"";if(f.length>0)Y.push(f)}return Y.join("")}function gz(J,Y){let Z={};for(let[f,X]of Object.entries(J))if(!Y.includes(f))Z[f]=X;return Z}function gB(J,Y){return typeof J==="string"&&J.length>0?J:Y}function RB(J){if(typeof J!=="string")return J;try{return JSON.parse(J)}catch{return J}}function bF(J){let Y,Z=null;for(let f of J.split(`
33
- `)){let X=f.trim();if(!X)continue;let G;try{G=JSON.parse(X)}catch{continue}if(!mX(G))continue;let Q=typeof G.timestamp==="string"?TF(G.timestamp):null;if(G.type==="response_item")continue;if(G.type!=="turn.completed")continue;let q=mX(G.usage)?G.usage:void 0;if(!q)continue;let B=I8(q);if(!B)continue;if(Q!==null&&(Z===null||Q>Z))Z=Q,Y=B;else if(Z===null)Y=B}return Y}function TF(J){let Y=new Date(J).getTime();return Number.isFinite(Y)?Y:null}function mX(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var pZ,E8,N8,AF=200,RF=12;var yB=S(()=>{k8();pZ={sessionsDir(){return aZ.join(MF(),".codex","sessions")},async readdir(J){try{return await LF(J)}catch{return[]}},async readFile(J){return await UF(J,"utf8")},stat:DF};E8=/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;N8=new WeakMap});function v8(J){if(!Cz(J))return;let Y=Cz(J.modelMetrics)?J.modelMetrics:void 0;if(!Y)return;let Z=0,f=0,X=0;for(let Q of Object.values(Y)){if(!Cz(Q)||!Cz(Q.usage))continue;Z+=Sz(Q.usage.inputTokens,0),f+=Sz(Q.usage.outputTokens,0),X+=Sz(Q.usage.cacheReadTokens,0)}let G=Sz(J.currentTokens,0);if(Z===0&&f===0&&X===0&&G===0)return;return{input_tokens:Z,output_tokens:f,...X>0?{cache_read_input_tokens:X}:{},...G>0?{context_tokens:G}:{}}}function Cz(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function Sz(J,Y){return typeof J==="number"&&Number.isFinite(J)?J:Y}import{readFile as EF,readdir as uF,rm as xF,stat as wF}from"fs/promises";import{homedir as hF}from"os";import QZ from"path";async function IB(J=_Z){let Y=QZ.join(J.copilotDir(),"session-state");return(await J.readdir(Y)).map((f)=>QZ.join(Y,f))}async function m8(J,Y=_Z){let Z=[];for(let f of await IB(Y)){let X=await NB(f,Y);if(X.cwd!==J)continue;Z.push({id:X.id??QZ.basename(f),updatedAt:X.updatedAt??""})}return Z.sort((f,X)=>f.updatedAt.localeCompare(X.updatedAt)).map((f)=>f.id)}async function c8(J,Y=_Z){if(!J)return 0;let Z=0;for(let f of await IB(Y)){if((await NB(f,Y)).cwd!==J)continue;try{let{mtimeMs:G}=await Y.stat(QZ.join(f,"events.jsonl"));if(G>Z)Z=G}catch{}}return Z}async function PF(J,Y=_Z){let Z=await vF(J,Y);if(!Z)return{messages:[]};let f=await Y.readFile(QZ.join(Z,"events.jsonl")).catch(()=>""),X=cF(f,J);return{messages:X.messages,...X.usageMetrics?{usageMetrics:X.usageMetrics}:{}}}async function d8(J,Y=_Z){return(await PF(J,Y)).messages}async function vF(J,Y=_Z){for(let Z of await IB(Y)){if(QZ.basename(Z)===J)return Z;let f=await NB(Z,Y);if(f.id===J||f.name?.toLowerCase()===J.toLowerCase())return Z}return}async function NB(J,Y=_Z){let Z=await Y.readFile(QZ.join(J,"workspace.yaml")).catch(()=>"");return mF(Z)}function mF(J){let Y={};for(let Z of J.split(`
34
- `)){let f=Z.match(/^([A-Za-z_]+):\s*(.*)$/);if(!f)continue;let X=f[1],G=f[2]??"";if(G.startsWith('"')&&G.endsWith('"'))G=G.slice(1,-1).replace(/\\"/g,'"');Y[X]=G}return{id:Y.id,cwd:Y.cwd,name:Y.name,updatedAt:Y.updated_at,createdAt:Y.created_at}}function cF(J,Y){let Z=[],f=new Map,X=Y,G,Q=null;for(let q of J.split(`
35
- `)){let B=q.trim();if(!B)continue;let H;try{H=JSON.parse(B)}catch{continue}if(!kB(H)||typeof H.type!=="string")continue;let K=typeof H.timestamp==="string"?H.timestamp:new Date().toISOString(),j=kB(H.data)?H.data:{};if(H.type==="session.start"){let U=typeof j.sessionId==="string"?j.sessionId:void 0;if(U)X=U;continue}if(H.type==="user.message"){let U=typeof j.content==="string"?j.content:"";if(!U)continue;if(!Q)Q=Buffer.from(U.slice(0,dF),"utf8").toString("utf8");Z.push({role:"user",blocks:[{type:"text",text:U}],timestamp:K,sessionId:X});continue}if(H.type==="assistant.message"){let U=[],L=typeof j.content==="string"?j.content:"";if(L)U.push({type:"text",text:L});let F=Array.isArray(j.toolRequests)?j.toolRequests:[];for(let D of F){if(!kB(D))continue;let O=typeof D.id==="string"?D.id:typeof D.toolCallId==="string"?D.toolCallId:"tool",A=typeof D.name==="string"?D.name:typeof D.toolName==="string"?D.toolName:"tool";U.push({type:"tool_call",callId:O,name:A,input:D.arguments??{}})}if(U.length>0)Z.push({role:"assistant",blocks:U,timestamp:K,sessionId:X});continue}if(H.type==="tool.execution_start"){let U=typeof j.toolCallId==="string"?j.toolCallId:void 0,L=typeof j.toolName==="string"?j.toolName:"tool";if(U)f.set(U,L);continue}if(H.type==="tool.execution_complete"){let U=typeof j.toolCallId==="string"?j.toolCallId:void 0;if(!U)continue;let L=f.get(U)??(typeof j.toolName==="string"?j.toolName:"tool"),F=j.result??(j.success===!1?{success:!1}:void 0);Z.push({role:"assistant",blocks:[{type:"tool_result",callId:U,output:F,isError:j.success===!1}],timestamp:K,sessionId:X});continue}if(H.type==="session.shutdown")G=v8(j)}return{messages:Z,usageMetrics:G,firstUserMessage:Q}}function kB(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var _Z,dF=200;var n8=S(()=>{_Z={copilotDir(){let J=process.env.COPILOT_HOME?.trim();if(J)return J;return QZ.join(hF(),".copilot")},async readdir(J){try{return await uF(J)}catch{return[]}},async readFile(J){return await EF(J,"utf8")},stat:wF,async rm(J){await xF(J,{recursive:!0,force:!0})}}});function bB(J){return a1(J).createHookAdapter()}class cX{vendor;constructor(J){this.vendor=J}supportsHooks(){return!1}activityDetailFromPayload(){return}async installActivityHooks(){}async removeActivityHooks(){}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(){}async installWorktreeWatchHook(){}async removeWorktreeWatchHook(){}}var TB=S(()=>{qZ()});import{readFile as i8}from"fs/promises";class yz{supportsCompletionMarkers(){return!0}}function l8(J){return a1(J).createTurnDetector()}function $F(J,Y="claude",Z=0){let f=null,X=0;for(let G of J.split(`
36
- `)){X++;let Q=$8(G);if(!Q)continue;let q=p8(Q.message)?Q.message:Q;if(q.role!=="assistant")continue;if(!("content"in q))continue;let B=a8(Q,Z),H={id:`claude:${Y}:${B}:${X}`,timestampMs:B,source:"claude"};if(!f||H.timestampMs>=f.timestampMs)f=H}return f}function aF(J,Y="codex"){let Z=null,f=0;for(let X of J.split(`
37
- `)){f++;let G=$8(X);if(!G||G.type!=="turn.completed")continue;let Q=a8(G,0),q={id:`codex:${Y}:${Q}:${f}`,timestampMs:Q,source:"codex"};if(!Z||q.timestampMs>=Z.timestampMs)Z=q}return Z}function $8(J){let Y=J.trim();if(!Y)return null;try{let Z=JSON.parse(Y);return p8(Z)?Z:null}catch{return null}}function a8(J,Y){let Z=typeof J.timestamp==="string"?Date.parse(J.timestamp):Number.NaN;return Number.isFinite(Z)?Z:Y}function p8(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var iF,EB,lF,uB,kz;var xB=S(()=>{WB();yB();qZ();iF={listSessionFiles:(J)=>wX(J),readFile:(J)=>i8(J,"utf8")};EB=class EB extends yz{deps;vendor="claude";cache=new Map;constructor(J=iF){super();this.deps=J}async latestCompletion(J){let Y=await this.deps.listSessionFiles(J),Z=null,f=new Map;for(let X of Y.slice(0,4)){let G=this.cache.get(X.path),Q;if(G&&X.mtimeMs>0&&G.mtimeMs===X.mtimeMs)Q=G.marker;else{let q=await this.deps.readFile(X.path).catch(()=>"");Q=$F(q,X.path,X.mtimeMs)}if(f.set(X.path,{mtimeMs:X.mtimeMs,marker:Q}),Q&&(!Z||Q.timestampMs>Z.timestampMs))Z=Q}return this.cache=f,Z}};lF={findLatestRollout:(J)=>SB(J),readFile:(J)=>i8(J,"utf8")};uB=class uB extends yz{deps;vendor="codex";cache=null;constructor(J=lF){super();this.deps=J}async latestCompletion(J){if(!J)return null;let Y=await this.deps.findLatestRollout(J);if(!Y)return null;if(this.cache&&this.cache.path===Y.path&&Y.mtimeMs>0&&this.cache.mtimeMs===Y.mtimeMs)return this.cache.marker;let Z=await this.deps.readFile(Y.path).catch(()=>"");if(!Z)return null;let f=aF(Z,Y.path);return this.cache={path:Y.path,mtimeMs:Y.mtimeMs,marker:f},f}};kz=class kz extends yz{vendor;constructor(J){super();this.vendor=J}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function tF(J){return{vendor:J,builtin:!1,displayName:J,defaultCommand:[J],history:pF,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new cX(J),createTurnDetector:()=>new kz(J)}}function a1(J){return e1(J)?sF[J]:tF(J)}var pF,_F,rF,oF,sF;var qZ=S(()=>{zJ();dZ();WB();S8();yB();n8();TB();xB();pF={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},_F={async listSessionIdsForWorktree(J){return[...await wX(J)].sort((Z,f)=>Z.mtimeMs-f.mtimeMs).map((Z)=>Z.sessionId)},readHistory:(J)=>V8(J),latestTranscriptMtimeForWorktree:(J)=>W8(J)},rF={listSessionIdsForWorktree:(J)=>x8(J),readHistory:(J)=>h8(J),latestTranscriptMtimeForWorktree:(J)=>w8(J)},oF={listSessionIdsForWorktree:(J)=>m8(J),readHistory:(J)=>d8(J),latestTranscriptMtimeForWorktree:(J)=>c8(J)},sF={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:_F,detectAccount:(J)=>Lz(J),createHookAdapter:()=>new MB,createTurnDetector:()=>new EB},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:rF,detectAccount:(J)=>Dz(J),createHookAdapter:()=>new cX("codex"),createTurnDetector:()=>new uB},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:oF,detectAccount:(J)=>Mz(J),createHookAdapter:()=>new cX("copilot"),createTurnDetector:()=>new kz("copilot")}}});function _8(J){let Y=J.find((X)=>X.role==="user");if(!Y)return"";let Z=Y.blocks.filter((X)=>X.type==="text").map((X)=>X.text).join(" "),f=xW(Z);return f.length>0?Buffer.from(f,"utf8").toString("utf8"):f}async function bf(J,Y=k1){if(!J)return"";let{history:Z}=a1(Y),f=await Z.listSessionIdsForWorktree(J);for(let X of f.slice(0,eF)){let G=_8(await Z.readHistory(X));if(G)return G}return""}async function r8(J,Y){if(!Y)return"";try{return _8(await a1(J).history.readHistory(Y))}catch{return""}}var eF=8;var Iz=S(()=>{qZ();RJ()});function Tf(J,Y,Z){if(!Y)return J;let f=Rf(Y);return f.ensureReady(),f.wrapCommand(J,{tty:!0,cwd:Z})}function YJ(){let J=[];for(let Y of["KOBE_HOME_DIR","KOBE_DAEMON_SOCKET_PATH","KOBE_TMUX_SOCKET"]){let Z=process.env[Y];if(Z&&Z.length>0)J.push(`${Y}=${Z1(Z)}`)}return J.length>0?`${J.join(" ")} `:""}var dX="@kobe_remote";var Ef=S(()=>{$J();KY()});var $X={};Q1($X,{windowIsSurface:()=>G3,windowCount:()=>Z3,tmuxSessionName:()=>K1,tmuxCommandSequence:()=>hB,tmuxAvailable:()=>LY,tmuxArgs:()=>rZ,tagPaneRole:()=>t8,tagClaudePane:()=>X3,switchClientBeforeKill:()=>MY,setWindowOption:()=>HZ,setSessionOption:()=>wf,sessionExists:()=>X1,sendKeys:()=>Tz,sendKeyName:()=>lX,runTmuxSequenceCapturing:()=>nX,runTmuxSequence:()=>w1,runTmuxCapturing:()=>v0,runTmux:()=>u0,paneIdByRole:()=>vB,newWindow:()=>sJ,killSession:()=>vJ,globalTasksPaneWidth:()=>bz,getSessionOptions:()=>KJ,getSessionOption:()=>Nz,getServerOptions:()=>BZ,getServerOption:()=>s8,ensureFallbackSession:()=>Ez,currentSessionName:()=>UJ,claudePaneIdStrict:()=>hf,claudePaneId:()=>mB,capturePaneById:()=>Pf,attachArgv:()=>xf,SURFACE_WINDOW_OPTION:()=>cB,PANE_ROLE_OPTION:()=>iX,KOBE_TMUX_SOCKET:()=>oJ,KOBE_HOME_SESSION:()=>e8,CLAUDE_ROLE_OPTION:()=>f3,CHAT_TAB_SESSION_ID_OPTION:()=>DY});import{homedir as J3}from"os";function rZ(...J){return["tmux","-L",oJ,...J]}function K1(J){return`kobe-${J.replace(/[^A-Za-z0-9_-]/g,"")}`}function xf(J){return rZ("attach-session","-t",`=${J}`)}async function wB(J){if(!J)return"";try{return await new Response(J).text()}catch{return""}}async function u0(J){try{let Y=Bun.spawn(rZ(...J),{stdin:"ignore",cwd:uf,stdout:"ignore",stderr:"pipe"}),[Z,f]=await Promise.all([wB(Y.stderr),Y.exited]);if(f!==0&&Z.trim().length>0)console.error(`[kobe tmux] ${J.join(" ")} (${f}): ${Z.trim()}`);return f}catch{return 1}}async function Y3(J){try{return await Bun.spawn(rZ(...J),{stdin:"ignore",cwd:uf,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function hB(J){let Y=[];for(let Z of J){if(Z.length===0)continue;if(Y.length>0)Y.push(";");Y.push(...Z)}return Y}async function w1(J){let Y=hB(J);return Y.length===0?0:u0(Y)}async function v0(J){try{let Y=Bun.spawn(rZ(...J),{stdin:"ignore",cwd:uf,stdout:"pipe",stderr:"pipe"}),[Z,f,X]=await Promise.all([wB(Y.stdout),wB(Y.stderr),Y.exited]);if(X!==0&&f.trim().length>0)console.error(`[kobe tmux] ${J.join(" ")} (${X}): ${f.trim()}`);return{code:X,stdout:Z}}catch{return{code:1,stdout:""}}}async function nX(J){let Y=hB(J);return Y.length===0?{code:0,stdout:""}:v0(Y)}async function LY(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:uf,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function X1(J){return await Y3(["has-session","-t",`=${J}`])===0}async function Z3(J){let{code:Y,stdout:Z}=await v0(["list-windows","-t",`=${J}`,"-F","#{window_id}"]);if(Y!==0)return 0;return Z.split(`
38
- `).filter((f)=>f.trim().length>0).length}async function wf(J,Y,Z){await u0(["set-option","-t",J,Y,Z])}async function Nz(J,Y){let{code:Z,stdout:f}=await v0(["show-options","-v","-t",J,Y]);return Z===0?f.trim():""}async function KJ(J,Y){let Z=Object.fromEntries(Y.map((G)=>[G,void 0])),{code:f,stdout:X}=await nX(Y.map((G)=>["show-options","-q","-t",J,G]));if(f!==0)return Z;for(let G of X.split(`
39
- `)){let Q=G.indexOf(" ");if(Q<=0)continue;let q=G.slice(0,Q);if(q in Z)Z[q]=G.slice(Q+1).trim()}return Z}async function s8(J){let{code:Y,stdout:Z}=await v0(["show-options","-sqv",J]);return Y===0?Z.trim():""}async function BZ(J){let Y=Object.fromEntries(J.map((X)=>[X,void 0])),{code:Z,stdout:f}=await nX(J.map((X)=>["show-options","-sq",X]));if(Z!==0)return Y;for(let X of f.split(`
40
- `)){let G=X.indexOf(" ");if(G<=0)continue;let Q=X.slice(0,G);if(Q in Y)Y[Q]=X.slice(G+1).trim()}return Y}async function bz(){let J=await s8(vY),Y=Number.parseInt(J,10);return Number.isFinite(Y)&&Y>0?lZ(Y):nZ}async function t8(J,Y){await u0(["set-option","-p","-t",J,iX,Y])}async function HZ(J,Y,Z){await u0(["set-window-option","-t",J,Y,Z])}async function X3(J){await t8(J,PB)}async function vB(J,Y,Z=!1){let{code:f,stdout:X}=await v0(["list-panes","-t",`=${J}`,"-F",`#{pane_id} #{${iX}}`]);if(f!==0)return"";let G="";for(let Q of X.split(`
41
- `)){let[q,B]=Q.split("\t");if(!q)continue;if(!G)G=q.trim();if(B?.trim()===Y)return q.trim()}return Z?G:""}async function mB(J){return vB(J,PB,!0)}async function hf(J){return vB(J,PB,!1)}async function Pf(J,Y){if(!J)return"";let Z=["capture-pane","-t",J,"-p"];if(typeof Y==="number"&&Y>0)Z.push("-S",String(-Y));let{code:f,stdout:X}=await v0(Z);return f===0?X:""}async function Tz(J,Y){await u0(["send-keys","-t",J,"-l","--",Y])}async function lX(J,Y){await u0(["send-keys","-t",J,Y])}async function sJ(J,Y){let Z=["new-window","-t",`=${J}`,"-c",Y.cwd];if(Y.name)Z.push("-n",Y.name);if(Y.surface){Z.push("-P","-F","#{window_id}"),Z.push(Y.command);let{code:f,stdout:X}=await v0(Z),G=X.trim();if(f===0&&G)await HZ(G,cB,"1");return}Z.push(Y.command),await u0(Z)}async function G3(J){let{code:Y,stdout:Z}=await v0(["display-message","-t",J,"-p",`#{${cB}}`]);return Y===0&&Z.trim()==="1"}async function UJ(){let J=["display-message","-p"],Y=process.env.TMUX_PANE;if(Y&&Y.length>0)J.push("-t",Y);J.push("#{session_name}");let{code:Z,stdout:f}=await v0(J),X=f.trim();return Z===0&&X.length>0?X:null}async function vJ(J){if(!J.startsWith("kobe-hidden-")){let Y=PX(J);if(await X1(Y))await u0(["kill-session","-t",`=${Y}`])}if(await X1(J))await u0(["kill-session","-t",`=${J}`])}async function Ez(){let J=e8;if(await X1(J)){if(await Nz(J,o8)==="tasks")return J;await u0(["kill-session","-t",`=${J}`])}let Z=(await v0(["new-session","-d","-s",J,"-c",uf,"-x","220","-y","50","-P","-F","#{pane_id}",M8()])).stdout.trim();if(Z){let f=await bz(),G=(await v0(["split-window","-h","-b","-t",Z,"-l",`${f}`,"-c",uf,"-P","-F","#{pane_id}",VJ(YJ()+zZ(S1()))])).stdout.trim();if(G)await w1([["set-option","-p","-t",G,iX,"tasks"],["select-pane","-t",G]])}return await wf(J,o8,"tasks"),J}async function MY(J,Y){if(await UJ()!==J)return;if(Y&&Y!==J&&await X1(Y)){await u0(["switch-client","-t",`=${Y}`]);return}let f=await Ez();await u0(["switch-client","-t",`=${f}`])}var oJ,uf,iX="@kobe_role",f3,PB="claude",DY="@kobe_session_id",cB="@kobe_surface",e8="kobe-home",o8="@kobe_home";var N1=S(()=>{wY();Ef();KY();oJ=process.env.KOBE_TMUX_SOCKET?.trim()||"kobe";uf=J3()||"/";f3=iX});async function z3(J,Y=J5){let{code:Z,stdout:f}=await Y.capture(["list-windows","-t",`=${J}`,"-F",`#{window_index} #{automatic-rename} #{${DY}}`]);if(Z!==0)return[];let X=[];for(let G of f.split(`
42
- `)){let[Q,q,B]=G.split("\t"),H=Number.parseInt((Q??"").trim(),10);if(!Number.isInteger(H))continue;X.push({index:H,sessionId:B?.trim()??"",autoRename:q?.trim()??""})}return X}async function Q3(J,Y,Z){let{code:f,stdout:X}=await Z.capture(["show-window-options","-t",`=${J}:${Y}`,"automatic-rename"]);return f===0&&/\boff\b/.test(X)}async function q3(J){let{code:Y,stdout:Z}=await J.capture(["show-window-options","-g","automatic-rename"]);return Y===0&&/\boff\b/.test(Z)}async function B3(J,Y,Z,f){return await f.run(["rename-window","-t",`=${J}:${Y}`,"--",Z])===0}async function Y5(J,Y=H3){let Z=0,f=null,X=async(G,Q)=>{if(Q.autoRename==="1")return!1;if(Q.autoRename==="0"){if(f===null)f=await q3(Y.runner);if(!f)return!0}return Q3(G,Q.index,Y.runner)};for(let G of J.listTasks()){if(G.archived||G.kind==="main"||!G.worktreePath)continue;let Q=K1(G.id),q=await z3(Q,Y.runner);if(q.length===0)continue;let B=q.reduce((K,j)=>Math.min(K,j.index),Number.POSITIVE_INFINITY),H=G.vendor??k1;for(let K of q)try{if(await X(Q,K))continue;let j=K.sessionId?await Y.titleFromSessionId(H,K.sessionId):K.index===B?await Y.titleFromWorktree(G.worktreePath,H):"";if(j&&await B3(Q,K.index,j,Y.runner))Z++}catch{}}return Z}var J5,H3;var Z5=S(()=>{Iz();N1();RJ();J5={capture:v0,run:u0};H3={runner:J5,titleFromSessionId:r8,titleFromWorktree:bf}});function X5(J){if(J instanceof Error)return J;let Y;try{Y=typeof J==="string"?J:JSON.stringify(J)}catch{Y=String(J)}return Error(Y)}function f5(J,Y,Z=new Date){let f=X5(Y);return`[${Z.toISOString()}] daemon ${J}: ${f.stack??`${f.name}: ${f.message}`}
43
- `}function j3(J,Y,Z=new Date){let f=X5(Y);return`[${Z.toISOString()}] daemon error [${J}]: ${f.stack??`${f.name}: ${f.message}`}
44
- `}function v1(J,Y){process.stderr.write(j3(J,Y))}function W3(J,Y,Z=new Date){return`[${Z.toISOString()}] daemon [${J}]: ${Y}
45
- `}function jZ(J,Y){process.stderr.write(W3(J,Y))}function G5(J=(Y)=>process.stderr.write(Y)){if(dB||nB)return;dB=(Y)=>J(f5("unhandledRejection",Y)),nB=(Y)=>J(f5("uncaughtException",Y)),process.on("unhandledRejection",dB),process.on("uncaughtException",nB)}var dB,nB;async function V3(J,Y=bf){let Z=[];for(let f of J.listTasks()){if(f.archived||f.title!==jY||!f.worktreePath)continue;try{let X=await Y(f.worktreePath,f.vendor??k1);if(!X)continue;let G=J.getTask(f.id);if(!G||G.title!==jY)continue;await J.setTitle(f.id,X),Z.push({id:f.id,title:X})}catch(X){v1("auto-title-poller",X)}}return Z}function z5(J,Y=iB,Z){if(Y<=0)return()=>{};let f=!1,G=setInterval(()=>{if(Z&&!Z())return;if(f)return;f=!0,V3(J).then(()=>Y5(J)).catch((Q)=>v1("auto-title-poller",Q)).finally(()=>{f=!1})},Y);return G.unref?.(),()=>clearInterval(G)}var iB=4000;var Q5=S(()=>{Iz();TX();Z5();RJ()});class lB{last=new Map;sinks=new Set;publish(J,Y){this.last.set(J,Y);let Z={channel:J,payload:Y};for(let f of this.sinks)f(Z)}snapshot(){return[...this.last].map(([J,Y])=>({channel:J,payload:Y}))}onPublish(J){return this.sinks.add(J),()=>{this.sinks.delete(J)}}}function uz(){return $1()[oZ]===!0}var oZ="experimental.autoStatus";var aX=S(()=>{Of()});async function q5(J,Y,Z=uz){if(!Z())return"skipped";let f=J.getTask(Y);if(!f)return"skipped";if((f.kind??"task")==="main"||f.archived)return"skipped";if(f.status!=="backlog")return"skipped";return await J.setStatus(Y,"in_progress"),"moved"}var B5=S(()=>{aX()});import{createHash as K3}from"crypto";import{homedir as U3}from"os";import VZ from"path";function O3(){return VZ.join(process.env.KOBE_HOME_DIR??U3(),".kobe")}function A3(J){let Z=(VZ.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",f=K3("sha1").update(VZ.resolve(J)).digest("hex").slice(0,12);return`${Z}-${f}`}function R3(J){if(!VZ.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return VZ.join(O3(),L3,A3(J))}function g3(J){if(!VZ.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[R3(J),...F3.map((Y)=>VZ.join(J,Y))]}function WZ(J){return J.length>1&&J.endsWith("/")?J.slice(0,-1):J}function H5(J,Y){return Y===J||Y.startsWith(`${J}/`)}function j5(J,Y){let Z=WZ(Y),f,X=-1;for(let G of J){if(!G.worktreePath)continue;let Q=WZ(G.worktreePath);if(H5(Q,Z)&&Q.length>X)X=Q.length,f=G.id}return f}function $B(J,Y){let Z=WZ(Y),f,X=-1;for(let G of J){if(!G.repo)continue;let Q=WZ(G.repo);if(H5(Q,Z)&&Q.length>X)X=Q.length,f=Q}return f}function W5(J,Y){let Z=WZ(Y),f=new Set,X=new Set;for(let G of J){if(G.repo)f.add(WZ(G.repo));if(G.worktreePath)X.add(WZ(G.worktreePath))}for(let G of f)for(let Q of g3(G).map(WZ)){let q=`${Q}/`;if(!Z.startsWith(q))continue;let H=Z.slice(q.length).split("/")[0];if(!H)continue;let K=`${q}${H}`;if(X.has(K))return;return{repo:G,worktreePath:K}}return}var L3="worktrees",D3=".kobe/worktrees",M3=".claude/worktrees",F3;var V5=S(()=>{F3=[D3,M3]});function _B(J){return{message:J instanceof Error?J.message:String(J),name:J instanceof Error?J.name:void 0}}async function pX(J,Y,Z,f){let X=J.get(Y);if(!X)throw Error(`unknown daemon request: ${Y}`);return X.handle(rB(Z),f)}function _X(){return new Map([{name:"hello",handle(Y,Z){let f=typeof Y.protocolVersion==="number"?Y.protocolVersion:wJ,X=typeof Y.minProtocolVersion==="number"?Y.minProtocolVersion:f;if(!Gz({localVersion:wJ,localMin:ZZ,remoteVersion:f,remoteMin:X}))throw Error(`daemon is protocol v${wJ} (min v${ZZ}); this client is v${f} (min v${X}). Upgrade your kobe.`);return{protocolVersion:wJ,minProtocolVersion:ZZ,kobeVersion:n0,capabilities:[...GB],daemonPid:Z.daemon.pid,clientId:Z.clientId,tasks:Z.orch.listTasks().map(rJ)}}},{name:"daemon.status",handle(Y,Z){return{daemonPid:Z.daemon.pid,kobeVersion:n0,uptimeMs:Date.now()-Z.daemon.startedAt.getTime(),startedAt:Z.daemon.startedAt.toISOString(),attachedClients:Z.daemon.guiCount(),taskCount:Z.orch.listTasks().length,socketPath:Z.daemon.socketPath,webPort:Z.daemon.webPort??null}}},{name:"daemon.stop",async handle(Y,Z){return await Z.daemon.stopSoon(),{}}},{name:"task.list",handle(Y,Z){return{tasks:Z.orch.listTasks().map(rJ)}}},{name:"task.get",handle(Y,Z){let f=D1(Y,"taskId"),X=Z.orch.getTask(f);if(!X)throw Error(`task not found: ${f}`);return{task:rJ(X)}}},{name:"task.create",async handle(Y,Z){let f=D1(Y,"repo"),X=await Z.orch.createTask({repo:f,title:mJ(Y,"title"),branch:mJ(Y,"branch"),baseRef:mJ(Y,"baseRef"),vendor:pB(Y,"vendor"),modelEffort:mJ(Y,"effort")});return{taskId:X.id,task:rJ(X)}}},{name:"task.archive",async handle(Y,Z){let f=D1(Y,"taskId");return await Z.orch.setArchived(f,aB(Y,"archived")),{}}},{name:"task.rename",async handle(Y,Z){let f=D1(Y,"taskId");return await Z.orch.setTitle(f,D1(Y,"title")),{}}},{name:"task.setBranch",async handle(Y,Z){let f=D1(Y,"taskId");return await Z.orch.setBranch(f,D1(Y,"branch")),{}}},{name:"task.setVendor",async handle(Y,Z){let f=D1(Y,"taskId"),X=pB(Y,"vendor");if(!X)throw Error("task.setVendor: vendor is required");return await Z.orch.setVendor(f,X),{}}},{name:"task.delete",async handle(Y,Z){let f=D1(Y,"taskId");return await Z.orch.deleteTask(f,{force:aB(Y,"force")}),Z.activity.clearTask(f),{}}},{name:"task.pin",async handle(Y,Z){let f=D1(Y,"taskId");return await Z.orch.setPinned(f,aB(Y,"pinned")),{}}},{name:"task.move",async handle(Y,Z){let f=D1(Y,"taskId"),X=D1(Y,"direction");if(X!=="up"&&X!=="down")throw Error("direction must be up or down");return await Z.orch.moveTask(f,X==="up"?-1:1),{}}},{name:"task.status",async handle(Y,Z){let f=D1(Y,"taskId"),X=D1(Y,"status");if(!r9(X))throw Error("status must be a TaskStatus");let G=X==="done"?Z.orch.getTask(f):void 0,Q=G?.status;if(await Z.orch.setStatus(f,X),X==="done"&&Q!=="done"&&G)try{let q=await Z.issues.mirrorTaskDone(G.repo,f);if(q)Z.bus.publish("issue.snapshot",q)}catch(q){v1("issue-done-mirror",q)}return{}}},{name:"task.reorder",async handle(Y,Z){let f=Y.moves;if(!Array.isArray(f)||f.length===0)throw Error("moves must be a non-empty array");if(f.length>500)throw Error("too many moves in one task.reorder batch (max 500)");let X=f.map((G)=>{if(typeof G!=="object"||G===null)throw Error("each move needs taskId and position");let Q=G,q=D1(Q,"taskId"),B=Q.position;if(typeof B!=="number"||!Number.isFinite(B))throw Error("position must be a finite number");return{taskId:q,position:B}});return await Z.orch.reorderTasks(X),{}}},{name:"task.ensureMain",async handle(Y,Z){let f=D1(Y,"repo"),X=await Z.orch.ensureMainTask(f);return{task:rJ(X)}}},{name:"task.ensureWorktree",async handle(Y,Z){let f=D1(Y,"taskId");Z.bus.publish("task.jobs",{taskId:f,kind:"ensureWorktree",phase:"running"});try{let X=await Z.orch.ensureWorktree(f);return Z.bus.publish("task.jobs",{taskId:f,kind:"ensureWorktree",phase:"done"}),{worktreePath:X}}catch(X){throw Z.bus.publish("task.jobs",{taskId:f,kind:"ensureWorktree",phase:"error",error:X instanceof Error?X.message:String(X)}),X}}},{name:"worktree.discoverAdoptable",async handle(Y,Z){let f=D1(Y,"repo");return{worktrees:await Z.orch.discoverAdoptableWorktrees(f)}}},{name:"worktree.adopt",async handle(Y,Z){let f=await Z.orch.adoptWorktree({repo:D1(Y,"repo"),worktreePath:D1(Y,"worktreePath"),branch:mJ(Y,"branch"),vendor:pB(Y,"vendor"),title:mJ(Y,"title"),ifExists:mJ(Y,"ifExists")==="return"?"return":"error"});return{task:rJ(f)}}},{name:"worktree.reconcile",async handle(Y,Z){let f=D1(Y,"cwd"),X=D1(Y,"worktreePath"),G=$B(Z.orch.listTasks(),f)??$B(Z.orch.listTasks(),X);if(!G)return{adopted:!1};try{return{adopted:!0,taskId:(await Z.orch.adoptWorktree({repo:G,worktreePath:X,ifExists:"return"})).id}}catch(Q){return v1("worktree-created",Q),{adopted:!1}}}},{name:"task.setActive",async handle(Y,Z){let f=mJ(Y,"taskId")??null;return await Z.orch.setActiveTask(f),Z.bus.publish("active-task",{taskId:f}),{}}},{name:"issue.list",async handle(Y,Z){return Z.issues.list(D1(Y,"repoRoot"))}},{name:"issue.mutate",async handle(Y,Z){let f=await Z.issues.mutate(D1(Y,"repoRoot"),Y.op);return Z.bus.publish("issue.snapshot",f),f}},{name:"session.deliver",async handle(Y,Z){let f=D1(Y,"taskId"),X=D1(Y,"text"),G=mJ(Y,"source");if(G!==void 0&&G!=="note"&&G!=="dispatcher")throw Error('source must be "note" or "dispatcher"');if(!Z.orch.getTask(f))throw Error(`task not found: ${f}`);return Z.bus.publish("session.deliver",{taskId:f,text:X,at:Date.now(),source:G??"dispatcher"}),{ok:!0}}},{name:"note.file",async handle(Y,Z){let f=D1(Y,"taskId"),X=D1(Y,"text"),G=Z.orch.getTask(f);if(!G)throw Error(`task not found: ${f}`);let Q=Z.orch.listTasks().find((B)=>(B.kind??"task")==="main"&&B.repo===G.repo&&!B.archived);if(!Q||Q.id===G.id)return{ok:!0,routed:!1};let q=G.title||G.branch||f;return Z.bus.publish("session.deliver",{taskId:Q.id,text:`[KOBE FIELD NOTE] from "${q}" (task ${f}): ${X}`,at:Date.now(),source:"note"}),{ok:!0,routed:!0}}},{name:"engine.reportEvent",async handle(Y,Z){let f=D1(Y,"kind");if(!Bz(f))throw Error(`unknown engine event kind: ${f}`);let X=mJ(Y,"taskId"),G=mJ(Y,"cwd");if(!X&&G&&f==="session-start"){let B=W5(Z.orch.listTasks(),G);if(B)try{await Z.orch.adoptWorktree({repo:B.repo,worktreePath:B.worktreePath,ifExists:"return"})}catch(H){v1("worktree-autosync",H)}}let Q=X??(G?j5(Z.orch.listTasks(),G):void 0);if(!Q)return{};let q=C3(Y);if(Z.activity.report(Q,f,q),f==="turn-start")q5(Z.orch,Q).then((B)=>{if(B==="moved")console.log(`[status-rules] task ${Q} auto-moved backlog \u2192 in_progress`)}).catch((B)=>v1("status-rules",B));return{}}}].map((Y)=>[Y.name,Y]))}function rB(J){if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function D1(J,Y){let Z=J[Y];if(typeof Z!=="string"||Z.length===0)throw Error(`${Y} is required`);return Z}function mJ(J,Y){let Z=J[Y];if(Z===void 0||Z===null||Z==="")return;if(typeof Z!=="string")throw Error(`${Y} must be a string`);return Z}function aB(J,Y){let Z=J[Y];if(Z===void 0||Z===null)return;if(typeof Z!=="boolean")throw Error(`${Y} must be a boolean`);return Z}function pB(J,Y){let Z=mJ(J,Y);return Z&&Z.trim().length>0?Z:void 0}function C3(J){let Y=J.detail;if(!Y||typeof Y!=="object"||Array.isArray(Y))return;let Z=Y,f={};if(Z.failure==="rate_limit"||Z.failure==="billing"||Z.failure==="other")f.failure=Z.failure;if(Z.waiting==="permission"||Z.waiting==="input")f.waiting=Z.waiting;if(typeof Z.note==="string")f.note=Z.note;return Object.keys(f).length>0?f:void 0}var xz=S(()=>{Hz();B5();RJ();QJ();V5();vZ()});import{execFile as S3}from"child_process";import{mkdir as y3,readFile as k3,realpath as K5,rename as I3,stat as N3,writeFile as b3}from"fs/promises";import{homedir as T3}from"os";import{dirname as E3,isAbsolute as u3,join as x3,resolve as U5}from"path";import{promisify as w3}from"util";function h3(J){return(J instanceof Error?J.message:String(J)).includes("not a git repository")}function hz(J=process.env.KOBE_HOME_DIR??T3()){return x3(J,".kobe","issues.json")}function D5(J){return typeof J==="string"&&L5.includes(J)}function P3(J){if(J===null||typeof J!=="object"||Array.isArray(J))return null;let Y=J;if(typeof Y.id!=="number")return null;return{id:Y.id,title:typeof Y.title==="string"?Y.title:"(untitled)",status:D5(Y.status)?Y.status:"open",created:typeof Y.created==="string"?Y.created:"",body:typeof Y.body==="string"?Y.body:"",taskId:typeof Y.taskId==="string"?Y.taskId:void 0}}function v3(){return{version:1,repos:{}}}function m3(){let J=new Date,Y=String(J.getMonth()+1).padStart(2,"0"),Z=String(J.getDate()).padStart(2,"0");return`${J.getFullYear()}-${Y}-${Z}`}async function c3(J){let{stdout:Y}=await YH("git",["-C",J,"rev-parse","--git-common-dir"]),Z=Y.trim();return K5(u3(Z)?Z:U5(J,Z))}async function d3(J){let{stdout:Y}=await YH("git",["-C",J,"rev-parse","--show-toplevel"]);return Y.trim()}async function n3(J){let{stdout:Y}=await YH("git",["-C",J,"worktree","list","--porcelain"]),Z=Y.split(/\r?\n/).find((f)=>f.startsWith("worktree "))?.slice(9).trim();return Z?K5(Z):d3(J)}async function oB(J){if(typeof J!=="string"||J.length===0)throw Error("repoRoot is required");let Y=U5(J);if(!(await N3(Y).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[f,X]=await Promise.all([n3(Y),c3(Y)]);return{repoRoot:f,repoKey:X}}catch(f){if(h3(f))throw Error("repoRoot is not a git repository");throw f}}async function sB(J){try{let Y=JSON.parse(await k3(J,"utf8")),Z={};if(Y.repos&&typeof Y.repos==="object")for(let[f,X]of Object.entries(Y.repos)){if(!X||typeof X!=="object")continue;let G=X;Z[f]={repoRoot:typeof G.repoRoot==="string"?G.repoRoot:"",nextId:typeof G.nextId==="number"?G.nextId:1,issues:Array.isArray(G.issues)?G.issues.map(P3).filter((Q)=>Q!==null):[]}}return{version:1,repos:Z}}catch(Y){if(Y.code==="ENOENT")return v3();throw Y}}async function tB(J,Y){await y3(E3(J),{recursive:!0});let Z=`${J}.tmp`;await b3(Z,`${JSON.stringify(Y,null,2)}
46
- `,"utf8"),await I3(Z,J)}function eB(J,Y){return{repoRoot:J,exists:Y!==null,nextId:Y?.nextId??1,issues:Y?.issues??[]}}async function JH(J,Y){let f=(wz.get(J)??Promise.resolve()).then(Y),X=f.then(()=>{return},()=>{return});return wz.set(J,X),X.then(()=>{if(wz.get(J)===X)wz.delete(J)}),f}class Pz{path;constructor(J=hz()){this.path=J}async list(J){let{repoRoot:Y,repoKey:Z}=await oB(J);return JH(this.path,async()=>{let f=await sB(this.path),X=f.repos[Z]??null;if(X&&X.repoRoot!==Y)X.repoRoot=Y,await tB(this.path,f);return eB(Y,X)})}async mirrorTaskDone(J,Y){let{repoRoot:Z,repoKey:f}=await oB(J);if(!Y)return null;return JH(this.path,async()=>{let X=await sB(this.path),G=X.repos[f];if(!G)return null;let Q=G.issues.find((q)=>q.taskId===Y);if(!Q||Q.status==="done")return null;return Q.status="done",G.repoRoot=Z,await tB(this.path,X),eB(Z,G)})}async mutate(J,Y){let{repoRoot:Z,repoKey:f}=await oB(J);if(!Y||typeof Y!=="object"||Array.isArray(Y)||typeof Y.type!=="string")throw Error("missing op");return JH(this.path,async()=>{let X=await sB(this.path),G=X.repos[f];if(!G)G={repoRoot:Z,nextId:1,issues:[]},X.repos[f]=G;G.repoRoot=Z;let Q=Y;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");G.issues=[{id:G.nextId,title:Q.title,status:"open",created:m3(),body:typeof Q.body==="string"?Q.body:""},...G.issues],G.nextId+=1}else if(Q.type==="setStatus"){if(typeof Q.id!=="number")throw Error("setStatus requires a numeric id");if(!D5(Q.status))throw Error(`invalid status: must be one of ${L5.join(", ")}`);let q=G.issues.find((B)=>B.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=G.issues.find((B)=>B.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=G.issues.find((B)=>B.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=G.issues.find((B)=>B.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=G.issues.filter((B)=>B.id!==Q.id);if(q.length===G.issues.length)throw Error(`no issue #${Q.id}`);G.issues=q}else throw Error(`unknown op type: ${Q.type}`);return await tB(this.path,X),eB(Z,G)})}}var YH,L5,wz;var ZH=S(()=>{YH=w3(S3),L5=["open","doing","hold","done"];wz=new Map});import{mkdirSync as i3,watch as l3}from"fs";import{basename as $3,dirname as a3}from"path";function vz(J){if(J.debounceMs<=0)return()=>{};let Y=a3(J.filePath),Z=new Set([$3(J.filePath),...J.matchBasenames??[]]),f=null,X=null,G=null,Q=()=>{try{J.onTrigger()}catch(B){J.onError(B)}},q=()=>{if(f)clearTimeout(f);f=setTimeout(()=>{f=null,Q()},J.debounceMs),f.unref?.()};try{i3(Y,{recursive:!0}),G=l3(Y,(B,H)=>{let K=H===null?null:String(H);if(K!==null&&!Z.has(K))return;q()}),G.on("error",J.onError)}catch(B){J.onError(B)}if(J.pollMs&&J.pollMs>0)X=setInterval(Q,J.pollMs),X.unref?.();return()=>{if(f)clearTimeout(f),f=null;if(X)clearInterval(X),X=null;G?.close(),G=null}}var fH=()=>{};import{homedir as p3}from"os";import{basename as _3,join as r3}from"path";function GH(J=process.env.KOBE_HOME_DIR??p3()){return r3(J,".kobe","settings","keybindings.yaml")}function M5(J,Y={}){let Z=Y.debounceMs??XH;if(Z<=0)return()=>{};let f=Y.path??GH(),X=_3(f),G=X.replace(/\.yaml$/,".yml"),Q=0;return J.publish("keybindings",{rev:Q}),vz({filePath:f,matchBasenames:[X,G],debounceMs:Z,onTrigger:()=>{try{Q+=1,J.publish("keybindings",{rev:Q})}catch(B){v1("keybindings-watcher",B)}},onError:(B)=>v1("keybindings-watcher",B)})}var XH=200;var F5=S(()=>{fH()});class zH{clients;idleGraceMs;onIdleStop;schedule;log;cancelIdle=null;stopping=!1;constructor(J){this.clients=J.clients,this.idleGraceMs=J.idleGraceMs,this.onIdleStop=J.onIdleStop,this.schedule=J.schedule??o3,this.log=J.log??jZ}guiCount(){let J=0;for(let Y of this.clients())if(Y.holdsLifetime)J++;return J}hasSubscribers(){for(let J of this.clients())if(J.subscribed)return!0;return!1}isStopping(){return this.stopping}markStopping(){this.stopping=!0,this.clearIdle()}guiAttached(){this.clearIdle()}clientDisconnected(J){if(J)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 o3=(J,Y)=>{let Z=setTimeout(J,Y);return Z.unref?.(),()=>clearTimeout(Z)};var O5=()=>{};import{readFileSync as s3}from"fs";import{homedir as t3}from"os";import{basename as e3,join as JO}from"path";function qH(J=process.env.KOBE_HOME_DIR??t3()){return JO(J,".config","kobe","state.json")}function A5(J){let Y={};try{let B=JSON.parse(s3(J,"utf8"));if(B&&typeof B==="object"&&!Array.isArray(B))Y=B}catch{}let Z=typeof Y.activeTheme==="string"&&Y.activeTheme.length>0?Y.activeTheme:"claude",f=Y.transparentBackground===!0,X=typeof Y.focusAccent==="string"&&ZO.includes(Y.focusAccent)?Y.focusAccent:null,G=Y.activeSortMode==="recent"?"recent":"default",Q=Y["tasksPane.keysCollapsed"]===!0,q=typeof Y["tasksPane.projectFilter"]==="string"&&Y["tasksPane.projectFilter"].length>0?Y["tasksPane.projectFilter"]:null;return{theme:Z,transparentBackground:f,focusAccent:X,sortMode:G,keysCollapsed:Q,projectFilter:q}}function fO(J,Y){return J.theme===Y.theme&&J.transparentBackground===Y.transparentBackground&&J.focusAccent===Y.focusAccent&&J.sortMode===Y.sortMode&&J.keysCollapsed===Y.keysCollapsed&&J.projectFilter===Y.projectFilter}function R5(J,Y={}){let Z=Y.debounceMs??QH;if(Z<=0)return()=>{};let f=Y.pollMs??YO,X=Y.statePath??qH(),G=e3(X),Q=A5(X);return J.publish("ui-prefs",Q),vz({filePath:X,matchBasenames:[G],debounceMs:Z,pollMs:f,onTrigger:()=>{try{let B=A5(X);if(fO(Q,B))return;Q=B,J.publish("ui-prefs",B)}catch(B){v1("ui-prefs-watcher",B)}},onError:(B)=>v1("ui-prefs-watcher",B)})}var QH=200,YO=250,ZO;var g5=S(()=>{fH();ZO=["primary","success","info"]});function BH(){return $1()[sZ]===!0}var sZ="experimental.dispatcher";var mz=S(()=>{Of()});import{randomUUID as XO}from"crypto";function tJ(J){return`engineCommand.${J}`}function eJ(J){return`engineName.${J}`}function tZ(J){return C1(eJ(J))?.trim()||HH[J]||J}function rX(J){return a1(J??"claude").defaultCommand}function GO(J){let Y=[],Z=/"([^"]*)"|'([^']*)'|(\S+)/g;for(let f=Z.exec(J);f!==null;f=Z.exec(J))Y.push(f[1]??f[2]??f[3]??"");return Y}function LJ(J,Y){let Z=J??"claude",f=C1(tJ(Z))?.trim(),X=(()=>{if(f){let G=GO(f);if(G.length>0)return G}return rX(Z)})();return zO(X,Z,Y)}function zO(J,Y,Z){let f=Z?.trim();if(!f)return J;let X=Y??"claude";if(!a1(X).effortLevels?.includes(f))return J;if(X==="codex")return[...J,"-c",`model_reasoning_effort=${f}`];return J}function vf(J,Y){if((Y??"claude")!=="claude")return{argv:J,sessionId:null};if(J.some((f)=>QO.has(f)))return{argv:J,sessionId:null};let Z=XO();return{argv:[...J,"--session-id",Z],sessionId:Z}}function eZ(){let J=(Y)=>/^[A-Za-z0-9_/.:=-]+$/.test(Y)?Y:`'${Y.replace(/'/g,"'\\''")}'`;try{return[...S1(),"api"].map(J).join(" ")}catch{return"kobe api"}}function qO(J,Y=eZ()){return[`You are running inside kobe (a local multi-session task manager) as task ${J}.`,"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:",` ${Y} set-status --task-id ${J} --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 BO(J,Y=eZ()){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:",` ${Y} note --task-id ${J} --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 HO(J,Y=eZ(),Z={}){let f=[];if((Z.status??uz)())f.push(qO(J,Y));if((Z.notes??BH)())f.push(BO(J,Y));return f.length>0?f.join(`
30
+ `)&&J.endsWith("</INSTRUCTIONS>")}var c7=()=>{};function d7(J,Y={}){let Z=yB(J.input_tokens,0),X=yB(J.cached_input_tokens,0),G=yB(J.output_tokens,0),z=Math.max(0,Z-X);if(Z<=0&&G<=0&&X<=0)return;return{input_tokens:z,output_tokens:G,...X>0?{cache_read_input_tokens:X}:{},...wF(Y.contextWindowTokens)?{context_window_tokens:Y.contextWindowTokens}:{}}}function yB(J,Y){return typeof J==="number"&&Number.isFinite(J)?J:Y}function wF(J){return typeof J==="number"&&Number.isFinite(J)&&J>0}import{readFile as hF,readdir as PF,stat as vF,unlink as ST}from"fs/promises";import{homedir as mF}from"os";import oZ from"path";async function NB(J=sZ){let Y=J.sessionsDir(),Z=(await J.readdir(Y)).sort().reverse(),X=[];for(let G of Z){let z=oZ.join(Y,G),f=(await J.readdir(z)).sort().reverse();for(let q of f){let B=oZ.join(z,q),j=(await J.readdir(B)).sort().reverse();for(let K of j){let H=oZ.join(B,K),U=(await J.readdir(H)).filter((L)=>L.startsWith("rollout-")&&L.endsWith(".jsonl"));U.sort().reverse();for(let L of U)X.push(oZ.join(H,L))}}}return X}async function cF(J,Y=sZ){if(!J)return;let Z=J.toLowerCase(),X=await NB(Y);for(let G of X)if(oZ.basename(G).match($7)?.[1]?.toLowerCase()===Z)return G;return}function dF(J){for(let Y of J.split(`
31
+ `)){let Z=Y.trim();if(!Z)continue;try{let X=JSON.parse(Z);if(X.type==="session_meta")return X.payload?.cwd??""}catch{}return""}return""}async function a7(J,Y){let Z=n7.get(Y);if(!Z)Z=new Map,n7.set(Y,Z);let X=Z.get(J);if(X!==void 0)return X;let G;try{G=await Y.readFile(J)}catch{return null}let z=dF(G);if(z)Z.set(J,z);return z}async function p7(J,Y=sZ){if(!J)return[];let Z=await NB(Y),X=[],G=0;for(let z of Z){if(G>=nF)break;if(G++,await a7(z,Y)!==J)continue;let f=oZ.basename(z).match($7)?.[1];if(f)X.push(f)}return X.reverse()}async function bB(J,Y=sZ){if(!J)return null;let Z=await NB(Y),X=0;for(let G of Z){if(X>=iF)break;if(X++,await a7(G,Y)!==J)continue;try{return{path:G,mtimeMs:(await Y.stat(G)).mtimeMs}}catch{}}return null}async function _7(J,Y=sZ){return(await bB(J,Y))?.mtimeMs??0}async function r7(J,Y=sZ){return(await lF(J,Y)).messages}async function lF(J,Y=sZ){let Z=await cF(J,Y);if(!Z)return{messages:[]};let X;try{X=await Y.readFile(Z)}catch{return{messages:[]}}let G=$F(aF(X,J)),z=sF(X);return{messages:G,...z?{usageMetrics:z}:{}}}function $F(J){return J.map((Y,Z)=>({msg:Y,idx:Z})).sort((Y,Z)=>{if(Y.msg.timestamp<Z.msg.timestamp)return-1;if(Y.msg.timestamp>Z.msg.timestamp)return 1;return Y.idx-Z.idx}).map((Y)=>Y.msg)}function aF(J,Y){let Z=[];for(let X of J.split(`
32
+ `)){let G=X.trim();if(!G)continue;let z;try{z=JSON.parse(G)}catch{continue}if(!nG(z))continue;if(z.type!=="response_item")continue;let f=nG(z.payload)?z.payload:void 0;if(!f)continue;let q=typeof z.timestamp==="string"?z.timestamp:new Date().toISOString(),B=pF(f,q,Y);if(B)Z.push(B)}return Z}function pF(J,Y,Z){if(J.type==="message"){let X=J.role;if(X!=="user"&&X!=="assistant"&&X!=="system")return;let G=gB(J.content);if(X==="user"&&m7(G))return;return{role:X,blocks:G,timestamp:Y,sessionId:Z}}if(J.type==="reasoning")return _F(J,Y,Z);if(J.type==="function_call")return SB(J,Y,Z,{name:IB(J.name,"function_call"),input:kB(J.arguments)});if(J.type==="custom_tool_call")return SB(J,Y,Z,{name:IB(J.name,"custom_tool_call"),input:kB(J.input)});if(J.type==="tool_search_call")return SB(J,Y,Z,{name:"tool_search_call",input:IQ(J,["type","call_id","status"])});if(J.type==="function_call_output"||J.type==="custom_tool_call_output")return i7(J,Y,Z,kB(J.output));if(J.type==="tool_search_output")return i7(J,Y,Z,IQ(J,["type","call_id"]));if(J.type==="web_search_call"||J.type==="image_generation_call"||J.type==="local_shell_call")return rF(J,Y,Z);return}function _F(J,Y,Z){let X=oF(J);if(X.length===0)return;return{role:"assistant",blocks:[{type:"thinking",text:X}],timestamp:Y,sessionId:Z}}function SB(J,Y,Z,X){let G=typeof J.call_id==="string"?J.call_id:void 0;if(!G)return;return{role:"assistant",blocks:[{type:"tool_call",callId:G,name:X.name,input:X.input}],timestamp:Y,sessionId:Z}}function i7(J,Y,Z,X){let G=typeof J.call_id==="string"?J.call_id:void 0;if(!G)return;return{role:"user",blocks:[{type:"tool_result",callId:G,output:X,isError:!1}],timestamp:Y,sessionId:Z}}function rF(J,Y,Z){let X=typeof J.type==="string"?J.type:"tool",G=typeof J.call_id==="string"&&J.call_id.length>0?J.call_id:`${X}:${Y}`,z=IB(J.name,X),f=IQ(J,["type","call_id","status"]),q=IQ(J,["type","call_id"]);return{role:"assistant",timestamp:Y,sessionId:Z,blocks:[{type:"tool_call",callId:G,name:z,input:f},{type:"tool_result",callId:G,output:q,isError:!1}]}}function oF(J){let Y=l7(J.content);if(Y.length>0)return Y;let Z=typeof J.text==="string"?J.text:"";if(Z.length>0)return Z;return l7(J.summary)}function l7(J){if(typeof J==="string")return J;if(!Array.isArray(J))return"";let Y=[];for(let Z of J){if(typeof Z==="string"){Y.push(Z);continue}if(!nG(Z))continue;let X=typeof Z.text==="string"?Z.text:"";if(X.length>0)Y.push(X)}return Y.join("")}function IQ(J,Y){let Z={};for(let[X,G]of Object.entries(J))if(!Y.includes(X))Z[X]=G;return Z}function IB(J,Y){return typeof J==="string"&&J.length>0?J:Y}function kB(J){if(typeof J!=="string")return J;try{return JSON.parse(J)}catch{return J}}function sF(J){let Y,Z=null;for(let X of J.split(`
33
+ `)){let G=X.trim();if(!G)continue;let z;try{z=JSON.parse(G)}catch{continue}if(!nG(z))continue;let f=typeof z.timestamp==="string"?tF(z.timestamp):null;if(z.type==="response_item")continue;if(z.type!=="turn.completed")continue;let q=nG(z.usage)?z.usage:void 0;if(!q)continue;let B=d7(q);if(!B)continue;if(f!==null&&(Z===null||f>Z))Z=f,Y=B;else if(Z===null)Y=B}return Y}function tF(J){let Y=new Date(J).getTime();return Number.isFinite(Y)?Y:null}function nG(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var sZ,$7,n7,nF=200,iF=12;var TB=S(()=>{c7();sZ={sessionsDir(){return oZ.join(mF(),".codex","sessions")},async readdir(J){try{return await PF(J)}catch{return[]}},async readFile(J){return await hF(J,"utf8")},stat:vF};$7=/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;n7=new WeakMap});function s7(J){if(!NQ(J))return;let Y=NQ(J.modelMetrics)?J.modelMetrics:void 0;if(!Y)return;let Z=0,X=0,G=0;for(let f of Object.values(Y)){if(!NQ(f)||!NQ(f.usage))continue;Z+=bQ(f.usage.inputTokens,0),X+=bQ(f.usage.outputTokens,0),G+=bQ(f.usage.cacheReadTokens,0)}let z=bQ(J.currentTokens,0);if(Z===0&&X===0&&G===0&&z===0)return;return{input_tokens:Z,output_tokens:X,...G>0?{cache_read_input_tokens:G}:{},...z>0?{context_tokens:z}:{}}}function NQ(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function bQ(J,Y){return typeof J==="number"&&Number.isFinite(J)?J:Y}import{readFile as eF,readdir as J3,rm as Y3,stat as Z3}from"fs/promises";import{homedir as X3}from"os";import BZ from"path";async function uB(J=tZ){let Y=BZ.join(J.copilotDir(),"session-state");return(await J.readdir(Y)).map((X)=>BZ.join(Y,X))}async function t7(J,Y=tZ){let Z=[];for(let X of await uB(Y)){let G=await xB(X,Y);if(G.cwd!==J)continue;Z.push({id:G.id??BZ.basename(X),updatedAt:G.updatedAt??""})}return Z.sort((X,G)=>X.updatedAt.localeCompare(G.updatedAt)).map((X)=>X.id)}async function e7(J,Y=tZ){if(!J)return 0;let Z=0;for(let X of await uB(Y)){if((await xB(X,Y)).cwd!==J)continue;try{let{mtimeMs:z}=await Y.stat(BZ.join(X,"events.jsonl"));if(z>Z)Z=z}catch{}}return Z}async function G3(J,Y=tZ){let Z=await z3(J,Y);if(!Z)return{messages:[]};let X=await Y.readFile(BZ.join(Z,"events.jsonl")).catch(()=>""),G=f3(X,J);return{messages:G.messages,...G.usageMetrics?{usageMetrics:G.usageMetrics}:{}}}async function JV(J,Y=tZ){return(await G3(J,Y)).messages}async function z3(J,Y=tZ){for(let Z of await uB(Y)){if(BZ.basename(Z)===J)return Z;let X=await xB(Z,Y);if(X.id===J||X.name?.toLowerCase()===J.toLowerCase())return Z}return}async function xB(J,Y=tZ){let Z=await Y.readFile(BZ.join(J,"workspace.yaml")).catch(()=>"");return Q3(Z)}function Q3(J){let Y={};for(let Z of J.split(`
34
+ `)){let X=Z.match(/^([A-Za-z_]+):\s*(.*)$/);if(!X)continue;let G=X[1],z=X[2]??"";if(z.startsWith('"')&&z.endsWith('"'))z=z.slice(1,-1).replace(/\\"/g,'"');Y[G]=z}return{id:Y.id,cwd:Y.cwd,name:Y.name,updatedAt:Y.updated_at,createdAt:Y.created_at}}function f3(J,Y){let Z=[],X=new Map,G=Y,z,f=null;for(let q of J.split(`
35
+ `)){let B=q.trim();if(!B)continue;let j;try{j=JSON.parse(B)}catch{continue}if(!EB(j)||typeof j.type!=="string")continue;let K=typeof j.timestamp==="string"?j.timestamp:new Date().toISOString(),H=EB(j.data)?j.data:{};if(j.type==="session.start"){let U=typeof H.sessionId==="string"?H.sessionId:void 0;if(U)G=U;continue}if(j.type==="user.message"){let U=typeof H.content==="string"?H.content:"";if(!U)continue;if(!f)f=Buffer.from(U.slice(0,q3),"utf8").toString("utf8");Z.push({role:"user",blocks:[{type:"text",text:U}],timestamp:K,sessionId:G});continue}if(j.type==="assistant.message"){let U=[],L=typeof H.content==="string"?H.content:"";if(L)U.push({type:"text",text:L});let F=Array.isArray(H.toolRequests)?H.toolRequests:[];for(let D of F){if(!EB(D))continue;let A=typeof D.id==="string"?D.id:typeof D.toolCallId==="string"?D.toolCallId:"tool",R=typeof D.name==="string"?D.name:typeof D.toolName==="string"?D.toolName:"tool";U.push({type:"tool_call",callId:A,name:R,input:D.arguments??{}})}if(U.length>0)Z.push({role:"assistant",blocks:U,timestamp:K,sessionId:G});continue}if(j.type==="tool.execution_start"){let U=typeof H.toolCallId==="string"?H.toolCallId:void 0,L=typeof H.toolName==="string"?H.toolName:"tool";if(U)X.set(U,L);continue}if(j.type==="tool.execution_complete"){let U=typeof H.toolCallId==="string"?H.toolCallId:void 0;if(!U)continue;let L=X.get(U)??(typeof H.toolName==="string"?H.toolName:"tool"),F=H.result??(H.success===!1?{success:!1}:void 0);Z.push({role:"assistant",blocks:[{type:"tool_result",callId:U,output:F,isError:H.success===!1}],timestamp:K,sessionId:G});continue}if(j.type==="session.shutdown")z=s7(H)}return{messages:Z,usageMetrics:z,firstUserMessage:f}}function EB(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var tZ,q3=200;var YV=S(()=>{tZ={copilotDir(){let J=process.env.COPILOT_HOME?.trim();if(J)return J;return BZ.join(X3(),".copilot")},async readdir(J){try{return await J3(J)}catch{return[]}},async readFile(J){return await eF(J,"utf8")},stat:Z3,async rm(J){await Y3(J,{recursive:!0,force:!0})}}});function wB(J){return a1(J).createHookAdapter()}class iG{vendor;constructor(J){this.vendor=J}supportsHooks(){return!1}activityDetailFromPayload(){return}async installActivityHooks(){}async removeActivityHooks(){}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(){}async installWorktreeWatchHook(){}async removeWorktreeWatchHook(){}}var hB=S(()=>{jZ()});import{readFile as ZV}from"fs/promises";class TQ{supportsCompletionMarkers(){return!0}}function XV(J){return a1(J).createTurnDetector()}function W3(J,Y="claude",Z=0){let X=null,G=0;for(let z of J.split(`
36
+ `)){G++;let f=GV(z);if(!f)continue;let q=QV(f.message)?f.message:f;if(q.role!=="assistant")continue;if(!("content"in q))continue;let B=zV(f,Z),j={id:`claude:${Y}:${B}:${G}`,timestampMs:B,source:"claude"};if(!X||j.timestampMs>=X.timestampMs)X=j}return X}function V3(J,Y="codex"){let Z=null,X=0;for(let G of J.split(`
37
+ `)){X++;let z=GV(G);if(!z||z.type!=="turn.completed")continue;let f=zV(z,0),q={id:`codex:${Y}:${f}:${X}`,timestampMs:f,source:"codex"};if(!Z||q.timestampMs>=Z.timestampMs)Z=q}return Z}function GV(J){let Y=J.trim();if(!Y)return null;try{let Z=JSON.parse(Y);return QV(Z)?Z:null}catch{return null}}function zV(J,Y){let Z=typeof J.timestamp==="string"?Date.parse(J.timestamp):Number.NaN;return Number.isFinite(Z)?Z:Y}function QV(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var j3,PB,H3,vB,EQ;var mB=S(()=>{DB();TB();jZ();j3={listSessionFiles:(J)=>vG(J),readFile:(J)=>ZV(J,"utf8")};PB=class PB extends TQ{deps;vendor="claude";cache=new Map;constructor(J=j3){super();this.deps=J}async latestCompletion(J){let Y=await this.deps.listSessionFiles(J),Z=null,X=new Map;for(let G of Y.slice(0,4)){let z=this.cache.get(G.path),f;if(z&&G.mtimeMs>0&&z.mtimeMs===G.mtimeMs)f=z.marker;else{let q=await this.deps.readFile(G.path).catch(()=>"");f=W3(q,G.path,G.mtimeMs)}if(X.set(G.path,{mtimeMs:G.mtimeMs,marker:f}),f&&(!Z||f.timestampMs>Z.timestampMs))Z=f}return this.cache=X,Z}};H3={findLatestRollout:(J)=>bB(J),readFile:(J)=>ZV(J,"utf8")};vB=class vB extends TQ{deps;vendor="codex";cache=null;constructor(J=H3){super();this.deps=J}async latestCompletion(J){if(!J)return null;let Y=await this.deps.findLatestRollout(J);if(!Y)return null;if(this.cache&&this.cache.path===Y.path&&Y.mtimeMs>0&&this.cache.mtimeMs===Y.mtimeMs)return this.cache.marker;let Z=await this.deps.readFile(Y.path).catch(()=>"");if(!Z)return null;let X=V3(Z,Y.path);return this.cache={path:Y.path,mtimeMs:Y.mtimeMs,marker:X},X}};EQ=class EQ extends TQ{vendor;constructor(J){super();this.vendor=J}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function F3(J){return{vendor:J,builtin:!1,displayName:J,defaultCommand:[J],history:K3,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new iG(J),createTurnDetector:()=>new EQ(J)}}function a1(J){return XJ(J)?M3[J]:F3(J)}var K3,U3,L3,D3,M3;var jZ=S(()=>{BJ();aZ();DB();v7();TB();YV();hB();mB();K3={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},U3={async listSessionIdsForWorktree(J){return[...await vG(J)].sort((Z,X)=>Z.mtimeMs-X.mtimeMs).map((Z)=>Z.sessionId)},readHistory:(J)=>S7(J),latestTranscriptMtimeForWorktree:(J)=>y7(J)},L3={listSessionIdsForWorktree:(J)=>p7(J),readHistory:(J)=>r7(J),latestTranscriptMtimeForWorktree:(J)=>_7(J)},D3={listSessionIdsForWorktree:(J)=>t7(J),readHistory:(J)=>JV(J),latestTranscriptMtimeForWorktree:(J)=>e7(J)},M3={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:U3,detectAccount:(J)=>AQ(J),createHookAdapter:()=>new CB,createTurnDetector:()=>new PB},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:L3,detectAccount:(J)=>RQ(J),createHookAdapter:()=>new iG("codex"),createTurnDetector:()=>new vB},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:D3,detectAccount:(J)=>CQ(J),createHookAdapter:()=>new iG("copilot"),createTurnDetector:()=>new EQ("copilot")}}});function fV(J){let Y=J.find((G)=>G.role==="user");if(!Y)return"";let Z=Y.blocks.filter((G)=>G.type==="text").map((G)=>G.text).join(" "),X=p9(Z);return X.length>0?Buffer.from(X,"utf8").toString("utf8"):X}async function wX(J,Y=k1){if(!J)return"";let{history:Z}=a1(Y),X=await Z.listSessionIdsForWorktree(J);for(let G of X.slice(0,O3)){let z=fV(await Z.readHistory(G));if(z)return z}return""}async function qV(J,Y){if(!Y)return"";try{return fV(await a1(J).history.readHistory(Y))}catch{return""}}var O3=8;var uQ=S(()=>{jZ();SJ()});function hX(J,Y,Z){if(!Y)return J;let X=SX(Y);return X.ensureReady(),X.wrapCommand(J,{tty:!0,cwd:Z})}function p1(){let J=[];for(let Y of["KOBE_HOME_DIR","KOBE_DAEMON_SOCKET_PATH","KOBE_TMUX_SOCKET"]){let Z=process.env[Y];if(Z&&Z.length>0)J.push(`${Y}=${J1(Z)}`)}return J.length>0?`${J.join(" ")} `:""}var lG="@kobe_remote";var eZ=S(()=>{rJ();XY()});var _G={};q1(_G,{windowIsSurface:()=>S3,windowCount:()=>C3,tmuxSessionName:()=>K1,tmuxCommandSequence:()=>dB,tmuxAvailable:()=>CY,tmuxArgs:()=>JX,tagPaneRole:()=>HV,tagClaudePane:()=>y3,switchClientBeforeKill:()=>yY,setWindowOption:()=>WZ,setSessionOption:()=>mX,sessionExists:()=>f1,sendKeys:()=>hQ,sendKeyName:()=>pG,runTmuxSequenceCapturing:()=>$G,runTmuxSequence:()=>w1,runTmuxCapturing:()=>c0,runTmux:()=>u0,paneIdByRole:()=>iB,newWindow:()=>zY,killSession:()=>mJ,globalTasksPaneWidth:()=>wQ,getSessionOptions:()=>OJ,getSessionOption:()=>xQ,getServerOptions:()=>HZ,getServerOption:()=>jV,ensureFallbackSession:()=>PQ,currentSessionName:()=>AJ,claudePaneIdStrict:()=>cX,claudePaneId:()=>lB,capturePaneById:()=>dX,attachArgv:()=>vX,SURFACE_WINDOW_OPTION:()=>$B,PANE_ROLE_OPTION:()=>aG,KOBE_TMUX_SOCKET:()=>GY,KOBE_HOME_SESSION:()=>WV,CLAUDE_ROLE_OPTION:()=>g3,CHAT_TAB_SESSION_ID_OPTION:()=>gY});import{homedir as A3}from"os";function JX(...J){return["tmux","-L",GY,...J]}function K1(J){return`kobe-${J.replace(/[^A-Za-z0-9_-]/g,"")}`}function vX(J){return JX("attach-session","-t",`=${J}`)}async function cB(J){if(!J)return"";try{return await new Response(J).text()}catch{return""}}async function u0(J){try{let Y=Bun.spawn(JX(...J),{stdin:"ignore",cwd:PX,stdout:"ignore",stderr:"pipe"}),[Z,X]=await Promise.all([cB(Y.stderr),Y.exited]);if(X!==0&&Z.trim().length>0)console.error(`[kobe tmux] ${J.join(" ")} (${X}): ${Z.trim()}`);return X}catch{return 1}}async function R3(J){try{return await Bun.spawn(JX(...J),{stdin:"ignore",cwd:PX,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function dB(J){let Y=[];for(let Z of J){if(Z.length===0)continue;if(Y.length>0)Y.push(";");Y.push(...Z)}return Y}async function w1(J){let Y=dB(J);return Y.length===0?0:u0(Y)}async function c0(J){try{let Y=Bun.spawn(JX(...J),{stdin:"ignore",cwd:PX,stdout:"pipe",stderr:"pipe"}),[Z,X,G]=await Promise.all([cB(Y.stdout),cB(Y.stderr),Y.exited]);if(G!==0&&X.trim().length>0)console.error(`[kobe tmux] ${J.join(" ")} (${G}): ${X.trim()}`);return{code:G,stdout:Z}}catch{return{code:1,stdout:""}}}async function $G(J){let Y=dB(J);return Y.length===0?{code:0,stdout:""}:c0(Y)}async function CY(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:PX,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function f1(J){return await R3(["has-session","-t",`=${J}`])===0}async function C3(J){let{code:Y,stdout:Z}=await c0(["list-windows","-t",`=${J}`,"-F","#{window_id}"]);if(Y!==0)return 0;return Z.split(`
38
+ `).filter((X)=>X.trim().length>0).length}async function mX(J,Y,Z){await u0(["set-option","-t",J,Y,Z])}async function xQ(J,Y){let{code:Z,stdout:X}=await c0(["show-options","-v","-t",J,Y]);return Z===0?X.trim():""}async function OJ(J,Y){let Z=Object.fromEntries(Y.map((z)=>[z,void 0])),{code:X,stdout:G}=await $G(Y.map((z)=>["show-options","-q","-t",J,z]));if(X!==0)return Z;for(let z of G.split(`
39
+ `)){let f=z.indexOf(" ");if(f<=0)continue;let q=z.slice(0,f);if(q in Z)Z[q]=z.slice(f+1).trim()}return Z}async function jV(J){let{code:Y,stdout:Z}=await c0(["show-options","-sqv",J]);return Y===0?Z.trim():""}async function HZ(J){let Y=Object.fromEntries(J.map((G)=>[G,void 0])),{code:Z,stdout:X}=await $G(J.map((G)=>["show-options","-sq",G]));if(Z!==0)return Y;for(let G of X.split(`
40
+ `)){let z=G.indexOf(" ");if(z<=0)continue;let f=G.slice(0,z);if(f in Y)Y[f]=G.slice(z+1).trim()}return Y}async function wQ(){let J=await jV(dY),Y=Number.parseInt(J,10);return Number.isFinite(Y)&&Y>0?_Z(Y):pZ}async function HV(J,Y){await u0(["set-option","-p","-t",J,aG,Y])}async function WZ(J,Y,Z){await u0(["set-window-option","-t",J,Y,Z])}async function y3(J){await HV(J,nB)}async function iB(J,Y,Z=!1){let{code:X,stdout:G}=await c0(["list-panes","-t",`=${J}`,"-F",`#{pane_id} #{${aG}}`]);if(X!==0)return"";let z="";for(let f of G.split(`
41
+ `)){let[q,B]=f.split("\t");if(!q)continue;if(!z)z=q.trim();if(B?.trim()===Y)return q.trim()}return Z?z:""}async function lB(J){return iB(J,nB,!0)}async function cX(J){return iB(J,nB,!1)}async function dX(J,Y){if(!J)return"";let Z=["capture-pane","-t",J,"-p"];if(typeof Y==="number"&&Y>0)Z.push("-S",String(-Y));let{code:X,stdout:G}=await c0(Z);return X===0?G:""}async function hQ(J,Y){await u0(["send-keys","-t",J,"-l","--",Y])}async function pG(J,Y){await u0(["send-keys","-t",J,Y])}async function zY(J,Y){let Z=["new-window","-t",`=${J}`,"-c",Y.cwd];if(Y.name)Z.push("-n",Y.name);if(Y.surface){Z.push("-P","-F","#{window_id}"),Z.push(Y.command);let{code:X,stdout:G}=await c0(Z),z=G.trim();if(X===0&&z)await WZ(z,$B,"1");return}Z.push(Y.command),await u0(Z)}async function S3(J){let{code:Y,stdout:Z}=await c0(["display-message","-t",J,"-p",`#{${$B}}`]);return Y===0&&Z.trim()==="1"}async function AJ(){let J=["display-message","-p"],Y=process.env.TMUX_PANE;if(Y&&Y.length>0)J.push("-t",Y);J.push("#{session_name}");let{code:Z,stdout:X}=await c0(J),G=X.trim();return Z===0&&G.length>0?G:null}async function mJ(J){if(!J.startsWith("kobe-hidden-")){let Y=cG(J);if(await f1(Y))await u0(["kill-session","-t",`=${Y}`])}if(await f1(J))await u0(["kill-session","-t",`=${J}`])}async function PQ(){let J=WV;if(await f1(J)){if(await xQ(J,BV)==="tasks")return J;await u0(["kill-session","-t",`=${J}`])}let Z=(await c0(["new-session","-d","-s",J,"-c",PX,"-x","220","-y","50","-P","-F","#{pane_id}",T7()])).stdout.trim();if(Z){let X=await wQ(),z=(await c0(["split-window","-h","-b","-t",Z,"-l",`${X}`,"-c",PX,"-P","-F","#{pane_id}",FJ(p1()+qZ(R1()))])).stdout.trim();if(z)await w1([["set-option","-p","-t",z,aG,"tasks"],["select-pane","-t",z]])}return await mX(J,BV,"tasks"),J}async function yY(J,Y){if(await AJ()!==J)return;if(Y&&Y!==J&&await f1(Y)){await u0(["switch-client","-t",`=${Y}`]);return}let X=await PQ();await u0(["switch-client","-t",`=${X}`])}var GY,PX,aG="@kobe_role",g3,nB="claude",gY="@kobe_session_id",$B="@kobe_surface",WV="kobe-home",BV="@kobe_home";var N1=S(()=>{cY();eZ();XY();GY=process.env.KOBE_TMUX_SOCKET?.trim()||"kobe";PX=A3()||"/";g3=aG});async function k3(J,Y=VV){let{code:Z,stdout:X}=await Y.capture(["list-windows","-t",`=${J}`,"-F",`#{window_index} #{automatic-rename} #{${gY}}`]);if(Z!==0)return[];let G=[];for(let z of X.split(`
42
+ `)){let[f,q,B]=z.split("\t"),j=Number.parseInt((f??"").trim(),10);if(!Number.isInteger(j))continue;G.push({index:j,sessionId:B?.trim()??"",autoRename:q?.trim()??""})}return G}async function I3(J,Y,Z){let{code:X,stdout:G}=await Z.capture(["show-window-options","-t",`=${J}:${Y}`,"automatic-rename"]);return X===0&&/\boff\b/.test(G)}async function N3(J){let{code:Y,stdout:Z}=await J.capture(["show-window-options","-g","automatic-rename"]);return Y===0&&/\boff\b/.test(Z)}async function b3(J,Y,Z,X){return await X.run(["rename-window","-t",`=${J}:${Y}`,"--",Z])===0}async function KV(J,Y=T3){let Z=0,X=null,G=async(z,f)=>{if(f.autoRename==="1")return!1;if(f.autoRename==="0"){if(X===null)X=await N3(Y.runner);if(!X)return!0}return I3(z,f.index,Y.runner)};for(let z of J.listTasks()){if(z.archived||z.kind==="main"||!z.worktreePath)continue;let f=K1(z.id),q=await k3(f,Y.runner);if(q.length===0)continue;let B=q.reduce((K,H)=>Math.min(K,H.index),Number.POSITIVE_INFINITY),j=z.vendor??k1;for(let K of q)try{if(await G(f,K))continue;let H=K.sessionId?await Y.titleFromSessionId(j,K.sessionId):K.index===B?await Y.titleFromWorktree(z.worktreePath,j):"";if(H&&await b3(f,K.index,H,Y.runner))Z++}catch{}}return Z}var VV,T3;var UV=S(()=>{uQ();N1();SJ();VV={capture:c0,run:u0};T3={runner:VV,titleFromSessionId:qV,titleFromWorktree:wX}});function DV(J){if(J instanceof Error)return J;let Y;try{Y=typeof J==="string"?J:JSON.stringify(J)}catch{Y=String(J)}return Error(Y)}function LV(J,Y,Z=new Date){let X=DV(Y);return`[${Z.toISOString()}] daemon ${J}: ${X.stack??`${X.name}: ${X.message}`}
43
+ `}function E3(J,Y,Z=new Date){let X=DV(Y);return`[${Z.toISOString()}] daemon error [${J}]: ${X.stack??`${X.name}: ${X.message}`}
44
+ `}function b1(J,Y){process.stderr.write(E3(J,Y))}function u3(J,Y,Z=new Date){return`[${Z.toISOString()}] daemon [${J}]: ${Y}
45
+ `}function VZ(J,Y){process.stderr.write(u3(J,Y))}function MV(J=(Y)=>process.stderr.write(Y)){if(aB||pB)return;aB=(Y)=>J(LV("unhandledRejection",Y)),pB=(Y)=>J(LV("uncaughtException",Y)),process.on("unhandledRejection",aB),process.on("uncaughtException",pB)}var aB,pB;async function x3(J,Y=wX){let Z=[];for(let X of J.listTasks()){if(X.archived||X.title!==OY||!X.worktreePath)continue;try{let G=await Y(X.worktreePath,X.vendor??k1);if(!G)continue;let z=J.getTask(X.id);if(!z||z.title!==OY)continue;await J.setTitle(X.id,G),Z.push({id:X.id,title:G})}catch(G){b1("auto-title-poller",G)}}return Z}function FV(J,Y=_B,Z){if(Y<=0)return()=>{};let X=!1,z=setInterval(()=>{if(Z&&!Z())return;if(X)return;X=!0,x3(J).then(()=>KV(J)).catch((f)=>b1("auto-title-poller",f)).finally(()=>{X=!1})},Y);return z.unref?.(),()=>clearInterval(z)}var _B=4000;var OV=S(()=>{uQ();xG();UV();SJ()});class rB{last=new Map;sinks=new Set;publish(J,Y){this.last.set(J,Y);let Z={channel:J,payload:Y};for(let X of this.sinks)X(Z)}snapshot(){return[...this.last].map(([J,Y])=>({channel:J,payload:Y}))}onPublish(J){return this.sinks.add(J),()=>{this.sinks.delete(J)}}}function vQ(){return c1()[YX]===!0}var YX="experimental.autoStatus";var rG=S(()=>{cZ()});async function AV(J,Y,Z=vQ){if(!Z())return"skipped";let X=J.getTask(Y);if(!X)return"skipped";if((X.kind??"task")==="main"||X.archived)return"skipped";if(X.status!=="backlog")return"skipped";return await J.setStatus(Y,"in_progress"),"moved"}var RV=S(()=>{rG()});import{createHash as w3}from"crypto";import{homedir as h3}from"os";import UZ from"path";function d3(){return UZ.join(process.env.KOBE_HOME_DIR??h3(),".kobe")}function n3(J){let Z=(UZ.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",X=w3("sha1").update(UZ.resolve(J)).digest("hex").slice(0,12);return`${Z}-${X}`}function i3(J){if(!UZ.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return UZ.join(d3(),P3,n3(J))}function l3(J){if(!UZ.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[i3(J),...c3.map((Y)=>UZ.join(J,Y))]}function KZ(J){return J.length>1&&J.endsWith("/")?J.slice(0,-1):J}function CV(J,Y){return Y===J||Y.startsWith(`${J}/`)}function gV(J,Y){let Z=KZ(Y),X,G=-1;for(let z of J){if(!z.worktreePath)continue;let f=KZ(z.worktreePath);if(CV(f,Z)&&f.length>G)G=f.length,X=z.id}return X}function oB(J,Y){let Z=KZ(Y),X,G=-1;for(let z of J){if(!z.repo)continue;let f=KZ(z.repo);if(CV(f,Z)&&f.length>G)G=f.length,X=f}return X}function yV(J,Y){let Z=KZ(Y),X=new Set,G=new Set;for(let z of J){if(z.repo)X.add(KZ(z.repo));if(z.worktreePath)G.add(KZ(z.worktreePath))}for(let z of X)for(let f of l3(z).map(KZ)){let q=`${f}/`;if(!Z.startsWith(q))continue;let j=Z.slice(q.length).split("/")[0];if(!j)continue;let K=`${q}${j}`;if(G.has(K))return;return{repo:z,worktreePath:K}}return}var P3="worktrees",v3=".kobe/worktrees",m3=".claude/worktrees",c3;var SV=S(()=>{c3=[v3,m3]});function eB(J){return{message:J instanceof Error?J.message:String(J),name:J instanceof Error?J.name:void 0}}async function oG(J,Y,Z,X){let G=J.get(Y);if(!G)throw Error(`unknown daemon request: ${Y}`);return G.handle(Jj(Z),X)}function sG(){return new Map([{name:"hello",handle(Y,Z){let X=typeof Y.protocolVersion==="number"?Y.protocolVersion:hJ,G=typeof Y.minProtocolVersion==="number"?Y.minProtocolVersion:X;if(!jQ({localVersion:hJ,localMin:GZ,remoteVersion:X,remoteMin:G}))throw Error(`daemon is protocol v${hJ} (min v${GZ}); this client is v${X} (min v${G}). Upgrade your kobe.`);return{protocolVersion:hJ,minProtocolVersion:GZ,kobeVersion:i0,capabilities:[...jB],daemonPid:Z.daemon.pid,clientId:Z.clientId,tasks:Z.orch.listTasks().map(eJ)}}},{name:"daemon.status",handle(Y,Z){return{daemonPid:Z.daemon.pid,kobeVersion:i0,uptimeMs:Date.now()-Z.daemon.startedAt.getTime(),startedAt:Z.daemon.startedAt.toISOString(),attachedClients:Z.daemon.guiCount(),taskCount:Z.orch.listTasks().length,socketPath:Z.daemon.socketPath,webPort:Z.daemon.webPort??null}}},{name:"daemon.stop",async handle(Y,Z){return await Z.daemon.stopSoon(),{}}},{name:"task.list",handle(Y,Z){return{tasks:Z.orch.listTasks().map(eJ)}}},{name:"task.get",handle(Y,Z){let X=M1(Y,"taskId"),G=Z.orch.getTask(X);if(!G)throw Error(`task not found: ${X}`);return{task:eJ(G)}}},{name:"task.create",async handle(Y,Z){let X=M1(Y,"repo"),G=await Z.orch.createTask({repo:X,title:cJ(Y,"title"),branch:cJ(Y,"branch"),baseRef:cJ(Y,"baseRef"),vendor:tB(Y,"vendor"),modelEffort:cJ(Y,"effort")});return{taskId:G.id,task:eJ(G)}}},{name:"task.archive",async handle(Y,Z){let X=M1(Y,"taskId");return await Z.orch.setArchived(X,sB(Y,"archived")),{}}},{name:"task.rename",async handle(Y,Z){let X=M1(Y,"taskId");return await Z.orch.setTitle(X,M1(Y,"title")),{}}},{name:"task.setBranch",async handle(Y,Z){let X=M1(Y,"taskId");return await Z.orch.setBranch(X,M1(Y,"branch")),{}}},{name:"task.setVendor",async handle(Y,Z){let X=M1(Y,"taskId"),G=tB(Y,"vendor");if(!G)throw Error("task.setVendor: vendor is required");return await Z.orch.setVendor(X,G),{}}},{name:"task.delete",async handle(Y,Z){let X=M1(Y,"taskId");return await Z.orch.deleteTask(X,{force:sB(Y,"force")}),Z.activity.clearTask(X),{}}},{name:"task.pin",async handle(Y,Z){let X=M1(Y,"taskId");return await Z.orch.setPinned(X,sB(Y,"pinned")),{}}},{name:"task.move",async handle(Y,Z){let X=M1(Y,"taskId"),G=M1(Y,"direction");if(G!=="up"&&G!=="down")throw Error("direction must be up or down");return await Z.orch.moveTask(X,G==="up"?-1:1),{}}},{name:"task.status",async handle(Y,Z){let X=M1(Y,"taskId"),G=M1(Y,"status");if(!Q9(G))throw Error("status must be a TaskStatus");let z=G==="done"?Z.orch.getTask(X):void 0,f=z?.status;if(await Z.orch.setStatus(X,G),G==="done"&&f!=="done"&&z)try{let q=await Z.issues.mirrorTaskDone(z.repo,X);if(q)Z.bus.publish("issue.snapshot",q)}catch(q){b1("issue-done-mirror",q)}return{}}},{name:"task.reorder",async handle(Y,Z){let X=Y.moves;if(!Array.isArray(X)||X.length===0)throw Error("moves must be a non-empty array");if(X.length>500)throw Error("too many moves in one task.reorder batch (max 500)");let G=X.map((z)=>{if(typeof z!=="object"||z===null)throw Error("each move needs taskId and position");let f=z,q=M1(f,"taskId"),B=f.position;if(typeof B!=="number"||!Number.isFinite(B))throw Error("position must be a finite number");return{taskId:q,position:B}});return await Z.orch.reorderTasks(G),{}}},{name:"task.ensureMain",async handle(Y,Z){let X=M1(Y,"repo"),G=await Z.orch.ensureMainTask(X);return{task:eJ(G)}}},{name:"task.ensureWorktree",async handle(Y,Z){let X=M1(Y,"taskId");Z.bus.publish("task.jobs",{taskId:X,kind:"ensureWorktree",phase:"running"});try{let G=await Z.orch.ensureWorktree(X);return Z.bus.publish("task.jobs",{taskId:X,kind:"ensureWorktree",phase:"done"}),{worktreePath:G}}catch(G){throw Z.bus.publish("task.jobs",{taskId:X,kind:"ensureWorktree",phase:"error",error:G instanceof Error?G.message:String(G)}),G}}},{name:"worktree.discoverAdoptable",async handle(Y,Z){let X=M1(Y,"repo");return{worktrees:await Z.orch.discoverAdoptableWorktrees(X)}}},{name:"worktree.adopt",async handle(Y,Z){let X=await Z.orch.adoptWorktree({repo:M1(Y,"repo"),worktreePath:M1(Y,"worktreePath"),branch:cJ(Y,"branch"),vendor:tB(Y,"vendor"),title:cJ(Y,"title"),ifExists:cJ(Y,"ifExists")==="return"?"return":"error"});return{task:eJ(X)}}},{name:"worktree.reconcile",async handle(Y,Z){let X=M1(Y,"cwd"),G=M1(Y,"worktreePath"),z=oB(Z.orch.listTasks(),X)??oB(Z.orch.listTasks(),G);if(!z)return{adopted:!1};try{return{adopted:!0,taskId:(await Z.orch.adoptWorktree({repo:z,worktreePath:G,ifExists:"return"})).id}}catch(f){return b1("worktree-created",f),{adopted:!1}}}},{name:"task.setActive",async handle(Y,Z){let X=cJ(Y,"taskId")??null;return await Z.orch.setActiveTask(X),Z.bus.publish("active-task",{taskId:X}),{}}},{name:"issue.list",async handle(Y,Z){return Z.issues.list(M1(Y,"repoRoot"))}},{name:"issue.mutate",async handle(Y,Z){let X=await Z.issues.mutate(M1(Y,"repoRoot"),Y.op);return Z.bus.publish("issue.snapshot",X),X}},{name:"session.deliver",async handle(Y,Z){let X=M1(Y,"taskId"),G=M1(Y,"text"),z=cJ(Y,"source");if(z!==void 0&&z!=="note"&&z!=="dispatcher")throw Error('source must be "note" or "dispatcher"');if(!Z.orch.getTask(X))throw Error(`task not found: ${X}`);return Z.bus.publish("session.deliver",{taskId:X,text:G,at:Date.now(),source:z??"dispatcher"}),{ok:!0}}},{name:"note.file",async handle(Y,Z){let X=M1(Y,"taskId"),G=M1(Y,"text"),z=Z.orch.getTask(X);if(!z)throw Error(`task not found: ${X}`);let f=Z.orch.listTasks().find((B)=>(B.kind??"task")==="main"&&B.repo===z.repo&&!B.archived);if(!f||f.id===z.id)return{ok:!0,routed:!1};let q=z.title||z.branch||X;return Z.bus.publish("session.deliver",{taskId:f.id,text:`[KOBE FIELD NOTE] from "${q}" (task ${X}): ${G}`,at:Date.now(),source:"note"}),{ok:!0,routed:!0}}},{name:"engine.reportEvent",async handle(Y,Z){let X=M1(Y,"kind");if(!KQ(X))throw Error(`unknown engine event kind: ${X}`);let G=cJ(Y,"taskId"),z=cJ(Y,"cwd");if(!G&&z&&X==="session-start"){let B=yV(Z.orch.listTasks(),z);if(B)try{await Z.orch.adoptWorktree({repo:B.repo,worktreePath:B.worktreePath,ifExists:"return"})}catch(j){b1("worktree-autosync",j)}}let f=G??(z?gV(Z.orch.listTasks(),z):void 0);if(!f)return{};let q=$3(Y);if(Z.activity.report(f,X,q),X==="turn-start")AV(Z.orch,f).then((B)=>{if(B==="moved")console.log(`[status-rules] task ${f} auto-moved backlog \u2192 in_progress`)}).catch((B)=>b1("status-rules",B));return{}}}].map((Y)=>[Y.name,Y]))}function Jj(J){if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function M1(J,Y){let Z=J[Y];if(typeof Z!=="string"||Z.length===0)throw Error(`${Y} is required`);return Z}function cJ(J,Y){let Z=J[Y];if(Z===void 0||Z===null||Z==="")return;if(typeof Z!=="string")throw Error(`${Y} must be a string`);return Z}function sB(J,Y){let Z=J[Y];if(Z===void 0||Z===null)return;if(typeof Z!=="boolean")throw Error(`${Y} must be a boolean`);return Z}function tB(J,Y){let Z=cJ(J,Y);return Z&&Z.trim().length>0?Z:void 0}function $3(J){let Y=J.detail;if(!Y||typeof Y!=="object"||Array.isArray(Y))return;let Z=Y,X={};if(Z.failure==="rate_limit"||Z.failure==="billing"||Z.failure==="other")X.failure=Z.failure;if(Z.waiting==="permission"||Z.waiting==="input")X.waiting=Z.waiting;if(typeof Z.note==="string")X.note=Z.note;return Object.keys(X).length>0?X:void 0}var mQ=S(()=>{UQ();RV();SJ();jJ();SV();iZ()});import{execFile as a3}from"child_process";import{mkdir as p3,readFile as _3,realpath as kV,rename as r3,stat as o3,writeFile as s3}from"fs/promises";import{homedir as t3}from"os";import{dirname as e3,isAbsolute as JO,join as YO,resolve as IV}from"path";import{promisify as ZO}from"util";function XO(J){return(J instanceof Error?J.message:String(J)).includes("not a git repository")}function dQ(J=process.env.KOBE_HOME_DIR??t3()){return YO(J,".kobe","issues.json")}function bV(J){return typeof J==="string"&&NV.includes(J)}function GO(J){if(J===null||typeof J!=="object"||Array.isArray(J))return null;let Y=J;if(typeof Y.id!=="number")return null;return{id:Y.id,title:typeof Y.title==="string"?Y.title:"(untitled)",status:bV(Y.status)?Y.status:"open",created:typeof Y.created==="string"?Y.created:"",body:typeof Y.body==="string"?Y.body:"",taskId:typeof Y.taskId==="string"?Y.taskId:void 0}}function zO(){return{version:1,repos:{}}}function QO(){let J=new Date,Y=String(J.getMonth()+1).padStart(2,"0"),Z=String(J.getDate()).padStart(2,"0");return`${J.getFullYear()}-${Y}-${Z}`}async function fO(J){let{stdout:Y}=await Qj("git",["-C",J,"rev-parse","--git-common-dir"]),Z=Y.trim();return kV(JO(Z)?Z:IV(J,Z))}async function qO(J){let{stdout:Y}=await Qj("git",["-C",J,"rev-parse","--show-toplevel"]);return Y.trim()}async function BO(J){let{stdout:Y}=await Qj("git",["-C",J,"worktree","list","--porcelain"]),Z=Y.split(/\r?\n/).find((X)=>X.startsWith("worktree "))?.slice(9).trim();return Z?kV(Z):qO(J)}async function Yj(J){if(typeof J!=="string"||J.length===0)throw Error("repoRoot is required");let Y=IV(J);if(!(await o3(Y).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[X,G]=await Promise.all([BO(Y),fO(Y)]);return{repoRoot:X,repoKey:G}}catch(X){if(XO(X))throw Error("repoRoot is not a git repository");throw X}}async function Zj(J){try{let Y=JSON.parse(await _3(J,"utf8")),Z={};if(Y.repos&&typeof Y.repos==="object")for(let[X,G]of Object.entries(Y.repos)){if(!G||typeof G!=="object")continue;let z=G;Z[X]={repoRoot:typeof z.repoRoot==="string"?z.repoRoot:"",nextId:typeof z.nextId==="number"?z.nextId:1,issues:Array.isArray(z.issues)?z.issues.map(GO).filter((f)=>f!==null):[]}}return{version:1,repos:Z}}catch(Y){if(Y.code==="ENOENT")return zO();throw Y}}async function Xj(J,Y){await p3(e3(J),{recursive:!0});let Z=`${J}.tmp`;await s3(Z,`${JSON.stringify(Y,null,2)}
46
+ `,"utf8"),await r3(Z,J)}function Gj(J,Y){return{repoRoot:J,exists:Y!==null,nextId:Y?.nextId??1,issues:Y?.issues??[]}}async function zj(J,Y){let X=(cQ.get(J)??Promise.resolve()).then(Y),G=X.then(()=>{return},()=>{return});return cQ.set(J,G),G.then(()=>{if(cQ.get(J)===G)cQ.delete(J)}),X}class nQ{path;constructor(J=dQ()){this.path=J}async list(J){let{repoRoot:Y,repoKey:Z}=await Yj(J);return zj(this.path,async()=>{let X=await Zj(this.path),G=X.repos[Z]??null;if(G&&G.repoRoot!==Y)G.repoRoot=Y,await Xj(this.path,X);return Gj(Y,G)})}async mirrorTaskDone(J,Y){let{repoRoot:Z,repoKey:X}=await Yj(J);if(!Y)return null;return zj(this.path,async()=>{let G=await Zj(this.path),z=G.repos[X];if(!z)return null;let f=z.issues.find((q)=>q.taskId===Y);if(!f||f.status==="done")return null;return f.status="done",z.repoRoot=Z,await Xj(this.path,G),Gj(Z,z)})}async mutate(J,Y){let{repoRoot:Z,repoKey:X}=await Yj(J);if(!Y||typeof Y!=="object"||Array.isArray(Y)||typeof Y.type!=="string")throw Error("missing op");return zj(this.path,async()=>{let G=await Zj(this.path),z=G.repos[X];if(!z)z={repoRoot:Z,nextId:1,issues:[]},G.repos[X]=z;z.repoRoot=Z;let f=Y;if(f.type==="create"){if(typeof f.title!=="string"||f.title.trim().length===0)throw Error("create requires a non-empty title");if(f.body!==void 0&&typeof f.body!=="string")throw Error("body must be a string");z.issues=[{id:z.nextId,title:f.title,status:"open",created:QO(),body:typeof f.body==="string"?f.body:""},...z.issues],z.nextId+=1}else if(f.type==="setStatus"){if(typeof f.id!=="number")throw Error("setStatus requires a numeric id");if(!bV(f.status))throw Error(`invalid status: must be one of ${NV.join(", ")}`);let q=z.issues.find((B)=>B.id===f.id);if(!q)throw Error(`no issue #${f.id}`);q.status=f.status}else if(f.type==="update"){if(typeof f.id!=="number")throw Error("update requires a numeric id");if(f.title!==void 0&&(typeof f.title!=="string"||f.title.trim().length===0))throw Error("title must be a non-empty string");if(f.body!==void 0&&typeof f.body!=="string")throw Error("body must be a string");let q=z.issues.find((B)=>B.id===f.id);if(!q)throw Error(`no issue #${f.id}`);if(typeof f.title==="string")q.title=f.title;if(typeof f.body==="string")q.body=f.body}else if(f.type==="link"){if(typeof f.id!=="number")throw Error("link requires a numeric id");if(typeof f.taskId!=="string"||f.taskId.length===0)throw Error("link requires a non-empty taskId");let q=z.issues.find((B)=>B.id===f.id);if(!q)throw Error(`no issue #${f.id}`);q.taskId=f.taskId}else if(f.type==="unlink"){if(typeof f.id!=="number")throw Error("unlink requires a numeric id");let q=z.issues.find((B)=>B.id===f.id);if(!q)throw Error(`no issue #${f.id}`);q.taskId=void 0}else if(f.type==="delete"){if(typeof f.id!=="number")throw Error("delete requires a numeric id");let q=z.issues.filter((B)=>B.id!==f.id);if(q.length===z.issues.length)throw Error(`no issue #${f.id}`);z.issues=q}else throw Error(`unknown op type: ${f.type}`);return await Xj(this.path,G),Gj(Z,z)})}}var Qj,NV,cQ;var fj=S(()=>{Qj=ZO(a3),NV=["open","doing","hold","done"];cQ=new Map});import{mkdirSync as jO,watch as HO}from"fs";import{basename as WO,dirname as VO}from"path";function iQ(J){if(J.debounceMs<=0)return()=>{};let Y=VO(J.filePath),Z=new Set([WO(J.filePath),...J.matchBasenames??[]]),X=null,G=null,z=null,f=()=>{try{J.onTrigger()}catch(B){J.onError(B)}},q=()=>{if(X)clearTimeout(X);X=setTimeout(()=>{X=null,f()},J.debounceMs),X.unref?.()};try{jO(Y,{recursive:!0}),z=HO(Y,(B,j)=>{let K=j===null?null:String(j);if(K!==null&&!Z.has(K))return;q()}),z.on("error",J.onError)}catch(B){J.onError(B)}if(J.pollMs&&J.pollMs>0)G=setInterval(f,J.pollMs),G.unref?.();return()=>{if(X)clearTimeout(X),X=null;if(G)clearInterval(G),G=null;z?.close(),z=null}}var qj=()=>{};import{homedir as KO}from"os";import{basename as UO,join as LO}from"path";function jj(J=process.env.KOBE_HOME_DIR??KO()){return LO(J,".kobe","settings","keybindings.yaml")}function TV(J,Y={}){let Z=Y.debounceMs??Bj;if(Z<=0)return()=>{};let X=Y.path??jj(),G=UO(X),z=G.replace(/\.yaml$/,".yml"),f=0;return J.publish("keybindings",{rev:f}),iQ({filePath:X,matchBasenames:[G,z],debounceMs:Z,onTrigger:()=>{try{f+=1,J.publish("keybindings",{rev:f})}catch(B){b1("keybindings-watcher",B)}},onError:(B)=>b1("keybindings-watcher",B)})}var Bj=200;var EV=S(()=>{qj()});class Hj{clients;idleGraceMs;onIdleStop;schedule;log;cancelIdle=null;stopping=!1;constructor(J){this.clients=J.clients,this.idleGraceMs=J.idleGraceMs,this.onIdleStop=J.onIdleStop,this.schedule=J.schedule??DO,this.log=J.log??VZ}guiCount(){let J=0;for(let Y of this.clients())if(Y.holdsLifetime)J++;return J}hasSubscribers(){for(let J of this.clients())if(J.subscribed)return!0;return!1}isStopping(){return this.stopping}markStopping(){this.stopping=!0,this.clearIdle()}guiAttached(){this.clearIdle()}clientDisconnected(J){if(J)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 DO=(J,Y)=>{let Z=setTimeout(J,Y);return Z.unref?.(),()=>clearTimeout(Z)};var uV=()=>{};import{spawn as MO}from"child_process";function Wj(J,Y,Z,X){if(Z)return J+X.slowRetryMs;return Y+Math.max(X.minIntervalMs,(Y-J)*5)}function Vj(J,Y){return!J.inFlight&&Y>=J.nextAllowedAt}function lQ(J,Y,Z,X){let G=Date.now();if(!Vj(J,G))return!1;J.inFlight=!0;let z=new AbortController,f=setTimeout(()=>z.abort(),Y.timeoutMs);return(async()=>{let q,B=!1;try{q=await Z(z.signal),B=!0}catch{}clearTimeout(f);let j=z.signal.aborted;if(J.nextAllowedAt=Wj(G,Date.now(),j,Y),J.inFlight=!1,B&&!j)X(q)})(),!0}function QY(J,Y,Z){return new Promise((X)=>{let G="",z=!1,f=(B)=>{if(z)return;z=!0,X({status:B,stdout:G})},q=MO(J,Y.slice(),{cwd:Z.cwd,stdio:["ignore","pipe","ignore"],env:Z.env,signal:Z.signal,killSignal:"SIGKILL"});q.stdout?.on("data",(B)=>{G+=String(B)}),q.on("error",()=>f(null)),q.on("close",(B)=>f(B))})}var tG=()=>{};function CO(J){if(J.archived)return!1;if(J.kind==="main")return!1;if(!J.branch||!J.worktreePath)return!1;if(HJ(J.repo)||HJ(J.worktreePath))return!1;return!0}async function gO(J,Y){let Z=Y.tickMs??$Q,X=[];for(let G of J.listTasks()){if(!CO(G)){Y.schedule.delete(G.id);continue}let z=Y.schedule.get(G.id)??0;if(Y.now<z)continue;try{let f=await Y.run(G.worktreePath,G.branch);if(f.kind==="empty"){Y.schedule.set(G.id,Y.now+FO);continue}let q=a9(f.view,Y.at),B=J.getTask(G.id);if(!B){Y.schedule.delete(G.id);continue}if(!fQ(B.prStatus,q??void 0))await J.setPRStatus(G.id,q),X.push(G.id);let j=q?.lifecycle==="merged"||q?.lifecycle==="closed";Y.schedule.set(G.id,Y.now+(j?OO:Z))}catch(f){b1("pr-status-poller",f),Y.schedule.set(G.id,Y.now+Z)}}return X}function xV(J,Y=$Q,Z,X=RO){if(Y<=0)return()=>{};let G=new Map,z=!1,q=setInterval(()=>{if(Z&&!Z())return;if(z)return;z=!0,gO(J,{run:X,now:Date.now(),at:new Date().toISOString(),schedule:G,tickMs:Y}).catch((B)=>b1("pr-status-poller",B)).finally(()=>{z=!1})},Y);return q.unref?.(),()=>clearInterval(q)}var $Q=30000,FO=300000,OO=600000,AO=1e4,RO=async(J,Y)=>{let Z=new AbortController,X=setTimeout(()=>Z.abort(),AO);try{let G=await QY("gh",["pr","view",Y,"--json",$9],{cwd:J,signal:Z.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(X)}};var wV=S(()=>{tG();O1()});import{readFileSync as yO}from"fs";import{homedir as SO}from"os";import{basename as kO,join as IO}from"path";function Uj(J=process.env.KOBE_HOME_DIR??SO()){return IO(J,".config","kobe","state.json")}function hV(J){let Y={};try{let B=JSON.parse(yO(J,"utf8"));if(B&&typeof B==="object"&&!Array.isArray(B))Y=B}catch{}let Z=typeof Y.activeTheme==="string"&&Y.activeTheme.length>0?Y.activeTheme:"claude",X=Y.transparentBackground===!0,G=typeof Y.focusAccent==="string"&&bO.includes(Y.focusAccent)?Y.focusAccent:null,z=Y.activeSortMode==="recent"?"recent":"default",f=Y["tasksPane.keysCollapsed"]===!0,q=typeof Y["tasksPane.projectFilter"]==="string"&&Y["tasksPane.projectFilter"].length>0?Y["tasksPane.projectFilter"]:null;return{theme:Z,transparentBackground:X,focusAccent:G,sortMode:z,keysCollapsed:f,projectFilter:q}}function TO(J,Y){return J.theme===Y.theme&&J.transparentBackground===Y.transparentBackground&&J.focusAccent===Y.focusAccent&&J.sortMode===Y.sortMode&&J.keysCollapsed===Y.keysCollapsed&&J.projectFilter===Y.projectFilter}function PV(J,Y={}){let Z=Y.debounceMs??Kj;if(Z<=0)return()=>{};let X=Y.pollMs??NO,G=Y.statePath??Uj(),z=kO(G),f=hV(G);return J.publish("ui-prefs",f),iQ({filePath:G,matchBasenames:[z],debounceMs:Z,pollMs:X,onTrigger:()=>{try{let B=hV(G);if(TO(f,B))return;f=B,J.publish("ui-prefs",B)}catch(B){b1("ui-prefs-watcher",B)}},onError:(B)=>b1("ui-prefs-watcher",B)})}var Kj=200,NO=250,bO;var vV=S(()=>{qj();bO=["primary","success","info"]});function Lj(){return c1()[ZX]===!0}var ZX="experimental.dispatcher";var aQ=S(()=>{cZ()});import{randomUUID as EO}from"crypto";function fY(J){return`engineCommand.${J}`}function qY(J){return`engineName.${J}`}function XX(J){return g1(qY(J))?.trim()||Dj[J]||J}function eG(J){return a1(J??"claude").defaultCommand}function uO(J){let Y=[],Z=/"([^"]*)"|'([^']*)'|(\S+)/g;for(let X=Z.exec(J);X!==null;X=Z.exec(J))Y.push(X[1]??X[2]??X[3]??"");return Y}function RJ(J,Y){let Z=J??"claude",X=g1(fY(Z))?.trim(),G=(()=>{if(X){let z=uO(X);if(z.length>0)return z}return eG(Z)})();return xO(G,Z,Y)}function xO(J,Y,Z){let X=Z?.trim();if(!X)return J;let G=Y??"claude";if(!a1(G).effortLevels?.includes(X))return J;if(G==="codex")return[...J,"-c",`model_reasoning_effort=${X}`];return J}function nX(J,Y){if((Y??"claude")!=="claude")return{argv:J,sessionId:null};if(J.some((X)=>wO.has(X)))return{argv:J,sessionId:null};let Z=EO();return{argv:[...J,"--session-id",Z],sessionId:Z}}function GX(){let J=(Y)=>/^[A-Za-z0-9_/.:=-]+$/.test(Y)?Y:`'${Y.replace(/'/g,"'\\''")}'`;try{return[...R1(),"api"].map(J).join(" ")}catch{return"kobe api"}}function hO(J,Y=GX()){return[`You are running inside kobe (a local multi-session task manager) as task ${J}.`,"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:",` ${Y} set-status --task-id ${J} --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 PO(J,Y=GX()){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:",` ${Y} note --task-id ${J} --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 vO(J,Y=GX(),Z={}){let X=[];if((Z.status??vQ)())X.push(hO(J,Y));if((Z.notes??Lj)())X.push(PO(J,Y));return X.length>0?X.join(`
49
49
 
50
- `):null}function cz(J,Y,Z,f={}){if(!Z)return J;if((Y??"claude")!=="claude")return J;if(J.includes("--append-system-prompt")||J.includes("--append-system-prompt-file"))return J;let X=HO(Z,eZ(),f);if(!X)return J;return[...J,"--append-system-prompt",X]}function jO(J,Y=eZ()){return[`You are running inside kobe (a local multi-session task manager) as this repository's DISPATCHER (task ${J}, 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: \`${Y} 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: \`${Y} 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 dz(J,Y,Z,f=BH){if(!Z||!f())return J;if((Y??"claude")!=="claude")return J;if(J.includes("--append-system-prompt")||J.includes("--append-system-prompt-file"))return J;return[...J,"--append-system-prompt",jO(Z)]}var HH,QO;var kJ=S(()=>{wY();qZ();aX();mz();A1();zJ();HH=Object.fromEntries(bZ.map((J)=>[J,a1(J).displayName]));QO=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});function mf(J){return Jf.includes(J)?J:"auto"}var Jf,C5,dY="editor.kind",KZ="editor.customCommand",nz="auto";var iz=S(()=>{Jf=["auto","vim","nvim","nano","emacs","custom"],C5=["nvim","vim","emacs","nano"]});function Zf(J){return J==="taskpanel"?"taskpanel":"chattab"}var nY="settings.surface",Yf="chattab";function IJ(J=process.env){return{...J,...jH}}var jH;var UZ=S(()=>{jH={GIT_OPTIONAL_LOCKS:"0"}});async function cf(J,Y,Z={}){if(!J)return{stdout:"",stderr:"worktreePath is required",status:-1};let f=(Z.execForPath??TY)(J),X=Z.timeoutMs&&Z.timeoutMs>0?new AbortController:null,G=!1,Q=X?setTimeout(()=>{G=!0,X.abort()},Z.timeoutMs):null,q;try{q=await f.run(["git",...Y],{cwd:J,env:jH,signal:X?.signal})}catch(B){if(Q)clearTimeout(Q);return{stdout:"",stderr:B instanceof Error?B.message:String(B),status:-1}}if(Q)clearTimeout(Q);if(G&&q.exitCode===-1&&!q.stderr)return{stdout:q.stdout,stderr:`git ${Y.join(" ")} timed out after ${Z.timeoutMs}ms`,status:-1};return{stdout:q.stdout,stderr:q.stderr,status:q.exitCode}}function WO(J,Y){if(!J||!Y||Y.startsWith("/"))return null;let Z=Y.split("/");if(Z.some((f)=>f===".."))return null;return`${J.replace(/\/+$/,"")}/${Z.filter(Boolean).join("/")}`}async function S5(J,Y,Z={}){let f=WO(J,Y);if(!f)return null;let X=(Z.execForPath??TY)(J);try{return await X.readFile(f)}catch{return null}}var lz=S(()=>{$J();UZ()});import{statSync as VO}from"fs";async function oX(J,Y){let Z=await cf(J,Y,{timeoutMs:KO}),f=Z.status??-1;return{ok:f===0,stdout:Z.stdout,stderr:Z.stderr,code:f}}function LO(J){switch(J){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 y5(J){let Y=new Map;if(!J)return Y;let Z=J.split(/(?=^diff --git )/m);for(let f of Z){if(!f.startsWith("diff --git"))continue;let X=null,G=f.match(/^\+\+\+ b\/(.*)$/m);if(G&&G[1]!=="/dev/null")X=G[1];else{let Q=f.match(/^diff --git a\/.* b\/(.*)$/m);if(Q)X=Q[1]}if(!X)continue;Y.set(DO(X),f.endsWith(`
52
- `)?f:`${f}
53
- `)}return Y}function DO(J){if(!(J.startsWith('"')&&J.endsWith('"')))return J;return J.slice(1,-1).replace(/\\([\\"nt])/g,(Z,f)=>f==="n"?`
54
- `:f==="t"?"\t":f)}async function MO(J,Y,Z){let f=Array(J.length),X=Math.max(1,Math.min(Y,J.length)),G=0;async function Q(){while(G<J.length){let q=G++;f[q]=await Z(J[q],q)}}return await Promise.all(Array.from({length:X},()=>Q())),f}async function FO(J,Y){let Z=await oX(J,["diff","--no-color","--no-index","--","/dev/null",Y]);if(Z.stdout.trim())return Z.stdout.endsWith(`
50
+ `):null}function pQ(J,Y,Z,X={}){if(!Z)return J;if((Y??"claude")!=="claude")return J;if(J.includes("--append-system-prompt")||J.includes("--append-system-prompt-file"))return J;let G=vO(Z,GX(),X);if(!G)return J;return[...J,"--append-system-prompt",G]}function mO(J,Y=GX()){return[`You are running inside kobe (a local multi-session task manager) as this repository's DISPATCHER (task ${J}, 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: \`${Y} 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: \`${Y} 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 _Q(J,Y,Z,X=Lj){if(!Z||!X())return J;if((Y??"claude")!=="claude")return J;if(J.includes("--append-system-prompt")||J.includes("--append-system-prompt-file"))return J;return[...J,"--append-system-prompt",mO(Z)]}var Dj,wO;var bJ=S(()=>{cY();jZ();rG();aQ();O1();BJ();Dj=Object.fromEntries(xZ.map((J)=>[J,a1(J).displayName]));wO=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});function iX(J){return zX.includes(J)?J:"auto"}var zX,mV,lY="editor.kind",LZ="editor.customCommand",rQ="auto";var oQ=S(()=>{zX=["auto","vim","nvim","nano","emacs","custom"],mV=["nvim","vim","emacs","nano"]});function fX(J){return J==="taskpanel"?"taskpanel":"chattab"}var $Y="settings.surface",QX="chattab";function TJ(J=process.env){return{...J,...Mj}}var Mj;var DZ=S(()=>{Mj={GIT_OPTIONAL_LOCKS:"0"}});async function lX(J,Y,Z={}){if(!J)return{stdout:"",stderr:"worktreePath is required",status:-1};let X=(Z.execForPath??hY)(J),G=Z.timeoutMs&&Z.timeoutMs>0?new AbortController:null,z=!1,f=G?setTimeout(()=>{z=!0,G.abort()},Z.timeoutMs):null,q;try{q=await X.run(["git",...Y],{cwd:J,env:Mj,signal:G?.signal})}catch(B){if(f)clearTimeout(f);return{stdout:"",stderr:B instanceof Error?B.message:String(B),status:-1}}if(f)clearTimeout(f);if(z&&q.exitCode===-1&&!q.stderr)return{stdout:q.stdout,stderr:`git ${Y.join(" ")} timed out after ${Z.timeoutMs}ms`,status:-1};return{stdout:q.stdout,stderr:q.stderr,status:q.exitCode}}function cO(J,Y){if(!J||!Y||Y.startsWith("/"))return null;let Z=Y.split("/");if(Z.some((X)=>X===".."))return null;return`${J.replace(/\/+$/,"")}/${Z.filter(Boolean).join("/")}`}async function cV(J,Y,Z={}){let X=cO(J,Y);if(!X)return null;let G=(Z.execForPath??hY)(J);try{return await G.readFile(X)}catch{return null}}var sQ=S(()=>{rJ();DZ()});import{statSync as dO}from"fs";async function Jz(J,Y){let Z=await lX(J,Y,{timeoutMs:nO}),X=Z.status??-1;return{ok:X===0,stdout:Z.stdout,stderr:Z.stderr,code:X}}function lO(J){switch(J){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 dV(J){let Y=new Map;if(!J)return Y;let Z=J.split(/(?=^diff --git )/m);for(let X of Z){if(!X.startsWith("diff --git"))continue;let G=null,z=X.match(/^\+\+\+ b\/(.*)$/m);if(z&&z[1]!=="/dev/null")G=z[1];else{let f=X.match(/^diff --git a\/.* b\/(.*)$/m);if(f)G=f[1]}if(!G)continue;Y.set($O(G),X.endsWith(`
52
+ `)?X:`${X}
53
+ `)}return Y}function $O(J){if(!(J.startsWith('"')&&J.endsWith('"')))return J;return J.slice(1,-1).replace(/\\([\\"nt])/g,(Z,X)=>X==="n"?`
54
+ `:X==="t"?"\t":X)}async function aO(J,Y,Z){let X=Array(J.length),G=Math.max(1,Math.min(Y,J.length)),z=0;async function f(){while(z<J.length){let q=z++;X[q]=await Z(J[q],q)}}return await Promise.all(Array.from({length:G},()=>f())),X}async function pO(J,Y){let Z=await Jz(J,["diff","--no-color","--no-index","--","/dev/null",Y]);if(Z.stdout.trim())return Z.stdout.endsWith(`
55
55
  `)?Z.stdout:`${Z.stdout}
56
- `;return""}async function k5(J,Y){if(Y.pathname!=="/api/diff")return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});let Z=Y.searchParams.get("worktreePath");if(!Z)return Response.json({error:"missing worktreePath"},{status:400});let f;try{f=decodeURIComponent(Z)}catch{return Response.json({error:"invalid worktreePath encoding"},{status:400})}if(!f.startsWith("/"))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!iG(f))return Response.json({error:"worktreePath does not exist"},{status:400});if(!TY(f).isRemote)try{if(!VO(f).isDirectory())return Response.json({error:"worktreePath is not a directory"},{status:400})}catch{return Response.json({error:"worktreePath does not exist"},{status:400})}let G=await oX(f,["rev-parse","--is-inside-work-tree"]);if(!G.ok||G.stdout.trim()!=="true")return Response.json({error:`not a git work tree: ${G.stderr.trim()||f}`},{status:500});let[Q,q,B]=await Promise.all([oX(f,["status","--porcelain=v1","-z","--untracked-files=all"]),oX(f,["diff","--no-color"]),oX(f,["diff","--no-color","--staged"])]);if(!Q.ok)return Response.json({error:`git status failed: ${Q.stderr.trim()}`},{status:500});let H=y5(q.stdout),K=y5(B.stdout),j=Q.stdout.split("\x00"),U=[],L=[];for(let O=0;O<j.length;O++){let A=j[O];if(!A)continue;let l=A[0]??" ",R=A[1]??" ",C=A.slice(3);if(!C)continue;if(l==="R"||l==="C"||R==="R"||R==="C")O++;let g=l==="?"&&R==="?",y=l!==" "&&l!=="?"?l:R,$=l!==" "&&l!=="?",G0="";if(g)L.push({fileIndex:U.length,path:C});else if(G0=K.get(C)??H.get(C)??"",K.has(C)&&H.has(C))G0=`${K.get(C)}${H.get(C)}`;U.push({path:C,status:g?"untracked":LO(y),staged:$,patch:G0})}if(L.length>0){let O=await MO(L,UO,(A)=>FO(f,A.path));for(let A=0;A<L.length;A++)U[L[A].fileIndex].patch=O[A]}U.sort((O,A)=>O.path.localeCompare(A.path));let F=[B.stdout,q.stdout].filter(Boolean).join(`
57
- `),D={files:U,raw:F};return Response.json(D)}var KO=15000,UO=8;var I5=S(()=>{$J();lz()});import{isAbsolute as OO}from"path";function b5(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function RO(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9._-]+$/.test(J)&&!J.includes("..")}async function gO(J){let Y=J.searchParams.get("worktreePath"),Z=J.searchParams.get("vendor")??"claude";if(!Y||!OO(Y))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!b5(Z))return Response.json({error:"invalid vendor"},{status:400});try{let f=a1(Z).history,[X,G]=await Promise.all([f.listSessionIdsForWorktree(Y),f.latestTranscriptMtimeForWorktree(Y)]);return Response.json({sessions:X,latestMtime:G})}catch(f){return Response.json({error:f instanceof Error?f.message:String(f)},{status:500})}}async function CO(J){let Y=J.searchParams.get("vendor")??"claude",Z=J.searchParams.get("sessionId");if(!b5(Y))return Response.json({error:"invalid vendor"},{status:400});if(!RO(Z))return Response.json({error:"invalid sessionId"},{status:400});try{let f=await a1(Y).history.readHistory(Z);return Response.json({messages:f})}catch(f){return Response.json({error:f instanceof Error?f.message:String(f)},{status:500})}}async function T5(J,Y){if(Y.pathname!==N5&&Y.pathname!==AO)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Y.pathname===N5?gO(Y):CO(Y)}var N5="/api/history/sessions",AO="/api/history/messages";var E5=S(()=>{qZ()});import{mkdir as SO,readFile as yO,writeFile as kO}from"fs/promises";import{join as u5}from"path";function x5(){return u5(r1(),"notes")}function w5(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function h5(J){return u5(x5(),`${J}.md`)}async function NO(J){let Y=J.searchParams.get("taskId");if(!w5(Y))return Response.json({error:"invalid taskId"},{status:400});try{let Z="";try{Z=await yO(h5(Y),"utf8")}catch(f){if(f.code!=="ENOENT")throw f}return Response.json({markdown:Z})}catch(Z){return Response.json({error:Z instanceof Error?Z.message:String(Z)},{status:500})}}async function bO(J){let Y;try{Y=await J.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!w5(Y.taskId))return Response.json({error:"invalid taskId"},{status:400});if(typeof Y.markdown!=="string")return Response.json({error:"markdown must be a string"},{status:400});try{return await SO(x5(),{recursive:!0}),await kO(h5(Y.taskId),Y.markdown,"utf8"),Response.json({ok:!0})}catch(Z){return Response.json({error:Z instanceof Error?Z.message:String(Z)},{status:500})}}async function P5(J,Y){if(Y.pathname!==IO)return null;if(J.method==="GET")return NO(Y);if(J.method==="PUT")return bO(J);return Response.json({error:"method not allowed"},{status:405})}var IO="/api/notes";var v5=S(()=>{c1()});var df;var $z=S(()=>{df={$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 nf;var az=S(()=>{nf={$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 lf;var pz=S(()=>{lf={$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 $f;var _z=S(()=>{$f={$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 af;var rz=S(()=>{af={$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 pf;var oz=S(()=>{pf={$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 _f;var sz=S(()=>{_f={$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 VH(J,Y,Z=[]){if(Y===void 0)return null;if(typeof Y!=="string")return VH(J,Y.dark,Z);if(Y==="transparent"||Y==="none")return null;if(Y.startsWith("#"))return Y;if(Z.includes(Y))return null;let f=J.defs?.[Y]??J.theme[Y];return VH(J,f,[...Z,Y])}function WH(J){return Math.max(0,Math.min(255,Math.round(J)))}function sX(J,Y,Z){let f=Number.parseInt(J.slice(1),16),X=Number.parseInt(Y.slice(1),16),G=(q,B)=>q>>B&255;return`#${(WH(G(f,16)+(G(X,16)-G(f,16))*Z)<<16|WH(G(f,8)+(G(X,8)-G(f,8))*Z)<<8|WH(G(f,0)+(G(X,0)-G(f,0))*Z)).toString(16).padStart(6,"0")}`}function mO(J){let Y=(q)=>VH(J,J.theme[q]),Z=Y("background"),f=Y("text");if(!Z||!f)return null;let X=Y("textMuted")??sX(f,Z,0.35),G=Y("primary")??f,Q=Y("border")??sX(f,Z,0.8);return{bg:Z,surface:Y("backgroundPanel")??Z,inset:Y("backgroundElement")??Z,menu:Y("backgroundMenu")??Y("backgroundElement")??Z,line:Q,"line-subtle":Y("borderSubtle")??Q,"line-active":Y("borderActive")??sX(Q,f,0.3),fg:f,muted:X,subtle:sX(X,Z,0.35),primary:G,"primary-hover":sX(G,f,0.35),"kobe-orange":G,"kobe-green":Y("success")??f,"kobe-blue":Y("info")??f,"kobe-red":Y("error")??f,"kobe-yellow":Y("warning")??f,"kobe-violet":Y("secondary")??G}}function m5(J,Y){if(Y.pathname!==dO)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:cO})}var vO,cO,dO="/api/themes";var c5=S(()=>{$z();az();pz();_z();rz();oz();sz();vO={claude:df,conductor:nf,dracula:lf,nord:$f,opencode:af,"osaka-jade":pf,tokyonight:_f};cO=Object.fromEntries(Object.entries(vO).map(([J,Y])=>[J,mO(Y)]).filter((J)=>J[1]!==null))});import{createHash as nO,randomUUID as iO}from"crypto";import{mkdir as lO}from"fs/promises";import{join as KH,resolve as $O}from"path";function _O(J){return nO("sha1").update(J).digest("hex").slice(0,16)}async function sO(J){let Y=Number.parseInt(J.headers.get("content-length")??"",10);if(Number.isFinite(Y)&&Y>d5)return Response.json({error:"asset too large"},{status:413});let Z;try{Z=await J.formData()}catch{return Response.json({error:"invalid form data"},{status:400})}let f=Z.get("repoRoot");if(typeof f!=="string"||f.length===0)return Response.json({error:"missing repoRoot"},{status:400});let X=Z.get("file");if(!(X instanceof File))return Response.json({error:"file must be a File"},{status:400});if(X.size>d5)return Response.json({error:"asset too large"},{status:413});let G=aO[X.type];if(!G)return Response.json({error:`unsupported content-type: ${X.type||"unknown"}`},{status:415});try{let Q=_O(f),q=KH(Cq(),Q);await lO(q,{recursive:!0});let H=`${iO()}.${G}`;return await Bun.write(KH(q,H),X),Response.json({url:`${tz}/${Q}/${H}`})}catch(Q){return Response.json({error:Q instanceof Error?Q.message:String(Q)},{status:500})}}async function tO(J){let Y=J.slice(tz.length+1),Z=Y.indexOf("/");if(Z<0)return Response.json({error:"not found"},{status:404});let f=Y.slice(0,Z),X=Y.slice(Z+1);if(!rO.test(f)||!oO.test(X))return Response.json({error:"invalid asset path"},{status:400});let G=Cq(),Q=$O(G,f,X);if(Q!==KH(G,f,X)||!Q.startsWith(`${G}/`))return Response.json({error:"invalid asset path"},{status:400});let q=X.slice(X.lastIndexOf(".")+1).toLowerCase(),B=pO[q];if(!B)return Response.json({error:"invalid asset path"},{status:400});let H=Bun.file(Q);if(!await H.exists())return Response.json({error:"not found"},{status:404});return new Response(H,{headers:{"content-type":B,"cache-control":"public, max-age=31536000, immutable","x-content-type-options":"nosniff"}})}async function n5(J,Y){if(Y.pathname===tz){if(J.method==="POST")return sO(J);return Response.json({error:"method not allowed"},{status:405})}if(Y.pathname.startsWith(`${tz}/`)){if(J.method==="GET")return tO(Y.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var tz="/api/issue-assets",d5=10485760,aO,pO,rO,oO;var i5=S(()=>{c1();aO={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},pO={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};rO=/^[a-f0-9]{16}$/,oO=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function l5(J,Y=500){return Response.json({error:J instanceof Error?J.message:String(J)},{status:Y})}function $5(J){let Y=J instanceof Error?J.message:String(J);if(/^no issue #\d+$/.test(Y))return 404;if(Y==="repoRoot is required"||Y==="repoRoot does not exist"||Y==="repoRoot is not a git repository"||Y==="missing op"||Y==="create requires a non-empty title"||Y==="body must be a string"||Y==="setStatus requires a numeric id"||Y.startsWith("invalid status:")||Y==="update requires a numeric id"||Y==="title must be a non-empty string"||Y==="link requires a numeric id"||Y==="link requires a non-empty taskId"||Y==="unlink requires a numeric id"||Y==="delete requires a numeric id"||Y.startsWith("unknown op type:"))return 400;return 500}async function eO(J,Y){let Z=Y.searchParams.get("repoRoot");if(!Z)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await J.request("issue.list",{repoRoot:Z}))}catch(f){return l5(f,$5(f))}}async function JA(J,Y){let Z;try{Z=await Y.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(Z===null||typeof Z!=="object"||Array.isArray(Z))return Response.json({error:"body must be a JSON object"},{status:400});let f=Z;if(typeof f.repoRoot!=="string"||f.repoRoot.length===0)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await J.request("issue.mutate",{repoRoot:f.repoRoot,op:f.op}))}catch(X){return l5(X,$5(X))}}async function a5(J,Y,Z){if(Y.pathname!=="/api/issues")return null;if(J.method==="GET")return eO(Z,Y);if(J.method==="POST")return JA(Z,J);return Response.json({error:"method not allowed"},{status:405})}function p5(J){return YA.has(String(J??"").trim().toLowerCase())}function _5(J){try{if(!J)return null;let Y=new URL(J);if(Y.protocol!=="http:"&&Y.protocol!=="https:")return null;return Y.hostname}catch{return null}}function ZA(J){let Y=_5(J);return Y!==null&&p5(Y)}function r5(J,Y={}){if(!J)return!0;if(ZA(J))return!0;let Z=Y.allowedHost?.trim();if(!Z)return!1;let f=_5(J);return f!==null&&f===Z}function o5(J){let Y=String(J??"").trim();return Y&&!p5(Y)?Y:void 0}var YA;var s5=S(()=>{YA=new Set(["localhost","127.0.0.1","::1","[::1]"])});var fA,t5;var e5=S(()=>{fA=["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"],t5=new Set(fA)});var UH={};Q1(UH,{resolveRepoInit:()=>Z7,resolveEngineLaunchInit:()=>iY});import{existsSync as Y7,readFileSync as XA}from"fs";import{join as ez}from"path";function zA(J){return Y7(ez(J,J7))?`sh ${J7}`:void 0}function QA(J){let Y=ez(J,GA);if(!Y7(Y))return;try{let Z=XA(Y,"utf8");return Z.trim().length>0?Z:void 0}catch{return}}function Z7(J,Y){let Z=J?hq(J):{},f=zA(Y)??Z.initScript,X=QA(Y)??Z.initPrompt;return{initScript:f&&f.trim().length>0?f:void 0,initPrompt:X&&X.trim().length>0?X:void 0}}function qA(J,Y){if(J.kind==="none")return;if(J.kind==="explicit")return{source:"explicit",text:J.prompt};let Z=Y.initPrompt?.trim();return Z?{source:"repo-init",text:Z}:void 0}function iY(J,Y,Z={kind:"repo-init"}){let f=Z7(J,Y);return{initScript:f.initScript,firstMessage:qA(Z,f)}}var J7,GA;var rf=S(()=>{A1();J7=ez(".kobe","init.sh"),GA=ez(".kobe","init-prompt.md")});import{existsSync as f7,readFileSync as BA}from"fs";function X7(){ff=null}function HA(){let J=k9();if(f7(J))return{canonical:J,found:J};let Y=J.replace(/\.yaml$/,".yml");if(f7(Y))return{canonical:J,found:Y};return{canonical:J,found:null}}function JQ(){if(ff)return ff;let{canonical:J,found:Y}=HA();if(!Y)return ff={path:J,exists:!1,doc:null,warnings:[]},ff;let Z=[],f=null;try{let X=BA(Y,"utf8");f=Bun.YAML.parse(X)}catch(X){let G=X instanceof Error?X.message:String(X);Z.push(`could not read/parse ${Y}: ${G}`)}return ff={path:J,exists:!0,doc:f,warnings:Z},ff}var ff=null;var LH=S(()=>{c1()});function of(J,Y){let Z=`alternating [${J}, ${Y}] pairs`;return{layout:Z,validateCount:(f)=>f>=2&&f%2===0?null:`needs ${Z} (an even number of chords \u2014 got ${f})`}}function DA(J,Y){let Z=J.trim().toLowerCase();if(!Z)return{error:"empty chord"};let f=Z.split("+"),X=f.pop()??"";if(X===""&&f.length>0){if(X="+",f[f.length-1]==="")f.pop()}if(!X)return{error:`"${J}": no key after the modifiers`};let G=new Set;for(let B of f){let H=VA[B];if(!H)return{error:`"${J}": unknown modifier "${B}" (use ctrl / cmd / alt / shift)`};G.add(H)}if(X=KA[X]??X,G.has("shift")&&X.length===1&&!Y?.allowShiftCharacter)return{error:`"${J}": shift+<character> can never match \u2014 terminals deliver shift+letter as a plain character, not a modifier event`};let Q=LA.filter((B)=>G.has(B)).join("+"),q=Q?`${Q}+${X}`:X;if(X.length>1&&!UA.has(X))return{chord:q,warning:`"${J}": unrecognized key name "${X}" \u2014 the chord may never fire`};return{chord:q}}function YQ(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function MA(J){if(J==="darwin")return["darwin","macos","mac"];if(J==="win32")return["win32","windows"];return[J]}function FA(J){if(!YQ(J))return null;let Y=J.bindings;if(YQ(Y))return Y;return J}function ZQ(J,Y,Z){let f=[];if(J===null||J===void 0)return{entries:[],warnings:f};if(!YQ(J))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let X=new Map,G=[];if(J.bindings!==void 0)if(YQ(J.bindings))G.push(J.bindings);else f.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let Q of MA(Y)){let q=J[Q];if(q===void 0)continue;let B=FA(q);if(B)G.push(B);else f.push(`\`${Q}:\` must be a mapping (or contain a \`bindings:\` mapping)`)}for(let Q of G)for(let[q,B]of Object.entries(Q)){if(B===null||B===!1||Array.isArray(B)&&B.length===0){X.set(q,[]);continue}let H=typeof B==="string"?[B]:Array.isArray(B)?B:null;if(!H){f.push(`${q}: expected a chord string, a list of chords, or null \u2014 got ${typeof B}`);continue}let K=[],j=!1;for(let U of H){if(typeof U!=="string"){f.push(`${q}: chord entries must be strings`),j=!0;continue}let L=DA(U,Z?.chordOptsFor?.(q));if("error"in L){f.push(`${q}: ${L.error}`),j=!0;continue}if(L.warning)f.push(`${q}: ${L.warning}`);if(!K.includes(L.chord))K.push(L.chord)}if(K.length===0&&j){f.push(`${q}: no valid chords \u2014 keeping the default`);continue}X.set(q,K)}return{entries:Array.from(X,([Q,q])=>({id:Q,keys:q})),warnings:f}}function OA(J,Y){return J===Y||J==="global"||Y==="global"}function G7(J,Y){let Z=[],f=[];for(let X of Y){let G=J.find((j)=>j.id===X.id);if(!G){Z.push(`${X.id}: unknown binding id (press F1 in kobe for the full list)`);continue}let Q=DH[X.id];if(Q){Z.push(`${X.id}: not customizable \u2014 ${Q}`);continue}if(G.keys.length===0){Z.push(`${X.id}: not customizable \u2014 the key is handled outside the keymap (doc-only row)`);continue}let q=jA[X.id];if(q&&X.keys.length>0){let j=q.validateCount(X.keys.length);if(j){Z.push(`${X.id}: ${j} \u2014 keeping the default`);continue}}let B=X.keys.filter((j)=>{if(j.length===1&&WA.has(G.scope))return Z.push(`${X.id}: "${j}" dropped \u2014 a bare character on a ${G.scope}-scope binding would steal typed input (add a modifier)`),!1;return!0});if(B.length===0&&X.keys.length>0){Z.push(`${X.id}: no chords survived validation \u2014 keeping the default`);continue}if(q&&B.length!==X.keys.length){Z.push(`${X.id}: a dropped chord would shift the slot layout (${q.layout}) \u2014 keeping the default`);continue}let H=G.keys,K=G;if(K.keys=B,G.hint)if(B.length===0)K.hint=void 0;else G.hint.keys=B.join("/");f.push({id:X.id,keys:B,defaultKeys:H})}for(let X of f)for(let G of X.keys){let Q=J.find((q)=>q.id===X.id);if(!Q)continue;for(let q of J){if(q.id===X.id)continue;if(!q.keys.includes(G))continue;if(!OA(Q.scope,q.scope))continue;Z.push(`${X.id}: "${G}" also fires ${q.id} (${q.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:f,warnings:Z}}var DH,jA,WA,VA,KA,UA,LA;var fQ=S(()=>{DH={"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)"};jA={"sidebar.nav":of("down","up"),"files.nav":of("down","up"),"sidebar.search.nav":of("down","up"),"files.hierarchy":of("collapse","expand"),"sidebar.view":of("previous view","next view"),"files.tab":of("previous tab","next tab")},WA=new Set(["global","workspace","terminal"]),VA={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},KA={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},UA=new Set(["up","down","left","right","pageup","pagedown","home","end","insert","delete","backspace","tab","space","escape","enter","return",...Array.from({length:12},(J,Y)=>`f${Y+1}`)]),LA=["ctrl","cmd","alt","shift"]});function sf(J){return J in z7}function zf(J,Y){let Z=J.split("+"),f=Z.pop()??"";if(f===""&&Z.length>0){if(f="+",Z[Z.length-1]==="")Z.pop()}let X=new Set(Z);if(X.has("cmd"))return{error:`"${J}": the Command key never reaches tmux \u2014 use ctrl/alt/shift`};let G;if(f.length===1)G=X.has("shift")?f.toUpperCase():f;else{let B=RA[f];if(!B)return{error:`"${J}": tmux can't bind the key "${f}"`};G=B}let Q=/^f\d+$/.test(f);if(X.size===0&&!Q&&!Y?.allowBare)return{error:`"${J}": 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(X.has("ctrl"))q+="C-";if(X.has("alt"))q+="M-";if(X.has("shift"))q+="S-";return{key:q+G}}function q7(){let J={};for(let[Z,f]of Object.entries(Gf)){let X=zf(f,{allowBare:sf(Z)});if("error"in X)throw Error(`default tmux chord for ${Z} failed to translate: ${X.error}`);J[Z]={chord:f,key:X.key}}let Y=LZ.map((Z)=>{let f=zf(Z);if("error"in f)throw Error(`default tmux focus chord ${Z} failed to translate`);return{chord:Z,key:f.key}});return{binds:J,focus:Y,overridden:new Set,warnings:[]}}function MH(J){let Y=q7(),Z=new Set;for(let f of J){if(!f.id.startsWith("tmux."))continue;if(f.id===FY){if(f.keys.length===0){Y.focus=[null,null,null,null],Z.add(FY);continue}if(f.keys.length!==LZ.length){Y.warnings.push(`${FY}: needs exactly 4 chords in order left/down/up/right (got ${f.keys.length}) \u2014 keeping the default`);continue}let q=[],B=!0;for(let H of f.keys){let K=zf(H);if("error"in K){Y.warnings.push(`${FY}: ${K.error} \u2014 keeping the default`),B=!1;break}q.push({chord:H,key:K.key})}if(!B)continue;Y.focus=q,Z.add(FY);continue}if(!(f.id in Gf)){Y.warnings.push(`${f.id}: unknown tmux binding id`);continue}let X=f.id;if(f.keys.length===0){Y.binds[X]=null,Z.add(X);continue}if(f.keys.length>1)Y.warnings.push(`${X}: tmux bindings take ONE chord \u2014 using "${f.keys[0]}", ignoring the rest`);let G=f.keys[0],Q=zf(G,{allowBare:sf(X)});if("error"in Q){Y.warnings.push(`${X}: ${Q.error} \u2014 keeping the default`);continue}if(G!==Gf[X])Z.add(X);Y.binds[X]={chord:G,key:Q.key}}return Y.overridden=Z,Y}function FH(J){return J.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function B7(){Xf=null}function XQ(){if(Xf)return Xf;let J=JQ();if(!J.exists||J.doc===null)return Xf=q7(),Xf;let Y=ZQ(J.doc,process.platform,{chordOptsFor:FH}),Z=Y.warnings.filter((X)=>X.startsWith("tmux.")),f=MH(Y.entries);f.warnings=[...Z,...f.warnings];for(let X of f.warnings)console.warn(`[kobe/keybindings] ${X}`);return Xf=f,Xf}var AA,z7,Q7,Gf,FY="tmux.focus",LZ,RA,Xf=null;var GQ=S(()=>{LH();fQ();AA={"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"},z7={"tmux.layout.workspaceSplit":"s","tmux.layout.workspaceClose":"x","tmux.layout.workspaceReset":"r","tmux.layout.tasksToggle":"a","tmux.layout.opsToggle":"o","tmux.layout.terminalToggle":"z"},Q7=["F6","F7","F8","F9","F10","F11"],Gf={...AA,...z7};LZ=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],RA={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},(J,Y)=>[`f${Y+1}`,`F${Y+1}`]))}});async function tX(J,Y){let Z=null;for(let X=0;X<24;X++){let G=await hf(J);if(G){if(!Y)return{pane:G,ready:!0};let Q=(await Pf(G)).trim();if(Q.length>0&&Q===Z)return{pane:G,ready:!0};Z=Q}await gA(250)}return{pane:await hf(J)||await mB(J),ready:!1}}async function eX(J,Y){let Z=`kobe-api-${J.replace(/[^A-Za-z0-9]/g,"")}`;await u0(["set-buffer","-b",Z,"--",Y]),await u0(["paste-buffer","-p","-d","-b",Z,"-t",J]),await lX(J,"Enter")}async function H7(J,Y){let{pane:Z}=await tX(J,!0);if(!Z)return;await eX(Z,Y.text)}var gA=(J)=>new Promise((Y)=>setTimeout(Y,J));var zQ=S(()=>{N1()});function j7(J,Y){if(J===null)return{kind:"create",reason:"no session with this name \u2014 build fresh"};let Z=J.worktree===Y.cwd,f=!Y.vendor||J.vendor===Y.vendor;if(J.claudePaneAlive&&Z&&f)return{kind:"reuse",reason:"healthy: engine pane alive, worktree + vendor match"};if(Z&&!f&&Y.hasEngineCommand)return{kind:"respawn-engine",reason:`vendor drift: session tagged ${J.vendor===""?"<untagged>":`"${J.vendor}"`}, task wants "${Y.vendor}" \u2014 relaunch engine pane in place (KOB-232)`};if(Z&&f&&J.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(!Z)return{kind:"rebuild",reason:J.worktree===""?"legacy session with no @kobe_worktree tag \u2014 rebuild in the right place":`worktree drift: session tagged "${J.worktree}", task wants "${Y.cwd}" \u2014 rebuild`};if(!f)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 W7;var V7=S(()=>{$z();az();pz();_z();rz();oz();sz();W7={claude:df,conductor:nf,nord:$f,opencode:af,dracula:lf,tokyonight:_f,"osaka-jade":pf}});function CA(J){let Y=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.exec(J);if(!Y)return null;let Z=Y[1];if(Z.length===3){let[f,X,G]=Z;return`#${f}${f}${X}${X}${G}${G}`.toLowerCase()}return`#${Z.slice(0,6)}`.toLowerCase()}function K7(J,Y,Z="dark"){let f=J.defs??{};function X(Q,q){if(typeof Q==="string"){if(Q==="transparent"||Q==="none")return null;if(Q.startsWith("#"))return CA(Q);if(q.includes(Q))return null;let H=f[Q]??J.theme[Q];if(H===void 0)return null;return X(H,[...q,Q])}if(!Q||typeof Q!=="object")return null;let B=Q[Z];return typeof B==="string"?X(B,q):null}let G=J.theme[Y];if(G===void 0)return null;return X(G,[Y])}function QQ(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function qQ(J){if(!QQ(J))return{ok:!1,reason:"theme must be a JSON object at the top level"};let Y=J;if(!("theme"in Y))return{ok:!1,reason:"missing required key `theme`"};let Z=Y.theme;if(!QQ(Z))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in Y&&Y.defs!==void 0){if(!QQ(Y.defs))return{ok:!1,reason:"`defs` must be an object map"};for(let[f,X]of Object.entries(Y.defs))if(typeof X!=="string")return{ok:!1,reason:`defs.${f} must be a string (hex like "#abc" or a ref name)`}}for(let[f,X]of Object.entries(Z)){if(typeof X==="string")continue;if(!QQ(X))return{ok:!1,reason:`theme.${f} must be a string or a { dark, light } object (got ${X===null?"null":Array.isArray(X)?"array":typeof X})`};let G=X;if(typeof G.dark!=="string")return{ok:!1,reason:`theme.${f}.dark must be a string`};if(typeof G.light!=="string")return{ok:!1,reason:`theme.${f}.light must be a string`}}if("$schema"in Y&&Y.$schema!==void 0&&typeof Y.$schema!=="string")return{ok:!1,reason:"`$schema` must be a string when present"};return{ok:!0,theme:Y}}var OH=()=>{};import{readFileSync as SA,readdirSync as yA}from"fs";import{join as U7}from"path";function tf(){return U7(r1(),"themes")}function JG(){let J=tf(),Y;try{Y=yA(J)}catch{return[]}let Z=[];for(let f of Y){if(!f.endsWith(".json"))continue;let X=U7(J,f),G;try{let B=SA(X,"utf8");G=JSON.parse(B)}catch(B){let H=B instanceof Error?B.message:String(B);console.warn(`[kobe] skipping user theme ${X}: invalid JSON \u2014 ${H}`);continue}let Q=qQ(G);if(!Q.ok){console.warn(`[kobe] skipping user theme ${X}: ${Q.reason}`);continue}let q=f.slice(0,-5);Z.push({name:q,theme:Q.theme})}return Z}var BQ=S(()=>{c1();OH()});import{readFileSync as kA}from"fs";function NA(){try{let J=JSON.parse(kA(EJ(),"utf8")),Y=typeof J.activeTheme==="string"&&J.activeTheme?J.activeTheme:"claude",Z=typeof J.focusAccent==="string"&&IA.includes(J.focusAccent)?J.focusAccent:"primary";return{themeName:Y,focusAccentSlot:Z,enabled:J.tmuxChromeTheme!=="off"&&J.tmuxBorderTheme!=="off"}}catch{return{themeName:"claude",focusAccentSlot:"primary",enabled:!0}}}function bA(J){return JG().find((Z)=>Z.name===J)?.theme??W7[J]??null}function JY(J,...Y){for(let Z of Y){let f=K7(J,Z);if(f)return f}return null}function L7(J,Y){let Z=JY(J,"text"),f=JY(J,"background"),X=JY(J,"textMuted","text"),G=JY(J,"backgroundPanel","background"),Q=JY(J,"backgroundElement","backgroundPanel","background"),q=JY(J,"backgroundMenu","backgroundElement","backgroundPanel","background"),B=JY(J,"selectedListItemText","background"),H=JY(J,Y,"primary","borderActive","border","text");return{border:JY(J,"border","text"),activeBorder:H,statusBg:G,statusFg:X,statusMutedFg:X,windowFg:X,currentWindowBg:Q,currentWindowFg:H,activityFg:JY(J,"info","primary","text"),bellFg:JY(J,"warning","error","primary","text"),messageBg:q,messageFg:Z,messageCommandFg:H,modeBg:H,modeFg:B??f}}function cJ(J){let Y=[];if(J.bg)Y.push(`bg=${J.bg}`);if(J.fg)Y.push(`fg=${J.fg}`);if(Y.length===0)return null;if(J.attrs)Y.push(...J.attrs);return Y.join(",")}function M7(J){let Y=cJ({bg:J.statusBg,fg:J.statusFg}),Z=cJ({bg:J.statusBg,fg:J.statusMutedFg}),f=cJ({bg:J.statusBg,fg:J.windowFg});return[{key:"border",option:"pane-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:cJ({fg:J.border})},{key:"active",option:"pane-active-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:cJ({fg:J.activeBorder})},{key:"status",option:"status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Y},{key:"status-left",option:"status-left-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Z},{key:"status-right",option:"status-right-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Z},{key:"window",option:"window-status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:f},{key:"current-window",option:"window-status-current-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:cJ({bg:J.currentWindowBg,fg:J.currentWindowFg,attrs:["bold"]})},{key:"activity-window",option:"window-status-activity-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:cJ({bg:J.statusBg,fg:J.activityFg})},{key:"bell-window",option:"window-status-bell-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:cJ({bg:J.statusBg,fg:J.bellFg,attrs:["bold"]})},{key:"last-window",option:"window-status-last-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:cJ({bg:J.statusBg,fg:J.statusFg})},{key:"message",option:"message-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:cJ({bg:J.messageBg,fg:J.messageFg})},{key:"message-command",option:"message-command-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:cJ({bg:J.messageBg,fg:J.messageCommandFg,attrs:["bold"]})},{key:"mode",option:"mode-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:cJ({bg:J.modeBg,fg:J.modeFg})},{key:"display-panes",option:"display-panes-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:J.border},{key:"display-panes-active",option:"display-panes-active-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:J.activeBorder}]}function TA(J){let Y=new Set(J.marker.split(",").map((G)=>G.trim()).filter(Boolean)),Z=[],f=[];for(let G of M7(J.hexes))if(G.value){if((J.current[G.key]??"")!==G.value)Z.push(["set-option",G.setFlag,G.option,G.value]);f.push(G.key)}else if(Y.has(G.key))Z.push(["set-option",G.unsetFlag,G.option]);let X=f.join(",");if(X!==J.marker)Z.push(X?["set-option","-g",AH,X]:["set-option","-gu",AH]);return Z}async function D7(J){let{code:Y,stdout:Z}=await v0(J);return Y===0?Z.trim():""}async function Qf(){try{let J=NA(),Y=J.enabled?bA(J.themeName):null,Z=Y?L7(Y,J.focusAccentSlot):L7({theme:{}},J.focusAccentSlot),f=M7(Z),[X,...G]=await Promise.all([D7(["show-options","-gqv",AH]),...f.map((B)=>D7(["show-options",B.showFlag,B.option]))]),Q=Object.fromEntries(f.map((B,H)=>[B.key,G[H]??""])),q=TA({marker:X,current:Q,hexes:Z});if(q.length>0)await w1(q)}catch{}}var AH="@kobe_border_theme",IA;var HQ=S(()=>{c1();N1();V7();BQ();IA=["primary","success","info"]});var gH={};Q1(gH,{recordGen:()=>qf,isLatestGen:()=>g7,genAgeMs:()=>vA,coalesceLayoutWork:()=>mA,RESIZE_GUARD_MS:()=>PA,LAYOUT_COALESCE_MS:()=>A7});import{createHash as EA,randomUUID as uA}from"crypto";import{mkdirSync as xA,readFileSync as F7,renameSync as wA,writeFileSync as hA}from"fs";import{join as O7}from"path";function R7(){return O7(r1(),"layout-coord")}function RH(J,Y){let Z=EA("sha1").update(J).digest("hex").slice(0,16);return O7(R7(),`${Z}.${Y}`)}function qf(J,Y){let Z=uA();try{xA(R7(),{recursive:!0});let f=RH(J,Y),X=`${f}.${Z}.tmp`;hA(X,`${Date.now()}
58
- ${Z}`),wA(X,f)}catch{}return Z}function g7(J,Y,Z){try{return F7(RH(J,Y),"utf8").split(`
59
- `)[1]?.trim()===Z}catch{return!0}}function vA(J,Y,Z=Date.now()){try{let f=Number.parseInt(F7(RH(J,Y),"utf8").split(`
60
- `)[0]??"",10);return Number.isFinite(f)?Z-f:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function mA(J,Y,Z,f=A7){let X=qf(J,Y);if(f>0)await new Promise((G)=>setTimeout(G,f));if(!g7(J,Y,X))return;await Z()}var A7=120,PA=400;var YG=S(()=>{c1()});function dA(J){let Y=[];for(let Z of J.split(`
61
- `)){let f=Z.trim();if(!f)continue;let[X,G,Q,q,B]=f.split("\t");if(!X||!G||!Q)continue;let H=Number.parseInt(B?.trim()??"",10);Y.push({windowId:X.trim(),paneId:G.trim(),role:Q.trim(),version:q?.trim()??"",...Number.isFinite(H)?{paneWidth:H}:{}})}return Y}function C7(J,Y){let Z=new Map;for(let X of J){let G=Z.get(X.windowId)??[];G.push(X),Z.set(X.windowId,G)}let f=[];for(let X of Z.values()){let G=X.find((H)=>H.role==="claude")?.paneId,Q=X.find((H)=>H.role==="tasks"),q=X.find((H)=>H.role==="ops");if(Q&&(Y.force||Q.version!==Y.currentVersion))f.push({role:"tasks",paneId:Q.paneId});let B=Y.force?!0:G&&(Y.vendorChanged||q?.version!==Y.currentVersion);if(q&&B)f.push({role:"ops",paneId:q.paneId,claudePaneId:G??null})}return f}async function CH(J){let{code:Y,stdout:Z}=await v0(["list-panes","-s","-t",`=${J}`,"-F",cA]);if(Y!==0)return null;return dA(Z)}function S7(J,Y){let Z=S1(),f=YJ(),X=[];for(let G of J){let Q=G.role==="tasks"?zZ(Z,{initialTaskId:Y.taskId}):Nf({cwd:Y.cwd,taskId:Y.taskId,claudePaneId:G.claudePaneId,cliInvocation:Z,vendor:Y.vendor});X.push(["respawn-pane","-k","-t",G.paneId,"-c",I1(Y.cwd),VJ(f+Q)],["set-option","-p","-t",G.paneId,"@kobe_role",G.role],["set-option","-p","-t",G.paneId,YY,n0])}return X}async function y7(J,Y,Z,f,X){let G=await CH(J);if(!G)return!1;let Q=G.filter((H)=>H.role==="claude");if(Q.length===0)return!1;let q=I1(Y),B=[];for(let H of Q){let K=vf(Z,X),j=VJ(Tf(PJ(K.argv),f,Y));B.push(["respawn-pane","-k","-c",q,"-t",H.paneId,j]),B.push(K.sessionId?["set-window-option","-t",H.paneId,DY,K.sessionId]:["set-window-option","-u","-t",H.paneId,DY])}return await w1(B),!0}async function k7(){let J=await BZ([vY,$Z,mY]),Y=Number.parseInt(J[vY]??"",10),Z=Number.isFinite(Y)&&Y>0?lZ(Y):nZ,f=nA({widthPct:cY(Number.parseInt(J[$Z]??"",10)),heightPct:cY(Number.parseInt(J[mY]??"",10))});return{tasksWidth:Z,rcArgs:f}}function nA(J){let Y=[];if(J.widthPct!==null)Y.push("-x",`${J.widthPct}%`);if(J.heightPct!==null)Y.push("-y",`${J.heightPct}%`);return Y}async function I7(){return(await k7()).rcArgs}async function ef(J,Y){qf(J,"resize");let{tasksWidth:Z,rcArgs:f}=await k7(),X=await CH(J);if(!X)return;let G=[];for(let Q of X)if(Q.role==="tasks"&&Q.paneWidth!==Z)G.push(["resize-pane","-t",Q.paneId,"-x",`${Z}`]);if(f.length>0){for(let Q of X)if(Q.role==="ops")G.push(["resize-pane","-t",Q.paneId,...f])}if(Y)G.push(...S7(C7(X,{currentVersion:n0,force:!1,vendorChanged:Y.vendorChanged}),Y));if(G.length>0)await w1(G)}async function N7(J){if(!await X1(J))return;await ef(J)}async function ZG(J){let{code:Y,stdout:Z}=await v0(["list-panes","-t",`=${J}`,"-F",`#{@kobe_role} #{pane_width} #{pane_height} #{window_width} #{window_height} #{window_zoomed_flag} #{${VY}} #{${yJ}}`]);if(Y!==0)return;let f=Z.split(`
62
- `).map((H)=>H.split("\t")).filter((H)=>(H[0]?.trim()??"")!=="");if(f.length===0)return;if(f.some((H)=>H[5]?.trim()==="1"))return;if(f.some((H)=>(H[6]?.trim()??"")!==""))return;if(f.some((H)=>(H[7]?.trim()??"")!==""))return;let X=Number.parseInt(f[0][3]?.trim()??"",10),G=Number.parseInt(f[0][4]?.trim()??"",10),Q=[],q=f.find(([H])=>H?.trim()==="tasks");if(q){let H=Number.parseInt(q[1]?.trim()??"",10);if(Number.isFinite(H)&&H>0)Q.push(["set-option","-s",vY,`${lZ(H)}`])}let B=f.find(([H])=>H?.trim()==="ops");if(B&&Number.isFinite(X)&&X>0&&Number.isFinite(G)&&G>0){let H=Number.parseInt(B[1]?.trim()??"",10),K=Number.parseInt(B[2]?.trim()??"",10),j=Number.isFinite(H)?cY(100*H/X):null,U=Number.isFinite(K)?cY(100*K/G):null;if(j!==null)Q.push(["set-option","-s",$Z,`${j}`]);if(U!==null)Q.push(["set-option","-s",mY,`${U}`])}if(Q.length>0)await w1(Q)}function iA(J){let Y=J.split(`
63
- `).map((f)=>f.split("\t")).filter((f)=>(f[0]?.trim()??"")!=="");if(Y.length===0)return!1;if(Y.some((f)=>f[1]?.trim()==="1"))return!1;if(Y.some((f)=>(f[2]?.trim()??"")!==""))return!1;if(Y.some((f)=>(f[3]?.trim()??"")!==""))return!1;let Z=new Set(Y.map((f)=>f[0]?.trim()));return Z.has("tasks")&&Z.has("ops")}async function b7(J){let{code:Y,stdout:Z}=await v0(["list-panes","-t",`=${J}`,"-F",`#{@kobe_role} #{window_zoomed_flag} #{${VY}} #{${yJ}}`]);if(Y!==0||!iA(Z))return;await ZG(J)}async function JX(J){let Y=await KJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor"]),Z=Y["@kobe_worktree"]||process.cwd(),f=Y["@kobe_task"]||void 0,X=Y["@kobe_vendor"]||void 0,G=await CH(J);if(!G)return;let Q=S7(C7(G,{currentVersion:n0,force:!0}),{cwd:Z,taskId:f,vendor:X});if(Q.length>0)await w1(Q);await Qf()}var YY="@kobe_pane_version",cA;var fG=S(()=>{wY();kJ();$J();N1();KY();HQ();QJ();Ef();YG();cA=`#{window_id} #{pane_id} #{@kobe_role} #{${YY}} #{pane_width}`});function WQ(J,Y){return[["bind-key","-n",J,"if-shell","-F","#{?#{@kobe_surface},0,1}","previous-window"],["bind-key","-n",Y,"if-shell","-F","#{?#{@kobe_surface},0,1}","next-window"]]}function VQ(J,Y="kill-window"){return["bind-key","-n",J,"if-shell","-F","#{>:#{session_windows},1}",Y,"display-message 'Cannot close the only ChatTab'"]}function KQ(J){return["bind-key","-n",J,"command-prompt","-I","#{window_name}","rename-window -- '%%'"]}function UQ(J){return[["bind-key","-n",J,"command-prompt","-p",jQ],["bind-key","T","command-prompt","-p",jQ]]}function SH(J){return J.startsWith("C-")&&J.length===3?`^${J.slice(2)}`:J}function LQ(J){return`${[J.focusLeft?`${SH(J.focusLeft)} tasks`:null,J.detach?`${SH(J.detach)} detach`:null,J.newTab?`${SH(J.newTab)} tab`:null,J.layoutSplits?`prefix ${J.layoutSplits} splits`:null,J.layoutPanes?`prefix ${J.layoutPanes} panes`:null].filter((Z)=>Z!==null).join(" ")} `}async function kH(J,Y){let Z=YJ(),f=await bz(),X=VJ(Y.opsCommand??Z+Nf({cwd:Y.cwd,taskId:Y.taskId,claudePaneId:J,cliInvocation:Y.inv,vendor:Y.vendor})),{stdout:G}=await nX([["set-option","-p","-t",J,"@kobe_role","claude"],["set-window-option","-t",J,yH,"idle"],["split-window","-h","-b","-t",J,"-l",`${f}`,"-c",I1(Y.cwd),"-P","-F","tasks=#{pane_id}",VJ(Z+zZ(Y.inv,{initialTaskId:Y.taskId}))],["split-window","-h","-t",J,"-l",`${100-Az}%`,"-c",I1(Y.cwd),"-P","-F","ops=#{pane_id}",X],["split-window","-v","-l",`${100-vX}%`,"-c",I1(Y.cwd),"-P","-F","shell=#{pane_id}"],["select-pane","-t",J]]),Q=Object.fromEntries(G.split(`
64
- `).map((q)=>q.trim()).filter(Boolean).map((q)=>q.split("=",2)));if(await w1([...Q.tasks?[["set-option","-p","-t",Q.tasks,"@kobe_role",hY]]:[],...Q.tasks?[["set-option","-p","-t",Q.tasks,YY,n0]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,"@kobe_role",iZ]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,YY,n0]]:[],...Q.shell?[["set-option","-p","-t",Q.shell,"@kobe_role",PY]]:[]]),Q.ops){let q=await I7();if(q.length>0)await u0(["resize-pane","-t",Q.ops,...q])}}async function T7(J,Y){if(!await X1(J))return;let Z=await KJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor",dX]),f=Z["@kobe_worktree"]||process.cwd(),X=Z["@kobe_task"]||void 0,G=Z[dX]||void 0,Q=Y??Z["@kobe_vendor"];if(Y)await lA(J,X,Y);let q=LJ(Q),B=vf(q,Q),H=S1(),j=(await v0(["new-window","-t",`=${J}`,"-c",I1(f),"-P","-F","#{pane_id}",VJ(Tf(PJ(B.argv),G,f))])).stdout.trim();if(!j)return;if(B.sessionId)await HZ(j,DY,B.sessionId);await kH(j,{cwd:f,taskId:X,inv:H,vendor:Q})}async function MQ(J){if(!await X1(J))return;let Z=(await KJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),f=S1(),G=`${YJ()}${f.map(Z1).join(" ")} settings`;await sJ(J,{cwd:I1(Z),command:G,name:"settings",surface:!0})}async function FQ(J){if(!await X1(J))return;let Z=(await KJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),f=S1(),G=`${YJ()}${f.map(Z1).join(" ")} help-page`;await sJ(J,{cwd:I1(Z),command:G,name:"help",surface:!0})}async function OQ(J,Y){if(!await X1(J))return;let f=(await KJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),X=S1(),G=YJ(),Q=Y?` --repo ${Z1(Y)}`:"",q=`${G}${X.map(Z1).join(" ")} new-task${Q}`;await sJ(J,{cwd:I1(f),command:q,name:"new task",surface:!0})}async function AQ(J){if(!await X1(J))return;let Z=(await KJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),f=S1(),G=`${YJ()}${A8({cliInvocation:f})}`;await sJ(J,{cwd:I1(Z),command:G,name:"update",surface:!0})}async function E7(J){if(!await X1(J))return;let Z=(await KJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),f=S1(),G=`${YJ()}${f.map(Z1).join(" ")} quick-task --session ${Z1(J)}`;await sJ(J,{cwd:I1(Z),command:G,name:"quick task",surface:!0})}async function lA(J,Y,Z){if(await wf(J,"@kobe_vendor",Z),!Y)return;try{let{connectOrStartDaemon:f}=await Promise.resolve().then(() => (DJ(),NH)),X=await f();try{await X.request("task.setVendor",{taskId:Y,vendor:Z})}finally{X.close()}}catch(f){console.error("[kobe tmux] failed to persist selected engine vendor:",f)}}var jQ,yH="@kobe_tab_state",XG="#{?#{==:#{@kobe_tab_state},running},\u25CF,#{?#{==:#{@kobe_tab_state},done},\u2713,#{?#{==:#{@kobe_tab_state},error},!,#{?#{==:#{@kobe_tab_state},unknown},?,\u25CB}}}} #I:#W",DQ;var IH=S(()=>{wY();kJ();$J();N1();KY();zJ();QJ();Ef();fG();jQ=`engine (${h1.join("/")}/\u2026)`;DQ=XG});function aA(J){let Y=[];for(let Z of J.split(`
65
- `)){let f=Z.trim();if(!f)continue;let[X,G,Q,q,B,H,K]=f.split("\t");if(!X)continue;let j=Number.parseInt(q??"",10),U=Number.parseInt(B??"",10),L=Number.parseInt(H??"",10),F=Number.parseInt(K??"",10);Y.push({paneId:X.trim(),role:G?.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(F)?F:0})}return Y}function pA(J){let Y=J.find((f)=>f.role===If);if(!Y)return{kind:"missing-engine"};let Z=J.filter((f)=>f.role===hX);if(Z.length+1>=LB)return{kind:"maxed"};if(Z.length===0)return{kind:"split",targetPane:Y.paneId,direction:"-h"};if(Z.length===1)return{kind:"split",targetPane:Z[0]?.paneId??Y.paneId,direction:"-v"};return{kind:"split",targetPane:Y.paneId,direction:"-v"}}function u7(J){return J.find((Y)=>Y.role===PY)??J.find((Y)=>Y.role==="")}function _A(J){return 100-(cY(J??Number.NaN)??vX)}function rA(J){let Y=Number.parseInt(J??"",10);return Number.isFinite(Y)&&Y>0?Y:void 0}async function OY(J,Y){let Z=Y?.trim()||`=${J}`,{code:f,stdout:X}=await v0(["list-panes","-t",Z,"-F",$A]);return f===0?aA(X):null}async function oA(J){let{code:Y,stdout:Z}=await v0(["list-windows","-t",`=${J}`,"-F","#{window_active}\t#{window_id}"]);if(Y!==0)return"";for(let f of Z.split(`
66
- `)){let[X,G]=f.split("\t");if(X?.trim()==="1"&&G?.trim())return G.trim()}return""}async function RQ(J,Y){let{code:Z,stdout:f}=await v0(["show-options","-wqv","-t",J,Y]);return Z===0?f.trim():""}async function x7(J,Y,Z){await u0(["set-window-option","-t",J,Y,Z])}async function Bf(J,Y){await u0(["set-window-option","-u","-t",J,Y])}async function bH(J){let{code:Y,stdout:Z}=await v0(["display-message","-p","-t",J,"#{pane_id}"]);return Y===0&&Z.trim()===J}async function m1(J,Y){await u0(["display-message","-t",J,Y])}async function gQ(J){let Y=await KJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor"]);return{cwd:Y["@kobe_worktree"]||process.cwd(),taskId:Y["@kobe_task"]||void 0,vendor:Y["@kobe_vendor"]||void 0}}function sA(J){let Y=S1(),Z=YJ();return VJ(Z+Nf({cwd:J.cwd,taskId:J.taskId,claudePaneId:J.enginePaneId,cliInvocation:Y,vendor:J.vendor}))}async function tA(J,Y){return Y?.trim()||await oA(J)}async function eA(J,Y){let Z=await OY(J,Y);if(!Z)return;let f=pA(Z);if(f.kind==="missing-engine"){await m1(Y,"kobe: no engine pane in this window");return}if(f.kind==="maxed"){await m1(Y,`kobe: workspace split limit is ${LB} panes`);return}let{cwd:X}=await gQ(J),{code:G,stdout:Q}=await v0(["split-window",f.direction,"-t",f.targetPane,"-l","50%","-c",I1(X),"-P","-F","#{pane_id}",VJ("true")]),q=Q.trim();if(G!==0||!q)return;await w1([["set-option","-p","-t",q,"@kobe_role",hX],["select-pane","-t",q]])}async function J2(J,Y){let Z=await OY(J,Y);if(!Z)return;let f=Z.filter((Q)=>Q.role===hX);if(f.length===0){await m1(Y,"kobe: no workspace split to close");return}let G=f.find((Q)=>Q.active)??f[f.length-1];if(!G)return;await u0(["kill-pane","-t",G.paneId])}async function Y2(J,Y){let Z=await OY(J,Y);if(!Z)return;let f=Z.filter((X)=>X.role===hX);if(f.length===0){await m1(Y,"kobe: no workspace splits to reset");return}await w1(f.map((X)=>["kill-pane","-t",X.paneId]))}async function w7(){let J=await BZ([vY]);return lZ(rA(J[vY])??nZ)}async function Z2(J){let{cwd:Y,taskId:Z}=await gQ(J),f=S1(),X=YJ();return{cwd:Y,command:VJ(X+zZ(f,{initialTaskId:Z}))}}async function f2(J,Y){let Z=await OY(J,Y);if(!Z)return;let f=Z.find((D)=>D.role===iZ);if(f){await u0(["kill-pane","-t",f.paneId]);return}let X=u7(Z),G=Z.find((D)=>D.role===If);if(!G){await m1(Y,"kobe: cannot restore file pane in this layout");return}let{cwd:Q,taskId:q,vendor:B}=await gQ(J),H=sA({cwd:Q,taskId:q,vendor:B,enginePaneId:G.paneId}),K=X?["split-window","-v","-b","-t",X.paneId,"-l",`${await X2()}%`,"-c",I1(Q),"-P","-F","#{pane_id}",H]:["split-window","-h","-t",G.paneId,"-l",`${await TH()}%`,"-c",I1(Q),"-P","-F","#{pane_id}",H],{code:j,stdout:U}=await v0(K),L=U.trim();if(j!==0||!L)return;let F=[["set-option","-p","-t",L,"@kobe_role",iZ],["set-option","-p","-t",L,YY,n0]];if(X?.role==="")F.push(["set-option","-p","-t",X.paneId,"@kobe_role",PY]);await w1(F)}async function X2(){let J=await BZ([mY]);return cY(Number.parseInt(J[mY]??"",10))??vX}async function TH(){let J=await BZ([$Z]);return cY(Number.parseInt(J[$Z]??"",10))??100-Az}async function h7(){let J=await BZ([mY]);return _A(Number.parseInt(J[mY]??"",10))}async function G2(J){let{code:Y,stdout:Z}=await v0(["list-windows","-t",`=${J}`,"-F","#{window_index}"]);if(Y!==0)return new Set;return new Set(Z.split(`
67
- `).map((f)=>Number.parseInt(f.trim(),10)).filter((f)=>Number.isFinite(f)))}async function P7(J,Y){let Z=await G2(J),f=D8(Y);while(Z.has(f))f++;return f}async function v7(J){let Y=PX(J);if(await X1(Y))return Y;return await u0(["new-session","-d","-s",Y,"-n","hidden-panes","-c",I1(process.cwd()),"while :; do sleep 3600; done"]),Y}async function EH(J){let Y=PX(J);if(!await X1(Y))return;let{code:Z,stdout:f}=await v0(["list-panes","-s","-t",`=${Y}`,"-F","#{@kobe_role}"]);if(Z!==0)return;if(!f.split(`
68
- `).some((G)=>{let Q=G.trim();return Q===PY||Q===hY}))await u0(["kill-session","-t",`=${Y}`])}async function z2(J,Y){await m7(J,Y,VY)}async function Q2(J,Y){await m7(J,Y,yJ)}async function m7(J,Y,Z){let f=await RQ(Y,Z);if(!f)return;if(await bH(f))await u0(["kill-pane","-t",f]);await Bf(Y,Z)}async function q2(J,Y){await z2(J,Y),await Q2(J,Y),await EH(J)}function c7(J){return J.find((Y)=>Y.role===If)??J[0]}async function uH(J,Y,Z){let f=c7(Z);if(!f)return await m1(Y,"kobe: cannot restore Tasks pane in this layout"),!1;let X=await w7(),{cwd:G,command:Q}=await Z2(J),{code:q,stdout:B}=await v0(["split-window","-h","-b","-t",f.paneId,"-l",`${X}`,"-c",I1(G),"-P","-F","#{pane_id}",Q]),H=B.trim();if(q!==0||!H)return!1;return await w1([["set-option","-p","-t",H,"@kobe_role",hY],["set-option","-p","-t",H,YY,n0],["select-pane","-t",H]]),await Bf(Y,yJ),await m1(Y,"kobe: Tasks pane restored"),!0}async function B2(J,Y,Z){let f=await v7(J),X=await P7(f,Y),{code:G,stdout:Q}=await v0(["break-pane","-d","-s",Z.paneId,"-t",`${f}:${X}`,"-P","-F","#{pane_id}"]),q=Q.trim()||Z.paneId;if(G!==0||!q){await m1(Y,"kobe: could not hide Tasks pane");return}await x7(Y,yJ,q),await m1(Y,"kobe: Tasks pane hidden")}async function d7(J,Y,Z){let f=await OY(J,Y);if(!f)return;if(!await bH(Z)){await Bf(Y,yJ);let Q=f.find((q)=>q.role===hY);if(Q){await u0(["select-pane","-t",Q.paneId]);return}await uH(J,Y,f);return}let X=c7(f);if(!X){await m1(Y,"kobe: cannot restore Tasks pane in this layout");return}if(await u0(["join-pane","-h","-b","-s",Z,"-t",X.paneId,"-l",`${await w7()}`])!==0){await m1(Y,"kobe: could not restore Tasks pane");return}await w1([["set-option","-p","-t",Z,"@kobe_role",hY],["set-option","-p","-t",Z,YY,n0],["select-pane","-t",Z]]),await Bf(Y,yJ),await EH(J),await m1(Y,"kobe: Tasks pane restored")}async function H2(J,Y){let Z=await RQ(Y,yJ);if(Z){await d7(J,Y,Z);return}let f=await OY(J,Y);if(!f)return;let X=f.find((G)=>G.role===hY);if(X){await B2(J,Y,X);return}await uH(J,Y,f)}async function j2(J,Y){let Z=await RQ(Y,yJ);if(Z){await d7(J,Y,Z);return}let f=await OY(J,Y);if(!f)return;let X=f.find((G)=>G.role===hY);if(X){await u0(["select-pane","-t",X.paneId]);return}await uH(J,Y,f)}async function W2(J,Y,Z){if(Z.role==="")await u0(["set-option","-p","-t",Z.paneId,"@kobe_role",PY]);let f=await v7(J),X=await P7(f,Y),{code:G,stdout:Q}=await v0(["break-pane","-d","-s",Z.paneId,"-t",`${f}:${X}`,"-P","-F","#{pane_id}"]),q=Q.trim()||Z.paneId;if(G!==0||!q){await m1(Y,"kobe: could not hide terminal pane");return}await x7(Y,VY,q),await m1(Y,"kobe: Terminal pane hidden")}async function n7(J,Y,Z){let f=Z.find((K)=>K.role===iZ),X=Z.find((K)=>K.role===If);if(!f&&!X)return await m1(Y,"kobe: cannot restore terminal pane in this layout"),!1;let{cwd:G}=await gQ(J),Q=f?["split-window","-v","-t",f.paneId,"-l",`${await h7()}%`,"-c",I1(G),"-P","-F","#{pane_id}"]:["split-window","-h","-t",X?.paneId??"","-l",`${await TH()}%`,"-c",I1(G),"-P","-F","#{pane_id}"],{code:q,stdout:B}=await v0(Q),H=B.trim();if(q!==0||!H)return!1;return await u0(["set-option","-p","-t",H,"@kobe_role",PY]),await Bf(Y,VY),await m1(Y,"kobe: Terminal pane restored"),!0}async function V2(J,Y,Z){let f=await OY(J,Y);if(!f)return;if(!await bH(Z)){await Bf(Y,VY),await n7(J,Y,f);return}let X=f.find((H)=>H.role===iZ),G=f.find((H)=>H.role===If);if(!X&&!G){await m1(Y,"kobe: cannot restore terminal pane in this layout");return}let Q=X?["join-pane","-v","-s",Z,"-t",X.paneId,"-l",`${await h7()}%`]:["join-pane","-h","-s",Z,"-t",G?.paneId??"","-l",`${await TH()}%`];if(await u0(Q)!==0){await m1(Y,"kobe: could not restore terminal pane");return}await u0(["set-option","-p","-t",Z,"@kobe_role",PY]),await Bf(Y,VY),await EH(J),f=await OY(J,Y);let B=f?.find((H)=>H.paneId===Z);if(B)await u0(["select-pane","-t",B.paneId]);await m1(Y,"kobe: Terminal pane restored")}async function K2(J,Y){let Z=await RQ(Y,VY);if(Z){await V2(J,Y,Z);return}let f=await OY(J,Y);if(!f)return;let X=u7(f);if(X){await W2(J,Y,X);return}await n7(J,Y,f)}async function U2(J){let{code:Y,stdout:Z}=await v0(["list-windows","-t",`=${J}`,"-F","#{window_id}"]);if(Y!==0)return 0;return Z.split(`
69
- `).filter((f)=>f.trim().length>0).length}async function L2(J,Y){if(await U2(J)<=1){await m1(Y,"Cannot close the only ChatTab");return}await q2(J,Y),await u0(["kill-window","-t",Y])}async function CQ(J,Y,Z={}){if(!await X1(J))return;let f=await tA(J,Z.windowId);if(!f)return;switch(Y){case"workspace-split":await eA(J,f);return;case"workspace-close":await J2(J,f);return;case"workspace-reset":await Y2(J,f);return;case"tasks-toggle":await H2(J,f);return;case"tasks-restore":await j2(J,f);return;case"ops-toggle":await f2(J,f);return;case"terminal-toggle":await K2(J,f);return;case"chat-tab-close":await L2(J,f);return}}var $A="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var xH=S(()=>{wY();$J();N1();KY();QJ();Ef();fG()});var ZY={};Q1(ZY,{tmuxWindowSizeArgsForClient:()=>p7,tmuxSessionName:()=>K1,tmuxInitialSizeArgs:()=>l7,tmuxInitialClientSize:()=>hH,tmuxAvailable:()=>LY,switchClientBeforeKill:()=>MY,sessionExists:()=>X1,selectTasksPane:()=>g2,runLayoutAction:()=>CQ,refreshKobeWorkspacePanes:()=>JX,quickCreate:()=>E7,prepareWindowForSwitch:()=>yQ,prepareWindowForAttach:()=>SQ,parseTmuxClientRows:()=>$7,parseObservedSession:()=>o7,openUpdateTab:()=>AQ,openSettingsTab:()=>MQ,openNewTaskTab:()=>OQ,openHelpTab:()=>FQ,newChatTab:()=>T7,kobeStatusRight:()=>LQ,killSession:()=>vJ,healSessionLayout:()=>N7,focusBindCommand:()=>r7,ensureSession:()=>MZ,currentSessionName:()=>UJ,clientsWithConflictingSize:()=>a7,chatTabSwitchBindings:()=>WQ,chatTabRenameBinding:()=>KQ,chatTabCloseBinding:()=>VQ,chatTabChooseEngineBindings:()=>UQ,captureGlobalLayoutOnDrag:()=>b7,captureGlobalLayout:()=>ZG,attachArgv:()=>xf,PANE_VERSION_OPTION:()=>YY,CHAT_TAB_STATUS_FORMAT:()=>XG,CHAT_TAB_STATUS_CURRENT_FORMAT:()=>DQ,CHAT_TAB_STATE_OPTION:()=>yH,CHAT_TAB_ENGINE_PROMPT:()=>jQ});function l7(J=process.stdout,Y=process.env){let Z=hH(J,Y);return Z?["-x",`${Z.columns}`,"-y",`${Z.rows}`]:[]}function hH(J=process.stdout,Y=process.env){let Z=DZ(J.columns)??DZ(Y.COLUMNS),f=DZ(J.rows)??DZ(Y.LINES);return Z&&f?{columns:Z,rows:f}:null}function DZ(J){let Y=typeof J==="number"?J:typeof J==="string"?Number.parseInt(J,10):Number.NaN;return Number.isInteger(Y)&&Y>0?Y:void 0}function $7(J){let Y=[];for(let Z of J.split(`
70
- `)){let[f,X,G,Q,q]=Z.split("\t"),B=DZ(G?.trim()),H=DZ(Q?.trim());if(!f?.trim()||!X?.trim()||!B||!H)continue;Y.push({name:f.trim(),session:X.trim(),width:B,height:H,flags:q?.trim()??""})}return Y}function a7(J,Y,Z,f={}){return J.filter((X)=>X.session===Y).filter((X)=>X.name!==f.currentClientName).filter((X)=>X.width!==Z.columns||X.height!==Z.rows).map((X)=>X.name)}function p7(J,Y){let Z=Math.max(1,J.rows-(Y.status?.trim()==="on"?1:0));return["-x",`${J.columns}`,"-y",`${Z}`]}async function _7(J,Y,Z={}){if(!Y)return;let{code:f,stdout:X}=await v0(["list-clients","-t",`=${J}`,"-F",D2]);if(f!==0)return;let G=a7($7(X),J,Y,Z),Q=[];if(Z.currentClientName)Q.push(["refresh-client","-f","!ignore-size","-t",Z.currentClientName]);for(let q of G)Q.push(["refresh-client","-f","ignore-size","-t",q]);if(Q.length>0)await w1(Q)}async function SQ(J){qf(J,"resize");let Y=hH();await _7(J,Y);let Z=Y?["-x",`${Y.columns}`,"-y",`${Y.rows}`]:[];if(Z.length>0)await u0(["resize-window","-t",`=${J}`,...Z]);await ef(J)}async function M2(){let{code:J,stdout:Y}=await v0(["display-message","-p","#{client_name}\t#{client_width}\t#{client_height}\t#{status}"]);if(J!==0)return{sizeArgs:[],clientSize:null,clientName:void 0};let[Z,f,X,G]=Y.trim().split("\t"),Q=DZ(f),q=DZ(X),B=Q&&q?{columns:Q,rows:q}:null;return{sizeArgs:B?p7(B,{status:G}):[],clientSize:B,clientName:Z?.trim()||void 0}}async function yQ(J){qf(J,"resize");let Y=await M2();await _7(J,Y.clientSize,{currentClientName:Y.clientName});let Z=Y.sizeArgs;if(Z.length>0)await u0(["resize-window","-t",`=${J}`,...Z]);await ef(J)}function r7(J,Y,Z){let f=`#{?window_zoomed_flag,1,#{?${F2[Y]},,1}}`;if(Z)return["bind-key","-n",J,"if-shell","-F",f,`select-pane ${Y}`,Z];return["bind-key","-n",J,"if-shell","-F",f,`select-pane ${Y}`]}async function MZ(J){let Y=wH.get(J.name);if(Y)return Y;let Z=R2(J);wH.set(J.name,Z);try{return await Z}finally{wH.delete(J.name)}}function o7(J){let Y="",Z="",f=!1,X=new Set;for(let G of J.split(`
71
- `)){let[Q,q,B,H,K]=G.split("\t");if(!Q?.trim())continue;if(X.add(Q.trim()),!Y&&H?.trim())Y=H.trim();if(!Z&&K?.trim())Z=K.trim();if(q?.trim()==="1"&&B?.trim()==="claude")f=!0}return{worktree:Y,vendor:Z,claudePaneAlive:f,windowCount:X.size}}async function A2(J){if(!await X1(J))return null;let{code:Y,stdout:Z}=await v0(["list-panes","-s","-t",`=${J}`,"-F",O2]);if(Y!==0)return{worktree:"",vendor:"",claudePaneAlive:!1,windowCount:0};return o7(Z)}async function R2(J){let Y=J.launchInit,Z=await A2(J.name),f=j7(Z,{cwd:J.cwd,vendor:J.vendor,hasEngineCommand:J.command.length>0}),X=XW(J.repo);if(f.kind==="reuse")return await ef(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor}),!0;if(f.kind==="respawn-engine"){if(await y7(J.name,J.cwd,J.command,X,J.vendor)){if(J.vendor)await wf(J.name,"@kobe_vendor",J.vendor);return await ef(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor,vendorChanged:!0}),!0}}if(f.kind==="rebuild"||f.kind==="respawn-engine")await vJ(J.name);let G=S1(),Q=vf(J.command,J.vendor),q=J.repo!==void 0&&J.cwd===J.repo,B=q||X?void 0:J.taskId,H=q&&!X?J.taskId:void 0,K=dz(cz(Q.argv,J.vendor,B),J.vendor,H),j=Tf(PJ(K),X,J.cwd),L=(await v0(["new-session","-d","-s",J.name,"-c",I1(J.cwd),...l7(),"-P","-F","#{pane_id}",F8(j,{initScript:X?void 0:Y?.initScript,markerPath:!X&&Y?.initScript?I9(J.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 HZ(L,DY,Q.sessionId);await w1([...J.taskId?[["set-option","-t",J.name,"@kobe_task",J.taskId]]:[],["set-option","-t",J.name,"@kobe_worktree",J.cwd],...J.vendor?[["set-option","-t",J.name,"@kobe_vendor",J.vendor]]:[],...X?[["set-option","-t",J.name,dX,X]]:[]]),await kH(L,{cwd:J.cwd,taskId:J.taskId,opsCommand:J.opsCommand,inv:G,vendor:J.vendor});let F=YJ(),D=G.map(Z1).join(" "),O=`${F}${D} new-chattab --session '#{session_name}'`,A=`${O} --vendor '%%'`,l=`run-shell ${Z1(A)}`,R=`${F}${D} focus-tasks --session '#{session_name}' --window '#{window_id}'`,C=`run-shell ${Z1(R)}`,g=(s)=>`${F}${D} layout --session '#{session_name}' --window '#{window_id}' --action ${s}`,y=g("tasks-restore"),$=`run-shell ${Z1(y)}`,G0=g("chat-tab-close"),t=`run-shell ${Z1(G0)}`,Z0=`${F}${D} heal-layout --session '#{session_name}'`,u=`run-shell -b ${Z1(Z0)}`,B0=`${F}${D} capture-layout --session '#{session_name}'`,Y0=`run-shell -b ${Z1(B0)}`,W0=R8({tmuxSocket:oJ}),o=XQ(),_=Q7.map((s)=>["unbind-key","-n",s]);if(o.overridden.has(FY))for(let s of LZ){let H0=zf(s);if("key"in H0)_.push(["unbind-key","-n",H0.key])}for(let s of o.overridden){if(s===FY)continue;let H0=Gf[s],D0=sf(s),y0=zf(H0,{allowBare:D0});if("key"in y0)_.push(D0?["unbind-key",y0.key]:["unbind-key","-n",y0.key])}let r=["-L","-D","-U","-R"],f0=o.focus.flatMap((s,H0)=>{let D0=r[H0],y0=D0==="-L"?$:void 0;return s&&D0?[r7(s.key,D0,y0)]:[]}),a=o.binds,U0=(s,H0)=>{let D0=a[s];return D0?[["bind-key",D0.key,"run-shell",g(H0)]]:[]},c=(...s)=>{let H0=s.map((D0)=>a[D0]?.chord).filter((D0)=>!!D0);return H0.length>0?H0.join("/"):null};await w1([["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",XG],["set-option","-g","window-status-current-format",DQ],["set-option","-g","status-right",LQ({focusLeft:o.focus[0]?.key??null,detach:a["tmux.detach"]?.key??null,newTab:a["tmux.tab.new"]?.key??null,layoutSplits:c("tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"),layoutPanes:c("tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle")})],["set-option","-g","mouse","on"],["set-hook","-g","window-resized",u],["set-hook","-g","window-layout-changed",Y0],..._,...a["tmux.detach"]?[["bind-key","-n",a["tmux.detach"].key,"if-shell","-F",`#{?#{${yJ}},1,#{==:#{@kobe_role},tasks}}`,"detach-client",C]]:[],...f0,...a["tmux.tab.new"]?[["bind-key","-n",a["tmux.tab.new"].key,"run-shell",O]]:[],...a["tmux.tab.chooseEngine"]?UQ(a["tmux.tab.chooseEngine"].key).map((s)=>[...s,l]):[],...a["tmux.tab.prev"]&&a["tmux.tab.next"]?WQ(a["tmux.tab.prev"].key,a["tmux.tab.next"].key):a["tmux.tab.prev"]?[["bind-key","-n",a["tmux.tab.prev"].key,"previous-window"]]:a["tmux.tab.next"]?[["bind-key","-n",a["tmux.tab.next"].key,"next-window"]]:[],...a["tmux.tab.close"]?[VQ(a["tmux.tab.close"].key,t)]:[],...a["tmux.tab.rename"]?[KQ(a["tmux.tab.rename"].key)]:[],...U0("tmux.layout.workspaceSplit","workspace-split"),...U0("tmux.layout.workspaceClose","workspace-close"),...U0("tmux.layout.workspaceReset","workspace-reset"),...U0("tmux.layout.tasksToggle","tasks-toggle"),...U0("tmux.layout.opsToggle","ops-toggle"),...U0("tmux.layout.terminalToggle","terminal-toggle"),["bind-key","f","run-shell",`${F}${D} quick-create --session '#{session_name}'`],["bind-key","u","display-popup","-E",W0]]),await Qf(),await u0(["select-pane","-t",L]);let N=Y?.firstMessage;if(N)H7(J.name,N).catch((s)=>console.error("[kobe tmux] first message delivery failed:",s));return!0}async function i7(J,Y,Z){let f=Z?.trim()||`=${J}`,{code:X,stdout:G}=await v0(["list-panes","-t",f,"-F","#{pane_id}\t#{@kobe_role}"]);if(X!==0)return"";for(let Q of G.split(`
72
- `)){let[q,B]=Q.split("\t");if(q?.trim()&&B?.trim()===Y)return q.trim()}return""}async function g2(J,Y={}){if(!await X1(J))return"";let Z=await i7(J,"tasks",Y.windowId);if(!Z)await CQ(J,"tasks-restore",{windowId:Y.windowId}),Z=await i7(J,"tasks",Y.windowId);if(!Z)return"";return await u0(["select-pane","-t",Z]),Z}var D2="#{client_name}\t#{client_session}\t#{client_width}\t#{client_height}\t#{client_flags}",F2,wH,O2="#{window_id}\t#{window_active}\t#{@kobe_role}\t#{@kobe_worktree}\t#{@kobe_vendor}";var ZJ=S(()=>{wY();kJ();c1();$J();N1();GQ();zQ();KY();HQ();IH();Ef();xH();YG();fG();N1();IH();fG();xH();F2={"-L":"pane_at_left","-D":"pane_at_bottom","-U":"pane_at_top","-R":"pane_at_right"};wH=new Map});async function C2(J,Y){let{task:Z}=await J.request("task.get",{taskId:Y});return Z}async function PH(J,Y){let Z=await C2(J,Y);if(Z.worktreePath)return{task:Z,worktreePath:Z.worktreePath};let{worktreePath:f}=await J.request("task.ensureWorktree",{taskId:Y});if(!f)throw Error(`task ${Y} has no worktree`);return{task:Z,worktreePath:f}}async function s7(J,Y){let{task:Z,worktreePath:f}=await PH(J,Y),X=K1(Y);if(!await X1(X)){let G=iY(Z.repo??"",f,{kind:"repo-init"});if(!await MZ({name:X,cwd:f,command:LJ(Z.vendor,Z.modelEffort),taskId:Y,vendor:Z.vendor,launchInit:G}))throw Error(`failed to start tmux session for ${Y}`)}return{session:X,worktreePath:f}}function S2(J){return Oz(J,{bareSafe:!0})}async function t7(J,Y){let{task:Z,worktreePath:f}=await PH(J,Y),X=Z.kind==="main"?void 0:Y,G=Z.kind==="main"?Y:void 0,Q=[...dz(cz(LJ(Z.vendor,Z.modelEffort),Z.vendor,X),Z.vendor,G)],q=iY(Z.repo??"",f,{kind:"none"}),B=S2(Q),H=q.initScript?.trim()?`${q.initScript}
73
- ${B}`:B,K=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:f,command:[K,"-ilc",H]}}async function e7(J,Y){let{worktreePath:Z}=await PH(J,Y),f=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:Z,command:[f,"-il"]}}async function JV(J){let Y=K1(J);await MY(Y).catch(()=>{}),await vJ(Y).catch(()=>{})}var YV=S(()=>{kJ();KB();rf();N1();ZJ()});import{existsSync as y2}from"fs";import{join as ZV,normalize as GV}from"path";function k2(J){let Y=null,Z=null,f=new TextEncoder,X=new ReadableStream({start(G){Y=J((q,B)=>{try{G.enqueue(f.encode(`event: ${q}
56
+ `;return""}async function nV(J,Y){if(Y.pathname!=="/api/diff")return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});let Z=Y.searchParams.get("worktreePath");if(!Z)return Response.json({error:"missing worktreePath"},{status:400});let X;try{X=decodeURIComponent(Z)}catch{return Response.json({error:"invalid worktreePath encoding"},{status:400})}if(!X.startsWith("/"))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!pz(X))return Response.json({error:"worktreePath does not exist"},{status:400});if(!hY(X).isRemote)try{if(!dO(X).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 Jz(X,["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()||X}`},{status:500});let[f,q,B]=await Promise.all([Jz(X,["status","--porcelain=v1","-z","--untracked-files=all"]),Jz(X,["diff","--no-color"]),Jz(X,["diff","--no-color","--staged"])]);if(!f.ok)return Response.json({error:`git status failed: ${f.stderr.trim()}`},{status:500});let j=dV(q.stdout),K=dV(B.stdout),H=f.stdout.split("\x00"),U=[],L=[];for(let A=0;A<H.length;A++){let R=H[A];if(!R)continue;let l=R[0]??" ",g=R[1]??" ",k=R.slice(3);if(!k)continue;if(l==="R"||l==="C"||g==="R"||g==="C")A++;let C=l==="?"&&g==="?",N=l!==" "&&l!=="?"?l:g,_=l!==" "&&l!=="?",X0="";if(C)L.push({fileIndex:U.length,path:k});else if(X0=K.get(k)??j.get(k)??"",K.has(k)&&j.has(k))X0=`${K.get(k)}${j.get(k)}`;U.push({path:k,status:C?"untracked":lO(N),staged:_,patch:X0})}if(L.length>0){let A=await aO(L,iO,(R)=>pO(X,R.path));for(let R=0;R<L.length;R++)U[L[R].fileIndex].patch=A[R]}U.sort((A,R)=>A.path.localeCompare(R.path));let F=[B.stdout,q.stdout].filter(Boolean).join(`
57
+ `),D={files:U,raw:F};return Response.json(D)}var nO=15000,iO=8;var iV=S(()=>{rJ();sQ()});import{isAbsolute as _O}from"path";function $V(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function oO(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9._-]+$/.test(J)&&!J.includes("..")}async function sO(J){let Y=J.searchParams.get("worktreePath"),Z=J.searchParams.get("vendor")??"claude";if(!Y||!_O(Y))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!$V(Z))return Response.json({error:"invalid vendor"},{status:400});try{let X=a1(Z).history,[G,z]=await Promise.all([X.listSessionIdsForWorktree(Y),X.latestTranscriptMtimeForWorktree(Y)]);return Response.json({sessions:G,latestMtime:z})}catch(X){return Response.json({error:X instanceof Error?X.message:String(X)},{status:500})}}async function tO(J){let Y=J.searchParams.get("vendor")??"claude",Z=J.searchParams.get("sessionId");if(!$V(Y))return Response.json({error:"invalid vendor"},{status:400});if(!oO(Z))return Response.json({error:"invalid sessionId"},{status:400});try{let X=await a1(Y).history.readHistory(Z);return Response.json({messages:X})}catch(X){return Response.json({error:X instanceof Error?X.message:String(X)},{status:500})}}async function aV(J,Y){if(Y.pathname!==lV&&Y.pathname!==rO)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Y.pathname===lV?sO(Y):tO(Y)}var lV="/api/history/sessions",rO="/api/history/messages";var pV=S(()=>{jZ()});import{mkdir as eO,readFile as JA,writeFile as YA}from"fs/promises";import{join as _V}from"path";function rV(){return _V(o1(),"notes")}function oV(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function sV(J){return _V(rV(),`${J}.md`)}async function XA(J){let Y=J.searchParams.get("taskId");if(!oV(Y))return Response.json({error:"invalid taskId"},{status:400});try{let Z="";try{Z=await JA(sV(Y),"utf8")}catch(X){if(X.code!=="ENOENT")throw X}return Response.json({markdown:Z})}catch(Z){return Response.json({error:Z instanceof Error?Z.message:String(Z)},{status:500})}}async function GA(J){let Y;try{Y=await J.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!oV(Y.taskId))return Response.json({error:"invalid taskId"},{status:400});if(typeof Y.markdown!=="string")return Response.json({error:"markdown must be a string"},{status:400});try{return await eO(rV(),{recursive:!0}),await YA(sV(Y.taskId),Y.markdown,"utf8"),Response.json({ok:!0})}catch(Z){return Response.json({error:Z instanceof Error?Z.message:String(Z)},{status:500})}}async function tV(J,Y){if(Y.pathname!==ZA)return null;if(J.method==="GET")return XA(Y);if(J.method==="PUT")return GA(J);return Response.json({error:"method not allowed"},{status:405})}var ZA="/api/notes";var eV=S(()=>{n1()});var $X;var tQ=S(()=>{$X={$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 aX;var eQ=S(()=>{aX={$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 pX;var Jf=S(()=>{pX={$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 _X;var Yf=S(()=>{_X={$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 rX;var Zf=S(()=>{rX={$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 oX;var Xf=S(()=>{oX={$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 sX;var Gf=S(()=>{sX={$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 Oj(J,Y,Z=[]){if(Y===void 0)return null;if(typeof Y!=="string")return Oj(J,Y.dark,Z);if(Y==="transparent"||Y==="none")return null;if(Y.startsWith("#"))return Y;if(Z.includes(Y))return null;let X=J.defs?.[Y]??J.theme[Y];return Oj(J,X,[...Z,Y])}function Fj(J){return Math.max(0,Math.min(255,Math.round(J)))}function Yz(J,Y,Z){let X=Number.parseInt(J.slice(1),16),G=Number.parseInt(Y.slice(1),16),z=(q,B)=>q>>B&255;return`#${(Fj(z(X,16)+(z(G,16)-z(X,16))*Z)<<16|Fj(z(X,8)+(z(G,8)-z(X,8))*Z)<<8|Fj(z(X,0)+(z(G,0)-z(X,0))*Z)).toString(16).padStart(6,"0")}`}function VA(J){let Y=(q)=>Oj(J,J.theme[q]),Z=Y("background"),X=Y("text");if(!Z||!X)return null;let G=Y("textMuted")??Yz(X,Z,0.35),z=Y("primary")??X,f=Y("border")??Yz(X,Z,0.8);return{bg:Z,surface:Y("backgroundPanel")??Z,inset:Y("backgroundElement")??Z,menu:Y("backgroundMenu")??Y("backgroundElement")??Z,line:f,"line-subtle":Y("borderSubtle")??f,"line-active":Y("borderActive")??Yz(f,X,0.3),fg:X,muted:G,subtle:Yz(G,Z,0.35),primary:z,"primary-hover":Yz(z,X,0.35),"kobe-orange":z,"kobe-green":Y("success")??X,"kobe-blue":Y("info")??X,"kobe-red":Y("error")??X,"kobe-yellow":Y("warning")??X,"kobe-violet":Y("secondary")??z}}function J8(J,Y){if(Y.pathname!==UA)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:KA})}var WA,KA,UA="/api/themes";var Y8=S(()=>{tQ();eQ();Jf();Yf();Zf();Xf();Gf();WA={claude:$X,conductor:aX,dracula:pX,nord:_X,opencode:rX,"osaka-jade":oX,tokyonight:sX};KA=Object.fromEntries(Object.entries(WA).map(([J,Y])=>[J,VA(Y)]).filter((J)=>J[1]!==null))});import{createHash as LA,randomUUID as DA}from"crypto";import{mkdir as MA}from"fs/promises";import{join as Aj,resolve as FA}from"path";function RA(J){return LA("sha1").update(J).digest("hex").slice(0,16)}async function yA(J){let Y=Number.parseInt(J.headers.get("content-length")??"",10);if(Number.isFinite(Y)&&Y>Z8)return Response.json({error:"asset too large"},{status:413});let Z;try{Z=await J.formData()}catch{return Response.json({error:"invalid form data"},{status:400})}let X=Z.get("repoRoot");if(typeof X!=="string"||X.length===0)return Response.json({error:"missing repoRoot"},{status:400});let G=Z.get("file");if(!(G instanceof File))return Response.json({error:"file must be a File"},{status:400});if(G.size>Z8)return Response.json({error:"asset too large"},{status:413});let z=OA[G.type];if(!z)return Response.json({error:`unsupported content-type: ${G.type||"unknown"}`},{status:415});try{let f=RA(X),q=Aj(Nq(),f);await MA(q,{recursive:!0});let j=`${DA()}.${z}`;return await Bun.write(Aj(q,j),G),Response.json({url:`${zf}/${f}/${j}`})}catch(f){return Response.json({error:f instanceof Error?f.message:String(f)},{status:500})}}async function SA(J){let Y=J.slice(zf.length+1),Z=Y.indexOf("/");if(Z<0)return Response.json({error:"not found"},{status:404});let X=Y.slice(0,Z),G=Y.slice(Z+1);if(!CA.test(X)||!gA.test(G))return Response.json({error:"invalid asset path"},{status:400});let z=Nq(),f=FA(z,X,G);if(f!==Aj(z,X,G)||!f.startsWith(`${z}/`))return Response.json({error:"invalid asset path"},{status:400});let q=G.slice(G.lastIndexOf(".")+1).toLowerCase(),B=AA[q];if(!B)return Response.json({error:"invalid asset path"},{status:400});let j=Bun.file(f);if(!await j.exists())return Response.json({error:"not found"},{status:404});return new Response(j,{headers:{"content-type":B,"cache-control":"public, max-age=31536000, immutable","x-content-type-options":"nosniff"}})}async function X8(J,Y){if(Y.pathname===zf){if(J.method==="POST")return yA(J);return Response.json({error:"method not allowed"},{status:405})}if(Y.pathname.startsWith(`${zf}/`)){if(J.method==="GET")return SA(Y.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var zf="/api/issue-assets",Z8=10485760,OA,AA,CA,gA;var G8=S(()=>{n1();OA={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},AA={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};CA=/^[a-f0-9]{16}$/,gA=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function z8(J,Y=500){return Response.json({error:J instanceof Error?J.message:String(J)},{status:Y})}function Q8(J){let Y=J instanceof Error?J.message:String(J);if(/^no issue #\d+$/.test(Y))return 404;if(Y==="repoRoot is required"||Y==="repoRoot does not exist"||Y==="repoRoot is not a git repository"||Y==="missing op"||Y==="create requires a non-empty title"||Y==="body must be a string"||Y==="setStatus requires a numeric id"||Y.startsWith("invalid status:")||Y==="update requires a numeric id"||Y==="title must be a non-empty string"||Y==="link requires a numeric id"||Y==="link requires a non-empty taskId"||Y==="unlink requires a numeric id"||Y==="delete requires a numeric id"||Y.startsWith("unknown op type:"))return 400;return 500}async function kA(J,Y){let Z=Y.searchParams.get("repoRoot");if(!Z)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await J.request("issue.list",{repoRoot:Z}))}catch(X){return z8(X,Q8(X))}}async function IA(J,Y){let Z;try{Z=await Y.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(Z===null||typeof Z!=="object"||Array.isArray(Z))return Response.json({error:"body must be a JSON object"},{status:400});let X=Z;if(typeof X.repoRoot!=="string"||X.repoRoot.length===0)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await J.request("issue.mutate",{repoRoot:X.repoRoot,op:X.op}))}catch(G){return z8(G,Q8(G))}}async function f8(J,Y,Z){if(Y.pathname!=="/api/issues")return null;if(J.method==="GET")return kA(Z,Y);if(J.method==="POST")return IA(Z,J);return Response.json({error:"method not allowed"},{status:405})}function q8(J){return NA.has(String(J??"").trim().toLowerCase())}function B8(J){try{if(!J)return null;let Y=new URL(J);if(Y.protocol!=="http:"&&Y.protocol!=="https:")return null;return Y.hostname}catch{return null}}function bA(J){let Y=B8(J);return Y!==null&&q8(Y)}function j8(J,Y={}){if(!J)return!0;if(bA(J))return!0;let Z=Y.allowedHost?.trim();if(!Z)return!1;let X=B8(J);return X!==null&&X===Z}function H8(J){let Y=String(J??"").trim();return Y&&!q8(Y)?Y:void 0}var NA;var W8=S(()=>{NA=new Set(["localhost","127.0.0.1","::1","[::1]"])});var TA,V8;var K8=S(()=>{TA=["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"],V8=new Set(TA)});var Rj={};q1(Rj,{resolveRepoInit:()=>D8,resolveEngineLaunchInit:()=>aY});import{existsSync as L8,readFileSync as EA}from"fs";import{join as Qf}from"path";function xA(J){return L8(Qf(J,U8))?`sh ${U8}`:void 0}function wA(J){let Y=Qf(J,uA);if(!L8(Y))return;try{let Z=EA(Y,"utf8");return Z.trim().length>0?Z:void 0}catch{return}}function D8(J,Y){let Z=J?dq(J):{},X=xA(Y)??Z.initScript,G=wA(Y)??Z.initPrompt;return{initScript:X&&X.trim().length>0?X:void 0,initPrompt:G&&G.trim().length>0?G:void 0}}function hA(J,Y){if(J.kind==="none")return;if(J.kind==="explicit")return{source:"explicit",text:J.prompt};let Z=Y.initPrompt?.trim();return Z?{source:"repo-init",text:Z}:void 0}function aY(J,Y,Z={kind:"repo-init"}){let X=D8(J,Y);return{initScript:X.initScript,firstMessage:hA(Z,X)}}var U8,uA;var tX=S(()=>{O1();U8=Qf(".kobe","init.sh"),uA=Qf(".kobe","init-prompt.md")});import{existsSync as M8,readFileSync as PA}from"fs";function F8(){qX=null}function vA(){let J=vW();if(M8(J))return{canonical:J,found:J};let Y=J.replace(/\.yaml$/,".yml");if(M8(Y))return{canonical:J,found:Y};return{canonical:J,found:null}}function ff(){if(qX)return qX;let{canonical:J,found:Y}=vA();if(!Y)return qX={path:J,exists:!1,doc:null,warnings:[]},qX;let Z=[],X=null;try{let G=PA(Y,"utf8");X=Bun.YAML.parse(G)}catch(G){let z=G instanceof Error?G.message:String(G);Z.push(`could not read/parse ${Y}: ${z}`)}return qX={path:J,exists:!0,doc:X,warnings:Z},qX}var qX=null;var Cj=S(()=>{n1()});function eX(J,Y){let Z=`alternating [${J}, ${Y}] pairs`;return{layout:Z,validateCount:(X)=>X>=2&&X%2===0?null:`needs ${Z} (an even number of chords \u2014 got ${X})`}}function $A(J,Y){let Z=J.trim().toLowerCase();if(!Z)return{error:"empty chord"};let X=Z.split("+"),G=X.pop()??"";if(G===""&&X.length>0){if(G="+",X[X.length-1]==="")X.pop()}if(!G)return{error:`"${J}": no key after the modifiers`};let z=new Set;for(let B of X){let j=dA[B];if(!j)return{error:`"${J}": unknown modifier "${B}" (use ctrl / cmd / alt / shift)`};z.add(j)}if(G=nA[G]??G,z.has("shift")&&G.length===1&&!Y?.allowShiftCharacter)return{error:`"${J}": shift+<character> can never match \u2014 terminals deliver shift+letter as a plain character, not a modifier event`};let f=lA.filter((B)=>z.has(B)).join("+"),q=f?`${f}+${G}`:G;if(G.length>1&&!iA.has(G))return{chord:q,warning:`"${J}": unrecognized key name "${G}" \u2014 the chord may never fire`};return{chord:q}}function qf(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function aA(J){if(J==="darwin")return["darwin","macos","mac"];if(J==="win32")return["win32","windows"];return[J]}function pA(J){if(!qf(J))return null;let Y=J.bindings;if(qf(Y))return Y;return J}function Bf(J,Y,Z){let X=[];if(J===null||J===void 0)return{entries:[],warnings:X};if(!qf(J))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let G=new Map,z=[];if(J.bindings!==void 0)if(qf(J.bindings))z.push(J.bindings);else X.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let f of aA(Y)){let q=J[f];if(q===void 0)continue;let B=pA(q);if(B)z.push(B);else X.push(`\`${f}:\` must be a mapping (or contain a \`bindings:\` mapping)`)}for(let f of z)for(let[q,B]of Object.entries(f)){if(B===null||B===!1||Array.isArray(B)&&B.length===0){G.set(q,[]);continue}let j=typeof B==="string"?[B]:Array.isArray(B)?B:null;if(!j){X.push(`${q}: expected a chord string, a list of chords, or null \u2014 got ${typeof B}`);continue}let K=[],H=!1;for(let U of j){if(typeof U!=="string"){X.push(`${q}: chord entries must be strings`),H=!0;continue}let L=$A(U,Z?.chordOptsFor?.(q));if("error"in L){X.push(`${q}: ${L.error}`),H=!0;continue}if(L.warning)X.push(`${q}: ${L.warning}`);if(!K.includes(L.chord))K.push(L.chord)}if(K.length===0&&H){X.push(`${q}: no valid chords \u2014 keeping the default`);continue}G.set(q,K)}return{entries:Array.from(G,([f,q])=>({id:f,keys:q})),warnings:X}}function _A(J,Y){return J===Y||J==="global"||Y==="global"}function O8(J,Y){let Z=[],X=[];for(let G of Y){let z=J.find((H)=>H.id===G.id);if(!z){Z.push(`${G.id}: unknown binding id (press F1 in kobe for the full list)`);continue}let f=gj[G.id];if(f){Z.push(`${G.id}: not customizable \u2014 ${f}`);continue}if(z.keys.length===0){Z.push(`${G.id}: not customizable \u2014 the key is handled outside the keymap (doc-only row)`);continue}let q=mA[G.id];if(q&&G.keys.length>0){let H=q.validateCount(G.keys.length);if(H){Z.push(`${G.id}: ${H} \u2014 keeping the default`);continue}}let B=G.keys.filter((H)=>{if(H.length===1&&cA.has(z.scope))return Z.push(`${G.id}: "${H}" dropped \u2014 a bare character on a ${z.scope}-scope binding would steal typed input (add a modifier)`),!1;return!0});if(B.length===0&&G.keys.length>0){Z.push(`${G.id}: no chords survived validation \u2014 keeping the default`);continue}if(q&&B.length!==G.keys.length){Z.push(`${G.id}: a dropped chord would shift the slot layout (${q.layout}) \u2014 keeping the default`);continue}let j=z.keys,K=z;if(K.keys=B,z.hint)if(B.length===0)K.hint=void 0;else z.hint.keys=B.join("/");X.push({id:G.id,keys:B,defaultKeys:j})}for(let G of X)for(let z of G.keys){let f=J.find((q)=>q.id===G.id);if(!f)continue;for(let q of J){if(q.id===G.id)continue;if(!q.keys.includes(z))continue;if(!_A(f.scope,q.scope))continue;Z.push(`${G.id}: "${z}" also fires ${q.id} (${q.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:X,warnings:Z}}var gj,mA,cA,dA,nA,iA,lA;var jf=S(()=>{gj={"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)"};mA={"sidebar.nav":eX("down","up"),"files.nav":eX("down","up"),"sidebar.search.nav":eX("down","up"),"files.hierarchy":eX("collapse","expand"),"sidebar.view":eX("previous view","next view"),"files.tab":eX("previous tab","next tab")},cA=new Set(["global","workspace","terminal"]),dA={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},nA={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},iA=new Set(["up","down","left","right","pageup","pagedown","home","end","insert","delete","backspace","tab","space","escape","enter","return",...Array.from({length:12},(J,Y)=>`f${Y+1}`)]),lA=["ctrl","cmd","alt","shift"]});function JG(J){return J in A8}function HX(J,Y){let Z=J.split("+"),X=Z.pop()??"";if(X===""&&Z.length>0){if(X="+",Z[Z.length-1]==="")Z.pop()}let G=new Set(Z);if(G.has("cmd"))return{error:`"${J}": the Command key never reaches tmux \u2014 use ctrl/alt/shift`};let z;if(X.length===1)z=G.has("shift")?X.toUpperCase():X;else{let B=oA[X];if(!B)return{error:`"${J}": tmux can't bind the key "${X}"`};z=B}let f=/^f\d+$/.test(X);if(G.size===0&&!f&&!Y?.allowBare)return{error:`"${J}": 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 C8(){let J={};for(let[Z,X]of Object.entries(jX)){let G=HX(X,{allowBare:JG(Z)});if("error"in G)throw Error(`default tmux chord for ${Z} failed to translate: ${G.error}`);J[Z]={chord:X,key:G.key}}let Y=MZ.map((Z)=>{let X=HX(Z);if("error"in X)throw Error(`default tmux focus chord ${Z} failed to translate`);return{chord:Z,key:X.key}});return{binds:J,focus:Y,overridden:new Set,warnings:[]}}function yj(J){let Y=C8(),Z=new Set;for(let X of J){if(!X.id.startsWith("tmux."))continue;if(X.id===SY){if(X.keys.length===0){Y.focus=[null,null,null,null],Z.add(SY);continue}if(X.keys.length!==MZ.length){Y.warnings.push(`${SY}: needs exactly 4 chords in order left/down/up/right (got ${X.keys.length}) \u2014 keeping the default`);continue}let q=[],B=!0;for(let j of X.keys){let K=HX(j);if("error"in K){Y.warnings.push(`${SY}: ${K.error} \u2014 keeping the default`),B=!1;break}q.push({chord:j,key:K.key})}if(!B)continue;Y.focus=q,Z.add(SY);continue}if(!(X.id in jX)){Y.warnings.push(`${X.id}: unknown tmux binding id`);continue}let G=X.id;if(X.keys.length===0){Y.binds[G]=null,Z.add(G);continue}if(X.keys.length>1)Y.warnings.push(`${G}: tmux bindings take ONE chord \u2014 using "${X.keys[0]}", ignoring the rest`);let z=X.keys[0],f=HX(z,{allowBare:JG(G)});if("error"in f){Y.warnings.push(`${G}: ${f.error} \u2014 keeping the default`);continue}if(z!==jX[G])Z.add(G);Y.binds[G]={chord:z,key:f.key}}return Y.overridden=Z,Y}function Sj(J){return J.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function g8(){BX=null}function Hf(){if(BX)return BX;let J=ff();if(!J.exists||J.doc===null)return BX=C8(),BX;let Y=Bf(J.doc,process.platform,{chordOptsFor:Sj}),Z=Y.warnings.filter((G)=>G.startsWith("tmux.")),X=yj(Y.entries);X.warnings=[...Z,...X.warnings];for(let G of X.warnings)console.warn(`[kobe/keybindings] ${G}`);return BX=X,BX}var rA,A8,R8,jX,SY="tmux.focus",MZ,oA,BX=null;var Wf=S(()=>{Cj();jf();rA={"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"},A8={"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"},R8=["F6","F7","F8","F9","F10","F11"],jX={...rA,...A8};MZ=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],oA={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},(J,Y)=>[`f${Y+1}`,`F${Y+1}`]))}});async function Zz(J,Y){let Z=null;for(let G=0;G<24;G++){let z=await cX(J);if(z){if(!Y)return{pane:z,ready:!0};let f=(await dX(z)).trim();if(f.length>0&&f===Z)return{pane:z,ready:!0};Z=f}await y8(250)}return{pane:await cX(J)||await lB(J),ready:!1}}async function Xz(J,Y){let Z=`kobe-api-${J.replace(/[^A-Za-z0-9]/g,"")}`;await u0(["set-buffer","-b",Z,"--",Y]),await u0(["paste-buffer","-p","-d","-b",Z,"-t",J]),await y8(sA),await pG(J,"Enter")}async function S8(J,Y){let{pane:Z}=await Zz(J,!0);if(!Z)return;await Xz(Z,Y.text)}var y8=(J)=>new Promise((Y)=>setTimeout(Y,J)),sA=150;var Vf=S(()=>{N1()});function k8(J,Y){if(J===null)return{kind:"create",reason:"no session with this name \u2014 build fresh"};let Z=J.worktree===Y.cwd,X=!Y.vendor||J.vendor===Y.vendor;if(J.claudePaneAlive&&Z&&X)return{kind:"reuse",reason:"healthy: engine pane alive, worktree + vendor match"};if(Z&&!X&&Y.hasEngineCommand)return{kind:"respawn-engine",reason:`vendor drift: session tagged ${J.vendor===""?"<untagged>":`"${J.vendor}"`}, task wants "${Y.vendor}" \u2014 relaunch engine pane in place (KOB-232)`};if(Z&&X&&J.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(!Z)return{kind:"rebuild",reason:J.worktree===""?"legacy session with no @kobe_worktree tag \u2014 rebuild in the right place":`worktree drift: session tagged "${J.worktree}", task wants "${Y.cwd}" \u2014 rebuild`};if(!X)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 I8;var N8=S(()=>{tQ();eQ();Jf();Yf();Zf();Xf();Gf();I8={claude:$X,conductor:aX,nord:_X,opencode:rX,dracula:pX,tokyonight:sX,"osaka-jade":oX}});function tA(J){let Y=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.exec(J);if(!Y)return null;let Z=Y[1];if(Z.length===3){let[X,G,z]=Z;return`#${X}${X}${G}${G}${z}${z}`.toLowerCase()}return`#${Z.slice(0,6)}`.toLowerCase()}function b8(J,Y,Z="dark"){let X=J.defs??{};function G(f,q){if(typeof f==="string"){if(f==="transparent"||f==="none")return null;if(f.startsWith("#"))return tA(f);if(q.includes(f))return null;let j=X[f]??J.theme[f];if(j===void 0)return null;return G(j,[...q,f])}if(!f||typeof f!=="object")return null;let B=f[Z];return typeof B==="string"?G(B,q):null}let z=J.theme[Y];if(z===void 0)return null;return G(z,[Y])}function Kf(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function Uf(J){if(!Kf(J))return{ok:!1,reason:"theme must be a JSON object at the top level"};let Y=J;if(!("theme"in Y))return{ok:!1,reason:"missing required key `theme`"};let Z=Y.theme;if(!Kf(Z))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in Y&&Y.defs!==void 0){if(!Kf(Y.defs))return{ok:!1,reason:"`defs` must be an object map"};for(let[X,G]of Object.entries(Y.defs))if(typeof G!=="string")return{ok:!1,reason:`defs.${X} must be a string (hex like "#abc" or a ref name)`}}for(let[X,G]of Object.entries(Z)){if(typeof G==="string")continue;if(!Kf(G))return{ok:!1,reason:`theme.${X} 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.${X}.dark must be a string`};if(typeof z.light!=="string")return{ok:!1,reason:`theme.${X}.light must be a string`}}if("$schema"in Y&&Y.$schema!==void 0&&typeof Y.$schema!=="string")return{ok:!1,reason:"`$schema` must be a string when present"};return{ok:!0,theme:Y}}var kj=()=>{};import{readFileSync as eA,readdirSync as J2}from"fs";import{join as T8}from"path";function YG(){return T8(o1(),"themes")}function Gz(){let J=YG(),Y;try{Y=J2(J)}catch{return[]}let Z=[];for(let X of Y){if(!X.endsWith(".json"))continue;let G=T8(J,X),z;try{let B=eA(G,"utf8");z=JSON.parse(B)}catch(B){let j=B instanceof Error?B.message:String(B);console.warn(`[kobe] skipping user theme ${G}: invalid JSON \u2014 ${j}`);continue}let f=Uf(z);if(!f.ok){console.warn(`[kobe] skipping user theme ${G}: ${f.reason}`);continue}let q=X.slice(0,-5);Z.push({name:q,theme:f.theme})}return Z}var Lf=S(()=>{n1();kj()});import{readFileSync as Y2}from"fs";function X2(){try{let J=JSON.parse(Y2(xJ(),"utf8")),Y=typeof J.activeTheme==="string"&&J.activeTheme?J.activeTheme:"claude",Z=typeof J.focusAccent==="string"&&Z2.includes(J.focusAccent)?J.focusAccent:"primary";return{themeName:Y,focusAccentSlot:Z,enabled:J.tmuxChromeTheme!=="off"&&J.tmuxBorderTheme!=="off"}}catch{return{themeName:"claude",focusAccentSlot:"primary",enabled:!0}}}function G2(J){return Gz().find((Z)=>Z.name===J)?.theme??I8[J]??null}function BY(J,...Y){for(let Z of Y){let X=b8(J,Z);if(X)return X}return null}function E8(J,Y){let Z=BY(J,"text"),X=BY(J,"background"),G=BY(J,"textMuted","text"),z=BY(J,"backgroundPanel","background"),f=BY(J,"backgroundElement","backgroundPanel","background"),q=BY(J,"backgroundMenu","backgroundElement","backgroundPanel","background"),B=BY(J,"selectedListItemText","background"),j=BY(J,Y,"primary","borderActive","border","text");return{border:BY(J,"border","text"),activeBorder:j,statusBg:z,statusFg:G,statusMutedFg:G,windowFg:G,currentWindowBg:f,currentWindowFg:j,activityFg:BY(J,"info","primary","text"),bellFg:BY(J,"warning","error","primary","text"),messageBg:q,messageFg:Z,messageCommandFg:j,modeBg:j,modeFg:B??X}}function dJ(J){let Y=[];if(J.bg)Y.push(`bg=${J.bg}`);if(J.fg)Y.push(`fg=${J.fg}`);if(Y.length===0)return null;if(J.attrs)Y.push(...J.attrs);return Y.join(",")}function x8(J){let Y=dJ({bg:J.statusBg,fg:J.statusFg}),Z=dJ({bg:J.statusBg,fg:J.statusMutedFg}),X=dJ({bg:J.statusBg,fg:J.windowFg});return[{key:"border",option:"pane-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:dJ({fg:J.border})},{key:"active",option:"pane-active-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:dJ({fg:J.activeBorder})},{key:"status",option:"status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Y},{key:"status-left",option:"status-left-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Z},{key:"status-right",option:"status-right-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Z},{key:"window",option:"window-status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:X},{key:"current-window",option:"window-status-current-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:dJ({bg:J.currentWindowBg,fg:J.currentWindowFg,attrs:["bold"]})},{key:"activity-window",option:"window-status-activity-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:dJ({bg:J.statusBg,fg:J.activityFg})},{key:"bell-window",option:"window-status-bell-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:dJ({bg:J.statusBg,fg:J.bellFg,attrs:["bold"]})},{key:"last-window",option:"window-status-last-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:dJ({bg:J.statusBg,fg:J.statusFg})},{key:"message",option:"message-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:dJ({bg:J.messageBg,fg:J.messageFg})},{key:"message-command",option:"message-command-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:dJ({bg:J.messageBg,fg:J.messageCommandFg,attrs:["bold"]})},{key:"mode",option:"mode-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:dJ({bg:J.modeBg,fg:J.modeFg})},{key:"display-panes",option:"display-panes-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:J.border},{key:"display-panes-active",option:"display-panes-active-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:J.activeBorder}]}function z2(J){let Y=new Set(J.marker.split(",").map((z)=>z.trim()).filter(Boolean)),Z=[],X=[];for(let z of x8(J.hexes))if(z.value){if((J.current[z.key]??"")!==z.value)Z.push(["set-option",z.setFlag,z.option,z.value]);X.push(z.key)}else if(Y.has(z.key))Z.push(["set-option",z.unsetFlag,z.option]);let G=X.join(",");if(G!==J.marker)Z.push(G?["set-option","-g",Ij,G]:["set-option","-gu",Ij]);return Z}async function u8(J){let{code:Y,stdout:Z}=await c0(J);return Y===0?Z.trim():""}async function WX(){try{let J=X2(),Y=J.enabled?G2(J.themeName):null,Z=Y?E8(Y,J.focusAccentSlot):E8({theme:{}},J.focusAccentSlot),X=x8(Z),[G,...z]=await Promise.all([u8(["show-options","-gqv",Ij]),...X.map((B)=>u8(["show-options",B.showFlag,B.option]))]),f=Object.fromEntries(X.map((B,j)=>[B.key,z[j]??""])),q=z2({marker:G,current:f,hexes:Z});if(q.length>0)await w1(q)}catch{}}var Ij="@kobe_border_theme",Z2;var Df=S(()=>{n1();N1();N8();Lf();Z2=["primary","success","info"]});var Mf={};q1(Mf,{recordGen:()=>FZ,isLatestGen:()=>m8,genAgeMs:()=>W2,coalesceLayoutWork:()=>V2,RESIZE_GUARD_MS:()=>H2,LAYOUT_COALESCE_MS:()=>P8});import{createHash as Q2,randomUUID as f2}from"crypto";import{mkdirSync as q2,readFileSync as w8,renameSync as B2,writeFileSync as j2}from"fs";import{join as h8}from"path";function v8(){return h8(o1(),"layout-coord")}function Nj(J,Y){let Z=Q2("sha1").update(J).digest("hex").slice(0,16);return h8(v8(),`${Z}.${Y}`)}function FZ(J,Y){let Z=f2();try{q2(v8(),{recursive:!0});let X=Nj(J,Y),G=`${X}.${Z}.tmp`;j2(G,`${Date.now()}
58
+ ${Z}`),B2(G,X)}catch{}return Z}function m8(J,Y,Z){try{return w8(Nj(J,Y),"utf8").split(`
59
+ `)[1]?.trim()===Z}catch{return!0}}function W2(J,Y,Z=Date.now()){try{let X=Number.parseInt(w8(Nj(J,Y),"utf8").split(`
60
+ `)[0]??"",10);return Number.isFinite(X)?Z-X:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function V2(J,Y,Z,X=P8){let G=FZ(J,Y);if(X>0)await new Promise((z)=>setTimeout(z,X));if(!m8(J,Y,G))return;await Z()}var P8=120,H2=400;var ZG=S(()=>{n1()});function U2(J){let Y=[];for(let Z of J.split(`
61
+ `)){let X=Z.trim();if(!X)continue;let[G,z,f,q,B]=X.split("\t");if(!G||!z||!f)continue;let j=Number.parseInt(B?.trim()??"",10);Y.push({windowId:G.trim(),paneId:z.trim(),role:f.trim(),version:q?.trim()??"",...Number.isFinite(j)?{paneWidth:j}:{}})}return Y}function c8(J,Y){let Z=new Map;for(let G of J){let z=Z.get(G.windowId)??[];z.push(G),Z.set(G.windowId,z)}let X=[];for(let G of Z.values()){let z=G.find((j)=>j.role==="claude")?.paneId,f=G.find((j)=>j.role==="tasks"),q=G.find((j)=>j.role==="ops");if(f&&(Y.force||f.version!==Y.currentVersion))X.push({role:"tasks",paneId:f.paneId});let B=Y.force?!0:z&&(Y.vendorChanged||q?.version!==Y.currentVersion);if(q&&B)X.push({role:"ops",paneId:q.paneId,claudePaneId:z??null})}return X}async function bj(J){let{code:Y,stdout:Z}=await c0(["list-panes","-s","-t",`=${J}`,"-F",K2]);if(Y!==0)return null;return U2(Z)}function d8(J,Y){let Z=R1(),X=p1(),G=[];for(let z of J){let f=z.role==="tasks"?qZ(Z,{initialTaskId:Y.taskId}):xX({cwd:Y.cwd,taskId:Y.taskId,claudePaneId:z.claudePaneId,cliInvocation:Z,vendor:Y.vendor});G.push(["respawn-pane","-k","-t",z.paneId,"-c",I1(Y.cwd),FJ(X+f)],["set-option","-p","-t",z.paneId,"@kobe_role",z.role],["set-option","-p","-t",z.paneId,jY,i0])}return G}async function n8(J,Y,Z,X,G){let z=await bj(J);if(!z)return!1;let f=z.filter((j)=>j.role==="claude");if(f.length===0)return!1;let q=I1(Y),B=[];for(let j of f){let K=nX(Z,G),H=FJ(hX(MJ(K.argv),X,Y));B.push(["respawn-pane","-k","-c",q,"-t",j.paneId,H]),B.push(K.sessionId?["set-window-option","-t",j.paneId,gY,K.sessionId]:["set-window-option","-u","-t",j.paneId,gY])}return await w1(B),!0}async function i8(){let J=await HZ([dY,rZ,nY]),Y=Number.parseInt(J[dY]??"",10),Z=Number.isFinite(Y)&&Y>0?_Z(Y):pZ,X=L2({widthPct:iY(Number.parseInt(J[rZ]??"",10)),heightPct:iY(Number.parseInt(J[nY]??"",10))});return{tasksWidth:Z,rcArgs:X}}function L2(J){let Y=[];if(J.widthPct!==null)Y.push("-x",`${J.widthPct}%`);if(J.heightPct!==null)Y.push("-y",`${J.heightPct}%`);return Y}async function l8(){return(await i8()).rcArgs}async function Tj(J,Y={}){let{tasksWidth:Z,rcArgs:X}=await i8(),G=await bj(J);if(!G)return{rows:null,commands:[]};let z=[];for(let f of G)if(f.role==="tasks"&&(Y.force||f.paneWidth!==Z))z.push(["resize-pane","-t",f.paneId,"-x",`${Z}`]);if(X.length>0){for(let f of G)if(f.role==="ops")z.push(["resize-pane","-t",f.paneId,...X])}return{rows:G,commands:z}}async function XG(J,Y){FZ(J,"resize");let{rows:Z,commands:X}=await Tj(J);if(!Z)return;let G=[...X];if(Y)G.push(...d8(c8(Z,{currentVersion:i0,force:!1,vendorChanged:Y.vendorChanged}),Y));if(G.length>0)await w1(G)}async function $8(J){if(!await f1(J))return;await XG(J)}async function zz(J){let{code:Y,stdout:Z}=await c0(["list-panes","-t",`=${J}`,"-F",`#{@kobe_role} #{pane_width} #{pane_height} #{window_width} #{window_height} #{window_zoomed_flag} #{${ZY}} #{${DJ}}`]);if(Y!==0)return;let X=Z.split(`
62
+ `).map((j)=>j.split("\t")).filter((j)=>(j[0]?.trim()??"")!=="");if(X.length===0)return;if(X.some((j)=>j[5]?.trim()==="1"))return;if(X.some((j)=>(j[6]?.trim()??"")!==""))return;if(X.some((j)=>(j[7]?.trim()??"")!==""))return;let G=Number.parseInt(X[0][3]?.trim()??"",10),z=Number.parseInt(X[0][4]?.trim()??"",10),f=[],q=X.find(([j])=>j?.trim()==="tasks");if(q){let j=Number.parseInt(q[1]?.trim()??"",10);if(Number.isFinite(j)&&j>0)f.push(["set-option","-s",dY,`${_Z(j)}`])}let B=X.find(([j])=>j?.trim()==="ops");if(B&&Number.isFinite(G)&&G>0&&Number.isFinite(z)&&z>0){let j=Number.parseInt(B[1]?.trim()??"",10),K=Number.parseInt(B[2]?.trim()??"",10),H=Number.isFinite(j)?iY(100*j/G):null,U=Number.isFinite(K)?iY(100*K/z):null;if(H!==null)f.push(["set-option","-s",rZ,`${H}`]);if(U!==null)f.push(["set-option","-s",nY,`${U}`])}if(f.length>0)await w1(f)}function D2(J){let Y=J.split(`
63
+ `).map((X)=>X.split("\t")).filter((X)=>(X[0]?.trim()??"")!=="");if(Y.length===0)return!1;if(Y.some((X)=>X[1]?.trim()==="1"))return!1;if(Y.some((X)=>(X[2]?.trim()??"")!==""))return!1;if(Y.some((X)=>(X[3]?.trim()??"")!==""))return!1;let Z=new Set(Y.map((X)=>X[0]?.trim()));return Z.has("tasks")&&Z.has("ops")}async function a8(J){let{code:Y,stdout:Z}=await c0(["list-panes","-t",`=${J}`,"-F",`#{@kobe_role} #{window_zoomed_flag} #{${ZY}} #{${DJ}}`]);if(Y!==0||!D2(Z))return;await zz(J)}async function GG(J){let Y=await OJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor"]),Z=Y["@kobe_worktree"]||process.cwd(),X=Y["@kobe_task"]||void 0,G=Y["@kobe_vendor"]||void 0,z=await bj(J);if(!z)return;let f=d8(c8(z,{currentVersion:i0,force:!0}),{cwd:Z,taskId:X,vendor:G});if(f.length>0)await w1(f);await WX()}var jY="@kobe_pane_version",K2;var Qz=S(()=>{cY();bJ();rJ();N1();XY();Df();jJ();eZ();ZG();K2=`#{window_id} #{pane_id} #{@kobe_role} #{${jY}} #{pane_width}`});function Of(J,Y){return[["bind-key","-n",J,"if-shell","-F","#{?#{@kobe_surface},0,1}","previous-window"],["bind-key","-n",Y,"if-shell","-F","#{?#{@kobe_surface},0,1}","next-window"]]}function Af(J,Y="kill-window"){return["bind-key","-n",J,"if-shell","-F","#{>:#{session_windows},1}",Y,"display-message 'Cannot close the only ChatTab'"]}function Rf(J){return["bind-key","-n",J,"command-prompt","-I","#{window_name}","rename-window -- '%%'"]}function Cf(J){return[["bind-key","-n",J,"command-prompt","-p",Ff],["bind-key","T","command-prompt","-p",Ff]]}function Ej(J){return J.startsWith("C-")&&J.length===3?`^${J.slice(2)}`:J}function gf(J){return`${[J.focusLeft?`${Ej(J.focusLeft)} tasks`:null,J.detach?`${Ej(J.detach)} detach`:null,J.newTab?`${Ej(J.newTab)} tab`:null,J.layoutSplits?`prefix ${J.layoutSplits} splits`:null,J.layoutPanes?`prefix ${J.layoutPanes} panes`:null].filter((Z)=>Z!==null).join(" ")} `}async function xj(J,Y){let Z=p1(),X=await wQ(),G=FJ(Y.opsCommand??Z+xX({cwd:Y.cwd,taskId:Y.taskId,claudePaneId:J,cliInvocation:Y.inv,vendor:Y.vendor})),{stdout:z}=await $G([["set-option","-p","-t",J,"@kobe_role","claude"],["set-window-option","-t",J,uj,"idle"],["split-window","-h","-b","-t",J,"-l",`${X}`,"-c",I1(Y.cwd),"-P","-F","tasks=#{pane_id}",FJ(Z+qZ(Y.inv,{initialTaskId:Y.taskId}))],["split-window","-h","-t",J,"-l",`${100-SQ}%`,"-c",I1(Y.cwd),"-P","-F","ops=#{pane_id}",G],["split-window","-v","-l",`${100-dG}%`,"-c",I1(Y.cwd),"-P","-F","shell=#{pane_id}"],["select-pane","-t",J]]),f=Object.fromEntries(z.split(`
64
+ `).map((q)=>q.trim()).filter(Boolean).map((q)=>q.split("=",2)));if(await w1([...f.tasks?[["set-option","-p","-t",f.tasks,"@kobe_role",vJ]]:[],...f.tasks?[["set-option","-p","-t",f.tasks,jY,i0]]:[],...f.ops?[["set-option","-p","-t",f.ops,"@kobe_role",JY]]:[],...f.ops?[["set-option","-p","-t",f.ops,jY,i0]]:[],...f.shell?[["set-option","-p","-t",f.shell,"@kobe_role",YY]]:[]]),f.ops){let q=await l8();if(q.length>0)await u0(["resize-pane","-t",f.ops,...q])}}async function p8(J,Y){if(!await f1(J))return;let Z=await OJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor",lG]),X=Z["@kobe_worktree"]||process.cwd(),G=Z["@kobe_task"]||void 0,z=Z[lG]||void 0,f=Y??Z["@kobe_vendor"];if(Y)await M2(J,G,Y);let q=RJ(f),B=nX(q,f),j=R1(),H=(await c0(["new-window","-t",`=${J}`,"-c",I1(X),"-P","-F","#{pane_id}",FJ(hX(MJ(B.argv),z,X))])).stdout.trim();if(!H)return;if(B.sessionId)await WZ(H,gY,B.sessionId);await xj(H,{cwd:X,taskId:G,inv:j,vendor:f})}async function Sf(J){if(!await f1(J))return;let Z=(await OJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),X=R1(),z=`${p1()}${X.map(J1).join(" ")} settings`;await zY(J,{cwd:I1(Z),command:z,name:"settings",surface:!0})}async function kf(J){if(!await f1(J))return;let Z=(await OJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),X=R1(),z=`${p1()}${X.map(J1).join(" ")} help-page`;await zY(J,{cwd:I1(Z),command:z,name:"help",surface:!0})}async function If(J,Y){if(!await f1(J))return;let X=(await OJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=R1(),z=p1(),f=Y?` --repo ${J1(Y)}`:"",q=`${z}${G.map(J1).join(" ")} new-task${f}`;await zY(J,{cwd:I1(X),command:q,name:"new task",surface:!0})}async function Nf(J){if(!await f1(J))return;let Z=(await OJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),X=R1(),z=`${p1()}${x7({cliInvocation:X})}`;await zY(J,{cwd:I1(Z),command:z,name:"update",surface:!0})}async function _8(J){if(!await f1(J))return;let Z=(await OJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),X=R1(),z=`${p1()}${X.map(J1).join(" ")} quick-task --session ${J1(J)}`;await zY(J,{cwd:I1(Z),command:z,name:"quick task",surface:!0})}async function M2(J,Y,Z){if(await mX(J,"@kobe_vendor",Z),!Y)return;try{let{connectOrStartDaemon:X}=await Promise.resolve().then(() => (CJ(),hj)),G=await X();try{await G.request("task.setVendor",{taskId:Y,vendor:Z})}finally{G.close()}}catch(X){console.error("[kobe tmux] failed to persist selected engine vendor:",X)}}var Ff,uj="@kobe_tab_state",fz="#{?#{==:#{@kobe_tab_state},running},\u25CF,#{?#{==:#{@kobe_tab_state},done},\u2713,#{?#{==:#{@kobe_tab_state},error},!,#{?#{==:#{@kobe_tab_state},unknown},?,\u25CB}}}} #I:#W",yf;var wj=S(()=>{cY();bJ();rJ();N1();XY();BJ();jJ();eZ();Qz();Ff=`engine (${m1.join("/")}/\u2026)`;yf=fz});function r8(){return c1()[bf]!==!1}var bf="zen.keepTasks";var Pj=S(()=>{cZ()});function O2(J){let Y=[];for(let Z of J.split(`
65
+ `)){let X=Z.trim();if(!X)continue;let[G,z,f,q,B,j,K]=X.split("\t");if(!G)continue;let H=Number.parseInt(q??"",10),U=Number.parseInt(B??"",10),L=Number.parseInt(j??"",10),F=Number.parseInt(K??"",10);Y.push({paneId:G.trim(),role:z?.trim()??"",active:f?.trim()==="1",paneWidth:Number.isFinite(H)?H:0,paneHeight:Number.isFinite(U)?U:0,windowWidth:Number.isFinite(L)?L:0,windowHeight:Number.isFinite(F)?F:0})}return Y}function A2(J){let Y=J.find((X)=>X.role===EX);if(!Y)return{kind:"missing-engine"};let Z=J.filter((X)=>X.role===mG);if(Z.length+1>=AB)return{kind:"maxed"};if(Z.length===0)return{kind:"split",targetPane:Y.paneId,direction:"-h"};if(Z.length===1)return{kind:"split",targetPane:Z[0]?.paneId??Y.paneId,direction:"-v"};return{kind:"split",targetPane:Y.paneId,direction:"-v"}}function vj(J){return J.find((Y)=>Y.role===YY)??J.find((Y)=>Y.role==="")}function R2(J){return 100-(iY(J??Number.NaN)??dG)}function C2(J){let Y=Number.parseInt(J??"",10);return Number.isFinite(Y)&&Y>0?Y:void 0}async function nJ(J,Y){let Z=Y?.trim()||`=${J}`,{code:X,stdout:G}=await c0(["list-panes","-t",Z,"-F",F2]);return X===0?O2(G):null}async function g2(J){let{code:Y,stdout:Z}=await c0(["list-windows","-t",`=${J}`,"-F","#{window_active}\t#{window_id}"]);if(Y!==0)return"";for(let X of Z.split(`
66
+ `)){let[G,z]=X.split("\t");if(G?.trim()==="1"&&z?.trim())return z.trim()}return""}async function VX(J,Y){let{code:Z,stdout:X}=await c0(["show-options","-wqv","-t",J,Y]);return Z===0?X.trim():""}async function mj(J,Y,Z){await u0(["set-window-option","-t",J,Y,Z])}async function OZ(J,Y){await u0(["set-window-option","-u","-t",J,Y])}async function cj(J){let{code:Y,stdout:Z}=await c0(["display-message","-p","-t",J,"#{pane_id}"]);return Y===0&&Z.trim()===J}async function T1(J,Y){await u0(["display-message","-t",J,Y])}async function Tf(J){let Y=await OJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor"]);return{cwd:Y["@kobe_worktree"]||process.cwd(),taskId:Y["@kobe_task"]||void 0,vendor:Y["@kobe_vendor"]||void 0}}function y2(J){let Y=R1(),Z=p1();return FJ(Z+xX({cwd:J.cwd,taskId:J.taskId,claudePaneId:J.enginePaneId,cliInvocation:Y,vendor:J.vendor}))}async function S2(J,Y){return Y?.trim()||await g2(J)}async function k2(J,Y){let Z=await nJ(J,Y);if(!Z)return;let X=A2(Z);if(X.kind==="missing-engine"){await T1(Y,"kobe: no engine pane in this window");return}if(X.kind==="maxed"){await T1(Y,`kobe: workspace split limit is ${AB} panes`);return}let{cwd:G}=await Tf(J),{code:z,stdout:f}=await c0(["split-window",X.direction,"-t",X.targetPane,"-l","50%","-c",I1(G),"-P","-F","#{pane_id}",FJ("true")]),q=f.trim();if(z!==0||!q)return;await w1([["set-option","-p","-t",q,"@kobe_role",mG],["select-pane","-t",q]])}async function I2(J,Y){let Z=await nJ(J,Y);if(!Z)return;let X=Z.filter((f)=>f.role===mG);if(X.length===0){await T1(Y,"kobe: no workspace split to close");return}let z=X.find((f)=>f.active)??X[X.length-1];if(!z)return;await u0(["kill-pane","-t",z.paneId])}async function N2(J,Y){let Z=await nJ(J,Y);if(!Z)return;let X=Z.filter((G)=>G.role===mG);if(X.length===0){await T1(Y,"kobe: no workspace splits to reset");return}await w1(X.map((G)=>["kill-pane","-t",G.paneId]))}async function o8(){let J=await HZ([dY]);return _Z(C2(J[dY])??pZ)}async function b2(J){let{cwd:Y,taskId:Z}=await Tf(J),X=R1(),G=p1();return{cwd:Y,command:FJ(G+qZ(X,{initialTaskId:Z}))}}async function s8(J,Y){let Z=await nJ(J,Y);if(!Z)return;let X=Z.find((D)=>D.role===JY);if(X){await u0(["kill-pane","-t",X.paneId]);return}let G=vj(Z),z=Z.find((D)=>D.role===EX);if(!z){await T1(Y,"kobe: cannot restore file pane in this layout");return}let{cwd:f,taskId:q,vendor:B}=await Tf(J),j=y2({cwd:f,taskId:q,vendor:B,enginePaneId:z.paneId}),K=G?["split-window","-v","-b","-t",G.paneId,"-l",`${await T2()}%`,"-c",I1(f),"-P","-F","#{pane_id}",j]:["split-window","-h","-t",z.paneId,"-l",`${await dj()}%`,"-c",I1(f),"-P","-F","#{pane_id}",j],{code:H,stdout:U}=await c0(K),L=U.trim();if(H!==0||!L)return;let F=[["set-option","-p","-t",L,"@kobe_role",JY],["set-option","-p","-t",L,jY,i0]];if(G?.role==="")F.push(["set-option","-p","-t",G.paneId,"@kobe_role",YY]);await w1(F)}async function T2(){let J=await HZ([nY]);return iY(Number.parseInt(J[nY]??"",10))??dG}async function dj(){let J=await HZ([rZ]);return iY(Number.parseInt(J[rZ]??"",10))??100-SQ}async function t8(){let J=await HZ([nY]);return R2(Number.parseInt(J[nY]??"",10))}async function E2(J){let{code:Y,stdout:Z}=await c0(["list-windows","-t",`=${J}`,"-F","#{window_index}"]);if(Y!==0)return new Set;return new Set(Z.split(`
67
+ `).map((X)=>Number.parseInt(X.trim(),10)).filter((X)=>Number.isFinite(X)))}async function e8(J,Y){let Z=await E2(J),X=b7(Y);while(Z.has(X))X++;return X}async function J5(J){let Y=cG(J);if(await f1(Y))return Y;return await u0(["new-session","-d","-s",Y,"-n","hidden-panes","-c",I1(process.cwd()),"while :; do sleep 3600; done"]),Y}async function nj(J){let Y=cG(J);if(!await f1(Y))return;let{code:Z,stdout:X}=await c0(["list-panes","-s","-t",`=${Y}`,"-F","#{@kobe_role}"]);if(Z!==0)return;if(!X.split(`
68
+ `).some((z)=>{let f=z.trim();return f===YY||f===vJ}))await u0(["kill-session","-t",`=${Y}`])}async function u2(J,Y){await Y5(J,Y,ZY)}async function x2(J,Y){await Y5(J,Y,DJ)}async function Y5(J,Y,Z){let X=await VX(Y,Z);if(!X)return;if(await cj(X))await u0(["kill-pane","-t",X]);await OZ(Y,Z)}async function w2(J,Y){await u2(J,Y),await x2(J,Y),await nj(J)}function Z5(J){return J.find((Y)=>Y.role===EX)??J[0]}async function ij(J,Y,Z){let X=Z5(Z);if(!X)return await T1(Y,"kobe: cannot restore Tasks pane in this layout"),!1;let G=await o8(),{cwd:z,command:f}=await b2(J),{code:q,stdout:B}=await c0(["split-window","-h","-b","-t",X.paneId,"-l",`${G}`,"-c",I1(z),"-P","-F","#{pane_id}",f]),j=B.trim();if(q!==0||!j)return!1;return await w1([["set-option","-p","-t",j,"@kobe_role",vJ],["set-option","-p","-t",j,jY,i0],["select-pane","-t",j]]),await OZ(Y,DJ),await T1(Y,"kobe: Tasks pane restored"),!0}async function X5(J,Y,Z){let X=await J5(J),G=await e8(X,Y),{code:z,stdout:f}=await c0(["break-pane","-d","-s",Z.paneId,"-t",`${X}:${G}`,"-P","-F","#{pane_id}"]),q=f.trim()||Z.paneId;if(z!==0||!q){await T1(Y,"kobe: could not hide Tasks pane");return}await mj(Y,DJ,q),await T1(Y,"kobe: Tasks pane hidden")}async function lj(J,Y,Z){let X=await nJ(J,Y);if(!X)return;if(!await cj(Z)){await OZ(Y,DJ);let f=X.find((q)=>q.role===vJ);if(f){await u0(["select-pane","-t",f.paneId]);return}await ij(J,Y,X);return}let G=Z5(X);if(!G){await T1(Y,"kobe: cannot restore Tasks pane in this layout");return}if(await u0(["join-pane","-h","-b","-s",Z,"-t",G.paneId,"-l",`${await o8()}`])!==0){await T1(Y,"kobe: could not restore Tasks pane");return}await w1([["set-option","-p","-t",Z,"@kobe_role",vJ],["set-option","-p","-t",Z,jY,i0],["select-pane","-t",Z]]),await OZ(Y,DJ),await nj(J),await T1(Y,"kobe: Tasks pane restored")}async function h2(J,Y){let Z=await VX(Y,DJ);if(Z){await lj(J,Y,Z);return}let X=await nJ(J,Y);if(!X)return;let G=X.find((z)=>z.role===vJ);if(G){await X5(J,Y,G);return}await ij(J,Y,X)}async function P2(J,Y){let Z=await VX(Y,DJ);if(Z){await lj(J,Y,Z);return}let X=await nJ(J,Y);if(!X)return;let G=X.find((z)=>z.role===vJ);if(G){await u0(["select-pane","-t",G.paneId]);return}await ij(J,Y,X)}async function G5(J,Y,Z){if(Z.role==="")await u0(["set-option","-p","-t",Z.paneId,"@kobe_role",YY]);let X=await J5(J),G=await e8(X,Y),{code:z,stdout:f}=await c0(["break-pane","-d","-s",Z.paneId,"-t",`${X}:${G}`,"-P","-F","#{pane_id}"]),q=f.trim()||Z.paneId;if(z!==0||!q){await T1(Y,"kobe: could not hide terminal pane");return}await mj(Y,ZY,q),await T1(Y,"kobe: Terminal pane hidden")}async function z5(J,Y,Z){let X=Z.find((K)=>K.role===JY),G=Z.find((K)=>K.role===EX);if(!X&&!G)return await T1(Y,"kobe: cannot restore terminal pane in this layout"),!1;let{cwd:z}=await Tf(J),f=X?["split-window","-v","-t",X.paneId,"-l",`${await t8()}%`,"-c",I1(z),"-P","-F","#{pane_id}"]:["split-window","-h","-t",G?.paneId??"","-l",`${await dj()}%`,"-c",I1(z),"-P","-F","#{pane_id}"],{code:q,stdout:B}=await c0(f),j=B.trim();if(q!==0||!j)return!1;return await u0(["set-option","-p","-t",j,"@kobe_role",YY]),await OZ(Y,ZY),await T1(Y,"kobe: Terminal pane restored"),!0}async function Q5(J,Y,Z){let X=await nJ(J,Y);if(!X)return;if(!await cj(Z)){await OZ(Y,ZY),await z5(J,Y,X);return}let G=X.find((j)=>j.role===JY),z=X.find((j)=>j.role===EX);if(!G&&!z){await T1(Y,"kobe: cannot restore terminal pane in this layout");return}let f=G?["join-pane","-v","-s",Z,"-t",G.paneId,"-l",`${await t8()}%`]:["join-pane","-h","-s",Z,"-t",z?.paneId??"","-l",`${await dj()}%`];if(await u0(f)!==0){await T1(Y,"kobe: could not restore terminal pane");return}await u0(["set-option","-p","-t",Z,"@kobe_role",YY]),await OZ(Y,ZY),await nj(J),X=await nJ(J,Y);let B=X?.find((j)=>j.paneId===Z);if(B)await u0(["select-pane","-t",B.paneId]);await T1(Y,"kobe: Terminal pane restored")}async function v2(J,Y){let Z=await VX(Y,ZY);if(Z){await Q5(J,Y,Z);return}let X=await nJ(J,Y);if(!X)return;let G=vj(X);if(G){await G5(J,Y,G);return}await z5(J,Y,X)}async function m2(J,Y){let Z=await VX(Y,uX);if(Z){await d2(J,Y,Z);return}await c2(J,Y)}async function c2(J,Y){let Z=await nJ(J,Y);if(!Z)return;let X=[],G=Z.find((f)=>f.role===JY);if(G)await u0(["kill-pane","-t",G.paneId]),X.push(JY);let z=vj(Z);if(z)await G5(J,Y,z),X.push(YY);if(!r8()){let f=Z.find((q)=>q.role===vJ);if(f)await X5(J,Y,f),X.push(vJ)}if(X.length===0){await T1(Y,"kobe: already focused \u2014 nothing to hide");return}await mj(Y,uX,X.join(",")),await T1(Y,"kobe: Zen mode on")}async function d2(J,Y,Z){let X=new Set(Z.split(",").map((G)=>G.trim()));if(X.has(vJ)){let G=await VX(Y,DJ);if(G)await lj(J,Y,G)}if(X.has(JY)){let G=await nJ(J,Y);if(G&&!G.some((z)=>z.role===JY))await s8(J,Y)}if(X.has(YY)){let G=await VX(Y,ZY);if(G)await Q5(J,Y,G)}await OZ(Y,uX),await T1(Y,"kobe: Zen mode off")}async function n2(J){let{code:Y,stdout:Z}=await c0(["list-windows","-t",`=${J}`,"-F","#{window_id}"]);if(Y!==0)return 0;return Z.split(`
69
+ `).filter((X)=>X.trim().length>0).length}async function i2(J,Y){if(await n2(J)<=1){await T1(Y,"Cannot close the only ChatTab");return}await w2(J,Y),await u0(["kill-window","-t",Y])}async function Ef(J,Y,Z={}){if(!await f1(J))return;let X=await S2(J,Z.windowId);if(!X)return;switch(Y){case"workspace-split":await k2(J,X);return;case"workspace-close":await I2(J,X);return;case"workspace-reset":await N2(J,X);return;case"tasks-toggle":await h2(J,X);return;case"tasks-restore":await P2(J,X);return;case"ops-toggle":await s8(J,X);return;case"terminal-toggle":await v2(J,X);return;case"zen-toggle":await m2(J,X);return;case"chat-tab-close":await i2(J,X);return}}var F2="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var $j=S(()=>{cY();rJ();Pj();N1();XY();jJ();eZ();Qz()});var iJ={};q1(iJ,{tmuxWindowSizeArgsForClient:()=>_j,tmuxSessionName:()=>K1,tmuxInitialSizeArgs:()=>q5,tmuxInitialClientSize:()=>pj,tmuxAvailable:()=>CY,switchClientBeforeKill:()=>yY,sessionExists:()=>f1,selectTasksPane:()=>s2,runLayoutAction:()=>Ef,resyncWindowToClient:()=>a2,refreshKobeWorkspacePanes:()=>GG,quickCreate:()=>_8,prepareWindowForSwitch:()=>xf,prepareWindowForAttach:()=>uf,parseTmuxClientRows:()=>B5,parseObservedSession:()=>W5,openUpdateTab:()=>Nf,openSettingsTab:()=>Sf,openNewTaskTab:()=>If,openHelpTab:()=>kf,newChatTab:()=>p8,kobeStatusRight:()=>gf,killSession:()=>mJ,healSessionLayout:()=>$8,focusBindCommand:()=>H5,ensureSession:()=>RZ,currentSessionName:()=>AJ,clientsWithConflictingSize:()=>j5,chatTabSwitchBindings:()=>Of,chatTabRenameBinding:()=>Rf,chatTabCloseBinding:()=>Af,chatTabChooseEngineBindings:()=>Cf,captureGlobalLayoutOnDrag:()=>a8,captureGlobalLayout:()=>zz,attachArgv:()=>vX,PANE_VERSION_OPTION:()=>jY,CHAT_TAB_STATUS_FORMAT:()=>fz,CHAT_TAB_STATUS_CURRENT_FORMAT:()=>yf,CHAT_TAB_STATE_OPTION:()=>uj,CHAT_TAB_ENGINE_PROMPT:()=>Ff});function q5(J=process.stdout,Y=process.env){let Z=pj(J,Y);return Z?["-x",`${Z.columns}`,"-y",`${Z.rows}`]:[]}function pj(J=process.stdout,Y=process.env){let Z=AZ(J.columns)??AZ(Y.COLUMNS),X=AZ(J.rows)??AZ(Y.LINES);return Z&&X?{columns:Z,rows:X}:null}function AZ(J){let Y=typeof J==="number"?J:typeof J==="string"?Number.parseInt(J,10):Number.NaN;return Number.isInteger(Y)&&Y>0?Y:void 0}function B5(J){let Y=[];for(let Z of J.split(`
70
+ `)){let[X,G,z,f,q]=Z.split("\t"),B=AZ(z?.trim()),j=AZ(f?.trim());if(!X?.trim()||!G?.trim()||!B||!j)continue;Y.push({name:X.trim(),session:G.trim(),width:B,height:j,flags:q?.trim()??""})}return Y}function j5(J,Y,Z,X={}){return J.filter((G)=>G.session===Y).filter((G)=>G.name!==X.currentClientName).filter((G)=>G.width!==Z.columns||G.height!==Z.rows).map((G)=>G.name)}function _j(J,Y){let Z=Math.max(1,J.rows-(Y.status?.trim()==="on"?1:0));return["-x",`${J.columns}`,"-y",`${Z}`]}async function rj(J,Y,Z={}){if(!Y)return;let{code:X,stdout:G}=await c0(["list-clients","-t",`=${J}`,"-F",l2]);if(X!==0)return;let z=j5(B5(G),J,Y,Z),f=[];if(Z.currentClientName)f.push(["refresh-client","-f","!ignore-size","-t",Z.currentClientName]);for(let q of z)f.push(["refresh-client","-f","ignore-size","-t",q]);if(f.length>0)await w1(f)}async function uf(J){FZ(J,"resize");let Y=pj();await rj(J,Y);let Z=Y?["-x",`${Y.columns}`,"-y",`${Y.rows}`]:[];if(Z.length>0)await u0(["resize-window","-t",`=${J}`,...Z]);await XG(J)}async function $2(){let{code:J,stdout:Y}=await c0(["display-message","-p","#{client_name}\t#{client_width}\t#{client_height}\t#{status}"]);if(J!==0)return{sizeArgs:[],clientSize:null,clientName:void 0};let[Z,X,G,z]=Y.trim().split("\t"),f=AZ(X),q=AZ(G),B=f&&q?{columns:f,rows:q}:null;return{sizeArgs:B?_j(B,{status:z}):[],clientSize:B,clientName:Z?.trim()||void 0}}async function xf(J){FZ(J,"resize");let Y=await $2();await rj(J,Y.clientSize,{currentClientName:Y.clientName});let Z=Y.sizeArgs;if(Z.length>0)await u0(["resize-window","-t",`=${J}`,...Z]);await XG(J)}async function a2(J,Y){if(!Y.size)return;FZ(J,"resize"),await rj(J,Y.size,{currentClientName:Y.clientName});let Z=_j(Y.size,{status:Y.status}),{commands:X}=await Tj(J,{force:!0});await w1([["resize-window","-t",`=${J}`,...Z],...X])}function H5(J,Y,Z){let X=`#{?window_zoomed_flag,1,#{?${p2[Y]},,1}}`;if(Z)return["bind-key","-n",J,"if-shell","-F",X,`select-pane ${Y}`,Z];return["bind-key","-n",J,"if-shell","-F",X,`select-pane ${Y}`]}async function RZ(J){let Y=aj.get(J.name);if(Y)return Y;let Z=o2(J);aj.set(J.name,Z);try{return await Z}finally{aj.delete(J.name)}}function W5(J){let Y="",Z="",X=!1,G=new Set;for(let z of J.split(`
71
+ `)){let[f,q,B,j,K]=z.split("\t");if(!f?.trim())continue;if(G.add(f.trim()),!Y&&j?.trim())Y=j.trim();if(!Z&&K?.trim())Z=K.trim();if(q?.trim()==="1"&&B?.trim()==="claude")X=!0}return{worktree:Y,vendor:Z,claudePaneAlive:X,windowCount:G.size}}async function r2(J){if(!await f1(J))return null;let{code:Y,stdout:Z}=await c0(["list-panes","-s","-t",`=${J}`,"-F",_2]);if(Y!==0)return{worktree:"",vendor:"",claudePaneAlive:!1,windowCount:0};return W5(Z)}async function o2(J){let Y=J.launchInit,Z=await r2(J.name),X=k8(Z,{cwd:J.cwd,vendor:J.vendor,hasEngineCommand:J.command.length>0}),G=U9(J.repo);if(X.kind==="reuse")return await XG(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor}),!0;if(X.kind==="respawn-engine"){if(await n8(J.name,J.cwd,J.command,G,J.vendor)){if(J.vendor)await mX(J.name,"@kobe_vendor",J.vendor);return await XG(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor,vendorChanged:!0}),!0}}if(X.kind==="rebuild"||X.kind==="respawn-engine")await mJ(J.name);let z=R1(),f=nX(J.command,J.vendor),q=J.repo!==void 0&&J.cwd===J.repo,B=q||G?void 0:J.taskId,j=q&&!G?J.taskId:void 0,K=_Q(pQ(f.argv,J.vendor,B),J.vendor,j),H=hX(MJ(K),G,J.cwd),L=(await c0(["new-session","-d","-s",J.name,"-c",I1(J.cwd),...q5(),"-P","-F","#{pane_id}",E7(H,{initScript:G?void 0:Y?.initScript,markerPath:!G&&Y?.initScript?mW(J.cwd):void 0})])).stdout.trim();if(!L)return console.error("[kobe tmux] new-session returned no pane id; session creation failed"),!1;if(f.sessionId)await WZ(L,gY,f.sessionId);await w1([...J.taskId?[["set-option","-t",J.name,"@kobe_task",J.taskId]]:[],["set-option","-t",J.name,"@kobe_worktree",J.cwd],...J.vendor?[["set-option","-t",J.name,"@kobe_vendor",J.vendor]]:[],...G?[["set-option","-t",J.name,lG,G]]:[]]),await xj(L,{cwd:J.cwd,taskId:J.taskId,opsCommand:J.opsCommand,inv:z,vendor:J.vendor});let F=p1(),D=z.map(J1).join(" "),A=`${F}${D} new-chattab --session '#{session_name}'`,R=`${A} --vendor '%%'`,l=`run-shell ${J1(R)}`,g=`${F}${D} focus-tasks --session '#{session_name}' --window '#{window_id}'`,k=`run-shell ${J1(g)}`,C=(q0)=>`${F}${D} layout --session '#{session_name}' --window '#{window_id}' --action ${q0}`,N=C("tasks-restore"),_=`run-shell ${J1(N)}`,X0=C("chat-tab-close"),s=`run-shell ${J1(X0)}`,Y0=`${F}${D} heal-layout --session '#{session_name}'`,u=`run-shell -b ${J1(Y0)}`,Q0=`${F}${D} resync-window --session '#{session_name}' --client '#{client_name}' --cols '#{client_width}' --rows '#{client_height}' --status '#{status}'`,t=`run-shell -b ${J1(Q0)}`,j0=`${F}${D} capture-layout --session '#{session_name}'`,S0=`run-shell -b ${J1(j0)}`,$=w7({tmuxSocket:GY}),P=Hf(),G0=R8.map((q0)=>["unbind-key","-n",q0]);if(P.overridden.has(SY))for(let q0 of MZ){let A0=HX(q0);if("key"in A0)G0.push(["unbind-key","-n",A0.key])}for(let q0 of P.overridden){if(q0===SY)continue;let A0=jX[q0],I0=JG(q0),k0=HX(A0,{allowBare:I0});if("key"in k0)G0.push(I0?["unbind-key",k0.key]:["unbind-key","-n",k0.key])}let Z0=["-L","-D","-U","-R"],K0=P.focus.flatMap((q0,A0)=>{let I0=Z0[A0],k0=I0==="-L"?_:void 0;return q0&&I0?[H5(q0.key,I0,k0)]:[]}),h=P.binds,y=(q0,A0)=>{let I0=h[q0];return I0?[["bind-key",I0.key,"run-shell",C(A0)]]:[]},e=(...q0)=>{let A0=q0.map((I0)=>h[I0]?.chord).filter((I0)=>!!I0);return A0.length>0?A0.join("/"):null};await w1([["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",fz],["set-option","-g","window-status-current-format",yf],["set-option","-g","status-right",gf({focusLeft:P.focus[0]?.key??null,detach:h["tmux.detach"]?.key??null,newTab:h["tmux.tab.new"]?.key??null,layoutSplits:e("tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"),layoutPanes:e("tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle","tmux.layout.zenToggle")})],["set-option","-g","mouse","on"],["set-hook","-g","window-resized",u],["set-hook","-g","client-resized",t],["set-hook","-g","window-layout-changed",S0],...G0,...h["tmux.detach"]?[["bind-key","-n",h["tmux.detach"].key,"if-shell","-F",`#{?#{${DJ}},1,#{==:#{@kobe_role},tasks}}`,"detach-client",k]]:[],...K0,...h["tmux.tab.new"]?[["bind-key","-n",h["tmux.tab.new"].key,"run-shell",A]]:[],...h["tmux.tab.chooseEngine"]?Cf(h["tmux.tab.chooseEngine"].key).map((q0)=>[...q0,l]):[],...h["tmux.tab.prev"]&&h["tmux.tab.next"]?Of(h["tmux.tab.prev"].key,h["tmux.tab.next"].key):h["tmux.tab.prev"]?[["bind-key","-n",h["tmux.tab.prev"].key,"previous-window"]]:h["tmux.tab.next"]?[["bind-key","-n",h["tmux.tab.next"].key,"next-window"]]:[],...h["tmux.tab.close"]?[Af(h["tmux.tab.close"].key,s)]:[],...h["tmux.tab.rename"]?[Rf(h["tmux.tab.rename"].key)]:[],...y("tmux.layout.workspaceSplit","workspace-split"),...y("tmux.layout.workspaceClose","workspace-close"),...y("tmux.layout.workspaceReset","workspace-reset"),...y("tmux.layout.tasksToggle","tasks-toggle"),...y("tmux.layout.opsToggle","ops-toggle"),...y("tmux.layout.terminalToggle","terminal-toggle"),...y("tmux.layout.zenToggle","zen-toggle"),["bind-key","f","run-shell",`${F}${D} quick-create --session '#{session_name}'`],["bind-key","u","display-popup","-E",$]]),await WX(),await u0(["select-pane","-t",L]);let V0=Y?.firstMessage;if(V0)S8(J.name,V0).catch((q0)=>console.error("[kobe tmux] first message delivery failed:",q0));return!0}async function f5(J,Y,Z){let X=Z?.trim()||`=${J}`,{code:G,stdout:z}=await c0(["list-panes","-t",X,"-F","#{pane_id}\t#{@kobe_role}"]);if(G!==0)return"";for(let f of z.split(`
72
+ `)){let[q,B]=f.split("\t");if(q?.trim()&&B?.trim()===Y)return q.trim()}return""}async function s2(J,Y={}){if(!await f1(J))return"";let Z=await f5(J,"tasks",Y.windowId);if(!Z)await Ef(J,"tasks-restore",{windowId:Y.windowId}),Z=await f5(J,"tasks",Y.windowId);if(!Z)return"";return await u0(["select-pane","-t",Z]),Z}var l2="#{client_name}\t#{client_session}\t#{client_width}\t#{client_height}\t#{client_flags}",p2,aj,_2="#{window_id}\t#{window_active}\t#{@kobe_role}\t#{@kobe_worktree}\t#{@kobe_vendor}";var t1=S(()=>{cY();bJ();n1();rJ();N1();Wf();Vf();XY();Df();wj();eZ();$j();ZG();Qz();N1();wj();Qz();$j();p2={"-L":"pane_at_left","-D":"pane_at_bottom","-U":"pane_at_top","-R":"pane_at_right"};aj=new Map});async function t2(J,Y){let{task:Z}=await J.request("task.get",{taskId:Y});return Z}async function oj(J,Y){let Z=await t2(J,Y);if(Z.worktreePath)return{task:Z,worktreePath:Z.worktreePath};let{worktreePath:X}=await J.request("task.ensureWorktree",{taskId:Y});if(!X)throw Error(`task ${Y} has no worktree`);return{task:Z,worktreePath:X}}async function V5(J,Y){let{task:Z,worktreePath:X}=await oj(J,Y),G=K1(Y);if(!await f1(G)){let z=aY(Z.repo??"",X,{kind:"repo-init"});if(!await RZ({name:G,cwd:X,command:RJ(Z.vendor,Z.modelEffort),taskId:Y,vendor:Z.vendor,launchInit:z}))throw Error(`failed to start tmux session for ${Y}`)}return{session:G,worktreePath:X}}function e2(J){return yQ(J,{bareSafe:!0})}async function K5(J,Y){let{task:Z,worktreePath:X}=await oj(J,Y),G=Z.kind==="main"?void 0:Y,z=Z.kind==="main"?Y:void 0,f=[..._Q(pQ(RJ(Z.vendor,Z.modelEffort),Z.vendor,G),Z.vendor,z)],q=aY(Z.repo??"",X,{kind:"none"}),B=e2(f),j=q.initScript?.trim()?`${q.initScript}
73
+ ${B}`:B,K=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:X,command:[K,"-ilc",j]}}async function U5(J,Y){let{worktreePath:Z}=await oj(J,Y),X=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:Z,command:[X,"-il"]}}async function L5(J){let Y=K1(J);await yY(Y).catch(()=>{}),await mJ(Y).catch(()=>{})}var D5=S(()=>{bJ();FB();tX();N1();t1()});import{existsSync as JR}from"fs";import{join as M5,normalize as A5}from"path";function YR(J){let Y=null,Z=null,X=new TextEncoder,G=new ReadableStream({start(z){Y=J((q,B)=>{try{z.enqueue(X.encode(`event: ${q}
74
74
  data: ${JSON.stringify(B)}
75
75
 
76
- `))}catch{}}),Z=setInterval(()=>{try{G.enqueue(f.encode(`: ping
76
+ `))}catch{}}),Z=setInterval(()=>{try{z.enqueue(X.encode(`: ping
77
77
 
78
- `))}catch{}},15000)},cancel(){if(Z)clearInterval(Z);Y?.()}});return new Response(X,{headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform",connection:"keep-alive"}})}async function I2(J,Y,Z){try{let{name:f,payload:X}=await J.json();if(!f)return Response.json({error:"missing rpc name"},{status:400});if(!t5.has(f))return Response.json({error:`rpc ${f} is not exposed to the web UI`},{status:403});let G=await Y.request(f,X),Q=X?.taskId;if(typeof Q==="string"){let q=f==="task.archive"&&X.archived!==!1;if(f==="task.delete"||q)Z(Q)}return Response.json({result:G})}catch(f){let X=f instanceof Error&&f.name!=="Error"?f.name:void 0;return Response.json({error:f instanceof Error?f.message:String(f),...X?{name:X}:{}},{status:500})}}async function N2(){try{let Y=(await xY()).map((Z)=>({id:Z,label:tZ(Z),effortLevels:a1(Z).effortLevels}));return Response.json({engines:Y.length>0?Y:[{id:"claude",label:"Claude"}]})}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:500})}}function b2(){return Response.json({api:eZ()})}function T2(){return Response.json({projects:uJ()})}function FZ(J,Y=""){return typeof J==="string"?J:Y}function E2(J,Y){return typeof J==="boolean"?J:Y}function HV(J){let Y=J.customEngineIds;if(!Array.isArray(Y))return[];return Y.filter((Z)=>typeof Z==="string"&&BV.test(Z)&&!e1(Z))}function u2(J){return J.split(/[-_]+/).filter(Boolean).map((Y)=>`${Y.slice(0,1).toUpperCase()}${Y.slice(1)}`).join(" ")}function x2(J,Y){return FZ(J[eJ(Y)]).trim()||tZ(Y)}function w2(J,Y){return FZ(J[tJ(Y)]).trim()||rX(Y).join(" ")}function jV(){let J=$1(),Y=HV(J),Z=[...bZ,...Y],f=FZ(J.lastSelectedVendor,"claude"),X=FZ(J.focusAccent,"primary");return Response.json({activeTheme:FZ(J.activeTheme,"claude"),transparentBackground:E2(J.transparentBackground,!1),focusAccent:qV.includes(X)?X:"primary",notificationsToast:J["notifications.toast.enabled"]!==!1,notificationsSound:J["notifications.sound.enabled"]!==!1,settingsSurface:Zf(J[nY]??Yf),editorKind:mf(J[dY]??nz),editorCustomCommand:FZ(J[KZ]),remoteProjects:J["experimental.remoteProjects"]===!0,autoStatus:J[oZ]===!0,dispatcher:J[sZ]===!0,defaultEngine:f,engines:Z.map((G)=>({id:G,label:x2(J,G),command:w2(J,G),isBuiltin:e1(G),isCustom:!e1(G),isDefault:G===f}))})}function GG(J,Y,Z){if(typeof Z==="string")J[Y]=Z.trim()}function YX(J,Y,Z){if(typeof Z==="boolean")J[Y]=Z}async function h2(J){try{let Y=await J.json(),Z={};if(GG(Z,"activeTheme",Y.activeTheme),YX(Z,"transparentBackground",Y.transparentBackground),qV.includes(Y.focusAccent))Z.focusAccent=Y.focusAccent;if(YX(Z,"notifications.toast.enabled",Y.notificationsToast),YX(Z,"notifications.sound.enabled",Y.notificationsSound),Y.settingsSurface==="chattab"||Y.settingsSurface==="taskpanel")Z[nY]=Y.settingsSurface;if(Jf.includes(Y.editorKind))Z[dY]=Y.editorKind;GG(Z,KZ,Y.editorCustomCommand),YX(Z,"experimental.remoteProjects",Y.remoteProjects),YX(Z,oZ,Y.autoStatus),YX(Z,sZ,Y.dispatcher),GG(Z,"lastSelectedVendor",Y.defaultEngine);let f=$1(),X=HV(f),G=new Set([...bZ,...X]),Q=Array.isArray(Y.engineUpdates)?Y.engineUpdates:[];for(let q of Q){if(!q||typeof q!=="object")continue;let B=q;if(typeof B.id!=="string"||!G.has(B.id))continue;GG(Z,tJ(B.id),B.command),GG(Z,eJ(B.id),B.label)}if(Y.addEngine&&typeof Y.addEngine==="object"){let q=Y.addEngine,B=typeof q.id==="string"?q.id.trim().toLowerCase():"";if(!BV.test(B)||e1(B)||G.has(B))return Response.json({error:"invalid or duplicate engine id"},{status:400});Z.customEngineIds=[...X,B],Z[tJ(B)]=FZ(q.command).trim();let H=FZ(q.label).trim();Z[eJ(B)]=H&&H!==B?H:u2(B)}if(typeof Y.removeEngine==="string"){let q=Y.removeEngine;if(!e1(q)){if(Z.customEngineIds=X.filter((B)=>B!==q),Z[tJ(q)]=void 0,Z[eJ(q)]=void 0,f.lastSelectedVendor===q)Z.lastSelectedVendor="claude"}}if(Object.keys(Z).length>0)wZ(Z);return jV()}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:400})}}async function P2(J,Y){try{let{taskId:Z}=await J.json();if(!Z)return Response.json({error:"missing taskId"},{status:400});return Response.json(await s7(Y,Z))}catch(Z){return Response.json({error:Z instanceof Error?Z.message:String(Z)},{status:500})}}async function fV(J,Y,Z){try{let f=J.searchParams.get("taskId");if(!f)return Response.json({error:"missing taskId"},{status:400});return Response.json(await Z(Y,f))}catch(f){return Response.json({error:f instanceof Error?f.message:String(f)},{status:500})}}function WV(){return Response.json({review:C1(kQ.review)??null,pr:C1(kQ.pr)??null})}async function v2(J){try{let Y=await J.json();if(typeof Y.review==="string")d1(kQ.review,Y.review);if(typeof Y.pr==="string")d1(kQ.pr,Y.pr);return WV()}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:400})}}async function m2(J,Y){let f=GV(ZV(Y,J==="/"?"/index.html":J));if(!f.startsWith(Y))return new Response("forbidden",{status:403});let X=Bun.file(y2(f)?f:ZV(Y,"index.html"));if(!await X.exists())return new Response("kobe web assets not built \u2014 run `bun --filter kobe-web build`",{status:503});return new Response(X)}function c2(J){let{link:Y,sseSends:Z,staticDir:f}=J,X=J.tearDownSession??((G)=>void JV(G));return async function(Q){let q=new URL(Q.url);if(q.pathname===QV)return new Response(zV);if(!r5(Q.headers.get("origin"),{allowedHost:J.allowedHost}))return new Response("forbidden: cross-origin request rejected",{status:403});if(q.pathname==="/events")return k2((F)=>{let D=J.onSseOpen?.()??(()=>{});return F("snapshot",Y.snapshot()),Z.add(F),()=>{Z.delete(F),D()}});if(q.pathname==="/api/rpc"&&Q.method==="POST")return I2(Q,Y,X);if(q.pathname==="/api/session"&&Q.method==="POST")return P2(Q,Y);if(q.pathname==="/api/engine-spec"&&Q.method==="GET")return fV(q,Y,t7);if(q.pathname==="/api/terminal-spec"&&Q.method==="GET")return fV(q,Y,e7);if(q.pathname==="/api/engines"&&Q.method==="GET")return N2();if(q.pathname==="/api/cli-invocation"&&Q.method==="GET")return b2();if(q.pathname==="/api/projects"&&Q.method==="GET")return T2();if(q.pathname==="/api/settings"&&Q.method==="GET")return jV();if(q.pathname==="/api/settings"&&Q.method==="PATCH")return h2(Q);if(q.pathname==="/api/quick-prompts"&&Q.method==="GET")return WV();if(q.pathname==="/api/quick-prompts"&&Q.method==="PUT")return v2(Q);let B=await P5(Q,q);if(B)return B;let H=await k5(Q,q);if(H)return H;let K=await T5(Q,q);if(K)return K;let j=await a5(Q,q,Y);if(j)return j;let U=await n5(Q,q);if(U)return U;let L=m5(Q,q);if(L)return L;if(f)return m2(q.pathname,f);return new Response("not found",{status:404})}}function Hf(J,Y){let Z=J.snapshot().find((f)=>f.channel===Y);return Z?Z.payload:null}function vH(J){return J.length>1?J.replace(/\/+$/,""):J}function d2(J,Y){let Z=vH(Y),f=new Set([Y]);for(let X of J){let G=vH(X.repo),Q=vH(X.worktreePath);if(G===Z||Q===Z){if(X.repo)f.add(X.repo);if(X.worktreePath)f.add(X.worktreePath)}}return[...f]}function VV(J){let Y=_X();return{async request(Z,f){return await pX(Y,Z,f,J.ctx(0))},snapshot(){let Z=J.orch.listTasks().map(rJ),f={},X=Hf(J.bus,"issue.snapshot");if(X)for(let q of d2(Z,X.repoRoot))f[q]={...X,repoRoot:q};let G=Hf(J.bus,"task.jobs"),Q=G?.phase==="running"?{[G.taskId]:G}:{};return{tasks:Z,activeTaskId:Hf(J.bus,"active-task")?.taskId??null,engineStates:J.activity.snapshotByTask(),update:Hf(J.bus,"update")?.info??null,jobs:Q,worktreeChanges:Hf(J.bus,"worktree.changes")?.changes??{},issueSnapshots:f,deliver:Hf(J.bus,"session.deliver"),uiPrefs:Hf(J.bus,"ui-prefs"),connected:!0}}}}async function XV(J){try{let Y=Bun.spawn(["lsof","-nP",`-iTCP:${J}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(Y.stdout).text()).split(`
79
- `).map((f)=>Number.parseInt(f.trim(),10)).filter((f)=>Number.isFinite(f)&&f!==process.pid)}catch{return[]}}async function n2(J,Y=QV){let Z;try{Z=(await(await fetch(`http://localhost:${J}${Y}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Z!==zV)throw Error(`port ${J} is in use by a non-kobe service; refusing to replace it`);let f=await XV(J);for(let G of f)try{process.kill(G,"SIGTERM")}catch{}let X=Date.now()+2000;while(Date.now()<X){if((await XV(J)).length===0)return;await new Promise((G)=>setTimeout(G,100))}}async function KV(J){if(J.takeover!==!1)await n2(J.port);let Y=new Set,Z=J.onEvent((q)=>{for(let B of Y)B("channel",q)}),f=J.hostname?.trim()||process.env.KOBE_WEB_HOST?.trim()||"127.0.0.1",X=o5(f),G=c2({link:J.link,sseSends:Y,staticDir:J.staticDir?GV(J.staticDir):void 0,allowedHost:X,onSseOpen:J.onSseOpen}),Q=Bun.serve({port:J.port,hostname:f,idleTimeout:0,fetch:G});return{port:Q.port??J.port,hostname:f,close(){Z(),Q.stop(!0)}}}var zV="kobe-web",QV="/__kobe_web",qV,BV,kQ;var UV=S(()=>{dZ();kJ();qZ();aX();mz();A1();Of();iz();zJ();I5();E5();v5();c5();xz();vZ();i5();s5();e5();YV();qV=["primary","success","info"],BV=/^[a-z][a-z0-9_-]{0,47}$/;kQ={review:"boardPrompt.review",pr:"boardPrompt.pr"}});import{spawn as i2}from"child_process";function mH(J,Y,Z,f){if(Z)return J+f.slowRetryMs;return Y+Math.max(f.minIntervalMs,(Y-J)*5)}function cH(J,Y){return!J.inFlight&&Y>=J.nextAllowedAt}function IQ(J,Y,Z,f){let X=Date.now();if(!cH(J,X))return!1;J.inFlight=!0;let G=new AbortController,Q=setTimeout(()=>G.abort(),Y.timeoutMs);return(async()=>{let q,B=!1;try{q=await Z(G.signal),B=!0}catch{}clearTimeout(Q);let H=G.signal.aborted;if(J.nextAllowedAt=mH(X,Date.now(),H,Y),J.inFlight=!1,B&&!H)f(q)})(),!0}function lY(J,Y,Z){return new Promise((f)=>{let X="",G=!1,Q=(B)=>{if(G)return;G=!0,f({status:B,stdout:X})},q=i2(J,Y.slice(),{cwd:Z.cwd,stdio:["ignore","pipe","ignore"],env:Z.env,signal:Z.signal,killSignal:"SIGKILL"});q.stdout?.on("data",(B)=>{X+=String(B)}),q.on("error",()=>Q(null)),q.on("close",(B)=>Q(B))})}var NQ=()=>{};var LV={};Q1(LV,{sameWorktreeChanges:()=>AY,readWorktreeChanges:()=>$2,pickPushedChanges:()=>TQ,parsePorcelain:()=>ZX});import{spawnSync as l2}from"child_process";function AY(J,Y){return J.added===Y.added&&J.deleted===Y.deleted}function TQ(J,Y){if(!J)return null;return J.get(Y)??bQ}function $2(J){if(!J)return bQ;try{let Y=l2("git",["status","--porcelain=v1"],{cwd:J,encoding:"utf8",stdio:["ignore","pipe","pipe"],env:IJ()});if(Y.status!==0||!Y.stdout)return bQ;return ZX(Y.stdout)}catch{return bQ}}function ZX(J){let Y=0,Z=0;for(let f of J.split(`
80
- `)){if(!f||f.startsWith("##"))continue;let X=f.charAt(0),G=f.charAt(1);if(X==="D"||G==="D")Z+=1;else Y+=1}return{added:Y,deleted:Z}}var bQ;var fX=S(()=>{UZ();bQ={added:0,deleted:0}});async function r2(J,Y){let Z=await lY("git",["status","--porcelain=v1"],{cwd:J,env:IJ(),signal:Y});if(Z.status!==0)throw Error("git status failed");return ZX(Z.stdout)}function o2(J){let Y=new Set;for(let Z of J){if(Z.archived)continue;if(!Z.worktreePath)continue;if(xJ(Z.repo)||xJ(Z.worktreePath))continue;Y.add(Z.worktreePath)}return Y}class DV{orch;bus;options;entries=new Map;stopped=!1;constructor(J,Y,Z={}){this.orch=J;this.bus=Y;this.options=Z}tick(){if(this.stopped)return;if(this.options.hasSubscribers&&!this.options.hasSubscribers())return;try{let J=o2(this.orch.listTasks()),Y=!1;for(let Z of this.entries.keys()){if(J.has(Z))continue;if(this.entries.get(Z)?.value)Y=!0;this.entries.delete(Z)}if(Y)this.publish();for(let Z of J)this.maybeCollect(Z)}catch(J){v1("worktree-changes",J)}}stop(){this.stopped=!0}maybeCollect(J){let Y=this.entries.get(J);if(!Y)Y={inFlight:!1,nextAllowedAt:0},this.entries.set(J,Y);let Z=this.options.cadence??{timeoutMs:a2,slowRetryMs:p2,minIntervalMs:_2},f=this.options.run??r2;IQ(Y,Z,(X)=>f(J,X),(X)=>{if(this.stopped)return;if(this.entries.get(J)!==Y)return;if(Y.value&&AY(Y.value,X))return;Y.value=X,this.publish()})}publish(){let J={};for(let[Y,Z]of this.entries)if(Z.value)J[Y]=Z.value;this.bus.publish("worktree.changes",{changes:J})}}function MV(J,Y,Z=dH,f){if(Z<=0)return()=>{};let X=new DV(J,Y,{hasSubscribers:f});X.tick();let G=setInterval(()=>X.tick(),Z);return G.unref?.(),()=>{clearInterval(G),X.stop()}}var dH=2000,a2=4000,p2=60000,_2=1500;var FV=S(()=>{UZ();NQ();A1();fX()});import{mkdir as OV,readFile as s2,unlink as nH,writeFile as t2}from"fs/promises";import{createServer as e2}from"net";import{dirname as AV}from"path";import{StringDecoder as JR}from"string_decoder";function ZR(){let J=process.env.KOBE_DAEMON_IDLE_GRACE_MS;if(J===void 0)return RV;let Y=Number(J);return Number.isFinite(Y)&&Y>=0?Y:RV}async function CV(J,Y={}){let Z=Y.socketPath??WY(Y.homeDir),f=Y.pidPath??EY(Y.homeDir),X=Y.startedAt??new Date,G=new Set,Q=new Set,q=1,B=new zH({clients:function*(){yield*G,yield*Q},idleGraceMs:ZR(),onIdleStop:()=>void t().catch((o)=>v1("daemon-idle-shutdown",o))}),H=new lB;H.onPublish((o)=>{gV(G,{type:"event",name:o.channel,payload:o.payload})});let K=new qB(H),j=new Pz(hz(Y.homeDir));await OV(AV(Z),{recursive:!0}),await OV(AV(f),{recursive:!0}),await nH(Z).catch(()=>{});let U=e2((o)=>{let _={id:q++,connectedAt:new Date,socket:o,buffer:"",subscribed:!1,holdsLifetime:!1,channels:null};G.add(_);let r=new JR("utf8");o.on("data",(f0)=>{_.buffer+=r.write(f0),W0(_)}),o.on("error",()=>{}),o.on("close",()=>{if(G.delete(_),_.subscribed)jZ("conn",`client #${_.id} (${_.holdsLifetime?"gui":"pane"}) disconnected \u2014 ${G.size} client(s), ${B.guiCount()} gui left`);B.clientDisconnected(_.holdsLifetime)})}),L=J.subscribeTasks((o)=>{H.publish("task.snapshot",{tasks:o.map(rJ)})}),F=Y.checkUpdate??RX,D=Y.updatePollMs??YR,O=()=>{F().then((o)=>H.publish("update",{info:o})).catch((o)=>v1("update-poller",o))},A=null;if(D>0)O(),A=setInterval(O,D),A.unref?.();let l=Y.autoTitlePollMs??iB,R=z5(J,l,()=>B.hasSubscribers()),C=R5(H,{statePath:qH(Y.homeDir),debounceMs:Y.uiPrefsDebounceMs??QH}),g=M5(H,{path:GH(Y.homeDir),debounceMs:Y.keybindingsDebounceMs??XH}),y=MV(J,H,Y.worktreeChangesTickMs??dH,()=>B.hasSubscribers()),$=null,G0={socketPath:Z,pidPath:f,startedAt:X,get webPort(){return $?.port},clients:G,async close(){if(B.markStopping(),L(),$?.close(),$=null,A)clearInterval(A);R(),C(),g(),y(),K.close(),gV(G,{type:"event",name:"daemon.stopping",payload:{}});for(let o of Array.from(G))o.socket.destroy();await new Promise((o)=>U.close(()=>o())),await nH(Z).catch(()=>{}),await nH(f).catch(()=>{})}};await new Promise((o,_)=>{let r=U;r.once("error",_),U.listen(Z,()=>{r.removeListener("error",_),o()})}),await t2(f,`${process.pid}
81
- `,"utf8");async function t(){if(B.isStopping())return;B.markStopping(),await Y.onStop?.(),setTimeout(()=>{G0.close().catch((o)=>v1("daemon-shutdown",o))},0).unref()}let Z0=_X();function u(o){return{orch:J,bus:H,activity:K,issues:j,daemon:{startedAt:X,socketPath:Z,webPort:$?.port,pid:process.pid,guiCount:()=>B.guiCount(),stopSoon:t},clientId:o}}if(Y.webPort!==void 0){let o=VV({orch:J,bus:H,activity:K,ctx:u});$=await KV({port:Y.webPort,hostname:Y.webHost,staticDir:Y.webStaticDir,link:o,onEvent:(_)=>H.onPublish(_),onSseOpen:()=>{let _={subscribed:!0,holdsLifetime:!0};return Q.add(_),B.guiAttached(),jZ("conn",`web client subscribed \u2014 ${G.size+Q.size} client(s), ${B.guiCount()} gui`),()=>{Q.delete(_),jZ("conn",`web client disconnected \u2014 ${G.size+Q.size} client(s), ${B.guiCount()} gui left`),B.clientDisconnected(!0)}}}),jZ("web",`daemon web transport listening on http://${$.hostname}:${$.port}`)}async function B0(o,_){if(o.name==="subscribe"){let r=rB(o.payload),f0=_.subscribed;_.subscribed=!0;let a=r.role==="gui"?"gui":"pane";_.holdsLifetime=a==="gui",_.channels=nW(r.channels);let U0=!f0;if(_.holdsLifetime)B.guiAttached();jZ("conn",`client #${_.id} subscribed as ${a}${_.channels?` [${[..._.channels].join(",")}]`:""} \u2014 ${G.size} client(s), ${B.guiCount()} gui${U0?" (collectors resume)":""}`);for(let c of H.snapshot()){if(_.channels&&!_.channels.has(c.channel))continue;zG(_,{type:"event",name:c.channel,payload:c.payload})}if(!_.channels||_.channels.has("engine-state"))for(let c of K.currentNonIdle())zG(_,{type:"event",name:"engine-state",payload:c});return{}}return pX(Z0,o.name,o.payload,u(_.id))}async function Y0(o,_){try{let r=await B0(o,_);zG(_,{type:"response",id:o.id,name:o.name,payload:r})}catch(r){zG(_,{type:"response",id:o.id,name:o.name,error:_B(r)})}}function W0(o){let _=o.buffer.indexOf(`
82
- `);while(_!==-1){let r=o.buffer.slice(0,_);if(o.buffer=o.buffer.slice(_+1),r.trim().length>0)try{let f0=JSON.parse(r);if(f0.type!=="request")throw Error("daemon only accepts request frames from clients");Y0(f0,o)}catch(f0){zG(o,{type:"response",id:"parse-error",error:{message:f0 instanceof Error?f0.message:String(f0)}})}_=o.buffer.indexOf(`
83
- `)}}return G0}async function XX(J){try{let Y=await s2(J,"utf8"),Z=Number(Y.trim());return Number.isFinite(Z)?Z:null}catch{return null}}function zG(J,Y){J.socket.write(EX(Y))}function gV(J,Y){let Z=Y.type==="event"&&Y.name!=="daemon.stopping"?Y.name:null,f=null;for(let X of J){if(!X.subscribed&&Y.type==="event")continue;if(Z&&X.channels&&!X.channels.has(Z))continue;f??=EX(Y),X.socket.write(f)}}var YR=21600000,RV=3000;var EQ=S(()=>{QJ();tW();Q5();xz();ZH();F5();O5();yf();vZ();g5();UV();FV();xz();ZH()});import{unlink as SV}from"fs/promises";function fR(J){try{return process.kill(J,0),!0}catch(Y){return Y.code==="EPERM"}}async function GX(J,Y){let Z=await XX(Y),f=Z!==null&&Z!==process.pid?Z:null,X=f!==null&&fR(f),G=X?"graceful":"absent",Q=new hJ(J),q=Q.request("daemon.stop").catch(()=>{return}),B=new Promise((H)=>setTimeout(H,2000));if(await Promise.race([q,B]),Q.close(),X&&f!==null){let H=Date.now()+5000,K=!1;while(Date.now()<H){try{process.kill(f,0)}catch{break}if(!K&&Date.now()-(H-5000)>2000){try{process.kill(f,"SIGTERM")}catch{}G="sigterm",K=!0}await new Promise((j)=>setTimeout(j,50))}try{process.kill(f,0),process.kill(f,"SIGKILL"),G="sigkill",await new Promise((j)=>setTimeout(j,100))}catch{}}return await SV(J).catch(()=>{}),await SV(Y).catch(()=>{}),{pid:Z,method:G}}var uQ=S(()=>{uX();EQ()});var NH={};Q1(NH,{testDaemonResponds:()=>xQ,ensureDaemonReachable:()=>zX,connectOrStartDaemon:()=>fY,connectIfRunning:()=>dJ});import{spawn as XR}from"child_process";import{closeSync as GR,existsSync as zR,mkdirSync as QR,openSync as qR}from"fs";import{dirname as yV,resolve as iH}from"path";import{fileURLToPath as BR}from"url";function WR(J,Y,Z,f){let X="ignore",G;try{QR(yV(f),{recursive:!0}),G=qR(f,"a"),X=["ignore",G,G]}catch{X="ignore"}if(XR(J,[...Y],{detached:!0,stdio:X,env:Z}).unref(),G!==void 0)try{GR(G)}catch{}}async function zX(){let J=WY();if(await xQ(J))return J;await GX(J,EY()).catch(()=>{});let[Y,...Z]=VR(HR);WR(Y,Z,process.env,Qz());let f=Date.now()+5000;while(Date.now()<f){if(await xQ(J))return J;await new Promise((X)=>setTimeout(X,100))}throw Error(`kobe: daemon did not start (or stayed wedged) at ${J}`)}async function fY(){let J=await zX(),Y=new hJ(J);return await Y.connect(),Y}async function dJ(){let J=WY();if(!await xQ(J))return null;let Y=new hJ(J);return await Y.connect(),Y}async function xQ(J,Y=jR){let Z=new hJ(J);try{await Z.connect()}catch{return Z.close(),!1}let f=Z.request("hello",{protocolVersion:wJ}).then(()=>!0).catch(()=>!0),X,G=new Promise((q)=>{X=setTimeout(()=>q(!1),Y)}),Q=await Promise.race([f,G]);if(X)clearTimeout(X);return Z.close(),Q}function VR(J){let Y=BR(import.meta.url);if(Y.startsWith("/$bunfs")||Y.startsWith("B:\\~BUN"))return[process.execPath,...J];let Z=yV(Y),f=[iH(Z,"../cli/index.ts"),iH(Z,"../../../kobe/src/cli/index.ts"),iH(Z,"../cli/index.js")],X=f.find((G)=>zR(G));if(X)return[process.execPath,X,...J];throw Error(`kobe: could not locate kobe entry near ${Z}; checked ${f.join(", ")}`)}var HR,jR=3000;var DJ=S(()=>{uQ();yf();vZ();uX();HR=["daemon","start"]});var bV={};Q1(bV,{runExportSubcommand:()=>FR,renderExport:()=>NV});function KR(J){return{id:J.id,title:J.title,status:J.status,archived:String(J.archived),vendor:J.vendor??k1,branch:J.branch,repo:J.repo,worktreePath:J.worktreePath}}function lH(J){process.stderr.write(`kobe export: ${J}
78
+ `))}catch{}},15000)},cancel(){if(Z)clearInterval(Z);Y?.()}});return new Response(G,{headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform",connection:"keep-alive"}})}async function ZR(J,Y,Z){try{let{name:X,payload:G}=await J.json();if(!X)return Response.json({error:"missing rpc name"},{status:400});if(!V8.has(X))return Response.json({error:`rpc ${X} is not exposed to the web UI`},{status:403});let z=await Y.request(X,G),f=G?.taskId;if(typeof f==="string"){let q=X==="task.archive"&&G.archived!==!1;if(X==="task.delete"||q)Z(f)}return Response.json({result:z})}catch(X){let G=X instanceof Error&&X.name!=="Error"?X.name:void 0;return Response.json({error:X instanceof Error?X.message:String(X),...G?{name:G}:{}},{status:500})}}async function XR(){try{let Y=(await mY()).map((Z)=>({id:Z,label:XX(Z),effortLevels:a1(Z).effortLevels}));return Response.json({engines:Y.length>0?Y:[{id:"claude",label:"Claude"}]})}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:500})}}function GR(){return Response.json({api:GX()})}function zR(){return Response.json({projects:wJ()})}function CZ(J,Y=""){return typeof J==="string"?J:Y}function QR(J,Y){return typeof J==="boolean"?J:Y}function S5(J){let Y=J.customEngineIds;if(!Array.isArray(Y))return[];return Y.filter((Z)=>typeof Z==="string"&&y5.test(Z)&&!XJ(Z))}function fR(J){return J.split(/[-_]+/).filter(Boolean).map((Y)=>`${Y.slice(0,1).toUpperCase()}${Y.slice(1)}`).join(" ")}function qR(J,Y){return CZ(J[qY(Y)]).trim()||XX(Y)}function BR(J,Y){return CZ(J[fY(Y)]).trim()||eG(Y).join(" ")}function k5(){let J=c1(),Y=S5(J),Z=[...xZ,...Y],X=CZ(J.lastSelectedVendor,"claude"),G=CZ(J.focusAccent,"primary");return Response.json({activeTheme:CZ(J.activeTheme,"claude"),transparentBackground:QR(J.transparentBackground,!1),focusAccent:g5.includes(G)?G:"primary",notificationsToast:J["notifications.toast.enabled"]!==!1,notificationsSound:J["notifications.sound.enabled"]!==!1,settingsSurface:fX(J[$Y]??QX),editorKind:iX(J[lY]??rQ),editorCustomCommand:CZ(J[LZ]),remoteProjects:J["experimental.remoteProjects"]===!0,autoStatus:J[YX]===!0,dispatcher:J[ZX]===!0,defaultEngine:X,engines:Z.map((z)=>({id:z,label:qR(J,z),command:BR(J,z),isBuiltin:XJ(z),isCustom:!XJ(z),isDefault:z===X}))})}function qz(J,Y,Z){if(typeof Z==="string")J[Y]=Z.trim()}function zG(J,Y,Z){if(typeof Z==="boolean")J[Y]=Z}async function jR(J){try{let Y=await J.json(),Z={};if(qz(Z,"activeTheme",Y.activeTheme),zG(Z,"transparentBackground",Y.transparentBackground),g5.includes(Y.focusAccent))Z.focusAccent=Y.focusAccent;if(zG(Z,"notifications.toast.enabled",Y.notificationsToast),zG(Z,"notifications.sound.enabled",Y.notificationsSound),Y.settingsSurface==="chattab"||Y.settingsSurface==="taskpanel")Z[$Y]=Y.settingsSurface;if(zX.includes(Y.editorKind))Z[lY]=Y.editorKind;qz(Z,LZ,Y.editorCustomCommand),zG(Z,"experimental.remoteProjects",Y.remoteProjects),zG(Z,YX,Y.autoStatus),zG(Z,ZX,Y.dispatcher),qz(Z,"lastSelectedVendor",Y.defaultEngine);let X=c1(),G=S5(X),z=new Set([...xZ,...G]),f=Array.isArray(Y.engineUpdates)?Y.engineUpdates:[];for(let q of f){if(!q||typeof q!=="object")continue;let B=q;if(typeof B.id!=="string"||!z.has(B.id))continue;qz(Z,fY(B.id),B.command),qz(Z,qY(B.id),B.label)}if(Y.addEngine&&typeof Y.addEngine==="object"){let q=Y.addEngine,B=typeof q.id==="string"?q.id.trim().toLowerCase():"";if(!y5.test(B)||XJ(B)||z.has(B))return Response.json({error:"invalid or duplicate engine id"},{status:400});Z.customEngineIds=[...G,B],Z[fY(B)]=CZ(q.command).trim();let j=CZ(q.label).trim();Z[qY(B)]=j&&j!==B?j:fR(B)}if(typeof Y.removeEngine==="string"){let q=Y.removeEngine;if(!XJ(q)){if(Z.customEngineIds=G.filter((B)=>B!==q),Z[fY(q)]=void 0,Z[qY(q)]=void 0,X.lastSelectedVendor===q)Z.lastSelectedVendor="claude"}}if(Object.keys(Z).length>0)mZ(Z);return k5()}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:400})}}async function HR(J,Y){try{let{taskId:Z}=await J.json();if(!Z)return Response.json({error:"missing taskId"},{status:400});return Response.json(await V5(Y,Z))}catch(Z){return Response.json({error:Z instanceof Error?Z.message:String(Z)},{status:500})}}async function F5(J,Y,Z){try{let X=J.searchParams.get("taskId");if(!X)return Response.json({error:"missing taskId"},{status:400});return Response.json(await Z(Y,X))}catch(X){return Response.json({error:X instanceof Error?X.message:String(X)},{status:500})}}function I5(){return Response.json({review:g1(wf.review)??null,pr:g1(wf.pr)??null})}async function WR(J){try{let Y=await J.json();if(typeof Y.review==="string")i1(wf.review,Y.review);if(typeof Y.pr==="string")i1(wf.pr,Y.pr);return I5()}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:400})}}async function VR(J,Y){let X=A5(M5(Y,J==="/"?"/index.html":J));if(!X.startsWith(Y))return new Response("forbidden",{status:403});let G=Bun.file(JR(X)?X:M5(Y,"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 KR(J){let{link:Y,sseSends:Z,staticDir:X}=J,G=J.tearDownSession??((z)=>void L5(z));return async function(f){let q=new URL(f.url);if(q.pathname===C5)return new Response(R5);if(!j8(f.headers.get("origin"),{allowedHost:J.allowedHost}))return new Response("forbidden: cross-origin request rejected",{status:403});if(q.pathname==="/events")return YR((F)=>{let D=J.onSseOpen?.()??(()=>{});return F("snapshot",Y.snapshot()),Z.add(F),()=>{Z.delete(F),D()}});if(q.pathname==="/api/rpc"&&f.method==="POST")return ZR(f,Y,G);if(q.pathname==="/api/session"&&f.method==="POST")return HR(f,Y);if(q.pathname==="/api/engine-spec"&&f.method==="GET")return F5(q,Y,K5);if(q.pathname==="/api/terminal-spec"&&f.method==="GET")return F5(q,Y,U5);if(q.pathname==="/api/engines"&&f.method==="GET")return XR();if(q.pathname==="/api/cli-invocation"&&f.method==="GET")return GR();if(q.pathname==="/api/projects"&&f.method==="GET")return zR();if(q.pathname==="/api/settings"&&f.method==="GET")return k5();if(q.pathname==="/api/settings"&&f.method==="PATCH")return jR(f);if(q.pathname==="/api/quick-prompts"&&f.method==="GET")return I5();if(q.pathname==="/api/quick-prompts"&&f.method==="PUT")return WR(f);let B=await tV(f,q);if(B)return B;let j=await nV(f,q);if(j)return j;let K=await aV(f,q);if(K)return K;let H=await f8(f,q,Y);if(H)return H;let U=await X8(f,q);if(U)return U;let L=J8(f,q);if(L)return L;if(X)return VR(q.pathname,X);return new Response("not found",{status:404})}}function KX(J,Y){let Z=J.snapshot().find((X)=>X.channel===Y);return Z?Z.payload:null}function sj(J){return J.length>1?J.replace(/\/+$/,""):J}function UR(J,Y){let Z=sj(Y),X=new Set([Y]);for(let G of J){let z=sj(G.repo),f=sj(G.worktreePath);if(z===Z||f===Z){if(G.repo)X.add(G.repo);if(G.worktreePath)X.add(G.worktreePath)}}return[...X]}function N5(J){let Y=sG();return{async request(Z,X){return await oG(Y,Z,X,J.ctx(0))},snapshot(){let Z=J.orch.listTasks().map(eJ),X={},G=KX(J.bus,"issue.snapshot");if(G)for(let q of UR(Z,G.repoRoot))X[q]={...G,repoRoot:q};let z=KX(J.bus,"task.jobs"),f=z?.phase==="running"?{[z.taskId]:z}:{};return{tasks:Z,activeTaskId:KX(J.bus,"active-task")?.taskId??null,engineStates:J.activity.snapshotByTask(),update:KX(J.bus,"update")?.info??null,jobs:f,worktreeChanges:KX(J.bus,"worktree.changes")?.changes??{},issueSnapshots:X,deliver:KX(J.bus,"session.deliver"),uiPrefs:KX(J.bus,"ui-prefs"),connected:!0}}}}async function O5(J){try{let Y=Bun.spawn(["lsof","-nP",`-iTCP:${J}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(Y.stdout).text()).split(`
79
+ `).map((X)=>Number.parseInt(X.trim(),10)).filter((X)=>Number.isFinite(X)&&X!==process.pid)}catch{return[]}}async function LR(J,Y=C5){let Z;try{Z=(await(await fetch(`http://localhost:${J}${Y}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Z!==R5)throw Error(`port ${J} is in use by a non-kobe service; refusing to replace it`);let X=await O5(J);for(let z of X)try{process.kill(z,"SIGTERM")}catch{}let G=Date.now()+2000;while(Date.now()<G){if((await O5(J)).length===0)return;await new Promise((z)=>setTimeout(z,100))}}async function b5(J){if(J.takeover!==!1)await LR(J.port);let Y=new Set,Z=J.onEvent((q)=>{for(let B of Y)B("channel",q)}),X=J.hostname?.trim()||process.env.KOBE_WEB_HOST?.trim()||"127.0.0.1",G=H8(X),z=KR({link:J.link,sseSends:Y,staticDir:J.staticDir?A5(J.staticDir):void 0,allowedHost:G,onSseOpen:J.onSseOpen}),f=Bun.serve({port:J.port,hostname:X,idleTimeout:0,fetch:z});return{port:f.port??J.port,hostname:X,close(){Z(),f.stop(!0)}}}var R5="kobe-web",C5="/__kobe_web",g5,y5,wf;var T5=S(()=>{aZ();bJ();jZ();rG();aQ();O1();cZ();oQ();BJ();iV();pV();eV();Y8();mQ();iZ();G8();W8();K8();D5();g5=["primary","success","info"],y5=/^[a-z][a-z0-9_-]{0,47}$/;wf={review:"boardPrompt.review",pr:"boardPrompt.pr"}});var E5={};q1(E5,{sameWorktreeChanges:()=>kY,readWorktreeChanges:()=>MR,pickPushedChanges:()=>Pf,parsePorcelain:()=>QG});import{spawnSync as DR}from"child_process";function kY(J,Y){return J.added===Y.added&&J.deleted===Y.deleted}function Pf(J,Y){if(!J)return null;return J.get(Y)??hf}function MR(J){if(!J)return hf;try{let Y=DR("git",["status","--porcelain=v1"],{cwd:J,encoding:"utf8",stdio:["ignore","pipe","pipe"],env:TJ()});if(Y.status!==0||!Y.stdout)return hf;return QG(Y.stdout)}catch{return hf}}function QG(J){let Y=0,Z=0;for(let X of J.split(`
80
+ `)){if(!X||X.startsWith("##"))continue;let G=X.charAt(0),z=X.charAt(1);if(G==="D"||z==="D")Z+=1;else Y+=1}return{added:Y,deleted:Z}}var hf;var fG=S(()=>{DZ();hf={added:0,deleted:0}});async function RR(J,Y){let Z=await QY("git",["status","--porcelain=v1"],{cwd:J,env:TJ(),signal:Y});if(Z.status!==0)throw Error("git status failed");return QG(Z.stdout)}function CR(J){let Y=new Set;for(let Z of J){if(Z.archived)continue;if(!Z.worktreePath)continue;if(HJ(Z.repo)||HJ(Z.worktreePath))continue;Y.add(Z.worktreePath)}return Y}class u5{orch;bus;options;entries=new Map;stopped=!1;constructor(J,Y,Z={}){this.orch=J;this.bus=Y;this.options=Z}tick(){if(this.stopped)return;if(this.options.hasSubscribers&&!this.options.hasSubscribers())return;try{let J=CR(this.orch.listTasks()),Y=!1;for(let Z of this.entries.keys()){if(J.has(Z))continue;if(this.entries.get(Z)?.value)Y=!0;this.entries.delete(Z)}if(Y)this.publish();for(let Z of J)this.maybeCollect(Z)}catch(J){b1("worktree-changes",J)}}stop(){this.stopped=!0}maybeCollect(J){let Y=this.entries.get(J);if(!Y)Y={inFlight:!1,nextAllowedAt:0},this.entries.set(J,Y);let Z=this.options.cadence??{timeoutMs:FR,slowRetryMs:OR,minIntervalMs:AR},X=this.options.run??RR;lQ(Y,Z,(G)=>X(J,G),(G)=>{if(this.stopped)return;if(this.entries.get(J)!==Y)return;if(Y.value&&kY(Y.value,G))return;Y.value=G,this.publish()})}publish(){let J={};for(let[Y,Z]of this.entries)if(Z.value)J[Y]=Z.value;this.bus.publish("worktree.changes",{changes:J})}}function x5(J,Y,Z=tj,X){if(Z<=0)return()=>{};let G=new u5(J,Y,{hasSubscribers:X});G.tick();let z=setInterval(()=>G.tick(),Z);return z.unref?.(),()=>{clearInterval(z),G.stop()}}var tj=2000,FR=4000,OR=60000,AR=1500;var w5=S(()=>{DZ();tG();O1();fG()});import{mkdir as h5,readFile as gR,unlink as ej,writeFile as yR}from"fs/promises";import{createServer as SR}from"net";import{dirname as P5}from"path";import{StringDecoder as kR}from"string_decoder";function NR(){let J=process.env.KOBE_DAEMON_IDLE_GRACE_MS;if(J===void 0)return v5;let Y=Number(J);return Number.isFinite(Y)&&Y>=0?Y:v5}async function c5(J,Y={}){let Z=Y.socketPath??AY(Y.homeDir),X=Y.pidPath??PY(Y.homeDir),G=Y.startedAt??new Date,z=new Set,f=new Set,q=1,B=new Hj({clients:function*(){yield*z,yield*f},idleGraceMs:NR(),onIdleStop:()=>void Y0().catch(($)=>b1("daemon-idle-shutdown",$))}),j=new rB;j.onPublish(($)=>{m5(z,{type:"event",name:$.channel,payload:$.payload})});let K=new VB(j),H=new nQ(dQ(Y.homeDir));await h5(P5(Z),{recursive:!0}),await h5(P5(X),{recursive:!0}),await ej(Z).catch(()=>{});let U=SR(($)=>{let P={id:q++,connectedAt:new Date,socket:$,buffer:"",subscribed:!1,holdsLifetime:!1,channels:null};z.add(P);let G0=new kR("utf8");$.on("data",(Z0)=>{P.buffer+=G0.write(Z0),S0(P)}),$.on("error",()=>{}),$.on("close",()=>{if(z.delete(P),P.subscribed)VZ("conn",`client #${P.id} (${P.holdsLifetime?"gui":"pane"}) disconnected \u2014 ${z.size} client(s), ${B.guiCount()} gui left`);B.clientDisconnected(P.holdsLifetime)})}),L=J.subscribeTasks(($)=>{j.publish("task.snapshot",{tasks:$.map(eJ)})}),F=Y.checkUpdate??yG,D=Y.updatePollMs??IR,A=()=>{F().then(($)=>j.publish("update",{info:$})).catch(($)=>b1("update-poller",$))},R=null;if(D>0)A(),R=setInterval(A,D),R.unref?.();let l=Y.autoTitlePollMs??_B,g=FV(J,l,()=>B.hasSubscribers()),k=PV(j,{statePath:Uj(Y.homeDir),debounceMs:Y.uiPrefsDebounceMs??Kj}),C=TV(j,{path:jj(Y.homeDir),debounceMs:Y.keybindingsDebounceMs??Bj}),N=x5(J,j,Y.worktreeChangesTickMs??tj,()=>B.hasSubscribers()),_=xV(J,Y.prStatusPollMs??$Q,()=>B.hasSubscribers()),X0=null,s={socketPath:Z,pidPath:X,startedAt:G,get webPort(){return X0?.port},clients:z,async close(){if(B.markStopping(),L(),X0?.close(),X0=null,R)clearInterval(R);g(),_(),k(),C(),N(),K.close(),m5(z,{type:"event",name:"daemon.stopping",payload:{}});for(let $ of Array.from(z))$.socket.destroy();await new Promise(($)=>U.close(()=>$())),await ej(Z).catch(()=>{}),await ej(X).catch(()=>{})}};await new Promise(($,P)=>{let G0=U;G0.once("error",P),U.listen(Z,()=>{G0.removeListener("error",P),$()})}),await yR(X,`${process.pid}
81
+ `,"utf8");async function Y0(){if(B.isStopping())return;B.markStopping(),await Y.onStop?.(),setTimeout(()=>{s.close().catch(($)=>b1("daemon-shutdown",$))},0).unref()}let u=sG();function Q0($){return{orch:J,bus:j,activity:K,issues:H,daemon:{startedAt:G,socketPath:Z,webPort:X0?.port,pid:process.pid,guiCount:()=>B.guiCount(),stopSoon:Y0},clientId:$}}if(Y.webPort!==void 0){let $=N5({orch:J,bus:j,activity:K,ctx:Q0});X0=await b5({port:Y.webPort,hostname:Y.webHost,staticDir:Y.webStaticDir,link:$,onEvent:(P)=>j.onPublish(P),onSseOpen:()=>{let P={subscribed:!0,holdsLifetime:!0};return f.add(P),B.guiAttached(),VZ("conn",`web client subscribed \u2014 ${z.size+f.size} client(s), ${B.guiCount()} gui`),()=>{f.delete(P),VZ("conn",`web client disconnected \u2014 ${z.size+f.size} client(s), ${B.guiCount()} gui left`),B.clientDisconnected(!0)}}}),VZ("web",`daemon web transport listening on http://${X0.hostname}:${X0.port}`)}async function t($,P){if($.name==="subscribe"){let G0=Jj($.payload),Z0=P.subscribed;P.subscribed=!0;let K0=G0.role==="gui"?"gui":"pane";P.holdsLifetime=K0==="gui",P.channels=Y7(G0.channels);let h=!Z0;if(P.holdsLifetime)B.guiAttached();VZ("conn",`client #${P.id} subscribed as ${K0}${P.channels?` [${[...P.channels].join(",")}]`:""} \u2014 ${z.size} client(s), ${B.guiCount()} gui${h?" (collectors resume)":""}`);for(let y of j.snapshot()){if(P.channels&&!P.channels.has(y.channel))continue;Bz(P,{type:"event",name:y.channel,payload:y.payload})}if(!P.channels||P.channels.has("engine-state"))for(let y of K.currentNonIdle())Bz(P,{type:"event",name:"engine-state",payload:y});return{}}return oG(u,$.name,$.payload,Q0(P.id))}async function j0($,P){try{let G0=await t($,P);Bz(P,{type:"response",id:$.id,name:$.name,payload:G0})}catch(G0){Bz(P,{type:"response",id:$.id,name:$.name,error:eB(G0)})}}function S0($){let P=$.buffer.indexOf(`
82
+ `);while(P!==-1){let G0=$.buffer.slice(0,P);if($.buffer=$.buffer.slice(P+1),G0.trim().length>0)try{let Z0=JSON.parse(G0);if(Z0.type!=="request")throw Error("daemon only accepts request frames from clients");j0(Z0,$)}catch(Z0){Bz($,{type:"response",id:"parse-error",error:{message:Z0 instanceof Error?Z0.message:String(Z0)}})}P=$.buffer.indexOf(`
83
+ `)}}return s}async function qG(J){try{let Y=await gR(J,"utf8"),Z=Number(Y.trim());return Number.isFinite(Z)?Z:null}catch{return null}}function Bz(J,Y){J.socket.write(wG(Y))}function m5(J,Y){let Z=Y.type==="event"&&Y.name!=="daemon.stopping"?Y.name:null,X=null;for(let G of J){if(!G.subscribed&&Y.type==="event")continue;if(Z&&G.channels&&!G.channels.has(Z))continue;X??=wG(Y),G.socket.write(X)}}var IR=21600000,v5=3000;var vf=S(()=>{jJ();H7();OV();mQ();fj();EV();uV();bX();wV();iZ();vV();T5();w5();mQ();fj()});import{unlink as d5}from"fs/promises";function bR(J){try{return process.kill(J,0),!0}catch(Y){return Y.code==="EPERM"}}async function BG(J,Y){let Z=await qG(Y),X=Z!==null&&Z!==process.pid?Z:null,G=X!==null&&bR(X),z=G?"graceful":"absent",f=new PJ(J),q=f.request("daemon.stop").catch(()=>{return}),B=new Promise((j)=>setTimeout(j,2000));if(await Promise.race([q,B]),f.close(),G&&X!==null){let j=Date.now()+5000,K=!1;while(Date.now()<j){try{process.kill(X,0)}catch{break}if(!K&&Date.now()-(j-5000)>2000){try{process.kill(X,"SIGTERM")}catch{}z="sigterm",K=!0}await new Promise((H)=>setTimeout(H,50))}try{process.kill(X,0),process.kill(X,"SIGKILL"),z="sigkill",await new Promise((H)=>setTimeout(H,100))}catch{}}return await d5(J).catch(()=>{}),await d5(Y).catch(()=>{}),{pid:Z,method:z}}var mf=S(()=>{hG();vf()});var hj={};q1(hj,{testDaemonResponds:()=>cf,ensureDaemonReachable:()=>jG,connectOrStartDaemon:()=>HY,connectIfRunning:()=>lJ});import{spawn as TR}from"child_process";import{closeSync as ER,existsSync as uR,mkdirSync as xR,openSync as wR}from"fs";import{dirname as n5,resolve as JH}from"path";import{fileURLToPath as hR}from"url";function mR(J,Y,Z,X){let G="ignore",z;try{xR(n5(X),{recursive:!0}),z=wR(X,"a"),G=["ignore",z,z]}catch{G="ignore"}if(TR(J,[...Y],{detached:!0,stdio:G,env:Z}).unref(),z!==void 0)try{ER(z)}catch{}}async function jG(){let J=AY();if(await cf(J))return J;await BG(J,PY()).catch(()=>{});let[Y,...Z]=cR(PR);mR(Y,Z,process.env,WQ());let X=Date.now()+5000;while(Date.now()<X){if(await cf(J))return J;await new Promise((G)=>setTimeout(G,100))}throw Error(`kobe: daemon did not start (or stayed wedged) at ${J}`)}async function HY(){let J=await jG(),Y=new PJ(J);return await Y.connect(),Y}async function lJ(){let J=AY();if(!await cf(J))return null;let Y=new PJ(J);return await Y.connect(),Y}async function cf(J,Y=vR){let Z=new PJ(J);try{await Z.connect()}catch{return Z.close(),!1}let X=Z.request("hello",{protocolVersion:hJ}).then(()=>!0).catch(()=>!0),G,z=new Promise((q)=>{G=setTimeout(()=>q(!1),Y)}),f=await Promise.race([X,z]);if(G)clearTimeout(G);return Z.close(),f}function cR(J){let Y=hR(import.meta.url);if(Y.startsWith("/$bunfs")||Y.startsWith("B:\\~BUN"))return[process.execPath,...J];let Z=n5(Y),X=[JH(Z,"../cli/index.ts"),JH(Z,"../../../kobe/src/cli/index.ts"),JH(Z,"../cli/index.js")],G=X.find((z)=>uR(z));if(G)return[process.execPath,G,...J];throw Error(`kobe: could not locate kobe entry near ${Z}; checked ${X.join(", ")}`)}var PR,vR=3000;var CJ=S(()=>{mf();bX();iZ();hG();PR=["daemon","start"]});var a5={};q1(a5,{runExportSubcommand:()=>aR,renderExport:()=>$5});function dR(J){return{id:J.id,title:J.title,status:J.status,archived:String(J.archived),vendor:J.vendor??k1,branch:J.branch,repo:J.repo,worktreePath:J.worktreePath}}function YH(J){process.stderr.write(`kobe export: ${J}
84
84
 
85
- ${IV}
86
- `),process.exit(2)}function UR(J){let Y="json";for(let Z=0;Z<J.length;Z++){let f=J[Z];if(f==="--json")Y="json";else if(f==="--csv")Y="csv";else if(f==="--format"){let X=J[++Z];if(X===void 0)lH("--format requires a value (json, csv, or table)");Y=kV(X)}else if(f.startsWith("--format="))Y=kV(f.slice(9));else lH(`unexpected argument "${f}"`)}return Y}function kV(J){if(J==="json"||J==="csv"||J==="table")return J;lH(`unknown format "${J}" (expected json, csv, or table)`)}function LR(J){if(/[",\r\n]/.test(J))return`"${J.replace(/"/g,'""')}"`;return J}function DR(J){let Y=[QG.join(",")];for(let Z of J)Y.push(QG.map((f)=>LR(Z[f])).join(","));return Y.join(`
87
- `)}function MR(J){let Y={};for(let X of QG)Y[X]=Math.max(X.length,...J.map((G)=>G[X].length));let Z=(X)=>QG.map((G)=>X[G].padEnd(Y[G])).join(" ").trimEnd(),f={};for(let X of QG)f[X]=X;return[Z(f),...J.map(Z)].join(`
88
- `)}function NV(J,Y){let Z=J.map(KR);if(Y==="json")return JSON.stringify(Z,null,2);if(Y==="csv")return DR(Z);return MR(Z)}async function FR(J){if(J.includes("--help")||J.includes("-h")||J.includes("help")){process.stdout.write(`${IV}
89
- `);return}let Y=UR(J),{TaskIndexStore:Z}=await Promise.resolve().then(() => (SX(),dq)),f=new Z;await f.load();let X=f.list();if(X.length===0&&Y==="table"){process.stdout.write(`no tasks
90
- `);return}process.stdout.write(`${NV(X,Y)}
91
- `)}var IV,QG;var TV=S(()=>{RJ();IV=["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
- `),QG=["id","title","status","archived","vendor","branch","repo","worktreePath"]});var xV={};Q1(xV,{runRepoSubcommand:()=>gR});import{readFileSync as OR}from"fs";import{resolve as wQ}from"path";function OZ(J){process.stderr.write(`kobe repo: ${J}
85
+ ${l5}
86
+ `),process.exit(2)}function nR(J){let Y="json";for(let Z=0;Z<J.length;Z++){let X=J[Z];if(X==="--json")Y="json";else if(X==="--csv")Y="csv";else if(X==="--format"){let G=J[++Z];if(G===void 0)YH("--format requires a value (json, csv, or table)");Y=i5(G)}else if(X.startsWith("--format="))Y=i5(X.slice(9));else YH(`unexpected argument "${X}"`)}return Y}function i5(J){if(J==="json"||J==="csv"||J==="table")return J;YH(`unknown format "${J}" (expected json, csv, or table)`)}function iR(J){if(/[",\r\n]/.test(J))return`"${J.replace(/"/g,'""')}"`;return J}function lR(J){let Y=[jz.join(",")];for(let Z of J)Y.push(jz.map((X)=>iR(Z[X])).join(","));return Y.join(`
87
+ `)}function $R(J){let Y={};for(let G of jz)Y[G]=Math.max(G.length,...J.map((z)=>z[G].length));let Z=(G)=>jz.map((z)=>G[z].padEnd(Y[z])).join(" ").trimEnd(),X={};for(let G of jz)X[G]=G;return[Z(X),...J.map(Z)].join(`
88
+ `)}function $5(J,Y){let Z=J.map(dR);if(Y==="json")return JSON.stringify(Z,null,2);if(Y==="csv")return lR(Z);return $R(Z)}async function aR(J){if(J.includes("--help")||J.includes("-h")||J.includes("help")){process.stdout.write(`${l5}
89
+ `);return}let Y=nR(J),{TaskIndexStore:Z}=await Promise.resolve().then(() => (IG(),aq)),X=new Z;await X.load();let G=X.list();if(G.length===0&&Y==="table"){process.stdout.write(`no tasks
90
+ `);return}process.stdout.write(`${$5(G,Y)}
91
+ `)}var l5,jz;var p5=S(()=>{SJ();l5=["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
+ `),jz=["id","title","status","archived","vendor","branch","repo","worktreePath"]});var o5={};q1(o5,{runRepoSubcommand:()=>oR});import{readFileSync as pR}from"fs";import{resolve as df}from"path";function gZ(J){process.stderr.write(`kobe repo: ${J}
93
93
 
94
- ${uV}
95
- `),process.exit(2)}function EV(J){try{return OR(wQ(process.cwd(),J),"utf8")}catch(Y){OZ(`cannot read ${J}: ${Y instanceof Error?Y.message:String(Y)}`)}}function AR(J){let Y={};for(let Z=0;Z<J.length;Z++){let f=J[Z],X=()=>{let G=J[++Z];if(G===void 0)OZ(`${f} requires a value`);return G};if(f==="--init-script")Y.initScript=X();else if(f==="--init-script-file")Y.initScript=EV(X());else if(f==="--init-prompt")Y.initPrompt=X();else if(f==="--init-prompt-file")Y.initPrompt=EV(X());else if(f.startsWith("-"))OZ(`unknown flag "${f}"`);else if(Y.path===void 0)Y.path=f;else OZ(`unexpected argument "${f}"`)}return Y}function RR(J){let Y,Z=!1,f=!1;for(let X of J)if(X==="--init-script")Z=!0;else if(X==="--init-prompt")f=!0;else if(X.startsWith("-"))OZ(`unknown flag "${X}"`);else if(Y===void 0)Y=X;else OZ(`unexpected argument "${X}"`);if(!Z&&!f)Z=!0,f=!0;return{path:Y,clearScript:Z,clearPrompt:f}}async function gR(J){let[Y,...Z]=J;if(Y===void 0||Y==="--help"||Y==="-h"||Y==="help"){process.stdout.write(`${uV}
96
- `);return}let{getRepoInitOverride:f,setRepoInitOverride:X,resolveRepoRoot:G}=await Promise.resolve().then(() => (A1(),tY)),{existsSync:Q}=await import("fs"),{join:q}=await import("path");if(Y==="show"){let[B]=Z.filter((L)=>!L.startsWith("-")),H=G(wQ(process.cwd(),B??".")),K=f(H),j=Q(q(H,".kobe","init.sh")),U=Q(q(H,".kobe","init-prompt.md"));console.log(`repo: ${H}`),console.log(` .kobe/init.sh: ${j?"present (wins)":"absent"}`),console.log(` .kobe/init-prompt.md: ${U?"present (wins)":"absent"}`),console.log(` override initScript: ${K.initScript?QX(K.initScript):"(unset)"}`),console.log(` override initPrompt: ${K.initPrompt?QX(K.initPrompt):"(unset)"}`);return}if(Y==="set"){let B=AR(Z);if(B.initScript===void 0&&B.initPrompt===void 0)OZ("set needs at least one of --init-script(-file) / --init-prompt(-file)");let H=G(wQ(process.cwd(),B.path??".")),K=X(H,{...B.initScript!==void 0?{initScript:B.initScript}:{},...B.initPrompt!==void 0?{initPrompt:B.initPrompt}:{}});console.log(`updated override for ${H}`),console.log(` initScript: ${K.initScript?QX(K.initScript):"(unset)"}`),console.log(` initPrompt: ${K.initPrompt?QX(K.initPrompt):"(unset)"}`);return}if(Y==="unset"){let{path:B,clearScript:H,clearPrompt:K}=RR(Z),j=G(wQ(process.cwd(),B??".")),U=X(j,{...H?{initScript:""}:{},...K?{initPrompt:""}:{}});console.log(`cleared override for ${j}`),console.log(` initScript: ${U.initScript?QX(U.initScript):"(unset)"}`),console.log(` initPrompt: ${U.initPrompt?QX(U.initPrompt):"(unset)"}`);return}OZ(`unknown verb "${Y}"`)}function QX(J){let Y=J.replace(/\s+/g," ").trim();return Y.length>60?`"${Y.slice(0,57)}\u2026"`:`"${Y}"`}var uV;var wV=S(()=>{uV=["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 CR}from"child_process";function kR(J){let[Y,Z]=J.split("/");if(!Y||!Z)throw Error(`invalid GitHub repository slug: ${J}`);return{owner:Y,name:Z}}function hV(J,Y){let Z=J.trim();if(!Z)throw Error(`${Y} is required`);return Z}function PV(J,Y){let Z=Y?.map((f)=>typeof f.message==="string"?f.message:null).filter((f)=>!!f);if(Z&&Z.length>0)return Z.join("; ");return J.trim()||"GitHub CLI returned an empty response"}function vV(J,Y,Z){let f=["api","graphql","-f",`query=${J}`];for(let[B,H]of Object.entries(Y))f.push("-f",`${B}=${H}`);let X=Z.spawn("gh",f,{encoding:"utf8"});if(X.error)throw Error(`failed to run gh: ${X.error.message}`);let G=typeof X.stdout==="string"?X.stdout:String(X.stdout??""),Q=typeof X.stderr==="string"?X.stderr:String(X.stderr??""),q;try{q=JSON.parse(G)}catch{throw Error(`failed to parse gh response: ${PV(Q,void 0)}`)}if((X.status??0)!==0||q.errors?.length)throw Error(PV(Q,q.errors));if(!q.data)throw Error("GitHub CLI response did not include data");return q.data}function IR(J){return`${J}
94
+ ${r5}
95
+ `),process.exit(2)}function _5(J){try{return pR(df(process.cwd(),J),"utf8")}catch(Y){gZ(`cannot read ${J}: ${Y instanceof Error?Y.message:String(Y)}`)}}function _R(J){let Y={};for(let Z=0;Z<J.length;Z++){let X=J[Z],G=()=>{let z=J[++Z];if(z===void 0)gZ(`${X} requires a value`);return z};if(X==="--init-script")Y.initScript=G();else if(X==="--init-script-file")Y.initScript=_5(G());else if(X==="--init-prompt")Y.initPrompt=G();else if(X==="--init-prompt-file")Y.initPrompt=_5(G());else if(X.startsWith("-"))gZ(`unknown flag "${X}"`);else if(Y.path===void 0)Y.path=X;else gZ(`unexpected argument "${X}"`)}return Y}function rR(J){let Y,Z=!1,X=!1;for(let G of J)if(G==="--init-script")Z=!0;else if(G==="--init-prompt")X=!0;else if(G.startsWith("-"))gZ(`unknown flag "${G}"`);else if(Y===void 0)Y=G;else gZ(`unexpected argument "${G}"`);if(!Z&&!X)Z=!0,X=!0;return{path:Y,clearScript:Z,clearPrompt:X}}async function oR(J){let[Y,...Z]=J;if(Y===void 0||Y==="--help"||Y==="-h"||Y==="help"){process.stdout.write(`${r5}
96
+ `);return}let{getRepoInitOverride:X,setRepoInitOverride:G,resolveRepoRoot:z}=await Promise.resolve().then(() => (O1(),JZ)),{existsSync:f}=await import("fs"),{join:q}=await import("path");if(Y==="show"){let[B]=Z.filter((L)=>!L.startsWith("-")),j=z(df(process.cwd(),B??".")),K=X(j),H=f(q(j,".kobe","init.sh")),U=f(q(j,".kobe","init-prompt.md"));console.log(`repo: ${j}`),console.log(` .kobe/init.sh: ${H?"present (wins)":"absent"}`),console.log(` .kobe/init-prompt.md: ${U?"present (wins)":"absent"}`),console.log(` override initScript: ${K.initScript?HG(K.initScript):"(unset)"}`),console.log(` override initPrompt: ${K.initPrompt?HG(K.initPrompt):"(unset)"}`);return}if(Y==="set"){let B=_R(Z);if(B.initScript===void 0&&B.initPrompt===void 0)gZ("set needs at least one of --init-script(-file) / --init-prompt(-file)");let j=z(df(process.cwd(),B.path??".")),K=G(j,{...B.initScript!==void 0?{initScript:B.initScript}:{},...B.initPrompt!==void 0?{initPrompt:B.initPrompt}:{}});console.log(`updated override for ${j}`),console.log(` initScript: ${K.initScript?HG(K.initScript):"(unset)"}`),console.log(` initPrompt: ${K.initPrompt?HG(K.initPrompt):"(unset)"}`);return}if(Y==="unset"){let{path:B,clearScript:j,clearPrompt:K}=rR(Z),H=z(df(process.cwd(),B??".")),U=G(H,{...j?{initScript:""}:{},...K?{initPrompt:""}:{}});console.log(`cleared override for ${H}`),console.log(` initScript: ${U.initScript?HG(U.initScript):"(unset)"}`),console.log(` initPrompt: ${U.initPrompt?HG(U.initPrompt):"(unset)"}`);return}gZ(`unknown verb "${Y}"`)}function HG(J){let Y=J.replace(/\s+/g," ").trim();return Y.length>60?`"${Y.slice(0,57)}\u2026"`:`"${Y}"`}var r5;var s5=S(()=>{r5=["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 sR}from"child_process";function JC(J){let[Y,Z]=J.split("/");if(!Y||!Z)throw Error(`invalid GitHub repository slug: ${J}`);return{owner:Y,name:Z}}function t5(J,Y){let Z=J.trim();if(!Z)throw Error(`${Y} is required`);return Z}function e5(J,Y){let Z=Y?.map((X)=>typeof X.message==="string"?X.message:null).filter((X)=>!!X);if(Z&&Z.length>0)return Z.join("; ");return J.trim()||"GitHub CLI returned an empty response"}function J6(J,Y,Z){let X=["api","graphql","-f",`query=${J}`];for(let[B,j]of Object.entries(Y))X.push("-f",`${B}=${j}`);let G=Z.spawn("gh",X,{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??""),f=typeof G.stderr==="string"?G.stderr:String(G.stderr??""),q;try{q=JSON.parse(z)}catch{throw Error(`failed to parse gh response: ${e5(f,void 0)}`)}if((G.status??0)!==0||q.errors?.length)throw Error(e5(f,q.errors));if(!q.data)throw Error("GitHub CLI response did not include data");return q.data}function YC(J){return`${J}
98
98
 
99
99
  ---
100
- Submitted from kobe ${n0}.`}function qX(J,Y={}){let Z=hV(J.title,"feedback title"),f=IR(hV(J.body,"feedback body")),X=(Y.repoSlug??uZ)();if(!X)throw Error("package repository is not a GitHub repository");let{owner:G,name:Q}=kR(X),q=J.categorySlug?.trim()||$H,B={spawn:Y.spawn??CR},K=vV(SR,{owner:G,name:Q},B).repository,j=K?.id;if(!j)throw Error(`GitHub repository not found: ${X}`);let U=K.discussionCategories?.nodes?.find((D)=>D.slug===q);if(!U)throw Error(`GitHub Discussion category not found: ${q}`);let F=vV(yR,{repositoryId:j,categoryId:U.id,title:Z,body:f},B).createDiscussion?.discussion;if(!F?.url||typeof F.number!=="number")throw Error("GitHub did not return the created Discussion");return{number:F.number,url:F.url}}var $H="feedback",SR=`
100
+ Submitted from kobe ${i0}.`}function WG(J,Y={}){let Z=t5(J.title,"feedback title"),X=YC(t5(J.body,"feedback body")),G=(Y.repoSlug??PZ)();if(!G)throw Error("package repository is not a GitHub repository");let{owner:z,name:f}=JC(G),q=J.categorySlug?.trim()||ZH,B={spawn:Y.spawn??sR},K=J6(tR,{owner:z,name:f},B).repository,H=K?.id;if(!H)throw Error(`GitHub repository not found: ${G}`);let U=K.discussionCategories?.nodes?.find((D)=>D.slug===q);if(!U)throw Error(`GitHub Discussion category not found: ${q}`);let F=J6(eR,{repositoryId:H,categoryId:U.id,title:Z,body:X},B).createDiscussion?.discussion;if(!F?.url||typeof F.number!=="number")throw Error("GitHub did not return the created Discussion");return{number:F.number,url:F.url}}var ZH="feedback",tR=`
101
101
  query($owner: String!, $name: String!) {
102
102
  repository(owner: $owner, name: $name) {
103
103
  id
@@ -110,7 +110,7 @@ query($owner: String!, $name: String!) {
110
110
  }
111
111
  }
112
112
  }
113
- `,yR=`
113
+ `,eR=`
114
114
  mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!) {
115
115
  createDiscussion(input: {
116
116
  repositoryId: $repositoryId,
@@ -124,74 +124,74 @@ mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!)
124
124
  }
125
125
  }
126
126
  }
127
- `;var hQ=S(()=>{QJ()});async function mV(J={}){let Y=J.mode==="require-running"?await dJ():await fY();if(!Y)return null;return{client:Y,close:()=>Y.close()}}var cV=S(()=>{DJ()});var sV={};Q1(sV,{verbSchema:()=>oH,verbHelp:()=>_V,validateAgainstSpec:()=>_H,schemaIndex:()=>aV,runApiSubcommand:()=>eR,parseFlags:()=>pH,parseAgentsSpec:()=>lV,invokeVerb:()=>tR,fullSchema:()=>pV,findVerb:()=>qG,deliverPrompt:()=>rV,defaultApiRuntime:()=>sH,apiUsage:()=>PQ,VerbArgs:()=>rH,VERB_GROUPS:()=>HX,VERBS:()=>jX,FANOUT_CAP:()=>BX,ApiError:()=>V1,API_VERBS:()=>TR,API_SCHEMA_VERSION:()=>aH});import{resolve as dV}from"path";function iV(J){for(let[Y,Z]of Object.entries(HX))if(Z.includes(J))return Y;return"other"}async function bR(J){let Y=J.args.str("verb");if(Y){let f=qG(Y);if(!f)throw new V1(`unknown verb: ${Y}`,"BAD_VERB");return oH(f)}let Z=J.args.str("group");if(Z)return uR(Z);if(J.args.bool("all"))return pV();return aV()}function qG(J){let Y=vQ[J]??J;return jX.find((Z)=>Z.name===Y)}function pH(J,Y=new Set){let Z=new Map,f=!1,X=!1;for(let G=0;G<J.length;G++){let Q=J[G];if(!Q.startsWith("--")&&Q!=="-h")throw new V1(`unexpected positional arg: ${Q}`,"BAD_FLAG");if(Q==="-h"){X=!0;continue}let q=Q.indexOf("=");if(q!==-1){let K=Q.slice(2,q),j=Q.slice(q+1);if(K==="pretty")f=j!=="false"&&j!=="0";else if(K==="help")X=j!=="false"&&j!=="0";else Z.set(K,j);continue}let B=Q.slice(2);if(B==="pretty"){f=!0;continue}if(B==="help"){X=!0;continue}if(Y.has(B)){Z.set(B,"true");continue}let H=J[G+1];if(H===void 0||H.startsWith("--"))throw new V1(`flag --${B} requires a value`,"BAD_FLAG");Z.set(B,H),G+=1}return{flags:Z,pretty:f,help:X}}function _H(J,Y){let Z=new Set(J.flags.map((f)=>f.name));for(let f of Y.keys())if(!Z.has(f))throw new V1(`unknown flag --${f} for "${J.name}". Run \`kobe api ${J.name} --help\``,"BAD_FLAG");for(let f of J.flags){if(f.required&&!Y.get(f.name))throw new V1(`--${f.name} is required for "${J.name}"`,"MISSING_FLAG");if(f.type==="enum"&&f.values){let X=Y.get(f.name);if(X!==void 0&&!f.values.includes(X))throw new V1(`--${f.name} must be one of ${f.values.join(", ")}`,"BAD_FLAG")}if(f.type==="int"){let X=Y.get(f.name);if(X!==void 0){let G=Number.parseInt(X,10);if(!Number.isInteger(G)||G<=0)throw new V1(`--${f.name} must be a positive integer`,"BAD_FLAG")}}}}class rH{verb;flags;constructor(J,Y){this.verb=J;this.flags=Y}spec(J){let Y=this.verb.flags.find((Z)=>Z.name===J);if(!Y)throw Error(`internal: --${J} is not declared on verb "${this.verb.name}"`);return Y}str(J){this.spec(J);let Y=this.flags.get(J);return Y&&Y.length>0?Y:void 0}require(J){let Y=this.str(J);if(Y===void 0)throw new V1(`--${J} is required`,"MISSING_FLAG");return Y}enumOf(J){let Y=this.spec(J),Z=this.str(J);if(Z===void 0)return;if(Y.values&&!Y.values.includes(Z))throw new V1(`--${J} must be one of ${Y.values.join(", ")}`,"BAD_FLAG");return Z}requireEnum(J){return this.require(J),this.enumOf(J)}vendor(){return this.enumOf("vendor")}bool(J){this.spec(J);let Y=this.str(J);if(Y===void 0)return;if(["true","1","yes"].includes(Y))return!0;if(["false","0","no"].includes(Y))return!1;throw new V1(`--${J} must be a boolean (true/false)`,"BAD_FLAG")}int(J){this.spec(J);let Y=this.str(J);if(Y===void 0)return;let Z=Number.parseInt(Y,10);if(!Number.isInteger(Z)||Z<=0)throw new V1(`--${J} must be a positive integer`,"BAD_FLAG");return Z}path(J){let Y=this.str(J);return Y===void 0?void 0:dV(process.cwd(),Y)}requirePath(J){return dV(process.cwd(),this.require(J))}}function lV(J){let Y=[];for(let Z of J.split(",")){let f=Z.trim();if(!f)continue;let X=f.indexOf(":");if(X===-1)throw new V1(`--agents entry "${f}" must be vendor:count`,"BAD_FLAG");let G=f.slice(0,X);if(!h1.includes(G))throw new V1(`--agents vendor "${G}" must be one of ${h1.join(", ")}`,"BAD_FLAG");let Q=Number.parseInt(f.slice(X+1),10);if(!Number.isInteger(Q)||Q<=0)throw new V1(`--agents count for "${G}" must be a positive integer`,"BAD_FLAG");if(Y.length+Q>BX)throw new V1(`--agents requests ${Y.length+Q} agents, exceeds the cap of ${BX}`,"BAD_FLAG");for(let q=0;q<Q;q++)Y.push(G)}if(Y.length===0)throw new V1('--agents specified no agents (e.g. "claude:2,codex:1")',"BAD_FLAG");return Y}function ER(J){return{name:J.name,type:J.type,required:J.required??!1,...J.values?{values:J.values}:{},...J.default!==void 0?{default:J.default}:{},...J.placeholder?{placeholder:J.placeholder}:{},description:J.description}}function oH(J){return{name:J.name,group:iV(J.name),summary:J.summary,offline:J.offline??!1,flags:J.flags.map(ER)}}function aV(){return{apiVersion:aH,kobeVersion:n0,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:HX,verbs:jX.map((J)=>({name:J.name,group:iV(J.name),summary:J.summary})),globalFlags:$V,aliases:vQ}}function uR(J){let Y=HX[J];if(!Y)throw new V1(`unknown group: ${J}. Groups: ${Object.keys(HX).join(", ")}`,"BAD_FLAG");return{group:J,verbs:Y.map((Z)=>{let f=qG(Z);return{name:Z,summary:f?.summary??""}})}}function pV(){return{apiVersion:aH,kobeVersion:n0,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:$V,aliases:vQ,groups:HX,verbs:jX.map(oH)}}function xR(J){return J.flags.map((Y)=>{let Z=Y.type==="enum"&&Y.values?Y.values.join("|"):Y.placeholder??(Y.type==="bool"?"":"X"),f=Z?`--${Y.name} ${Z}`:`--${Y.name}`;return Y.required?f:`[${f}]`}).join(" ")}function _V(J){let Y=[`kobe api ${J.name} ${xR(J)}`.trimEnd(),"",J.summary,""],Z=Object.entries(vQ).find(([,f])=>f===J.name)?.[0];if(Z)Y.push(`Alias: ${Z}`,"");if(J.flags.length>0){Y.push("Flags:");for(let f of J.flags){let X=f.required?" (required)":"",G=f.default!==void 0?` [default: ${f.default}]`:"",Q=f.type==="enum"&&f.values?` {${f.values.join("|")}}`:"";Y.push(` --${f.name}${Q}${X}${G} ${f.description}`)}Y.push("")}return Y.push("Global: [--pretty] [--help]"),Y.join(`
128
- `)}function PQ(){return["usage: kobe api <verb> [flags] [--pretty] [--help]","","Explore the full surface (names, flags, types) with: kobe api schema","","verbs:",...jX.map((Y)=>` ${Y.name.padEnd(18)} ${Y.summary}`),"","Output is one JSON object on stdout (exit 0); errors are JSON on stderr (exit != 0)."].join(`
129
- `)}function wR(J,Y){let Z=Y?JSON.stringify(J,null,2):JSON.stringify(J);process.stdout.write(`${Z}
130
- `)}function $Y(J,Y,Z=1){process.stderr.write(`${JSON.stringify({error:{message:J,code:Y}})}
131
- `),process.exit(Z)}async function rV(J,Y,Z,f=hR){let X=Y.worktreePath;if(!X)X=(await J.request("task.ensureWorktree",{taskId:Y.id})).worktreePath;if(!X)throw new V1(`task ${Y.id} has no worktree`,"NO_WORKTREE");let G=K1(Y.id),Q=await f.sessionExists(G);if(!Q){let H=await f.resolveEngineLaunchInit(Y.repo??"",X,{kind:"none"});if(!await f.ensureSession({name:G,cwd:X,command:f.engineCommand(Y.vendor),taskId:Y.id,vendor:Y.vendor,repo:Y.repo,launchInit:H}))throw new V1(`failed to start tmux session for ${Y.id}`,"SESSION_FAILED")}let{pane:q,ready:B}=await f.waitForEnginePane(G,!Q);if(!q)throw new V1(`no engine pane in session ${G}`,"NO_ENGINE_PANE");return await f.pasteAndSubmit(q,Z),{session:G,pane:q,started:!Q,engineReady:B}}async function PR(J){let Y=null,Z=J.onChannel("active-task",(f)=>{Y=f.taskId});try{await J.subscribe()}finally{Z()}return Y}function NJ(J){if(!J.client)throw new V1("daemon required","BAD_DAEMON");return J.client}async function XY(J,Y,Z){return NJ(J).request(Y,Z)}async function vR(J){let Y=J.args.str("title"),Z=J.args.str("body");if(Y===void 0&&Z===void 0)throw new V1("issue-update requires --title and/or --body","MISSING_FLAG");return XY(J,"issue.mutate",{repoRoot:J.args.requirePath("repo"),op:{type:"update",id:J.args.int("id"),title:Y,body:Z}})}async function mR(J){let Y=NJ(J),{args:Z,runtime:f}=J,G={repo:await f.resolveRepoRoot(Z.requirePath("repo"))},Q=Z.str("title");if(Q)G.title=Q;let q=Z.str("branch");if(q)G.branch=q;let B=Z.str("base-branch");if(B)G.baseRef=B;let H=Z.vendor()??await f.defaultVendor();if(H)G.vendor=H;let K=await Y.request("task.create",G),j=K.taskId;await Y.request("task.setActive",{taskId:j});let U=Z.enumOf("status");if(U)await Y.request("task.status",{taskId:j,status:U});let L=Z.bool("pin");if(L!==void 0)await Y.request("task.pin",{taskId:j,pinned:L});let F=K.task;if(U||L!==void 0)F=(await Y.request("task.get",{taskId:j})).task;let D=Z.str("prompt");if(!D)return{taskId:j,task:F,started:!1};let O=await J.runtime.deliverPrompt(Y,{id:j,worktreePath:F.worktreePath,vendor:F.vendor,repo:F.repo},D);return F=(await Y.request("task.get",{taskId:j})).task,{taskId:j,task:F,started:O.started,engineReady:O.engineReady,session:O.session}}async function cR(J){let Y=NJ(J),Z=J.args.require("prompt"),f=J.args.str("task-id");if(!f){let Q=await PR(Y);if(!Q)throw new V1("no --task-id given and no active task \u2014 open a task first or pass --task-id","MISSING_TARGET");f=Q}let X=await Y.request("task.get",{taskId:f}),G=await J.runtime.deliverPrompt(Y,{id:f,worktreePath:X.task.worktreePath,vendor:X.task.vendor,repo:X.task.repo},Z);return{ok:!0,taskId:f,session:G.session,started:G.started,engineReady:G.engineReady}}async function dR(J){let Y=NJ(J),Z=J.args.require("task-id"),f=J.args.require("prompt");return await Y.request("session.deliver",{taskId:Z,text:f,source:"dispatcher"}),{ok:!0,taskId:Z,routed:"session.deliver"}}async function nR(J){let Y=NJ(J),Z=J.args.require("task-id"),f=J.args.require("text");return await Y.request("note.file",{taskId:Z,text:f})}async function iR(J){let Y=NJ(J),Z=J.args.require("task-id"),f=await Y.request("task.get",{taskId:Z}),X=await J.runtime.isTaskRunning(Z);return{task:f.task,running:X}}async function lR(J){return NJ(J).request("task.list")}async function $R(J){let Y=NJ(J),f=J.args.bool("none")?null:J.args.require("task-id");return await Y.request("task.setActive",{taskId:f}),{ok:!0,activeTaskId:f}}async function aR(J){let Y=NJ(J),Z=J.args.require("task-id"),f=J.args.bool("archived")??!0,X=await Y.request("task.archive",{taskId:Z,archived:f});if(f)await J.runtime.tearDownSession(Z);return X}async function pR(J){let Y=NJ(J),Z=J.args.require("task-id"),f=J.args.bool("force")??!1,X=await Y.request("task.delete",{taskId:Z,force:f});return await J.runtime.tearDownSession(Z),X}async function _R(J){let Y=NJ(J),{args:Z}=J,f={repo:Z.requirePath("repo"),worktreePath:Z.requirePath("worktree")},X=Z.str("branch");if(X)f.branch=X;let G=Z.vendor();if(G)f.vendor=G;let Q=Z.str("title");if(Q)f.title=Q;return Y.request("worktree.adopt",f)}async function rR(J){let Y=NJ(J),{args:Z,runtime:f}=J,X=await f.resolveRepoRoot(Z.requirePath("repo")),G=Z.require("prompt"),Q=Z.str("title"),q=Z.str("base-branch"),B=Z.str("agents"),H=await f.defaultVendor(),K=B?lV(B):Array(Z.int("count")??1).fill(Z.vendor()??H??"claude");if(K.length>BX)throw new V1(`fan-out of ${K.length} exceeds the cap of ${BX} \u2014 spawn in batches`,"BAD_FLAG");let j=[];for(let U of K){let L={repo:X,vendor:U};if(Q)L.title=Q;if(q)L.baseRef=q;let F=await Y.request("task.create",L),D=await J.runtime.deliverPrompt(Y,{id:F.taskId,worktreePath:F.task.worktreePath,vendor:U,repo:F.task.repo},G);j.push({taskId:F.taskId,vendor:U,started:D.started,engineReady:D.engineReady,session:D.session})}return{count:j.length,tasks:j}}async function oR(J){let Y=NJ(J),{args:Z,runtime:f}=J,X=Z.str("task-ids"),G=Z.path("repo"),Q;if(X)Q=X.split(",").map((B)=>B.trim()).filter(Boolean);else if(G){let B=await f.resolveRepoRoot(G),{tasks:H}=await Y.request("task.list");Q=[];for(let K of H){if(K.archived)continue;if(await f.resolveRepoRoot(K.repo)===B)Q.push(K.id)}}else throw new V1("collect needs --task-ids id1,id2 or --repo PATH","MISSING_TARGET");let q=[];for(let B of Q){let{task:H}=await Y.request("task.get",{taskId:B}),K=await f.isTaskRunning(B),j=H.worktreePath?await f.readWorktreeChanges(H.worktreePath):{added:0,deleted:0};q.push({taskId:H.id,title:H.title,branch:H.branch,worktreePath:H.worktreePath,vendor:H.vendor,status:H.status,running:K,changes:j})}return{tasks:q}}async function sR(J){return{ok:!0,discussion:qX({title:J.args.require("title"),body:J.args.require("body"),categorySlug:J.args.str("category")})}}function oV(J,Y,Z,f){return{args:new rH(J,Y),client:Z,runtime:f}}async function tR(J,Y,Z){let f=qG(J);if(!f)throw new V1(`unknown verb: ${J}`,"BAD_VERB");let X=new Set(f.flags.filter((Q)=>Q.type==="bool").map((Q)=>Q.name)),G=pH(Y,X);return _H(f,G.flags),f.handler(oV(f,G.flags,Z.client,Z.runtime??sH))}async function eR(J){let[Y,...Z]=J;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(!Y)$Y(PQ(),"MISSING_VERB",2);process.stdout.write(`${PQ()}
132
- `);return}let f=qG(Y);if(!f)$Y(`unknown verb: ${Y}
133
- ${PQ()}`,"BAD_VERB",2);let X=new Set(f.flags.filter((q)=>q.type==="bool").map((q)=>q.name)),G;try{G=pH(Z,X)}catch(q){if(q instanceof V1)$Y(q.message,q.code,2);$Y(q instanceof Error?q.message:String(q),"BAD_FLAG",2)}if(G.help){process.stdout.write(`${_V(f)}
134
- `);return}try{_H(f,G.flags)}catch(q){if(q instanceof V1)$Y(q.message,q.code,2);$Y(q instanceof Error?q.message:String(q),"BAD_FLAG",2)}let Q=null;if(!f.offline)try{Q=await mV()}catch(q){$Y(`could not reach or start the kobe daemon: ${q instanceof Error?q.message:String(q)}`,"BAD_DAEMON",2)}try{let q=await f.handler(oV(f,G.flags,Q?.client??null,sH));wR(q,G.pretty)}catch(q){if(q instanceof V1)$Y(q.message,q.code,1);$Y(q instanceof Error?q.message:String(q),"RPC_ERROR",1)}finally{Q?.close()}}var aH=2,BX=10,nV,NR,V1,B1,vQ,HX,jX,TR,$V,hR,sH;var tV=S(()=>{kJ();hQ();N1();zQ();zJ();QJ();cV();nV=["backlog","in_progress","in_review","done","canceled","error"],NR=["open","doing","hold","done"];V1=class V1 extends Error{code;constructor(J,Y){super(J);this.code=Y}};B1={repo:(J=!0)=>({name:"repo",type:"string",required:J,placeholder:"PATH",description:"Repo root (git toplevel). Relative paths resolve against $PWD."}),taskId:(J=!0)=>({name:"task-id",type:"string",required:J,placeholder:"ID",description:"Target task id (from `list` / `add`)."}),vendor:()=>({name:"vendor",type:"enum",values:h1,placeholder:"V",description:"Engine vendor for the task."}),title:()=>({name:"title",type:"string",placeholder:"T",description:"Human task title."}),prompt:(J,Y)=>({name:"prompt",type:"string",required:J,placeholder:"TEXT",description:Y})},vQ={"spawn-task":"add"},HX={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"]};jX=[{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:bR},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:lR},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[B1.taskId()],handler:iR},{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:[B1.repo(),B1.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."},B1.vendor(),{name:"status",type:"enum",values:nV,default:"backlog",description:"Initial lifecycle status."},{name:"pin",type:"bool",description:"Pin the task to the top of the sidebar."},B1.prompt(!1,"Optional first message \u2014 when set, materializes the worktree, starts the engine, and pastes it.")],handler:mR},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${BX}.`,flags:[B1.repo(),B1.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)."},B1.vendor(),B1.title(),{name:"base-branch",type:"string",placeholder:"B",description:"Base ref for every worktree."}],handler:rR},{name:"send",summary:"Paste a follow-up prompt into a task's running engine (one full turn). Defaults to the active task.",flags:[B1.taskId(!1),B1.prompt(!0,"Text pasted + submitted into the engine pane.")],handler:cR},{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:[B1.taskId(!0),B1.prompt(!0,"Text delivered into the task's engine session.")],handler:dR},{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:[B1.taskId(!0),{name:"text",type:"string",required:!0,placeholder:"TEXT",description:"One line: the verified conclusion another session could act on."}],handler:nR},{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:$H,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:sR},{name:"issue-list",summary:"List daemon-owned issues for a repo.",flags:[B1.repo()],handler:(J)=>XY(J,"issue.list",{repoRoot:J.args.requirePath("repo")})},{name:"issue-create",summary:"Create a daemon-owned issue for a repo.",flags:[B1.repo(),{name:"title",type:"string",required:!0,placeholder:"T",description:"Issue title."},{name:"body",type:"string",placeholder:"TEXT",description:"Issue body."}],handler:(J)=>XY(J,"issue.mutate",{repoRoot:J.args.requirePath("repo"),op:{type:"create",title:J.args.require("title"),body:J.args.str("body")}})},{name:"issue-set-status",summary:"Set a daemon-owned issue's status.",flags:[B1.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"status",type:"enum",required:!0,values:NR,description:"New issue status."}],handler:(J)=>XY(J,"issue.mutate",{repoRoot:J.args.requirePath("repo"),op:{type:"setStatus",id:J.args.int("id"),status:J.args.requireEnum("status")}})},{name:"issue-update",summary:"Update a daemon-owned issue's title and/or body.",flags:[B1.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:vR},{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."},B1.repo(!1)],handler:oR},{name:"rename",summary:"Set a task's title.",flags:[B1.taskId(),{name:"title",type:"string",required:!0,placeholder:"T",description:"New title."}],handler:(J)=>XY(J,"task.rename",{taskId:J.args.require("task-id"),title:J.args.require("title")})},{name:"set-branch",summary:"Rename a task's branch (git branch -m if materialized, else recorded).",flags:[B1.taskId(),{name:"branch",type:"string",required:!0,placeholder:"B",description:"New branch name."}],handler:(J)=>XY(J,"task.setBranch",{taskId:J.args.require("task-id"),branch:J.args.require("branch")})},{name:"set-vendor",summary:"Change a task's engine vendor (takes effect on next session rebuild).",flags:[B1.taskId(),{...B1.vendor(),required:!0}],handler:(J)=>XY(J,"task.setVendor",{taskId:J.args.require("task-id"),vendor:J.args.requireEnum("vendor")})},{name:"set-status",summary:"Set a task's lifecycle status.",flags:[B1.taskId(),{name:"status",type:"enum",required:!0,values:nV,description:"New status."}],handler:(J)=>XY(J,"task.status",{taskId:J.args.require("task-id"),status:J.args.requireEnum("status")})},{name:"archive",summary:"Archive (or with --archived=false, unarchive) a task. Non-destructive: worktree/branch/history stay.",flags:[B1.taskId(),{name:"archived",type:"bool",default:"true",description:"true to archive, false to unarchive."}],handler:aR},{name:"pin",summary:"Pin (or with --pinned=false, unpin) a task to the top of the sidebar.",flags:[B1.taskId(),{name:"pinned",type:"bool",default:"true",description:"true to pin, false to unpin."}],handler:(J)=>XY(J,"task.pin",{taskId:J.args.require("task-id"),pinned:J.args.bool("pinned")??!0})},{name:"set-active",summary:"Set the shared active task (the focus every Tasks pane highlights). Pass --none to clear.",flags:[B1.taskId(!1),{name:"none",type:"bool",description:"Clear the active task instead of setting one."}],handler:$R},{name:"ensure-worktree",summary:"Materialize a task's git worktree on disk now (without starting an engine). Returns { worktreePath }.",flags:[B1.taskId()],handler:(J)=>XY(J,"task.ensureWorktree",{taskId:J.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:[B1.taskId(),{name:"force",type:"bool",description:"Delete even with uncommitted changes."}],handler:pR},{name:"discover-adoptable",summary:"List existing git worktrees in a repo not yet tracked as kobe tasks. Returns { worktrees }.",flags:[B1.repo()],handler:(J)=>XY(J,"worktree.discoverAdoptable",{repo:J.args.requirePath("repo")})},{name:"adopt",summary:"Import an existing git worktree as a kobe task. Returns { task }.",flags:[B1.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)."},B1.vendor(),B1.title()],handler:_R}],TR=jX.map((J)=>J.name);$V=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];hR={sessionExists:X1,ensureSession:async(J)=>(await Promise.resolve().then(() => (ZJ(),ZY))).ensureSession(J),waitForEnginePane:tX,pasteAndSubmit:eX,resolveEngineLaunchInit:async(J,Y,Z)=>(await Promise.resolve().then(() => (rf(),UH))).resolveEngineLaunchInit(J,Y,Z),engineCommand:LJ};sH={isTaskRunning:(J)=>X1(K1(J)),deliverPrompt:(J,Y,Z)=>rV(J,Y,Z),resolveRepoRoot:async(J)=>(await Promise.resolve().then(() => (A1(),tY))).resolveMainRepoRoot(J),defaultVendor:async()=>{let{getPersistedString:J}=await Promise.resolve().then(() => (A1(),tY)),Y=J("lastSelectedVendor")?.trim();return Y?Y:void 0},readWorktreeChanges:async(J)=>(await Promise.resolve().then(() => (fX(),LV))).readWorktreeChanges(J),tearDownSession:async(J)=>{let Y=K1(J);await MY(Y).catch(()=>{}),await vJ(Y).catch(()=>{})}}});var Z6={};Q1(Z6,{updatePlan:()=>eV,runUpdateSubcommand:()=>Yg,parseUpdateArgs:()=>J6});import{spawnSync as Jg}from"child_process";function eV(){return{command:"sh",args:["-c",kY],display:kY}}function J6(J){let Y=!1;for(let Z=0;Z<J.length;Z+=1){let f=J[Z];if(f==="--help"||f==="-h"||f==="help")return{help:!0,dryRun:Y};if(f==="--dry-run"){Y=!0;continue}process.stderr.write(`kobe update: unknown argument "${f}"
127
+ `;var nf=S(()=>{jJ()});async function Y6(J={}){let Y=J.mode==="require-running"?await lJ():await HY();if(!Y)return null;return{client:Y,close:()=>Y.close()}}var Z6=S(()=>{CJ()});var V6={};q1(V6,{verbSchema:()=>fH,verbHelp:()=>j6,validateAgainstSpec:()=>zH,schemaIndex:()=>q6,runApiSubcommand:()=>SC,parseFlags:()=>GH,parseAgentsSpec:()=>Q6,invokeVerb:()=>yC,fullSchema:()=>B6,findVerb:()=>Hz,deliverPrompt:()=>H6,defaultApiRuntime:()=>qH,apiUsage:()=>lf,VerbArgs:()=>QH,VERB_GROUPS:()=>KG,VERBS:()=>UG,FANOUT_CAP:()=>VG,ApiError:()=>U1,API_VERBS:()=>GC,API_SCHEMA_VERSION:()=>XH});import{resolve as X6}from"path";function z6(J){for(let[Y,Z]of Object.entries(KG))if(Z.includes(J))return Y;return"other"}async function XC(J){let Y=J.args.str("verb");if(Y){let X=Hz(Y);if(!X)throw new U1(`unknown verb: ${Y}`,"BAD_VERB");return fH(X)}let Z=J.args.str("group");if(Z)return QC(Z);if(J.args.bool("all"))return B6();return q6()}function Hz(J){let Y=$f[J]??J;return UG.find((Z)=>Z.name===Y)}function GH(J,Y=new Set){let Z=new Map,X=!1,G=!1;for(let z=0;z<J.length;z++){let f=J[z];if(!f.startsWith("--")&&f!=="-h")throw new U1(`unexpected positional arg: ${f}`,"BAD_FLAG");if(f==="-h"){G=!0;continue}let q=f.indexOf("=");if(q!==-1){let K=f.slice(2,q),H=f.slice(q+1);if(K==="pretty")X=H!=="false"&&H!=="0";else if(K==="help")G=H!=="false"&&H!=="0";else Z.set(K,H);continue}let B=f.slice(2);if(B==="pretty"){X=!0;continue}if(B==="help"){G=!0;continue}if(Y.has(B)){Z.set(B,"true");continue}let j=J[z+1];if(j===void 0||j.startsWith("--"))throw new U1(`flag --${B} requires a value`,"BAD_FLAG");Z.set(B,j),z+=1}return{flags:Z,pretty:X,help:G}}function zH(J,Y){let Z=new Set(J.flags.map((X)=>X.name));for(let X of Y.keys())if(!Z.has(X))throw new U1(`unknown flag --${X} for "${J.name}". Run \`kobe api ${J.name} --help\``,"BAD_FLAG");for(let X of J.flags){if(X.required&&!Y.get(X.name))throw new U1(`--${X.name} is required for "${J.name}"`,"MISSING_FLAG");if(X.type==="enum"&&X.values){let G=Y.get(X.name);if(G!==void 0&&!X.values.includes(G))throw new U1(`--${X.name} must be one of ${X.values.join(", ")}`,"BAD_FLAG")}if(X.type==="int"){let G=Y.get(X.name);if(G!==void 0){let z=Number.parseInt(G,10);if(!Number.isInteger(z)||z<=0)throw new U1(`--${X.name} must be a positive integer`,"BAD_FLAG")}}}}class QH{verb;flags;constructor(J,Y){this.verb=J;this.flags=Y}spec(J){let Y=this.verb.flags.find((Z)=>Z.name===J);if(!Y)throw Error(`internal: --${J} is not declared on verb "${this.verb.name}"`);return Y}str(J){this.spec(J);let Y=this.flags.get(J);return Y&&Y.length>0?Y:void 0}require(J){let Y=this.str(J);if(Y===void 0)throw new U1(`--${J} is required`,"MISSING_FLAG");return Y}enumOf(J){let Y=this.spec(J),Z=this.str(J);if(Z===void 0)return;if(Y.values&&!Y.values.includes(Z))throw new U1(`--${J} must be one of ${Y.values.join(", ")}`,"BAD_FLAG");return Z}requireEnum(J){return this.require(J),this.enumOf(J)}vendor(){return this.enumOf("vendor")}bool(J){this.spec(J);let Y=this.str(J);if(Y===void 0)return;if(["true","1","yes"].includes(Y))return!0;if(["false","0","no"].includes(Y))return!1;throw new U1(`--${J} must be a boolean (true/false)`,"BAD_FLAG")}int(J){this.spec(J);let Y=this.str(J);if(Y===void 0)return;let Z=Number.parseInt(Y,10);if(!Number.isInteger(Z)||Z<=0)throw new U1(`--${J} must be a positive integer`,"BAD_FLAG");return Z}path(J){let Y=this.str(J);return Y===void 0?void 0:X6(process.cwd(),Y)}requirePath(J){return X6(process.cwd(),this.require(J))}}function Q6(J){let Y=[];for(let Z of J.split(",")){let X=Z.trim();if(!X)continue;let G=X.indexOf(":");if(G===-1)throw new U1(`--agents entry "${X}" must be vendor:count`,"BAD_FLAG");let z=X.slice(0,G);if(!m1.includes(z))throw new U1(`--agents vendor "${z}" must be one of ${m1.join(", ")}`,"BAD_FLAG");let f=Number.parseInt(X.slice(G+1),10);if(!Number.isInteger(f)||f<=0)throw new U1(`--agents count for "${z}" must be a positive integer`,"BAD_FLAG");if(Y.length+f>VG)throw new U1(`--agents requests ${Y.length+f} agents, exceeds the cap of ${VG}`,"BAD_FLAG");for(let q=0;q<f;q++)Y.push(z)}if(Y.length===0)throw new U1('--agents specified no agents (e.g. "claude:2,codex:1")',"BAD_FLAG");return Y}function zC(J){return{name:J.name,type:J.type,required:J.required??!1,...J.values?{values:J.values}:{},...J.default!==void 0?{default:J.default}:{},...J.placeholder?{placeholder:J.placeholder}:{},description:J.description}}function fH(J){return{name:J.name,group:z6(J.name),summary:J.summary,offline:J.offline??!1,flags:J.flags.map(zC)}}function q6(){return{apiVersion:XH,kobeVersion:i0,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:KG,verbs:UG.map((J)=>({name:J.name,group:z6(J.name),summary:J.summary})),globalFlags:f6,aliases:$f}}function QC(J){let Y=KG[J];if(!Y)throw new U1(`unknown group: ${J}. Groups: ${Object.keys(KG).join(", ")}`,"BAD_FLAG");return{group:J,verbs:Y.map((Z)=>{let X=Hz(Z);return{name:Z,summary:X?.summary??""}})}}function B6(){return{apiVersion:XH,kobeVersion:i0,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:f6,aliases:$f,groups:KG,verbs:UG.map(fH)}}function fC(J){return J.flags.map((Y)=>{let Z=Y.type==="enum"&&Y.values?Y.values.join("|"):Y.placeholder??(Y.type==="bool"?"":"X"),X=Z?`--${Y.name} ${Z}`:`--${Y.name}`;return Y.required?X:`[${X}]`}).join(" ")}function j6(J){let Y=[`kobe api ${J.name} ${fC(J)}`.trimEnd(),"",J.summary,""],Z=Object.entries($f).find(([,X])=>X===J.name)?.[0];if(Z)Y.push(`Alias: ${Z}`,"");if(J.flags.length>0){Y.push("Flags:");for(let X of J.flags){let G=X.required?" (required)":"",z=X.default!==void 0?` [default: ${X.default}]`:"",f=X.type==="enum"&&X.values?` {${X.values.join("|")}}`:"";Y.push(` --${X.name}${f}${G}${z} ${X.description}`)}Y.push("")}return Y.push("Global: [--pretty] [--help]"),Y.join(`
128
+ `)}function lf(){return["usage: kobe api <verb> [flags] [--pretty] [--help]","","Explore the full surface (names, flags, types) with: kobe api schema","","verbs:",...UG.map((Y)=>` ${Y.name.padEnd(18)} ${Y.summary}`),"","Output is one JSON object on stdout (exit 0); errors are JSON on stderr (exit != 0)."].join(`
129
+ `)}function qC(J,Y){let Z=Y?JSON.stringify(J,null,2):JSON.stringify(J);process.stdout.write(`${Z}
130
+ `)}function pY(J,Y,Z=1){process.stderr.write(`${JSON.stringify({error:{message:J,code:Y}})}
131
+ `),process.exit(Z)}async function H6(J,Y,Z,X=BC){let G=Y.worktreePath;if(!G)G=(await J.request("task.ensureWorktree",{taskId:Y.id})).worktreePath;if(!G)throw new U1(`task ${Y.id} has no worktree`,"NO_WORKTREE");let z=K1(Y.id),f=await X.sessionExists(z);if(!f){let j=await X.resolveEngineLaunchInit(Y.repo??"",G,{kind:"none"});if(!await X.ensureSession({name:z,cwd:G,command:X.engineCommand(Y.vendor),taskId:Y.id,vendor:Y.vendor,repo:Y.repo,launchInit:j}))throw new U1(`failed to start tmux session for ${Y.id}`,"SESSION_FAILED")}let{pane:q,ready:B}=await X.waitForEnginePane(z,!f);if(!q)throw new U1(`no engine pane in session ${z}`,"NO_ENGINE_PANE");return await X.pasteAndSubmit(q,Z),{session:z,pane:q,started:!f,engineReady:B}}async function jC(J){let Y=null,Z=J.onChannel("active-task",(X)=>{Y=X.taskId});try{await J.subscribe()}finally{Z()}return Y}function EJ(J){if(!J.client)throw new U1("daemon required","BAD_DAEMON");return J.client}async function WY(J,Y,Z){return EJ(J).request(Y,Z)}async function HC(J){let Y=J.args.str("title"),Z=J.args.str("body");if(Y===void 0&&Z===void 0)throw new U1("issue-update requires --title and/or --body","MISSING_FLAG");return WY(J,"issue.mutate",{repoRoot:J.args.requirePath("repo"),op:{type:"update",id:J.args.int("id"),title:Y,body:Z}})}async function WC(J){let Y=EJ(J),{args:Z,runtime:X}=J,z={repo:await X.resolveRepoRoot(Z.requirePath("repo"))},f=Z.str("title");if(f)z.title=f;let q=Z.str("branch");if(q)z.branch=q;let B=Z.str("base-branch");if(B)z.baseRef=B;let j=Z.vendor()??await X.defaultVendor();if(j)z.vendor=j;let K=await Y.request("task.create",z),H=K.taskId;await Y.request("task.setActive",{taskId:H});let U=Z.enumOf("status");if(U)await Y.request("task.status",{taskId:H,status:U});let L=Z.bool("pin");if(L!==void 0)await Y.request("task.pin",{taskId:H,pinned:L});let F=K.task;if(U||L!==void 0)F=(await Y.request("task.get",{taskId:H})).task;let D=Z.str("prompt");if(!D)return{taskId:H,task:F,started:!1};let A=await J.runtime.deliverPrompt(Y,{id:H,worktreePath:F.worktreePath,vendor:F.vendor,repo:F.repo},D);return F=(await Y.request("task.get",{taskId:H})).task,{taskId:H,task:F,started:A.started,engineReady:A.engineReady,session:A.session}}async function VC(J){let Y=EJ(J),Z=J.args.require("prompt"),X=J.args.str("task-id");if(!X){let f=await jC(Y);if(!f)throw new U1("no --task-id given and no active task \u2014 open a task first or pass --task-id","MISSING_TARGET");X=f}let G=await Y.request("task.get",{taskId:X}),z=await J.runtime.deliverPrompt(Y,{id:X,worktreePath:G.task.worktreePath,vendor:G.task.vendor,repo:G.task.repo},Z);return{ok:!0,taskId:X,session:z.session,started:z.started,engineReady:z.engineReady}}async function KC(J){let Y=EJ(J),Z=J.args.require("task-id"),X=J.args.require("prompt");return await Y.request("session.deliver",{taskId:Z,text:X,source:"dispatcher"}),{ok:!0,taskId:Z,routed:"session.deliver"}}async function UC(J){let Y=EJ(J),Z=J.args.require("task-id"),X=J.args.require("text");return await Y.request("note.file",{taskId:Z,text:X})}async function LC(J){let Y=EJ(J),Z=J.args.require("task-id"),X=await Y.request("task.get",{taskId:Z}),G=await J.runtime.isTaskRunning(Z);return{task:X.task,running:G}}async function DC(J){return EJ(J).request("task.list")}async function MC(J){let Y=EJ(J),X=J.args.bool("none")?null:J.args.require("task-id");return await Y.request("task.setActive",{taskId:X}),{ok:!0,activeTaskId:X}}async function FC(J){let Y=EJ(J),Z=J.args.require("task-id"),X=J.args.bool("archived")??!0,G=await Y.request("task.archive",{taskId:Z,archived:X});if(X)await J.runtime.tearDownSession(Z);return G}async function OC(J){let Y=EJ(J),Z=J.args.require("task-id"),X=J.args.bool("force")??!1,G=await Y.request("task.delete",{taskId:Z,force:X});return await J.runtime.tearDownSession(Z),G}async function AC(J){let Y=EJ(J),{args:Z}=J,X={repo:Z.requirePath("repo"),worktreePath:Z.requirePath("worktree")},G=Z.str("branch");if(G)X.branch=G;let z=Z.vendor();if(z)X.vendor=z;let f=Z.str("title");if(f)X.title=f;return Y.request("worktree.adopt",X)}async function RC(J){let Y=EJ(J),{args:Z,runtime:X}=J,G=await X.resolveRepoRoot(Z.requirePath("repo")),z=Z.require("prompt"),f=Z.str("title"),q=Z.str("base-branch"),B=Z.str("agents"),j=await X.defaultVendor(),K=B?Q6(B):Array(Z.int("count")??1).fill(Z.vendor()??j??"claude");if(K.length>VG)throw new U1(`fan-out of ${K.length} exceeds the cap of ${VG} \u2014 spawn in batches`,"BAD_FLAG");let H=[];for(let U of K){let L={repo:G,vendor:U};if(f)L.title=f;if(q)L.baseRef=q;let F=await Y.request("task.create",L),D=await J.runtime.deliverPrompt(Y,{id:F.taskId,worktreePath:F.task.worktreePath,vendor:U,repo:F.task.repo},z);H.push({taskId:F.taskId,vendor:U,started:D.started,engineReady:D.engineReady,session:D.session})}return{count:H.length,tasks:H}}async function CC(J){let Y=EJ(J),{args:Z,runtime:X}=J,G=Z.str("task-ids"),z=Z.path("repo"),f;if(G)f=G.split(",").map((B)=>B.trim()).filter(Boolean);else if(z){let B=await X.resolveRepoRoot(z),{tasks:j}=await Y.request("task.list");f=[];for(let K of j){if(K.archived)continue;if(await X.resolveRepoRoot(K.repo)===B)f.push(K.id)}}else throw new U1("collect needs --task-ids id1,id2 or --repo PATH","MISSING_TARGET");let q=[];for(let B of f){let{task:j}=await Y.request("task.get",{taskId:B}),K=await X.isTaskRunning(B),H=j.worktreePath?await X.readWorktreeChanges(j.worktreePath):{added:0,deleted:0};q.push({taskId:j.id,title:j.title,branch:j.branch,worktreePath:j.worktreePath,vendor:j.vendor,status:j.status,running:K,changes:H})}return{tasks:q}}async function gC(J){return{ok:!0,discussion:WG({title:J.args.require("title"),body:J.args.require("body"),categorySlug:J.args.str("category")})}}function W6(J,Y,Z,X){return{args:new QH(J,Y),client:Z,runtime:X}}async function yC(J,Y,Z){let X=Hz(J);if(!X)throw new U1(`unknown verb: ${J}`,"BAD_VERB");let G=new Set(X.flags.filter((f)=>f.type==="bool").map((f)=>f.name)),z=GH(Y,G);return zH(X,z.flags),X.handler(W6(X,z.flags,Z.client,Z.runtime??qH))}async function SC(J){let[Y,...Z]=J;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(!Y)pY(lf(),"MISSING_VERB",2);process.stdout.write(`${lf()}
132
+ `);return}let X=Hz(Y);if(!X)pY(`unknown verb: ${Y}
133
+ ${lf()}`,"BAD_VERB",2);let G=new Set(X.flags.filter((q)=>q.type==="bool").map((q)=>q.name)),z;try{z=GH(Z,G)}catch(q){if(q instanceof U1)pY(q.message,q.code,2);pY(q instanceof Error?q.message:String(q),"BAD_FLAG",2)}if(z.help){process.stdout.write(`${j6(X)}
134
+ `);return}try{zH(X,z.flags)}catch(q){if(q instanceof U1)pY(q.message,q.code,2);pY(q instanceof Error?q.message:String(q),"BAD_FLAG",2)}let f=null;if(!X.offline)try{f=await Y6()}catch(q){pY(`could not reach or start the kobe daemon: ${q instanceof Error?q.message:String(q)}`,"BAD_DAEMON",2)}try{let q=await X.handler(W6(X,z.flags,f?.client??null,qH));qC(q,z.pretty)}catch(q){if(q instanceof U1)pY(q.message,q.code,1);pY(q instanceof Error?q.message:String(q),"RPC_ERROR",1)}finally{f?.close()}}var XH=2,VG=10,G6,ZC,U1,j1,$f,KG,UG,GC,f6,BC,qH;var K6=S(()=>{bJ();nf();N1();Vf();BJ();jJ();Z6();G6=["backlog","in_progress","in_review","done","canceled","error"],ZC=["open","doing","hold","done"];U1=class U1 extends Error{code;constructor(J,Y){super(J);this.code=Y}};j1={repo:(J=!0)=>({name:"repo",type:"string",required:J,placeholder:"PATH",description:"Repo root (git toplevel). Relative paths resolve against $PWD."}),taskId:(J=!0)=>({name:"task-id",type:"string",required:J,placeholder:"ID",description:"Target task id (from `list` / `add`)."}),vendor:()=>({name:"vendor",type:"enum",values:m1,placeholder:"V",description:"Engine vendor for the task."}),title:()=>({name:"title",type:"string",placeholder:"T",description:"Human task title."}),prompt:(J,Y)=>({name:"prompt",type:"string",required:J,placeholder:"TEXT",description:Y})},$f={"spawn-task":"add"},KG={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"]};UG=[{name:"schema",summary:"Explore the API. Default = a COMPACT index (groups + verb summaries, no flags). Drill in with --verb / --group; --all for the full spec.",flags:[{name:"verb",type:"string",placeholder:"NAME",description:"Full flag detail for ONE verb."},{name:"group",type:"string",placeholder:"G",description:"List the verbs in one group (compact)."},{name:"all",type:"bool",description:"The COMPLETE spec \u2014 every verb AND every flag (large; avoid by default)."}],offline:!0,handler:XC},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:DC},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[j1.taskId()],handler:LC},{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:[j1.repo(),j1.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."},j1.vendor(),{name:"status",type:"enum",values:G6,default:"backlog",description:"Initial lifecycle status."},{name:"pin",type:"bool",description:"Pin the task to the top of the sidebar."},j1.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 ${VG}.`,flags:[j1.repo(),j1.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)."},j1.vendor(),j1.title(),{name:"base-branch",type:"string",placeholder:"B",description:"Base ref for every worktree."}],handler:RC},{name:"send",summary:"Paste a follow-up prompt into a task's running engine (one full turn). Defaults to the active task.",flags:[j1.taskId(!1),j1.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:[j1.taskId(!0),j1.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:[j1.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:ZH,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:gC},{name:"issue-list",summary:"List daemon-owned issues for a repo.",flags:[j1.repo()],handler:(J)=>WY(J,"issue.list",{repoRoot:J.args.requirePath("repo")})},{name:"issue-create",summary:"Create a daemon-owned issue for a repo.",flags:[j1.repo(),{name:"title",type:"string",required:!0,placeholder:"T",description:"Issue title."},{name:"body",type:"string",placeholder:"TEXT",description:"Issue body."}],handler:(J)=>WY(J,"issue.mutate",{repoRoot:J.args.requirePath("repo"),op:{type:"create",title:J.args.require("title"),body:J.args.str("body")}})},{name:"issue-set-status",summary:"Set a daemon-owned issue's status.",flags:[j1.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"status",type:"enum",required:!0,values:ZC,description:"New issue status."}],handler:(J)=>WY(J,"issue.mutate",{repoRoot:J.args.requirePath("repo"),op:{type:"setStatus",id:J.args.int("id"),status:J.args.requireEnum("status")}})},{name:"issue-update",summary:"Update a daemon-owned issue's title and/or body.",flags:[j1.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:HC},{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."},j1.repo(!1)],handler:CC},{name:"rename",summary:"Set a task's title.",flags:[j1.taskId(),{name:"title",type:"string",required:!0,placeholder:"T",description:"New title."}],handler:(J)=>WY(J,"task.rename",{taskId:J.args.require("task-id"),title:J.args.require("title")})},{name:"set-branch",summary:"Rename a task's branch (git branch -m if materialized, else recorded).",flags:[j1.taskId(),{name:"branch",type:"string",required:!0,placeholder:"B",description:"New branch name."}],handler:(J)=>WY(J,"task.setBranch",{taskId:J.args.require("task-id"),branch:J.args.require("branch")})},{name:"set-vendor",summary:"Change a task's engine vendor (takes effect on next session rebuild).",flags:[j1.taskId(),{...j1.vendor(),required:!0}],handler:(J)=>WY(J,"task.setVendor",{taskId:J.args.require("task-id"),vendor:J.args.requireEnum("vendor")})},{name:"set-status",summary:"Set a task's lifecycle status.",flags:[j1.taskId(),{name:"status",type:"enum",required:!0,values:G6,description:"New status."}],handler:(J)=>WY(J,"task.status",{taskId:J.args.require("task-id"),status:J.args.requireEnum("status")})},{name:"archive",summary:"Archive (or with --archived=false, unarchive) a task. Non-destructive: worktree/branch/history stay.",flags:[j1.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:[j1.taskId(),{name:"pinned",type:"bool",default:"true",description:"true to pin, false to unpin."}],handler:(J)=>WY(J,"task.pin",{taskId:J.args.require("task-id"),pinned:J.args.bool("pinned")??!0})},{name:"set-active",summary:"Set the shared active task (the focus every Tasks pane highlights). Pass --none to clear.",flags:[j1.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:[j1.taskId()],handler:(J)=>WY(J,"task.ensureWorktree",{taskId:J.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:[j1.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:[j1.repo()],handler:(J)=>WY(J,"worktree.discoverAdoptable",{repo:J.args.requirePath("repo")})},{name:"adopt",summary:"Import an existing git worktree as a kobe task. Returns { task }.",flags:[j1.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)."},j1.vendor(),j1.title()],handler:AC}],GC=UG.map((J)=>J.name);f6=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];BC={sessionExists:f1,ensureSession:async(J)=>(await Promise.resolve().then(() => (t1(),iJ))).ensureSession(J),waitForEnginePane:Zz,pasteAndSubmit:Xz,resolveEngineLaunchInit:async(J,Y,Z)=>(await Promise.resolve().then(() => (tX(),Rj))).resolveEngineLaunchInit(J,Y,Z),engineCommand:RJ};qH={isTaskRunning:(J)=>f1(K1(J)),deliverPrompt:(J,Y,Z)=>H6(J,Y,Z),resolveRepoRoot:async(J)=>(await Promise.resolve().then(() => (O1(),JZ))).resolveMainRepoRoot(J),defaultVendor:async()=>{let{getPersistedString:J}=await Promise.resolve().then(() => (O1(),JZ)),Y=J("lastSelectedVendor")?.trim();return Y?Y:void 0},readWorktreeChanges:async(J)=>(await Promise.resolve().then(() => (fG(),E5))).readWorktreeChanges(J),tearDownSession:async(J)=>{let Y=K1(J);await yY(Y).catch(()=>{}),await mJ(Y).catch(()=>{})}}});var M6={};q1(M6,{updatePlan:()=>U6,runUpdateSubcommand:()=>IC,parseUpdateArgs:()=>L6});import{spawnSync as kC}from"child_process";function U6(){return{command:"sh",args:["-c",EY],display:EY}}function L6(J){let Y=!1;for(let Z=0;Z<J.length;Z+=1){let X=J[Z];if(X==="--help"||X==="-h"||X==="help")return{help:!0,dryRun:Y};if(X==="--dry-run"){Y=!0;continue}process.stderr.write(`kobe update: unknown argument "${X}"
135
135
 
136
- `),Y6(process.stderr),process.exit(2)}return{help:!1,dryRun:Y}}function Y6(J){J.write(["Usage: kobe update [--dry-run]","","Runs kobe's GitHub-hosted update script.","","Default command:",` ${kY}`,"","Script URL:",` ${vG}`,"","Manual fallback:",` ${kq()}`,"","Examples:"," kobe update"," kobe update --dry-run",""].join(`
137
- `))}async function Yg(J,Y){let Z={spawn:Y?.spawn??Jg,stdout:Y?.stdout??process.stdout,stderr:Y?.stderr??process.stderr,exit:Y?.exit??((Q)=>process.exit(Q))},f=J6(J);if(f.help){Y6(Z.stdout);return}let X=eV();if(Z.stdout.write(`kobe ${n0} -> latest
138
- `),Z.stdout.write(`running: ${X.display}
139
- `),f.dryRun)return;let G=Z.spawn(X.command,X.args,{stdio:"inherit"});if(G.error)Z.stderr.write(`kobe update: failed to run ${X.command}: ${G.error.message}
140
- `),Z.exit(1);Z.exit(G.status??1)}var f6=S(()=>{QJ()});var Q6={};Q1(Q6,{runThemeSubcommand:()=>Vg});import{existsSync as G6,mkdirSync as Zg,readFileSync as fg,readdirSync as Xg,unlinkSync as Gg,writeFileSync as zg}from"fs";import{basename as X6,join as eH,resolve as Qg}from"path";function aY(J){process.stderr.write(`kobe theme: ${J}
141
- `),process.exit(1)}function AZ(J){process.stderr.write(`kobe theme: ${J}
136
+ `),D6(process.stderr),process.exit(2)}return{help:!1,dryRun:Y}}function D6(J){J.write(["Usage: kobe update [--dry-run]","","Runs kobe's GitHub-hosted update script.","","Default command:",` ${EY}`,"","Script URL:",` ${nz}`,"","Manual fallback:",` ${Eq()}`,"","Examples:"," kobe update"," kobe update --dry-run",""].join(`
137
+ `))}async function IC(J,Y){let Z={spawn:Y?.spawn??kC,stdout:Y?.stdout??process.stdout,stderr:Y?.stderr??process.stderr,exit:Y?.exit??((f)=>process.exit(f))},X=L6(J);if(X.help){D6(Z.stdout);return}let G=U6();if(Z.stdout.write(`kobe ${i0} -> latest
138
+ `),Z.stdout.write(`running: ${G.display}
139
+ `),X.dryRun)return;let z=Z.spawn(G.command,G.args,{stdio:"inherit"});if(z.error)Z.stderr.write(`kobe update: failed to run ${G.command}: ${z.error.message}
140
+ `),Z.exit(1);Z.exit(z.status??1)}var F6=S(()=>{jJ()});var C6={};q1(C6,{runThemeSubcommand:()=>cC});import{existsSync as A6,mkdirSync as NC,readFileSync as bC,readdirSync as TC,unlinkSync as EC,writeFileSync as uC}from"fs";import{basename as O6,join as jH,resolve as xC}from"path";function _Y(J){process.stderr.write(`kobe theme: ${J}
141
+ `),process.exit(1)}function yZ(J){process.stderr.write(`kobe theme: ${J}
142
142
 
143
- `),z6(),process.exit(2)}function qg(){let J=[];J.push("bundled:");for(let f of[...tH].sort())J.push(` ${f} [built-in]`);let Y=tf(),Z=[];try{Z=Xg(Y).filter((f)=>f.endsWith(".json")).sort()}catch{}if(J.push(""),J.push(`user (${Y}):`),Z.length===0)J.push(" (none)");else for(let f of Z){let X=f.slice(0,-5),G=eH(Y,f),Q=tH.includes(X)?" (overrides built-in)":"";J.push(` ${X}${Q} ${G}`)}process.stdout.write(`${J.join(`
143
+ `),R6(),process.exit(2)}function wC(){let J=[];J.push("bundled:");for(let X of[...BH].sort())J.push(` ${X} [built-in]`);let Y=YG(),Z=[];try{Z=TC(Y).filter((X)=>X.endsWith(".json")).sort()}catch{}if(J.push(""),J.push(`user (${Y}):`),Z.length===0)J.push(" (none)");else for(let X of Z){let G=X.slice(0,-5),z=jH(Y,X),f=BH.includes(G)?" (overrides built-in)":"";J.push(` ${G}${f} ${z}`)}process.stdout.write(`${J.join(`
144
144
  `)}
145
- `)}async function Bg(J){if(/^https?:\/\//i.test(J)){let G;try{G=await fetch(J)}catch(K){aY(`failed to fetch ${J}: ${K instanceof Error?K.message:String(K)}`)}if(!G.ok)aY(`failed to fetch ${J}: HTTP ${G.status} ${G.statusText}`);let Q=await G.text(),q=J.split(/[?#]/)[0]??J,B=X6(q)||"theme.json",H=B.endsWith(".json")?B.slice(0,-5):B;return{text:Q,defaultName:H}}let Y=Qg(process.cwd(),J),Z;try{Z=fg(Y,"utf8")}catch(G){aY(`failed to read ${Y}: ${G instanceof Error?G.message:String(G)}`)}let f=X6(Y),X=f.endsWith(".json")?f.slice(0,-5):f;return{text:Z,defaultName:X}}function Hg(J){let Y=null,Z,f=!1;for(let X=0;X<J.length;X+=1){let G=J[X];if(G==="--force"||G==="-f"){f=!0;continue}if(G==="--name"||G==="-n"){let Q=J[X+1];if(Q===void 0)AZ("--name requires a value");Z=Q,X+=1;continue}if(G.startsWith("--name=")){Z=G.slice(7);continue}if(G.startsWith("--"))AZ(`unknown flag: ${G}`);if(Y===null){Y=G;continue}AZ(`unexpected positional argument: ${G}`)}if(Y===null)AZ("missing <source> (URL or path to theme JSON)");return{source:Y,opts:{name:Z,force:f}}}async function jg(J){let{source:Y,opts:Z}=Hg(J),{text:f,defaultName:X}=await Bg(Y),G;try{G=JSON.parse(f)}catch(K){aY(`source is not valid JSON: ${K instanceof Error?K.message:String(K)}`)}let Q=qQ(G);if(!Q.ok)aY(`source is not a valid kobe theme: ${Q.reason}`);let q=Z.name??X;if(!q||!/^[a-zA-Z0-9._-]+$/.test(q))aY(`invalid theme name "${q}" (use letters, digits, '.', '_', '-')`);let B=tf();Zg(B,{recursive:!0});let H=eH(B,`${q}.json`);if(G6(H)&&!Z.force)aY(`${H} already exists (pass --force to overwrite)`);zg(H,`${JSON.stringify(Q.theme,null,2)}
146
- `,"utf8"),process.stdout.write(`installed theme "${q}" -> ${H}
147
- `)}function Wg(J){let Y=J[0];if(!Y)AZ("missing <name>");if(J.length>1)AZ(`unexpected extra arguments after "${Y}"`);if(tH.includes(Y))aY(`"${Y}" is a built-in theme and cannot be removed`);let Z=eH(tf(),`${Y}.json`);if(!G6(Z))aY(`no user theme named "${Y}" (looked for ${Z})`);Gg(Z),process.stdout.write(`removed theme "${Y}" (${Z})
148
- `)}function z6(){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: ${tf()}`,"Schema: https://raw.githubusercontent.com/sma1lboy/kobe/main/packages/kobe/src/tui/context/theme/theme.schema.json",""].join(`
149
- `))}async function Vg(J){let[Y,...Z]=J;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(z6(),!Y)process.exit(2);return}if(Y==="list"||Y==="ls"){if(Z.length>0)AZ(`"${Y}" takes no arguments`);qg();return}if(Y==="add"){await jg(Z);return}if(Y==="remove"||Y==="rm"){Wg(Z);return}AZ(`unknown action "${Y}" (try "list", "add", or "remove")`)}var tH;var q6=S(()=>{c1();BQ();OH();tH=["claude","conductor","dracula","nord","opencode","osaka-jade","tokyonight"]});var W6={};Q1(W6,{runFeedbackSubcommand:()=>Ug,parseFeedbackArgs:()=>j6});import{readFileSync as B6}from"fs";function RZ(J){process.stderr.write(`kobe feedback: ${J}
145
+ `)}async function hC(J){if(/^https?:\/\//i.test(J)){let z;try{z=await fetch(J)}catch(K){_Y(`failed to fetch ${J}: ${K instanceof Error?K.message:String(K)}`)}if(!z.ok)_Y(`failed to fetch ${J}: HTTP ${z.status} ${z.statusText}`);let f=await z.text(),q=J.split(/[?#]/)[0]??J,B=O6(q)||"theme.json",j=B.endsWith(".json")?B.slice(0,-5):B;return{text:f,defaultName:j}}let Y=xC(process.cwd(),J),Z;try{Z=bC(Y,"utf8")}catch(z){_Y(`failed to read ${Y}: ${z instanceof Error?z.message:String(z)}`)}let X=O6(Y),G=X.endsWith(".json")?X.slice(0,-5):X;return{text:Z,defaultName:G}}function PC(J){let Y=null,Z,X=!1;for(let G=0;G<J.length;G+=1){let z=J[G];if(z==="--force"||z==="-f"){X=!0;continue}if(z==="--name"||z==="-n"){let f=J[G+1];if(f===void 0)yZ("--name requires a value");Z=f,G+=1;continue}if(z.startsWith("--name=")){Z=z.slice(7);continue}if(z.startsWith("--"))yZ(`unknown flag: ${z}`);if(Y===null){Y=z;continue}yZ(`unexpected positional argument: ${z}`)}if(Y===null)yZ("missing <source> (URL or path to theme JSON)");return{source:Y,opts:{name:Z,force:X}}}async function vC(J){let{source:Y,opts:Z}=PC(J),{text:X,defaultName:G}=await hC(Y),z;try{z=JSON.parse(X)}catch(K){_Y(`source is not valid JSON: ${K instanceof Error?K.message:String(K)}`)}let f=Uf(z);if(!f.ok)_Y(`source is not a valid kobe theme: ${f.reason}`);let q=Z.name??G;if(!q||!/^[a-zA-Z0-9._-]+$/.test(q))_Y(`invalid theme name "${q}" (use letters, digits, '.', '_', '-')`);let B=YG();NC(B,{recursive:!0});let j=jH(B,`${q}.json`);if(A6(j)&&!Z.force)_Y(`${j} already exists (pass --force to overwrite)`);uC(j,`${JSON.stringify(f.theme,null,2)}
146
+ `,"utf8"),process.stdout.write(`installed theme "${q}" -> ${j}
147
+ `)}function mC(J){let Y=J[0];if(!Y)yZ("missing <name>");if(J.length>1)yZ(`unexpected extra arguments after "${Y}"`);if(BH.includes(Y))_Y(`"${Y}" is a built-in theme and cannot be removed`);let Z=jH(YG(),`${Y}.json`);if(!A6(Z))_Y(`no user theme named "${Y}" (looked for ${Z})`);EC(Z),process.stdout.write(`removed theme "${Y}" (${Z})
148
+ `)}function R6(){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: ${YG()}`,"Schema: https://raw.githubusercontent.com/sma1lboy/kobe/main/packages/kobe/src/tui/context/theme/theme.schema.json",""].join(`
149
+ `))}async function cC(J){let[Y,...Z]=J;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(R6(),!Y)process.exit(2);return}if(Y==="list"||Y==="ls"){if(Z.length>0)yZ(`"${Y}" takes no arguments`);wC();return}if(Y==="add"){await vC(Z);return}if(Y==="remove"||Y==="rm"){mC(Z);return}yZ(`unknown action "${Y}" (try "list", "add", or "remove")`)}var BH;var g6=S(()=>{n1();Lf();kj();BH=["claude","conductor","dracula","nord","opencode","osaka-jade","tokyonight"]});var I6={};q1(I6,{runFeedbackSubcommand:()=>nC,parseFeedbackArgs:()=>k6});import{readFileSync as y6}from"fs";function SZ(J){process.stderr.write(`kobe feedback: ${J}
150
150
 
151
- ${H6}
152
- `),process.exit(2)}function Kg(J){if(J==="-")return B6(0,"utf8");return B6(J,"utf8")}function j6(J){let Y={help:!1};for(let Z=0;Z<J.length;Z++){let f=J[Z];if(f==="--help"||f==="-h"||f==="help")return{...Y,help:!0};if(f==="--title"){if(Y.title=J[++Z],Y.title===void 0)RZ("--title requires a value");continue}if(f==="--body"){if(Y.body=J[++Z],Y.body===void 0)RZ("--body requires a value");continue}if(f==="--body-file"){if(Y.bodyFile=J[++Z],Y.bodyFile===void 0)RZ("--body-file requires a value");continue}if(f==="--category"){if(Y.category=J[++Z],Y.category===void 0)RZ("--category requires a value");continue}RZ(`unexpected argument "${f}"`)}return Y}async function Ug(J){let Y=j6(J);if(Y.help){process.stdout.write(`${H6}
153
- `);return}if(!Y.title)RZ("--title is required");if(Y.body&&Y.bodyFile)RZ("pass either --body or --body-file, not both");let Z=Y.bodyFile?Kg(Y.bodyFile):Y.body;if(!Z)RZ("--body or --body-file is required");let f=qX({title:Y.title,body:Z,categorySlug:Y.category});console.log(`created Discussion #${f.number}: ${f.url}`)}var H6;var V6=S(()=>{hQ();H6=["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 Lg}from"os";async function K6(J={}){let Y=J.homeDir??process.env.KOBE_HOME_DIR??Lg(),Z=new Af({homeDir:Y});await Z.load();let f=new $G,X=new Xz({store:Z,worktrees:f});return{homeDir:Y,orchestrator:X,store:Z,worktrees:f,async close(){X.dispose()}}}var U6=S(()=>{TX();SX();$q()});var D6={};Q1(D6,{runDaemonSubcommand:()=>Mg});function L6(J){J.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 Dg(){let J=process.env.KOBE_DAEMON_WEB_PORT?.trim();if(J==="0"||J==="off"||J==="false")return;let Y=J?Number.parseInt(J,10):5174;return Number.isFinite(Y)&&Y>0?Y:5174}async function Mg(J){let[Y="status"]=J,Z=WY(),f=EY();if(Y==="--help"||Y==="-h"||Y==="help"){L6(process.stdout);return}if(Y==="status"){let q=new hJ(Z);try{let B=await q.request("daemon.status");console.log(JSON.stringify(B,null,2))}catch{let B=await XX(f);if(B)console.log(`kobe daemon: no daemon socket at ${Z} (stale pidfile pid=${B})`);else console.log(`kobe daemon: no daemon running at ${Z}`);process.exitCode=1}finally{q.close()}return}if(Y==="stop"){let q=new hJ(Z);try{await q.request("daemon.stop"),console.log("kobe daemon: stop requested")}catch{console.log(`kobe daemon: no daemon running at ${Z}`)}finally{q.close()}return}if(Y==="restart"){await GX(Z,f),(await fY()).close(),console.log(`kobe daemon: restarted, listening on ${Z}`);return}if(Y!=="start")process.stderr.write(`kobe daemon: unknown command "${Y}"
151
+ ${S6}
152
+ `),process.exit(2)}function dC(J){if(J==="-")return y6(0,"utf8");return y6(J,"utf8")}function k6(J){let Y={help:!1};for(let Z=0;Z<J.length;Z++){let X=J[Z];if(X==="--help"||X==="-h"||X==="help")return{...Y,help:!0};if(X==="--title"){if(Y.title=J[++Z],Y.title===void 0)SZ("--title requires a value");continue}if(X==="--body"){if(Y.body=J[++Z],Y.body===void 0)SZ("--body requires a value");continue}if(X==="--body-file"){if(Y.bodyFile=J[++Z],Y.bodyFile===void 0)SZ("--body-file requires a value");continue}if(X==="--category"){if(Y.category=J[++Z],Y.category===void 0)SZ("--category requires a value");continue}SZ(`unexpected argument "${X}"`)}return Y}async function nC(J){let Y=k6(J);if(Y.help){process.stdout.write(`${S6}
153
+ `);return}if(!Y.title)SZ("--title is required");if(Y.body&&Y.bodyFile)SZ("pass either --body or --body-file, not both");let Z=Y.bodyFile?dC(Y.bodyFile):Y.body;if(!Z)SZ("--body or --body-file is required");let X=WG({title:Y.title,body:Z,categorySlug:Y.category});console.log(`created Discussion #${X.number}: ${X.url}`)}var S6;var N6=S(()=>{nf();S6=["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 iC}from"os";async function b6(J={}){let Y=J.homeDir??process.env.KOBE_HOME_DIR??iC(),Z=new yX({homeDir:Y});await Z.load();let X=new rz,G=new BQ({store:Z,worktrees:X});return{homeDir:Y,orchestrator:G,store:Z,worktrees:X,async close(){G.dispose()}}}var T6=S(()=>{xG();IG();oq()});var u6={};q1(u6,{runDaemonSubcommand:()=>$C});function E6(J){J.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 lC(){let J=process.env.KOBE_DAEMON_WEB_PORT?.trim();if(J==="0"||J==="off"||J==="false")return;let Y=J?Number.parseInt(J,10):5174;return Number.isFinite(Y)&&Y>0?Y:5174}async function $C(J){let[Y="status"]=J,Z=AY(),X=PY();if(Y==="--help"||Y==="-h"||Y==="help"){E6(process.stdout);return}if(Y==="status"){let q=new PJ(Z);try{let B=await q.request("daemon.status");console.log(JSON.stringify(B,null,2))}catch{let B=await qG(X);if(B)console.log(`kobe daemon: no daemon socket at ${Z} (stale pidfile pid=${B})`);else console.log(`kobe daemon: no daemon running at ${Z}`);process.exitCode=1}finally{q.close()}return}if(Y==="stop"){let q=new PJ(Z);try{await q.request("daemon.stop"),console.log("kobe daemon: stop requested")}catch{console.log(`kobe daemon: no daemon running at ${Z}`)}finally{q.close()}return}if(Y==="restart"){await BG(Z,X),(await HY()).close(),console.log(`kobe daemon: restarted, listening on ${Z}`);return}if(Y!=="start")process.stderr.write(`kobe daemon: unknown command "${Y}"
156
156
 
157
- `),L6(process.stderr),process.exit(2);G5();let X=await K6(),G=await CV(X.orchestrator,{socketPath:Z,pidPath:f,homeDir:X.homeDir,webPort:Dg(),webHost:process.env.KOBE_WEB_HOST,webStaticDir:process.env.KOBE_DAEMON_WEB_STATIC_DIR,onStop:async()=>{await X.close()}});if(console.log(`kobe daemon: listening on ${G.socketPath}`),G.webPort)console.log(`kobe daemon: web transport listening on http://127.0.0.1:${G.webPort}`);let Q=async()=>{await G.close(),await X.close(),process.exit(0)};process.once("SIGINT",()=>void Q()),process.once("SIGTERM",()=>void Q())}var M6=S(()=>{uX();DJ();uQ();yf();EQ();U6()});import{existsSync as Fg,readFileSync as Og}from"fs";import{homedir as Ag}from"os";import{join as F6}from"path";function Zj(J={}){return["skills","add",Rg,"--skill","kobe","--agent",J.agent??mQ]}function cQ(J={}){return`npx ${Zj(J).join(" ")}`}function fj(J={}){let Y=J.home??Ag(),Z=J.cwd??process.cwd();return[F6(Y,O6),F6(Z,O6)]}function gg(J){let Y=J.match(/kobe-skill-version:\s*(\d+)/);return Y?Number.parseInt(Y[1],10):null}function HG(J){let Y=fj(J).find((X)=>Fg(X));if(!Y)return{installed:!1,installedVersion:null,currentVersion:Jj,stale:!1};let Z=null;try{Z=gg(Og(Y,"utf8"))}catch{Z=null}let f=Z===null||Z<Jj;return{installed:!0,installedVersion:Z,currentVersion:Jj,stale:f}}function A6(){let J=HG();if(!J.installed){if(C1(Yj)==="1")return;d1(Yj,"1"),process.stderr.write(`
157
+ `),E6(process.stderr),process.exit(2);MV();let G=await b6(),z=await c5(G.orchestrator,{socketPath:Z,pidPath:X,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 ${z.socketPath}`),z.webPort)console.log(`kobe daemon: web transport listening on http://127.0.0.1:${z.webPort}`);let f=async()=>{await z.close(),await G.close(),process.exit(0)};process.once("SIGINT",()=>void f()),process.once("SIGTERM",()=>void f())}var x6=S(()=>{hG();CJ();mf();bX();vf();T6()});import{existsSync as aC,readFileSync as pC}from"fs";import{homedir as _C}from"os";import{join as w6}from"path";function VH(J={}){return["skills","add",rC,"--skill","kobe","--agent",J.agent??af]}function pf(J={}){return`npx ${VH(J).join(" ")}`}function KH(J={}){let Y=J.home??_C(),Z=J.cwd??process.cwd();return[w6(Y,h6),w6(Z,h6)]}function oC(J){let Y=J.match(/kobe-skill-version:\s*(\d+)/);return Y?Number.parseInt(Y[1],10):null}function Vz(J){let Y=KH(J).find((G)=>aC(G));if(!Y)return{installed:!1,installedVersion:null,currentVersion:HH,stale:!1};let Z=null;try{Z=oC(pC(Y,"utf8"))}catch{Z=null}let X=Z===null||Z<HH;return{installed:!0,installedVersion:Z,currentVersion:HH,stale:X}}function P6(){let J=Vz();if(!J.installed){if(g1(WH)==="1")return;i1(WH,"1"),process.stderr.write(`
158
158
  kobe: the kobe agent skill isn't installed \u2014 install it so your coding agent can drive kobe via \`kobe api\`:
159
- ${BG}
160
- (wraps \`${cQ()}\`; check anytime with \`kobe doctor\`)
159
+ ${Wz}
160
+ (wraps \`${pf()}\`; check anytime with \`kobe doctor\`)
161
161
 
162
- `);return}if(J.stale){let Y=`${Yj}:v${J.currentVersion}`;if(C1(Y)==="1")return;d1(Y,"1");let Z=J.installedVersion===null?"an older":`v${J.installedVersion}`;process.stderr.write(`
162
+ `);return}if(J.stale){let Y=`${WH}:v${J.currentVersion}`;if(g1(Y)==="1")return;i1(Y,"1");let Z=J.installedVersion===null?"an older":`v${J.installedVersion}`;process.stderr.write(`
163
163
  kobe: your kobe agent skill is out of date (${Z}; this kobe wants v${J.currentVersion}) \u2014 refresh it so \`kobe api\` guidance matches:
164
- ${BG}
164
+ ${Wz}
165
165
 
166
- `)}}var Jj=2,O6=".claude/skills/kobe/SKILL.md",BG="kobe skill install",Rg="Sma1lboy/kobe",mQ="claude-code",Yj="skillHintSeen";var dQ=S(()=>{A1()});var nQ={};Q1(nQ,{runResetSubcommand:()=>hg,runReloadSubcommand:()=>Pg,runDoctorSubcommand:()=>xg});import{existsSync as Cg,readFileSync as C6,statSync as Sg}from"fs";import{unlink as yg}from"fs/promises";import{join as S6}from"path";import{createInterface as kg}from"readline";function Ig(J){try{return process.kill(J,0),!0}catch(Y){return Y.code==="EPERM"}}async function Ng(J){let Y=new hJ(J);try{return await Y.request("daemon.status")}catch{return null}finally{Y.close()}}function bg(J){let Y=Math.floor(J/1000);if(Y<60)return`${Y}s`;let Z=Math.floor(Y/60);if(Z<60)return`${Z}m ${Y%60}s`;return`${Math.floor(Z/60)}h ${Z%60}m`}function Tg(J){if(J<1024)return`${J} B`;if(J<1048576)return`${(J/1024).toFixed(1)} KB`;return`${(J/1048576).toFixed(1)} MB`}function Xj(J){try{let Y=Sg(J);return`present (${Tg(Y.size)}, modified ${Y.mtime.toISOString()})`}catch{return"absent"}}function y6(J){try{let Y=JSON.parse(C6(J,"utf8"));return Array.isArray(Y.tasks)?Y.tasks.length:null}catch{return null}}function Eg(J,Y){try{return C6(J,"utf8").split(`
167
- `).filter((f)=>f.trim().length>0).slice(-Y).join(`
168
- `)}catch{return""}}async function Gj(J){let Y=Bun.spawn(rZ(...J),{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),[Z,f]=await Promise.all([new Response(Y.stdout).text().catch(()=>""),Y.exited]);return{code:f,stdout:Z}}async function ug(){if(!await LY())return 0;let{code:J,stdout:Y}=await Gj(["list-sessions","-F","#{session_name}"]);if(J!==0)return 0;return Y.split(`
169
- `).filter((Z)=>Z.trim().length>0).length}async function xg(J=[]){if(J.includes("--help")||J.includes("-h")||J.includes("help")){process.stdout.write(["Usage: kobe doctor","","Read-only diagnosis of the daemon / tmux / state. Takes no options.",""].join(`
170
- `));return}let Y=J.find((j)=>j.length>0);if(Y!==void 0)process.stderr.write([`kobe doctor: unexpected argument "${Y}"`,"","Usage: kobe doctor (read-only; takes no options)",""].join(`
171
- `)),process.exit(2);let Z=WY(),f=EY(),X=Qz(),G=S6(r1(),"tasks.json"),Q=EJ(),q=["kobe doctor",` home: ${qY()}`,` socket: ${Z}`,""],B=await Ng(Z);if(B){let j=typeof B.daemonPid==="number"?B.daemonPid:"?",U=typeof B.uptimeMs==="number"?bg(B.uptimeMs):"?",L=typeof B.taskCount==="number"?B.taskCount:"?",F=typeof B.attachedClients==="number"?B.attachedClients:"?";q.push(`daemon: \u2713 running (pid ${j}, up ${U}, ${L} task(s), ${F} client(s))`);let D=typeof B.kobeVersion==="string"?B.kobeVersion:void 0;if(D&&D!==n0)q.push(` \u26A0 stale build: daemon is v${D}, you launched v${n0}`),q.push(" \u2192 run `kobe daemon restart`, then `kobe reload` in any open kobe sessions");else if(D)q.push(` build: v${D}`)}else{let j=await XX(f);if(j&&Ig(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(Cg(Z))q.push(` orphan socket file present: ${Z}`);let U=Eg(X,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 LY())q.push(`tmux: ${await ug()} kobe session(s) on \`${oJ}\` socket`);else q.push("tmux: \u2717 not found on PATH (task sessions need tmux)");q.push("");let H=HG();if(!H.installed)q.push("skill: \u2717 kobe agent skill not installed (optional \u2014 lets a coding agent drive `kobe api`)"),q.push(` \u2192 ${BG}`);else if(H.stale){let j=H.installedVersion===null?"unstamped":`v${H.installedVersion}`;q.push(`skill: \u26A0 kobe agent skill out of date (${j}; this kobe wants v${H.currentVersion})`),q.push(` \u2192 ${BG}`)}else q.push(`skill: \u2713 kobe agent skill installed (v${H.installedVersion})`);q.push("");let K=y6(G);q.push(`tasks.json: ${Xj(G)}${K===null?"":` \u2014 ${K} task(s)`}`),q.push(`state.json: ${Xj(Q)}`),q.push(`daemon.log: ${Xj(X)}`),console.log(q.join(`
173
- `))}async function wg(J){let Y=kg({input:process.stdin,output:process.stdout});try{let Z=await new Promise((f)=>Y.question(J,f));return/^y(es)?$/i.test(Z.trim())}finally{Y.close()}}async function R6(J,Y){try{await yg(J),console.log(` removed ${Y} (${J})`)}catch(Z){if(Z.code==="ENOENT")console.log(` ${Y}: already absent`);else console.error(` failed to remove ${Y} (${J}): ${Z instanceof Error?Z.message:String(Z)}`)}}function g6(J){J.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 hg(J){if(J.includes("--help")||J.includes("-h")||J.includes("help")){g6(process.stdout);return}let Y=new Set(["--hard","--yes","-y"]),Z=J.find((j)=>!Y.has(j));if(Z!==void 0)process.stderr.write(`kobe reset: unknown argument "${Z}"
166
+ `)}}var HH=2,h6=".claude/skills/kobe/SKILL.md",Wz="kobe skill install",rC="Sma1lboy/kobe",af="claude-code",WH="skillHintSeen";var _f=S(()=>{O1()});var rf={};q1(rf,{runResetSubcommand:()=>Bg,runReloadSubcommand:()=>jg,runDoctorSubcommand:()=>fg});import{existsSync as sC,readFileSync as c6,statSync as tC}from"fs";import{unlink as eC}from"fs/promises";import{join as d6}from"path";import{createInterface as Jg}from"readline";function Yg(J){try{return process.kill(J,0),!0}catch(Y){return Y.code==="EPERM"}}async function Zg(J){let Y=new PJ(J);try{return await Y.request("daemon.status")}catch{return null}finally{Y.close()}}function Xg(J){let Y=Math.floor(J/1000);if(Y<60)return`${Y}s`;let Z=Math.floor(Y/60);if(Z<60)return`${Z}m ${Y%60}s`;return`${Math.floor(Z/60)}h ${Z%60}m`}function Gg(J){if(J<1024)return`${J} B`;if(J<1048576)return`${(J/1024).toFixed(1)} KB`;return`${(J/1048576).toFixed(1)} MB`}function UH(J){try{let Y=tC(J);return`present (${Gg(Y.size)}, modified ${Y.mtime.toISOString()})`}catch{return"absent"}}function n6(J){try{let Y=JSON.parse(c6(J,"utf8"));return Array.isArray(Y.tasks)?Y.tasks.length:null}catch{return null}}function zg(J,Y){try{return c6(J,"utf8").split(`
167
+ `).filter((X)=>X.trim().length>0).slice(-Y).join(`
168
+ `)}catch{return""}}async function LH(J){let Y=Bun.spawn(JX(...J),{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),[Z,X]=await Promise.all([new Response(Y.stdout).text().catch(()=>""),Y.exited]);return{code:X,stdout:Z}}async function Qg(){if(!await CY())return 0;let{code:J,stdout:Y}=await LH(["list-sessions","-F","#{session_name}"]);if(J!==0)return 0;return Y.split(`
169
+ `).filter((Z)=>Z.trim().length>0).length}async function fg(J=[]){if(J.includes("--help")||J.includes("-h")||J.includes("help")){process.stdout.write(["Usage: kobe doctor","","Read-only diagnosis of the daemon / tmux / state. Takes no options.",""].join(`
170
+ `));return}let Y=J.find((H)=>H.length>0);if(Y!==void 0)process.stderr.write([`kobe doctor: unexpected argument "${Y}"`,"","Usage: kobe doctor (read-only; takes no options)",""].join(`
171
+ `)),process.exit(2);let Z=AY(),X=PY(),G=WQ(),z=d6(o1(),"tasks.json"),f=xJ(),q=["kobe doctor",` home: ${DY()}`,` socket: ${Z}`,""],B=await Zg(Z);if(B){let H=typeof B.daemonPid==="number"?B.daemonPid:"?",U=typeof B.uptimeMs==="number"?Xg(B.uptimeMs):"?",L=typeof B.taskCount==="number"?B.taskCount:"?",F=typeof B.attachedClients==="number"?B.attachedClients:"?";q.push(`daemon: \u2713 running (pid ${H}, up ${U}, ${L} task(s), ${F} client(s))`);let D=typeof B.kobeVersion==="string"?B.kobeVersion:void 0;if(D&&D!==i0)q.push(` \u26A0 stale build: daemon is v${D}, you launched v${i0}`),q.push(" \u2192 run `kobe daemon restart`, then `kobe reload` in any open kobe sessions");else if(D)q.push(` build: v${D}`)}else{let H=await qG(X);if(H&&Yg(H))q.push(`daemon: \u2717 WEDGED \u2014 process alive (pid ${H}) but not accepting connections`),q.push(" \u2192 run `kobe reset` to kill it, then relaunch kobe");else if(H)q.push(`daemon: \u2717 not running (stale pidfile \u2192 pid ${H} 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(Z))q.push(` orphan socket file present: ${Z}`);let U=zg(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 CY())q.push(`tmux: ${await Qg()} kobe session(s) on \`${GY}\` socket`);else q.push("tmux: \u2717 not found on PATH (task sessions need tmux)");q.push("");let j=Vz();if(!j.installed)q.push("skill: \u2717 kobe agent skill not installed (optional \u2014 lets a coding agent drive `kobe api`)"),q.push(` \u2192 ${Wz}`);else if(j.stale){let H=j.installedVersion===null?"unstamped":`v${j.installedVersion}`;q.push(`skill: \u26A0 kobe agent skill out of date (${H}; this kobe wants v${j.currentVersion})`),q.push(` \u2192 ${Wz}`)}else q.push(`skill: \u2713 kobe agent skill installed (v${j.installedVersion})`);q.push("");let K=n6(z);q.push(`tasks.json: ${UH(z)}${K===null?"":` \u2014 ${K} task(s)`}`),q.push(`state.json: ${UH(f)}`),q.push(`daemon.log: ${UH(G)}`),console.log(q.join(`
173
+ `))}async function qg(J){let Y=Jg({input:process.stdin,output:process.stdout});try{let Z=await new Promise((X)=>Y.question(J,X));return/^y(es)?$/i.test(Z.trim())}finally{Y.close()}}async function v6(J,Y){try{await eC(J),console.log(` removed ${Y} (${J})`)}catch(Z){if(Z.code==="ENOENT")console.log(` ${Y}: already absent`);else console.error(` failed to remove ${Y} (${J}): ${Z instanceof Error?Z.message:String(Z)}`)}}function m6(J){J.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 Bg(J){if(J.includes("--help")||J.includes("-h")||J.includes("help")){m6(process.stdout);return}let Y=new Set(["--hard","--yes","-y"]),Z=J.find((H)=>!Y.has(H));if(Z!==void 0)process.stderr.write(`kobe reset: unknown argument "${Z}"
175
175
 
176
- `),g6(process.stderr),process.exit(2);let f=J.includes("--hard"),X=J.includes("--yes")||J.includes("-y"),G=WY(),Q=EY(),q=S6(r1(),"tasks.json"),B=EJ();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 (${G})`),console.log(` \u2022 kill all kobe tmux sessions on the \`${oJ}\` socket`),f){let j=y6(q);console.log(` \u2022 DELETE the task index${j===null?"":` (${j} task(s))`} \u2014 ${q}`),console.log(` \u2022 DELETE the UI state \u2014 ${B}`)}if(console.log(" \u2022 NOT touch your git worktrees under ~/.kobe/worktrees/ or legacy repo-local roots"),!f)console.log(" (your task list & worktrees are kept \u2014 add --hard to also wipe the task index + UI state)");if(!X){if(!process.stdin.isTTY){console.log(`
177
- re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await wg(f?`
176
+ `),m6(process.stderr),process.exit(2);let X=J.includes("--hard"),G=J.includes("--yes")||J.includes("-y"),z=AY(),f=PY(),q=d6(o1(),"tasks.json"),B=xJ();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 \`${GY}\` socket`),X){let H=n6(q);console.log(` \u2022 DELETE the task index${H===null?"":` (${H} task(s))`} \u2014 ${q}`),console.log(` \u2022 DELETE the UI state \u2014 ${B}`)}if(console.log(" \u2022 NOT touch your git worktrees under ~/.kobe/worktrees/ or legacy repo-local roots"),!X)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 qg(X?`
178
178
  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:H,method:K}=await GX(G,Q);if(console.log(K==="absent"?" daemon: was not running (cleared any stale socket/pidfile)":` daemon: stopped via ${K}${H?` (pid ${H})`:""}`),await LY()){let{code:j}=await Gj(["kill-server"]);console.log(j===0?` tmux: killed all sessions on \`${oJ}\``:` tmux: no sessions on \`${oJ}\``)}else console.log(" tmux: not installed \u2014 no sessions to kill");if(f)await R6(q,"task index"),await R6(B,"UI state");console.log(`
180
- kobe: reset complete. Relaunch kobe to start fresh.`)}async function Pg(J=[]){if(J.includes("--help")||J.includes("-h")||J.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(`
179
+ Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:j,method:K}=await BG(z,f);if(console.log(K==="absent"?" daemon: was not running (cleared any stale socket/pidfile)":` daemon: stopped via ${K}${j?` (pid ${j})`:""}`),await CY()){let{code:H}=await LH(["kill-server"]);console.log(H===0?` tmux: killed all sessions on \`${GY}\``:` tmux: no sessions on \`${GY}\``)}else console.log(" tmux: not installed \u2014 no sessions to kill");if(X)await v6(q,"task index"),await v6(B,"UI state");console.log(`
180
+ kobe: reset complete. Relaunch kobe to start fresh.`)}async function jg(J=[]){if(J.includes("--help")||J.includes("-h")||J.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
181
  `));return}let Y=J.find((q)=>q.length>0);if(Y!==void 0)process.stderr.write(`kobe reload: unexpected argument "${Y}"
182
182
 
183
183
  Usage: kobe reload (takes no options)
184
- `),process.exit(2);if(!await LY()){console.log("kobe reload: tmux is not installed \u2014 no panes to reload");return}let{code:Z,stdout:f}=await Gj(["list-sessions","-F","#{session_name}"]);if(Z!==0){console.log(`kobe reload: no kobe tmux sessions on the \`${oJ}\` socket`);return}let X=f.split(`
185
- `).map((q)=>q.trim()).filter((q)=>q.length>0);if(X.length===0){console.log(`kobe reload: no kobe tmux sessions on the \`${oJ}\` socket`);return}let{refreshKobeWorkspacePanes:G}=await Promise.resolve().then(() => (ZJ(),ZY)),Q=0;for(let q of X)try{await G(q),Q++}catch(B){console.error(` failed to reload session "${q}": ${B instanceof Error?B.message:String(B)}`)}console.log(`kobe: reloaded Tasks/Ops panes in ${Q}/${X.length} session(s) \u2014 engine panes untouched`)}var iQ=S(()=>{uX();uQ();yf();EQ();c1();dQ();N1();QJ()});var u6={};Q1(u6,{runWebSubcommand:()=>$g});import{existsSync as N6}from"fs";import{homedir as vg}from"os";import{resolve as lQ}from"path";import{fileURLToPath as b6}from"url";function k6(){let J=process.env.KOBE_HOME_DIR?.trim();return J?`sandbox: ${J}`:`${vg()}/.kobe (production)`}function cg(){let J=b6(import.meta.url),Y=[lQ(J,"../../../../kobe-web/dist"),lQ(J,"../../web-ui")];for(let Z of Y)if(N6(`${Z}/index.html`))return Z;return}function dg(){let J=b6(import.meta.url),Y=[lQ(J,"../../../../kobe-web/pty-server.mjs"),lQ(J,"../../web-ui/pty-server.mjs")];for(let Z of Y)if(N6(Z))return Z;return}async function I6(J){try{let Y=Bun.spawn(["lsof","-nP",`-iTCP:${J}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(Y.stdout).text()).split(`
186
- `).map((f)=>Number.parseInt(f.trim(),10)).filter((f)=>Number.isFinite(f)&&f!==process.pid)}catch{return[]}}async function ng(J){let Y;try{Y=(await(await fetch(`http://localhost:${J}${E6}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Y!==T6)throw Error(`PTY port ${J} is in use by a non-kobe service; refusing to replace it`);let Z=await I6(J);for(let X of Z)try{process.kill(X,"SIGTERM")}catch{}let f=Date.now()+2000;while(Date.now()<f){if((await I6(J)).length===0)return;await new Promise((X)=>setTimeout(X,100))}}async function ig(J){let Y=dg();if(!Y)return null;let Z=J.webPort+2;if(J.takeover)await ng(Z);return Bun.spawn(["node",Y],{stdin:"ignore",stdout:"inherit",stderr:"inherit",env:{...process.env,KOBE_DAEMON_WEB_PORT:String(J.webPort),KOBE_PTY_PORT:String(Z)}})}async function lg(J,Y){if(process.env.KOBE_DAEMON_WEB_PORT=String(J),Y)process.env.KOBE_DAEMON_WEB_STATIC_DIR=Y;await zX();let Z;try{Z=(await(await fetch(`http://127.0.0.1:${J}${E6}`,{signal:AbortSignal.timeout(1500)})).text()).trim()}catch(f){throw Error(`daemon web transport is not reachable on :${J}; run \`kobe daemon restart\` so the daemon picks up this build (${f instanceof Error?f.message:String(f)})`)}if(Z!==T6)throw Error(`unexpected daemon web health marker on :${J}: ${Z}`);if(Y){if(!(await fetch(`http://127.0.0.1:${J}/`,{signal:AbortSignal.timeout(1500)})).ok)throw Error(`daemon web transport is up on :${J} but is not serving web assets; run \`kobe daemon restart\` so it picks up ${Y}`)}}async function $g(J){if(J.includes("--help")||J.includes("-h")){process.stdout.write(mg);return}let Y=5174,Z=J.indexOf("--port");if(Z!==-1){let f=Number.parseInt(J[Z+1]??"",10);if(!Number.isFinite(f))process.stderr.write(`kobe web: --port needs a number
187
- `),process.exit(2);Y=f}try{let f=J.includes("--routes-only")||J.includes("--bridge-only"),X=!J.includes("--no-takeover"),G=f?void 0:cg();if(!f&&!G)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 lg(Y,G);let Q=null,q=!1,B=()=>{if(q)return;q=!0,Q?.kill(),Q=null};if(f)process.stdout.write(`kobe daemon web transport listening on http://localhost:${Y} (routes only)
188
- `),process.stdout.write(` home: ${k6()}
189
- `);else if(Q=await ig({webPort:Y,takeover:X}),process.stdout.write(`kobe web \u2192 http://localhost:${Y}
190
- `),process.stdout.write(` home: ${k6()}
191
- `),!Q)process.stderr.write(`kobe web: PTY server not found; terminal tabs will be unavailable
192
- `);process.on("SIGINT",()=>{B(),process.exit(0)}),process.on("SIGTERM",()=>{B(),process.exit(0)}),Q?.exited.then(()=>{if(!q)process.stderr.write(`kobe web: PTY server exited
193
- `),B(),process.exit(1)}),await new Promise(()=>{})}catch(f){process.stderr.write(`kobe web: ${f instanceof Error?f.message:String(f)}
194
- `),process.exit(1)}}var T6="kobe-web",E6="/__kobe_web",mg=`Usage: kobe web [options]
184
+ `),process.exit(2);if(!await CY()){console.log("kobe reload: tmux is not installed \u2014 no panes to reload");return}let{code:Z,stdout:X}=await LH(["list-sessions","-F","#{session_name}"]);if(Z!==0){console.log(`kobe reload: no kobe tmux sessions on the \`${GY}\` socket`);return}let G=X.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 \`${GY}\` socket`);return}let{refreshKobeWorkspacePanes:z}=await Promise.resolve().then(() => (t1(),iJ)),f=0;for(let q of G)try{await z(q),f++}catch(B){console.error(` failed to reload session "${q}": ${B instanceof Error?B.message:String(B)}`)}console.log(`kobe: reloaded Tasks/Ops panes in ${f}/${G.length} session(s) \u2014 engine panes untouched`)}var of=S(()=>{hG();mf();bX();vf();n1();_f();N1();jJ()});var r6={};q1(r6,{runWebSubcommand:()=>Mg});import{existsSync as $6}from"fs";import{homedir as Hg}from"os";import{resolve as sf}from"path";import{fileURLToPath as a6}from"url";function i6(){let J=process.env.KOBE_HOME_DIR?.trim();return J?`sandbox: ${J}`:`${Hg()}/.kobe (production)`}function Vg(){let J=a6(import.meta.url),Y=[sf(J,"../../../../kobe-web/dist"),sf(J,"../../web-ui")];for(let Z of Y)if($6(`${Z}/index.html`))return Z;return}function Kg(){let J=a6(import.meta.url),Y=[sf(J,"../../../../kobe-web/pty-server.mjs"),sf(J,"../../web-ui/pty-server.mjs")];for(let Z of Y)if($6(Z))return Z;return}async function l6(J){try{let Y=Bun.spawn(["lsof","-nP",`-iTCP:${J}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(Y.stdout).text()).split(`
186
+ `).map((X)=>Number.parseInt(X.trim(),10)).filter((X)=>Number.isFinite(X)&&X!==process.pid)}catch{return[]}}async function Ug(J){let Y;try{Y=(await(await fetch(`http://localhost:${J}${_6}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Y!==p6)throw Error(`PTY port ${J} is in use by a non-kobe service; refusing to replace it`);let Z=await l6(J);for(let G of Z)try{process.kill(G,"SIGTERM")}catch{}let X=Date.now()+2000;while(Date.now()<X){if((await l6(J)).length===0)return;await new Promise((G)=>setTimeout(G,100))}}async function Lg(J){let Y=Kg();if(!Y)return null;let Z=J.webPort+2;if(J.takeover)await Ug(Z);return Bun.spawn(["node",Y],{stdin:"ignore",stdout:"inherit",stderr:"inherit",env:{...process.env,KOBE_DAEMON_WEB_PORT:String(J.webPort),KOBE_PTY_PORT:String(Z)}})}async function Dg(J,Y){if(process.env.KOBE_DAEMON_WEB_PORT=String(J),Y)process.env.KOBE_DAEMON_WEB_STATIC_DIR=Y;await jG();let Z;try{Z=(await(await fetch(`http://127.0.0.1:${J}${_6}`,{signal:AbortSignal.timeout(1500)})).text()).trim()}catch(X){throw Error(`daemon web transport is not reachable on :${J}; run \`kobe daemon restart\` so the daemon picks up this build (${X instanceof Error?X.message:String(X)})`)}if(Z!==p6)throw Error(`unexpected daemon web health marker on :${J}: ${Z}`);if(Y){if(!(await fetch(`http://127.0.0.1:${J}/`,{signal:AbortSignal.timeout(1500)})).ok)throw Error(`daemon web transport is up on :${J} but is not serving web assets; run \`kobe daemon restart\` so it picks up ${Y}`)}}async function Mg(J){if(J.includes("--help")||J.includes("-h")){process.stdout.write(Wg);return}let Y=5174,Z=J.indexOf("--port");if(Z!==-1){let X=Number.parseInt(J[Z+1]??"",10);if(!Number.isFinite(X))process.stderr.write(`kobe web: --port needs a number
187
+ `),process.exit(2);Y=X}try{let X=J.includes("--routes-only")||J.includes("--bridge-only"),G=!J.includes("--no-takeover"),z=X?void 0:Vg();if(!X&&!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 Dg(Y,z);let f=null,q=!1,B=()=>{if(q)return;q=!0,f?.kill(),f=null};if(X)process.stdout.write(`kobe daemon web transport listening on http://localhost:${Y} (routes only)
188
+ `),process.stdout.write(` home: ${i6()}
189
+ `);else if(f=await Lg({webPort:Y,takeover:G}),process.stdout.write(`kobe web \u2192 http://localhost:${Y}
190
+ `),process.stdout.write(` home: ${i6()}
191
+ `),!f)process.stderr.write(`kobe web: PTY server not found; terminal tabs will be unavailable
192
+ `);process.on("SIGINT",()=>{B(),process.exit(0)}),process.on("SIGTERM",()=>{B(),process.exit(0)}),f?.exited.then(()=>{if(!q)process.stderr.write(`kobe web: PTY server exited
193
+ `),B(),process.exit(1)}),await new Promise(()=>{})}catch(X){process.stderr.write(`kobe web: ${X instanceof Error?X.message:String(X)}
194
+ `),process.exit(1)}}var p6="kobe-web",_6="/__kobe_web",Wg=`Usage: kobe web [options]
195
195
 
196
196
  Launch the kobe web UI through daemon web transport on http://localhost:<port>.
197
197
 
@@ -200,45 +200,45 @@ Options:
200
200
  --routes-only Routes only; Vite serves the SPA separately.
201
201
  --no-takeover Reserved for compatibility; daemon owns the web port.
202
202
  -h, --help Show this help.
203
- `;var x6=S(()=>{DJ()});var h6={};Q1(h6,{runSkillSubcommand:()=>pg});function zj(){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: ${mQ}.`].join(`
204
- `)}function w6(J){let Y=mQ;for(let Z=0;Z<J.length;Z++){let f=J[Z];if(f==="--agent"){let X=J[Z+1];if(!X||X.startsWith("--"))process.stderr.write(`kobe skill: --agent requires a value
205
- `),process.exit(2);Y=X,Z++}else if(f.startsWith("--agent="))Y=f.slice(8);else process.stderr.write(`kobe skill: unknown flag "${f}"
203
+ `;var o6=S(()=>{CJ()});var t6={};q1(t6,{runSkillSubcommand:()=>Og});function DH(){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: ${af}.`].join(`
204
+ `)}function s6(J){let Y=af;for(let Z=0;Z<J.length;Z++){let X=J[Z];if(X==="--agent"){let G=J[Z+1];if(!G||G.startsWith("--"))process.stderr.write(`kobe skill: --agent requires a value
205
+ `),process.exit(2);Y=G,Z++}else if(X.startsWith("--agent="))Y=X.slice(8);else process.stderr.write(`kobe skill: unknown flag "${X}"
206
206
 
207
- ${zj()}
208
- `),process.exit(2)}return Y}async function pg(J){let[Y,...Z]=J;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(process.stdout.write(`${zj()}
209
- `),!Y)process.exitCode=2;return}if(!ag.includes(Y))process.stderr.write(`kobe skill: unknown verb "${Y}"
207
+ ${DH()}
208
+ `),process.exit(2)}return Y}async function Og(J){let[Y,...Z]=J;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(process.stdout.write(`${DH()}
209
+ `),!Y)process.exitCode=2;return}if(!Fg.includes(Y))process.stderr.write(`kobe skill: unknown verb "${Y}"
210
210
 
211
- ${zj()}
212
- `),process.exit(2);if(Y==="status"){let q=HG(),[B,H]=fj(),K=!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: ${K}`,` looked in: ${B}`,` ${H}`,q.installed&&!q.stale?"":" \u2192 run `kobe skill install` to install / refresh",""].join(`
213
- `));return}if(Y==="command"){process.stdout.write(`${cQ({agent:w6(Z)})}
214
- `);return}let f=w6(Z),X=Zj({agent:f});process.stdout.write(`kobe skill: running \`npx ${X.join(" ")}\`
215
- `);let Q=await Bun.spawn(["npx",...X],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(Q!==0)process.stderr.write(`
216
- kobe skill install failed (npx exited ${Q}). Is \`npx\` on PATH and are you online?
217
- You can run it yourself: ${cQ({agent:f})}
218
- `),process.exit(Q||1);process.stdout.write(`kobe skill: installed.
219
- `)}var ag;var P6=S(()=>{dQ();ag=["install","status","command"]});var qj={};Q1(qj,{runHookSubcommand:()=>YC,readTextWithTimeout:()=>d6,parseWorktreeAddPath:()=>i6,ensureGlobalKobeHooks:()=>XC});import{homedir as _g}from"os";import{join as m6,resolve as c6}from"path";async function d6(J,Y=rg){let Z;try{return await Promise.race([J(),new Promise((f)=>{Z=setTimeout(()=>f(""),Y)})])}finally{if(Z!==void 0)clearTimeout(Z)}}async function n6(){try{let J=await d6(()=>Bun.stdin.text());if(!J.trim())return{};let Y=JSON.parse(J);return Y&&typeof Y==="object"&&!Array.isArray(Y)?Y:{}}catch{return{}}}function og(J,Y){for(let Z=0;Z<J.length;Z++){if(J[Z]===Y)return J[Z+1];if(J[Z].startsWith(`${Y}=`))return J[Z].slice(Y.length+1)}return}function tg(J){return!!J&&typeof J==="object"&&!Array.isArray(J)}function eg(J){let Y=[],Z=/"([^"]*)"|'([^']*)'|(\S+)/g,f;while((f=Z.exec(J))!==null)Y.push(f[1]??f[2]??f[3]??"");return Y}function i6(J){let Y=eg(J),Z=new Set(["-b","-B","--reason"]);for(let f=0;f+1<Y.length;f++){if(Y[f]!=="worktree"||Y[f+1]!=="add")continue;let X=f+2;while(X<Y.length){let G=Y[X];if(G==="&&"||G==="||"||G===";"||G==="|"||G===">"||G===">>")break;if(G.startsWith("-")){X+=Z.has(G)?2:1;continue}return G}}return}async function JC(){let J=await n6(),Y=tg(J.tool_input)?J.tool_input:{},Z=typeof Y.command==="string"?Y.command:"";if(!Z.includes("worktree"))return;let f=i6(Z);if(!f)return;let X=typeof J.cwd==="string"&&J.cwd?J.cwd:process.cwd(),G=c6(X,f),Q=await dJ();if(!Q)return;try{await Q.request("worktree.reconcile",{cwd:X,worktreePath:G})}finally{Q.close()}}async function YC(J){let[Y,...Z]=J;if(Y==="setup"){await GC(Z);return}if(Y===sg){try{await JC()}catch{}return}try{if(!Y||!Bz(Y))return;let f=await n6(),X=og(Z,"--task-id"),G=typeof f.cwd==="string"&&f.cwd?f.cwd:process.cwd(),Q;for(let B of l6())if(Q=B.activityDetailFromPayload(Y,f),Q)break;let q=await dJ();if(!q)return;try{await q.request("engine.reportEvent",{...X?{taskId:X}:{cwd:G},kind:Y,...Q?{detail:Q}:{}})}finally{q.close()}}catch{}}function ZC(){return h1.map((J)=>bB(J)).filter((J)=>J.supportsWorktreeSync())}function l6(){return h1.map((J)=>bB(J)).filter((J)=>J.supportsHooks())}function Qj(){return m6(_g(),".claude","settings.json")}function fC(J){if(!J||J==="off")return;if(J==="global")return Qj();if(J.startsWith("repo:"))return m6(c6(J.slice(5)),".claude","settings.json");return J}async function XC(){try{let J=Qj();for(let Y of l6())await Y.installActivityHooks(J),await Y.installWorktreeWatchHook(J);await $6()}catch{}}async function $6(){let J=ZC();if(J.length===0)return;let Y=C1(v6),Z=new Set([Qj()]),f=fC(Y);if(f)Z.add(f);for(let X of J)for(let G of Z)await X.removeWorktreeSyncHook(G);if(Y!=="off")d1(v6,"off")}async function GC(J){await $6(),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 rg=500,sg="worktree-created",v6="externalWorktreeSync";var Bj=S(()=>{DJ();TB();Hz();A1();zJ()});function p6(J){var Y;if(J>=55296&&J<=57343||J>1114111)return 65533;return(Y=zC.get(J))!==null&&Y!==void 0?Y:J}var Hj,zC,a6;var _6=S(()=>{zC=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]]),a6=(Hj=String.fromCodePoint)!==null&&Hj!==void 0?Hj:(J)=>{let Y="";if(J>65535)J-=65536,Y+=String.fromCharCode(J>>>10&1023|55296),J=56320|J&1023;return Y+=String.fromCharCode(J),Y}});function r6(J){let Y=typeof atob==="function"?atob(J):typeof Buffer.from==="function"?Buffer.from(J,"base64").toString("binary"):new Buffer(J,"base64").toString("binary"),Z=Y.length&-2,f=new Uint16Array(Z/2);for(let X=0,G=0;X<Z;X+=2){let Q=Y.charCodeAt(X),q=Y.charCodeAt(X+1);f[G++]=Q|q<<8}return f}var o6;var s6=S(()=>{o6=r6("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 fJ;var t6=S(()=>{(function(J){J[J.VALUE_LENGTH=49152]="VALUE_LENGTH",J[J.FLAG13=8192]="FLAG13",J[J.BRANCH_LENGTH=8064]="BRANCH_LENGTH",J[J.JUMP_TABLE=127]="JUMP_TABLE"})(fJ||(fJ={}))});function jj(J){return J>=b1.ZERO&&J<=b1.NINE}function QC(J){return J>=b1.UPPER_A&&J<=b1.UPPER_F||J>=b1.LOWER_A&&J<=b1.LOWER_F}function qC(J){return J>=b1.UPPER_A&&J<=b1.UPPER_Z||J>=b1.LOWER_A&&J<=b1.LOWER_Z||jj(J)}function BC(J){return J===b1.EQUALS||qC(J)}class Wj{constructor(J,Y,Z){this.decodeTree=J,this.emitCodePoint=Y,this.errors=Z,this.state=p1.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=pY.Strict,this.runConsumed=0}startEntity(J){this.decodeMode=J,this.state=p1.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(J,Y){switch(this.state){case p1.EntityStart:{if(J.charCodeAt(Y)===b1.NUM)return this.state=p1.NumericStart,this.consumed+=1,this.stateNumericStart(J,Y+1);return this.state=p1.NamedEntity,this.stateNamedEntity(J,Y)}case p1.NumericStart:return this.stateNumericStart(J,Y);case p1.NumericDecimal:return this.stateNumericDecimal(J,Y);case p1.NumericHex:return this.stateNumericHex(J,Y);case p1.NamedEntity:return this.stateNamedEntity(J,Y)}}stateNumericStart(J,Y){if(Y>=J.length)return-1;if((J.charCodeAt(Y)|e6)===b1.LOWER_X)return this.state=p1.NumericHex,this.consumed+=1,this.stateNumericHex(J,Y+1);return this.state=p1.NumericDecimal,this.stateNumericDecimal(J,Y)}stateNumericHex(J,Y){while(Y<J.length){let Z=J.charCodeAt(Y);if(jj(Z)||QC(Z)){let f=Z<=b1.NINE?Z-b1.ZERO:(Z|e6)-b1.LOWER_A+10;this.result=this.result*16+f,this.consumed++,Y++}else return this.emitNumericEntity(Z,3)}return-1}stateNumericDecimal(J,Y){while(Y<J.length){let Z=J.charCodeAt(Y);if(jj(Z))this.result=this.result*10+(Z-b1.ZERO),this.consumed++,Y++;else return this.emitNumericEntity(Z,2)}return-1}emitNumericEntity(J,Y){var Z;if(this.consumed<=Y)return(Z=this.errors)===null||Z===void 0||Z.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(J===b1.SEMI)this.consumed+=1;else if(this.decodeMode===pY.Strict)return 0;if(this.emitCodePoint(p6(this.result),this.consumed),this.errors){if(J!==b1.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(J,Y){let{decodeTree:Z}=this,f=Z[this.treeIndex],X=(f&fJ.VALUE_LENGTH)>>14;while(Y<J.length){if(X===0&&(f&fJ.FLAG13)!==0){let Q=(f&fJ.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let q=f&fJ.JUMP_TABLE;if(J.charCodeAt(Y)!==q)return this.result===0?0:this.emitNotTerminatedNamedEntity();Y++,this.excess++,this.runConsumed++}while(this.runConsumed<Q){if(Y>=J.length)return-1;let q=this.runConsumed-1,B=Z[this.treeIndex+1+(q>>1)],H=q%2===0?B&255:B>>8&255;if(J.charCodeAt(Y)!==H)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();Y++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(Q>>1),f=Z[this.treeIndex],X=(f&fJ.VALUE_LENGTH)>>14}if(Y>=J.length)break;let G=J.charCodeAt(Y);if(G===b1.SEMI&&X!==0&&(f&fJ.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,X,this.consumed+this.excess);if(this.treeIndex=jC(Z,f,this.treeIndex+Math.max(1,X),G),this.treeIndex<0)return this.result===0||this.decodeMode===pY.Attribute&&(X===0||BC(G))?0:this.emitNotTerminatedNamedEntity();if(f=Z[this.treeIndex],X=(f&fJ.VALUE_LENGTH)>>14,X!==0){if(G===b1.SEMI)return this.emitNamedEntityData(this.treeIndex,X,this.consumed+this.excess);if(this.decodeMode!==pY.Strict&&(f&fJ.FLAG13)===0)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}Y++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var J;let{result:Y,decodeTree:Z}=this,f=(Z[Y]&fJ.VALUE_LENGTH)>>14;return this.emitNamedEntityData(Y,f,this.consumed),(J=this.errors)===null||J===void 0||J.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(J,Y,Z){let{decodeTree:f}=this;if(this.emitCodePoint(Y===1?f[J]&~(fJ.VALUE_LENGTH|fJ.FLAG13):f[J+1],Z),Y===3)this.emitCodePoint(f[J+2],Z);return Z}end(){var J;switch(this.state){case p1.NamedEntity:return this.result!==0&&(this.decodeMode!==pY.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case p1.NumericDecimal:return this.emitNumericEntity(0,2);case p1.NumericHex:return this.emitNumericEntity(0,3);case p1.NumericStart:return(J=this.errors)===null||J===void 0||J.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case p1.EntityStart:return 0}}}function HC(J){let Y="",Z=new Wj(J,(f)=>Y+=a6(f));return function(X,G){let Q=0,q=0;while((q=X.indexOf("&",q))>=0){Y+=X.slice(Q,q),Z.startEntity(G);let H=Z.write(X,q+1);if(H<0){Q=q+Z.end();break}Q=q+H,q=H===0?Q+1:Q}let B=Y+X.slice(Q);return Y="",B}}function jC(J,Y,Z,f){let X=(Y&fJ.BRANCH_LENGTH)>>7,G=Y&fJ.JUMP_TABLE;if(X===0)return G!==0&&f===G?Z:-1;if(G){let H=f-G;return H<0||H>=X?-1:J[Z+H]-1}let Q=X+1>>1,q=0,B=X-1;while(q<=B){let H=q+B>>>1,K=H>>1,U=J[Z+K]>>(H&1)*8&255;if(U<f)q=H+1;else if(U>f)B=H-1;else return J[Z+Q+H]}return-1}function jf(J,Y=pY.Legacy){return WC(J,Y)}var b1,e6=32,p1,pY,WC;var JK=S(()=>{_6();s6();t6();(function(J){J[J.NUM=35]="NUM",J[J.SEMI=59]="SEMI",J[J.EQUALS=61]="EQUALS",J[J.ZERO=48]="ZERO",J[J.NINE=57]="NINE",J[J.LOWER_A=97]="LOWER_A",J[J.LOWER_F=102]="LOWER_F",J[J.LOWER_X=120]="LOWER_X",J[J.LOWER_Z=122]="LOWER_Z",J[J.UPPER_A=65]="UPPER_A",J[J.UPPER_F=70]="UPPER_F",J[J.UPPER_Z=90]="UPPER_Z"})(b1||(b1={}));(function(J){J[J.EntityStart=0]="EntityStart",J[J.NumericStart=1]="NumericStart",J[J.NumericDecimal=2]="NumericDecimal",J[J.NumericHex=3]="NumericHex",J[J.NamedEntity=4]="NamedEntity"})(p1||(p1={}));(function(J){J[J.Legacy=0]="Legacy",J[J.Strict=1]="Strict",J[J.Attribute=2]="Attribute"})(pY||(pY={}));WC=HC(o6)});var YK,ZK;var XK=S(()=>{JK();(function(J){J[J.XML=0]="XML",J[J.HTML=1]="HTML"})(YK||(YK={}));(function(J){J[J.UTF8=0]="UTF8",J[J.ASCII=1]="ASCII",J[J.Extensive=2]="Extensive",J[J.Attribute=3]="Attribute",J[J.Text=4]="Text"})(ZK||(ZK={}))});import{CliRenderer as KC,createCliRenderer as UC,engine as LC}from"@opentui/core";import{createTestRenderer as _P}from"@opentui/core/testing";import{ASCIIFontRenderable as DC,BoxRenderable as MC,CodeRenderable as FC,DiffRenderable as OC,InputRenderable as AC,LineNumberRenderable as RC,MarkdownRenderable as gC,ScrollBoxRenderable as CC,SelectRenderable as SC,TabSelectRenderable as yC,TextareaRenderable as kC,TextAttributes as Vj,TextNodeRenderable as IC,TextRenderable as NC}from"@opentui/core";import{engine as sP,Timeline as tP}from"@opentui/core";import{BaseRenderable as HK,createTextAttributes as TC,InputRenderable as Kj,InputRenderableEvents as jG,isTextNodeRenderable as Dj,parseColor as GK,Renderable as EC,RootTextNodeRenderable as uC,ScrollBoxRenderable as xC,SelectRenderable as zK,SelectRenderableEvents as Uj,TabSelectRenderable as QK,TabSelectRenderableEvents as Lj,TextNodeRenderable as wC,TextRenderable as jK}from"@opentui/core";import{BaseRenderable as lC,isTextNodeRenderable as $C,TextNodeRenderable as aC,TextRenderable as pC,Yoga as BK}from"@opentui/core";import{BoxRenderable as qv,RootRenderable as Bv}from"@opentui/core";import{TimeToFirstDrawRenderable as sC}from"@opentui/core";import{createSlotRegistry as Wv}from"@opentui/core";function PC({createElement:J,createTextNode:Y,createSlotNode:Z,isTextNode:f,replaceText:X,insertNode:G,removeNode:Q,setProperty:q,getParentNode:B,getFirstChild:H,getNextSibling:K}){function j(R,C,g,y){if(g!==void 0&&!y)y=[];if(typeof C!=="function")return U(R,C,y,g);BY(($)=>U(R,C(),$,g),y)}function U(R,C,g,y,$){while(typeof g==="function")g=g();if(C===g)return g;let G0=typeof C,t=y!==void 0;if(G0==="string"||G0==="number"){if(G0==="number")C=C.toString();if(t){let Z0=g[0];if(Z0&&f(Z0))X(Z0,C);else Z0=Y(C);g=D(R,g,y,Z0)}else if(g!==""&&typeof g==="string")X(H(R),g=C);else D(R,g,y,Y(C)),g=C}else if(C==null||G0==="boolean")g=D(R,g,y);else if(G0==="function")return BY(()=>{let Z0=C();while(typeof Z0==="function")Z0=Z0();g=U(R,Z0,g,y)}),()=>g;else if(Array.isArray(C)){let Z0=[];if(L(Z0,C,$))return BY(()=>g=U(R,Z0,g,y,!0)),()=>g;if(Z0.length===0){let u=D(R,g,y);if(t)return g=u}else if(Array.isArray(g))if(g.length===0)O(R,Z0,y);else F(R,g,Z0);else if(g==null||g==="")O(R,Z0);else F(R,t&&g||[H(R)],Z0);g=Z0}else{if(Array.isArray(g)){if(t)return g=D(R,g,y,C);D(R,g,null,C)}else if(g==null||g===""||!H(R))G(R,C);else A(R,C,H(R));g=C}return g}function L(R,C,g){let y=!1;for(let $=0,G0=C.length;$<G0;$++){let t=C[$],Z0;if(t==null||t===!0||t===!1);else if(Array.isArray(t))y=L(R,t)||y;else if((Z0=typeof t)==="string"||Z0==="number")R.push(Y(t));else if(Z0==="function")if(g){while(typeof t==="function")t=t();y=L(R,Array.isArray(t)?t:[t])||y}else R.push(t),y=!0;else R.push(t)}return y}function F(R,C,g){let y=g.length,$=C.length,G0=y,t=0,Z0=0,u=K(C[$-1]),B0=null;while(t<$||Z0<G0){if(C[t]===g[Z0]){t++,Z0++;continue}while(C[$-1]===g[G0-1])$--,G0--;if($===t){let Y0=G0<y?Z0?K(g[Z0-1]):g[G0-Z0]:u;while(Z0<G0)G(R,g[Z0++],Y0)}else if(G0===Z0)while(t<$){if(!B0||!B0.has(C[t]))Q(R,C[t]);t++}else if(C[t]===g[G0-1]&&g[Z0]===C[$-1]){let Y0=K(C[--$]);G(R,g[Z0++],K(C[t++])),G(R,g[--G0],Y0),C[$]=g[G0]}else{if(!B0){B0=new Map;let W0=Z0;while(W0<G0)B0.set(g[W0],W0++)}let Y0=B0.get(C[t]);if(Y0!=null)if(Z0<Y0&&Y0<G0){let W0=t,o=1,_;while(++W0<$&&W0<G0){if((_=B0.get(C[W0]))==null||_!==Y0+o)break;o++}if(o>Y0-Z0){let r=C[t];while(Z0<Y0)G(R,g[Z0++],r)}else A(R,g[Z0++],C[t++])}else t++;else Q(R,C[t++])}}}function D(R,C,g,y){if(g===void 0){let G0;while(G0=H(R))Q(R,G0);return y&&G(R,y),y??""}let $=y||Z();if(C.length){let G0=!1;for(let t=C.length-1;t>=0;t--){let Z0=C[t];if($!==Z0){let u=B(Z0)===R;if(!G0&&!t)u?A(R,$,Z0):G(R,$,g);else u&&Q(R,Z0)}else G0=!0}}else G(R,$,g);return[$]}function O(R,C,g){for(let y=0,$=C.length;y<$;y++)G(R,C[y],g)}function A(R,C,g){G(R,C,g),Q(R,g)}function l(R,C,g={},y){if(C||(C={}),!y)BY(()=>g.children=U(R,C.children,g.children));return BY(()=>C.ref&&C.ref(R)),BY(()=>{for(let $ in C){if($==="children"||$==="ref")continue;let G0=C[$];if(G0===g[$])continue;q(R,$,G0,g[$]),g[$]=G0}}),g}return{render(R,C){let g;return hZ((y)=>{g=y,j(C,R())}),g},insert:j,spread(R,C,g){if(typeof C==="function")BY((y)=>l(R,C(),y,g));else l(R,C,void 0,g)},createElement:J,createTextNode:Y,insertNode:G,setProp(R,C,g,y){return q(R,C,g,y),g},mergeProps:Zz,effect:BY,memo:hC,createComponent:EW,use(R,C,g){return n1(()=>R(C,g))}}}function vC(J){let Y=PC(J);return Y.mergeProps=Zz,Y}function Rj(J){if(!$Q.has(J))$Q.set(J,0);let Y=$Q.get(J)+1;return $Q.set(J,Y),`${J}-${Y}`}function mC(J,Y,Z){if(_1("Inserting node:",l1(Y),"into parent:",l1(J),"with anchor:",l1(Z),Y instanceof WX),Y instanceof WG)Y.parent=J,Y=Y.getSlotChild(J);if(Z&&Z instanceof WG)Z=Z.getSlotChild(J);if(Dj(Y)){if(!(J instanceof jK)&&!Dj(J))throw Error(`Orphan text error: "${Y.toChunks().map((G)=>G.text).join("")}" must have a <text> as a parent: ${J.id} above ${Y.id}`)}if(!(J instanceof HK))throw console.error("[INSERT]","Tried to mount a non base renderable"),Error("Tried to mount a non base renderable");if(!Z){J.add(Y);return}let f=Mj(J),X=f.findIndex((G)=>G.id===Z.id);if(X===-1)_1("[INSERT]","Could not find anchor",l1(J),l1(Z),"[children]",...f.map((G)=>G.id));J.add(Y,X)}function cC(J,Y){if(_1("Removing node:",l1(Y),"from parent:",l1(J)),Y instanceof WG)Y.parent=null,Y=Y.getSlotChild(J);J.remove(Y.id),process.nextTick(()=>{if(Y instanceof HK&&!Y.parent){Y.destroyRecursively();return}})}function dC(J){_1("Creating text node:",J);let Y=Rj("text-node");if(typeof J==="number")J=J.toString();return WX.fromString(jf(J),{id:Y})}function nC(){let J=Rj("slot-node");return _1("Creating slot node",J),new WG(J)}function qK(J){_1("Getting parent of node:",l1(J));let Y=J.parent??void 0;if(Y instanceof uC)Y=Y.textParent??void 0;let Z=Y?.parent?.parent?.parent;if(Z instanceof xC&&Z.content===Y)Y=Z;return Y}function rC(J){Object.assign(MK,J)}function oC(){return MK}var Aj,s1=()=>{let J=SJ(Aj);if(!J)throw Error("No renderer found");return J},bC=(J)=>{let Y=s1();o1(()=>{Y.on("resize",J)}),i1(()=>{Y.off("resize",J)})},RY=()=>{let J=s1(),[Y,Z]=p({width:J.width,height:J.height});return bC((X,G)=>{Z({width:X,height:G})}),Y},hC=(J)=>V0(()=>J()),$Q,_1=(...J)=>{if(process.env.DEBUG)console.log("[Reconciler]",...J)},WX,l1=(J)=>{if(!J)return;return J.id},Mj=(J)=>{let Y;if(J instanceof jK)Y=J.getTextChildren();else Y=J.getChildren();return Y},iC,w,r0,k,V,T,W,M,Gv,z,WK,gZ,gj,VK,KK,WG,VG,aQ,Fj,Oj,UK,LK,DK,_C,MK,tC=(J,Y)=>{let Z,f=!1,X=!1,G=!0,Q=!1,q=J.destroy.bind(J),B=()=>{if(X)return;if(!Z){f=!0;return}X=!0,Z()};J.once("destroy",B),J.destroy=()=>{if(G){Q=!0;return}q()};try{Z=iC(()=>k(Aj.Provider,{get value(){return J},get children(){return k(Y,{})}}),J.root)}finally{G=!1,J.destroy=q}if(f)B();if(Q)q()},FK=async(J,Y={})=>{let Z=Y instanceof KC?Y:await UC({...Y,onDestroy:()=>{Y.onDestroy?.()}});LC.attach(Z),tC(Z,J)};var h=S(()=>{q1();XK();q1();q1();q1();Aj=HY();$Q=new Map;WX=class WX extends wC{static fromString(J,Y={}){let Z=new WX(Y);return Z.add(J),Z}};({render:iC,effect:w,memo:r0,createComponent:k,createElement:V,createTextNode:T,insertNode:W,insert:M,spread:Gv,setProp:z,mergeProps:WK,use:gZ}=vC({createElement(J){_1("Creating element:",J);let Y=Rj(J),Z=SJ(Aj);if(!Z)throw Error("No renderer found");let f=oC();if(!f[J])throw Error(`[Reconciler] Unknown component type: ${J}`);let X=new f[J](Z,{id:Y});return _1("Element created with id:",Y),X},createTextNode:dC,createSlotNode:nC,replaceText(J,Y){if(_1("Replacing text:",Y,"in node:",l1(J)),!(J instanceof WX))return;J.replace(jf(Y),0)},setProperty(J,Y,Z,f){if(Y.startsWith("on:")){let X=Y.slice(3);if(Z)J.on(X,Z);if(f)J.off(X,f);return}if(Dj(J)){if(Y==="href"){J.link={url:Z};return}if(Y==="style"){J.attributes|=TC(Z),J.fg=Z.fg?GK(Z.fg):J.fg,J.bg=Z.bg?GK(Z.bg):J.bg;return}return}switch(Y){case"id":_1("Id mapped",J.id,"=",Z),J[Y]=Z;break;case"focused":if(!(J instanceof EC))return;if(Z)J.focus();else J.blur();break;case"onChange":let X=void 0;if(J instanceof zK)X=Uj.SELECTION_CHANGED;else if(J instanceof QK)X=Lj.SELECTION_CHANGED;else if(J instanceof Kj)X=jG.CHANGE;if(!X)break;if(Z)J.on(X,Z);if(f)J.off(X,f);break;case"onInput":if(J instanceof Kj){if(Z)J.on(jG.INPUT,Z);if(f)J.off(jG.INPUT,f)}break;case"onSubmit":if(J instanceof Kj){if(Z)J.on(jG.ENTER,Z);if(f)J.off(jG.ENTER,f)}else J[Y]=Z;break;case"onSelect":if(J instanceof zK){if(Z)J.on(Uj.ITEM_SELECTED,Z);if(f)J.off(Uj.ITEM_SELECTED,f)}else if(J instanceof QK){if(Z)J.on(Lj.ITEM_SELECTED,Z);if(f)J.off(Lj.ITEM_SELECTED,f)}break;case"style":for(let G in Z){let Q=Z[G];if(f!==void 0&&Q===f[G])continue;J[G]=Q}break;case"text":case"content":{let G=typeof Z==="string"?Z:Array.isArray(Z)?Z.join(""):`${Z}`;J[Y]=jf(G);break}default:J[Y]=Z}},isTextNode(J){return J instanceof WX},insertNode:mC,removeNode:cC,getParentNode:qK,getFirstChild(J){_1("Getting first child of node:",l1(J));let Y=Mj(J)[0];if(!Y){_1("No first child found for node:",l1(J));return}return _1("First child found:",l1(Y),"for node:",l1(J)),Y},getNextSibling(J){_1("Getting next sibling of node:",l1(J));let Y=qK(J);if(!Y){_1("No parent found for node:",l1(J));return}let Z=Mj(Y),f=Z.indexOf(J);if(f===-1||f===Z.length-1){_1("No next sibling found for node:",l1(J));return}let X=Z[f+1];if(!X){_1("Next sibling is null for node:",l1(J));return}return _1("Next sibling found:",l1(X),"for node:",l1(J)),X}}));gj=class gj extends lC{constructor(J){super({id:J})}add(J,Y){throw Error("Can't add children on an Slot renderable")}getChildren(){return[]}remove(J){}insertBefore(J,Y){throw Error("Can't add children on an Slot renderable")}getRenderable(J){return}getChildrenCount(){return 0}requestRender(){}findDescendantById(J){return}};VK=class VK extends aC{slotParent;destroyed=!1;constructor(J,Y){super({id:J});this._visible=!1,this.slotParent=Y}destroy(){if(this.destroyed)return;this.destroyed=!0,this.slotParent?.destroy(),super.destroy()}};KK=class KK extends gj{yogaNode;slotParent;destroyed=!1;constructor(J,Y){super(J);this._visible=!1,this.slotParent=Y,this.yogaNode=BK.default.Node.create(),this.yogaNode.setDisplay(BK.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};WG=class WG extends gj{layoutNode;textNode;destroyed=!1;constructor(J){super(J);this._visible=!1}getSlotChild(J){if($C(J)||J instanceof pC){if(!this.textNode)this.textNode=new VK(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new KK(`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()}};VG=class VG extends IC{_ctx;constructor(J,Y){super(Y);this._ctx=J}};aQ=class aQ extends VG{constructor(J,Y){super(null,J);if(Y==="b"||Y==="strong")this.attributes=(this.attributes||0)|Vj.BOLD;else if(Y==="i"||Y==="em")this.attributes=(this.attributes||0)|Vj.ITALIC;else if(Y==="u")this.attributes=(this.attributes||0)|Vj.UNDERLINE}};Fj=class Fj extends aQ{constructor(J){super(J,"b")}};Oj=class Oj extends aQ{constructor(J){super(J,"i")}};UK=class UK extends aQ{constructor(J){super(J,"u")}};LK=class LK extends VG{constructor(J,Y){super(null,Y);this.add()}add(){return super.add(`
221
- `)}};DK=class DK extends VG{constructor(J,Y){let Z={...Y,link:{url:Y.href}};super(null,Z)}};_C={box:MC,text:NC,input:AC,select:SC,textarea:kC,ascii_font:DC,tab_select:yC,scrollbox:CC,code:FC,diff:OC,line_number:RC,markdown:gC,span:VG,strong:Fj,b:Fj,em:Oj,i:Oj,u:UK,br:LK,a:DK},MK={..._C};rC({time_to_first_draw:sC})});function eC(J){let Y=J?.changes;if(!Y||typeof Y!=="object"||Array.isArray(Y))return null;let Z=new Map;for(let[f,X]of Object.entries(Y)){let G=X;if(typeof G?.added!=="number"||typeof G.deleted!=="number")return null;Z.set(f,{added:G.added,deleted:G.deleted})}return Z}function JS(J,Y){if(J.size!==Y.size)return!1;for(let[Z,f]of J){let X=Y.get(Z);if(!X||!AY(f,X))return!1}return!0}class XJ{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(J,Y={}){this.client=J;let[Z,f]=p([]),[X,G]=p(null),[Q,q]=p(null),[B,H]=p(null),[K,j]=p(new Map),[U,L]=p(new Map),[F,D]=p(null),[O,A]=p(null),[l,R]=p(null),[C,g]=p("online");this.tasksAcc=Z,this.setTasks=(y)=>f(()=>y),this.activeTaskAcc=X,this.setActiveTaskSig=(y)=>G(()=>y),this.updateAcc=Q,this.setUpdateSig=(y)=>q(()=>y),this.daemonVersionAcc=B,this.setDaemonVersionSig=(y)=>H(()=>y),this.engineStateAcc=K,this.setEngineStateSig=(y)=>j(()=>y),this.taskJobsAcc=U,this.setTaskJobsSig=(y)=>L(()=>y),this.worktreeChangesAcc=F,this.setWorktreeChangesSig=(y)=>D(()=>y),this.uiPrefsAcc=O,this.setUiPrefsSig=(y)=>A(()=>y),this.keybindingsRevAcc=l,this.setKeybindingsRevSig=(y)=>R(()=>y),this.connectionStateAcc=C,this.setConnectionState=(y)=>g(()=>y),this.ensureReachable=Y.ensureReachable??zX,this.role=Y.role??"pane",this.channels=Y.channels,this.subscribesTasks=!Y.channels||Y.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")uY("orch","daemon socket closed \u2014 starting non-spawning reconnect loop"),this.reconnectLoop()})}async reconnectLoop(){if(this.reconnecting)return;this.reconnecting=!0;let J=500,Y=0;while(!this.client.isDisposed){if(await new Promise((Z)=>setTimeout(Z,J)),this.client.isDisposed)break;Y++;try{await this.init(),uY("orch",`reconnected and re-subscribed after ${Y} attempt(s) \u2014 task list re-synced`),this.reconnecting=!1;return}catch(Z){if(Y===1||Y%10===0)fZ("orch-reconnect",Z);J=Math.min(J*2,3000)}}this.reconnecting=!1}async init(){let J=await this.client.request("hello",{protocolVersion:wJ,minProtocolVersion:ZZ}),Y=typeof J.protocolVersion==="number"?J.protocolVersion:wJ,Z=typeof J.minProtocolVersion==="number"?J.minProtocolVersion:Y;if(!Gz({localVersion:wJ,localMin:ZZ,remoteVersion:Y,remoteMin:Z}))throw Error(`kobe daemon is protocol v${Y} (min v${Z}); this client is v${wJ} (min v${ZZ}). Restart the daemon (\`kobe daemon restart\`) or upgrade kobe.`);if(this.setDaemonVersionSig(typeof J.kobeVersion==="string"?J.kobeVersion:null),J.tasks&&this.subscribesTasks)this.setTasks(J.tasks.map(KG));if(await this.client.subscribe({role:this.role,channels:this.channels}),J.capabilities?.includes("worktree.changes")){if(this.worktreeChangesAcc()===null)this.setWorktreeChangesSig(new Map)}else this.setWorktreeChangesSig(null);this.setConnectionState("online"),uY("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()=>dW(this.daemonVersionAcc()??void 0,n0)}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(J){return this.tasksAcc().find((Y)=>Y.id===J)}subscribeTasks(J){try{J(this.listTasks())}catch(Z){console.error("[kobe RemoteOrchestrator] task listener threw on subscribe:",Z)}let Y=!0;return hZ((Z)=>{return p0(()=>{let f=this.tasksAcc();if(Y){Y=!1;return}try{J(f)}catch(X){console.error("[kobe RemoteOrchestrator] task listener threw:",X)}}),Z})}async createTask(J){let{modelEffort:Y,...Z}=J,f=await this.client.request("task.create",{...Z,effort:Y});return KG(f.task)}async ensureMainTask(J){let Y=await this.client.request("task.ensureMain",{repo:J});return KG(Y.task)}async ensureWorktree(J){return(await this.client.request("task.ensureWorktree",{taskId:String(J)})).worktreePath}async setTitle(J,Y){await this.client.request("task.rename",{taskId:String(J),title:Y})}async setBranch(J,Y){await this.client.request("task.setBranch",{taskId:String(J),branch:Y})}async setVendor(J,Y){await this.client.request("task.setVendor",{taskId:String(J),vendor:Y})}async setPinned(J,Y){await this.client.request("task.pin",{taskId:String(J),pinned:Y})}async moveTask(J,Y){await this.client.request("task.move",{taskId:String(J),direction:Y<0?"up":"down"})}async setArchived(J,Y){await this.client.request("task.archive",{taskId:String(J),archived:Y})}async setStatus(J,Y){await this.client.request("task.status",{taskId:String(J),status:Y})}async deleteTask(J,Y){await this.client.request("task.delete",{taskId:String(J),force:Y?.force})}async discoverAdoptableWorktrees(J){return(await this.client.request("worktree.discoverAdoptable",{repo:J})).worktrees}async adoptWorktree(J){let Y=await this.client.request("worktree.adopt",J);return KG(Y.task)}async setActiveTask(J){await this.client.request("task.setActive",{taskId:J===null?null:String(J)})}handleEvent(J,Y){if(J==="task.snapshot"){let Z=Y?.tasks;if(Array.isArray(Z))this.setTasks(Z.map(KG)),this.pruneEngineState(Z),this.pruneTaskJobs(Z);return}if(J==="active-task"){let Z=Y?.taskId;this.setActiveTaskSig(typeof Z==="string"?Z:null);return}if(J==="update"){let Z=Y?.info;this.setUpdateSig(Z??null);return}if(J==="engine-state"){let Z=Y;if(typeof Z?.taskId!=="string"||typeof Z.state!=="string")return;let f=new Map(this.engineStateAcc());if(Z.state==="idle")f.delete(Z.taskId);else f.set(Z.taskId,{state:Z.state,detail:Z.detail,at:typeof Z.at==="number"?Z.at:0});this.setEngineStateSig(f);return}if(J==="task.jobs"){let Z=Y;if(typeof Z?.taskId!=="string"||Z.kind!=="ensureWorktree")return;let f=this.taskJobsAcc();if(Z.phase==="running"){let X=new Map(f);X.set(Z.taskId,{kind:Z.kind}),this.setTaskJobsSig(X);return}if((Z.phase==="done"||Z.phase==="error")&&f.has(Z.taskId)){let X=new Map(f);X.delete(Z.taskId),this.setTaskJobsSig(X)}return}if(J==="worktree.changes"){let Z=eC(Y);if(!Z)return;let f=this.worktreeChangesAcc();if(f&&JS(f,Z))return;this.setWorktreeChangesSig(Z);return}if(J==="ui-prefs"){let Z=Y;if(typeof Z?.theme!=="string")return;this.setUiPrefsSig({theme:Z.theme,transparentBackground:Z.transparentBackground===!0,focusAccent:typeof Z.focusAccent==="string"?Z.focusAccent:null,sortMode:Z.sortMode==="recent"?"recent":"default",keysCollapsed:Z.keysCollapsed===!0,projectFilter:typeof Z.projectFilter==="string"&&Z.projectFilter.length>0?Z.projectFilter:null});return}if(J==="keybindings"){let Z=Y;if(typeof Z?.rev!=="number")return;this.setKeybindingsRevSig(Z.rev);return}}pruneEngineState(J){let Y=this.engineStateAcc();if(Y.size===0)return;let Z=new Set(J.map((X)=>X.id)),f=null;for(let X of Y.keys()){if(Z.has(X))continue;if(!f)f=new Map(Y);f.delete(X)}if(f)this.setEngineStateSig(f)}pruneTaskJobs(J){let Y=this.taskJobsAcc();if(Y.size===0)return;let Z=new Set(J.map((X)=>X.id)),f=null;for(let X of Y.keys()){if(Z.has(X))continue;if(!f)f=new Map(Y);f.delete(X)}if(f)this.setTaskJobsSig(f)}}function KG(J){return{id:CX(J.id),title:J.title,repo:J.repo,branch:J.branch,worktreePath:J.worktreePath,kind:J.kind,status:J.status,archived:J.archived,pinned:J.pinned,vendor:J.vendor,prStatus:J.prStatus,modelEffort:J.modelEffort,createdAt:J.createdAt,updatedAt:J.updatedAt}}var CZ=S(()=>{cZ();DJ();vZ();q1();fX();RJ();QJ()});function RK(J){let Y=J[pJ];if(!Y){if(Object.defineProperty(J,pJ,{value:Y=new Proxy(J,fS)}),!Array.isArray(J)){let Z=Object.keys(J),f=Object.getOwnPropertyDescriptors(J),X=Object.getPrototypeOf(J),G=X!==null&&J!==null&&typeof J==="object"&&!Array.isArray(J)&&X!==Object.prototype;if(G){let Q=Object.getOwnPropertyDescriptors(X);Z.push(...Object.keys(Q)),Object.assign(f,Q)}for(let Q=0,q=Z.length;Q<q;Q++){let B=Z[Q];if(G&&B==="constructor")continue;if(f[B].get)Object.defineProperty(J,B,{configurable:!0,enumerable:f[B].enumerable,get:f[B].get.bind(Y)})}}}return Y}function pQ(J){let Y;return J!=null&&typeof J==="object"&&(J[pJ]||!(Y=Object.getPrototypeOf(J))||Y===Object.prototype||Array.isArray(J))}function LG(J,Y=new Set){let Z,f,X,G;if(Z=J!=null&&J[Cj])return Z;if(!pQ(J)||Y.has(J))return J;if(Array.isArray(J)){if(Object.isFrozen(J))J=J.slice(0);else Y.add(J);for(let Q=0,q=J.length;Q<q;Q++)if(X=J[Q],(f=LG(X,Y))!==X)J[Q]=f}else{if(Object.isFrozen(J))J=Object.assign({},J);else Y.add(J);let Q=Object.keys(J),q=Object.getOwnPropertyDescriptors(J);for(let B=0,H=Q.length;B<H;B++){if(G=Q[B],q[G].get)continue;if(X=J[G],(f=LG(X,Y))!==X)J[G]=f}}return J}function _Q(J,Y){let Z=J[Y];if(!Z)Object.defineProperty(J,Y,{value:Z=Object.create(null)});return Z}function DG(J,Y,Z){if(J[Y])return J[Y];let[f,X]=p(Z,{equals:!1,internal:!0});return f.$=X,J[Y]=f}function YS(J,Y){let Z=Reflect.getOwnPropertyDescriptor(J,Y);if(!Z||Z.get||!Z.configurable||Y===pJ||Y===VX)return Z;return delete Z.value,delete Z.writable,Z.get=()=>J[pJ][Y],Z}function gK(J){Jz()&&DG(_Q(J,VX),AK)()}function ZS(J){return gK(J),Reflect.ownKeys(J)}function rQ(J,Y,Z,f=!1){if(Y==="__proto__"){console.warn('Refusing to set "__proto__" on a store.');return}if(!f&&J[Y]===Z)return;let X=J[Y],G=J.length;if(OK.onStoreNodeUpdate&&OK.onStoreNodeUpdate(J,Y,Z,X),Z===void 0){if(delete J[Y],J[_Y]&&J[_Y][Y]&&X!==void 0)J[_Y][Y].$()}else if(J[Y]=Z,J[_Y]&&J[_Y][Y]&&X===void 0)J[_Y][Y].$();let Q=_Q(J,VX),q;if(q=DG(Q,Y,X))q.$(()=>Z);if(Array.isArray(J)&&J.length!==G){for(let B=J.length;B<G;B++)(q=Q[B])&&q.$();(q=DG(Q,"length",G))&&q.$(J.length)}(q=Q[AK])&&q.$()}function CK(J,Y){let Z=Object.keys(Y);for(let f=0;f<Z.length;f+=1){let X=Z[f];if(SK(X))continue;rQ(J,X,Y[X])}}function SK(J){return J==="__proto__"||J==="constructor"||J==="prototype"}function XS(J,Y){if(typeof Y==="function")Y=Y(J);if(Y=LG(Y),Array.isArray(Y)){if(J===Y)return;let Z=0,f=Y.length;for(;Z<f;Z++){let X=Y[Z];if(J[Z]!==X)rQ(J,Z,X)}rQ(J,"length",f)}else CK(J,Y)}function UG(J,Y,Z=[]){let f,X=J;if(Y.length>1){f=Y.shift();let Q=typeof f,q=Array.isArray(J);if(Q==="string"&&(f==="__proto__"||Y.length>1&&SK(f))){console.warn(`Refusing to traverse unsafe key "${f}" on a store.`);return}if(Array.isArray(f)){for(let B=0;B<f.length;B++)UG(J,[f[B]].concat(Y),Z);return}else if(q&&Q==="function"){for(let B=0;B<J.length;B++)if(f(J[B],B))UG(J,[B].concat(Y),Z);return}else if(q&&Q==="object"){let{from:B=0,to:H=J.length-1,by:K=1}=f;for(let j=B;j<=H;j+=K)UG(J,[j].concat(Y),Z);return}else if(Y.length>1){UG(J[f],Y,[f].concat(Z));return}X=J[f],Z=[f].concat(Z)}let G=Y[0];if(typeof G==="function"){if(G=G(X,Z),G===X)return}if(f===void 0&&G==null)return;if(G=LG(G),f===void 0||pQ(X)&&pQ(G)&&!Array.isArray(G))CK(X,G);else rQ(J,f,G)}function SZ(...[J,Y]){let Z=LG(J||{}),f=Array.isArray(Z);if(typeof Z!=="object"&&typeof Z!=="function")throw Error(`Unexpected type ${typeof Z} received when initializing 'createStore'. Expected an object.`);let X=RK(Z);uW.registerGraph({value:Z,name:Y&&Y.name});function G(...Q){eG(()=>{f&&Q.length===1?XS(Z,Q[0]):UG(Z,Q)})}return[X,G]}var Cj,VX,_Y,AK,OK,fS,gv;var MG=S(()=>{q1();Cj=Symbol("store-raw"),VX=Symbol("store-node"),_Y=Symbol("store-has"),AK=Symbol("store-self"),OK={onStoreNodeUpdate:null};fS={get(J,Y,Z){if(Y===Cj)return J;if(Y===pJ)return Z;if(Y===oG)return gK(J),Z;let f=_Q(J,VX),X=f[Y],G=X?X():J[Y];if(Y===VX||Y===_Y||Y==="__proto__")return G;if(!X){let Q=Object.getOwnPropertyDescriptor(J,Y);if(Jz()&&(typeof G!=="function"||J.hasOwnProperty(Y))&&!(Q&&Q.get))G=DG(f,Y,G)()}return pQ(G)?RK(G):G},has(J,Y){if(Y===Cj||Y===pJ||Y===oG||Y===VX||Y===_Y||Y==="__proto__")return!0;return Jz()&&DG(_Q(J,_Y),Y)(),Y in J},set(){return console.warn("Cannot mutate a Store directly"),!0},deleteProperty(){return console.warn("Cannot mutate a Store directly"),!0},ownKeys:ZS,getOwnPropertyDescriptor:YS};gv=Symbol("store-root")});function oQ(J){let Y=HY();return{provider:(Z)=>{let f=J.init(Z);return k(z0,{get when(){return f.ready===void 0||f.ready===!0},get children(){return k(Y.Provider,{value:f,get children(){return Z.children}})}})},use(){let Z=SJ(Y);if(!Z)throw Error(`${J.name} context must be used within a context provider`);return Z}}}var Sj=S(()=>{h();h();q1()});import{RGBA as Wf}from"@opentui/core";function zS(){return Object.keys(t1.themes)}function FG(J){return Boolean(t1.themes[J])}function kj(J,Y){if(!J)return!1;if(!Y||typeof Y!=="object"||!Y.theme)return!1;return Vf("themes",{...t1.themes,[J]:Y}),!0}function yj(J,Y="dark"){let Z=J.defs??{};function f(B,H=[]){if(typeof B==="string"){if(B==="transparent"||B==="none")return Wf.fromInts(0,0,0,0);if(B.startsWith("#"))return Wf.fromHex(B);if(H.includes(B))return Wf.fromInts(0,0,0);let K=Z[B]??J.theme[B];if(K===void 0)return Wf.fromInts(0,0,0);return f(K,[...H,B])}return f(B[Y],H)}let X={};for(let[B,H]of Object.entries(J.theme))X[B]=f(H);let G=X.text??Wf.fromHex("#ffffff"),Q=X.background??Wf.fromHex("#000000");return{...{primary:X.primary??G,secondary:X.secondary??G,accent:X.accent??X.primary??G,error:X.error??G,warning:X.warning??G,success:X.success??G,info:X.info??G,text:G,textMuted:X.textMuted??G,background:Q,backgroundPanel:X.backgroundPanel??Q,backgroundElement:X.backgroundElement??Q,backgroundMenu:X.backgroundMenu??X.backgroundElement??Q,backgroundDialog:X.backgroundDialog??X.backgroundPanel??Q,border:X.border??G,borderActive:X.borderActive??X.border??G,borderSubtle:X.borderSubtle??X.border??G,diffAdded:X.diffAdded??X.success??G,diffRemoved:X.diffRemoved??X.error??G,diffContext:X.diffContext??X.textMuted??G,diffHunkHeader:X.diffHunkHeader??X.textMuted??G,diffAddedBg:X.diffAddedBg??Q,diffRemovedBg:X.diffRemovedBg??Q,selectedListItemText:X.selectedListItemText??Q},...X}}var GS,Kf,t1,Vf,x0,yK;var T1=S(()=>{h();q1();MG();Sj();$z();az();pz();_z();rz();oz();sz();GS={claude:df,conductor:nf,nord:$f,opencode:af,dracula:lf,tokyonight:_f,"osaka-jade":pf},Kf=["primary","success","info"],[t1,Vf]=SZ({themes:{...GS},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:x0,provider:yK}=oQ({name:"Theme",init:(J)=>{if(J.mode)Vf("mode",J.mode);if(J.theme&&FG(J.theme))Vf("active",J.theme);let Y=s1(),Z=V0(()=>{let X=t1.themes[t1.active];if(X)return yj(X,t1.mode);let G=t1.themes.claude??t1.themes.opencode??Object.values(t1.themes)[0];if(!G)return yj({theme:{background:"#000000",text:"#ffffff"}},t1.mode);return yj(G,t1.mode)}),f=V0(()=>{let X=Z(),G=X[t1.focusAccent]??X.primary,Q={...X,focusAccent:G};if(!t1.transparentBackground)return Q;let q=Wf.fromInts(0,0,0,0);return{...Q,background:q,backgroundPanel:q}});return p0(()=>{Y?.setBackgroundColor(f().background)}),{theme:new Proxy({},{get(X,G){let Q=f();return Q[G]??Q.text}}),get selected(){return t1.active},get transparentBackground(){return t1.transparentBackground},get focusAccent(){return t1.focusAccent},mode(){return t1.mode},set(X){if(!FG(X))return!1;return Vf("active",X),!0},setMode(X){Vf("mode",X)},setTransparentBackground(X){Vf("transparentBackground",X)},setFocusAccent(X){Vf("focusAccent",X)},all(){return zS()},has(X){return FG(X)}}}}))});function QS(J){let Y=[],Z=J.name;if(Z)Y.push(Z);if(Z==="return")Y.push("enter");if(Z==="enter")Y.push("return");let f=[];if(J.ctrl)f.push("ctrl");if(J.meta)f.push("cmd");if(J.option)f.push("alt");if(J.shift&&Z&&Z.length>1)f.push("shift");if(f.length===0)return Y;let X=`${f.join("+")}+`;return Y.map((G)=>X+G)}function Ij(J,Y){if(Y.defaultPrevented)return!1;let Z=QS(Y);for(let f=J.length-1;f>=0;f--){let X=J[f];if(!X)continue;let G=X.config();if(G.enabled===!1)continue;let Q=G.bindings.find((q)=>Z.includes(q.key));if(Q)return Q.cmd(Y,Q.slot),Y.preventDefault(),!0}return!1}function BS(){if(Nj)return;let J=s1();if(!J)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");Nj=J.keyInput,kK=(Y)=>{Ij(sQ,Y)},Nj.on("keypress",kK)}function U1(J){BS();let Y=qS++,Z={config:J,id:Y};p0(()=>{J()}),sQ.push(Z),i1(()=>{let f=sQ.findIndex((X)=>X.id===Y);if(f>=0)sQ.splice(f,1)})}var qS=1,sQ,Nj=null,kK=null;var MJ=S(()=>{h();q1();sQ=[]});import{RGBA as IK}from"@opentui/core";function WS(J){let Y=RY(),Z=x0(),{theme:f}=Z,X=s1(),G=!1,Q=()=>{if(J.size==="xlarge")return 140;if(J.size==="large")return 110;if(J.size==="small")return 50;return 80},q=2,B=()=>Math.max(8,Y().height-q*2);return(()=>{var H=V("box"),K=V("box");return W(H,K),z(H,"onMouseDown",()=>{G=!!X?.getSelection()}),z(H,"onMouseUp",()=>{if(G){G=!1;return}J.onClose?.()}),z(H,"alignItems","center"),z(H,"justifyContent","center"),z(H,"position","absolute"),z(H,"zIndex",3000),z(H,"left",0),z(H,"top",0),z(K,"onMouseUp",(j)=>{G=!1,j.stopPropagation()}),z(K,"flexShrink",1),z(K,"flexGrow",0),z(K,"paddingTop",1),M(K,()=>J.children),w((j)=>{var U=Y().width,L=Y().height,F=Z.transparentBackground?jS:HS,D=Q(),O=Y().width-2,A=B(),l=f.backgroundDialog;return U!==j.e&&(j.e=z(H,"width",U,j.e)),L!==j.t&&(j.t=z(H,"height",L,j.t)),F!==j.a&&(j.a=z(H,"backgroundColor",F,j.a)),D!==j.o&&(j.o=z(K,"width",D,j.o)),O!==j.i&&(j.i=z(K,"maxWidth",O,j.i)),A!==j.n&&(j.n=z(K,"maxHeight",A,j.n)),l!==j.s&&(j.s=z(K,"backgroundColor",l,j.s)),j},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),H})()}function VS(){let[J,Y]=SZ({stack:[],size:"medium"}),Z=s1(),f=null;function X(){setTimeout(()=>{if(!f)return;if(f.isDestroyed)return;function G(q){for(let B of q.getChildren()){if(B===f)return!0;if(G(B))return!0}return!1}let Q=Z?.root;if(!Q)return;if(!G(Q))return;f.focus()},1)}return U1(()=>({enabled:J.stack.length>0&&!Z?.getSelection()?.getSelectedText(),bindings:[{key:"escape",cmd:()=>{if(Z?.getSelection())Z.clearSelection();J.stack.at(-1)?.onClose?.(),Y("stack",J.stack.slice(0,-1)),X()}},{key:"ctrl+c",cmd:()=>{if(Z?.getSelection())Z.clearSelection();J.stack.at(-1)?.onClose?.(),Y("stack",J.stack.slice(0,-1)),X()}}]})),{clear(){for(let G of J.stack)G.onClose?.();eG(()=>{Y("size","medium"),Y("stack",[])}),X()},replace(G,Q){if(J.stack.length===0)f=Z?.currentFocusedRenderable??null,f?.blur();for(let q of J.stack)q.onClose?.();Y("size","medium"),Y("stack",[{element:G,onClose:Q}])},push(G,Q){if(J.stack.length===0)f=Z?.currentFocusedRenderable??null,f?.blur();Y("stack",[...J.stack,{element:G,onClose:Q}])},pop(){if(J.stack.at(-1)?.onClose?.(),Y("stack",J.stack.slice(0,-1)),J.stack.length===0)X()},get stack(){return J.stack},get size(){return J.size},setSize(G){Y("size",G)}}}function bK(J){let Y=VS();return k(NK.Provider,{value:Y,get children(){return[r0(()=>J.children),(()=>{var Z=V("box");return z(Z,"position","absolute"),z(Z,"zIndex",3000),M(Z,k(z0,{get when(){return Y.stack.length},get children(){return k(WS,{onClose:()=>Y.clear(),get size(){return Y.size},get children(){return Y.stack.at(-1).element()}})}})),Z})()]}})}function x1(){let J=SJ(NK);if(!J)throw Error("useDialog must be used within a DialogProvider");return J}var HS,jS,NK;var bJ=S(()=>{h();h();h();h();h();h();h();h();q1();MG();T1();MJ();HS=IK.fromInts(0,0,0,128),jS=IK.fromInts(0,0,0,64);NK=HY()});import{spawnSync as bj}from"child_process";import*as EK from"fs";function TK(J){return`This folder isn't a git repository yet, and a task needs a git branch to work in. To fix it, turn ${J} 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 uK(J){let Y=J.trim();if(!Y)return"repo path is required";let Z;try{Z=EK.statSync(Y)}catch{return`path does not exist: ${Y}`}if(!Z.isDirectory())return`not a directory: ${Y}`;try{if(bj("git",["rev-parse","--git-dir"],{cwd:Y,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return TK(Y)}catch{return TK(Y)}return null}function OG(J){if(!J)return null;try{let Y=bj("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:J,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]});if(Y.status!==0)return null;let Z=Y.stdout.trim();if(!Z||Z==="HEAD")return null;return Z}catch{return null}}function xK(J){if(!J)return[];try{let Y=bj("git",["for-each-ref","--format=%(refname:short)","refs/heads/"],{cwd:J,encoding:"utf-8",timeout:2000});if(Y.status!==0)return[];return Y.stdout.split(`
222
- `).map((Z)=>Z.trim()).filter(Boolean).sort((Z,f)=>{let X=(q)=>q==="main"?0:q==="master"?1:q==="develop"?2:3,G=X(Z),Q=X(f);if(G!==Q)return G-Q;return Z.localeCompare(f)})}catch{return[]}}var GY="main";var tQ=()=>{};import*as wK from"fs";import*as eQ from"os";function GJ(J){if(J==="~")return eQ.homedir();if(J.startsWith("~/"))return eQ.homedir()+J.slice(1);return J}function Tj(J){if(!J)return{base:"",filter:""};let Z=GJ(J==="~"?"~/":J);if(Z.endsWith("/"))return{base:Z,filter:""};let f=Z.lastIndexOf("/");if(f===-1)return{base:"",filter:Z};return{base:Z.slice(0,f+1),filter:Z.slice(f+1)}}function Ej(J){if(!J)return[];try{let Y=wK.readdirSync(J,{withFileTypes:!0}),Z=[];for(let f of Y)if(f.isDirectory())Z.push(f.name);return Z.sort((f,X)=>f.localeCompare(X))}catch{return[]}}function uj(J,Y){let Z=Y.toLowerCase(),X=Z.startsWith(".")?J:J.filter((G)=>!G.startsWith("."));if(!Z)return X;return X.filter((G)=>G.toLowerCase().startsWith(Z))}function AG(J,Y,Z){let f=Y+Z;if(J.startsWith("~")){let X=eQ.homedir();if(f===X)return"~";if(f.startsWith(`${X}/`))return`~${f.slice(X.length)}`}return f}var Jq=()=>{};import{spawn as KS}from"child_process";import*as Uf from"fs";import*as RG from"path";function hK(J){let Y=J.trim().replace(/\/+$/,"");if(!Y)return"";let Z=Y.lastIndexOf("/"),f=Y.lastIndexOf(":"),X=Math.max(Z,f);return(X>=0?Y.slice(X+1):Y).replace(/\.git$/i,"")}function PK(J){let Y=J.trim();if(!Y)return"git URL is required";let Z=Y.includes("://"),f=Y.includes("@")&&Y.includes(":"),X=Y.includes("/");if(!Z&&!f&&!X)return`does not look like a git URL: ${Y}`;return null}function vK(J,Y){let Z=Y.trim();if(!Z)return"folder name is required";if(Z.includes("/")||Z.includes("\\"))return"folder name cannot contain path separators";let f=J.trim();if(!f)return"parent directory is required";let X=GJ(f),G;try{G=Uf.statSync(X)}catch{return`parent directory does not exist: ${X}`}if(!G.isDirectory())return`not a directory: ${X}`;let Q=RG.join(X,Z);if(Uf.existsSync(Q))return`target already exists: ${Q}`;return null}function mK(J,Y){return RG.join(GJ(J.trim()),Y.trim())}function cK(J,Y){let Z=Y.trim();if(!Z)return Y;let f=GJ(J.trim());if(!f)return Y;try{if(!Uf.statSync(f).isDirectory())return Y}catch{return Y}if(!Uf.existsSync(RG.join(f,Z)))return Z;for(let X=2;X<1000;X++){let G=`${Z}-${X}`;if(!Uf.existsSync(RG.join(f,G)))return G}return Z}function dK(J,Y,Z){return new Promise((f)=>{let X="";try{let G=KS("git",["clone","--progress",J,Y],{stdio:["ignore","ignore","pipe"]});G.stderr?.setEncoding("utf-8"),G.stderr?.on("data",(Q)=>{if(X+=Q,Z){let q=Q.split(/[\r\n]+/).filter((H)=>H.trim().length>0),B=q[q.length-1];if(B)Z(B)}}),G.on("error",(Q)=>{f({ok:!1,error:Q.message})}),G.on("close",(Q)=>{if(Q===0){f({ok:!0,path:Y});return}let q=X.split(/[\r\n]+/).filter((B)=>B.trim().length>0).pop()??`git clone exited with ${Q}`;f({ok:!1,error:q})})}catch(G){f({ok:!1,error:G instanceof Error?G.message:String(G)})}})}var nK=S(()=>{Jq()});function Yq(J){if(J==="existing")return"clone";if(J==="clone")return"adopt";return"existing"}function iK(J){if(J==="existing")return"adopt";if(J==="clone")return"existing";return"clone"}function lK(J,Y){let Z=J.trim();if(Y.includes(Z))return"saved";if(Z.startsWith("~"))return"browse";if(Z.includes("/"))return"browse";return"saved"}function FJ(J){return J.replace(/[\r\n]+/g,"")}function xj(J,Y="existing"){if(J==="confirm")return"tabs";if(J==="tabs")return"engine";if(J==="engine")return wj(Y);if(Y==="clone"){if(J==="cloneUrl")return"cloneParent";if(J==="cloneParent")return"cloneFolder";if(J==="cloneFolder")return"cloneBaseRef";if(J==="cloneBaseRef")return"confirm";return"cloneUrl"}if(Y==="adopt")return J==="adoptFilter"?"confirm":"adoptFilter";if(J==="repo")return"baseRef";if(J==="baseRef")return"confirm";return"repo"}function wj(J){if(J==="clone")return"cloneUrl";if(J==="adopt")return"adoptFilter";return"repo"}function $K(J,Y){let Z=Y.trim();if(!Z)return J;return J.filter((f)=>xG(Z,f.path))}function aK(J,Y){let Z=new Set,f=[];for(let X of[J,...Y]){let G=X.trim();if(!G||Z.has(G))continue;Z.add(G),f.push(G)}return f}function pK(J,Y){let Z=Y.trim().toLowerCase();if(!Z)return J;return J.filter((f)=>f.toLowerCase().includes(Z))}function _K(J,Y){let Z=Y.trim().toLowerCase();if(!Z)return J;return J.filter((f)=>f.toLowerCase().includes(Z))}function gG(J,Y,Z=US){let f=J.length;if(f<=Z)return{items:J,start:0,total:f};let X=Math.floor(Z/2),G=Math.max(0,Y-X);if(G+Z>f)G=f-Z;return{items:J.slice(G,G+Z),start:G,total:f}}function gY(J,Y){if(Y<=0)return 0;return Math.max(0,Math.min(Y-1,J))}function rK(J,Y,Z){let f=Y[Z];if(f)return f;return J.trim()||GY}var US=8;var hj=S(()=>{Rq();tQ()});import{TextAttributes as nJ}from"@opentui/core";function oK(J){let Y=x1(),{theme:Z}=x0(),[f,X]=p("existing"),G=()=>{let I=J.availableVendors;return I&&I.length>0?I:h1},Q=(()=>{let I=G(),g0=J.defaultVendor??"claude";return I.includes(g0)?g0:I[0]??"claude"})(),[q,B]=p(Q),[H,K]=p("tabs"),[j,U]=p(J.defaultRepo),[L,F]=p(OG(GJ(J.defaultRepo.trim()))??GY),[D,O]=p(!1),[A,l]=p(""),[R,C]=p(J.defaultCloneParent?.trim()?J.defaultCloneParent:"~/"),[g,y]=p(""),[$,G0]=p(!1),[t,Z0]=p(GY),[u,B0]=p(!1),[Y0,W0]=p(""),o=V0(()=>aK(J.defaultRepo,J.savedRepos)),_=V0(()=>lK(j(),o())),r=V0(()=>Tj(j())),f0=V0(()=>Ej(r().base)),a=V0(()=>uj(f0(),r().filter)),U0=V0(()=>pK(o(),j())),c=V0(()=>_()==="browse"?a():U0()),[N,s]=p(0),H0=V0(()=>gG(c(),N())),[D0,y0]=p(!1),d0=V0(()=>xK(GJ(j().trim()))),x=V0(()=>_K(d0(),L())),[F0,Q0]=p(0),L0=V0(()=>gG(x(),F0())),k0=V0(()=>Tj(R())),T0=V0(()=>Ej(k0().base)),m0=V0(()=>uj(T0(),k0().filter)),[$0,O0]=p(0),v=V0(()=>gG(m0(),$0())),[X0,A0]=p(!1),[E,l0]=p(""),[S0,c0]=p(0),[w0,a0]=p(new Set),[n]=tG(()=>f()==="adopt"?GJ(j().trim()):null,async(I)=>J.discoverAdoptable?await J.discoverAdoptable(I):[]),e=V0(()=>$K(n()??[],E())),q0=V0(()=>gG(e().map((I)=>I.path),S0())),M0=V0(()=>{let I=q0();return e().slice(I.start,I.start+I.items.length)});p0(()=>{e(),c0((I)=>gY(I,e().length))});function K0(I){a0((g0)=>{let h0=new Set(g0);if(h0.has(I))h0.delete(I);else h0.add(I);return h0})}function o0(){let I=e()[S0()];if(I)K0(I.path)}p0(()=>{x(),Q0(0)}),p0(()=>{let I=GJ(j().trim());if(!I)return;if(D())return;let g0=OG(I);if(g0)F(g0)}),p0(()=>{c(),s(0)}),p0(()=>{m0(),O0(0)}),p0(()=>{let I=A(),g0=R();if($())return;let h0=hK(I);y(cK(g0,h0))});let[N0,G1]=p(null);p0(()=>{j(),A(),R(),g(),E(),G1(null)});function b0(){let I=GJ(j().trim());if(!I)return;let g0=uK(I);if(g0){G1(g0),K("repo");return}let h0=L().trim()||GY;J.onSubmit({repo:I,baseRef:h0,vendor:q()}),Y.clear()}async function E0(){if(u())return;let I=PK(A());if(I){G1(I),K("cloneUrl");return}let g0=vK(R(),g());if(g0){G1(g0),K(g().trim()?"cloneParent":"cloneFolder");return}let h0=mK(R(),g());B0(!0),W0(`Cloning into ${h0}\u2026`);let f1=await dK(A().trim(),h0,(BJ)=>{W0(BJ)});if(B0(!1),!f1.ok){G1(`git clone failed: ${f1.error}`),K("cloneUrl");return}let OJ=t().trim()||GY,TJ=GJ(R().trim());J.onSubmit({repo:f1.path,baseRef:OJ,vendor:q(),cloned:{parentDir:TJ}}),Y.clear()}function H1(){let I=e();if(I.length===0){G1("no adoptable worktrees to import");return}let g0=w0(),h0=g0.size>0?I.filter((f1)=>g0.has(f1.path)):I.slice(S0(),S0()+1);if(h0.length===0)return;J.onSubmit({mode:"adopt",repo:GJ(j().trim()),vendor:q(),adopt:h0.map((f1)=>({worktreePath:f1.path,branch:f1.branch}))}),Y.clear()}function j1(){if(f()==="clone"){E0();return}if(f()==="adopt"){H1();return}b0()}function t0(I){if(u())return;if(I===f())return;X(I),K(wj(I)),G1(null)}function e0(I){if(u())return;let g0=I===1?Yq(f()):iK(f());if(g0===f())return;X(g0),G1(null),K("tabs")}function P(I){B((g0)=>I===1?sY(G(),g0):gq(G(),g0))}function J0(){if(!j().trim()&&_()==="saved"){let g0=c()[0];if(g0){U(g0),K("baseRef");return}}if(_()==="browse"){let h0=a()[N()],f1=r();if(h0){U(AG(j(),f1.base,h0)),s(0),y0(!0),K("baseRef");return}K("baseRef");return}let I=c()[N()];if(I){U(I),K("baseRef");return}K("baseRef")}function z1(I){let h0=c()[I];if(!h0)return;if(_()==="browse"){let f1=r();U(AG(j(),f1.base,h0)),s(I),y0(!0),K("baseRef");return}U(h0),s(I),K("baseRef")}function F1(){let g0=m0()[$0()],h0=k0();if(g0){C(AG(R(),h0.base,g0)),O0(0),A0(!0),K("cloneFolder");return}K("cloneFolder")}function O1(I){let h0=m0()[I];if(!h0)return;let f1=k0();C(AG(R(),f1.base,h0)),O0(I),A0(!0),K("cloneFolder")}let R1=()=>{let I=e();if(I.length===0)return;let g0=I.every((h0)=>w0().has(h0.path));a0(g0?new Set:new Set(I.map((h0)=>h0.path)))};U1(()=>({bindings:[{key:"tab",cmd:()=>K((I)=>xj(I,f()))},{key:"ctrl+]",cmd:()=>t0(Yq(f()))},{key:"ctrl+[",cmd:()=>t0(Yq(f()))},{key:"ctrl+e",cmd:()=>B((I)=>sY(G(),I))},{key:"up",cmd:()=>{if(u())return;if(f()==="existing"&&H()==="repo"){let I=c();if(I.length===0)return;s(gY(N()-1,I.length));return}if(f()==="existing"&&H()==="baseRef"){let I=x();if(I.length===0)return;Q0(gY(F0()-1,I.length));return}if(f()==="clone"&&H()==="cloneParent"){let I=m0();if(I.length===0)return;O0(gY($0()-1,I.length));return}if(f()==="adopt"){let I=e();if(I.length===0)return;c0(gY(S0()-1,I.length))}}},{key:"down",cmd:()=>{if(u())return;if(f()==="existing"&&H()==="repo"){let I=c();if(I.length===0)return;s(gY(N()+1,I.length));return}if(f()==="existing"&&H()==="baseRef"){let I=x();if(I.length===0)return;Q0(gY(F0()+1,I.length));return}if(f()==="clone"&&H()==="cloneParent"){let I=m0();if(I.length===0)return;O0(gY($0()+1,I.length));return}if(f()==="adopt"){let I=e();if(I.length===0)return;c0(gY(S0()+1,I.length))}}},...H()==="tabs"||H()==="engine"?[{key:"left",cmd:()=>H()==="tabs"?e0(-1):P(-1)},{key:"right",cmd:()=>H()==="tabs"?e0(1):P(1)},{key:"return",cmd:()=>K((I)=>xj(I,f()))}]:[],...f()==="adopt"?[{key:"ctrl+a",cmd:R1}]:[]]})),U1(()=>({enabled:H()==="confirm"&&!u(),bindings:[{key:"return",cmd:()=>j1()}]}));let y1=(I)=>H()===I?Z.primary:Z.textMuted,L1=(I)=>H()===I?nJ.BOLD|nJ.UNDERLINE:void 0,J1=(I,g0)=>I?g0?nJ.BOLD|nJ.UNDERLINE:nJ.BOLD:void 0;return(()=>{var I=V("box"),g0=V("box"),h0=V("text"),f1=V("box"),OJ=V("box"),TJ=V("text"),BJ=V("box"),SY=V("box"),yY=V("text"),HJ=V("box"),Aq=V("text"),OX=V("text");return W(I,g0),W(I,f1),W(I,HJ),z(I,"paddingLeft",2),z(I,"paddingRight",2),z(I,"gap",0),W(g0,h0),z(g0,"flexDirection","row"),W(h0,T("New task")),W(f1,OJ),z(f1,"gap",1),z(f1,"paddingTop",1),z(f1,"paddingBottom",1),M(f1,()=>{let d=()=>H()==="tabs",m=(i)=>i?Z.primary:Z.textMuted;return(()=>{var i=V("box"),b=V("text"),R0=V("text"),I0=V("text");return W(i,b),W(i,R0),W(i,I0),z(i,"flexDirection","row"),z(i,"gap",2),z(b,"onMouseUp",()=>t0("existing")),M(b,()=>f()==="existing"?"\u25B8 For Existing":" For Existing"),z(R0,"onMouseUp",()=>t0("clone")),M(R0,()=>f()==="clone"?"\u25B8 For New Repo":" For New Repo"),z(I0,"onMouseUp",()=>t0("adopt")),M(I0,()=>f()==="adopt"?"\u25B8 Adopt Worktree":" Adopt Worktree"),w((C0)=>{var P0=m(f()==="existing"),g1=J1(f()==="existing",d()),M1=m(f()==="clone"),AJ=J1(f()==="clone",d()),oY=m(f()==="adopt"),AX=J1(f()==="adopt",d());return P0!==C0.e&&(C0.e=z(b,"fg",P0,C0.e)),g1!==C0.t&&(C0.t=z(b,"attributes",g1,C0.t)),M1!==C0.a&&(C0.a=z(R0,"fg",M1,C0.a)),AJ!==C0.o&&(C0.o=z(R0,"attributes",AJ,C0.o)),oY!==C0.i&&(C0.i=z(I0,"fg",oY,C0.i)),AX!==C0.n&&(C0.n=z(I0,"attributes",AX,C0.n)),C0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),i})()},OJ),W(OJ,TJ),W(OJ,BJ),z(OJ,"gap",0),W(TJ,T("engine")),W(BJ,SY),W(BJ,yY),z(BJ,"flexDirection","row"),z(BJ,"gap",2),M(BJ,k(Y1,{get each(){return G()},children:(d)=>{let m=()=>q()===d;return(()=>{var i=V("text");return z(i,"onMouseUp",()=>B(d)),M(i,()=>m()?"\u25B8 ":" ",null),M(i,d,null),w((b)=>{var R0=m()?Z.primary:Z.textMuted,I0=m()?nJ.BOLD:void 0;return R0!==b.e&&(b.e=z(i,"fg",R0,b.e)),I0!==b.t&&(b.t=z(i,"attributes",I0,b.t)),b},{e:void 0,t:void 0}),i})()}}),SY),z(SY,"flexGrow",1),W(yY,T("ctrl+e")),M(f1,k(z0,{get when(){return f()==="existing"},get children(){return[(()=>{var d=V("box"),m=V("text"),i=V("input");return W(d,m),W(d,i),z(d,"gap",0),W(m,T("repo")),z(i,"onInput",(b)=>{y0(!1),U(FJ(b))}),z(i,"onSubmit",()=>{if(!j().trim())return;J0()}),w((b)=>{var R0=y1("repo"),I0=L1("repo"),C0=j(),P0=J.defaultRepo,g1=H()==="repo";return R0!==b.e&&(b.e=z(m,"fg",R0,b.e)),I0!==b.t&&(b.t=z(m,"attributes",I0,b.t)),C0!==b.a&&(b.a=z(i,"value",C0,b.a)),P0!==b.o&&(b.o=z(i,"placeholder",P0,b.o)),g1!==b.i&&(b.i=z(i,"focused",g1,b.i)),b},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),d})(),k(z0,{get when(){return r0(()=>H()==="repo"&&c().length>0)()&&!D0()},get children(){var d=V("box");return z(d,"gap",0),z(d,"paddingLeft",2),M(d,k(z0,{get when(){return H0().start>0},get children(){var m=V("text"),i=T("\u2191 "),b=T(" more");return W(m,i),W(m,b),z(m,"wrapMode","none"),M(m,()=>H0().start,b),w((R0)=>z(m,"fg",Z.textMuted,R0)),m}}),null),M(d,k(Y1,{get each(){return H0().items},children:(m,i)=>{let b=()=>H0().start+i(),R0=()=>b()===N(),I0=()=>_()==="saved"&&m===J.defaultRepo,C0=()=>_()==="saved"&&j().trim()===m,P0=()=>_()==="browse"?"/":"",g1=()=>I0()?" (current dir)":"";return(()=>{var M1=V("text");return z(M1,"wrapMode","none"),z(M1,"onMouseUp",()=>z1(b())),M(M1,()=>R0()?"\u25B8 ":" ",null),M(M1,m,null),M(M1,P0,null),M(M1,g1,null),w((AJ)=>{var oY=R0()?Z.primary:C0()?Z.accent:Z.textMuted,AX=R0()?nJ.BOLD:void 0;return oY!==AJ.e&&(AJ.e=z(M1,"fg",oY,AJ.e)),AX!==AJ.t&&(AJ.t=z(M1,"attributes",AX,AJ.t)),AJ},{e:void 0,t:void 0}),M1})()}}),null),M(d,k(z0,{get when(){return H0().start+H0().items.length<H0().total},get children(){var m=V("text"),i=T("\u2193 "),b=T(" more");return W(m,i),W(m,b),z(m,"wrapMode","none"),M(m,()=>H0().total-H0().start-H0().items.length,b),w((R0)=>z(m,"fg",Z.textMuted,R0)),m}}),null),d}}),(()=>{var d=V("box"),m=V("text"),i=V("input");return W(d,m),W(d,i),z(d,"gap",0),W(m,T("from branch")),z(i,"placeholder",GY),z(i,"onInput",(b)=>{O(!0),F(FJ(b))}),z(i,"onSubmit",()=>{F(rK(L(),x(),F0())),O(!0),b0()}),w((b)=>{var R0=y1("baseRef"),I0=L1("baseRef"),C0=L(),P0=H()==="baseRef";return R0!==b.e&&(b.e=z(m,"fg",R0,b.e)),I0!==b.t&&(b.t=z(m,"attributes",I0,b.t)),C0!==b.a&&(b.a=z(i,"value",C0,b.a)),P0!==b.o&&(b.o=z(i,"focused",P0,b.o)),b},{e:void 0,t:void 0,a:void 0,o:void 0}),d})(),k(z0,{get when(){return r0(()=>H()==="baseRef"&&x().length===0)()&&N0()==null},get children(){var d=V("box"),m=V("text");return W(d,m),z(d,"gap",0),z(d,"paddingLeft",2),z(d,"paddingBottom",1),z(m,"wrapMode","none"),M(m,()=>d0().length===0?"(no local branches found \u2014 typed text will be used as ref)":"(no match \u2014 typed text will be used as ref)"),w((i)=>z(m,"fg",Z.textMuted,i)),d}}),k(z0,{get when(){return r0(()=>H()==="baseRef")()&&x().length>0},get children(){var d=V("box");return z(d,"gap",0),z(d,"paddingLeft",2),z(d,"paddingBottom",1),M(d,k(z0,{get when(){return L0().start>0},get children(){var m=V("text"),i=T("\u2191 "),b=T(" more");return W(m,i),W(m,b),z(m,"wrapMode","none"),M(m,()=>L0().start,b),w((R0)=>z(m,"fg",Z.textMuted,R0)),m}}),null),M(d,k(Y1,{get each(){return L0().items},children:(m,i)=>{let b=()=>L0().start+i(),R0=()=>b()===F0(),I0=()=>L().trim()===m;return(()=>{var C0=V("text");return z(C0,"wrapMode","none"),z(C0,"onMouseUp",()=>{F(m),O(!0),Q0(b()),K("confirm")}),M(C0,()=>R0()?"\u25B8 ":" ",null),M(C0,m,null),w((P0)=>{var g1=R0()?Z.primary:I0()?Z.accent:Z.textMuted,M1=R0()?nJ.BOLD:void 0;return g1!==P0.e&&(P0.e=z(C0,"fg",g1,P0.e)),M1!==P0.t&&(P0.t=z(C0,"attributes",M1,P0.t)),P0},{e:void 0,t:void 0}),C0})()}}),null),M(d,k(z0,{get when(){return L0().start+L0().items.length<L0().total},get children(){var m=V("text"),i=T("\u2193 "),b=T(" more");return W(m,i),W(m,b),z(m,"wrapMode","none"),M(m,()=>L0().total-L0().start-L0().items.length,b),w((R0)=>z(m,"fg",Z.textMuted,R0)),m}}),null),d}})]}}),null),M(f1,k(z0,{get when(){return f()==="clone"},get children(){return[(()=>{var d=V("box"),m=V("text"),i=V("input");return W(d,m),W(d,i),z(d,"gap",0),W(m,T("git url")),z(i,"placeholder","https://github.com/user/repo.git"),z(i,"onInput",(b)=>l(FJ(b))),z(i,"onSubmit",()=>{if(!A().trim())return;K("cloneParent")}),w((b)=>{var R0=y1("cloneUrl"),I0=L1("cloneUrl"),C0=A(),P0=H()==="cloneUrl";return R0!==b.e&&(b.e=z(m,"fg",R0,b.e)),I0!==b.t&&(b.t=z(m,"attributes",I0,b.t)),C0!==b.a&&(b.a=z(i,"value",C0,b.a)),P0!==b.o&&(b.o=z(i,"focused",P0,b.o)),b},{e:void 0,t:void 0,a:void 0,o:void 0}),d})(),(()=>{var d=V("box"),m=V("text"),i=V("input");return W(d,m),W(d,i),z(d,"gap",0),W(m,T("parent dir")),z(i,"placeholder","~/"),z(i,"onInput",(b)=>{A0(!1),C(FJ(b))}),z(i,"onSubmit",()=>F1()),w((b)=>{var R0=y1("cloneParent"),I0=L1("cloneParent"),C0=R(),P0=H()==="cloneParent";return R0!==b.e&&(b.e=z(m,"fg",R0,b.e)),I0!==b.t&&(b.t=z(m,"attributes",I0,b.t)),C0!==b.a&&(b.a=z(i,"value",C0,b.a)),P0!==b.o&&(b.o=z(i,"focused",P0,b.o)),b},{e:void 0,t:void 0,a:void 0,o:void 0}),d})(),k(z0,{get when(){return H()==="cloneParent"},get children(){var d=V("box"),m=V("text");return W(d,m),z(d,"paddingLeft",2),W(m,T("(remembered \u2014 next clone defaults to this dir)")),z(m,"wrapMode","none"),w((i)=>z(m,"fg",Z.textMuted,i)),d}}),k(z0,{get when(){return r0(()=>H()==="cloneParent"&&m0().length>0)()&&!X0()},get children(){var d=V("box");return z(d,"gap",0),z(d,"paddingLeft",2),M(d,k(z0,{get when(){return v().start>0},get children(){var m=V("text"),i=T("\u2191 "),b=T(" more");return W(m,i),W(m,b),z(m,"wrapMode","none"),M(m,()=>v().start,b),w((R0)=>z(m,"fg",Z.textMuted,R0)),m}}),null),M(d,k(Y1,{get each(){return v().items},children:(m,i)=>{let b=()=>v().start+i(),R0=()=>b()===$0();return(()=>{var I0=V("text"),C0=T("/");return W(I0,C0),z(I0,"wrapMode","none"),z(I0,"onMouseUp",()=>O1(b())),M(I0,()=>R0()?"\u25B8 ":" ",C0),M(I0,m,C0),w((P0)=>{var g1=R0()?Z.primary:Z.textMuted,M1=R0()?nJ.BOLD:void 0;return g1!==P0.e&&(P0.e=z(I0,"fg",g1,P0.e)),M1!==P0.t&&(P0.t=z(I0,"attributes",M1,P0.t)),P0},{e:void 0,t:void 0}),I0})()}}),null),M(d,k(z0,{get when(){return v().start+v().items.length<v().total},get children(){var m=V("text"),i=T("\u2193 "),b=T(" more");return W(m,i),W(m,b),z(m,"wrapMode","none"),M(m,()=>v().total-v().start-v().items.length,b),w((R0)=>z(m,"fg",Z.textMuted,R0)),m}}),null),d}}),(()=>{var d=V("box"),m=V("text"),i=V("input");return W(d,m),W(d,i),z(d,"gap",0),W(m,T("folder name")),z(i,"placeholder","auto from url"),z(i,"onInput",(b)=>{G0(!0),y(FJ(b))}),z(i,"onSubmit",()=>K("cloneBaseRef")),w((b)=>{var R0=y1("cloneFolder"),I0=L1("cloneFolder"),C0=g(),P0=H()==="cloneFolder";return R0!==b.e&&(b.e=z(m,"fg",R0,b.e)),I0!==b.t&&(b.t=z(m,"attributes",I0,b.t)),C0!==b.a&&(b.a=z(i,"value",C0,b.a)),P0!==b.o&&(b.o=z(i,"focused",P0,b.o)),b},{e:void 0,t:void 0,a:void 0,o:void 0}),d})(),(()=>{var d=V("box"),m=V("text"),i=V("input");return W(d,m),W(d,i),z(d,"gap",0),W(m,T("base branch")),z(i,"placeholder",GY),z(i,"onInput",(b)=>Z0(FJ(b))),z(i,"onSubmit",()=>void E0()),w((b)=>{var R0=y1("cloneBaseRef"),I0=L1("cloneBaseRef"),C0=t(),P0=H()==="cloneBaseRef";return R0!==b.e&&(b.e=z(m,"fg",R0,b.e)),I0!==b.t&&(b.t=z(m,"attributes",I0,b.t)),C0!==b.a&&(b.a=z(i,"value",C0,b.a)),P0!==b.o&&(b.o=z(i,"focused",P0,b.o)),b},{e:void 0,t:void 0,a:void 0,o:void 0}),d})(),k(z0,{get when(){return u()},get children(){var d=V("box"),m=V("text");return W(d,m),z(d,"gap",0),z(d,"paddingLeft",2),z(m,"wrapMode","none"),M(m,()=>Y0()||"Cloning\u2026"),w((i)=>z(m,"fg",Z.textMuted,i)),d}})]}}),null),M(f1,k(z0,{get when(){return f()==="adopt"},get children(){return[(()=>{var d=V("box"),m=V("text"),i=V("input");return W(d,m),W(d,i),z(d,"gap",0),W(m,T("filter (path glob)")),z(i,"placeholder","* \u2014 type e.g. feature-* to narrow"),z(i,"onInput",(b)=>l0(FJ(b))),z(i,"onSubmit",()=>o0()),w((b)=>{var R0=y1("adoptFilter"),I0=L1("adoptFilter"),C0=E(),P0=H()==="adoptFilter";return R0!==b.e&&(b.e=z(m,"fg",R0,b.e)),I0!==b.t&&(b.t=z(m,"attributes",I0,b.t)),C0!==b.a&&(b.a=z(i,"value",C0,b.a)),P0!==b.o&&(b.o=z(i,"focused",P0,b.o)),b},{e:void 0,t:void 0,a:void 0,o:void 0}),d})(),(()=>{var d=V("box"),m=V("text"),i=T("repo: ");return W(d,m),z(d,"paddingLeft",2),W(m,i),z(m,"wrapMode","none"),M(m,()=>GJ(j().trim())||"(none)",null),w((b)=>z(m,"fg",Z.textMuted,b)),d})(),k(z0,{get when(){return n.loading},get children(){var d=V("box"),m=V("text");return W(d,m),z(d,"paddingLeft",2),W(m,T("scanning worktrees\u2026")),z(m,"wrapMode","none"),w((i)=>z(m,"fg",Z.textMuted,i)),d}}),k(z0,{get when(){return r0(()=>!n.loading)()&&e().length===0},get children(){var d=V("box"),m=V("text");return W(d,m),z(d,"paddingLeft",2),z(m,"wrapMode","none"),M(m,()=>(n()??[]).length===0?"no unlinked worktrees \u2014 every git worktree here is already a task":"no worktrees match the filter"),w((i)=>z(m,"fg",Z.textMuted,i)),d}}),k(z0,{get when(){return e().length>0},get children(){var d=V("box"),m=V("text");return W(d,m),z(d,"gap",0),z(d,"paddingLeft",2),M(d,k(z0,{get when(){return q0().start>0},get children(){var i=V("text"),b=T("\u2191 "),R0=T(" more");return W(i,b),W(i,R0),z(i,"wrapMode","none"),M(i,()=>q0().start,R0),w((I0)=>z(i,"fg",Z.textMuted,I0)),i}}),m),M(d,k(Y1,{get each(){return M0()},children:(i,b)=>{let R0=()=>q0().start+b(),I0=()=>R0()===S0(),C0=()=>w0().has(i.path),P0=()=>[i.dirty?"dirty":"",i.kobeManaged?"":"external"].filter(Boolean).join(",");return(()=>{var g1=V("text");return z(g1,"wrapMode","none"),z(g1,"onMouseUp",()=>{c0(R0()),K0(i.path)}),M(g1,()=>I0()?"\u25B8 ":" ",null),M(g1,()=>C0()?"[x] ":"[ ] ",null),M(g1,()=>i.branch,null),M(g1,(()=>{var M1=r0(()=>!!P0());return()=>M1()?` (${P0()})`:""})(),null),w((M1)=>{var AJ=I0()?Z.primary:C0()?Z.accent:Z.textMuted,oY=I0()?nJ.BOLD:void 0;return AJ!==M1.e&&(M1.e=z(g1,"fg",AJ,M1.e)),oY!==M1.t&&(M1.t=z(g1,"attributes",oY,M1.t)),M1},{e:void 0,t:void 0}),g1})()}}),m),M(d,k(z0,{get when(){return q0().start+q0().items.length<q0().total},get children(){var i=V("text"),b=T("\u2193 "),R0=T(" more");return W(i,b),W(i,R0),z(i,"wrapMode","none"),M(i,()=>q0().total-q0().start-q0().items.length,R0),w((I0)=>z(i,"fg",Z.textMuted,I0)),i}}),m),z(m,"wrapMode","none"),M(m,(()=>{var i=r0(()=>w0().size>0);return()=>i()?`${w0().size} selected \xB7 enter toggles \xB7 ctrl+a all \xB7 Create imports`:"enter toggles \xB7 ctrl+a all \xB7 Create imports the highlighted row"})()),w((i)=>z(m,"fg",Z.textMuted,i)),d}})]}}),null),M(f1,k(z0,{get when(){return N0()},get children(){var d=V("text"),m=T("\u203B ");return W(d,m),z(d,"wrapMode","word"),M(d,N0,null),w((i)=>z(d,"fg",Z.error,i)),d}}),null),W(HJ,Aq),W(HJ,OX),z(HJ,"flexDirection","row"),z(HJ,"justifyContent","space-between"),z(HJ,"alignItems","center"),z(HJ,"paddingTop",1),z(HJ,"paddingBottom",1),W(Aq,T("\u2191\u2193 pick \xB7 tab next field \xB7 \u2190\u2192 switch \xB7 enter done \xB7 esc cancel")),z(OX,"onMouseUp",()=>j1()),M(OX,(()=>{var d=r0(()=>!!u());return()=>d()?"[ Cloning\u2026 ]":H()==="confirm"?"\u25B8 [ Create ]":"[ Create ]"})()),w((d)=>{var m=nJ.BOLD,i=Z.text,b=y1("engine"),R0=L1("engine"),I0=Z.textMuted,C0=Z.textMuted,P0=H()==="confirm"?Z.primary:Z.text,g1=H()==="confirm"?nJ.BOLD:void 0;return m!==d.e&&(d.e=z(h0,"attributes",m,d.e)),i!==d.t&&(d.t=z(h0,"fg",i,d.t)),b!==d.a&&(d.a=z(TJ,"fg",b,d.a)),R0!==d.o&&(d.o=z(TJ,"attributes",R0,d.o)),I0!==d.i&&(d.i=z(yY,"fg",I0,d.i)),C0!==d.n&&(d.n=z(Aq,"fg",C0,d.n)),P0!==d.s&&(d.s=z(OX,"fg",P0,d.s)),g1!==d.h&&(d.h=z(OX,"attributes",g1,d.h)),d},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),I})()}var sK=S(()=>{h();h();h();h();h();h();h();h();zJ();q1();T1();tQ();MJ();Jq();bJ();nK();hj()});function LS(J,Y,Z,f){return new Promise((X)=>{J.replace(()=>k(oK,{defaultRepo:Y,savedRepos:Z,get defaultCloneParent(){return f?.defaultCloneParent},get defaultVendor(){return f?.defaultVendor},get availableVendors(){return f?.availableVendors},get discoverAdoptable(){return f?.discoverAdoptable},onSubmit:(G)=>X(G),onCancel:()=>X(void 0)}),()=>X(void 0)),J.setSize("medium")})}var Zq;var CG=S(()=>{h();sK();hj();Zq={show:LS}});function tK(J,Y){return[{key:"tab",cmd:()=>Y.cycleField(1)},{key:"shift+tab",cmd:()=>Y.cycleField(-1)},{key:"ctrl+e",cmd:()=>Y.stepEngine(1)},...J==="engine"?[{key:"left",cmd:()=>Y.stepEngine(-1)},{key:"right",cmd:()=>Y.stepEngine(1)},{key:"return",cmd:()=>Y.commit()}]:[]]}import{TextAttributes as eK}from"@opentui/core";function DS(J){let Y=x1(),{theme:Z}=x0(),[f,X]=p("prompt"),[G,Q]=p(""),[q,B]=p(J.defaultVendor),[H,K]=p(J.defaultBaseRef);function j(D){let O=fq.indexOf(f());X(fq[(O+D+fq.length)%fq.length]??"prompt")}function U(D){let O=J.engines;if(O.length===0)return;if(D>0){B((l)=>sY(O,l));return}let A=Math.max(0,O.indexOf(q()));B(O[(A-1+O.length)%O.length]??q())}function L(){let D=G().trim();if(!D){X("prompt");return}J.onSubmit({prompt:D,vendor:q(),baseRef:H().trim()||J.defaultBaseRef}),Y.clear()}U1(()=>({enabled:!0,bindings:tK(f(),{cycleField:j,stepEngine:U,commit:L})}));let F=(D)=>f()===D?Z.accent:Z.textMuted;return(()=>{var D=V("box"),O=V("box"),A=V("text"),l=V("text"),R=V("box"),C=V("text"),g=V("input"),y=V("box"),$=V("text"),G0=V("box"),t=V("text"),Z0=V("input"),u=V("box"),B0=V("text");return W(D,O),W(D,R),W(D,y),W(D,G0),W(D,u),z(D,"paddingLeft",2),z(D,"paddingRight",2),z(D,"gap",1),W(O,A),W(O,l),z(O,"flexDirection","row"),z(O,"justifyContent","space-between"),M(A,()=>`Quick task \xB7 ${J.repoLabel}`),W(l,T("esc")),z(l,"onMouseUp",()=>J.onCancel()),W(R,C),W(R,g),z(R,"gap",0),W(C,T("prompt")),z(g,"placeholder","what should this task do?"),z(g,"onInput",(Y0)=>Q(FJ(Y0))),z(g,"onSubmit",()=>L()),W(y,$),z(y,"flexDirection","row"),z(y,"gap",2),W($,T("engine")),M(y,k(Y1,{get each(){return J.engines},children:(Y0)=>(()=>{var W0=V("text");return z(W0,"onMouseUp",()=>{B(Y0),X("engine")}),M(W0,()=>J.engineLabel(Y0)),w((o)=>{var _=q()===Y0?Z.primary:Z.textMuted,r=q()===Y0?eK.BOLD:void 0;return _!==o.e&&(o.e=z(W0,"fg",_,o.e)),r!==o.t&&(o.t=z(W0,"attributes",r,o.t)),o},{e:void 0,t:void 0}),W0})()}),null),W(G0,t),W(G0,Z0),z(G0,"gap",0),W(t,T("branch")),z(Z0,"onInput",(Y0)=>K(FJ(Y0))),z(Z0,"onSubmit",()=>L()),W(u,B0),z(u,"paddingBottom",1),W(B0,T("enter create \xB7 tab field \xB7 ctrl+e engine \xB7 esc cancel")),w((Y0)=>{var W0=eK.BOLD,o=Z.text,_=Z.textMuted,r=F("prompt"),f0=G(),a=f()==="prompt",U0=F("engine"),c=F("branch"),N=H(),s=J.defaultBaseRef,H0=f()==="branch",D0=Z.textMuted;return W0!==Y0.e&&(Y0.e=z(A,"attributes",W0,Y0.e)),o!==Y0.t&&(Y0.t=z(A,"fg",o,Y0.t)),_!==Y0.a&&(Y0.a=z(l,"fg",_,Y0.a)),r!==Y0.o&&(Y0.o=z(C,"fg",r,Y0.o)),f0!==Y0.i&&(Y0.i=z(g,"value",f0,Y0.i)),a!==Y0.n&&(Y0.n=z(g,"focused",a,Y0.n)),U0!==Y0.s&&(Y0.s=z($,"fg",U0,Y0.s)),c!==Y0.h&&(Y0.h=z(t,"fg",c,Y0.h)),N!==Y0.r&&(Y0.r=z(Z0,"value",N,Y0.r)),s!==Y0.d&&(Y0.d=z(Z0,"placeholder",s,Y0.d)),H0!==Y0.l&&(Y0.l=z(Z0,"focused",H0,Y0.l)),D0!==Y0.u&&(Y0.u=z(B0,"fg",D0,Y0.u)),Y0},{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}),D})()}function MS(J,Y){return new Promise((Z)=>{J.replace(()=>k(DS,WK(Y,{onSubmit:(f)=>Z(f),onCancel:()=>Z(void 0)})),()=>Z(void 0)),J.setSize("medium")})}var fq,J4;var Y4=S(()=>{h();h();h();h();h();h();h();h();q1();zJ();T1();MJ();bJ();CG();fq=["prompt","engine","branch"];J4={show:MS}});async function Z4(J={}){let Y=J.logTag??"orch-connect",Z=J.connect??dJ,f=null;try{let X=await Z();if(!X)return uY(Y,"no daemon running \u2014 caller degrades"),null;return f=new XJ(X,{...J.orchestratorOptions,channels:J.channels}),await f.init(),f}catch(X){return fZ(Y,X),f?.dispose(),null}}var f4=S(()=>{cZ();DJ();CZ()});function X4(J){let[Y,Z]=p(J.initial??"sidebar"),[f,X]=p(0),G=s1();function Q(j){if(X((L)=>L+1),Y()===j)return;let U=G?.currentFocusedRenderable;if(U&&!U.isDestroyed)try{U.blur()}catch{}Z(j)}function q(j){let L=(Xq.indexOf(Y())+j+Xq.length)%Xq.length;Q(Xq[L])}let B=new Map;function H(j){let U=B.get(j);if(!U)U=()=>Y()===j,B.set(j,U);return U}let K={focused:Y,is:H,setFocused:Q,cycle:q,refocusTick:f};return k(FS.Provider,{value:K,get children(){return J.children}})}var Xq,FS;var G4=S(()=>{h();h();q1();Xq=["sidebar","workspace","files","terminal"],FS=HY(null)});function z4(){for(let J of yZ){let Y=OS.get(J.id);if(!Y)continue;let Z=J;Z.keys=[...Y.keys],Z.hint=Y.hint?{...Y.hint}:void 0}}function Q4(){AS((J)=>J+1)}function vj(J){return RS.get(J)}function gS(J){return vj(J)?.keys??[]}function kZ(J){let Y=[];for(let Z in J){let f=J[Z];if(!f)continue;let X=gS(Z);if(X.length===0){console.warn(`[kobe/keybindings] bindByIds: id="${Z}" has no chords (or doesn't exist in KobeKeymap)`);continue}X.forEach((G,Q)=>Y.push({key:G,cmd:f,slot:Q}))}return Y}var yZ,OS,Pj,AS,RS;var KX=S(()=>{q1();yZ=[{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:"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"}}],OS=new Map(yZ.map((J)=>[J.id,{keys:[...J.keys],hint:J.hint?{...J.hint}:void 0}]));[Pj,AS]=p(0);RS=new Map(yZ.map((J)=>[J.id,J]))});function Gq(){if(IZ)return IZ;let J=JQ();if(!J.exists)return IZ={path:J.path,exists:!1,applied:[],warnings:[]},IZ;let Y=[...J.warnings],Z=ZQ(J.doc,process.platform,{chordOptsFor:FH});Y.push(...Z.warnings);let f=Z.entries.filter((q)=>q.id.startsWith("tmux.")),X=Z.entries.filter((q)=>!q.id.startsWith("tmux.")),G=G7(yZ,X);Y.push(...G.warnings);let Q=[...G.applied];if(f.length>0){let q=MH(f);Y.push(...q.warnings);for(let B of q.overridden){if(B===FY){Q.push({id:B,keys:q.focus.map((j)=>j?.chord??"").filter((j)=>j!==""),defaultKeys:LZ});continue}let H=q.binds[B];Q.push({id:B,keys:H?[H.chord]:[],defaultKeys:[Gf[B]]});let K=yZ.find((j)=>j.id===B);if(K?.hint)K.hint.keys=H?`${sf(B)?"prefix ":""}${H.chord}`:"\u2014"}}for(let q of Y)console.warn(`[kobe/keybindings] ${q}`);return IZ={path:J.path,exists:!0,applied:Q,warnings:Y},IZ}function q4(){return IZ??Gq()}function B4(){IZ=null,X7(),B7(),z4();let J=Gq();return Q4(),J}var IZ=null;var mj=S(()=>{LH();GQ();fQ();KX()});var CS=250,UX,H4;var SG=S(()=>{MG();Of();Sj();({use:UX,provider:H4}=oQ({name:"KV",init:()=>{let[J,Y]=SZ($1()),Z=new Set,f=null;function X(q){if(Z.size===0)return!0;try{let B={};for(let H of Z)B[H]=J[H];return wZ(B),Z.clear(),!0}catch(B){return console.error(`[kobe] kv ${q} failed:`,B),!1}}function G(){if(f)clearTimeout(f);f=setTimeout(()=>{f=null,X("write")},CS)}let Q={get ready(){return!0},get store(){return J},signal(q,B){if(J[q]===void 0)Y(q,B);return[()=>Q.get(q),(H)=>Q.set(q,H)]},get(q,B){return J[q]??B},set(q,B){Y(q,B),Z.add(q),G()},flush(){if(f)clearTimeout(f),f=null;return X("flush")},clear(){for(let q of Object.keys(J))Y(q,void 0);if(f)clearTimeout(f),f=null;Z.clear();try{m9({})}catch(q){console.error("[kobe] kv clear write failed:",q)}}};return Q}}))});var zq="../pulse-n3cq1btw.wav";var j4=()=>{};import{existsSync as yS,mkdirSync as kS}from"fs";import{tmpdir as IS}from"os";import{basename as NS,isAbsolute as bS,join as cj,resolve as TS}from"path";function uS(J,Y,Z){if(J==="ffplay")return[J,"-autoexit","-nodisp","-af",`volume=${Z}`,Y];if(J==="mpv")return[J,"--no-video","--audio-display=no","--volume",String(Math.round(Z*100)),Y];if(J==="mpg123"||J==="mpg321")return[J,"-g",String(Math.round(Z*100)),Y];if(J==="mplayer")return[J,"-vo","null","-volume",String(Math.round(Z*100)),Y];if(J==="afplay"||J==="omxplayer"||J==="aplay"||J==="cmdmp3")return[J,Y];if(J==="play")return[J,"-v",String(Z),Y];if(J==="cvlc")return[J,`--gain=${Z}`,"--play-and-exit",Y];return[J,"-c",`(New-Object Media.SoundPlayer '${Y.replace(/'/g,"''")}').PlaySync()`]}function xS(){if(Qq!==void 0)return Qq;let Y=(process.env.PATH??"").split(":").filter(Boolean);return Qq=ES.find((Z)=>Y.some((f)=>yS(cj(f,Z))))??null,Qq}async function wS(){return K4??=(async()=>{kS(V4,{recursive:!0});let J=cj(V4,NS(W4)),Y=Bun.file(J);if(await Y.exists())return J;return await Bun.write(Y,Bun.file(W4)),J})(),K4}function U4(J=0.4){let Y=xS();if(!Y)return;wS().then((Z)=>{try{Bun.spawn(uS(Y,Z,J),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var W4,V4,ES,Qq,K4;var L4=S(()=>{j4();W4=bS(zq)?zq:TS(import.meta.dir,zq),V4=cj(IS(),"kobe-sfx"),ES=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function D4(J,Y){return`${J}:${Y}`}function F4(J){let Y=UX(),[Z,f]=p([]),[X,G]=p(new Map),Q=0;function q(j){if(G((U)=>{let L=new Map(U),F=D4(j.taskId,j.tabId),D=U.get(F);if(D==="needs_input"||D==="error")return U;return L.set(F,j.kind),L}),Y.get("notifications.sound.enabled",!0)!==!1){try{process.stdout.write("\x07")}catch{}U4()}if(Y.get("notifications.toast.enabled",!0)!==!1){let U=++Q,L={id:U,kind:j.kind,taskId:j.taskId,tabId:j.tabId,title:j.title};f((F)=>[...F,L]),setTimeout(()=>B(U),hS)}}function B(j){f((U)=>U.filter((L)=>L.id!==j))}function H(j,U){G((L)=>{let F=D4(j,U);if(!L.has(F))return L;let D=new Map(L);return D.delete(F),D})}let K={toasts:Z,unread:X,notify:q,dismiss:B,markRead:H};return k(M4.Provider,{value:K,get children(){return J.children}})}function qq(){let J=SJ(M4);if(!J)throw Error("useNotifications must be used within a NotificationsProvider");return J}var hS=4500,M4;var Bq=S(()=>{h();q1();L4();SG();M4=HY()});function dj(J,Y){if(typeof Y.theme==="string"&&Y.theme.length>0&&Y.theme!==J.selectedTheme()){if(!J.hasTheme(Y.theme))J.reloadUserThemes();if(J.hasTheme(Y.theme))J.setTheme(Y.theme)}if(typeof Y.transparentBackground==="boolean"&&Y.transparentBackground!==J.transparentBackground())J.setTransparentBackground(Y.transparentBackground);if(Y.focusAccent===null||typeof Y.focusAccent==="string"){let Z=vS(Y.focusAccent);if(Z&&Z!==J.focusAccent())J.setFocusAccent(Z)}}function vS(J){if(J===null)return"primary";return PS.includes(J)?J:null}var PS;var O4=S(()=>{PS=["primary","success","info"]});import{readFileSync as mS}from"fs";function A4(J){try{let Y=JSON.parse(mS(EJ(),"utf8")),Z=typeof Y.activeTheme==="string"&&FG(Y.activeTheme)?Y.activeTheme:J,f=Y.transparentBackground===!0,X=typeof Y.focusAccent==="string"&&Kf.includes(Y.focusAccent)?Y.focusAccent:null;return{theme:Z,transparent:f,focusAccent:X}}catch{return{theme:J,transparent:!1,focusAccent:null}}}var R4=S(()=>{c1();T1()});function dS(J){if(J)qz(J);Gq();for(let{name:Y,theme:Z}of JG())kj(Y,Z)}function nS(J){let Y={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return J?{...Y,onDestroy:J}:Y}function iS(J){let Y=()=>J.children,Z=()=>J.notifications?k(F4,{get children(){return Y()}}):Y(),f=()=>k(bK,{get children(){return Z()}}),X=()=>J.focus?k(X4,{initial:"sidebar",get children(){return f()}}):f(),G=()=>J.kv?k(H4,{get children(){return X()}}):X();return k(yK,{mode:"dark",get theme(){return J.theme},get children(){return G()}})}function lS(J){let Y=x0(),Z={selectedTheme:()=>Y.selected,hasTheme:(q)=>Y.has(q),setTheme:(q)=>Y.set(q),reloadUserThemes:()=>{for(let{name:q,theme:B}of JG())kj(q,B)},transparentBackground:()=>Y.transparentBackground,setTransparentBackground:(q)=>Y.setTransparentBackground(q),focusAccent:()=>Y.focusAccent,setFocusAccent:(q)=>Y.setFocusAccent(q)};dj(Z,{theme:J.boot.theme,transparentBackground:J.boot.transparent,focusAccent:J.boot.focusAccent});let[f,X]=p(null),G=!1;o1(()=>{(async()=>{let q=await Z4({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!q)return;if(G){q.dispose();return}X(q)})()}),p0(()=>{let q=f()?.uiPrefsSignal()();if(q)dj(Z,q)});let Q=null;return p0(()=>{let q=f()?.keybindingsRevSignal()();if(q==null)return;if(Q===null||q===Q){Q=q;return}Q=q,B4()}),i1(()=>{G=!0,f()?.dispose()}),null}async function qJ(J){dS(J.logContext);let Y=A4(cS),Z=await J.setup(Y),f=J.providers?.kv??!0,X=J.providers?.focus??!0,G=J.providers?.notifications??!1;await FK(()=>k(iS,{get theme(){return Y.theme},kv:f,focus:X,notifications:G,get children(){return[k(lS,{boot:Y}),r0(()=>Z.root())]}}),nS(Z.onDestroy))}var cS="claude";var NZ=S(()=>{h();h();h();cZ();q1();f4();G4();mj();SG();Bq();T1();BQ();bJ();O4();R4()});async function nj(J,Y,Z,f,X={}){let G=K1(Y.id);if(await X1(G))return!0;let Q=Y.worktreePath;if(!Q)Q=await J.ensureWorktree(Y.id);if(!Q)throw Error(`task ${Y.id} has no worktree`);let{ensureSession:q}=await Promise.resolve().then(() => (ZJ(),ZY)),{resolveEngineLaunchInit:B}=await Promise.resolve().then(() => (rf(),UH)),H=B(Z,Q,{kind:X.includeInitPrompt?"repo-init":"none"});if(!await q({name:G,cwd:Q,command:LJ(f),taskId:Y.id,vendor:f,repo:Z,launchInit:H}))throw Error(`failed to start tmux session for ${Y.id}`);return!1}async function Hq(J,Y,Z,f,X={}){await nj(J,Y,Z,f,X),await J.setActiveTask(Y.id).catch(()=>{});let{prepareWindowForSwitch:G}=await Promise.resolve().then(() => (ZJ(),ZY));await G(K1(Y.id)),await u0(["switch-client","-t",`=${K1(Y.id)}`])}var ij=S(()=>{kJ();N1()});var g4={};Q1(g4,{startNewTaskHost:()=>$S,NewTaskPage:()=>jq});function jq(J){let{theme:Y}=x0(),Z=x1();o1(()=>{f()});async function f(){let X=uJ(),G=J.defaultRepo||X[0]||process.cwd(),Q=C1("lastSelectedVendor")??k1,q=await xY(),B=J.orchestrator,H=await Zq.show(Z,G,X,{defaultVendor:Q,availableVendors:q,discoverAdoptable:B?(j)=>B.discoverAdoptableWorktrees(j):void 0});if(!H)process.exit(0);if(d1("lastSelectedVendor",H.vendor),NY(H.repo),!B)console.error("[kobe new-task] no daemon; cannot create task"),process.exit(1);let K;try{if(H.mode==="adopt")for(let j of H.adopt)K=await B.adoptWorktree({repo:H.repo,worktreePath:j.worktreePath,branch:j.branch,vendor:H.vendor});else K=await B.createTask({repo:H.repo,baseRef:H.baseRef,vendor:H.vendor})}catch(j){console.error("[kobe new-task] task.create/adopt failed:",j),process.exit(1)}if(K)try{await Hq(B,K,H.repo,H.vendor,{includeInitPrompt:H.mode!=="adopt"})}catch(j){console.error("[kobe new-task] auto-enter failed:",j)}process.exit(0)}return(()=>{var X=V("box");return z(X,"flexDirection","column"),z(X,"flexGrow",1),w((G)=>z(X,"backgroundColor",Y.background,G)),X})()}async function $S(J){await qJ({setup:async()=>{let Y=null;try{let Z=await fY(),f=new XJ(Z);await f.init(),Y=f}catch(Z){console.error("[kobe new-task] daemon unavailable; cannot create task:",Z)}return{root:()=>k(jq,{get defaultRepo(){return J.defaultRepo},orchestrator:Y}),onDestroy:()=>{Y?.dispose()}}}})}var lj=S(()=>{h();h();h();h();DJ();q1();CZ();dZ();A1();RJ();CG();T1();NZ();ij();bJ()});function Wq(J,Y,Z,f,X={}){if(J.length===0)return Y;let G=new Map;for(let B of J)G.set(Z(B),B);let Q=J.length===Y.length,q=Array(Y.length);for(let B=0;B<Y.length;B++){let H=Y[B],K=G.get(Z(H));if(K&&f(K,H)&&(!X.samePosition||J[B]===K)){if(q[B]=K,Q&&J[B]!==K)Q=!1}else q[B]=H,Q=!1}return Q?J:q}function C4(J,Y){if(!J)return!0;let Z=J.toLowerCase(),f=Y.toLowerCase(),X=0;for(let G=0;G<f.length&&X<Z.length;G++)if(f.charCodeAt(G)===Z.charCodeAt(X))X++;return X===Z.length}function aS(J,Y){let Z=Y==="archived";return J.filter((f)=>f.archived===Z)}function $j(J,Y,Z,f="default",X){let G=aS(J,Y),Q=Z?.trim()??"",q=X?iJ(X):null,B=Q?G.filter((D)=>C4(Q,`${D.title} ${zY(D.repo)}`)):G,H=[],K=[],j=[],U=new Set;for(let D of B){if(D.kind==="main"){let O=iJ(D.repo);if(U.has(O))continue;U.add(O),H.push(D);continue}if(q&&iJ(D.repo)!==q)continue;if(D.pinned===!0)K.push(D);else j.push(D)}if(H.sort((D,O)=>zY(D.repo).localeCompare(zY(O.repo))),f==="recent")K.sort(S4),j.sort(S4);let L=[],F=0;for(let D of H)L.push({kind:"task",task:D,flatIndex:F}),F++;for(let D of K)L.push({kind:"task",task:D,flatIndex:F}),F++;for(let D of j)L.push({kind:"task",task:D,flatIndex:F}),F++;return L}function S4(J,Y){let Z=y4(Y)-y4(J);if(Z!==0)return Z;return String(Y.id).localeCompare(String(J.id))}function y4(J){let Y=Date.parse(J.updatedAt||J.createdAt);return Number.isFinite(Y)?Y:0}function zY(J){let Y=J.split("/").filter(Boolean);return Y[Y.length-1]??J}function iJ(J){return J.trim().replace(/[\\/]+$/,"")||J}function pS(J,Y){let Z=zY(J);if(!Y.some((X)=>X!==J&&zY(X)===Z))return Z;return J.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function k4(J,Y){let Z=Y==="archived",f=new Map;for(let G of J){let Q=iJ(G.repo),q=f.get(Q)??{repo:G.repo,count:0};if(G.kind==="main")q.repo=G.repo;else if(G.archived===Z)q.count+=1;f.set(Q,q)}let X=[...f.values()].map((G)=>G.repo);return[...f.values()].map((G)=>({repo:G.repo,label:pS(G.repo,X),count:G.count})).sort((G,Q)=>G.label.localeCompare(Q.label))}function I4(J,Y){if(J.length===0)return-1;if(!Y)return J[0]?.flatIndex??-1;let Z=iJ(Y),f=J.find((G)=>G.task.kind!=="main"&&iJ(G.task.repo)===Z);if(f)return f.flatIndex;return J.find((G)=>G.task.kind==="main"&&iJ(G.task.repo)===Z)?.flatIndex??J[0]?.flatIndex??-1}function aj(J){return J.map((Y)=>Y.task.id)}function N4(J){let Y=[],Z=[];for(let f of J)if(f.task.kind==="main")Y.push(f);else Z.push(f);return{projectRows:Y,taskRows:Z}}function _S(J,Y){return J===Y||J.id===Y.id&&J.kind===Y.kind&&J.title===Y.title&&J.repo===Y.repo&&J.branch===Y.branch&&J.worktreePath===Y.worktreePath&&J.status===Y.status&&J.archived===Y.archived&&J.pinned===Y.pinned&&J.vendor===Y.vendor}function b4(J,Y){return Wq(J,Y,(Z)=>Z.task.id,(Z,f)=>Z.flatIndex===f.flatIndex&&_S(Z.task,f.task),{samePosition:!0})}var Vq=()=>{};var T4={};Q1(T4,{startQuickTaskHost:()=>tS});async function rS(J,Y){let Z,f;if(Y){let j=await KJ(Y,["@kobe_task","@kobe_worktree"]);Z=j["@kobe_task"]||void 0,f=j["@kobe_worktree"]||void 0}let X=(Z?J?.getTask(Z)?.repo:void 0)??uJ()[0],G=X??f??process.cwd();if(!X)return{ctx:null,fallbackRepo:G};let Q=await xY(),q=C1("lastSelectedVendor")??k1,B=Q.length===0||Q.includes(q)?q:Q[0]??q,H=OG(GJ(X))??GY,K=Q.length>0?Q:[B];return{ctx:{repo:X,vendor:B,baseRef:H,engines:K},fallbackRepo:G}}async function oS(J,Y,Z,f,X){let G=await nj(J,Y,Z,f),Q=K1(Y.id),{pane:q}=await tX(Q,!G);if(q)await eX(q,X)}function sS(J){let{theme:Y}=x0(),Z=x1();o1(()=>{f()});async function f(){let X=J.ctx,G=await J4.show(Z,{repoLabel:zY(X.repo),engines:X.engines,defaultVendor:X.vendor,defaultBaseRef:X.baseRef,engineLabel:tZ});if(G===void 0)process.exit(0);d1("lastSelectedVendor",G.vendor),NY(X.repo);let Q=J.orchestrator;if(!Q)console.error("[kobe quick-task] no daemon; cannot create task"),process.exit(1);try{let q=await Q.createTask({repo:X.repo,baseRef:G.baseRef,vendor:G.vendor});await oS(Q,q,X.repo,G.vendor,G.prompt),await Hq(Q,q,X.repo,G.vendor)}catch(q){console.error("[kobe quick-task] task.create/deliver failed:",q),process.exit(1)}process.exit(0)}return(()=>{var X=V("box");return z(X,"flexDirection","column"),z(X,"flexGrow",1),w((G)=>z(X,"backgroundColor",Y.background,G)),X})()}async function tS(J){await qJ({setup:async()=>{let Y=null;try{let X=await fY(),G=new XJ(X);await G.init(),Y=G}catch(X){console.error("[kobe quick-task] daemon unavailable; cannot create task:",X)}let{ctx:Z,fallbackRepo:f}=await rS(Y,J.session);return{root:()=>Z?k(sS,{ctx:Z,orchestrator:Y}):k(jq,{defaultRepo:f,orchestrator:Y}),onDestroy:()=>{Y?.dispose()}}}})}var E4=S(()=>{h();h();h();h();DJ();q1();CZ();dZ();kJ();A1();N1();zQ();RJ();Y4();T1();tQ();NZ();Jq();ij();lj();Vq();bJ()});function Uq(J){let Y=J.trim().split(/\s+/).pop()??"",Z=/^([CM])-(.+)$/.exec(Y);if(!Z)return null;let f=Z[1]==="C"?"\u2303":"\u2325",X=Z[2]??"";return`${f}${X.length===1?X.toUpperCase():X}`}function Kq(J,Y){if(J.includes("/"))return J.split("/").map((X)=>Kq(X,Y)).join("/");let Z=J.toLowerCase();if(Z==="tab")return"tab";let f=Jy[Z];if(f)return f;if(/^f\d{1,2}$/.test(Z))return Z.toUpperCase();if(!Y)return J;if(/^[a-z]$/.test(Z))return J.toUpperCase();return J.replace(/[a-z]+/gi,(X)=>X.toUpperCase())}function LX(J,Y="\u2303B"){let Z=J.trim();if(!Z)return Z;let f=/^prefix\s+(.+)$/i.exec(Z);if(f){let q=f[1]??"";return`${Y} ${q.includes("+")?LX(q,Y):Kq(q,!0)}`}let X=Z.split("+");if(X.length===1)return Kq(X[0]??"",!1);let G=X[X.length-1]??"";return`${X.slice(0,-1).map((q)=>eS[q.toLowerCase().trim()]??q).join("")} ${Kq(G,!0)}`}var eS,Jy;var pj=S(()=>{eS={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},Jy={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 u4}from"@opentui/core";function Yy(J){let Y=new Map,Z=[];for(let f of J){if(!Y.has(f.category))Y.set(f.category,[]),Z.push(f.category);Y.get(f.category).push(f)}return Z.map((f)=>({category:f,rows:Y.get(f)}))}function DX(J={}){let Y=x1(),{theme:Z}=x0(),f=()=>Yy(yZ),X=()=>J.onClose?J.onClose():Y.clear(),[G,Q]=p("\u2303B");return o1(()=>{v0(["show-options","-g","prefix"]).then(({code:q,stdout:B})=>{if(q!==0)return;let H=Uq(B);if(H)Q(H)})}),U1(()=>({bindings:[{key:"?",cmd:X}]})),(()=>{var q=V("box"),B=V("box"),H=V("text"),K=V("text"),j=V("scrollbox"),U=V("box");return W(q,B),W(q,j),z(q,"paddingLeft",2),z(q,"paddingRight",2),z(q,"gap",1),z(q,"flexShrink",1),W(B,H),W(B,K),z(B,"flexDirection","row"),z(B,"justifyContent","space-between"),z(B,"flexShrink",0),W(H,T("kobe \u2014 keybindings")),W(K,T("esc")),z(K,"onMouseUp",X),W(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),M(U,k(Y1,{get each(){return f()},children:(L)=>(()=>{var F=V("box"),D=V("text");return W(F,D),z(F,"gap",0),M(D,()=>L.category),M(F,k(Y1,{get each(){return L.rows},children:(O)=>{let A=O.hint?.keys??O.keys[0]??"\u2014",l=()=>A==="\u2014"?"\u2014":LX(A,G()),R=()=>(O.hint?O.keys:O.keys.slice(1)).map((C)=>LX(C,G()));return(()=>{var C=V("box"),g=V("box"),y=V("text"),$=V("box"),G0=V("text");return W(C,g),W(C,$),z(C,"flexDirection","row"),z(C,"gap",2),z(C,"paddingLeft",1),W(g,y),z(g,"width",14),M(y,l),W($,G0),z($,"flexGrow",1),M(G0,()=>O.description),M(C,(()=>{var t=r0(()=>R().length>0);return()=>t()?(()=>{var Z0=V("box"),u=V("text");return W(Z0,u),M(u,()=>`(${R().join(", ")})`),w((B0)=>z(u,"fg",Z.textMuted,B0)),Z0})():null})(),null),w((t)=>{var{primary:Z0,text:u}=Z;return Z0!==t.e&&(t.e=z(y,"fg",Z0,t.e)),u!==t.t&&(t.t=z(G0,"fg",u,t.t)),t},{e:void 0,t:void 0}),C})()}}),null),w((O)=>{var A=Z.accent,l=u4.BOLD;return A!==O.e&&(O.e=z(D,"fg",A,O.e)),l!==O.t&&(O.t=z(D,"attributes",l,O.t)),O},{e:void 0,t:void 0}),F})()})),w((L)=>{var F=u4.BOLD,D=Z.text,O=Z.textMuted,A={trackOptions:{backgroundColor:Z.backgroundDialog,foregroundColor:Z.borderActive}};return F!==L.e&&(L.e=z(H,"attributes",F,L.e)),D!==L.t&&(L.t=z(H,"fg",D,L.t)),O!==L.a&&(L.a=z(K,"fg",O,L.a)),A!==L.o&&(L.o=z(j,"verticalScrollbarOptions",A,L.o)),L},{e:void 0,t:void 0,a:void 0,o:void 0}),q})()}var _j=S(()=>{h();h();h();h();h();h();h();h();q1();N1();KX();T1();pj();MJ();bJ();DX.show=(J)=>{J.replace(()=>k(DX,{}))}});import{TextAttributes as Zy}from"@opentui/core";function x4(J){let Y=x1(),{theme:Z}=x0(),[f,X]=p(J.currentTitle);function G(){let Q=f().trim();if(!Q&&!J.allowEmpty)return;J.onSubmit(Q),Y.clear()}return(()=>{var Q=V("box"),q=V("box"),B=V("text"),H=V("text"),K=V("box"),j=V("text"),U=V("input"),L=V("box"),F=V("text");return W(Q,q),W(Q,K),W(Q,L),z(Q,"paddingLeft",2),z(Q,"paddingRight",2),z(Q,"gap",1),W(q,B),W(q,H),z(q,"flexDirection","row"),z(q,"justifyContent","space-between"),M(B,()=>J.dialogTitle??"Rename task"),W(H,T("esc")),z(H,"onMouseUp",()=>J.onCancel()),W(K,j),W(K,U),z(K,"gap",0),M(j,()=>J.fieldLabel??"title"),z(U,"focused",!0),z(U,"onInput",(D)=>X(FJ(D))),z(U,"onSubmit",()=>G()),W(L,F),z(L,"paddingBottom",1),M(F,()=>`enter ${J.submitLabel??"rename"} \xB7 esc cancel`),w((D)=>{var O=Zy.BOLD,A=Z.text,l=Z.textMuted,R=Z.accent,C=f(),g=J.placeholder??J.currentTitle,y=Z.textMuted;return O!==D.e&&(D.e=z(B,"attributes",O,D.e)),A!==D.t&&(D.t=z(B,"fg",A,D.t)),l!==D.a&&(D.a=z(H,"fg",l,D.a)),R!==D.o&&(D.o=z(j,"fg",R,D.o)),C!==D.i&&(D.i=z(U,"value",C,D.i)),g!==D.n&&(D.n=z(U,"placeholder",g,D.n)),y!==D.s&&(D.s=z(F,"fg",y,D.s)),D},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),Q})()}var w4=S(()=>{h();h();h();h();h();h();h();q1();T1();bJ();CG()});function fy(J,Y,Z={}){return new Promise((f)=>{J.replace(()=>k(x4,{currentTitle:Y,get dialogTitle(){return Z.dialogTitle},get fieldLabel(){return Z.fieldLabel},get submitLabel(){return Z.submitLabel},get placeholder(){return Z.placeholder},get allowEmpty(){return Z.allowEmpty},onSubmit:(X)=>f(X),onCancel:()=>f(void 0)}),()=>f(void 0))})}var QY;var rj=S(()=>{h();w4();QY={show:fy}});import{TextAttributes as Xy}from"@opentui/core";function Gy(J){if(!J)return J;return J.charAt(0).toUpperCase()+J.slice(1)}function rY(J){let Y=x1(),{theme:Z}=x0(),[f,X]=SZ({active:J.initialActive??"confirm"});return U1(()=>({bindings:[{key:"return",cmd:()=>{if(f.active==="confirm")J.onConfirm?.();if(f.active==="cancel")J.onCancel?.();Y.clear()}},{key:"left",cmd:()=>X("active",f.active==="confirm"?"cancel":"confirm")},{key:"right",cmd:()=>X("active",f.active==="confirm"?"cancel":"confirm")}]})),(()=>{var G=V("box"),Q=V("box"),q=V("text"),B=V("text"),H=V("text"),K=V("box");return W(G,Q),W(G,H),W(G,K),z(G,"paddingLeft",2),z(G,"paddingRight",2),z(G,"paddingBottom",1),z(G,"gap",0),W(Q,q),W(Q,B),z(Q,"flexDirection","row"),z(Q,"justifyContent","space-between"),M(q,()=>J.title),W(B,T("esc")),z(B,"onMouseUp",()=>Y.clear()),M(H,()=>J.message),z(K,"flexDirection","row"),z(K,"justifyContent","flex-end"),z(K,"paddingTop",1),M(K,k(Y1,{each:["cancel","confirm"],children:(j)=>(()=>{var U=V("box"),L=V("text");return W(U,L),z(U,"paddingLeft",1),z(U,"paddingRight",1),z(U,"onMouseUp",()=>{if(j==="confirm")J.onConfirm?.();if(j==="cancel")J.onCancel?.();Y.clear()}),M(L,()=>Gy(j==="cancel"?J.label??j:J.confirmLabel??j)),w((F)=>{var D=j===f.active?Z.primary:void 0,O=j===f.active?Z.selectedListItemText:Z.textMuted;return D!==F.e&&(F.e=z(U,"backgroundColor",D,F.e)),O!==F.t&&(F.t=z(L,"fg",O,F.t)),F},{e:void 0,t:void 0}),U})()})),w((j)=>{var U=Xy.BOLD,L=Z.text,F=Z.textMuted,D=Z.textMuted;return U!==j.e&&(j.e=z(q,"attributes",U,j.e)),L!==j.t&&(j.t=z(q,"fg",L,j.t)),F!==j.a&&(j.a=z(B,"fg",F,j.a)),D!==j.o&&(j.o=z(H,"fg",D,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),G})()}var oj=S(()=>{h();h();h();h();h();h();h();q1();MG();T1();MJ();bJ();rY.show=(J,Y,Z,f,X,G)=>{return new Promise((Q)=>{J.replace(()=>k(rY,{title:Y,message:Z,onConfirm:()=>Q(!0),onCancel:()=>Q(!1),label:f,confirmLabel:X,get initialActive(){return G?.initialActive}}),()=>Q(void 0)),J.setSize("small")})}});import{unlinkSync as zy}from"fs";import{join as Qy}from"path";function h4(J){return J instanceof XJ}function P4(J,Y){try{J?.destroy()}catch(Z){console.error(`kobe: renderer.destroy() failed during ${Y}:`,Z)}}async function sj(J,Y,Z){if(await rY.show(J,"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;Y.clear();try{zy(Qy(qY(),".kobe","tasks.json"))}catch(X){if(X.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",X)}P4(Z,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
223
- `),process.exit(0)}async function tj(J,Y,Z){if(!(Y instanceof XJ))return;if(await rY.show(J,"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(Z,"daemon restart"),process.stderr.write(`kobe: window closed. Relaunch kobe to start fresh.
224
- `),process.exit(0)}var v4=S(()=>{CZ();c1();oj()});function qy(J){return`theme:${J}`}function ej(J){return`accent:${J}`}function By(J){return`engine:${J}`}function yG(J){return`surface:${J}`}function J9(J){return[...J.themeNames.map((Y)=>({id:qy(Y),kind:"theme",name:Y})),{id:"transparent",kind:"transparent"},...J.focusAccentSlots.map((Y)=>({id:ej(Y),kind:"focusAccent",slot:Y})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:yG("chattab"),kind:"surface",surface:"chattab"},{id:yG("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function Hy(J){return[...J.map((Y)=>({id:By(Y),kind:"engine",vendor:Y})),{id:"add-engine",kind:"engineAdd"}]}function jy(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function kG(J){return[{id:"dev-reset",kind:"devReset"},...J?[{id:"dev-restart",kind:"devRestartDaemon"}]:[],{id:"remote-projects",kind:"devRemoteProjects"},{id:"auto-status",kind:"devAutoStatus"},{id:"dispatcher",kind:"devDispatcher"}]}function c4(J,Y){switch(J){case"general":return J9(Y);case"engines":return Hy(Y.engineList);case"accounts":case"keys":return[];case"feedback":return jy();case"dev":return kG(Y.hasDaemon)}}function IG(J,Y){return J.findIndex((Z)=>Z.id===Y)}function Lq(J,Y){return J[Y]}var Lf,m4;var Y9=S(()=>{Lf=[{id:"general",label:"General"},{id:"engines",label:"Engines"},{id:"accounts",label:"Accounts"},{id:"keys",label:"Keybindings"},{id:"feedback",label:"Feedback"},{id:"dev",label:"Dev"}],m4={primary:"Primary (brand accent)",success:"Success (legacy green)",info:"Info (cool blue)"}});import{TextAttributes as _0}from"@opentui/core";function d4(J){let{theme:Y}=x0();return(()=>{var Z=V("box");return z(Z,"flexDirection","column"),z(Z,"flexShrink",0),z(Z,"width",14),z(Z,"gap",0),M(Z,k(Y1,{each:Lf,children:(f,X)=>{let G=()=>X()===J.cursor(),Q=()=>G()&&J.level()==="sidebar";return(()=>{var q=V("box"),B=V("text");return W(q,B),z(q,"paddingLeft",1),z(q,"paddingRight",1),z(q,"onMouseUp",()=>J.switchSection(f.id)),z(B,"wrapMode","none"),M(B,()=>f.label),w((H)=>{var K=Q()?Y.primary:void 0,j=Q()?Y.selectedListItemText:G()?Y.accent:Y.textMuted,U=G()?_0.BOLD:void 0;return K!==H.e&&(H.e=z(q,"backgroundColor",K,H.e)),j!==H.t&&(H.t=z(B,"fg",j,H.t)),U!==H.a&&(H.a=z(B,"attributes",U,H.a)),H},{e:void 0,t:void 0,a:void 0}),q})()}})),Z})()}function n4(J){let Y=x0(),{theme:Z}=Y,f=()=>J9({themeNames:J.themeNames(),focusAccentSlots:Kf}),X=(R)=>IG(f(),R),G=()=>X("transparent"),Q=()=>X("toast"),q=()=>X("sound"),B=()=>X(yG("chattab")),H=()=>X(yG("taskpanel")),K=()=>X("editor-kind"),j=()=>X("editor-custom"),U=()=>J.bodyRow()===G(),L=()=>J.bodyRow()===Q(),F=()=>J.bodyRow()===q(),D=()=>J.bodyRow()===B(),O=()=>J.bodyRow()===H(),A=()=>J.bodyRow()===K(),l=()=>J.bodyRow()===j();return(()=>{var R=V("box"),C=V("text"),g=V("text"),y=V("box"),$=V("box"),G0=V("text"),t=V("text"),Z0=V("box"),u=V("text"),B0=V("box"),Y0=V("text"),W0=V("text"),o=V("box"),_=V("text"),r=V("text"),f0=V("box"),a=V("text"),U0=T(" Toast"),c=V("box"),N=V("text"),s=T(" Sound"),H0=V("box"),D0=V("text"),y0=V("text"),d0=V("box"),x=V("text"),F0=T(" ChatTab (separate page)"),Q0=V("box"),L0=V("text"),k0=T(" Task panel (in-pane overlay)"),T0=V("box"),m0=V("text"),$0=V("text"),O0=V("box"),v=V("text"),X0=V("box"),A0=V("text");return W(R,C),W(R,g),W(R,y),W(R,$),W(R,B0),W(R,o),W(R,H0),W(R,T0),z(R,"flexDirection","column"),z(R,"gap",1),W(C,T("Theme")),W(g,T("l to enter list \xB7 j/k to highlight \xB7 enter to apply")),z(y,"flexDirection","column"),z(y,"gap",0),M(y,k(Y1,{get each(){return J.themeNames()},children:(E,l0)=>{let S0=()=>J.level()==="body"&&J.bodyRow()===l0(),c0=()=>E===Y.selected;return(()=>{var w0=V("box"),a0=V("text");return W(w0,a0),z(w0,"flexDirection","row"),z(w0,"gap",1),z(w0,"paddingLeft",1),z(w0,"paddingRight",1),z(w0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(l0()),J.setThemeCursor(l0()),J.selectTheme(E)}),z(a0,"wrapMode","none"),M(a0,()=>c0()?"\u25CF ":" ",null),M(a0,E,null),w((n)=>{var e=S0()?Z.primary:void 0,q0=S0()?Z.selectedListItemText:c0()?Z.accent:Z.text,M0=S0()||c0()?_0.BOLD:void 0;return e!==n.e&&(n.e=z(w0,"backgroundColor",e,n.e)),q0!==n.t&&(n.t=z(a0,"fg",q0,n.t)),M0!==n.a&&(n.a=z(a0,"attributes",M0,n.a)),n},{e:void 0,t:void 0,a:void 0}),w0})()}})),W($,G0),W($,t),W($,Z0),z($,"flexDirection","column"),z($,"gap",0),z($,"paddingTop",1),W(G0,T("Transparent background")),W(t,T("Drops the renderer's bg fill so the host terminal shows through. `t` toggles.")),z(t,"wrapMode","word"),W(Z0,u),z(Z0,"flexDirection","row"),z(Z0,"paddingLeft",1),z(Z0,"paddingRight",1),z(Z0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(G()),J.toggleTransparent()}),z(u,"wrapMode","none"),M(u,()=>Y.transparentBackground?"[x] on":"[ ] off"),W(B0,Y0),W(B0,W0),z(B0,"flexDirection","column"),z(B0,"gap",0),z(B0,"paddingTop",1),W(Y0,T("Focus accent")),W(W0,T("Color of focused pane title, \u258C marker, and split borders.")),z(W0,"wrapMode","word"),M(B0,k(Y1,{each:Kf,children:(E)=>{let l0=()=>X(ej(E)),S0=()=>J.level()==="body"&&J.bodyRow()===l0(),c0=()=>Y.focusAccent===E;return(()=>{var w0=V("box"),a0=V("text");return W(w0,a0),z(w0,"flexDirection","row"),z(w0,"gap",1),z(w0,"paddingLeft",1),z(w0,"paddingRight",1),z(w0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(l0()),J.selectFocusAccent(E)}),z(a0,"wrapMode","none"),M(a0,()=>c0()?"\u25CF ":" ",null),M(a0,()=>m4[E],null),w((n)=>{var e=S0()?Z.primary:void 0,q0=S0()?Z.selectedListItemText:c0()?Z.focusAccent:Z.text,M0=S0()||c0()?_0.BOLD:void 0;return e!==n.e&&(n.e=z(w0,"backgroundColor",e,n.e)),q0!==n.t&&(n.t=z(a0,"fg",q0,n.t)),M0!==n.a&&(n.a=z(a0,"attributes",M0,n.a)),n},{e:void 0,t:void 0,a:void 0}),w0})()}}),null),W(o,_),W(o,r),W(o,f0),W(o,c),z(o,"flexDirection","column"),z(o,"gap",0),z(o,"paddingTop",1),W(_,T("Notifications")),W(r,T("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.")),z(r,"wrapMode","word"),W(f0,a),z(f0,"flexDirection","row"),z(f0,"gap",1),z(f0,"paddingLeft",1),z(f0,"paddingRight",1),z(f0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(Q()),J.toggleToast()}),W(a,U0),z(a,"wrapMode","none"),M(a,()=>J.toastEnabled()?"[x]":"[ ]",U0),W(c,N),z(c,"flexDirection","row"),z(c,"gap",1),z(c,"paddingLeft",1),z(c,"paddingRight",1),z(c,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(q()),J.toggleSound()}),W(N,s),z(N,"wrapMode","none"),M(N,()=>J.soundEnabled()?"[x]":"[ ]",s),W(H0,D0),W(H0,y0),W(H0,d0),W(H0,Q0),z(H0,"flexDirection","column"),z(H0,"gap",0),z(H0,"paddingTop",1),W(D0,T("Settings page")),W(y0,T("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.")),z(y0,"wrapMode","word"),W(d0,x),z(d0,"flexDirection","row"),z(d0,"gap",1),z(d0,"paddingLeft",1),z(d0,"paddingRight",1),z(d0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(B()),J.selectSurface("chattab")}),W(x,F0),z(x,"wrapMode","none"),M(x,()=>J.settingsSurface()==="chattab"?"[x]":"[ ]",F0),W(Q0,L0),z(Q0,"flexDirection","row"),z(Q0,"gap",1),z(Q0,"paddingLeft",1),z(Q0,"paddingRight",1),z(Q0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(H()),J.selectSurface("taskpanel")}),W(L0,k0),z(L0,"wrapMode","none"),M(L0,()=>J.settingsSurface()==="taskpanel"?"[x]":"[ ]",k0),W(T0,m0),W(T0,$0),W(T0,O0),W(T0,X0),z(T0,"flexDirection","column"),z(T0,"gap",0),z(T0,"paddingTop",1),W(m0,T("Editor")),W($0,T("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.")),z($0,"wrapMode","word"),W(O0,v),z(O0,"flexDirection","row"),z(O0,"gap",1),z(O0,"paddingLeft",1),z(O0,"paddingRight",1),z(O0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(K()),J.cycleEditorKind()}),z(v,"wrapMode","none"),M(v,()=>`editor: < ${J.editorKind()} > (enter to change)`),W(X0,A0),z(X0,"flexDirection","row"),z(X0,"gap",1),z(X0,"paddingLeft",1),z(X0,"paddingRight",1),z(X0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(j()),J.editEditorCustom()}),z(A0,"wrapMode","none"),M(A0,()=>`custom: ${J.editorCustomCommand().trim()||"(unset \u2014 enter to edit)"}`),w((E)=>{var l0=Z.text,S0=_0.BOLD,c0=Z.textMuted,w0=Z.text,a0=_0.BOLD,n=Z.textMuted,e=U()?Z.primary:void 0,q0=U()?Z.selectedListItemText:Y.transparentBackground?Z.accent:Z.textMuted,M0=_0.BOLD,K0=Z.text,o0=_0.BOLD,N0=Z.textMuted,G1=Z.text,b0=_0.BOLD,E0=Z.textMuted,H1=L()?Z.primary:void 0,j1=L()?Z.selectedListItemText:J.toastEnabled()?Z.accent:Z.textMuted,t0=_0.BOLD,e0=F()?Z.primary:void 0,P=F()?Z.selectedListItemText:J.soundEnabled()?Z.accent:Z.textMuted,J0=_0.BOLD,z1=Z.text,F1=_0.BOLD,O1=Z.textMuted,R1=D()?Z.primary:void 0,y1=D()?Z.selectedListItemText:J.settingsSurface()==="chattab"?Z.accent:Z.textMuted,L1=_0.BOLD,J1=O()?Z.primary:void 0,I=O()?Z.selectedListItemText:J.settingsSurface()==="taskpanel"?Z.accent:Z.textMuted,g0=_0.BOLD,h0=Z.text,f1=_0.BOLD,OJ=Z.textMuted,TJ=A()?Z.primary:void 0,BJ=A()?Z.selectedListItemText:Z.accent,SY=_0.BOLD,yY=l()?Z.primary:void 0,HJ=l()?Z.selectedListItemText:J.editorKind()==="custom"?Z.text:Z.textMuted;return l0!==E.e&&(E.e=z(C,"fg",l0,E.e)),S0!==E.t&&(E.t=z(C,"attributes",S0,E.t)),c0!==E.a&&(E.a=z(g,"fg",c0,E.a)),w0!==E.o&&(E.o=z(G0,"fg",w0,E.o)),a0!==E.i&&(E.i=z(G0,"attributes",a0,E.i)),n!==E.n&&(E.n=z(t,"fg",n,E.n)),e!==E.s&&(E.s=z(Z0,"backgroundColor",e,E.s)),q0!==E.h&&(E.h=z(u,"fg",q0,E.h)),M0!==E.r&&(E.r=z(u,"attributes",M0,E.r)),K0!==E.d&&(E.d=z(Y0,"fg",K0,E.d)),o0!==E.l&&(E.l=z(Y0,"attributes",o0,E.l)),N0!==E.u&&(E.u=z(W0,"fg",N0,E.u)),G1!==E.c&&(E.c=z(_,"fg",G1,E.c)),b0!==E.w&&(E.w=z(_,"attributes",b0,E.w)),E0!==E.m&&(E.m=z(r,"fg",E0,E.m)),H1!==E.f&&(E.f=z(f0,"backgroundColor",H1,E.f)),j1!==E.y&&(E.y=z(a,"fg",j1,E.y)),t0!==E.g&&(E.g=z(a,"attributes",t0,E.g)),e0!==E.p&&(E.p=z(c,"backgroundColor",e0,E.p)),P!==E.b&&(E.b=z(N,"fg",P,E.b)),J0!==E.T&&(E.T=z(N,"attributes",J0,E.T)),z1!==E.A&&(E.A=z(D0,"fg",z1,E.A)),F1!==E.O&&(E.O=z(D0,"attributes",F1,E.O)),O1!==E.I&&(E.I=z(y0,"fg",O1,E.I)),R1!==E.S&&(E.S=z(d0,"backgroundColor",R1,E.S)),y1!==E.W&&(E.W=z(x,"fg",y1,E.W)),L1!==E.C&&(E.C=z(x,"attributes",L1,E.C)),J1!==E.B&&(E.B=z(Q0,"backgroundColor",J1,E.B)),I!==E.v&&(E.v=z(L0,"fg",I,E.v)),g0!==E.k&&(E.k=z(L0,"attributes",g0,E.k)),h0!==E.x&&(E.x=z(m0,"fg",h0,E.x)),f1!==E.j&&(E.j=z(m0,"attributes",f1,E.j)),OJ!==E.q&&(E.q=z($0,"fg",OJ,E.q)),TJ!==E.z&&(E.z=z(O0,"backgroundColor",TJ,E.z)),BJ!==E.P&&(E.P=z(v,"fg",BJ,E.P)),SY!==E.H&&(E.H=z(v,"attributes",SY,E.H)),yY!==E.F&&(E.F=z(X0,"backgroundColor",yY,E.F)),HJ!==E.M&&(E.M=z(A0,"fg",HJ,E.M)),E},{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}),R})()}function i4(J){let{theme:Y}=x0(),Z=()=>J.vendors.length;return(()=>{var f=V("box"),X=V("text"),G=V("text"),Q=V("box"),q=V("box"),B=V("text");return W(f,X),W(f,G),W(f,Q),z(f,"flexDirection","column"),z(f,"gap",1),W(X,T("Launch command")),W(G,T("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.")),z(G,"wrapMode","word"),W(Q,q),z(Q,"flexDirection","column"),z(Q,"gap",0),M(Q,k(Y1,{get each(){return J.vendors},children:(H,K)=>{let j=()=>J.level()==="body"&&J.bodyRow()===K();return(()=>{var U=V("box"),L=V("text"),F=V("text"),D=V("text");return W(U,L),W(U,F),W(U,D),z(U,"flexDirection","row"),z(U,"gap",1),z(U,"paddingLeft",1),z(U,"paddingRight",1),z(U,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(K()),J.editEngine(H)}),z(L,"wrapMode","none"),M(L,()=>J.isDefaultEngine(H)?"\u25CF":" "),z(F,"wrapMode","none"),M(F,()=>J.displayName(H)),z(D,"wrapMode","none"),M(D,()=>J.commandText(H),null),M(D,(()=>{var O=r0(()=>!!J.isDefault(H));return()=>O()?" (default)":J.isCustom(H)?" (custom)":""})(),null),w((O)=>{var A=j()?Y.primary:void 0,l=j()?Y.selectedListItemText:Y.accent,R=_0.BOLD,C=j()?Y.selectedListItemText:Y.text,g=_0.BOLD,y=j()?Y.selectedListItemText:J.isDefault(H)?Y.textMuted:Y.accent;return A!==O.e&&(O.e=z(U,"backgroundColor",A,O.e)),l!==O.t&&(O.t=z(L,"fg",l,O.t)),R!==O.a&&(O.a=z(L,"attributes",R,O.a)),C!==O.o&&(O.o=z(F,"fg",C,O.o)),g!==O.i&&(O.i=z(F,"attributes",g,O.i)),y!==O.n&&(O.n=z(D,"fg",y,O.n)),O},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),U})()}}),q),W(q,B),z(q,"flexDirection","row"),z(q,"paddingLeft",1),z(q,"paddingRight",1),z(q,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(Z()),J.onAddEngine()}),W(B,T("+ Add engine")),z(B,"wrapMode","none"),w((H)=>{var K=Y.text,j=_0.BOLD,U=Y.textMuted,L=J.level()==="body"&&J.bodyRow()===Z()?Y.primary:void 0,F=J.level()==="body"&&J.bodyRow()===Z()?Y.selectedListItemText:Y.primary;return K!==H.e&&(H.e=z(X,"fg",K,H.e)),j!==H.t&&(H.t=z(X,"attributes",j,H.t)),U!==H.a&&(H.a=z(G,"fg",U,H.a)),L!==H.o&&(H.o=z(q,"backgroundColor",L,H.o)),F!==H.i&&(H.i=z(B,"fg",F,H.i)),H},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),f})()}function l4(J){let{theme:Y}=x0(),Z=(f)=>f.binary.found?`Binary: ${f.binary.path}`:`Binary: ${f.binary.error}`;return(()=>{var f=V("box"),X=V("text"),G=V("text"),Q=V("box"),q=V("text"),B=V("box"),H=V("text"),K=V("box"),j=V("text");return W(f,X),W(f,G),W(f,Q),W(f,B),W(f,K),z(f,"flexDirection","column"),z(f,"gap",1),W(X,T("Accounts")),W(G,T("Read-only view of locally-detected engine accounts. Login flows land here later.")),z(G,"wrapMode","word"),W(Q,q),z(Q,"flexDirection","column"),z(Q,"gap",0),W(q,T("claude-code")),M(Q,k(z0,{get when(){return J.claudeStatus()===null},get children(){var U=V("text");return W(U,T("Checking\u2026")),w((L)=>z(U,"fg",Y.textMuted,L)),U}}),null),M(Q,k(z0,{get when(){return J.claudeStatus()},children:(U)=>(()=>{var L=V("box"),F=V("text");return W(L,F),z(L,"flexDirection","column"),z(L,"gap",0),z(F,"wrapMode","word"),M(F,()=>Z(U())),M(L,()=>{let D=U().account;if(D.kind==="oauth"){let O=[D.organization,D.billingType].filter((A)=>!!A).join(" \xB7 ");return(()=>{var A=V("text");return z(A,"wrapMode","word"),M(A,()=>`\u25CF Logged in: ${D.email}${O?` (${O})`:""}`),w((l)=>z(A,"fg",Y.success,l)),A})()}return(()=>{var O=V("text");return W(O,T("\u25CB Not logged in")),w((A)=>z(O,"fg",Y.textMuted,A)),O})()},null),M(L,k(z0,{get when(){return U().accountError},children:(D)=>(()=>{var O=V("text");return z(O,"wrapMode","word"),M(O,()=>`! ${D()}`),w((A)=>z(O,"fg",Y.warning,A)),O})()}),null),w((D)=>z(F,"fg",U().binary.found?Y.textMuted:Y.warning,D)),L})()}),null),W(B,H),z(B,"flexDirection","column"),z(B,"gap",0),W(H,T("codex")),M(B,k(z0,{get when(){return J.codexStatus()===null},get children(){var U=V("text");return W(U,T("Checking\u2026")),w((L)=>z(U,"fg",Y.textMuted,L)),U}}),null),M(B,k(z0,{get when(){return J.codexStatus()},children:(U)=>(()=>{var L=V("box"),F=V("text");return W(L,F),z(L,"flexDirection","column"),z(L,"gap",0),z(F,"wrapMode","word"),M(F,()=>Z(U())),M(L,()=>{let D=U().account;if(D.kind==="chatgpt")return(()=>{var O=V("text");return z(O,"wrapMode","word"),M(O,()=>`\u25CF ChatGPT login: ${D.email}${D.plan?` (${D.plan})`:""}`),w((A)=>z(O,"fg",Y.success,A)),O})();if(D.kind==="apikey")return(()=>{var O=V("text");return W(O,T("\u25CF API key configured")),w((A)=>z(O,"fg",Y.success,A)),O})();return(()=>{var O=V("text");return W(O,T("\u25CB Not logged in")),w((A)=>z(O,"fg",Y.textMuted,A)),O})()},null),M(L,k(z0,{get when(){return U().accountError},children:(D)=>(()=>{var O=V("text");return z(O,"wrapMode","word"),M(O,()=>`! ${D()}`),w((A)=>z(O,"fg",Y.warning,A)),O})()}),null),w((D)=>z(F,"fg",U().binary.found?Y.textMuted:Y.warning,D)),L})()}),null),W(K,j),z(K,"flexDirection","column"),z(K,"gap",0),W(j,T("copilot")),M(K,k(z0,{get when(){return J.copilotStatus()===null},get children(){var U=V("text");return W(U,T("Checking\u2026")),w((L)=>z(U,"fg",Y.textMuted,L)),U}}),null),M(K,k(z0,{get when(){return J.copilotStatus()},children:(U)=>(()=>{var L=V("box"),F=V("text");return W(L,F),z(L,"flexDirection","column"),z(L,"gap",0),z(F,"wrapMode","word"),M(F,()=>Z(U())),M(L,()=>{let D=U().account;if(D.kind==="token")return(()=>{var O=V("text");return M(O,()=>`\u25CF Token configured (${D.source})`),w((A)=>z(O,"fg",Y.success,A)),O})();if(D.kind==="oauth")return(()=>{var O=V("text");return W(O,T("\u25CF Copilot login detected")),w((A)=>z(O,"fg",Y.success,A)),O})();return(()=>{var O=V("text");return W(O,T("\u25CB Not logged in")),w((A)=>z(O,"fg",Y.textMuted,A)),O})()},null),M(L,k(z0,{get when(){return U().accountError},children:(D)=>(()=>{var O=V("text");return z(O,"wrapMode","word"),M(O,()=>`! ${D()}`),w((A)=>z(O,"fg",Y.warning,A)),O})()}),null),w((D)=>z(F,"fg",U().binary.found?Y.textMuted:Y.warning,D)),L})()}),null),w((U)=>{var L=Y.text,F=_0.BOLD,D=Y.textMuted,O=Y.text,A=_0.BOLD,l=Y.text,R=_0.BOLD,C=Y.text,g=_0.BOLD;return L!==U.e&&(U.e=z(X,"fg",L,U.e)),F!==U.t&&(U.t=z(X,"attributes",F,U.t)),D!==U.a&&(U.a=z(G,"fg",D,U.a)),O!==U.o&&(U.o=z(q,"fg",O,U.o)),A!==U.i&&(U.i=z(q,"attributes",A,U.i)),l!==U.n&&(U.n=z(H,"fg",l,U.n)),R!==U.s&&(U.s=z(H,"attributes",R,U.s)),C!==U.h&&(U.h=z(j,"fg",C,U.h)),g!==U.r&&(U.r=z(j,"attributes",g,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}),f})()}function $4(J){let{theme:Y}=x0(),Z=()=>J.level()==="body"&&J.bodyRow()===0,f=()=>J.level()==="body"&&J.bodyRow()===1,X=()=>J.level()==="body"&&J.bodyRow()===2;return(()=>{var G=V("box"),Q=V("text"),q=V("text"),B=V("box"),H=V("box"),K=V("text"),j=V("text"),U=V("box"),L=V("text"),F=V("text"),D=V("box"),O=V("text");return W(G,Q),W(G,q),W(G,B),z(G,"flexDirection","column"),z(G,"gap",1),W(Q,T("Feedback")),W(q,T("Sends a GitHub Discussion to the kobe repo through `gh`. Requires `gh auth login`; category defaults to Feedback.")),z(q,"wrapMode","word"),W(B,H),W(B,U),W(B,D),z(B,"flexDirection","column"),z(B,"gap",0),W(H,K),W(H,j),z(H,"flexDirection","row"),z(H,"gap",1),z(H,"paddingLeft",1),z(H,"paddingRight",1),z(H,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(0),J.editTitle()}),W(K,T("title")),z(j,"wrapMode","none"),M(j,()=>J.title().trim()||"(enter to edit)"),W(U,L),W(U,F),z(U,"flexDirection","row"),z(U,"gap",1),z(U,"paddingLeft",1),z(U,"paddingRight",1),z(U,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(1),J.editBody()}),W(L,T("body")),z(F,"wrapMode","none"),M(F,()=>J.body().trim()||"(enter to edit)"),W(D,O),z(D,"flexDirection","row"),z(D,"paddingLeft",1),z(D,"paddingRight",1),z(D,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(2),J.submit()}),W(O,T("[enter] Send to GitHub Discussions")),M(G,k(z0,{get when(){return J.status()},get children(){var A=V("text");return z(A,"wrapMode","word"),M(A,()=>J.status()),w((l)=>z(A,"fg",J.status().startsWith("error:")?Y.warning:Y.success,l)),A}}),null),w((A)=>{var l=Y.text,R=_0.BOLD,C=Y.textMuted,g=Z()?Y.primary:void 0,y=Z()?Y.selectedListItemText:Y.text,$=_0.BOLD,G0=Z()?Y.selectedListItemText:Y.textMuted,t=f()?Y.primary:void 0,Z0=f()?Y.selectedListItemText:Y.text,u=_0.BOLD,B0=f()?Y.selectedListItemText:Y.textMuted,Y0=X()?Y.primary:Y.backgroundElement,W0=X()?Y.selectedListItemText:Y.accent,o=_0.BOLD;return l!==A.e&&(A.e=z(Q,"fg",l,A.e)),R!==A.t&&(A.t=z(Q,"attributes",R,A.t)),C!==A.a&&(A.a=z(q,"fg",C,A.a)),g!==A.o&&(A.o=z(H,"backgroundColor",g,A.o)),y!==A.i&&(A.i=z(K,"fg",y,A.i)),$!==A.n&&(A.n=z(K,"attributes",$,A.n)),G0!==A.s&&(A.s=z(j,"fg",G0,A.s)),t!==A.h&&(A.h=z(U,"backgroundColor",t,A.h)),Z0!==A.r&&(A.r=z(L,"fg",Z0,A.r)),u!==A.d&&(A.d=z(L,"attributes",u,A.d)),B0!==A.l&&(A.l=z(F,"fg",B0,A.l)),Y0!==A.u&&(A.u=z(D,"backgroundColor",Y0,A.u)),W0!==A.c&&(A.c=z(O,"fg",W0,A.c)),o!==A.w&&(A.w=z(O,"attributes",o,A.w)),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}),G})()}function a4(J){let{theme:Y}=x0(),Z=()=>J.level()==="body"&&J.bodyRow()===0,f=()=>J.level()==="body"&&J.bodyRow()===1,X=()=>IG(kG(J.hasDaemon),"remote-projects"),G=()=>J.level()==="body"&&J.bodyRow()===X(),Q=()=>IG(kG(J.hasDaemon),"auto-status"),q=()=>J.level()==="body"&&J.bodyRow()===Q(),B=()=>IG(kG(J.hasDaemon),"dispatcher"),H=()=>J.level()==="body"&&J.bodyRow()===B();return(()=>{var K=V("box"),j=V("text"),U=V("text"),L=V("box"),F=V("text"),D=V("text"),O=V("box"),A=V("text"),l=V("text"),R=V("box"),C=V("text"),g=V("text"),y=V("box"),$=V("text"),G0=V("text"),t=V("box"),Z0=V("text");return W(K,j),W(K,U),W(K,L),W(K,D),W(K,O),z(K,"flexDirection","column"),z(K,"gap",1),W(j,T("Reset UI state")),W(U,T("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.")),z(U,"wrapMode","word"),W(L,F),z(L,"flexDirection","row"),z(L,"paddingLeft",1),z(L,"paddingRight",1),z(L,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(0),J.confirmReset()}),W(F,T("[enter] Reset")),M(K,k(z0,{get when(){return J.hasDaemon},get children(){var u=V("box"),B0=V("text"),Y0=V("text"),W0=V("box"),o=V("text");return W(u,B0),W(u,Y0),W(u,W0),z(u,"flexDirection","column"),z(u,"gap",0),z(u,"paddingTop",1),W(B0,T("Restart backend")),W(Y0,T("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.")),z(Y0,"wrapMode","word"),W(W0,o),z(W0,"flexDirection","row"),z(W0,"paddingLeft",1),z(W0,"paddingRight",1),z(W0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(1),J.confirmRestartDaemon()}),W(o,T("[enter] Restart")),w((_)=>{var r=Y.text,f0=_0.BOLD,a=Y.textMuted,U0=f()?Y.primary:Y.backgroundElement,c=f()?Y.selectedListItemText:Y.accent,N=_0.BOLD;return r!==_.e&&(_.e=z(B0,"fg",r,_.e)),f0!==_.t&&(_.t=z(B0,"attributes",f0,_.t)),a!==_.a&&(_.a=z(Y0,"fg",a,_.a)),U0!==_.o&&(_.o=z(W0,"backgroundColor",U0,_.o)),c!==_.i&&(_.i=z(o,"fg",c,_.i)),N!==_.n&&(_.n=z(o,"attributes",N,_.n)),_},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),u}}),D),W(D,T("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.")),z(D,"wrapMode","word"),W(O,A),W(O,l),W(O,R),W(O,g),W(O,y),W(O,G0),W(O,t),z(O,"flexDirection","column"),z(O,"gap",0),z(O,"paddingTop",1),W(A,T("Experimental")),W(l,T("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`.")),z(l,"wrapMode","word"),W(R,C),z(R,"flexDirection","row"),z(R,"paddingLeft",1),z(R,"paddingRight",1),z(R,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(X()),J.toggleRemoteProjects()}),M(C,()=>J.remoteProjectsEnabled()?"[x] Remote projects (on)":"[ ] Remote projects (off)"),W(g,T("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.")),z(g,"wrapMode","word"),W(y,$),z(y,"flexDirection","row"),z(y,"paddingLeft",1),z(y,"paddingRight",1),z(y,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(Q()),J.toggleAutoStatus()}),M($,()=>J.autoStatusEnabled()?"[x] Auto status flow (on)":"[ ] Auto status flow (off)"),W(G0,T("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.")),z(G0,"wrapMode","word"),W(t,Z0),z(t,"flexDirection","row"),z(t,"paddingLeft",1),z(t,"paddingRight",1),z(t,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(B()),J.toggleDispatcher()}),M(Z0,()=>J.dispatcherEnabled()?"[x] Field-notes dispatcher (on)":"[ ] Field-notes dispatcher (off)"),w((u)=>{var B0=Y.text,Y0=_0.BOLD,W0=Y.textMuted,o=Z()?Y.primary:Y.backgroundElement,_=Z()?Y.selectedListItemText:Y.warning,r=_0.BOLD,f0=Y.textMuted,a=Y.text,U0=_0.BOLD,c=Y.textMuted,N=G()?Y.primary:Y.backgroundElement,s=G()?Y.selectedListItemText:Y.text,H0=J.remoteProjectsEnabled()?_0.BOLD:void 0,D0=Y.textMuted,y0=q()?Y.primary:Y.backgroundElement,d0=q()?Y.selectedListItemText:Y.text,x=J.autoStatusEnabled()?_0.BOLD:void 0,F0=Y.textMuted,Q0=H()?Y.primary:Y.backgroundElement,L0=H()?Y.selectedListItemText:Y.text,k0=J.dispatcherEnabled()?_0.BOLD:void 0;return B0!==u.e&&(u.e=z(j,"fg",B0,u.e)),Y0!==u.t&&(u.t=z(j,"attributes",Y0,u.t)),W0!==u.a&&(u.a=z(U,"fg",W0,u.a)),o!==u.o&&(u.o=z(L,"backgroundColor",o,u.o)),_!==u.i&&(u.i=z(F,"fg",_,u.i)),r!==u.n&&(u.n=z(F,"attributes",r,u.n)),f0!==u.s&&(u.s=z(D,"fg",f0,u.s)),a!==u.h&&(u.h=z(A,"fg",a,u.h)),U0!==u.r&&(u.r=z(A,"attributes",U0,u.r)),c!==u.d&&(u.d=z(l,"fg",c,u.d)),N!==u.l&&(u.l=z(R,"backgroundColor",N,u.l)),s!==u.u&&(u.u=z(C,"fg",s,u.u)),H0!==u.c&&(u.c=z(C,"attributes",H0,u.c)),D0!==u.w&&(u.w=z(g,"fg",D0,u.w)),y0!==u.m&&(u.m=z(y,"backgroundColor",y0,u.m)),d0!==u.f&&(u.f=z($,"fg",d0,u.f)),x!==u.y&&(u.y=z($,"attributes",x,u.y)),F0!==u.g&&(u.g=z(G0,"fg",F0,u.g)),Q0!==u.p&&(u.p=z(t,"backgroundColor",Q0,u.p)),L0!==u.b&&(u.b=z(Z0,"fg",L0,u.b)),k0!==u.T&&(u.T=z(Z0,"attributes",k0,u.T)),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,w:void 0,m:void 0,f:void 0,y:void 0,g:void 0,p:void 0,b:void 0,T:void 0}),K})()}function p4(){let{theme:J}=x0(),Y=q4(),Z=Object.keys(DH).sort();return(()=>{var f=V("box"),X=V("text"),G=V("text"),Q=V("box"),q=V("text"),B=V("text"),H=V("text"),K=V("text");return W(f,X),W(f,G),W(f,Q),W(f,H),W(f,K),z(f,"flexDirection","column"),z(f,"gap",1),W(X,T("Keybindings")),W(G,T("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.")),z(G,"wrapMode","word"),W(Q,q),W(Q,B),z(Q,"flexDirection","column"),z(Q,"gap",0),W(q,T("Config file")),z(B,"wrapMode","word"),M(B,()=>Y.path,null),M(B,()=>Y.exists?"":" (not created yet)",null),M(f,k(z0,{get when(){return!Y.exists},get children(){var j=V("box"),U=V("text"),L=V("text"),F=V("text"),D=V("text"),O=V("text"),A=V("text"),l=V("text"),R=V("text"),C=V("text"),g=V("text");return W(j,U),W(j,L),W(j,F),W(j,D),W(j,O),W(j,A),W(j,l),W(j,R),W(j,C),W(j,g),z(j,"flexDirection","column"),z(j,"gap",0),W(U,T("Example")),W(L,T("bindings:")),W(F,T(" chat.fork.new: ctrl+g # string = one chord")),W(D,T(" sidebar.select: [enter] # list = several chords")),W(O,T(" files.createPR: null # null = unbind")),W(A,T(" tmux.tab.new: ctrl+y # tmux session key (see below)")),W(l,T(" tmux.layout.workspaceSplit: g # prefix g")),W(R,T("darwin: # platform overlay (also: linux)")),W(C,T(" bindings:")),W(g,T(" palette.open: [cmd+p, ctrl+p]")),w((y)=>{var $=J.text,G0=_0.BOLD,t=J.textMuted,Z0=J.textMuted,u=J.textMuted,B0=J.textMuted,Y0=J.textMuted,W0=J.textMuted,o=J.textMuted,_=J.textMuted,r=J.textMuted;return $!==y.e&&(y.e=z(U,"fg",$,y.e)),G0!==y.t&&(y.t=z(U,"attributes",G0,y.t)),t!==y.a&&(y.a=z(L,"fg",t,y.a)),Z0!==y.o&&(y.o=z(F,"fg",Z0,y.o)),u!==y.i&&(y.i=z(D,"fg",u,y.i)),B0!==y.n&&(y.n=z(O,"fg",B0,y.n)),Y0!==y.s&&(y.s=z(A,"fg",Y0,y.s)),W0!==y.h&&(y.h=z(l,"fg",W0,y.h)),o!==y.r&&(y.r=z(R,"fg",o,y.r)),_!==y.d&&(y.d=z(C,"fg",_,y.d)),r!==y.l&&(y.l=z(g,"fg",r,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}}),H),M(f,k(z0,{get when(){return Y.exists},get children(){var j=V("box"),U=V("text");return W(j,U),z(j,"flexDirection","column"),z(j,"gap",0),W(U,T("Overrides applied")),M(j,k(z0,{get when(){return Y.applied.length===0},get children(){var L=V("text");return W(L,T("none")),w((F)=>z(L,"fg",J.textMuted,F)),L}}),null),M(j,k(Y1,{get each(){return Y.applied},children:(L)=>(()=>{var F=V("text");return z(F,"wrapMode","word"),M(F,()=>`${L.id} \u2192 ${L.keys.length>0?L.keys.join(" / "):"(unbound)"} (default: ${L.defaultKeys.join(" / ")})`),w((D)=>z(F,"fg",J.text,D)),F})()}),null),w((L)=>{var F=J.text,D=_0.BOLD;return F!==L.e&&(L.e=z(U,"fg",F,L.e)),D!==L.t&&(L.t=z(U,"attributes",D,L.t)),L},{e:void 0,t:void 0}),j}}),H),M(f,k(z0,{get when(){return Y.warnings.length>0},get children(){var j=V("box"),U=V("text");return W(j,U),z(j,"flexDirection","column"),z(j,"gap",0),W(U,T("Warnings")),M(j,k(Y1,{get each(){return Y.warnings},children:(L)=>(()=>{var F=V("text");return z(F,"wrapMode","word"),M(F,`! ${L}`),w((D)=>z(F,"fg",J.warning,D)),F})()}),null),w((L)=>{var F=J.warning,D=_0.BOLD;return F!==L.e&&(L.e=z(U,"fg",F,L.e)),D!==L.t&&(L.t=z(U,"attributes",D,L.t)),L},{e:void 0,t:void 0}),j}}),H),W(H,T("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(H,"wrapMode","word"),z(K,"wrapMode","word"),M(K,()=>`Fixed (not rebindable): ${Z.join(", ")}.`),w((j)=>{var U=J.text,L=_0.BOLD,F=J.textMuted,D=J.text,O=_0.BOLD,A=J.textMuted,l=J.textMuted,R=J.textMuted;return U!==j.e&&(j.e=z(X,"fg",U,j.e)),L!==j.t&&(j.t=z(X,"attributes",L,j.t)),F!==j.a&&(j.a=z(G,"fg",F,j.a)),D!==j.o&&(j.o=z(q,"fg",D,j.o)),O!==j.i&&(j.i=z(q,"attributes",O,j.i)),A!==j.n&&(j.n=z(B,"fg",A,j.n)),l!==j.s&&(j.s=z(H,"fg",l,j.s)),R!==j.h&&(j.h=z(K,"fg",R,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}),f})()}var _4=S(()=>{h();h();h();h();h();h();h();h();q1();mj();T1();fQ();Y9()});import{TextAttributes as Wy}from"@opentui/core";function Vy(J){return J.split(/[-_]+/).filter((Y)=>Y.length>0).map((Y)=>Y.charAt(0).toUpperCase()+Y.slice(1)).join(" ")}function Df(J){let Y=x1(),Z=x0(),f=s1(),{theme:X}=Z,[G,Q]=p("sidebar"),[q,B]=p("general"),[H,K]=p(0),[j,U]=p(0),[L,F]=p(""),[D,O]=p(""),[A,l]=p(""),R=V0(()=>Z.all().slice().sort()),[,C]=p(Math.max(0,R().findIndex((P)=>P===Z.selected))),g=h4(J.orchestrator),[y,$]=p(null),[G0,t]=p(null),[Z0,u]=p(null),B0=!1;p0(()=>{if(q()!=="accounts"||B0)return;B0=!0,Lz().then($),Dz().then(t),Mz().then(u)});function Y0(){return c4(q(),{themeNames:R(),focusAccentSlots:Kf,engineList:k0(),hasDaemon:g})}function W0(){return Y0().length}function o(){return Zf(J.kv.get(nY,Yf))}function _(P){if(Z.selected===P)return;if(!Z.set(P))return;J.kv.set("activeTheme",P),J.onVisualPrefsChange?.()}function r(P){if(Z.transparentBackground===P)return;Z.setTransparentBackground(P),J.kv.set("transparentBackground",P),J.onVisualPrefsChange?.()}function f0(){r(!Z.transparentBackground)}function a(P){if(Z.focusAccent===P)return;Z.setFocusAccent(P),J.kv.set("focusAccent",P),J.onVisualPrefsChange?.()}function U0(P){J.kv.set(nY,P)}function c(){return J.kv.get("notifications.toast.enabled",!0)!==!1}function N(){return J.kv.get("notifications.sound.enabled",!0)!==!1}function s(){J.kv.set("notifications.toast.enabled",!c())}function H0(){J.kv.set("notifications.sound.enabled",!N())}function D0(){return J.kv.get("experimental.remoteProjects",!1)===!0}function y0(){J.kv.set("experimental.remoteProjects",!D0())}function d0(){return J.kv.get(oZ,!1)===!0}function x(){J.kv.set(oZ,!d0())}function F0(){return J.kv.get(sZ,!1)===!0}function Q0(){J.kv.set(sZ,!F0())}function L0(){let P=J.kv.get("customEngineIds",[]);return Array.isArray(P)?P.filter((J0)=>typeof J0==="string"&&J0.trim().length>0):[]}function k0(){return[...h1,...L0()]}function T0(P){let J0=J.kv.get(tJ(P),"");return typeof J0==="string"?J0.trim():""}function m0(P){return T0(P)||rX(P).join(" ")}function $0(P){return e1(P)&&T0(P).length===0&&!v(P)}function O0(P){let J0=J.kv.get(eJ(P),"");return typeof J0==="string"?J0.trim():""}function v(P){return O0(P).length>0}function X0(P){return O0(P)||HH[P]||P}let[A0,E]=p(C1("lastSelectedVendor")??k1);function l0(P){return A0()===P}function S0(P){d1("lastSelectedVendor",P),J.kv.set("lastSelectedVendor",P),E(P)}async function c0(P){let J0=await QY.show(Y,m0(P),{dialogTitle:`${X0(P)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(J0===void 0)return;J.kv.set(tJ(P),J0.trim())}async function w0(P){let J0=await QY.show(Y,X0(P),{dialogTitle:`${X0(P)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(J0===void 0)return;J.kv.set(eJ(P),J0.trim())}function a0(P){if(J.kv.set(tJ(P),""),J.kv.set(eJ(P),""),!e1(P))J.kv.set("customEngineIds",L0().filter((J0)=>J0!==P)),U((J0)=>Math.max(0,Math.min(J0,k0().length)))}async function n(){let P=await QY.show(Y,"",{dialogTitle:"Add engine",fieldLabel:"id",submitLabel:"next",placeholder:"lowercase slug, e.g. aider"});if(P===void 0)return;let J0=P.trim().toLowerCase();if(!J0||e1(J0)||L0().includes(J0))return;let z1=await QY.show(Y,"",{dialogTitle:`Add engine \xB7 ${J0}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(z1===void 0)return;let F1=await QY.show(Y,J0,{dialogTitle:`Add engine \xB7 ${J0}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(J.kv.set("customEngineIds",[...L0(),J0]),z1.trim())J.kv.set(tJ(J0),z1.trim());let O1=F1?.trim()??"";J.kv.set(eJ(J0),O1&&O1!==J0?O1:Vy(J0))}function e(){if(q()!=="engines"||G()!=="body")return null;let P=Lq(Y0(),j());return P?.kind==="engine"?P.vendor:null}function q0(){return mf(J.kv.get(dY,nz))}function M0(){let P=Jf.indexOf(q0()),J0=Jf[(P+1)%Jf.length];if(J0)J.kv.set(dY,J0)}function K0(){let P=J.kv.get(KZ,"");return typeof P==="string"?P:""}async function o0(){let P=await QY.show(Y,K0(),{dialogTitle:"Custom editor command (use {file} for the path)",fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(P===void 0)return;let J0=P.trim();if(J.kv.set(KZ,J0),J0)J.kv.set(dY,"custom")}async function N0(){let P=await QY.show(Y,L(),{dialogTitle:"Feedback title",fieldLabel:"title",submitLabel:"save"});if(P===void 0)return;F(P),l("")}async function G1(){let P=await QY.show(Y,D(),{dialogTitle:"Feedback body",fieldLabel:"body",submitLabel:"save",allowEmpty:!0});if(P===void 0)return;O(P),l("")}async function b0(){l("submitting...");try{let P=qX({title:L(),body:D()});l(`sent: ${P.url}`),F(""),O("")}catch(P){l(`error: ${P instanceof Error?P.message:String(P)}`)}}function E0(){if(G()!=="sidebar"||W0()===0)return;if(Q("body"),U(0),q()==="general")C(0)}function H1(P){if(G()==="sidebar"){let F1=(H()+P+Lf.length)%Lf.length;K(F1);let O1=Lf[F1];if(O1)B(O1.id),U(0);return}let J0=W0();if(J0===0)return;let z1=(j()+P+J0)%J0;if(U(z1),Lq(Y0(),z1)?.kind==="theme")C(z1)}function j1(P){B(P),K(Lf.findIndex((J0)=>J0.id===P)),U(0),Q("sidebar")}let t0={theme:(P)=>_(P.name),transparent:()=>f0(),focusAccent:(P)=>a(P.slot),toast:()=>s(),sound:()=>H0(),surface:(P)=>U0(P.surface),editorKind:()=>M0(),editorCustom:()=>void o0(),engine:(P)=>void c0(P.vendor),engineAdd:()=>void n(),feedbackTitle:()=>void N0(),feedbackBody:()=>void G1(),feedbackSend:()=>void b0(),devReset:()=>void sj(Y,J.kv,f),devRestartDaemon:()=>void tj(Y,J.orchestrator,f),devRemoteProjects:()=>y0(),devAutoStatus:()=>x(),devDispatcher:()=>Q0()};function e0(){let P=Lq(Y0(),j());if(!P)return;t0[P.kind](P)}return U1(()=>({enabled:!J.standalone||Y.stack.length===0,bindings:[{key:"down",cmd:()=>H1(1)},{key:"up",cmd:()=>H1(-1)},{key:"j",cmd:()=>H1(1)},{key:"k",cmd:()=>H1(-1)},{key:"tab",cmd:()=>H1(1)},{key:"right",cmd:E0},{key:"l",cmd:E0},{key:"left",cmd:()=>Q("sidebar")},{key:"h",cmd:()=>Q("sidebar")},{key:"return",cmd:()=>{if(G()==="sidebar"){E0();return}e0()}},{key:"t",cmd:f0},{key:"r",cmd:()=>{let P=e();if(P)w0(P)}},{key:"x",cmd:()=>{let P=e();if(P)a0(P)}},{key:"d",cmd:()=>{let P=e();if(P)S0(P)}}]})),(()=>{var P=V("box"),J0=V("box"),z1=V("text"),F1=V("text"),O1=V("box"),R1=V("box"),y1=V("box"),L1=V("text");return W(P,J0),W(P,O1),W(P,y1),z(P,"paddingLeft",2),z(P,"paddingRight",2),z(P,"paddingBottom",1),z(P,"gap",1),W(J0,z1),W(J0,F1),z(J0,"flexDirection","row"),z(J0,"justifyContent","space-between"),W(z1,T("Settings")),W(F1,T("esc")),z(F1,"onMouseUp",()=>J.onClose()),W(O1,R1),z(O1,"flexDirection","row"),z(O1,"gap",2),M(O1,k(d4,{level:G,cursor:H,switchSection:j1}),R1),z(R1,"flexGrow",1),z(R1,"flexShrink",1),z(R1,"flexDirection","column"),z(R1,"gap",1),M(R1,k(z0,{get when(){return q()==="general"},get children(){return k(n4,{level:G,bodyRow:j,setLevel:Q,setBodyRow:U,themeNames:R,setThemeCursor:C,selectTheme:_,toggleTransparent:f0,selectFocusAccent:a,toastEnabled:c,soundEnabled:N,toggleToast:s,toggleSound:H0,settingsSurface:o,selectSurface:U0,editorKind:q0,cycleEditorKind:M0,editorCustomCommand:K0,editEditorCustom:()=>void o0()})}}),null),M(R1,k(z0,{get when(){return q()==="engines"},get children(){return k(i4,{level:G,bodyRow:j,setLevel:Q,setBodyRow:U,get vendors(){return k0()},isCustom:(J1)=>!e1(J1),displayName:X0,commandText:m0,isDefault:$0,isDefaultEngine:l0,editEngine:(J1)=>void c0(J1),renameEngine:(J1)=>void w0(J1),resetEngine:a0,onAddEngine:()=>void n()})}}),null),M(R1,k(z0,{get when(){return q()==="accounts"},get children(){return k(l4,{claudeStatus:y,codexStatus:G0,copilotStatus:Z0})}}),null),M(R1,k(z0,{get when(){return q()==="keys"},get children(){return k(p4,{})}}),null),M(R1,k(z0,{get when(){return q()==="feedback"},get children(){return k($4,{level:G,bodyRow:j,setLevel:Q,setBodyRow:U,title:L,body:D,status:A,editTitle:()=>void N0(),editBody:()=>void G1(),submit:()=>void b0()})}}),null),M(R1,k(z0,{get when(){return q()==="dev"},get children(){return k(a4,{level:G,bodyRow:j,setLevel:Q,setBodyRow:U,hasDaemon:g,confirmReset:()=>void sj(Y,J.kv,f),confirmRestartDaemon:()=>void tj(Y,J.orchestrator,f),remoteProjectsEnabled:D0,toggleRemoteProjects:y0,autoStatusEnabled:d0,toggleAutoStatus:x,dispatcherEnabled:F0,toggleDispatcher:Q0})}}),null),W(y1,L1),z(y1,"paddingTop",0),W(L1,T("j/k pick \xB7 h/l switch level \xB7 enter activate \xB7 esc close")),w((J1)=>{var I=Wy.BOLD,g0=X.text,h0=X.textMuted,f1=X.textMuted;return I!==J1.e&&(J1.e=z(z1,"attributes",I,J1.e)),g0!==J1.t&&(J1.t=z(z1,"fg",g0,J1.t)),h0!==J1.a&&(J1.a=z(F1,"fg",h0,J1.a)),f1!==J1.o&&(J1.o=z(L1,"fg",f1,J1.o)),J1},{e:void 0,t:void 0,a:void 0,o:void 0}),P})()}var Z9=S(()=>{h();h();h();h();h();h();h();h();q1();dZ();kJ();hQ();aX();mz();A1();RJ();zJ();T1();iz();MJ();bJ();rj();v4();Y9();_4();Df.show=(J,Y,Z)=>{let f=!1;return new Promise((X)=>{J.replace(()=>k(Df,{kv:Y,orchestrator:Z,onVisualPrefsChange:()=>{f=!0},onClose:()=>X({visualPrefsChanged:f})}),()=>X({visualPrefsChanged:f}))})}});import{TextAttributes as Ky}from"@opentui/core";function o4(){let{theme:J}=x0(),Y=RY(),Z=qq(),f=()=>Z.toasts().slice(-r4),X=()=>Math.max(0,Y().width-Uy-Ly),G=()=>Math.max(0,Y().height-Dy-r4-1);return k(z0,{get when(){return Z.toasts().length>0},get children(){var Q=V("box");return z(Q,"position","absolute"),z(Q,"zIndex",2500),z(Q,"width",40),z(Q,"flexDirection","column"),z(Q,"gap",0),M(Q,k(Y1,{get each(){return f()},children:(q)=>{let B=()=>q.kind==="needs_input"?J.warning:q.kind==="error"?J.error:J.success,H=()=>J.selectedListItemText,K=()=>q.kind==="needs_input"?"?":q.kind==="error"?"\u2715":"\u2713";return(()=>{var j=V("box"),U=V("text"),L=V("text");return W(j,U),W(j,L),z(j,"flexDirection","row"),z(j,"gap",1),z(j,"paddingLeft",1),z(j,"paddingRight",1),z(j,"onMouseUp",()=>Z.dismiss(q.id)),z(U,"wrapMode","none"),M(U,K),z(L,"wrapMode","none"),M(L,()=>q.title),w((F)=>{var D=B(),O=H(),A=Ky.BOLD,l=H();return D!==F.e&&(F.e=z(j,"backgroundColor",D,F.e)),O!==F.t&&(F.t=z(U,"fg",O,F.t)),A!==F.a&&(F.a=z(U,"attributes",A,F.a)),l!==F.o&&(F.o=z(L,"fg",l,F.o)),F},{e:void 0,t:void 0,a:void 0,o:void 0}),j})()}})),w((q)=>{var B=X(),H=G();return B!==q.e&&(q.e=z(Q,"left",B,q.e)),H!==q.t&&(q.t=z(Q,"top",H,q.t)),q},{e:void 0,t:void 0}),Q}})}var r4=4,Uy=40,Ly=2,Dy=2;var s4=S(()=>{h();h();h();h();h();h();h();q1();Bq();T1()});import{TextAttributes as My}from"@opentui/core";function Fy(J,Y){return`daemon is ${J?`v${J}`:"an older build"} \u2014 you launched v${Y}. Run \`kobe daemon restart\` then \`kobe reload\``}function t4(J){let{theme:Y}=x0(),Z=()=>Math.max(4,J.width()-2);return k(z0,{get when(){return J.stale()},get children(){var f=V("box"),X=V("text"),G=V("box"),Q=V("text"),q=V("box"),B=V("text");return W(f,X),W(f,G),W(f,q),z(f,"flexDirection","column"),z(f,"flexShrink",0),z(f,"paddingLeft",1),z(f,"paddingRight",1),z(f,"paddingBottom",1),z(X,"wrapMode","none"),M(X,()=>"\u2594".repeat(Z())),W(G,Q),z(G,"flexDirection","row"),z(G,"gap",1),W(Q,T("\u26A0 DAEMON OUT OF DATE")),z(Q,"wrapMode","none"),W(q,B),z(q,"flexDirection","row"),z(q,"gap",1),z(B,"wrapMode","word"),M(B,()=>Fy(J.daemonVersion(),J.clientVersion)),w((H)=>{var{warning:K,warning:j}=Y,U=My.BOLD,L=Y.text;return K!==H.e&&(H.e=z(X,"fg",K,H.e)),j!==H.t&&(H.t=z(Q,"fg",j,H.t)),U!==H.a&&(H.a=z(Q,"attributes",U,H.a)),L!==H.o&&(H.o=z(B,"fg",L,H.o)),H},{e:void 0,t:void 0,a:void 0,o:void 0}),f}})}var e4=S(()=>{h();h();h();h();h();h();h();q1();T1()});function JU(J,Y){return J.find((Z)=>Z.id!==Y&&!Z.archived)}async function Oy(J){let Y=J.tasks.find((G)=>G.id===J.taskId);if(!Y)return null;let Z=!Y.archived;try{await J.orch.setArchived(J.taskId,Z)}catch(G){return J.logger.error(`${J.logPrefix} archive failed:`,G),null}if(!Z)return{archived:Z};let f=K1(J.taskId),X=JU(J.tasks,J.taskId);if(await MY(f,X?K1(X.id):void 0).catch((G)=>{J.logger.error(`${J.logPrefix} switch-client failed:`,G)}),J.updateActiveTask)await J.orch.setActiveTask(X?.id??null).catch(()=>{});return await vJ(f).catch((G)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,G)}),{archived:Z,nextTask:X}}async function Ay(J){let Y=JU(J.tasks,J.taskId),Z=K1(J.taskId);if(J.switchBeforeKill)await MY(Z,Y?K1(Y.id):void 0).catch((f)=>{J.logger.error(`${J.logPrefix} switch-client failed:`,f)});if(J.updateActiveTask)await J.orch?.setActiveTask(Y?.id??null).catch(()=>{});return await vJ(Z).catch((f)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,f)}),{nextTask:Y}}async function YU(J,Y){if(!J.orch)return;let Z=J.tasks().find((X)=>X.id===Y);if(!Z)return;if(!Z.archived){if(!await J.confirm({title:`Archive "${Z.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 Oy({orch:J.orch,tasks:J.tasks(),taskId:Y,logger:J.logger,logPrefix:J.logPrefix,updateActiveTask:J.updateActiveTask}))return;await J.reload?.()}async function ZU(J,Y){if(!J.orch)return;let Z=J.tasks().find((Q)=>Q.id===Y);if(!Z)return;if(!await J.confirm({title:`Delete "${Z.title}"?`,body:"Removes the task entry and its worktree. The tmux session (if any) is killed.",cancelLabel:"cancel",confirmLabel:"delete"}))return;let X=!1;try{await J.orch.deleteTask(Y),X=!0}catch(Q){if((Q instanceof Error?Q.message:String(Q)).includes(JB)){if(await J.confirm({title:`"${Z.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 J.orch.deleteTask(Y,{force:!0}),X=!0}catch(H){J.logger.error(`${J.logPrefix} force delete failed:`,H),J.notifyError?.(`Couldn't delete: ${H instanceof Error?H.message:String(H)}`)}}else J.logger.error(`${J.logPrefix} delete failed:`,Q),J.notifyError?.(`Couldn't delete: ${Q instanceof Error?Q.message:String(Q)}`)}if(!X)return;let{nextTask:G}=await Ay({orch:J.orch,tasks:J.tasks(),taskId:Y,logger:J.logger,logPrefix:J.logPrefix,switchBeforeKill:J.switchBeforeKill,updateActiveTask:J.updateActiveTask});await J.reload?.(),J.onTaskDeleted?.(Y,G)}async function fU(J,Y){let Z=J.tasks().find((X)=>X.id===Y);if(!Z)return;let f=await J.promptText(Z.title);if(!f||!J.orch)return;try{await J.orch.setTitle(Y,f)}catch(X){J.logger.error(`${J.logPrefix} task.rename failed:`,X),J.notifyError?.(`Couldn't rename task: ${X instanceof Error?X.message:String(X)}`);return}await J.reload?.()}async function XU(J,Y){let Z=J.tasks().find((X)=>X.id===Y);if(!Z||Z.kind==="main")return;let f=await J.promptText(Z.branch,{dialogTitle:"Rename branch",fieldLabel:"branch"});if(!f||!J.orch)return;try{await J.orch.setBranch(Y,f)}catch(X){J.logger.error(`${J.logPrefix} task.setBranch failed:`,X),J.notifyError?.(`Couldn't rename branch: ${X instanceof Error?X.message:String(X)}`);return}await J.reload?.()}async function GU(J,Y){let Z=J.tasks().find((G)=>G.id===Y);if(!Z||!J.orch)return;let f=await xY(),X=sY(f,Z.vendor??k1);try{await J.orch.setVendor(Y,X)}catch(G){J.logger.error(`${J.logPrefix} task.setVendor failed:`,G),J.notifyError?.(`Couldn't switch engine: ${G instanceof Error?G.message:String(G)}`);return}J.notifyInfo?.(`Engine \u2192 ${tZ(X)} (applies on reopen)`),await J.reload?.()}async function zU(J){let Y=uJ(),Z=J.cursorRepo()??Y[0]??process.cwd();if(J.openCreateSurface&&await J.openCreateSurface(Z))return;let f=J.lastVendor()??k1,X=await xY();if(X.length===0)J.notifyInfo?.("No engine CLI detected \u2014 install claude or codex, or add one in Settings \u2192 Engines");let G=J.orch,Q=await J.promptNewTask(Z,Y,{defaultVendor:f,availableVendors:X,discoverAdoptable:G?(B)=>G.discoverAdoptableWorktrees(B):void 0});if(!Q)return;if(J.rememberVendor(Q.vendor),NY(Q.repo),J.onRepoSaved?.(),!G){J.logger.error(`${J.logPrefix} no daemon; cannot create task`);return}J.notifyInfo?.("Creating task\u2026");let q;try{if(Q.mode==="adopt")for(let B of Q.adopt)q=(await G.adoptWorktree({repo:Q.repo,worktreePath:B.worktreePath,branch:B.branch,vendor:Q.vendor})).id;else q=(await G.createTask({repo:Q.repo,baseRef:Q.baseRef,vendor:Q.vendor})).id}catch(B){J.logger.error(`${J.logPrefix} task.create/adopt failed:`,B),J.notifyError?.(`Couldn't create task: ${B instanceof Error?B.message:String(B)}`);return}if(await J.reload?.(),q)J.selectTask?.(q),await J.enterTask?.(q)}var QU=S(()=>{dZ();kJ();fB();A1();RJ();zJ();ZJ()});import{spawn as Ry}from"child_process";import{existsSync as gy}from"fs";import{basename as Cy,delimiter as Sy,isAbsolute as yy,join as ky}from"path";function f9(J,Y,Z){if(yy(J))return Z(J);let f=Y.PATH??"";for(let X of f.split(Sy)){if(!X)continue;if(Z(ky(X,J)))return!0}return!1}function by(J){let Y=Cy(J);if(Y==="code")return"VS Code";if(Y==="cursor")return"Cursor";if(Y==="windsurf")return"Windsurf";if(Y==="zed")return"Zed";return Y||J}function qU(J={}){let Y=J.env??process.env,Z=J.platform??process.platform,f=J.exists??gy,X=Y.KOBE_OPEN_EDITOR?.trim();if(X)return{id:"env",label:by(X),command:X,args:[]};for(let G of Iy)if(f9(G.command,Y,f))return{id:G.id,label:G.label,command:G.command,args:[]};if(Z==="darwin"&&f9("open",Y,f)){for(let G of Ny)if(G.paths.some((Q)=>f(Q)))return{id:G.id,label:G.label,command:"open",args:["-a",G.appName]};return{id:"mac-open",label:"Finder",command:"open",args:[]}}if(Z==="linux"&&f9("xdg-open",Y,f))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function Ty(J,Y){return[Y.command,[...Y.args,J]]}function BU(J,Y,Z={}){if(!J)return!1;let f=Z.spawn??Ry,[X,G]=Ty(J,Y);try{let Q=f(X,G,{detached:!0,stdio:"ignore"});if(Q.pid===void 0)return!1;return Q.unref(),!0}catch{return!1}}var Iy,Ny;var HU=S(()=>{Iy=[{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"}],Ny=[{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 Dq(J){let Y=new Map;function Z(f){let X=Y.get(f);if(!X){let[G,Q]=p(J.initial,J.equals?{equals:J.equals}:void 0);X={read:G,write:(q)=>Q(()=>q),inFlight:!1,nextAllowedAt:0},Y.set(f,X)}return X}return{read(f){if(!f)return J.initial;return Z(f).read()},poll(f){if(!f)return;let X=Z(f);IQ(X,J,(G)=>J.run(f,G),(G)=>X.write(G))},reset(){Y.clear()}}}var NG=S(()=>{q1();NQ();NQ()});import{stat as Ey}from"fs/promises";import{join as uy}from"path";async function Py(J){try{let Y=await Ey(uy(J,".git","HEAD"));return`${Y.mtimeMs}:${Y.size}`}catch{return null}}async function vy(J,Y,Z=lY){let f=await Py(J);if(f!==null){let q=jU.get(J);if(q&&q.fingerprint===f)return q.value}let X="",G=await Z("git",["symbolic-ref","--short","HEAD"],{cwd:J,env:IJ(),signal:Y}),Q=G.status===0?G.stdout.trim():"";if(Q&&Q!=="HEAD")X=Q;else if((await Z("git",["rev-parse","--verify","HEAD"],{cwd:J,env:IJ(),signal:Y})).status===0)X="(detached)";if(f!==null)jU.set(J,{fingerprint:f,value:X});return X}function VU(J){return WU.read(J)}function KU(J){WU.poll(J)}var xy=2000,wy=30000,hy=1500,jU,WU;var UU=S(()=>{UZ();NG();jU=new Map;WU=Dq({initial:"",timeoutMs:xy,slowRetryMs:wy,minIntervalMs:hy,run:(J,Y)=>vy(J,Y)})});function X9(J){let Y=J.scheduleTimeout??((B,H)=>{let K=setTimeout(B,H);return()=>clearTimeout(K)}),Z=!1,f=null,X=()=>{Z=!0,f?.(),f=Y(()=>{Z=!1,f=null},700)},G=()=>{Z=!1,f?.(),f=null},Q=(B)=>{let H=J.getFlatIds();if(H.length===0)return;let K=J.getCursor(),j=K<0?0:K,U=Math.min(H.length-1,Math.max(0,j+B));J.setCursor(U)},q=(B)=>{let H=J.getFlatIds();if(H.length===0)return;J.setCursor(Math.min(H.length-1,Math.max(0,B)))};return{moveDown(){G(),Q(1)},moveUp(){G(),Q(-1)},selectCurrent(){G();let B=J.getFlatIds(),H=J.getCursor();if(H<0||H>=B.length)return;let K=B[H];if(K!==void 0)J.onSelect(K)},pressG(){if(Z)G(),q(0);else X()},pressShiftG(){G(),q(J.getFlatIds().length-1)},isChordArmed(){return Z},disarmChord(){G()}}}function LU(J){let Y=X9({getCursor:()=>J.cursorIndex(),setCursor:(G)=>J.setCursorIndex(G),getFlatIds:()=>J.flatTaskIds(),onSelect:(G)=>J.onSelect(G)}),Z=()=>{let G=J.flatTaskIds(),Q=J.cursorIndex();if(Q<0||Q>=G.length)return;return G[Q]},f=()=>J.searchMode?.()??!1,X=()=>J.moveMode?.()??!1;U1(()=>({enabled:J.focused()&&!f(),bindings:kZ({"sidebar.nav":(G,Q)=>{let q=(Q??0)%2===0;if(X()){let B=Z();if(B===void 0)return;J.onMoveRequest?.(B,q?1:-1);return}if(q)Y.moveDown();else Y.moveUp()},"sidebar.select":()=>{if(X()){J.onMoveModeExit?.();return}Y.selectCurrent()},"sidebar.goto":(G)=>{if(X())return;if(G.shift)Y.pressShiftG();else Y.pressG()},"sidebar.delete":()=>{if(X())return;let G=Z();if(G!==void 0)J.onDeleteRequest?.(G)},"sidebar.archive":()=>{if(X())return;let G=Z();if(G!==void 0)J.onArchiveRequest?.(G)},"sidebar.localMerge":(G)=>{if(!G.shift)return;let Q=Z();if(Q!==void 0)J.onLocalMergeRequest?.(Q)},"sidebar.rename":()=>{if(X())return;let G=Z();if(G!==void 0)J.onRenameRequest?.(G)},"sidebar.pin":(G)=>{if(X())return;if(!G.shift)return;let Q=Z();if(Q!==void 0)J.onPinRequest?.(Q)},"sidebar.search.enter":()=>{if(X())return;J.onSearchEnter?.()},"sidebar.sort":()=>{if(X())return;J.onSortModeToggle?.()},"sidebar.projectFilter":()=>{if(X())return;J.onProjectFilterToggle?.()}})})),U1(()=>({enabled:J.focused()&&X(),bindings:[{key:"escape",cmd:()=>J.onMoveModeExit?.()}]})),U1(()=>({enabled:J.focused(),bindings:kZ({"sidebar.view":(G,Q)=>{J.onViewSwitch?.((Q??0)%2===0?-1:1)}})})),U1(()=>({enabled:J.focused()&&f(),bindings:kZ({"sidebar.search.nav":(G,Q)=>{if((Q??0)%2===0)Y.moveDown();else Y.moveUp()},"sidebar.search.submit":()=>{Y.selectCurrent(),J.onSearchExit?.(!0)},"sidebar.search.cancel":()=>J.onSearchExit?.(!1)})}))}var DU=S(()=>{KX();MJ()});function G9(J,Y){if(Y<=0)return"";if(J.length<=Y)return J;return`${J.slice(0,Math.max(0,Y-1))}\u2026`}function z9(J,Y){return` ${G9(J,Math.max(0,Y))}`}function dy(J){switch(J){case"rate_limited":return{text:"rate limited",tone:"warning"};case"permission_needed":return{text:"needs permission",tone:"warning"};case"error":return{text:"error",tone:"error"};default:return null}}function ly(J){if(J.kind==="main")return!1;return J.vendor!==void 0&&!e1(J.vendor)}function Q9(J){let{task:Y}=J,Z=Y.kind==="main",f=Z?J.mainBranch??"":Y.branch,X=my[Y.status],G=J.activity?.state,Q=G!==void 0,q=$y(G),B=dy(G),H=ly(Y)&&!Q,K=J.job!==void 0,j=K||!H&&(G==="running"||J.live||!Q&&!Z&&Y.status==="in_progress"),U=MX[J.spinnerFrame]??MX[0],L=K?"primary":H?"textMuted":B?.tone??(j?"primary":q?.tone??X.tone),F=H?ny:cy[Y.status],D=K?J.truncateBranch(iy,J.subtitleBudget):B?J.truncateBranch(B.text,J.subtitleBudget):f.length>0?J.truncateBranch(f,J.subtitleBudget):J.truncateBranch(F,J.subtitleBudget),O=H?MU:q?.glyph??X.glyph,A=H?MU:q?.glyph??"\u2605";return{isMain:Z,titleText:Z?zY(Y.repo):Y.title,subtitleText:D,loading:j,stateGlyph:j?U:O,projectGlyph:j?U:A,tone:L}}function q9(J,Y){if(!J.loading)return J;let Z=MX[Y()%MX.length]??"\u280B";if(Z===J.stateGlyph&&Z===J.projectGlyph)return J;return{...J,stateGlyph:Z,projectGlyph:Z}}function $y(J){switch(J){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 my,cy,MX,FU=100,MU="\xB7",ny="no activity tracking",iy="materializing";var OU=S(()=>{zJ();Vq();my={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"}},cy={done:"done",in_review:"in review",in_progress:"working",backlog:"\u2014",canceled:"canceled",error:"error"};MX=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function B9(J){return AU.read(J)}function H9(J){AU.poll(J)}var ay=4000,py=60000,_y=1500,ry,AU;var RU=S(()=>{UZ();NG();fX();NG();ry={added:0,deleted:0},AU=Dq({initial:ry,equals:AY,timeoutMs:ay,slowRetryMs:py,minIntervalMs:_y,run:async(J,Y)=>{let Z=await lY("git",["status","--porcelain=v1"],{cwd:J,env:IJ(),signal:Y});if(Z.status!==0)throw Error("git status failed");return ZX(Z.stdout)}})});import{TextAttributes as E1}from"@opentui/core";function CU(J,Y=sy){if(J.length<=Y)return J;return`${J.slice(0,Math.max(0,Y-1))}\u2026`}function ty(J){let Y=0;for(let Z of J)Y+=(Z.codePointAt(0)??0)>=4352?2:1;return Y}function ey(J,Y){if(Y<=0||J.length<=Y)return J;return`\u2026${J.slice(J.length-Math.max(0,Y-1))}`}function SU(J){let{theme:Y}=x0(),Z=()=>J.focused?J.focused():!0,[f,X]=p("active"),[G,Q]=p(!1),[q,B]=p(""),[H,K]=p(null),j=()=>J.projectFilter?.()??H(),U=(v)=>{if(J.onProjectFilterChange)J.onProjectFilterChange(v);else K(v)};function L(){B(""),Q(!0),J.onSearchActiveChange?.(!0)}function F(v){Q(!1),B(""),J.onSearchActiveChange?.(!1)}p0(()=>{if(!G())return;let v=s1();if(!v)return;let X0=(A0)=>{if(A0.defaultPrevented)return;if(!Z())return;if(A0.ctrl||A0.meta||A0.option)return;if(A0.name==="backspace"){B((S0)=>S0.slice(0,-1));return}let E=A0.sequence;if(!E||E.length!==1)return;let l0=E.charCodeAt(0);if(l0<32||l0===127)return;B((S0)=>S0+E)};v.keyInput.on("keypress",X0),i1(()=>v.keyInput.off("keypress",X0))});let[D,O]=p(0),A=setInterval(()=>O((v)=>v+1),oy);i1(()=>clearInterval(A));let[l,R]=p(0),C=setInterval(()=>R((v)=>(v+1)%MX.length),FU);i1(()=>clearInterval(C));let g=()=>J.sortMode?.()??"default",y=V0(()=>k4(J.tasks(),f())),$=V0(()=>{let v=j();if(!v)return null;let X0=iJ(v);return y().find((A0)=>iJ(A0.repo)===X0)??null}),G0=V0(()=>$()?.repo??null),t=V0(()=>$()?.label??"all"),Z0=V0(()=>{let v=$();return v?v.count:y().reduce((X0,A0)=>X0+A0.count,0)}),u=V0((v)=>b4(v,$j(J.tasks(),f(),G()?q():"",g(),G0())),[]),B0=V0(()=>aj(u())),Y0=V0(()=>N4(u())),W0=V0(()=>Y0().projectRows),o=V0(()=>Y0().taskRows),_=V0(()=>{let v=new Map;for(let X0 of u())v.set(X0.flatIndex,X0);return v}),r=V0(()=>aj($j(J.tasks(),f(),"",g(),G0())).length),f0=V0(()=>o().length>0);p0(()=>{let v=j(),X0=y();if(v!==null&&X0.length>0&&(X0.length<=1||$()===null))U(null)});function a(){let v=y();if(v.length<=1){U(null);return}let X0=G0(),A0=X0?iJ(X0):null,E=A0===null?-1:v.findIndex((S0)=>iJ(S0.repo)===A0),l0=v[E+1];U(l0?.repo??null)}let U0=()=>J.width?J.width():gU,c=V0(()=>Math.max(6,U0()-9)),N=V0(()=>Math.max(6,U0()-16)),s=RY(),H0=V0(()=>{let v=Math.max(2,Math.min(10,Math.floor(s().height*0.25))),X0=Math.max(2,W0().length*2);return Math.min(v,X0)}),[D0,y0]=p(null),[d0,x]=p(-1),F0,Q0,L0,k0=new Map;p0(()=>{let v=J.width?J.width():gU,X0=L0;if(!X0)return;X0.width=v,X0.flexShrink=1,X0.minHeight=0}),p0(WJ([d0,u],([v])=>{let X0=_().get(v);if(!X0)return;let A0=X0.task.kind==="main"?F0:Q0;if(!A0)return;if(A0.viewport.height<=0)return;let E=k0.get(v);if(!E)return;A0.scrollChildIntoView(E.id)})),p0(WJ(()=>[J.selectedId(),B0()],([v,X0])=>{let A0=n1(d0);if(v===null){if(A0===-1&&X0.length>0)x(0);else if(A0>=X0.length)x(Math.max(0,X0.length-1));else if(X0.length===0)x(-1);return}let E=X0.indexOf(v);if(E>=0){if(E!==A0)x(E)}else if(X0.length===0)x(-1);else if(A0<0||A0>=X0.length)x(X0.length-1)})),p0(WJ(f,()=>{let v=B0();x(v.length>0?0:-1)},{defer:!0})),p0(WJ(G0,(v)=>x(I4(u(),v)),{defer:!0})),p0(WJ([G,q],()=>{if(!G())return;let v=B0();x(v.length>0?0:-1)}));function T0(v){let X0=f(),A0=bG.findIndex((S0)=>S0.view===X0);if(A0<0)return;let E=(A0+v+bG.length)%bG.length,l0=bG[E];if(l0)X(l0.view)}LU({focused:Z,cursorIndex:d0,setCursorIndex:x,flatTaskIds:B0,onSelect:(v)=>{J.onSelect(v),J.onActivate?.(v)},onDeleteRequest:(v)=>J.onDeleteRequest?.(v),onArchiveRequest:(v)=>J.onArchiveRequest?.(v),onLocalMergeRequest:(v)=>J.onLocalMergeRequest?.(v),moveMode:J.moveMode,onMoveRequest:(v,X0)=>J.onMoveRequest?.(v,X0),onMoveModeExit:()=>J.onMoveModeExit?.(),onRenameRequest:(v)=>J.onRenameRequest?.(v),onPinRequest:(v)=>J.onPinRequest?.(v),onViewSwitch:(v)=>T0(v),onSortModeToggle:()=>J.onSortModeToggle?.(),onProjectFilterToggle:()=>a(),searchMode:G,onSearchEnter:()=>L(),onSearchExit:(v)=>F(v)});let m0=(v)=>(()=>{var X0=V("box"),A0=V("box"),E=V("text"),l0=V("text");return W(X0,A0),z(X0,"flexDirection","column"),z(X0,"flexShrink",0),M(X0,k(z0,{get when(){return v.topPad},get children(){var S0=V("box"),c0=V("text");return W(S0,c0),z(S0,"flexShrink",0),W(c0,T(" ")),z(c0,"wrapMode","none"),S0}}),A0),W(A0,E),W(A0,l0),z(A0,"flexDirection","row"),z(A0,"flexShrink",0),z(A0,"gap",1),z(A0,"paddingLeft",1),z(A0,"paddingRight",1),z(E,"wrapMode","none"),M(E,()=>v.label),z(l0,"wrapMode","none"),M(l0,()=>"\u2500".repeat(Math.max(2,U0()-10-v.label.length-(v.suffix?.length??0)))),M(A0,k(z0,{get when(){return v.suffix},get children(){var S0=V("text");return z(S0,"wrapMode","none"),M(S0,()=>v.suffix),w((c0)=>{var w0=Y.info,a0=E1.BOLD;return w0!==c0.e&&(c0.e=z(S0,"fg",w0,c0.e)),a0!==c0.t&&(c0.t=z(S0,"attributes",a0,c0.t)),c0},{e:void 0,t:void 0}),S0}}),null),w((S0)=>{var c0=Y.textMuted,w0=E1.BOLD,a0=Y.border;return c0!==S0.e&&(S0.e=z(E,"fg",c0,S0.e)),w0!==S0.t&&(S0.t=z(E,"attributes",w0,S0.t)),a0!==S0.a&&(S0.a=z(l0,"fg",a0,S0.a)),S0},{e:void 0,t:void 0,a:void 0}),X0})(),$0=(v)=>{switch(v){case"success":return Y.success;case"warning":return Y.warning;case"primary":return Y.primary;case"error":return Y.error;default:return Y.textMuted}},O0=(v)=>{let X0=v.row.task,A0=v.row.flatIndex,E=()=>A0===d0(),l0=()=>X0.id===J.selectedId(),S0=V0(()=>{let K0=J.chatRunState?.();if(!K0)return!1;let o0=`${X0.id}:`;for(let[N0,G1]of K0)if(G1==="running"&&N0.startsWith(o0))return!0;return!1}),c0=V0(()=>{let K0=TQ(J.worktreeChanges?.(),X0.worktreePath);if(K0)return K0;if(D(),!X0.archived)H9(X0.worktreePath);return B9(X0.worktreePath)},void 0,{equals:AY}),w0=V0(()=>{return D(),KU(X0.repo),VU(X0.repo)}),a0=V0(()=>Q9({task:X0,activity:J.engineState?.().get(X0.id),job:J.taskJobs?.().get(X0.id),live:S0(),spinnerFrame:0,subtitleBudget:N(),truncateBranch:CU,mainBranch:w0()})),n=V0(()=>q9(a0(),l)),e=()=>!n().loading?Y.primary:$0(n().tone),q0=()=>E()?Y.focusAccent:l0()?Y.primary:void 0,M0=()=>E()||l0()?"\u258C":" ";return(()=>{var K0=V("box"),o0=V("box"),N0=V("box"),G1=V("text"),b0=V("box"),E0=V("text"),H1=V("text"),j1=V("box"),t0=V("text"),e0=V("box"),P=V("text");return W(K0,o0),z(K0,"flexDirection","column"),z(K0,"gap",0),z(K0,"paddingBottom",0),W(o0,N0),W(o0,j1),gZ((J0)=>{k0.set(A0,J0),i1(()=>{if(k0.get(A0)===J0)k0.delete(A0)})},o0),z(o0,"flexDirection","column"),z(o0,"gap",0),z(o0,"onMouseUp",()=>{if(J.onSelect(X0.id),J.activateOnClick)J.onActivate?.(X0.id)}),z(o0,"onMouseOver",(J0)=>y0({task:X0,x:J0.x,y:J0.y})),z(o0,"onMouseOut",()=>y0((J0)=>J0?.task.id===X0.id?null:J0)),W(N0,G1),W(N0,b0),z(N0,"flexDirection","row"),z(N0,"gap",0),z(G1,"wrapMode","none"),M(G1,M0),W(b0,E0),W(b0,H1),z(b0,"flexDirection","row"),z(b0,"flexGrow",1),z(b0,"paddingRight",1),z(b0,"gap",0),z(E0,"wrapMode","none"),M(E0,()=>n().projectGlyph),z(H1,"wrapMode","none"),z(H1,"flexGrow",1),M(H1,()=>z9(n().titleText,c())),W(j1,t0),W(j1,e0),z(j1,"flexDirection","row"),z(j1,"gap",0),z(t0,"wrapMode","none"),M(t0,M0),W(e0,P),z(e0,"flexDirection","row"),z(e0,"flexGrow",1),z(e0,"paddingLeft",2),z(e0,"paddingRight",1),z(e0,"gap",1),z(P,"wrapMode","none"),z(P,"flexGrow",1),M(P,()=>n().subtitleText),M(e0,k(z0,{get when(){return c0().added>0},get children(){var J0=V("text"),z1=T("+");return W(J0,z1),z(J0,"wrapMode","none"),M(J0,()=>c0().added,null),w((F1)=>z(J0,"fg",Y.success,F1)),J0}}),null),M(e0,k(z0,{get when(){return c0().deleted>0},get children(){var J0=V("text"),z1=T("\u2212");return W(J0,z1),z(J0,"wrapMode","none"),M(J0,()=>c0().deleted,null),w((F1)=>z(J0,"fg",Y.error,F1)),J0}}),null),w((J0)=>{var z1=E()?Y.backgroundElement:void 0,F1=q0(),O1=e(),R1=E1.BOLD,y1=Y.text,L1=E1.BOLD,J1=q0(),I=Y.textMuted,g0=E1.DIM;return z1!==J0.e&&(J0.e=z(o0,"backgroundColor",z1,J0.e)),F1!==J0.t&&(J0.t=z(G1,"fg",F1,J0.t)),O1!==J0.a&&(J0.a=z(E0,"fg",O1,J0.a)),R1!==J0.o&&(J0.o=z(E0,"attributes",R1,J0.o)),y1!==J0.i&&(J0.i=z(H1,"fg",y1,J0.i)),L1!==J0.n&&(J0.n=z(H1,"attributes",L1,J0.n)),J1!==J0.s&&(J0.s=z(t0,"fg",J1,J0.s)),I!==J0.h&&(J0.h=z(P,"fg",I,J0.h)),g0!==J0.r&&(J0.r=z(P,"attributes",g0,J0.r)),J0},{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}),K0})()};return(()=>{var v=V("box"),X0=V("box"),A0=V("box"),E=V("text"),l0=V("box"),S0=V("box"),c0=V("text"),w0=V("scrollbox"),a0=V("box");return W(v,X0),W(v,l0),W(v,w0),gZ((n)=>{L0=n},v),z(v,"flexGrow",1),z(v,"minHeight",0),z(v,"flexDirection","column"),z(v,"paddingTop",1),z(v,"paddingBottom",1),z(v,"paddingLeft",0),z(v,"paddingRight",0),W(X0,A0),z(X0,"flexDirection","row"),z(X0,"justifyContent","space-between"),z(X0,"gap",1),z(X0,"paddingBottom",1),z(X0,"paddingLeft",1),z(X0,"paddingRight",1),W(A0,E),z(A0,"flexDirection","row"),z(A0,"gap",1),W(E,T("KOBE")),z(E,"wrapMode","none"),M(A0,k(z0,{get when(){return J.headerStatus?.()},children:(n)=>(()=>{var e=V("text");return z(e,"wrapMode","none"),z(e,"onMouseUp",()=>J.onHeaderStatusClick?.()),M(e,()=>n().label),w((q0)=>{var M0=n().emphasize?Y.warning:Y.textMuted,K0=n().emphasize?E1.BOLD:E1.DIM;return M0!==q0.e&&(q0.e=z(e,"fg",M0,q0.e)),K0!==q0.t&&(q0.t=z(e,"attributes",K0,q0.t)),q0},{e:void 0,t:void 0}),e})()}),null),M(X0,k(z0,{get when(){return J.onAddTask},get children(){var n=V("text");return W(n,T("[+]")),z(n,"wrapMode","none"),z(n,"onMouseUp",()=>J.onAddTask?.()),w((e)=>{var q0=Y.primary,M0=E1.BOLD;return q0!==e.e&&(e.e=z(n,"fg",q0,e.e)),M0!==e.t&&(e.t=z(n,"attributes",M0,e.t)),e},{e:void 0,t:void 0}),n}}),null),M(v,k(z0,{get when(){return G()},get children(){var n=V("box"),e=V("text"),q0=V("text"),M0=V("text");return W(n,e),W(n,q0),W(n,M0),z(n,"flexDirection","row"),z(n,"gap",0),z(n,"paddingBottom",1),z(n,"paddingLeft",1),W(e,T("/")),z(e,"wrapMode","none"),z(q0,"wrapMode","none"),M(q0,q),W(M0,T("\u2588")),z(M0,"wrapMode","none"),M(n,k(z0,{get when(){return q().length===0},get children(){var K0=V("text"),o0=T(" fuzzy filter");return W(K0,o0),z(K0,"wrapMode","none"),w((N0)=>z(K0,"fg",Y.textMuted,N0)),K0}}),null),M(n,k(z0,{get when(){return q().length>0},get children(){var K0=V("text"),o0=T(" "),N0=T("/");return W(K0,o0),W(K0,N0),z(K0,"wrapMode","none"),M(K0,()=>B0().length,N0),M(K0,r,null),w((G1)=>z(K0,"fg",Y.textMuted,G1)),K0}}),null),w((K0)=>{var{info:o0,text:N0,info:G1}=Y,b0=E1.BLINK;return o0!==K0.e&&(K0.e=z(e,"fg",o0,K0.e)),N0!==K0.t&&(K0.t=z(q0,"fg",N0,K0.t)),G1!==K0.a&&(K0.a=z(M0,"fg",G1,K0.a)),b0!==K0.o&&(K0.o=z(M0,"attributes",b0,K0.o)),K0},{e:void 0,t:void 0,a:void 0,o:void 0}),n}}),l0),W(l0,S0),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),W(S0,c0),z(S0,"flexDirection","row"),z(S0,"gap",2),M(S0,k(Y1,{each:bG,children:(n)=>{let e=()=>f()===n.view;return(()=>{var q0=V("text");return z(q0,"wrapMode","none"),z(q0,"onMouseUp",()=>X(n.view)),M(q0,()=>n.label),w((M0)=>{var K0=e()?Y.primary:Y.textMuted,o0=e()?E1.BOLD:void 0;return K0!==M0.e&&(M0.e=z(q0,"fg",K0,M0.e)),o0!==M0.t&&(M0.t=z(q0,"attributes",o0,M0.t)),M0},{e:void 0,t:void 0}),q0})()}}),c0),W(c0,T("[/]")),z(c0,"wrapMode","none"),M(l0,k(z0,{get when(){return J.sortMode},get children(){var n=V("text");return W(n,T("sort")),z(n,"wrapMode","none"),z(n,"onMouseUp",()=>J.onSortModeToggle?.()),w((e)=>{var q0=Y.textMuted,M0=E1.DIM;return q0!==e.e&&(e.e=z(n,"fg",q0,e.e)),M0!==e.t&&(e.t=z(n,"attributes",M0,e.t)),e},{e:void 0,t:void 0}),n}}),null),M(v,k(z0,{get when(){return y().length>1},get children(){var n=V("box"),e=V("box"),q0=V("text"),M0=V("text"),K0=V("text"),o0=T(" ");return W(n,e),W(n,K0),z(n,"flexDirection","row"),z(n,"justifyContent","space-between"),z(n,"gap",1),z(n,"paddingBottom",1),z(n,"paddingLeft",1),z(n,"paddingRight",1),z(n,"onMouseUp",()=>a()),W(e,q0),W(e,M0),z(e,"flexDirection","row"),z(e,"gap",1),W(q0,T("Project")),z(q0,"wrapMode","none"),z(M0,"wrapMode","none"),M(M0,t),W(K0,o0),z(K0,"wrapMode","none"),M(K0,Z0,o0),M(K0,()=>Z0()===1?"task":"tasks",null),w((N0)=>{var G1=Y.textMuted,b0=E1.BOLD,E0=G0()?Y.primary:Y.textMuted,H1=G0()?E1.BOLD:void 0,j1=Y.textMuted,t0=E1.DIM;return G1!==N0.e&&(N0.e=z(q0,"fg",G1,N0.e)),b0!==N0.t&&(N0.t=z(q0,"attributes",b0,N0.t)),E0!==N0.a&&(N0.a=z(M0,"fg",E0,N0.a)),H1!==N0.o&&(N0.o=z(M0,"attributes",H1,N0.o)),j1!==N0.i&&(N0.i=z(K0,"fg",j1,N0.i)),t0!==N0.n&&(N0.n=z(K0,"attributes",t0,N0.n)),N0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),n}}),w0),M(v,k(z0,{get when(){return W0().length>0},get children(){var n=V("box"),e=V("scrollbox"),q0=V("box");return W(n,e),z(n,"flexDirection","column"),z(n,"flexShrink",0),M(n,k(m0,{label:"PROJECTS"}),e),W(e,q0),gZ((M0)=>{F0=M0},e),z(e,"flexShrink",0),z(e,"flexGrow",0),z(e,"minHeight",0),z(e,"stickyScroll",!1),z(e,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),z(q0,"flexShrink",0),z(q0,"gap",0),z(q0,"paddingRight",1),M(q0,k(Y1,{get each(){return W0()},children:(M0)=>k(O0,{row:M0})})),w((M0)=>z(e,"maxHeight",H0(),M0)),n}}),w0),M(v,k(m0,{label:"TASKS",get suffix(){return r0(()=>g()==="default")()?void 0:g()},get topPad(){return W0().length>0}}),w0),W(w0,a0),gZ((n)=>{Q0=n},w0),z(w0,"flexGrow",1),z(w0,"minHeight",0),z(w0,"stickyScroll",!1),z(w0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),z(a0,"flexShrink",0),z(a0,"gap",0),z(a0,"paddingRight",1),M(a0,k(Y1,{get each(){return o()},children:(n)=>{let{task:e,flatIndex:q0}=n,M0=()=>q0===d0(),K0=()=>e.id===J.selectedId(),o0=V0(()=>{let t0=J.chatRunState?.();if(!t0)return!1;let e0=`${e.id}:`;for(let[P,J0]of t0)if(J0==="running"&&P.startsWith(e0))return!0;return!1}),N0=V0(()=>{let t0=TQ(J.worktreeChanges?.(),e.worktreePath);if(t0)return t0;if(D(),!e.archived)H9(e.worktreePath);return B9(e.worktreePath)},void 0,{equals:AY}),G1=V0(()=>Q9({task:e,activity:J.engineState?.().get(e.id),job:J.taskJobs?.().get(e.id),live:o0(),spinnerFrame:0,subtitleBudget:N(),truncateBranch:CU,mainBranch:""})),b0=V0(()=>q9(G1(),l)),E0=()=>$0(b0().tone),H1=()=>M0()?Y.focusAccent:K0()?Y.primary:void 0,j1=()=>M0()||K0()?"\u258C":" ";return(()=>{var t0=V("box"),e0=V("box"),P=V("box"),J0=V("text"),z1=V("box"),F1=V("text"),O1=V("text"),R1=V("box"),y1=V("text"),L1=V("box"),J1=V("text");return W(t0,e0),z(t0,"flexDirection","column"),z(t0,"gap",0),z(t0,"paddingBottom",1),W(e0,P),W(e0,R1),gZ((I)=>{k0.set(q0,I),i1(()=>{if(k0.get(q0)===I)k0.delete(q0)})},e0),z(e0,"flexDirection","column"),z(e0,"gap",0),z(e0,"onMouseUp",()=>{if(J.onSelect(e.id),J.activateOnClick)J.onActivate?.(e.id)}),z(e0,"onMouseOver",(I)=>y0({task:e,x:I.x,y:I.y})),z(e0,"onMouseOut",()=>y0((I)=>I?.task.id===e.id?null:I)),W(P,J0),W(P,z1),z(P,"flexDirection","row"),z(P,"gap",0),z(J0,"wrapMode","none"),M(J0,j1),W(z1,F1),W(z1,O1),z(z1,"flexDirection","row"),z(z1,"flexGrow",1),z(z1,"paddingRight",1),z(z1,"gap",0),z(F1,"wrapMode","none"),M(F1,()=>b0().stateGlyph),z(O1,"wrapMode","none"),z(O1,"flexGrow",1),M(O1,()=>z9(b0().titleText,c())),M(z1,k(z0,{get when(){return r0(()=>!!J.moveMode?.())()&&M0()},get children(){var I=V("text");return W(I,T(" move")),z(I,"wrapMode","none"),w((g0)=>z(I,"fg",Y.warning,g0)),I}}),null),W(R1,y1),W(R1,L1),z(R1,"flexDirection","row"),z(R1,"gap",0),z(y1,"wrapMode","none"),M(y1,j1),W(L1,J1),z(L1,"flexDirection","row"),z(L1,"flexGrow",1),z(L1,"paddingLeft",2),z(L1,"paddingRight",1),z(L1,"gap",1),z(J1,"wrapMode","none"),z(J1,"flexGrow",1),M(J1,()=>b0().subtitleText),M(L1,k(z0,{get when(){return e.pinned===!0},get children(){var I=V("text");return W(I,T("\u25B4")),z(I,"wrapMode","none"),w((g0)=>z(I,"fg",Y.warning,g0)),I}}),null),M(L1,k(z0,{get when(){return N0().added>0},get children(){var I=V("text"),g0=T("+");return W(I,g0),z(I,"wrapMode","none"),M(I,()=>N0().added,null),w((h0)=>z(I,"fg",Y.success,h0)),I}}),null),M(L1,k(z0,{get when(){return N0().deleted>0},get children(){var I=V("text"),g0=T("\u2212");return W(I,g0),z(I,"wrapMode","none"),M(I,()=>N0().deleted,null),w((h0)=>z(I,"fg",Y.error,h0)),I}}),null),w((I)=>{var g0=M0()?Y.backgroundElement:void 0,h0=H1(),f1=E0(),OJ=E1.BOLD,TJ=Y.text,BJ=K0()||M0()?E1.BOLD:void 0,SY=H1(),yY=Y.textMuted,HJ=E1.DIM;return g0!==I.e&&(I.e=z(e0,"backgroundColor",g0,I.e)),h0!==I.t&&(I.t=z(J0,"fg",h0,I.t)),f1!==I.a&&(I.a=z(F1,"fg",f1,I.a)),OJ!==I.o&&(I.o=z(F1,"attributes",OJ,I.o)),TJ!==I.i&&(I.i=z(O1,"fg",TJ,I.i)),BJ!==I.n&&(I.n=z(O1,"attributes",BJ,I.n)),SY!==I.s&&(I.s=z(y1,"fg",SY,I.s)),yY!==I.h&&(I.h=z(J1,"fg",yY,I.h)),HJ!==I.r&&(I.r=z(J1,"attributes",HJ,I.r)),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}),t0})()}}),null),M(a0,k(z0,{get when(){return B0().length===0},get children(){var n=V("box"),e=V("text");return W(n,e),z(n,"paddingTop",1),z(n,"paddingLeft",1),M(e,(()=>{var q0=r0(()=>!!(G()&&q().trim().length>0));return()=>q0()?"No matching tasks \u2014 esc to clear.":r0(()=>!!G0())()?f()==="active"?"No active tasks for this project.":"No archived tasks for this project.":f()==="active"?"No active tasks \u2014 press n or [+] to create one.":"No archived tasks."})()),w((q0)=>z(e,"fg",Y.textMuted,q0)),n}}),null),M(a0,k(z0,{get when(){return r0(()=>!!(G0()&&B0().length>0&&!f0()))()&&!(G()&&q().trim().length>0)},get children(){var n=V("box"),e=V("text");return W(n,e),z(n,"paddingTop",1),z(n,"paddingLeft",1),z(e,"wrapMode","none"),M(e,()=>f()==="active"?"No active tasks for this project.":"No archived tasks for this project."),w((q0)=>{var M0=Y.textMuted,K0=E1.DIM;return M0!==q0.e&&(q0.e=z(e,"fg",M0,q0.e)),K0!==q0.t&&(q0.t=z(e,"attributes",K0,q0.t)),q0},{e:void 0,t:void 0}),n}}),null),M(a0,k(z0,{get when(){return r0(()=>f()==="archived")()&&B0().length>0},get children(){var n=V("box"),e=V("text");return W(n,e),z(n,"paddingTop",1),z(n,"paddingLeft",1),W(e,T("a to unarchive")),z(e,"wrapMode","none"),w((q0)=>{var M0=Y.textMuted,K0=E1.DIM;return M0!==q0.e&&(q0.e=z(e,"fg",M0,q0.e)),K0!==q0.t&&(q0.t=z(e,"attributes",K0,q0.t)),q0},{e:void 0,t:void 0}),n}}),null),M(v,k(z0,{get when(){return D0()},children:(n)=>{let e=V0(()=>{let b0=n().task,E0=[];if(E0.push({text:b0.kind==="main"?zY(b0.repo):b0.title,bold:!0}),b0.branch.length>0)E0.push({text:`\u2387 ${b0.branch}`});if(b0.worktreePath.length>0)E0.push({text:b0.worktreePath,dim:!0});return E0}),q0=72,M0=V0(()=>Math.min(68,Math.max(...e().map((b0)=>ty(b0.text))))),K0=V0(()=>M0()+4),o0=V0(()=>e().length+2),N0=V0(()=>Math.max(0,Math.min(n().x+2,s().width-K0()-1))),G1=V0(()=>Math.max(0,Math.min(n().y+1,s().height-o0()-1)));return(()=>{var b0=V("box");return z(b0,"position","absolute"),z(b0,"zIndex",2600),z(b0,"flexDirection","column"),z(b0,"border",!0),z(b0,"paddingLeft",1),z(b0,"paddingRight",1),M(b0,k(Y1,{get each(){return e()},children:(E0)=>(()=>{var H1=V("text");return z(H1,"wrapMode","none"),M(H1,(()=>{var j1=r0(()=>!!E0.dim);return()=>j1()?ey(E0.text,M0()):G9(E0.text,M0())})()),w((j1)=>{var t0=E0.dim?Y.textMuted:Y.text,e0=E0.bold?E1.BOLD:E0.dim?E1.DIM:void 0;return t0!==j1.e&&(j1.e=z(H1,"fg",t0,j1.e)),e0!==j1.t&&(j1.t=z(H1,"attributes",e0,j1.t)),j1},{e:void 0,t:void 0}),H1})()})),w((E0)=>{var H1=N0(),j1=G1(),t0=K0(),e0=Y.focusAccent,P=Y.backgroundElement;return H1!==E0.e&&(E0.e=z(b0,"left",H1,E0.e)),j1!==E0.t&&(E0.t=z(b0,"top",j1,E0.t)),t0!==E0.a&&(E0.a=z(b0,"width",t0,E0.a)),e0!==E0.o&&(E0.o=z(b0,"borderColor",e0,E0.o)),P!==E0.i&&(E0.i=z(b0,"backgroundColor",P,E0.i)),E0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),b0})()}}),null),w((n)=>{var e=Z()?Y.focusAccent:Y.textMuted,q0=E1.BOLD,M0=Y.textMuted,K0=E1.DIM;return e!==n.e&&(n.e=z(E,"fg",e,n.e)),q0!==n.t&&(n.t=z(E,"attributes",q0,n.t)),M0!==n.a&&(n.a=z(c0,"fg",M0,n.a)),K0!==n.o&&(n.o=z(c0,"attributes",K0,n.o)),n},{e:void 0,t:void 0,a:void 0,o:void 0}),v})()}var gU=32,bG,oy=2000,sy=16;var yU=S(()=>{h();h();h();h();h();h();h();h();h();h();q1();T1();T1();UU();Vq();DU();OU();fX();RU();bG=[{view:"active",label:"Workspace"},{view:"archived",label:"Archives"}]});var TU={};Q1(TU,{startTasksPane:()=>Xk,legendRowCap:()=>bU,legendCap:()=>NU});import{existsSync as kU}from"fs";import{stat as Jk}from"fs/promises";import{TextAttributes as Mq}from"@opentui/core";function j9(J){return!!J&&iG(J)}function IU(J){let Y=J instanceof Error?J.message:String(J);if(/not a git repository/i.test(Y))return"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.";return`Couldn't create the worktree: ${Y}`}function Zk(J){let{theme:Y}=x0(),Z=x1(),f=UX(),X=qq(),[G,Q]=p(J.tasks().some((x)=>x.id===J.initialTaskId)?J.initialTaskId:J.tasks()[0]?.id??null);function q(x){X.notify({kind:"error",taskId:G()??"",tabId:"",title:x})}function B(x){X.notify({kind:"done",taskId:G()??"",tabId:"",title:x})}let[H,K]=p(!1),[j,U]=p(f.get("activeSortMode")==="recent"?"recent":"default"),L=f.get("tasksPane.projectFilter"),[F,D]=p(typeof L==="string"&&L.length>0?L:null),O=(x)=>{D(x),f.set("tasksPane.projectFilter",x)},[A,l]=p(null),R=RY(),C=!J.initialTaskId;p0(()=>{let x=J.orch?.activeTaskSignal()();if(!x)return;if(!C){if(x!==J.initialTaskId)return;C=!0}Q(x)}),p0(WJ(()=>J.orch?.uiPrefsSignal()(),(x)=>{if(x&&x.sortMode!==n1(j))U(x.sortMode);if(x&&x.projectFilter!==n1(F))D(x.projectFilter)})),p0(()=>{let x=J.orch?.updateSignal()();if(x)l(x)});let g={orch:J.orch,tasks:()=>J.tasks(),confirm:async(x)=>await rY.show(Z,x.title,x.body,x.cancelLabel,x.confirmLabel)===!0,promptText:(x,F0)=>QY.show(Z,x,F0),logger:console,logPrefix:"[kobe tasks]",notifyError:q,notifyInfo:B,reload:()=>J.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(x,F0)=>{if(G()!==x)return;let Q0=J.tasks();Q(F0?.id??(Q0.find((L0)=>!L0.archived)??Q0[0])?.id??null)},promptNewTask:(x,F0,Q0)=>Zq.show(Z,x,F0,Q0),cursorRepo:()=>{let x=J.tasks();return(x.find((F0)=>F0.id===G())??x[0])?.repo},lastVendor:()=>C1("lastSelectedVendor"),rememberVendor:(x)=>d1("lastSelectedVendor",x),openCreateSurface:async(x)=>{if(Zf(f.get(nY,Yf))!=="chattab")return!1;let Q0=await UJ();if(!Q0)return!1;return await OQ(Q0,x),!0},selectTask:(x)=>Q(x),enterTask:(x)=>s(x)};async function y(){await zU(g)}async function $(){if(Zf(f.get(nY,Yf))==="chattab"){let Q0=await UJ();if(Q0){await MQ(Q0);return}}if(!(await Df.show(Z,f,J.orch??void 0)).visualPrefsChanged)return;if(!f.flush())return;try{let Q0=await UJ();if(Q0)await JX(Q0)}catch(Q0){console.error("[kobe tasks] failed to refresh workspace panes:",Q0)}}async function G0(){let x=await UJ();if(x){await FQ(x);return}DX.show(Z)}async function t(){if(!A()?.hasUpdate){B(`Already on the latest version (v${n0})`);return}let F0=await UJ();if(!F0)return;await AQ(F0)}async function Z0(x){await YU(g,x)}async function u(x){await ZU(g,x)}async function B0(x){await fU(g,x)}async function Y0(x){await XU(g,x)}async function W0(x){await GU(g,x)}async function o(x){let Q0=J.tasks().find((k0)=>k0.id===x)?.worktreePath;if(!Q0||!kU(Q0)){if(!J.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),q("No daemon running \u2014 can't create the worktree");return}try{Q0=await J.orch.ensureWorktree(x)}catch(k0){console.error("[kobe tasks] task.ensureWorktree failed:",k0),q(IU(k0));return}await J.reload()}if(!Q0||!kU(Q0))return;let L0=qU();if(!L0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),q("No editor found \u2014 set KOBE_OPEN_EDITOR (e.g. 'code', 'cursor', 'nvim')");return}if(!BU(Q0,L0))console.error(`[kobe tasks] failed to open worktree with ${L0.label}`),q(`Couldn't open worktree with ${L0.label}`)}async function _(){if(!process.env.TMUX_PANE)return;let x=await UJ();if(!x)return;let F0=await hf(x);if(!F0)return;await u0(["select-pane","-t",F0])}async function r(x,F0){let Q0=J.tasks().find((L0)=>L0.id===x);if(!Q0||Q0.kind==="main"||!J.orch)return;try{await J.orch.moveTask(x,F0)}catch(L0){console.error("[kobe tasks] task.move failed:",L0),q(`Couldn't move task: ${L0 instanceof Error?L0.message:String(L0)}`);return}Q(x),await J.reload()}let[f0,a]=p(f.get("tasksPane.keysCollapsed",!1)===!0),U0=(x)=>{a(x),f.set("tasksPane.keysCollapsed",x)};p0(WJ(()=>J.orch?.uiPrefsSignal()(),(x)=>{if(x&&x.keysCollapsed!==n1(f0))a(x.keysCollapsed)}));let[c,N]=p(!1);U1(()=>({enabled:Z.stack.length===0&&!c(),bindings:kZ({"help.open":()=>void G0(),"task.new":()=>void y(),"settings.open.sidebar":()=>void $(),"tasks.update":()=>void t(),"tasks.openWorktree":()=>{let x=G();if(x)o(x)},"tasks.renameBranch":()=>{let x=G();if(x)Y0(x)},"tasks.cycleEngine":()=>{let x=G();if(x)W0(x)},"tasks.toggleKeys":()=>U0(!f0()),"tasks.focusEngine":()=>void _().catch((x)=>console.error("[kobe tasks] focus engine pane failed:",x))})}));async function s(x){let F0=K1(x),Q0=J.tasks().find((O0)=>O0.id===x),L0=await UJ();if(L0&&L0!==F0)await ZG(L0);if(await X1(F0)){let O0=await Nz(F0,"@kobe_worktree")||Q0?.worktreePath||"";if(j9(O0)){let v=Q0?.repo?iY(Q0.repo,O0,{kind:"repo-init"}):void 0;await MZ({name:F0,cwd:O0,command:LJ(Q0?.vendor),taskId:x,vendor:Q0?.vendor,repo:Q0?.repo,launchInit:v})}await yQ(F0),await u0(["switch-client","-t",`=${F0}`]),J.orch?.setActiveTask(x).catch(()=>{});return}let T0=Q0?.worktreePath;if(!j9(T0)){if(!J.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),q("No daemon running \u2014 can't open this task");return}try{T0=await J.orch.ensureWorktree(x)}catch(O0){console.error("[kobe tasks] task.ensureWorktree failed:",O0),q(IU(O0));return}await J.reload()}if(!j9(T0))return;let m0=Q0?.repo?iY(Q0.repo,T0,{kind:"repo-init"}):void 0;if(!await MZ({name:F0,cwd:T0,command:LJ(Q0?.vendor),taskId:x,vendor:Q0?.vendor,repo:Q0?.repo,launchInit:m0})){console.error(`[kobe tasks] failed to start session ${F0}`),q("Couldn't start this task's session");return}await yQ(F0),await u0(["switch-client","-t",`=${F0}`]),J.orch?.setActiveTask(x).catch(()=>{})}let H0=V0(()=>{let x=A();if(x?.hasUpdate)return{label:`v${x.latest} \u2191`,emphasize:!0};return{label:`v${n0}`,emphasize:!1}}),D0=()=>J.orch?.daemonStaleSignal()()??!1,y0=()=>J.orch?.daemonVersionSignal()()??null,d0=V0(()=>J.tasks().find((x)=>x.id===G())?.kind==="main");return(()=>{var x=V("box"),F0=V("box");return W(x,F0),z(x,"flexDirection","column"),z(x,"flexGrow",1),M(x,k(t4,{stale:D0,daemonVersion:y0,clientVersion:n0,width:()=>R().width}),F0),z(F0,"flexGrow",1),z(F0,"flexShrink",1),M(F0,k(SU,{get tasks(){return J.tasks},selectedId:G,onSelect:Q,onActivate:(Q0)=>void s(Q0),activateOnClick:!0,headerStatus:H0,onHeaderStatusClick:()=>void t(),onAddTask:()=>void y(),width:()=>R().width,get engineState(){return r0(()=>!!J.orch)()?J.orch.engineStateSignal():void 0},get taskJobs(){return r0(()=>!!J.orch)()?J.orch.taskJobsSignal():void 0},get worktreeChanges(){return J.orch?()=>{let Q0=J.orch;if(!Q0||Q0.connectionStateSignal()()!=="online")return null;return Q0.worktreeChangesSignal()()}:void 0},onRenameRequest:(Q0)=>void B0(Q0),onDeleteRequest:(Q0)=>void u(Q0),onArchiveRequest:(Q0)=>void Z0(Q0),onLocalMergeRequest:(Q0)=>{let L0=J.tasks().find((k0)=>k0.id===Q0);if(!L0||L0.kind==="main")return;Q(Q0),K((k0)=>!k0)},moveMode:H,onMoveRequest:(Q0,L0)=>void r(Q0,L0),onMoveModeExit:()=>K(!1),sortMode:j,projectFilter:F,onProjectFilterChange:O,onSortModeToggle:()=>{let Q0=j()==="default"?"recent":"default";U(Q0),f.set("activeSortMode",Q0)},focused:()=>Z.stack.length===0,onSearchActiveChange:N})),M(x,k(fk,{moveMode:H,selectedIsMain:d0,collapsed:f0,onToggleCollapsed:()=>U0(!f0())}),null),w((Q0)=>z(x,"backgroundColor",Y.background,Q0)),x})()}function NU(J){let Y=vj(J);if(!Y)return null;let Z=Y.hint?.keys??Y.keys[0];return Z&&Z.length>0?Z:null}function bU(J){let Y=J.map(NU).filter((Z)=>Z!==null);return Y.length>0?Y.join("/"):null}function fk(J){let{theme:Y}=x0(),[Z,f]=p("Prefix");o1(()=>{v0(["show-options","-g","prefix"]).then(({code:U,stdout:L})=>{if(U!==0)return;let F=Uq(L);if(F)f(F)})});let X=()=>{Pj();let U=XQ(),L=U.binds,F=[],D=U.focus.filter((A)=>A!==null).map((A)=>A.chord);if(D.length===4&&D.every((A,l)=>A===LZ[l]))F.push({k:"ctrl+hjkl",label:"move panes"});else if(D.length>0)F.push({k:D[0],label:"move panes"});let O=(A,l)=>{let R=l.map((C)=>L[C]?.chord).filter((C)=>!!C);if(R.length>0)F.push({k:`prefix ${R.join("/")}`,label:A})};if(L["tmux.detach"])F.push({k:L["tmux.detach"].chord,label:"tasks\u2192detach"});return O("splits",["tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"]),O("panes",["tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle"]),F},G=()=>{Pj();let U=[{ids:["help.open"],label:"full help"},{ids:["task.new"],label:"new task"},{ids:["settings.open.sidebar"],label:"settings"},{ids:["sidebar.select"],label:"open"},{ids:["tasks.focusEngine"],label:"focus engine"},{ids:["tasks.openWorktree"],label:"open wt"},{ids:["sidebar.delete"],label:"delete"},{ids:["sidebar.view"],label:"views"},{ids:["sidebar.projectFilter"],label:"project"}],L=[];for(let F of U){let D=bU(F.ids);if(D===null)continue;L.push({k:D,label:F.label,dimWhenMain:F.dimWhenMain})}return L.push(...X()),L},Q=[{k:"j/k",label:"reorder"},{k:"enter/esc",label:"done"}],q=()=>J.moveMode?.()?Q:G(),B=18,H=()=>Math.min(B,Math.max(...q().map((U)=>U.label.length))),K=(U)=>U.length<=H()?U:`${U.slice(0,Math.max(0,H()-1))}\u2026`,j=()=>(J.collapsed?.()??!1)&&!(J.moveMode?.()??!1);return(()=>{var U=V("box"),L=V("text");return W(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",()=>J.onToggleCollapsed?.()),M(L,()=>j()?"\u2500\u2500 keys ?\u25B8 \u2500\u2500":"\u2500\u2500 keys ?\u25BE \u2500\u2500"),M(U,k(z0,{get when(){return!j()},get children(){return k(Y1,{get each(){return q()},children:(F)=>{let D=()=>F.dimWhenMain===!0&&(J.selectedIsMain?.()??!1);return(()=>{var O=V("box"),A=V("box"),l=V("text"),R=T("["),C=T("]"),g=V("box"),y=V("text");return W(O,A),W(O,g),z(O,"flexDirection","row"),z(O,"gap",1),z(O,"justifyContent","space-between"),W(A,l),z(A,"width",10),z(A,"flexShrink",0),W(l,R),W(l,C),z(l,"wrapMode","none"),M(l,()=>LX(F.k,Z()),C),W(g,y),z(g,"flexShrink",0),z(y,"wrapMode","none"),M(y,()=>K(F.label)),w(($)=>{var G0=D()?Y.textMuted:Y.accent,t=D()?Mq.DIM:Mq.BOLD,Z0=H(),u=Y.textMuted,B0=D()?Mq.DIM:void 0;return G0!==$.e&&($.e=z(l,"fg",G0,$.e)),t!==$.t&&($.t=z(l,"attributes",t,$.t)),Z0!==$.a&&($.a=z(g,"width",Z0,$.a)),u!==$.o&&($.o=z(y,"fg",u,$.o)),B0!==$.i&&($.i=z(y,"attributes",B0,$.i)),$},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),O})()}})}}),null),w((F)=>{var D=Y.textMuted,O=Mq.DIM;return D!==F.e&&(F.e=z(L,"fg",D,F.e)),O!==F.t&&(F.t=z(L,"attributes",O,F.t)),F},{e:void 0,t:void 0}),U})()}async function Xk(J={}){await qJ({logContext:"tasks",providers:{notifications:!0},setup:()=>Gk(J)})}async function Gk(J){let Y=new Af({homeDir:qY()});await Y.load();let[Z,f]=p(Y.list()),X=null;try{let H=await dJ();if(H){let K=new XJ(H);await K.init(),X=K}else uY("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(H){fZ("tasks-boot",H),uY("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let G=()=>X&&X.connectionStateSignal()()==="online"?X.tasksSignal()():Z(),Q=async()=>{await Y.load(),f(Y.list())},q="",B=setInterval(()=>{if(X&&X.connectionStateSignal()()==="online")return;(async()=>{let H="missing";try{let K=await Jk(Y.filePath);H=`${K.mtimeMs}:${K.size}`}catch{}if(H===q)return;q=H,await Q()})().catch(()=>{})},Yk);return{root:()=>[k(Zk,{tasks:G,get initialTaskId(){return J.initialTaskId},orch:X,reload:Q}),k(o4,{})],onDestroy:()=>{if(B)clearInterval(B);X?.dispose()}}}var Yk=1500;var EU=S(()=>{h();h();h();h();h();h();h();h();N1();h();cZ();DJ();q1();CZ();kJ();c1();$J();SX();rf();A1();GQ();QJ();_j();CG();rj();Z9();s4();e4();KX();SG();Bq();T1();pj();NZ();MJ();QU();HU();yU();ZJ();bJ();oj()});var uU={};Q1(uU,{startSettingsHost:()=>Qk});function zk(J){let Y=UX(),Z=x1(),{theme:f}=x0(),X=!1,G=!1;async function Q(){if(G)return;G=!0;try{if(Y.flush()&&X){let B=await UJ();if(B)await JX(B)}}catch(q){console.error("[kobe settings] failed to refresh workspace panes:",q)}finally{process.exit(0)}}return U1(()=>({enabled:Z.stack.length===0,bindings:[{key:"escape",cmd:Q},{key:"q",cmd:Q},{key:"ctrl+c",cmd:Q}]})),(()=>{var q=V("scrollbox");return z(q,"flexGrow",1),z(q,"paddingTop",1),z(q,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),M(q,k(Df,{kv:Y,get orchestrator(){return J.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{X=!0},onClose:Q})),w((B)=>z(q,"backgroundColor",f.background,B)),q})()}async function Qk(){await qJ({setup:async()=>{let J=null;try{let Y=await dJ();if(Y){let Z=new XJ(Y);await Z.init(),J=Z}else console.error("[kobe settings] no daemon running; Restart backend disabled")}catch(Y){console.error("[kobe settings] daemon unavailable; Restart backend disabled:",Y)}return{root:()=>k(zk,{orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var xU=S(()=>{h();h();h();h();h();h();DJ();CZ();Z9();SG();T1();NZ();MJ();ZJ();bJ()});var wU={};Q1(wU,{startHelpHost:()=>Bk});function qk(){let J=x1(),{theme:Y}=x0();function Z(){process.exit(0)}return U1(()=>({enabled:J.stack.length===0,bindings:[{key:"escape",cmd:Z},{key:"q",cmd:Z},{key:"f1",cmd:Z},{key:"ctrl+c",cmd:Z}]})),(()=>{var f=V("box");return z(f,"flexGrow",1),z(f,"paddingTop",1),M(f,k(DX,{onClose:Z})),w((X)=>z(f,"backgroundColor",Y.background,X)),f})()}async function Bk(){await qJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>k(qk,{})})})}var hU=S(()=>{h();h();h();h();h();_j();T1();NZ();MJ();bJ()});var PU={};Q1(PU,{startUpdateHost:()=>Lk});import{spawn as Hk,spawnSync as jk}from"child_process";import{TextAttributes as FX}from"@opentui/core";function Wk(J){if(!J)return!1;let Y=process.platform,[Z,f]=Y==="darwin"?["open",[J]]:Y==="win32"?["cmd",["/c","start","",J]]:["xdg-open",[J]];try{return Hk(Z,f,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function Vk(J){return J.replace(/\r\n/g,`
211
+ ${DH()}
212
+ `),process.exit(2);if(Y==="status"){let q=Vz(),[B,j]=KH(),K=!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: ${K}`,` looked in: ${B}`,` ${j}`,q.installed&&!q.stale?"":" \u2192 run `kobe skill install` to install / refresh",""].join(`
213
+ `));return}if(Y==="command"){process.stdout.write(`${pf({agent:s6(Z)})}
214
+ `);return}let X=s6(Z),G=VH({agent:X});process.stdout.write(`kobe skill: running \`npx ${G.join(" ")}\`
215
+ `);let f=await Bun.spawn(["npx",...G],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(f!==0)process.stderr.write(`
216
+ kobe skill install failed (npx exited ${f}). Is \`npx\` on PATH and are you online?
217
+ You can run it yourself: ${pf({agent:X})}
218
+ `),process.exit(f||1);process.stdout.write(`kobe skill: installed.
219
+ `)}var Fg;var e6=S(()=>{_f();Fg=["install","status","command"]});var FH={};q1(FH,{runHookSubcommand:()=>Ig,readTextWithTimeout:()=>XK,parseWorktreeAddPath:()=>zK,ensureGlobalKobeHooks:()=>Tg});import{homedir as Ag}from"os";import{join as YK,resolve as ZK}from"path";async function XK(J,Y=Rg){let Z;try{return await Promise.race([J(),new Promise((X)=>{Z=setTimeout(()=>X(""),Y)})])}finally{if(Z!==void 0)clearTimeout(Z)}}async function GK(){try{let J=await XK(()=>Bun.stdin.text());if(!J.trim())return{};let Y=JSON.parse(J);return Y&&typeof Y==="object"&&!Array.isArray(Y)?Y:{}}catch{return{}}}function Cg(J,Y){for(let Z=0;Z<J.length;Z++){if(J[Z]===Y)return J[Z+1];if(J[Z].startsWith(`${Y}=`))return J[Z].slice(Y.length+1)}return}function yg(J){return!!J&&typeof J==="object"&&!Array.isArray(J)}function Sg(J){let Y=[],Z=/"([^"]*)"|'([^']*)'|(\S+)/g,X;while((X=Z.exec(J))!==null)Y.push(X[1]??X[2]??X[3]??"");return Y}function zK(J){let Y=Sg(J),Z=new Set(["-b","-B","--reason"]);for(let X=0;X+1<Y.length;X++){if(Y[X]!=="worktree"||Y[X+1]!=="add")continue;let G=X+2;while(G<Y.length){let z=Y[G];if(z==="&&"||z==="||"||z===";"||z==="|"||z===">"||z===">>")break;if(z.startsWith("-")){G+=Z.has(z)?2:1;continue}return z}}return}async function kg(){let J=await GK(),Y=yg(J.tool_input)?J.tool_input:{},Z=typeof Y.command==="string"?Y.command:"";if(!Z.includes("worktree"))return;let X=zK(Z);if(!X)return;let G=typeof J.cwd==="string"&&J.cwd?J.cwd:process.cwd(),z=ZK(G,X),f=await lJ();if(!f)return;try{await f.request("worktree.reconcile",{cwd:G,worktreePath:z})}finally{f.close()}}async function Ig(J){let[Y,...Z]=J;if(Y==="setup"){await Eg(Z);return}if(Y===gg){try{await kg()}catch{}return}try{if(!Y||!KQ(Y))return;let X=await GK(),G=Cg(Z,"--task-id"),z=typeof X.cwd==="string"&&X.cwd?X.cwd:process.cwd(),f;for(let B of QK())if(f=B.activityDetailFromPayload(Y,X),f)break;let q=await lJ();if(!q)return;try{await q.request("engine.reportEvent",{...G?{taskId:G}:{cwd:z},kind:Y,...f?{detail:f}:{}})}finally{q.close()}}catch{}}function Ng(){return m1.map((J)=>wB(J)).filter((J)=>J.supportsWorktreeSync())}function QK(){return m1.map((J)=>wB(J)).filter((J)=>J.supportsHooks())}function MH(){return YK(Ag(),".claude","settings.json")}function bg(J){if(!J||J==="off")return;if(J==="global")return MH();if(J.startsWith("repo:"))return YK(ZK(J.slice(5)),".claude","settings.json");return J}async function Tg(){try{let J=MH();for(let Y of QK())await Y.installActivityHooks(J),await Y.installWorktreeWatchHook(J);await fK()}catch{}}async function fK(){let J=Ng();if(J.length===0)return;let Y=g1(JK),Z=new Set([MH()]),X=bg(Y);if(X)Z.add(X);for(let G of J)for(let z of Z)await G.removeWorktreeSyncHook(z);if(Y!=="off")i1(JK,"off")}async function Eg(J){await fK(),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 Rg=500,gg="worktree-created",JK="externalWorktreeSync";var OH=S(()=>{CJ();hB();UQ();O1();BJ()});function BK(J){var Y;if(J>=55296&&J<=57343||J>1114111)return 65533;return(Y=ug.get(J))!==null&&Y!==void 0?Y:J}var AH,ug,qK;var jK=S(()=>{ug=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]]),qK=(AH=String.fromCodePoint)!==null&&AH!==void 0?AH:(J)=>{let Y="";if(J>65535)J-=65536,Y+=String.fromCharCode(J>>>10&1023|55296),J=56320|J&1023;return Y+=String.fromCharCode(J),Y}});function HK(J){let Y=typeof atob==="function"?atob(J):typeof Buffer.from==="function"?Buffer.from(J,"base64").toString("binary"):new Buffer(J,"base64").toString("binary"),Z=Y.length&-2,X=new Uint16Array(Z/2);for(let G=0,z=0;G<Z;G+=2){let f=Y.charCodeAt(G),q=Y.charCodeAt(G+1);X[z++]=f|q<<8}return X}var WK;var VK=S(()=>{WK=HK("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 zJ;var KK=S(()=>{(function(J){J[J.VALUE_LENGTH=49152]="VALUE_LENGTH",J[J.FLAG13=8192]="FLAG13",J[J.BRANCH_LENGTH=8064]="BRANCH_LENGTH",J[J.JUMP_TABLE=127]="JUMP_TABLE"})(zJ||(zJ={}))});function RH(J){return J>=E1.ZERO&&J<=E1.NINE}function xg(J){return J>=E1.UPPER_A&&J<=E1.UPPER_F||J>=E1.LOWER_A&&J<=E1.LOWER_F}function wg(J){return J>=E1.UPPER_A&&J<=E1.UPPER_Z||J>=E1.LOWER_A&&J<=E1.LOWER_Z||RH(J)}function hg(J){return J===E1.EQUALS||wg(J)}class CH{constructor(J,Y,Z){this.decodeTree=J,this.emitCodePoint=Y,this.errors=Z,this.state=_1.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=rY.Strict,this.runConsumed=0}startEntity(J){this.decodeMode=J,this.state=_1.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(J,Y){switch(this.state){case _1.EntityStart:{if(J.charCodeAt(Y)===E1.NUM)return this.state=_1.NumericStart,this.consumed+=1,this.stateNumericStart(J,Y+1);return this.state=_1.NamedEntity,this.stateNamedEntity(J,Y)}case _1.NumericStart:return this.stateNumericStart(J,Y);case _1.NumericDecimal:return this.stateNumericDecimal(J,Y);case _1.NumericHex:return this.stateNumericHex(J,Y);case _1.NamedEntity:return this.stateNamedEntity(J,Y)}}stateNumericStart(J,Y){if(Y>=J.length)return-1;if((J.charCodeAt(Y)|UK)===E1.LOWER_X)return this.state=_1.NumericHex,this.consumed+=1,this.stateNumericHex(J,Y+1);return this.state=_1.NumericDecimal,this.stateNumericDecimal(J,Y)}stateNumericHex(J,Y){while(Y<J.length){let Z=J.charCodeAt(Y);if(RH(Z)||xg(Z)){let X=Z<=E1.NINE?Z-E1.ZERO:(Z|UK)-E1.LOWER_A+10;this.result=this.result*16+X,this.consumed++,Y++}else return this.emitNumericEntity(Z,3)}return-1}stateNumericDecimal(J,Y){while(Y<J.length){let Z=J.charCodeAt(Y);if(RH(Z))this.result=this.result*10+(Z-E1.ZERO),this.consumed++,Y++;else return this.emitNumericEntity(Z,2)}return-1}emitNumericEntity(J,Y){var Z;if(this.consumed<=Y)return(Z=this.errors)===null||Z===void 0||Z.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(J===E1.SEMI)this.consumed+=1;else if(this.decodeMode===rY.Strict)return 0;if(this.emitCodePoint(BK(this.result),this.consumed),this.errors){if(J!==E1.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(J,Y){let{decodeTree:Z}=this,X=Z[this.treeIndex],G=(X&zJ.VALUE_LENGTH)>>14;while(Y<J.length){if(G===0&&(X&zJ.FLAG13)!==0){let f=(X&zJ.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let q=X&zJ.JUMP_TABLE;if(J.charCodeAt(Y)!==q)return this.result===0?0:this.emitNotTerminatedNamedEntity();Y++,this.excess++,this.runConsumed++}while(this.runConsumed<f){if(Y>=J.length)return-1;let q=this.runConsumed-1,B=Z[this.treeIndex+1+(q>>1)],j=q%2===0?B&255:B>>8&255;if(J.charCodeAt(Y)!==j)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();Y++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(f>>1),X=Z[this.treeIndex],G=(X&zJ.VALUE_LENGTH)>>14}if(Y>=J.length)break;let z=J.charCodeAt(Y);if(z===E1.SEMI&&G!==0&&(X&zJ.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.treeIndex=vg(Z,X,this.treeIndex+Math.max(1,G),z),this.treeIndex<0)return this.result===0||this.decodeMode===rY.Attribute&&(G===0||hg(z))?0:this.emitNotTerminatedNamedEntity();if(X=Z[this.treeIndex],G=(X&zJ.VALUE_LENGTH)>>14,G!==0){if(z===E1.SEMI)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.decodeMode!==rY.Strict&&(X&zJ.FLAG13)===0)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}Y++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var J;let{result:Y,decodeTree:Z}=this,X=(Z[Y]&zJ.VALUE_LENGTH)>>14;return this.emitNamedEntityData(Y,X,this.consumed),(J=this.errors)===null||J===void 0||J.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(J,Y,Z){let{decodeTree:X}=this;if(this.emitCodePoint(Y===1?X[J]&~(zJ.VALUE_LENGTH|zJ.FLAG13):X[J+1],Z),Y===3)this.emitCodePoint(X[J+2],Z);return Z}end(){var J;switch(this.state){case _1.NamedEntity:return this.result!==0&&(this.decodeMode!==rY.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case _1.NumericDecimal:return this.emitNumericEntity(0,2);case _1.NumericHex:return this.emitNumericEntity(0,3);case _1.NumericStart:return(J=this.errors)===null||J===void 0||J.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case _1.EntityStart:return 0}}}function Pg(J){let Y="",Z=new CH(J,(X)=>Y+=qK(X));return function(G,z){let f=0,q=0;while((q=G.indexOf("&",q))>=0){Y+=G.slice(f,q),Z.startEntity(z);let j=Z.write(G,q+1);if(j<0){f=q+Z.end();break}f=q+j,q=j===0?f+1:f}let B=Y+G.slice(f);return Y="",B}}function vg(J,Y,Z,X){let G=(Y&zJ.BRANCH_LENGTH)>>7,z=Y&zJ.JUMP_TABLE;if(G===0)return z!==0&&X===z?Z:-1;if(z){let j=X-z;return j<0||j>=G?-1:J[Z+j]-1}let f=G+1>>1,q=0,B=G-1;while(q<=B){let j=q+B>>>1,K=j>>1,U=J[Z+K]>>(j&1)*8&255;if(U<X)q=j+1;else if(U>X)B=j-1;else return J[Z+f+j]}return-1}function UX(J,Y=rY.Legacy){return mg(J,Y)}var E1,UK=32,_1,rY,mg;var LK=S(()=>{jK();VK();KK();(function(J){J[J.NUM=35]="NUM",J[J.SEMI=59]="SEMI",J[J.EQUALS=61]="EQUALS",J[J.ZERO=48]="ZERO",J[J.NINE=57]="NINE",J[J.LOWER_A=97]="LOWER_A",J[J.LOWER_F=102]="LOWER_F",J[J.LOWER_X=120]="LOWER_X",J[J.LOWER_Z=122]="LOWER_Z",J[J.UPPER_A=65]="UPPER_A",J[J.UPPER_F=70]="UPPER_F",J[J.UPPER_Z=90]="UPPER_Z"})(E1||(E1={}));(function(J){J[J.EntityStart=0]="EntityStart",J[J.NumericStart=1]="NumericStart",J[J.NumericDecimal=2]="NumericDecimal",J[J.NumericHex=3]="NumericHex",J[J.NamedEntity=4]="NamedEntity"})(_1||(_1={}));(function(J){J[J.Legacy=0]="Legacy",J[J.Strict=1]="Strict",J[J.Attribute=2]="Attribute"})(rY||(rY={}));mg=Pg(WK)});var DK,MK;var OK=S(()=>{LK();(function(J){J[J.XML=0]="XML",J[J.HTML=1]="HTML"})(DK||(DK={}));(function(J){J[J.UTF8=0]="UTF8",J[J.ASCII=1]="ASCII",J[J.Extensive=2]="Extensive",J[J.Attribute=3]="Attribute",J[J.Text=4]="Text"})(MK||(MK={}))});import{CliRenderer as dg,createCliRenderer as ng,engine as ig}from"@opentui/core";import{createTestRenderer as Tv}from"@opentui/core/testing";import{ASCIIFontRenderable as lg,BoxRenderable as $g,CodeRenderable as ag,DiffRenderable as pg,InputRenderable as _g,LineNumberRenderable as rg,MarkdownRenderable as og,ScrollBoxRenderable as sg,SelectRenderable as tg,TabSelectRenderable as eg,TextareaRenderable as Jy,TextAttributes as gH,TextNodeRenderable as Yy,TextRenderable as Zy}from"@opentui/core";import{engine as xv,Timeline as wv}from"@opentui/core";import{BaseRenderable as SK,createTextAttributes as Gy,InputRenderable as yH,InputRenderableEvents as Kz,isTextNodeRenderable as IH,parseColor as AK,Renderable as zy,RootTextNodeRenderable as Qy,ScrollBoxRenderable as fy,SelectRenderable as RK,SelectRenderableEvents as SH,TabSelectRenderable as CK,TabSelectRenderableEvents as kH,TextNodeRenderable as qy,TextRenderable as kK}from"@opentui/core";import{BaseRenderable as Dy,isTextNodeRenderable as My,TextNodeRenderable as Fy,TextRenderable as Oy,Yoga as yK}from"@opentui/core";import{BoxRenderable as $v,RootRenderable as av}from"@opentui/core";import{TimeToFirstDrawRenderable as gy}from"@opentui/core";import{createSlotRegistry as rv}from"@opentui/core";function jy({createElement:J,createTextNode:Y,createSlotNode:Z,isTextNode:X,replaceText:G,insertNode:z,removeNode:f,setProperty:q,getParentNode:B,getFirstChild:j,getNextSibling:K}){function H(g,k,C,N){if(C!==void 0&&!N)N=[];if(typeof k!=="function")return U(g,k,N,C);MY((_)=>U(g,k(),_,C),N)}function U(g,k,C,N,_){while(typeof C==="function")C=C();if(k===C)return C;let X0=typeof k,s=N!==void 0;if(X0==="string"||X0==="number"){if(X0==="number")k=k.toString();if(s){let Y0=C[0];if(Y0&&X(Y0))G(Y0,k);else Y0=Y(k);C=D(g,C,N,Y0)}else if(C!==""&&typeof C==="string")G(j(g),C=k);else D(g,C,N,Y(k)),C=k}else if(k==null||X0==="boolean")C=D(g,C,N);else if(X0==="function")return MY(()=>{let Y0=k();while(typeof Y0==="function")Y0=Y0();C=U(g,Y0,C,N)}),()=>C;else if(Array.isArray(k)){let Y0=[];if(L(Y0,k,_))return MY(()=>C=U(g,Y0,C,N,!0)),()=>C;if(Y0.length===0){let u=D(g,C,N);if(s)return C=u}else if(Array.isArray(C))if(C.length===0)A(g,Y0,N);else F(g,C,Y0);else if(C==null||C==="")A(g,Y0);else F(g,s&&C||[j(g)],Y0);C=Y0}else{if(Array.isArray(C)){if(s)return C=D(g,C,N,k);D(g,C,null,k)}else if(C==null||C===""||!j(g))z(g,k);else R(g,k,j(g));C=k}return C}function L(g,k,C){let N=!1;for(let _=0,X0=k.length;_<X0;_++){let s=k[_],Y0;if(s==null||s===!0||s===!1);else if(Array.isArray(s))N=L(g,s)||N;else if((Y0=typeof s)==="string"||Y0==="number")g.push(Y(s));else if(Y0==="function")if(C){while(typeof s==="function")s=s();N=L(g,Array.isArray(s)?s:[s])||N}else g.push(s),N=!0;else g.push(s)}return N}function F(g,k,C){let N=C.length,_=k.length,X0=N,s=0,Y0=0,u=K(k[_-1]),Q0=null;while(s<_||Y0<X0){if(k[s]===C[Y0]){s++,Y0++;continue}while(k[_-1]===C[X0-1])_--,X0--;if(_===s){let t=X0<N?Y0?K(C[Y0-1]):C[X0-Y0]:u;while(Y0<X0)z(g,C[Y0++],t)}else if(X0===Y0)while(s<_){if(!Q0||!Q0.has(k[s]))f(g,k[s]);s++}else if(k[s]===C[X0-1]&&C[Y0]===k[_-1]){let t=K(k[--_]);z(g,C[Y0++],K(k[s++])),z(g,C[--X0],t),k[_]=C[X0]}else{if(!Q0){Q0=new Map;let j0=Y0;while(j0<X0)Q0.set(C[j0],j0++)}let t=Q0.get(k[s]);if(t!=null)if(Y0<t&&t<X0){let j0=s,S0=1,$;while(++j0<_&&j0<X0){if(($=Q0.get(k[j0]))==null||$!==t+S0)break;S0++}if(S0>t-Y0){let P=k[s];while(Y0<t)z(g,C[Y0++],P)}else R(g,C[Y0++],k[s++])}else s++;else f(g,k[s++])}}}function D(g,k,C,N){if(C===void 0){let X0;while(X0=j(g))f(g,X0);return N&&z(g,N),N??""}let _=N||Z();if(k.length){let X0=!1;for(let s=k.length-1;s>=0;s--){let Y0=k[s];if(_!==Y0){let u=B(Y0)===g;if(!X0&&!s)u?R(g,_,Y0):z(g,_,C);else u&&f(g,Y0)}else X0=!0}}else z(g,_,C);return[_]}function A(g,k,C){for(let N=0,_=k.length;N<_;N++)z(g,k[N],C)}function R(g,k,C){z(g,k,C),f(g,C)}function l(g,k,C={},N){if(k||(k={}),!N)MY(()=>C.children=U(g,k.children,C.children));return MY(()=>k.ref&&k.ref(g)),MY(()=>{for(let _ in k){if(_==="children"||_==="ref")continue;let X0=k[_];if(X0===C[_])continue;q(g,_,X0,C[_]),C[_]=X0}}),C}return{render(g,k){let C;return dZ((N)=>{C=N,H(k,g())}),C},insert:H,spread(g,k,C){if(typeof k==="function")MY((N)=>l(g,k(),N,C));else l(g,k,void 0,C)},createElement:J,createTextNode:Y,insertNode:z,setProp(g,k,C,N){return q(g,k,C,N),C},mergeProps:QQ,effect:MY,memo:By,createComponent:i9,use(g,k,C){return l1(()=>g(k,C))}}}function Hy(J){let Y=jy(J);return Y.mergeProps=QQ,Y}function uH(J){if(!tf.has(J))tf.set(J,0);let Y=tf.get(J)+1;return tf.set(J,Y),`${J}-${Y}`}function Wy(J,Y,Z){if(r1("Inserting node:",$1(Y),"into parent:",$1(J),"with anchor:",$1(Z),Y instanceof LG),Y instanceof Uz)Y.parent=J,Y=Y.getSlotChild(J);if(Z&&Z instanceof Uz)Z=Z.getSlotChild(J);if(IH(Y)){if(!(J instanceof kK)&&!IH(J))throw Error(`Orphan text error: "${Y.toChunks().map((z)=>z.text).join("")}" must have a <text> as a parent: ${J.id} above ${Y.id}`)}if(!(J instanceof SK))throw console.error("[INSERT]","Tried to mount a non base renderable"),Error("Tried to mount a non base renderable");if(!Z){J.add(Y);return}let X=NH(J),G=X.findIndex((z)=>z.id===Z.id);if(G===-1)r1("[INSERT]","Could not find anchor",$1(J),$1(Z),"[children]",...X.map((z)=>z.id));J.add(Y,G)}function Vy(J,Y){if(r1("Removing node:",$1(Y),"from parent:",$1(J)),Y instanceof Uz)Y.parent=null,Y=Y.getSlotChild(J);J.remove(Y.id),process.nextTick(()=>{if(Y instanceof SK&&!Y.parent){Y.destroyRecursively();return}})}function Ky(J){r1("Creating text node:",J);let Y=uH("text-node");if(typeof J==="number")J=J.toString();return LG.fromString(UX(J),{id:Y})}function Uy(){let J=uH("slot-node");return r1("Creating slot node",J),new Uz(J)}function gK(J){r1("Getting parent of node:",$1(J));let Y=J.parent??void 0;if(Y instanceof Qy)Y=Y.textParent??void 0;let Z=Y?.parent?.parent?.parent;if(Z instanceof fy&&Z.content===Y)Y=Z;return Y}function Ry(J){Object.assign(xK,J)}function Cy(){return xK}var EH,e1=()=>{let J=NJ(EH);if(!J)throw Error("No renderer found");return J},Xy=(J)=>{let Y=e1();s1(()=>{Y.on("resize",J)}),P1(()=>{Y.off("resize",J)})},IY=()=>{let J=e1(),[Y,Z]=p({width:J.width,height:J.height});return Xy((G,z)=>{Z({width:G,height:z})}),Y},By=(J)=>U0(()=>J()),tf,r1=(...J)=>{if(process.env.DEBUG)console.log("[Reconciler]",...J)},LG,$1=(J)=>{if(!J)return;return J.id},NH=(J)=>{let Y;if(J instanceof kK)Y=J.getTextChildren();else Y=J.getChildren();return Y},Ly,x,Y1,I,V,T,W,M,nv,Q,IK,kZ,xH,NK,bK,Uz,Lz,ef,bH,TH,TK,EK,uK,Ay,xK,yy=(J,Y)=>{let Z,X=!1,G=!1,z=!0,f=!1,q=J.destroy.bind(J),B=()=>{if(G)return;if(!Z){X=!0;return}G=!0,Z()};J.once("destroy",B),J.destroy=()=>{if(z){f=!0;return}q()};try{Z=Ly(()=>I(EH.Provider,{get value(){return J},get children(){return I(Y,{})}}),J.root)}finally{z=!1,J.destroy=q}if(X)B();if(f)q()},wK=async(J,Y={})=>{let Z=Y instanceof dg?Y:await ng({...Y,onDestroy:()=>{Y.onDestroy?.()}});ig.attach(Z),yy(Z,J)};var w=S(()=>{B1();OK();B1();B1();B1();EH=FY();tf=new Map;LG=class LG extends qy{static fromString(J,Y={}){let Z=new LG(Y);return Z.add(J),Z}};({render:Ly,effect:x,memo:Y1,createComponent:I,createElement:V,createTextNode:T,insertNode:W,insert:M,spread:nv,setProp:Q,mergeProps:IK,use:kZ}=Hy({createElement(J){r1("Creating element:",J);let Y=uH(J),Z=NJ(EH);if(!Z)throw Error("No renderer found");let X=Cy();if(!X[J])throw Error(`[Reconciler] Unknown component type: ${J}`);let G=new X[J](Z,{id:Y});return r1("Element created with id:",Y),G},createTextNode:Ky,createSlotNode:Uy,replaceText(J,Y){if(r1("Replacing text:",Y,"in node:",$1(J)),!(J instanceof LG))return;J.replace(UX(Y),0)},setProperty(J,Y,Z,X){if(Y.startsWith("on:")){let G=Y.slice(3);if(Z)J.on(G,Z);if(X)J.off(G,X);return}if(IH(J)){if(Y==="href"){J.link={url:Z};return}if(Y==="style"){J.attributes|=Gy(Z),J.fg=Z.fg?AK(Z.fg):J.fg,J.bg=Z.bg?AK(Z.bg):J.bg;return}return}switch(Y){case"id":r1("Id mapped",J.id,"=",Z),J[Y]=Z;break;case"focused":if(!(J instanceof zy))return;if(Z)J.focus();else J.blur();break;case"onChange":let G=void 0;if(J instanceof RK)G=SH.SELECTION_CHANGED;else if(J instanceof CK)G=kH.SELECTION_CHANGED;else if(J instanceof yH)G=Kz.CHANGE;if(!G)break;if(Z)J.on(G,Z);if(X)J.off(G,X);break;case"onInput":if(J instanceof yH){if(Z)J.on(Kz.INPUT,Z);if(X)J.off(Kz.INPUT,X)}break;case"onSubmit":if(J instanceof yH){if(Z)J.on(Kz.ENTER,Z);if(X)J.off(Kz.ENTER,X)}else J[Y]=Z;break;case"onSelect":if(J instanceof RK){if(Z)J.on(SH.ITEM_SELECTED,Z);if(X)J.off(SH.ITEM_SELECTED,X)}else if(J instanceof CK){if(Z)J.on(kH.ITEM_SELECTED,Z);if(X)J.off(kH.ITEM_SELECTED,X)}break;case"style":for(let z in Z){let f=Z[z];if(X!==void 0&&f===X[z])continue;J[z]=f}break;case"text":case"content":{let z=typeof Z==="string"?Z:Array.isArray(Z)?Z.join(""):`${Z}`;J[Y]=UX(z);break}default:J[Y]=Z}},isTextNode(J){return J instanceof LG},insertNode:Wy,removeNode:Vy,getParentNode:gK,getFirstChild(J){r1("Getting first child of node:",$1(J));let Y=NH(J)[0];if(!Y){r1("No first child found for node:",$1(J));return}return r1("First child found:",$1(Y),"for node:",$1(J)),Y},getNextSibling(J){r1("Getting next sibling of node:",$1(J));let Y=gK(J);if(!Y){r1("No parent found for node:",$1(J));return}let Z=NH(Y),X=Z.indexOf(J);if(X===-1||X===Z.length-1){r1("No next sibling found for node:",$1(J));return}let G=Z[X+1];if(!G){r1("Next sibling is null for node:",$1(J));return}return r1("Next sibling found:",$1(G),"for node:",$1(J)),G}}));xH=class xH extends Dy{constructor(J){super({id:J})}add(J,Y){throw Error("Can't add children on an Slot renderable")}getChildren(){return[]}remove(J){}insertBefore(J,Y){throw Error("Can't add children on an Slot renderable")}getRenderable(J){return}getChildrenCount(){return 0}requestRender(){}findDescendantById(J){return}};NK=class NK extends Fy{slotParent;destroyed=!1;constructor(J,Y){super({id:J});this._visible=!1,this.slotParent=Y}destroy(){if(this.destroyed)return;this.destroyed=!0,this.slotParent?.destroy(),super.destroy()}};bK=class bK extends xH{yogaNode;slotParent;destroyed=!1;constructor(J,Y){super(J);this._visible=!1,this.slotParent=Y,this.yogaNode=yK.default.Node.create(),this.yogaNode.setDisplay(yK.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};Uz=class Uz extends xH{layoutNode;textNode;destroyed=!1;constructor(J){super(J);this._visible=!1}getSlotChild(J){if(My(J)||J instanceof Oy){if(!this.textNode)this.textNode=new NK(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new bK(`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()}};Lz=class Lz extends Yy{_ctx;constructor(J,Y){super(Y);this._ctx=J}};ef=class ef extends Lz{constructor(J,Y){super(null,J);if(Y==="b"||Y==="strong")this.attributes=(this.attributes||0)|gH.BOLD;else if(Y==="i"||Y==="em")this.attributes=(this.attributes||0)|gH.ITALIC;else if(Y==="u")this.attributes=(this.attributes||0)|gH.UNDERLINE}};bH=class bH extends ef{constructor(J){super(J,"b")}};TH=class TH extends ef{constructor(J){super(J,"i")}};TK=class TK extends ef{constructor(J){super(J,"u")}};EK=class EK extends Lz{constructor(J,Y){super(null,Y);this.add()}add(){return super.add(`
221
+ `)}};uK=class uK extends Lz{constructor(J,Y){let Z={...Y,link:{url:Y.href}};super(null,Z)}};Ay={box:$g,text:Zy,input:_g,select:tg,textarea:Jy,ascii_font:lg,tab_select:eg,scrollbox:sg,code:ag,diff:pg,line_number:rg,markdown:og,span:Lz,strong:bH,b:bH,em:TH,i:TH,u:TK,br:EK,a:uK},xK={...Ay};Ry({time_to_first_draw:gy})});function Sy(J){let Y=J?.changes;if(!Y||typeof Y!=="object"||Array.isArray(Y))return null;let Z=new Map;for(let[X,G]of Object.entries(Y)){let z=G;if(typeof z?.added!=="number"||typeof z.deleted!=="number")return null;Z.set(X,{added:z.added,deleted:z.deleted})}return Z}function ky(J,Y){if(J.size!==Y.size)return!1;for(let[Z,X]of J){let G=Y.get(Z);if(!G||!kY(X,G))return!1}return!0}class QJ{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(J,Y={}){this.client=J;let[Z,X]=p([]),[G,z]=p(null),[f,q]=p(null),[B,j]=p(null),[K,H]=p(new Map),[U,L]=p(new Map),[F,D]=p(null),[A,R]=p(null),[l,g]=p(null),[k,C]=p("online");this.tasksAcc=Z,this.setTasks=(N)=>X(()=>N),this.activeTaskAcc=G,this.setActiveTaskSig=(N)=>z(()=>N),this.updateAcc=f,this.setUpdateSig=(N)=>q(()=>N),this.daemonVersionAcc=B,this.setDaemonVersionSig=(N)=>j(()=>N),this.engineStateAcc=K,this.setEngineStateSig=(N)=>H(()=>N),this.taskJobsAcc=U,this.setTaskJobsSig=(N)=>L(()=>N),this.worktreeChangesAcc=F,this.setWorktreeChangesSig=(N)=>D(()=>N),this.uiPrefsAcc=A,this.setUiPrefsSig=(N)=>R(()=>N),this.keybindingsRevAcc=l,this.setKeybindingsRevSig=(N)=>g(()=>N),this.connectionStateAcc=k,this.setConnectionState=(N)=>C(()=>N),this.ensureReachable=Y.ensureReachable??jG,this.role=Y.role??"pane",this.channels=Y.channels,this.subscribesTasks=!Y.channels||Y.channels.includes("task.snapshot"),this.client.on("*",(N)=>this.handleEvent(N.name,N.payload)),this.client.onLifecycle("close",()=>{if(this.setConnectionState("disconnected"),this.role==="pane")vY("orch","daemon socket closed \u2014 starting non-spawning reconnect loop"),this.reconnectLoop()})}async reconnectLoop(){if(this.reconnecting)return;this.reconnecting=!0;let J=500,Y=0;while(!this.client.isDisposed){if(await new Promise((Z)=>setTimeout(Z,J)),this.client.isDisposed)break;Y++;try{await this.init(),vY("orch",`reconnected and re-subscribed after ${Y} attempt(s) \u2014 task list re-synced`),this.reconnecting=!1;return}catch(Z){if(Y===1||Y%10===0)zZ("orch-reconnect",Z);J=Math.min(J*2,3000)}}this.reconnecting=!1}async init(){let J=await this.client.request("hello",{protocolVersion:hJ,minProtocolVersion:GZ}),Y=typeof J.protocolVersion==="number"?J.protocolVersion:hJ,Z=typeof J.minProtocolVersion==="number"?J.minProtocolVersion:Y;if(!jQ({localVersion:hJ,localMin:GZ,remoteVersion:Y,remoteMin:Z}))throw Error(`kobe daemon is protocol v${Y} (min v${Z}); this client is v${hJ} (min v${GZ}). Restart the daemon (\`kobe daemon restart\`) or upgrade kobe.`);if(this.setDaemonVersionSig(typeof J.kobeVersion==="string"?J.kobeVersion:null),J.tasks&&this.subscribesTasks)this.setTasks(J.tasks.map(Dz));if(await this.client.subscribe({role:this.role,channels:this.channels}),J.capabilities?.includes("worktree.changes")){if(this.worktreeChangesAcc()===null)this.setWorktreeChangesSig(new Map)}else this.setWorktreeChangesSig(null);this.setConnectionState("online"),vY("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()=>J7(this.daemonVersionAcc()??void 0,i0)}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(J){return this.tasksAcc().find((Y)=>Y.id===J)}subscribeTasks(J){try{J(this.listTasks())}catch(Z){console.error("[kobe RemoteOrchestrator] task listener threw on subscribe:",Z)}let Y=!0;return dZ((Z)=>{return s0(()=>{let X=this.tasksAcc();if(Y){Y=!1;return}try{J(X)}catch(G){console.error("[kobe RemoteOrchestrator] task listener threw:",G)}}),Z})}async createTask(J){let{modelEffort:Y,...Z}=J,X=await this.client.request("task.create",{...Z,effort:Y});return Dz(X.task)}async ensureMainTask(J){let Y=await this.client.request("task.ensureMain",{repo:J});return Dz(Y.task)}async ensureWorktree(J){return(await this.client.request("task.ensureWorktree",{taskId:String(J)})).worktreePath}async setTitle(J,Y){await this.client.request("task.rename",{taskId:String(J),title:Y})}async setBranch(J,Y){await this.client.request("task.setBranch",{taskId:String(J),branch:Y})}async setVendor(J,Y){await this.client.request("task.setVendor",{taskId:String(J),vendor:Y})}async setPinned(J,Y){await this.client.request("task.pin",{taskId:String(J),pinned:Y})}async moveTask(J,Y){await this.client.request("task.move",{taskId:String(J),direction:Y<0?"up":"down"})}async setArchived(J,Y){await this.client.request("task.archive",{taskId:String(J),archived:Y})}async setStatus(J,Y){await this.client.request("task.status",{taskId:String(J),status:Y})}async deleteTask(J,Y){await this.client.request("task.delete",{taskId:String(J),force:Y?.force})}async discoverAdoptableWorktrees(J){return(await this.client.request("worktree.discoverAdoptable",{repo:J})).worktrees}async adoptWorktree(J){let Y=await this.client.request("worktree.adopt",J);return Dz(Y.task)}async setActiveTask(J){await this.client.request("task.setActive",{taskId:J===null?null:String(J)})}handleEvent(J,Y){if(J==="task.snapshot"){let Z=Y?.tasks;if(Array.isArray(Z))this.setTasks(Z.map(Dz)),this.pruneEngineState(Z),this.pruneTaskJobs(Z);return}if(J==="active-task"){let Z=Y?.taskId;this.setActiveTaskSig(typeof Z==="string"?Z:null);return}if(J==="update"){let Z=Y?.info;this.setUpdateSig(Z??null);return}if(J==="engine-state"){let Z=Y;if(typeof Z?.taskId!=="string"||typeof Z.state!=="string")return;let X=new Map(this.engineStateAcc());if(Z.state==="idle")X.delete(Z.taskId);else X.set(Z.taskId,{state:Z.state,detail:Z.detail,at:typeof Z.at==="number"?Z.at:0});this.setEngineStateSig(X);return}if(J==="task.jobs"){let Z=Y;if(typeof Z?.taskId!=="string"||Z.kind!=="ensureWorktree")return;let X=this.taskJobsAcc();if(Z.phase==="running"){let G=new Map(X);G.set(Z.taskId,{kind:Z.kind}),this.setTaskJobsSig(G);return}if((Z.phase==="done"||Z.phase==="error")&&X.has(Z.taskId)){let G=new Map(X);G.delete(Z.taskId),this.setTaskJobsSig(G)}return}if(J==="worktree.changes"){let Z=Sy(Y);if(!Z)return;let X=this.worktreeChangesAcc();if(X&&ky(X,Z))return;this.setWorktreeChangesSig(Z);return}if(J==="ui-prefs"){let Z=Y;if(typeof Z?.theme!=="string")return;this.setUiPrefsSig({theme:Z.theme,transparentBackground:Z.transparentBackground===!0,focusAccent:typeof Z.focusAccent==="string"?Z.focusAccent:null,sortMode:Z.sortMode==="recent"?"recent":"default",keysCollapsed:Z.keysCollapsed===!0,projectFilter:typeof Z.projectFilter==="string"&&Z.projectFilter.length>0?Z.projectFilter:null});return}if(J==="keybindings"){let Z=Y;if(typeof Z?.rev!=="number")return;this.setKeybindingsRevSig(Z.rev);return}}pruneEngineState(J){let Y=this.engineStateAcc();if(Y.size===0)return;let Z=new Set(J.map((G)=>G.id)),X=null;for(let G of Y.keys()){if(Z.has(G))continue;if(!X)X=new Map(Y);X.delete(G)}if(X)this.setEngineStateSig(X)}pruneTaskJobs(J){let Y=this.taskJobsAcc();if(Y.size===0)return;let Z=new Set(J.map((G)=>G.id)),X=null;for(let G of Y.keys()){if(Z.has(G))continue;if(!X)X=new Map(Y);X.delete(G)}if(X)this.setTaskJobsSig(X)}}function Dz(J){return{id:kG(J.id),title:J.title,repo:J.repo,branch:J.branch,worktreePath:J.worktreePath,kind:J.kind,status:J.status,archived:J.archived,pinned:J.pinned,vendor:J.vendor,prStatus:J.prStatus,modelEffort:J.modelEffort,createdAt:J.createdAt,updatedAt:J.updatedAt}}var IZ=S(()=>{$Z();CJ();iZ();B1();fG();SJ();jJ()});function vK(J){let Y=J[sJ];if(!Y){if(Object.defineProperty(J,sJ,{value:Y=new Proxy(J,by)}),!Array.isArray(J)){let Z=Object.keys(J),X=Object.getOwnPropertyDescriptors(J),G=Object.getPrototypeOf(J),z=G!==null&&J!==null&&typeof J==="object"&&!Array.isArray(J)&&G!==Object.prototype;if(z){let f=Object.getOwnPropertyDescriptors(G);Z.push(...Object.keys(f)),Object.assign(X,f)}for(let f=0,q=Z.length;f<q;f++){let B=Z[f];if(z&&B==="constructor")continue;if(X[B].get)Object.defineProperty(J,B,{configurable:!0,enumerable:X[B].enumerable,get:X[B].get.bind(Y)})}}}return Y}function Jq(J){let Y;return J!=null&&typeof J==="object"&&(J[sJ]||!(Y=Object.getPrototypeOf(J))||Y===Object.prototype||Array.isArray(J))}function Fz(J,Y=new Set){let Z,X,G,z;if(Z=J!=null&&J[wH])return Z;if(!Jq(J)||Y.has(J))return J;if(Array.isArray(J)){if(Object.isFrozen(J))J=J.slice(0);else Y.add(J);for(let f=0,q=J.length;f<q;f++)if(G=J[f],(X=Fz(G,Y))!==G)J[f]=X}else{if(Object.isFrozen(J))J=Object.assign({},J);else Y.add(J);let f=Object.keys(J),q=Object.getOwnPropertyDescriptors(J);for(let B=0,j=f.length;B<j;B++){if(z=f[B],q[z].get)continue;if(G=J[z],(X=Fz(G,Y))!==G)J[z]=X}}return J}function Yq(J,Y){let Z=J[Y];if(!Z)Object.defineProperty(J,Y,{value:Z=Object.create(null)});return Z}function Oz(J,Y,Z){if(J[Y])return J[Y];let[X,G]=p(Z,{equals:!1,internal:!0});return X.$=G,J[Y]=X}function Iy(J,Y){let Z=Reflect.getOwnPropertyDescriptor(J,Y);if(!Z||Z.get||!Z.configurable||Y===sJ||Y===DG)return Z;return delete Z.value,delete Z.writable,Z.get=()=>J[sJ][Y],Z}function mK(J){GQ()&&Oz(Yq(J,DG),PK)()}function Ny(J){return mK(J),Reflect.ownKeys(J)}function Zq(J,Y,Z,X=!1){if(Y==="__proto__"){console.warn('Refusing to set "__proto__" on a store.');return}if(!X&&J[Y]===Z)return;let G=J[Y],z=J.length;if(hK.onStoreNodeUpdate&&hK.onStoreNodeUpdate(J,Y,Z,G),Z===void 0){if(delete J[Y],J[oY]&&J[oY][Y]&&G!==void 0)J[oY][Y].$()}else if(J[Y]=Z,J[oY]&&J[oY][Y]&&G===void 0)J[oY][Y].$();let f=Yq(J,DG),q;if(q=Oz(f,Y,G))q.$(()=>Z);if(Array.isArray(J)&&J.length!==z){for(let B=J.length;B<z;B++)(q=f[B])&&q.$();(q=Oz(f,"length",z))&&q.$(J.length)}(q=f[PK])&&q.$()}function cK(J,Y){let Z=Object.keys(Y);for(let X=0;X<Z.length;X+=1){let G=Z[X];if(dK(G))continue;Zq(J,G,Y[G])}}function dK(J){return J==="__proto__"||J==="constructor"||J==="prototype"}function Ty(J,Y){if(typeof Y==="function")Y=Y(J);if(Y=Fz(Y),Array.isArray(Y)){if(J===Y)return;let Z=0,X=Y.length;for(;Z<X;Z++){let G=Y[Z];if(J[Z]!==G)Zq(J,Z,G)}Zq(J,"length",X)}else cK(J,Y)}function Mz(J,Y,Z=[]){let X,G=J;if(Y.length>1){X=Y.shift();let f=typeof X,q=Array.isArray(J);if(f==="string"&&(X==="__proto__"||Y.length>1&&dK(X))){console.warn(`Refusing to traverse unsafe key "${X}" on a store.`);return}if(Array.isArray(X)){for(let B=0;B<X.length;B++)Mz(J,[X[B]].concat(Y),Z);return}else if(q&&f==="function"){for(let B=0;B<J.length;B++)if(X(J[B],B))Mz(J,[B].concat(Y),Z);return}else if(q&&f==="object"){let{from:B=0,to:j=J.length-1,by:K=1}=X;for(let H=B;H<=j;H+=K)Mz(J,[H].concat(Y),Z);return}else if(Y.length>1){Mz(J[X],Y,[X].concat(Z));return}G=J[X],Z=[X].concat(Z)}let z=Y[0];if(typeof z==="function"){if(z=z(G,Z),z===G)return}if(X===void 0&&z==null)return;if(z=Fz(z),X===void 0||Jq(G)&&Jq(z)&&!Array.isArray(z))cK(G,z);else Zq(J,X,z)}function NZ(...[J,Y]){let Z=Fz(J||{}),X=Array.isArray(Z);if(typeof Z!=="object"&&typeof Z!=="function")throw Error(`Unexpected type ${typeof Z} received when initializing 'createStore'. Expected an object.`);let G=vK(Z);l9.registerGraph({value:Z,name:Y&&Y.name});function z(...f){XQ(()=>{X&&f.length===1?Ty(Z,f[0]):Mz(Z,f)})}return[G,z]}var wH,DG,oY,PK,hK,by,Qm;var Az=S(()=>{B1();wH=Symbol("store-raw"),DG=Symbol("store-node"),oY=Symbol("store-has"),PK=Symbol("store-self"),hK={onStoreNodeUpdate:null};by={get(J,Y,Z){if(Y===wH)return J;if(Y===sJ)return Z;if(Y===JQ)return mK(J),Z;let X=Yq(J,DG),G=X[Y],z=G?G():J[Y];if(Y===DG||Y===oY||Y==="__proto__")return z;if(!G){let f=Object.getOwnPropertyDescriptor(J,Y);if(GQ()&&(typeof z!=="function"||J.hasOwnProperty(Y))&&!(f&&f.get))z=Oz(X,Y,z)()}return Jq(z)?vK(z):z},has(J,Y){if(Y===wH||Y===sJ||Y===JQ||Y===DG||Y===oY||Y==="__proto__")return!0;return GQ()&&Oz(Yq(J,oY),Y)(),Y in J},set(){return console.warn("Cannot mutate a Store directly"),!0},deleteProperty(){return console.warn("Cannot mutate a Store directly"),!0},ownKeys:Ny,getOwnPropertyDescriptor:Iy};Qm=Symbol("store-root")});function Xq(J){let Y=FY();return{provider:(Z)=>{let X=J.init(Z);return I(z0,{get when(){return X.ready===void 0||X.ready===!0},get children(){return I(Y.Provider,{value:X,get children(){return Z.children}})}})},use(){let Z=NJ(Y);if(!Z)throw Error(`${J.name} context must be used within a context provider`);return Z}}}var hH=S(()=>{w();w();B1()});import{RGBA as LX}from"@opentui/core";function uy(){return Object.keys(JJ.themes)}function Rz(J){return Boolean(JJ.themes[J])}function vH(J,Y){if(!J)return!1;if(!Y||typeof Y!=="object"||!Y.theme)return!1;return DX("themes",{...JJ.themes,[J]:Y}),!0}function PH(J,Y="dark"){let Z=J.defs??{};function X(B,j=[]){if(typeof B==="string"){if(B==="transparent"||B==="none")return LX.fromInts(0,0,0,0);if(B.startsWith("#"))return LX.fromHex(B);if(j.includes(B))return LX.fromInts(0,0,0);let K=Z[B]??J.theme[B];if(K===void 0)return LX.fromInts(0,0,0);return X(K,[...j,B])}return X(B[Y],j)}let G={};for(let[B,j]of Object.entries(J.theme))G[B]=X(j);let z=G.text??LX.fromHex("#ffffff"),f=G.background??LX.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:f,backgroundPanel:G.backgroundPanel??f,backgroundElement:G.backgroundElement??f,backgroundMenu:G.backgroundMenu??G.backgroundElement??f,backgroundDialog:G.backgroundDialog??G.backgroundPanel??f,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??f,diffRemovedBg:G.diffRemovedBg??f,selectedListItemText:G.selectedListItemText??f},...G}}var Ey,MX,JJ,DX,v0,nK;var u1=S(()=>{w();B1();Az();hH();tQ();eQ();Jf();Yf();Zf();Xf();Gf();Ey={claude:$X,conductor:aX,nord:_X,opencode:rX,dracula:pX,tokyonight:sX,"osaka-jade":oX},MX=["primary","success","info"],[JJ,DX]=NZ({themes:{...Ey},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:v0,provider:nK}=Xq({name:"Theme",init:(J)=>{if(J.mode)DX("mode",J.mode);if(J.theme&&Rz(J.theme))DX("active",J.theme);let Y=e1(),Z=U0(()=>{let G=JJ.themes[JJ.active];if(G)return PH(G,JJ.mode);let z=JJ.themes.claude??JJ.themes.opencode??Object.values(JJ.themes)[0];if(!z)return PH({theme:{background:"#000000",text:"#ffffff"}},JJ.mode);return PH(z,JJ.mode)}),X=U0(()=>{let G=Z(),z=G[JJ.focusAccent]??G.primary,f={...G,focusAccent:z};if(!JJ.transparentBackground)return f;let q=LX.fromInts(0,0,0,0);return{...f,background:q,backgroundPanel:q}});return s0(()=>{Y?.setBackgroundColor(X().background)}),{theme:new Proxy({},{get(G,z){let f=X();return f[z]??f.text}}),get selected(){return JJ.active},get transparentBackground(){return JJ.transparentBackground},get focusAccent(){return JJ.focusAccent},mode(){return JJ.mode},set(G){if(!Rz(G))return!1;return DX("active",G),!0},setMode(G){DX("mode",G)},setTransparentBackground(G){DX("transparentBackground",G)},setFocusAccent(G){DX("focusAccent",G)},all(){return uy()},has(G){return Rz(G)}}}}))});function xy(J){let Y=[],Z=J.name;if(Z)Y.push(Z);if(Z==="return")Y.push("enter");if(Z==="enter")Y.push("return");let X=[];if(J.ctrl)X.push("ctrl");if(J.meta)X.push("cmd");if(J.option)X.push("alt");if(J.shift&&Z&&Z.length>1)X.push("shift");if(X.length===0)return Y;let G=`${X.join("+")}+`;return Y.map((z)=>G+z)}function mH(J,Y){if(Y.defaultPrevented)return!1;let Z=xy(Y);for(let X=J.length-1;X>=0;X--){let G=J[X];if(!G)continue;let z=G.config();if(z.enabled===!1)continue;let f=z.bindings.find((q)=>Z.includes(q.key));if(f)return f.cmd(Y,f.slot),Y.preventDefault(),!0}return!1}function hy(){if(cH)return;let J=e1();if(!J)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");cH=J.keyInput,iK=(Y)=>{mH(Gq,Y)},cH.on("keypress",iK)}function L1(J){hy();let Y=wy++,Z={config:J,id:Y};s0(()=>{J()}),Gq.push(Z),P1(()=>{let X=Gq.findIndex((G)=>G.id===Y);if(X>=0)Gq.splice(X,1)})}var wy=1,Gq,cH=null,iK=null;var gJ=S(()=>{w();B1();Gq=[]});import{RGBA as lK}from"@opentui/core";function my(J){let Y=IY(),Z=v0(),{theme:X}=Z,G=e1(),z=!1,f=()=>{if(J.size==="xlarge")return 140;if(J.size==="large")return 110;if(J.size==="small")return 50;return 80},q=2,B=()=>Math.max(8,Y().height-q*2);return(()=>{var j=V("box"),K=V("box");return W(j,K),Q(j,"onMouseDown",()=>{z=!!G?.getSelection()}),Q(j,"onMouseUp",()=>{if(z){z=!1;return}J.onClose?.()}),Q(j,"alignItems","center"),Q(j,"justifyContent","center"),Q(j,"position","absolute"),Q(j,"zIndex",3000),Q(j,"left",0),Q(j,"top",0),Q(K,"onMouseUp",(H)=>{z=!1,H.stopPropagation()}),Q(K,"flexShrink",1),Q(K,"flexGrow",0),Q(K,"paddingTop",1),M(K,()=>J.children),x((H)=>{var U=Y().width,L=Y().height,F=Z.transparentBackground?vy:Py,D=f(),A=Y().width-2,R=B(),l=X.backgroundDialog;return U!==H.e&&(H.e=Q(j,"width",U,H.e)),L!==H.t&&(H.t=Q(j,"height",L,H.t)),F!==H.a&&(H.a=Q(j,"backgroundColor",F,H.a)),D!==H.o&&(H.o=Q(K,"width",D,H.o)),A!==H.i&&(H.i=Q(K,"maxWidth",A,H.i)),R!==H.n&&(H.n=Q(K,"maxHeight",R,H.n)),l!==H.s&&(H.s=Q(K,"backgroundColor",l,H.s)),H},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),j})()}function cy(){let[J,Y]=NZ({stack:[],size:"medium"}),Z=e1(),X=null;function G(){setTimeout(()=>{if(!X)return;if(X.isDestroyed)return;function z(q){for(let B of q.getChildren()){if(B===X)return!0;if(z(B))return!0}return!1}let f=Z?.root;if(!f)return;if(!z(f))return;X.focus()},1)}return L1(()=>({enabled:J.stack.length>0&&!Z?.getSelection()?.getSelectedText(),bindings:[{key:"escape",cmd:()=>{if(Z?.getSelection())Z.clearSelection();J.stack.at(-1)?.onClose?.(),Y("stack",J.stack.slice(0,-1)),G()}},{key:"ctrl+c",cmd:()=>{if(Z?.getSelection())Z.clearSelection();J.stack.at(-1)?.onClose?.(),Y("stack",J.stack.slice(0,-1)),G()}}]})),{clear(){for(let z of J.stack)z.onClose?.();XQ(()=>{Y("size","medium"),Y("stack",[])}),G()},replace(z,f){if(J.stack.length===0)X=Z?.currentFocusedRenderable??null,X?.blur();for(let q of J.stack)q.onClose?.();Y("size","medium"),Y("stack",[{element:z,onClose:f}])},push(z,f){if(J.stack.length===0)X=Z?.currentFocusedRenderable??null,X?.blur();Y("stack",[...J.stack,{element:z,onClose:f}])},pop(){if(J.stack.at(-1)?.onClose?.(),Y("stack",J.stack.slice(0,-1)),J.stack.length===0)G()},get stack(){return J.stack},get size(){return J.size},setSize(z){Y("size",z)}}}function aK(J){let Y=cy();return I($K.Provider,{value:Y,get children(){return[Y1(()=>J.children),(()=>{var Z=V("box");return Q(Z,"position","absolute"),Q(Z,"zIndex",3000),M(Z,I(z0,{get when(){return Y.stack.length},get children(){return I(my,{onClose:()=>Y.clear(),get size(){return Y.size},get children(){return Y.stack.at(-1).element()}})}})),Z})()]}})}function h1(){let J=NJ($K);if(!J)throw Error("useDialog must be used within a DialogProvider");return J}var Py,vy,$K;var uJ=S(()=>{w();w();w();w();w();w();w();w();B1();Az();u1();gJ();Py=lK.fromInts(0,0,0,128),vy=lK.fromInts(0,0,0,64);$K=FY()});import{spawnSync as dH}from"child_process";import*as _K from"fs";function pK(J){return`This folder isn't a git repository yet, and a task needs a git branch to work in. To fix it, turn ${J} 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 rK(J){let Y=J.trim();if(!Y)return"repo path is required";let Z;try{Z=_K.statSync(Y)}catch{return`path does not exist: ${Y}`}if(!Z.isDirectory())return`not a directory: ${Y}`;try{if(dH("git",["rev-parse","--git-dir"],{cwd:Y,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return pK(Y)}catch{return pK(Y)}return null}function Cz(J){if(!J)return null;try{let Y=dH("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:J,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]});if(Y.status!==0)return null;let Z=Y.stdout.trim();if(!Z||Z==="HEAD")return null;return Z}catch{return null}}function oK(J){if(!J)return[];try{let Y=dH("git",["for-each-ref","--format=%(refname:short)","refs/heads/"],{cwd:J,encoding:"utf-8",timeout:2000});if(Y.status!==0)return[];return Y.stdout.split(`
222
+ `).map((Z)=>Z.trim()).filter(Boolean).sort((Z,X)=>{let G=(q)=>q==="main"?0:q==="master"?1:q==="develop"?2:3,z=G(Z),f=G(X);if(z!==f)return z-f;return Z.localeCompare(X)})}catch{return[]}}var VY="main";var zq=()=>{};import*as sK from"fs";import*as Qq from"os";function fJ(J){if(J==="~")return Qq.homedir();if(J.startsWith("~/"))return Qq.homedir()+J.slice(1);return J}function nH(J){if(!J)return{base:"",filter:""};let Z=fJ(J==="~"?"~/":J);if(Z.endsWith("/"))return{base:Z,filter:""};let X=Z.lastIndexOf("/");if(X===-1)return{base:"",filter:Z};return{base:Z.slice(0,X+1),filter:Z.slice(X+1)}}function iH(J){if(!J)return[];try{let Y=sK.readdirSync(J,{withFileTypes:!0}),Z=[];for(let X of Y)if(X.isDirectory())Z.push(X.name);return Z.sort((X,G)=>X.localeCompare(G))}catch{return[]}}function lH(J,Y){let Z=Y.toLowerCase(),G=Z.startsWith(".")?J:J.filter((z)=>!z.startsWith("."));if(!Z)return G;return G.filter((z)=>z.toLowerCase().startsWith(Z))}function gz(J,Y,Z){let X=Y+Z;if(J.startsWith("~")){let G=Qq.homedir();if(X===G)return"~";if(X.startsWith(`${G}/`))return`~${X.slice(G.length)}`}return X}var fq=()=>{};import{spawn as dy}from"child_process";import*as FX from"fs";import*as yz from"path";function tK(J){let Y=J.trim().replace(/\/+$/,"");if(!Y)return"";let Z=Y.lastIndexOf("/"),X=Y.lastIndexOf(":"),G=Math.max(Z,X);return(G>=0?Y.slice(G+1):Y).replace(/\.git$/i,"")}function eK(J){let Y=J.trim();if(!Y)return"git URL is required";let Z=Y.includes("://"),X=Y.includes("@")&&Y.includes(":"),G=Y.includes("/");if(!Z&&!X&&!G)return`does not look like a git URL: ${Y}`;return null}function J4(J,Y){let Z=Y.trim();if(!Z)return"folder name is required";if(Z.includes("/")||Z.includes("\\"))return"folder name cannot contain path separators";let X=J.trim();if(!X)return"parent directory is required";let G=fJ(X),z;try{z=FX.statSync(G)}catch{return`parent directory does not exist: ${G}`}if(!z.isDirectory())return`not a directory: ${G}`;let f=yz.join(G,Z);if(FX.existsSync(f))return`target already exists: ${f}`;return null}function Y4(J,Y){return yz.join(fJ(J.trim()),Y.trim())}function Z4(J,Y){let Z=Y.trim();if(!Z)return Y;let X=fJ(J.trim());if(!X)return Y;try{if(!FX.statSync(X).isDirectory())return Y}catch{return Y}if(!FX.existsSync(yz.join(X,Z)))return Z;for(let G=2;G<1000;G++){let z=`${Z}-${G}`;if(!FX.existsSync(yz.join(X,z)))return z}return Z}function X4(J,Y,Z){return new Promise((X)=>{let G="";try{let z=dy("git",["clone","--progress",J,Y],{stdio:["ignore","ignore","pipe"]});z.stderr?.setEncoding("utf-8"),z.stderr?.on("data",(f)=>{if(G+=f,Z){let q=f.split(/[\r\n]+/).filter((j)=>j.trim().length>0),B=q[q.length-1];if(B)Z(B)}}),z.on("error",(f)=>{X({ok:!1,error:f.message})}),z.on("close",(f)=>{if(f===0){X({ok:!0,path:Y});return}let q=G.split(/[\r\n]+/).filter((B)=>B.trim().length>0).pop()??`git clone exited with ${f}`;X({ok:!1,error:q})})}catch(z){X({ok:!1,error:z instanceof Error?z.message:String(z)})}})}var G4=S(()=>{fq()});function qq(J){if(J==="existing")return"clone";if(J==="clone")return"adopt";return"existing"}function z4(J){if(J==="existing")return"adopt";if(J==="clone")return"existing";return"clone"}function Q4(J,Y){let Z=J.trim();if(Y.includes(Z))return"saved";if(Z.startsWith("~"))return"browse";if(Z.includes("/"))return"browse";return"saved"}function yJ(J){return J.replace(/[\r\n]+/g,"")}function $H(J,Y="existing"){if(J==="confirm")return"tabs";if(J==="tabs")return"engine";if(J==="engine")return aH(Y);if(Y==="clone"){if(J==="cloneUrl")return"cloneParent";if(J==="cloneParent")return"cloneFolder";if(J==="cloneFolder")return"cloneBaseRef";if(J==="cloneBaseRef")return"confirm";return"cloneUrl"}if(Y==="adopt")return J==="adoptFilter"?"confirm":"adoptFilter";if(J==="repo")return"baseRef";if(J==="baseRef")return"confirm";return"repo"}function aH(J){if(J==="clone")return"cloneUrl";if(J==="adopt")return"adoptFilter";return"repo"}function f4(J,Y){let Z=Y.trim();if(!Z)return J;return J.filter((X)=>vz(Z,X.path))}function q4(J,Y){let Z=new Set,X=[];for(let G of[J,...Y]){let z=G.trim();if(!z||Z.has(z))continue;Z.add(z),X.push(z)}return X}function B4(J,Y){let Z=Y.trim().toLowerCase();if(!Z)return J;return J.filter((X)=>X.toLowerCase().includes(Z))}function j4(J,Y){let Z=Y.trim().toLowerCase();if(!Z)return J;return J.filter((X)=>X.toLowerCase().includes(Z))}function Sz(J,Y,Z=ny){let X=J.length;if(X<=Z)return{items:J,start:0,total:X};let G=Math.floor(Z/2),z=Math.max(0,Y-G);if(z+Z>X)z=X-Z;return{items:J.slice(z,z+Z),start:z,total:X}}function NY(J,Y){if(Y<=0)return 0;return Math.max(0,Math.min(Y-1,J))}function H4(J,Y,Z){let X=Y[Z];if(X)return X;return J.trim()||VY}var ny=8;var pH=S(()=>{kq();zq()});import{TextAttributes as $J}from"@opentui/core";function W4(J){let Y=h1(),{theme:Z}=v0(),[X,G]=p("existing"),z=()=>{let b=J.availableVendors;return b&&b.length>0?b:m1},f=(()=>{let b=z(),W0=J.defaultVendor??"claude";return b.includes(W0)?W0:b[0]??"claude"})(),[q,B]=p(f),[j,K]=p("tabs"),[H,U]=p(J.defaultRepo),[L,F]=p(Cz(fJ(J.defaultRepo.trim()))??VY),[D,A]=p(!1),[R,l]=p(""),[g,k]=p(J.defaultCloneParent?.trim()?J.defaultCloneParent:"~/"),[C,N]=p(""),[_,X0]=p(!1),[s,Y0]=p(VY),[u,Q0]=p(!1),[t,j0]=p(""),S0=U0(()=>q4(J.defaultRepo,J.savedRepos)),$=U0(()=>Q4(H(),S0())),P=U0(()=>nH(H())),G0=U0(()=>iH(P().base)),Z0=U0(()=>lH(G0(),P().filter)),K0=U0(()=>B4(S0(),H())),h=U0(()=>$()==="browse"?Z0():K0()),[y,e]=p(0),V0=U0(()=>Sz(h(),y())),[q0,A0]=p(!1),I0=U0(()=>oK(fJ(H().trim()))),k0=U0(()=>j4(I0(),L())),[a0,v]=p(0),H0=U0(()=>Sz(k0(),a0())),o=U0(()=>nH(g())),R0=U0(()=>iH(o().base)),b0=U0(()=>lH(R0(),o().filter)),[w0,N0]=p(0),d=U0(()=>Sz(b0(),w0())),[J0,F0]=p(!1),[d0,r0]=p(""),[x0,e0]=p(0),[G1,F1]=p(new Set),[a]=ZQ(()=>X()==="adopt"?fJ(H().trim()):null,async(b)=>J.discoverAdoptable?await J.discoverAdoptable(b):[]),r=U0(()=>f4(a()??[],d0())),O=U0(()=>Sz(r().map((b)=>b.path),x0())),L0=U0(()=>{let b=O();return r().slice(b.start,b.start+b.items.length)});s0(()=>{r(),e0((b)=>NY(b,r().length))});function f0(b){F1((W0)=>{let h0=new Set(W0);if(h0.has(b))h0.delete(b);else h0.add(b);return h0})}function n0(){let b=r()[x0()];if(b)f0(b.path)}s0(()=>{k0(),v(0)}),s0(()=>{let b=fJ(H().trim());if(!b)return;if(D())return;let W0=Cz(b);if(W0)F(W0)}),s0(()=>{h(),e(0)}),s0(()=>{b0(),N0(0)}),s0(()=>{let b=R(),W0=g();if(_())return;let h0=tK(b);N(Z4(W0,h0))});let[M0,m0]=p(null);s0(()=>{H(),R(),g(),C(),d0(),m0(null)});function D0(){let b=fJ(H().trim());if(!b)return;let W0=rK(b);if(W0){m0(W0),K("repo");return}let h0=L().trim()||VY;J.onSubmit({repo:b,baseRef:h0,vendor:q()}),Y.clear()}async function E0(){if(u())return;let b=eK(R());if(b){m0(b),K("cloneUrl");return}let W0=J4(g(),C());if(W0){m0(W0),K(C().trim()?"cloneParent":"cloneFolder");return}let h0=Y4(g(),C());Q0(!0),j0(`Cloning into ${h0}\u2026`);let Q1=await X4(R().trim(),h0,(VJ)=>{j0(VJ)});if(Q0(!1),!Q1.ok){m0(`git clone failed: ${Q1.error}`),K("cloneUrl");return}let YJ=s().trim()||VY,qJ=fJ(g().trim());J.onSubmit({repo:Q1.path,baseRef:YJ,vendor:q(),cloned:{parentDir:qJ}}),Y.clear()}function z1(){let b=r();if(b.length===0){m0("no adoptable worktrees to import");return}let W0=G1(),h0=W0.size>0?b.filter((Q1)=>W0.has(Q1.path)):b.slice(x0(),x0()+1);if(h0.length===0)return;J.onSubmit({mode:"adopt",repo:fJ(H().trim()),vendor:q(),adopt:h0.map((Q1)=>({worktreePath:Q1.path,branch:Q1.branch}))}),Y.clear()}function p0(){if(X()==="clone"){E0();return}if(X()==="adopt"){z1();return}D0()}function _0(b){if(u())return;if(b===X())return;G(b),K(aH(b)),m0(null)}function Z1(b){if(u())return;let W0=b===1?qq(X()):z4(X());if(W0===X())return;G(W0),m0(null),K("tabs")}function C1(b){B((W0)=>b===1?eY(z(),W0):Iq(z(),W0))}function g0(){if(!H().trim()&&$()==="saved"){let W0=h()[0];if(W0){U(W0),K("baseRef");return}}if($()==="browse"){let h0=Z0()[y()],Q1=P();if(h0){U(gz(H(),Q1.base,h0)),e(0),A0(!0),K("baseRef");return}K("baseRef");return}let b=h()[y()];if(b){U(b),K("baseRef");return}K("baseRef")}function c(b){let h0=h()[b];if(!h0)return;if($()==="browse"){let Q1=P();U(gz(H(),Q1.base,h0)),e(b),A0(!0),K("baseRef");return}U(h0),e(b),K("baseRef")}function C0(){let W0=b0()[w0()],h0=o();if(W0){k(gz(g(),h0.base,W0)),N0(0),F0(!0),K("cloneFolder");return}K("cloneFolder")}function A1(b){let h0=b0()[b];if(!h0)return;let Q1=o();k(gz(g(),Q1.base,h0)),N0(b),F0(!0),K("cloneFolder")}let S1=()=>{let b=r();if(b.length===0)return;let W0=b.every((h0)=>G1().has(h0.path));F1(W0?new Set:new Set(b.map((h0)=>h0.path)))};L1(()=>({bindings:[{key:"tab",cmd:()=>K((b)=>$H(b,X()))},{key:"ctrl+]",cmd:()=>_0(qq(X()))},{key:"ctrl+[",cmd:()=>_0(qq(X()))},{key:"ctrl+e",cmd:()=>B((b)=>eY(z(),b))},{key:"up",cmd:()=>{if(u())return;if(X()==="existing"&&j()==="repo"){let b=h();if(b.length===0)return;e(NY(y()-1,b.length));return}if(X()==="existing"&&j()==="baseRef"){let b=k0();if(b.length===0)return;v(NY(a0()-1,b.length));return}if(X()==="clone"&&j()==="cloneParent"){let b=b0();if(b.length===0)return;N0(NY(w0()-1,b.length));return}if(X()==="adopt"){let b=r();if(b.length===0)return;e0(NY(x0()-1,b.length))}}},{key:"down",cmd:()=>{if(u())return;if(X()==="existing"&&j()==="repo"){let b=h();if(b.length===0)return;e(NY(y()+1,b.length));return}if(X()==="existing"&&j()==="baseRef"){let b=k0();if(b.length===0)return;v(NY(a0()+1,b.length));return}if(X()==="clone"&&j()==="cloneParent"){let b=b0();if(b.length===0)return;N0(NY(w0()+1,b.length));return}if(X()==="adopt"){let b=r();if(b.length===0)return;e0(NY(x0()+1,b.length))}}},...j()==="tabs"||j()==="engine"?[{key:"left",cmd:()=>j()==="tabs"?Z1(-1):C1(-1)},{key:"right",cmd:()=>j()==="tabs"?Z1(1):C1(1)},{key:"return",cmd:()=>K((b)=>$H(b,X()))}]:[],...X()==="adopt"?[{key:"ctrl+a",cmd:S1}]:[]]})),L1(()=>({enabled:j()==="confirm"&&!u(),bindings:[{key:"return",cmd:()=>p0()}]}));let H1=(b)=>j()===b?Z.primary:Z.textMuted,o0=(b)=>j()===b?$J.BOLD|$J.UNDERLINE:void 0,v1=(b,W0)=>b?W0?$J.BOLD|$J.UNDERLINE:$J.BOLD:void 0;return(()=>{var b=V("box"),W0=V("box"),h0=V("text"),Q1=V("box"),YJ=V("box"),qJ=V("text"),VJ=V("box"),bY=V("box"),TY=V("text"),KJ=V("box"),RX=V("text"),tY=V("text");return W(b,W0),W(b,Q1),W(b,KJ),Q(b,"paddingLeft",2),Q(b,"paddingRight",2),Q(b,"gap",0),W(W0,h0),Q(W0,"flexDirection","row"),W(h0,T("New task")),W(Q1,YJ),Q(Q1,"gap",1),Q(Q1,"paddingTop",1),Q(Q1,"paddingBottom",1),M(Q1,()=>{let n=()=>j()==="tabs",m=(i)=>i?Z.primary:Z.textMuted;return(()=>{var i=V("box"),E=V("text"),O0=V("text"),T0=V("text");return W(i,E),W(i,O0),W(i,T0),Q(i,"flexDirection","row"),Q(i,"gap",2),Q(E,"onMouseUp",()=>_0("existing")),M(E,()=>X()==="existing"?"\u25B8 For Existing":" For Existing"),Q(O0,"onMouseUp",()=>_0("clone")),M(O0,()=>X()==="clone"?"\u25B8 For New Repo":" For New Repo"),Q(T0,"onMouseUp",()=>_0("adopt")),M(T0,()=>X()==="adopt"?"\u25B8 Adopt Worktree":" Adopt Worktree"),x((y0)=>{var P0=m(X()==="existing"),D1=v1(X()==="existing",n()),V1=m(X()==="clone"),ZJ=v1(X()==="clone",n()),pJ=m(X()==="adopt"),gG=v1(X()==="adopt",n());return P0!==y0.e&&(y0.e=Q(E,"fg",P0,y0.e)),D1!==y0.t&&(y0.t=Q(E,"attributes",D1,y0.t)),V1!==y0.a&&(y0.a=Q(O0,"fg",V1,y0.a)),ZJ!==y0.o&&(y0.o=Q(O0,"attributes",ZJ,y0.o)),pJ!==y0.i&&(y0.i=Q(T0,"fg",pJ,y0.i)),gG!==y0.n&&(y0.n=Q(T0,"attributes",gG,y0.n)),y0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),i})()},YJ),W(YJ,qJ),W(YJ,VJ),Q(YJ,"gap",0),W(qJ,T("engine")),W(VJ,bY),W(VJ,TY),Q(VJ,"flexDirection","row"),Q(VJ,"gap",2),M(VJ,I(X1,{get each(){return z()},children:(n)=>{let m=()=>q()===n;return(()=>{var i=V("text");return Q(i,"onMouseUp",()=>B(n)),M(i,()=>m()?"\u25B8 ":" ",null),M(i,n,null),x((E)=>{var O0=m()?Z.primary:Z.textMuted,T0=m()?$J.BOLD:void 0;return O0!==E.e&&(E.e=Q(i,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(i,"attributes",T0,E.t)),E},{e:void 0,t:void 0}),i})()}}),bY),Q(bY,"flexGrow",1),W(TY,T("ctrl+e")),M(Q1,I(z0,{get when(){return X()==="existing"},get children(){return[(()=>{var n=V("box"),m=V("text"),i=V("input");return W(n,m),W(n,i),Q(n,"gap",0),W(m,T("repo")),Q(i,"onInput",(E)=>{A0(!1),U(yJ(E))}),Q(i,"onSubmit",()=>{if(!H().trim())return;g0()}),x((E)=>{var O0=H1("repo"),T0=o0("repo"),y0=H(),P0=J.defaultRepo,D1=j()==="repo";return O0!==E.e&&(E.e=Q(m,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(m,"attributes",T0,E.t)),y0!==E.a&&(E.a=Q(i,"value",y0,E.a)),P0!==E.o&&(E.o=Q(i,"placeholder",P0,E.o)),D1!==E.i&&(E.i=Q(i,"focused",D1,E.i)),E},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),n})(),I(z0,{get when(){return Y1(()=>j()==="repo"&&h().length>0)()&&!q0()},get children(){var n=V("box");return Q(n,"gap",0),Q(n,"paddingLeft",2),M(n,I(z0,{get when(){return V0().start>0},get children(){var m=V("text"),i=T("\u2191 "),E=T(" more");return W(m,i),W(m,E),Q(m,"wrapMode","none"),M(m,()=>V0().start,E),x((O0)=>Q(m,"fg",Z.textMuted,O0)),m}}),null),M(n,I(X1,{get each(){return V0().items},children:(m,i)=>{let E=()=>V0().start+i(),O0=()=>E()===y(),T0=()=>$()==="saved"&&m===J.defaultRepo,y0=()=>$()==="saved"&&H().trim()===m,P0=()=>$()==="browse"?"/":"",D1=()=>T0()?" (current dir)":"";return(()=>{var V1=V("text");return Q(V1,"wrapMode","none"),Q(V1,"onMouseUp",()=>c(E())),M(V1,()=>O0()?"\u25B8 ":" ",null),M(V1,m,null),M(V1,P0,null),M(V1,D1,null),x((ZJ)=>{var pJ=O0()?Z.primary:y0()?Z.accent:Z.textMuted,gG=O0()?$J.BOLD:void 0;return pJ!==ZJ.e&&(ZJ.e=Q(V1,"fg",pJ,ZJ.e)),gG!==ZJ.t&&(ZJ.t=Q(V1,"attributes",gG,ZJ.t)),ZJ},{e:void 0,t:void 0}),V1})()}}),null),M(n,I(z0,{get when(){return V0().start+V0().items.length<V0().total},get children(){var m=V("text"),i=T("\u2193 "),E=T(" more");return W(m,i),W(m,E),Q(m,"wrapMode","none"),M(m,()=>V0().total-V0().start-V0().items.length,E),x((O0)=>Q(m,"fg",Z.textMuted,O0)),m}}),null),n}}),(()=>{var n=V("box"),m=V("text"),i=V("input");return W(n,m),W(n,i),Q(n,"gap",0),W(m,T("from branch")),Q(i,"placeholder",VY),Q(i,"onInput",(E)=>{A(!0),F(yJ(E))}),Q(i,"onSubmit",()=>{F(H4(L(),k0(),a0())),A(!0),D0()}),x((E)=>{var O0=H1("baseRef"),T0=o0("baseRef"),y0=L(),P0=j()==="baseRef";return O0!==E.e&&(E.e=Q(m,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(m,"attributes",T0,E.t)),y0!==E.a&&(E.a=Q(i,"value",y0,E.a)),P0!==E.o&&(E.o=Q(i,"focused",P0,E.o)),E},{e:void 0,t:void 0,a:void 0,o:void 0}),n})(),I(z0,{get when(){return Y1(()=>j()==="baseRef"&&k0().length===0)()&&M0()==null},get children(){var n=V("box"),m=V("text");return W(n,m),Q(n,"gap",0),Q(n,"paddingLeft",2),Q(n,"paddingBottom",1),Q(m,"wrapMode","none"),M(m,()=>I0().length===0?"(no local branches found \u2014 typed text will be used as ref)":"(no match \u2014 typed text will be used as ref)"),x((i)=>Q(m,"fg",Z.textMuted,i)),n}}),I(z0,{get when(){return Y1(()=>j()==="baseRef")()&&k0().length>0},get children(){var n=V("box");return Q(n,"gap",0),Q(n,"paddingLeft",2),Q(n,"paddingBottom",1),M(n,I(z0,{get when(){return H0().start>0},get children(){var m=V("text"),i=T("\u2191 "),E=T(" more");return W(m,i),W(m,E),Q(m,"wrapMode","none"),M(m,()=>H0().start,E),x((O0)=>Q(m,"fg",Z.textMuted,O0)),m}}),null),M(n,I(X1,{get each(){return H0().items},children:(m,i)=>{let E=()=>H0().start+i(),O0=()=>E()===a0(),T0=()=>L().trim()===m;return(()=>{var y0=V("text");return Q(y0,"wrapMode","none"),Q(y0,"onMouseUp",()=>{F(m),A(!0),v(E()),K("confirm")}),M(y0,()=>O0()?"\u25B8 ":" ",null),M(y0,m,null),x((P0)=>{var D1=O0()?Z.primary:T0()?Z.accent:Z.textMuted,V1=O0()?$J.BOLD:void 0;return D1!==P0.e&&(P0.e=Q(y0,"fg",D1,P0.e)),V1!==P0.t&&(P0.t=Q(y0,"attributes",V1,P0.t)),P0},{e:void 0,t:void 0}),y0})()}}),null),M(n,I(z0,{get when(){return H0().start+H0().items.length<H0().total},get children(){var m=V("text"),i=T("\u2193 "),E=T(" more");return W(m,i),W(m,E),Q(m,"wrapMode","none"),M(m,()=>H0().total-H0().start-H0().items.length,E),x((O0)=>Q(m,"fg",Z.textMuted,O0)),m}}),null),n}})]}}),null),M(Q1,I(z0,{get when(){return X()==="clone"},get children(){return[(()=>{var n=V("box"),m=V("text"),i=V("input");return W(n,m),W(n,i),Q(n,"gap",0),W(m,T("git url")),Q(i,"placeholder","https://github.com/user/repo.git"),Q(i,"onInput",(E)=>l(yJ(E))),Q(i,"onSubmit",()=>{if(!R().trim())return;K("cloneParent")}),x((E)=>{var O0=H1("cloneUrl"),T0=o0("cloneUrl"),y0=R(),P0=j()==="cloneUrl";return O0!==E.e&&(E.e=Q(m,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(m,"attributes",T0,E.t)),y0!==E.a&&(E.a=Q(i,"value",y0,E.a)),P0!==E.o&&(E.o=Q(i,"focused",P0,E.o)),E},{e:void 0,t:void 0,a:void 0,o:void 0}),n})(),(()=>{var n=V("box"),m=V("text"),i=V("input");return W(n,m),W(n,i),Q(n,"gap",0),W(m,T("parent dir")),Q(i,"placeholder","~/"),Q(i,"onInput",(E)=>{F0(!1),k(yJ(E))}),Q(i,"onSubmit",()=>C0()),x((E)=>{var O0=H1("cloneParent"),T0=o0("cloneParent"),y0=g(),P0=j()==="cloneParent";return O0!==E.e&&(E.e=Q(m,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(m,"attributes",T0,E.t)),y0!==E.a&&(E.a=Q(i,"value",y0,E.a)),P0!==E.o&&(E.o=Q(i,"focused",P0,E.o)),E},{e:void 0,t:void 0,a:void 0,o:void 0}),n})(),I(z0,{get when(){return j()==="cloneParent"},get children(){var n=V("box"),m=V("text");return W(n,m),Q(n,"paddingLeft",2),W(m,T("(remembered \u2014 next clone defaults to this dir)")),Q(m,"wrapMode","none"),x((i)=>Q(m,"fg",Z.textMuted,i)),n}}),I(z0,{get when(){return Y1(()=>j()==="cloneParent"&&b0().length>0)()&&!J0()},get children(){var n=V("box");return Q(n,"gap",0),Q(n,"paddingLeft",2),M(n,I(z0,{get when(){return d().start>0},get children(){var m=V("text"),i=T("\u2191 "),E=T(" more");return W(m,i),W(m,E),Q(m,"wrapMode","none"),M(m,()=>d().start,E),x((O0)=>Q(m,"fg",Z.textMuted,O0)),m}}),null),M(n,I(X1,{get each(){return d().items},children:(m,i)=>{let E=()=>d().start+i(),O0=()=>E()===w0();return(()=>{var T0=V("text"),y0=T("/");return W(T0,y0),Q(T0,"wrapMode","none"),Q(T0,"onMouseUp",()=>A1(E())),M(T0,()=>O0()?"\u25B8 ":" ",y0),M(T0,m,y0),x((P0)=>{var D1=O0()?Z.primary:Z.textMuted,V1=O0()?$J.BOLD:void 0;return D1!==P0.e&&(P0.e=Q(T0,"fg",D1,P0.e)),V1!==P0.t&&(P0.t=Q(T0,"attributes",V1,P0.t)),P0},{e:void 0,t:void 0}),T0})()}}),null),M(n,I(z0,{get when(){return d().start+d().items.length<d().total},get children(){var m=V("text"),i=T("\u2193 "),E=T(" more");return W(m,i),W(m,E),Q(m,"wrapMode","none"),M(m,()=>d().total-d().start-d().items.length,E),x((O0)=>Q(m,"fg",Z.textMuted,O0)),m}}),null),n}}),(()=>{var n=V("box"),m=V("text"),i=V("input");return W(n,m),W(n,i),Q(n,"gap",0),W(m,T("folder name")),Q(i,"placeholder","auto from url"),Q(i,"onInput",(E)=>{X0(!0),N(yJ(E))}),Q(i,"onSubmit",()=>K("cloneBaseRef")),x((E)=>{var O0=H1("cloneFolder"),T0=o0("cloneFolder"),y0=C(),P0=j()==="cloneFolder";return O0!==E.e&&(E.e=Q(m,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(m,"attributes",T0,E.t)),y0!==E.a&&(E.a=Q(i,"value",y0,E.a)),P0!==E.o&&(E.o=Q(i,"focused",P0,E.o)),E},{e:void 0,t:void 0,a:void 0,o:void 0}),n})(),(()=>{var n=V("box"),m=V("text"),i=V("input");return W(n,m),W(n,i),Q(n,"gap",0),W(m,T("base branch")),Q(i,"placeholder",VY),Q(i,"onInput",(E)=>Y0(yJ(E))),Q(i,"onSubmit",()=>void E0()),x((E)=>{var O0=H1("cloneBaseRef"),T0=o0("cloneBaseRef"),y0=s(),P0=j()==="cloneBaseRef";return O0!==E.e&&(E.e=Q(m,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(m,"attributes",T0,E.t)),y0!==E.a&&(E.a=Q(i,"value",y0,E.a)),P0!==E.o&&(E.o=Q(i,"focused",P0,E.o)),E},{e:void 0,t:void 0,a:void 0,o:void 0}),n})(),I(z0,{get when(){return u()},get children(){var n=V("box"),m=V("text");return W(n,m),Q(n,"gap",0),Q(n,"paddingLeft",2),Q(m,"wrapMode","none"),M(m,()=>t()||"Cloning\u2026"),x((i)=>Q(m,"fg",Z.textMuted,i)),n}})]}}),null),M(Q1,I(z0,{get when(){return X()==="adopt"},get children(){return[(()=>{var n=V("box"),m=V("text"),i=V("input");return W(n,m),W(n,i),Q(n,"gap",0),W(m,T("filter (path glob)")),Q(i,"placeholder","* \u2014 type e.g. feature-* to narrow"),Q(i,"onInput",(E)=>r0(yJ(E))),Q(i,"onSubmit",()=>n0()),x((E)=>{var O0=H1("adoptFilter"),T0=o0("adoptFilter"),y0=d0(),P0=j()==="adoptFilter";return O0!==E.e&&(E.e=Q(m,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(m,"attributes",T0,E.t)),y0!==E.a&&(E.a=Q(i,"value",y0,E.a)),P0!==E.o&&(E.o=Q(i,"focused",P0,E.o)),E},{e:void 0,t:void 0,a:void 0,o:void 0}),n})(),(()=>{var n=V("box"),m=V("text"),i=T("repo: ");return W(n,m),Q(n,"paddingLeft",2),W(m,i),Q(m,"wrapMode","none"),M(m,()=>fJ(H().trim())||"(none)",null),x((E)=>Q(m,"fg",Z.textMuted,E)),n})(),I(z0,{get when(){return a.loading},get children(){var n=V("box"),m=V("text");return W(n,m),Q(n,"paddingLeft",2),W(m,T("scanning worktrees\u2026")),Q(m,"wrapMode","none"),x((i)=>Q(m,"fg",Z.textMuted,i)),n}}),I(z0,{get when(){return Y1(()=>!a.loading)()&&r().length===0},get children(){var n=V("box"),m=V("text");return W(n,m),Q(n,"paddingLeft",2),Q(m,"wrapMode","none"),M(m,()=>(a()??[]).length===0?"no unlinked worktrees \u2014 every git worktree here is already a task":"no worktrees match the filter"),x((i)=>Q(m,"fg",Z.textMuted,i)),n}}),I(z0,{get when(){return r().length>0},get children(){var n=V("box"),m=V("text");return W(n,m),Q(n,"gap",0),Q(n,"paddingLeft",2),M(n,I(z0,{get when(){return O().start>0},get children(){var i=V("text"),E=T("\u2191 "),O0=T(" more");return W(i,E),W(i,O0),Q(i,"wrapMode","none"),M(i,()=>O().start,O0),x((T0)=>Q(i,"fg",Z.textMuted,T0)),i}}),m),M(n,I(X1,{get each(){return L0()},children:(i,E)=>{let O0=()=>O().start+E(),T0=()=>O0()===x0(),y0=()=>G1().has(i.path),P0=()=>[i.dirty?"dirty":"",i.kobeManaged?"":"external"].filter(Boolean).join(",");return(()=>{var D1=V("text");return Q(D1,"wrapMode","none"),Q(D1,"onMouseUp",()=>{e0(O0()),f0(i.path)}),M(D1,()=>T0()?"\u25B8 ":" ",null),M(D1,()=>y0()?"[x] ":"[ ] ",null),M(D1,()=>i.branch,null),M(D1,(()=>{var V1=Y1(()=>!!P0());return()=>V1()?` (${P0()})`:""})(),null),x((V1)=>{var ZJ=T0()?Z.primary:y0()?Z.accent:Z.textMuted,pJ=T0()?$J.BOLD:void 0;return ZJ!==V1.e&&(V1.e=Q(D1,"fg",ZJ,V1.e)),pJ!==V1.t&&(V1.t=Q(D1,"attributes",pJ,V1.t)),V1},{e:void 0,t:void 0}),D1})()}}),m),M(n,I(z0,{get when(){return O().start+O().items.length<O().total},get children(){var i=V("text"),E=T("\u2193 "),O0=T(" more");return W(i,E),W(i,O0),Q(i,"wrapMode","none"),M(i,()=>O().total-O().start-O().items.length,O0),x((T0)=>Q(i,"fg",Z.textMuted,T0)),i}}),m),Q(m,"wrapMode","none"),M(m,(()=>{var i=Y1(()=>G1().size>0);return()=>i()?`${G1().size} selected \xB7 enter toggles \xB7 ctrl+a all \xB7 Create imports`:"enter toggles \xB7 ctrl+a all \xB7 Create imports the highlighted row"})()),x((i)=>Q(m,"fg",Z.textMuted,i)),n}})]}}),null),M(Q1,I(z0,{get when(){return M0()},get children(){var n=V("text"),m=T("\u203B ");return W(n,m),Q(n,"wrapMode","word"),M(n,M0,null),x((i)=>Q(n,"fg",Z.error,i)),n}}),null),W(KJ,RX),W(KJ,tY),Q(KJ,"flexDirection","row"),Q(KJ,"justifyContent","space-between"),Q(KJ,"alignItems","center"),Q(KJ,"paddingTop",1),Q(KJ,"paddingBottom",1),W(RX,T("\u2191\u2193 pick \xB7 tab next field \xB7 \u2190\u2192 switch \xB7 enter done \xB7 esc cancel")),Q(tY,"onMouseUp",()=>p0()),M(tY,(()=>{var n=Y1(()=>!!u());return()=>n()?"[ Cloning\u2026 ]":j()==="confirm"?"\u25B8 [ Create ]":"[ Create ]"})()),x((n)=>{var m=$J.BOLD,i=Z.text,E=H1("engine"),O0=o0("engine"),T0=Z.textMuted,y0=Z.textMuted,P0=j()==="confirm"?Z.primary:Z.text,D1=j()==="confirm"?$J.BOLD:void 0;return m!==n.e&&(n.e=Q(h0,"attributes",m,n.e)),i!==n.t&&(n.t=Q(h0,"fg",i,n.t)),E!==n.a&&(n.a=Q(qJ,"fg",E,n.a)),O0!==n.o&&(n.o=Q(qJ,"attributes",O0,n.o)),T0!==n.i&&(n.i=Q(TY,"fg",T0,n.i)),y0!==n.n&&(n.n=Q(RX,"fg",y0,n.n)),P0!==n.s&&(n.s=Q(tY,"fg",P0,n.s)),D1!==n.h&&(n.h=Q(tY,"attributes",D1,n.h)),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),b})()}var V4=S(()=>{w();w();w();w();w();w();w();w();BJ();B1();u1();zq();gJ();fq();uJ();G4();pH()});function iy(J,Y,Z,X){return new Promise((G)=>{J.replace(()=>I(W4,{defaultRepo:Y,savedRepos:Z,get defaultCloneParent(){return X?.defaultCloneParent},get defaultVendor(){return X?.defaultVendor},get availableVendors(){return X?.availableVendors},get discoverAdoptable(){return X?.discoverAdoptable},onSubmit:(z)=>G(z),onCancel:()=>G(void 0)}),()=>G(void 0)),J.setSize("medium")})}var Bq;var kz=S(()=>{w();V4();pH();Bq={show:iy}});function K4(J,Y){return[{key:"tab",cmd:()=>Y.cycleField(1)},{key:"shift+tab",cmd:()=>Y.cycleField(-1)},{key:"ctrl+e",cmd:()=>Y.stepEngine(1)},...J==="engine"?[{key:"left",cmd:()=>Y.stepEngine(-1)},{key:"right",cmd:()=>Y.stepEngine(1)},{key:"return",cmd:()=>Y.commit()}]:[]]}import{TextAttributes as U4}from"@opentui/core";function ly(J){let Y=h1(),{theme:Z}=v0(),[X,G]=p("prompt"),[z,f]=p(""),[q,B]=p(J.defaultVendor),[j,K]=p(J.defaultBaseRef);function H(D){let A=jq.indexOf(X());G(jq[(A+D+jq.length)%jq.length]??"prompt")}function U(D){let A=J.engines;if(A.length===0)return;if(D>0){B((l)=>eY(A,l));return}let R=Math.max(0,A.indexOf(q()));B(A[(R-1+A.length)%A.length]??q())}function L(){let D=z().trim();if(!D){G("prompt");return}J.onSubmit({prompt:D,vendor:q(),baseRef:j().trim()||J.defaultBaseRef}),Y.clear()}L1(()=>({enabled:!0,bindings:K4(X(),{cycleField:H,stepEngine:U,commit:L})}));let F=(D)=>X()===D?Z.accent:Z.textMuted;return(()=>{var D=V("box"),A=V("box"),R=V("text"),l=V("text"),g=V("box"),k=V("text"),C=V("input"),N=V("box"),_=V("text"),X0=V("box"),s=V("text"),Y0=V("input"),u=V("box"),Q0=V("text");return W(D,A),W(D,g),W(D,N),W(D,X0),W(D,u),Q(D,"paddingLeft",2),Q(D,"paddingRight",2),Q(D,"gap",1),W(A,R),W(A,l),Q(A,"flexDirection","row"),Q(A,"justifyContent","space-between"),M(R,()=>`Quick task \xB7 ${J.repoLabel}`),W(l,T("esc")),Q(l,"onMouseUp",()=>J.onCancel()),W(g,k),W(g,C),Q(g,"gap",0),W(k,T("prompt")),Q(C,"placeholder","what should this task do?"),Q(C,"onInput",(t)=>f(yJ(t))),Q(C,"onSubmit",()=>L()),W(N,_),Q(N,"flexDirection","row"),Q(N,"gap",2),W(_,T("engine")),M(N,I(X1,{get each(){return J.engines},children:(t)=>(()=>{var j0=V("text");return Q(j0,"onMouseUp",()=>{B(t),G("engine")}),M(j0,()=>J.engineLabel(t)),x((S0)=>{var $=q()===t?Z.primary:Z.textMuted,P=q()===t?U4.BOLD:void 0;return $!==S0.e&&(S0.e=Q(j0,"fg",$,S0.e)),P!==S0.t&&(S0.t=Q(j0,"attributes",P,S0.t)),S0},{e:void 0,t:void 0}),j0})()}),null),W(X0,s),W(X0,Y0),Q(X0,"gap",0),W(s,T("branch")),Q(Y0,"onInput",(t)=>K(yJ(t))),Q(Y0,"onSubmit",()=>L()),W(u,Q0),Q(u,"paddingBottom",1),W(Q0,T("enter create \xB7 tab field \xB7 ctrl+e engine \xB7 esc cancel")),x((t)=>{var j0=U4.BOLD,S0=Z.text,$=Z.textMuted,P=F("prompt"),G0=z(),Z0=X()==="prompt",K0=F("engine"),h=F("branch"),y=j(),e=J.defaultBaseRef,V0=X()==="branch",q0=Z.textMuted;return j0!==t.e&&(t.e=Q(R,"attributes",j0,t.e)),S0!==t.t&&(t.t=Q(R,"fg",S0,t.t)),$!==t.a&&(t.a=Q(l,"fg",$,t.a)),P!==t.o&&(t.o=Q(k,"fg",P,t.o)),G0!==t.i&&(t.i=Q(C,"value",G0,t.i)),Z0!==t.n&&(t.n=Q(C,"focused",Z0,t.n)),K0!==t.s&&(t.s=Q(_,"fg",K0,t.s)),h!==t.h&&(t.h=Q(s,"fg",h,t.h)),y!==t.r&&(t.r=Q(Y0,"value",y,t.r)),e!==t.d&&(t.d=Q(Y0,"placeholder",e,t.d)),V0!==t.l&&(t.l=Q(Y0,"focused",V0,t.l)),q0!==t.u&&(t.u=Q(Q0,"fg",q0,t.u)),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}),D})()}function $y(J,Y){return new Promise((Z)=>{J.replace(()=>I(ly,IK(Y,{onSubmit:(X)=>Z(X),onCancel:()=>Z(void 0)})),()=>Z(void 0)),J.setSize("medium")})}var jq,L4;var D4=S(()=>{w();w();w();w();w();w();w();w();B1();BJ();u1();gJ();uJ();kz();jq=["prompt","engine","branch"];L4={show:$y}});async function M4(J={}){let Y=J.logTag??"orch-connect",Z=J.connect??lJ,X=null;try{let G=await Z();if(!G)return vY(Y,"no daemon running \u2014 caller degrades"),null;return X=new QJ(G,{...J.orchestratorOptions,channels:J.channels}),await X.init(),X}catch(G){return zZ(Y,G),X?.dispose(),null}}var F4=S(()=>{$Z();CJ();IZ()});function O4(J){let[Y,Z]=p(J.initial??"sidebar"),[X,G]=p(0),z=e1();function f(H){if(G((L)=>L+1),Y()===H)return;let U=z?.currentFocusedRenderable;if(U&&!U.isDestroyed)try{U.blur()}catch{}Z(H)}function q(H){let L=(Hq.indexOf(Y())+H+Hq.length)%Hq.length;f(Hq[L])}let B=new Map;function j(H){let U=B.get(H);if(!U)U=()=>Y()===H,B.set(H,U);return U}let K={focused:Y,is:j,setFocused:f,cycle:q,refocusTick:X};return I(ay.Provider,{value:K,get children(){return J.children}})}var Hq,ay;var A4=S(()=>{w();w();B1();Hq=["sidebar","workspace","files","terminal"],ay=FY(null)});function R4(){for(let J of bZ){let Y=py.get(J.id);if(!Y)continue;let Z=J;Z.keys=[...Y.keys],Z.hint=Y.hint?{...Y.hint}:void 0}}function C4(){_y((J)=>J+1)}function rH(J){return ry.get(J)}function oy(J){return rH(J)?.keys??[]}function TZ(J){let Y=[];for(let Z in J){let X=J[Z];if(!X)continue;let G=oy(Z);if(G.length===0){console.warn(`[kobe/keybindings] bindByIds: id="${Z}" has no chords (or doesn't exist in KobeKeymap)`);continue}G.forEach((z,f)=>Y.push({key:z,cmd:X,slot:f}))}return Y}var bZ,py,_H,_y,ry;var MG=S(()=>{B1();bZ=[{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"}}],py=new Map(bZ.map((J)=>[J.id,{keys:[...J.keys],hint:J.hint?{...J.hint}:void 0}]));[_H,_y]=p(0);ry=new Map(bZ.map((J)=>[J.id,J]))});function Wq(){if(EZ)return EZ;let J=ff();if(!J.exists)return EZ={path:J.path,exists:!1,applied:[],warnings:[]},EZ;let Y=[...J.warnings],Z=Bf(J.doc,process.platform,{chordOptsFor:Sj});Y.push(...Z.warnings);let X=Z.entries.filter((q)=>q.id.startsWith("tmux.")),G=Z.entries.filter((q)=>!q.id.startsWith("tmux.")),z=O8(bZ,G);Y.push(...z.warnings);let f=[...z.applied];if(X.length>0){let q=yj(X);Y.push(...q.warnings);for(let B of q.overridden){if(B===SY){f.push({id:B,keys:q.focus.map((H)=>H?.chord??"").filter((H)=>H!==""),defaultKeys:MZ});continue}let j=q.binds[B];f.push({id:B,keys:j?[j.chord]:[],defaultKeys:[jX[B]]});let K=bZ.find((H)=>H.id===B);if(K?.hint)K.hint.keys=j?`${JG(B)?"prefix ":""}${j.chord}`:"\u2014"}}for(let q of Y)console.warn(`[kobe/keybindings] ${q}`);return EZ={path:J.path,exists:!0,applied:f,warnings:Y},EZ}function g4(){return EZ??Wq()}function y4(){EZ=null,F8(),g8(),R4();let J=Wq();return C4(),J}var EZ=null;var oH=S(()=>{Cj();Wf();jf();MG()});var sy=250,FG,S4;var Iz=S(()=>{Az();cZ();hH();({use:FG,provider:S4}=Xq({name:"KV",init:()=>{let[J,Y]=NZ(c1()),Z=new Set,X=null;function G(q){if(Z.size===0)return!0;try{let B={};for(let j of Z)B[j]=J[j];return mZ(B),Z.clear(),!0}catch(B){return console.error(`[kobe] kv ${q} failed:`,B),!1}}function z(){if(X)clearTimeout(X);X=setTimeout(()=>{X=null,G("write")},sy)}let f={get ready(){return!0},get store(){return J},signal(q,B){if(J[q]===void 0)Y(q,B);return[()=>f.get(q),(j)=>f.set(q,j)]},get(q,B){return J[q]??B},set(q,B){Y(q,B),Z.add(q),z()},flush(){if(X)clearTimeout(X),X=null;return G("flush")},clear(){for(let q of Object.keys(J))Y(q,void 0);if(X)clearTimeout(X),X=null;Z.clear();try{oW({})}catch(q){console.error("[kobe] kv clear write failed:",q)}}};return f}}))});var Vq="../pulse-n3cq1btw.wav";var k4=()=>{};import{existsSync as ey,mkdirSync as JS}from"fs";import{tmpdir as YS}from"os";import{basename as ZS,isAbsolute as XS,join as sH,resolve as GS}from"path";function QS(J,Y,Z){if(J==="ffplay")return[J,"-autoexit","-nodisp","-af",`volume=${Z}`,Y];if(J==="mpv")return[J,"--no-video","--audio-display=no","--volume",String(Math.round(Z*100)),Y];if(J==="mpg123"||J==="mpg321")return[J,"-g",String(Math.round(Z*100)),Y];if(J==="mplayer")return[J,"-vo","null","-volume",String(Math.round(Z*100)),Y];if(J==="afplay"||J==="omxplayer"||J==="aplay"||J==="cmdmp3")return[J,Y];if(J==="play")return[J,"-v",String(Z),Y];if(J==="cvlc")return[J,`--gain=${Z}`,"--play-and-exit",Y];return[J,"-c",`(New-Object Media.SoundPlayer '${Y.replace(/'/g,"''")}').PlaySync()`]}function fS(){if(Kq!==void 0)return Kq;let Y=(process.env.PATH??"").split(":").filter(Boolean);return Kq=zS.find((Z)=>Y.some((X)=>ey(sH(X,Z))))??null,Kq}async function qS(){return b4??=(async()=>{JS(N4,{recursive:!0});let J=sH(N4,ZS(I4)),Y=Bun.file(J);if(await Y.exists())return J;return await Bun.write(Y,Bun.file(I4)),J})(),b4}function T4(J=0.4){let Y=fS();if(!Y)return;qS().then((Z)=>{try{Bun.spawn(QS(Y,Z,J),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var I4,N4,zS,Kq,b4;var E4=S(()=>{k4();I4=XS(Vq)?Vq:GS(import.meta.dir,Vq),N4=sH(YS(),"kobe-sfx"),zS=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function u4(J,Y){return`${J}:${Y}`}function w4(J){let Y=FG(),[Z,X]=p([]),[G,z]=p(new Map),f=0;function q(H){if(z((U)=>{let L=new Map(U),F=u4(H.taskId,H.tabId),D=U.get(F);if(D==="needs_input"||D==="error")return U;return L.set(F,H.kind),L}),Y.get("notifications.sound.enabled",!0)!==!1){try{process.stdout.write("\x07")}catch{}T4()}if(Y.get("notifications.toast.enabled",!0)!==!1){let U=++f,L={id:U,kind:H.kind,taskId:H.taskId,tabId:H.tabId,title:H.title};X((F)=>[...F,L]),setTimeout(()=>B(U),BS)}}function B(H){X((U)=>U.filter((L)=>L.id!==H))}function j(H,U){z((L)=>{let F=u4(H,U);if(!L.has(F))return L;let D=new Map(L);return D.delete(F),D})}let K={toasts:Z,unread:G,notify:q,dismiss:B,markRead:j};return I(x4.Provider,{value:K,get children(){return J.children}})}function Uq(){let J=NJ(x4);if(!J)throw Error("useNotifications must be used within a NotificationsProvider");return J}var BS=4500,x4;var Lq=S(()=>{w();B1();E4();Iz();x4=FY()});function tH(J,Y){if(typeof Y.theme==="string"&&Y.theme.length>0&&Y.theme!==J.selectedTheme()){if(!J.hasTheme(Y.theme))J.reloadUserThemes();if(J.hasTheme(Y.theme))J.setTheme(Y.theme)}if(typeof Y.transparentBackground==="boolean"&&Y.transparentBackground!==J.transparentBackground())J.setTransparentBackground(Y.transparentBackground);if(Y.focusAccent===null||typeof Y.focusAccent==="string"){let Z=HS(Y.focusAccent);if(Z&&Z!==J.focusAccent())J.setFocusAccent(Z)}}function HS(J){if(J===null)return"primary";return jS.includes(J)?J:null}var jS;var h4=S(()=>{jS=["primary","success","info"]});import{readFileSync as WS}from"fs";function P4(J){try{let Y=JSON.parse(WS(xJ(),"utf8")),Z=typeof Y.activeTheme==="string"&&Rz(Y.activeTheme)?Y.activeTheme:J,X=Y.transparentBackground===!0,G=typeof Y.focusAccent==="string"&&MX.includes(Y.focusAccent)?Y.focusAccent:null;return{theme:Z,transparent:X,focusAccent:G}}catch{return{theme:J,transparent:!1,focusAccent:null}}}var v4=S(()=>{n1();u1()});function KS(J){if(J)VQ(J);Wq();for(let{name:Y,theme:Z}of Gz())vH(Y,Z)}function US(J){let Y={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return J?{...Y,onDestroy:J}:Y}function LS(J){let Y=()=>J.children,Z=()=>J.notifications?I(w4,{get children(){return Y()}}):Y(),X=()=>I(aK,{get children(){return Z()}}),G=()=>J.focus?I(O4,{initial:"sidebar",get children(){return X()}}):X(),z=()=>J.kv?I(S4,{get children(){return G()}}):G();return I(nK,{mode:"dark",get theme(){return J.theme},get children(){return z()}})}function DS(J){let Y=v0(),Z={selectedTheme:()=>Y.selected,hasTheme:(q)=>Y.has(q),setTheme:(q)=>Y.set(q),reloadUserThemes:()=>{for(let{name:q,theme:B}of Gz())vH(q,B)},transparentBackground:()=>Y.transparentBackground,setTransparentBackground:(q)=>Y.setTransparentBackground(q),focusAccent:()=>Y.focusAccent,setFocusAccent:(q)=>Y.setFocusAccent(q)};tH(Z,{theme:J.boot.theme,transparentBackground:J.boot.transparent,focusAccent:J.boot.focusAccent});let[X,G]=p(null),z=!1;s1(()=>{(async()=>{let q=await M4({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!q)return;if(z){q.dispose();return}G(q)})()}),s0(()=>{let q=X()?.uiPrefsSignal()();if(q)tH(Z,q)});let f=null;return s0(()=>{let q=X()?.keybindingsRevSignal()();if(q==null)return;if(f===null||q===f){f=q;return}f=q,y4()}),P1(()=>{z=!0,X()?.dispose()}),null}async function WJ(J){KS(J.logContext);let Y=P4(VS),Z=await J.setup(Y),X=J.providers?.kv??!0,G=J.providers?.focus??!0,z=J.providers?.notifications??!1;await wK(()=>I(LS,{get theme(){return Y.theme},kv:X,focus:G,notifications:z,get children(){return[I(DS,{boot:Y}),Y1(()=>Z.root())]}}),US(Z.onDestroy))}var VS="claude";var uZ=S(()=>{w();w();w();$Z();B1();F4();A4();oH();Iz();Lq();u1();Lf();uJ();h4();v4()});async function eH(J,Y,Z,X,G={}){let z=K1(Y.id);if(await f1(z))return!0;let f=Y.worktreePath;if(!f)f=await J.ensureWorktree(Y.id);if(!f)throw Error(`task ${Y.id} has no worktree`);let{ensureSession:q}=await Promise.resolve().then(() => (t1(),iJ)),{resolveEngineLaunchInit:B}=await Promise.resolve().then(() => (tX(),Rj)),j=B(Z,f,{kind:G.includeInitPrompt?"repo-init":"none"});if(!await q({name:z,cwd:f,command:RJ(X),taskId:Y.id,vendor:X,repo:Z,launchInit:j}))throw Error(`failed to start tmux session for ${Y.id}`);return!1}async function Dq(J,Y,Z,X,G={}){await eH(J,Y,Z,X,G),await J.setActiveTask(Y.id).catch(()=>{});let{prepareWindowForSwitch:z}=await Promise.resolve().then(() => (t1(),iJ));await z(K1(Y.id)),await u0(["switch-client","-t",`=${K1(Y.id)}`])}var JW=S(()=>{bJ();N1()});var m4={};q1(m4,{startNewTaskHost:()=>MS,NewTaskPage:()=>Mq});function Mq(J){let{theme:Y}=v0(),Z=h1();s1(()=>{X()});async function X(){let G=wJ(),z=J.defaultRepo||G[0]||process.cwd(),f=g1("lastSelectedVendor")??k1,q=await mY(),B=J.orchestrator,j=await Bq.show(Z,z,G,{defaultVendor:f,availableVendors:q,discoverAdoptable:B?(H)=>B.discoverAdoptableWorktrees(H):void 0});if(!j)process.exit(0);if(i1("lastSelectedVendor",j.vendor),xY(j.repo),!B)console.error("[kobe new-task] no daemon; cannot create task"),process.exit(1);let K;try{if(j.mode==="adopt")for(let H of j.adopt)K=await B.adoptWorktree({repo:j.repo,worktreePath:H.worktreePath,branch:H.branch,vendor:j.vendor});else K=await B.createTask({repo:j.repo,baseRef:j.baseRef,vendor:j.vendor})}catch(H){console.error("[kobe new-task] task.create/adopt failed:",H),process.exit(1)}if(K)try{await Dq(B,K,j.repo,j.vendor,{includeInitPrompt:j.mode!=="adopt"})}catch(H){console.error("[kobe new-task] auto-enter failed:",H)}process.exit(0)}return(()=>{var G=V("box");return Q(G,"flexDirection","column"),Q(G,"flexGrow",1),x((z)=>Q(G,"backgroundColor",Y.background,z)),G})()}async function MS(J){await WJ({setup:async()=>{let Y=null;try{let Z=await HY(),X=new QJ(Z);await X.init(),Y=X}catch(Z){console.error("[kobe new-task] daemon unavailable; cannot create task:",Z)}return{root:()=>I(Mq,{get defaultRepo(){return J.defaultRepo},orchestrator:Y}),onDestroy:()=>{Y?.dispose()}}}})}var YW=S(()=>{w();w();w();w();CJ();B1();IZ();aZ();O1();SJ();kz();u1();uZ();JW();uJ()});function Fq(J,Y,Z,X,G={}){if(J.length===0)return Y;let z=new Map;for(let B of J)z.set(Z(B),B);let f=J.length===Y.length,q=Array(Y.length);for(let B=0;B<Y.length;B++){let j=Y[B],K=z.get(Z(j));if(K&&X(K,j)&&(!G.samePosition||J[B]===K)){if(q[B]=K,f&&J[B]!==K)f=!1}else q[B]=j,f=!1}return f?J:q}function c4(J,Y){if(!J)return!0;let Z=J.toLowerCase(),X=Y.toLowerCase(),G=0;for(let z=0;z<X.length&&G<Z.length;z++)if(X.charCodeAt(z)===Z.charCodeAt(G))G++;return G===Z.length}function FS(J,Y){let Z=Y==="archived";return J.filter((X)=>X.archived===Z)}function ZW(J,Y,Z,X="default",G){let z=FS(J,Y),f=Z?.trim()??"",q=G?aJ(G):null,B=f?z.filter((D)=>c4(f,`${D.title} ${KY(D.repo)}`)):z,j=[],K=[],H=[],U=new Set;for(let D of B){if(D.kind==="main"){let A=aJ(D.repo);if(U.has(A))continue;U.add(A),j.push(D);continue}if(q&&aJ(D.repo)!==q)continue;if(D.pinned===!0)K.push(D);else H.push(D)}if(j.sort((D,A)=>KY(D.repo).localeCompare(KY(A.repo))),X==="recent")K.sort(d4),H.sort(d4);let L=[],F=0;for(let D of j)L.push({kind:"task",task:D,flatIndex:F}),F++;for(let D of K)L.push({kind:"task",task:D,flatIndex:F}),F++;for(let D of H)L.push({kind:"task",task:D,flatIndex:F}),F++;return L}function d4(J,Y){let Z=n4(Y)-n4(J);if(Z!==0)return Z;return String(Y.id).localeCompare(String(J.id))}function n4(J){let Y=Date.parse(J.updatedAt||J.createdAt);return Number.isFinite(Y)?Y:0}function KY(J){let Y=J.split("/").filter(Boolean);return Y[Y.length-1]??J}function aJ(J){return J.trim().replace(/[\\/]+$/,"")||J}function OS(J,Y){let Z=KY(J);if(!Y.some((G)=>G!==J&&KY(G)===Z))return Z;return J.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function i4(J,Y){let Z=Y==="archived",X=new Map;for(let z of J){let f=aJ(z.repo),q=X.get(f)??{repo:z.repo,count:0};if(z.kind==="main")q.repo=z.repo;else if(z.archived===Z)q.count+=1;X.set(f,q)}let G=[...X.values()].map((z)=>z.repo);return[...X.values()].map((z)=>({repo:z.repo,label:OS(z.repo,G),count:z.count})).sort((z,f)=>z.label.localeCompare(f.label))}function l4(J,Y){if(J.length===0)return-1;if(!Y)return J[0]?.flatIndex??-1;let Z=aJ(Y),X=J.find((z)=>z.task.kind!=="main"&&aJ(z.task.repo)===Z);if(X)return X.flatIndex;return J.find((z)=>z.task.kind==="main"&&aJ(z.task.repo)===Z)?.flatIndex??J[0]?.flatIndex??-1}function XW(J){return J.map((Y)=>Y.task.id)}function $4(J){let Y=[],Z=[];for(let X of J)if(X.task.kind==="main")Y.push(X);else Z.push(X);return{projectRows:Y,taskRows:Z}}function AS(J,Y){return J===Y||J.id===Y.id&&J.kind===Y.kind&&J.title===Y.title&&J.repo===Y.repo&&J.branch===Y.branch&&J.worktreePath===Y.worktreePath&&J.status===Y.status&&J.archived===Y.archived&&J.pinned===Y.pinned&&J.vendor===Y.vendor}function a4(J,Y){return Fq(J,Y,(Z)=>Z.task.id,(Z,X)=>Z.flatIndex===X.flatIndex&&AS(Z.task,X.task),{samePosition:!0})}var Oq=()=>{};var p4={};q1(p4,{startQuickTaskHost:()=>yS});async function RS(J,Y){let Z,X;if(Y){let H=await OJ(Y,["@kobe_task","@kobe_worktree"]);Z=H["@kobe_task"]||void 0,X=H["@kobe_worktree"]||void 0}let G=(Z?J?.getTask(Z)?.repo:void 0)??wJ()[0],z=G??X??process.cwd();if(!G)return{ctx:null,fallbackRepo:z};let f=await mY(),q=g1("lastSelectedVendor")??k1,B=f.length===0||f.includes(q)?q:f[0]??q,j=Cz(fJ(G))??VY,K=f.length>0?f:[B];return{ctx:{repo:G,vendor:B,baseRef:j,engines:K},fallbackRepo:z}}async function CS(J,Y,Z,X,G){let z=await eH(J,Y,Z,X),f=K1(Y.id),{pane:q}=await Zz(f,!z);if(q)await Xz(q,G)}function gS(J){let{theme:Y}=v0(),Z=h1();s1(()=>{X()});async function X(){let G=J.ctx,z=await L4.show(Z,{repoLabel:KY(G.repo),engines:G.engines,defaultVendor:G.vendor,defaultBaseRef:G.baseRef,engineLabel:XX});if(z===void 0)process.exit(0);i1("lastSelectedVendor",z.vendor),xY(G.repo);let f=J.orchestrator;if(!f)console.error("[kobe quick-task] no daemon; cannot create task"),process.exit(1);try{let q=await f.createTask({repo:G.repo,baseRef:z.baseRef,vendor:z.vendor});await CS(f,q,G.repo,z.vendor,z.prompt),await Dq(f,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=V("box");return Q(G,"flexDirection","column"),Q(G,"flexGrow",1),x((z)=>Q(G,"backgroundColor",Y.background,z)),G})()}async function yS(J){await WJ({setup:async()=>{let Y=null;try{let G=await HY(),z=new QJ(G);await z.init(),Y=z}catch(G){console.error("[kobe quick-task] daemon unavailable; cannot create task:",G)}let{ctx:Z,fallbackRepo:X}=await RS(Y,J.session);return{root:()=>Z?I(gS,{ctx:Z,orchestrator:Y}):I(Mq,{defaultRepo:X,orchestrator:Y}),onDestroy:()=>{Y?.dispose()}}}})}var _4=S(()=>{w();w();w();w();CJ();B1();IZ();aZ();bJ();O1();N1();Vf();SJ();D4();u1();zq();uZ();fq();JW();YW();Oq();uJ()});function Rq(J){let Y=J.trim().split(/\s+/).pop()??"",Z=/^([CM])-(.+)$/.exec(Y);if(!Z)return null;let X=Z[1]==="C"?"\u2303":"\u2325",G=Z[2]??"";return`${X}${G.length===1?G.toUpperCase():G}`}function Aq(J,Y){if(J.includes("/"))return J.split("/").map((G)=>Aq(G,Y)).join("/");let Z=J.toLowerCase();if(Z==="tab")return"tab";let X=kS[Z];if(X)return X;if(/^f\d{1,2}$/.test(Z))return Z.toUpperCase();if(!Y)return J;if(/^[a-z]$/.test(Z))return J.toUpperCase();return J.replace(/[a-z]+/gi,(G)=>G.toUpperCase())}function OG(J,Y="\u2303B"){let Z=J.trim();if(!Z)return Z;let X=/^prefix\s+(.+)$/i.exec(Z);if(X){let q=X[1]??"";return`${Y} ${q.includes("+")?OG(q,Y):Aq(q,!0)}`}let G=Z.split("+");if(G.length===1)return Aq(G[0]??"",!1);let z=G[G.length-1]??"";return`${G.slice(0,-1).map((q)=>SS[q.toLowerCase().trim()]??q).join("")} ${Aq(z,!0)}`}var SS,kS;var GW=S(()=>{SS={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},kS={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 r4}from"@opentui/core";function IS(J){let Y=new Map,Z=[];for(let X of J){if(!Y.has(X.category))Y.set(X.category,[]),Z.push(X.category);Y.get(X.category).push(X)}return Z.map((X)=>({category:X,rows:Y.get(X)}))}function AG(J={}){let Y=h1(),{theme:Z}=v0(),X=()=>IS(bZ),G=()=>J.onClose?J.onClose():Y.clear(),[z,f]=p("\u2303B");return s1(()=>{c0(["show-options","-g","prefix"]).then(({code:q,stdout:B})=>{if(q!==0)return;let j=Rq(B);if(j)f(j)})}),L1(()=>({bindings:[{key:"?",cmd:G}]})),(()=>{var q=V("box"),B=V("box"),j=V("text"),K=V("text"),H=V("scrollbox"),U=V("box");return W(q,B),W(q,H),Q(q,"paddingLeft",2),Q(q,"paddingRight",2),Q(q,"gap",1),Q(q,"flexShrink",1),W(B,j),W(B,K),Q(B,"flexDirection","row"),Q(B,"justifyContent","space-between"),Q(B,"flexShrink",0),W(j,T("kobe \u2014 keybindings")),W(K,T("esc")),Q(K,"onMouseUp",G),W(H,U),Q(H,"flexShrink",1),Q(H,"flexGrow",1),Q(H,"stickyScroll",!1),Q(U,"paddingBottom",1),Q(U,"gap",1),Q(U,"paddingRight",1),M(U,I(X1,{get each(){return X()},children:(L)=>(()=>{var F=V("box"),D=V("text");return W(F,D),Q(F,"gap",0),M(D,()=>L.category),M(F,I(X1,{get each(){return L.rows},children:(A)=>{let R=A.hint?.keys??A.keys[0]??"\u2014",l=()=>R==="\u2014"?"\u2014":OG(R,z()),g=()=>(A.hint?A.keys:A.keys.slice(1)).map((k)=>OG(k,z()));return(()=>{var k=V("box"),C=V("box"),N=V("text"),_=V("box"),X0=V("text");return W(k,C),W(k,_),Q(k,"flexDirection","row"),Q(k,"gap",2),Q(k,"paddingLeft",1),W(C,N),Q(C,"width",14),M(N,l),W(_,X0),Q(_,"flexGrow",1),M(X0,()=>A.description),M(k,(()=>{var s=Y1(()=>g().length>0);return()=>s()?(()=>{var Y0=V("box"),u=V("text");return W(Y0,u),M(u,()=>`(${g().join(", ")})`),x((Q0)=>Q(u,"fg",Z.textMuted,Q0)),Y0})():null})(),null),x((s)=>{var{primary:Y0,text:u}=Z;return Y0!==s.e&&(s.e=Q(N,"fg",Y0,s.e)),u!==s.t&&(s.t=Q(X0,"fg",u,s.t)),s},{e:void 0,t:void 0}),k})()}}),null),x((A)=>{var R=Z.accent,l=r4.BOLD;return R!==A.e&&(A.e=Q(D,"fg",R,A.e)),l!==A.t&&(A.t=Q(D,"attributes",l,A.t)),A},{e:void 0,t:void 0}),F})()})),x((L)=>{var F=r4.BOLD,D=Z.text,A=Z.textMuted,R={trackOptions:{backgroundColor:Z.backgroundDialog,foregroundColor:Z.borderActive}};return F!==L.e&&(L.e=Q(j,"attributes",F,L.e)),D!==L.t&&(L.t=Q(j,"fg",D,L.t)),A!==L.a&&(L.a=Q(K,"fg",A,L.a)),R!==L.o&&(L.o=Q(H,"verticalScrollbarOptions",R,L.o)),L},{e:void 0,t:void 0,a:void 0,o:void 0}),q})()}var zW=S(()=>{w();w();w();w();w();w();w();w();B1();N1();MG();u1();GW();gJ();uJ();AG.show=(J)=>{J.replace(()=>I(AG,{}))}});import{TextAttributes as NS}from"@opentui/core";function o4(J){let Y=h1(),{theme:Z}=v0(),[X,G]=p(J.currentTitle);function z(){let f=X().trim();if(!f&&!J.allowEmpty)return;J.onSubmit(f),Y.clear()}return(()=>{var f=V("box"),q=V("box"),B=V("text"),j=V("text"),K=V("box"),H=V("text"),U=V("input"),L=V("box"),F=V("text");return W(f,q),W(f,K),W(f,L),Q(f,"paddingLeft",2),Q(f,"paddingRight",2),Q(f,"gap",1),W(q,B),W(q,j),Q(q,"flexDirection","row"),Q(q,"justifyContent","space-between"),M(B,()=>J.dialogTitle??"Rename task"),W(j,T("esc")),Q(j,"onMouseUp",()=>J.onCancel()),W(K,H),W(K,U),Q(K,"gap",0),M(H,()=>J.fieldLabel??"title"),Q(U,"focused",!0),Q(U,"onInput",(D)=>G(yJ(D))),Q(U,"onSubmit",()=>z()),W(L,F),Q(L,"paddingBottom",1),M(F,()=>`enter ${J.submitLabel??"rename"} \xB7 esc cancel`),x((D)=>{var A=NS.BOLD,R=Z.text,l=Z.textMuted,g=Z.accent,k=X(),C=J.placeholder??J.currentTitle,N=Z.textMuted;return A!==D.e&&(D.e=Q(B,"attributes",A,D.e)),R!==D.t&&(D.t=Q(B,"fg",R,D.t)),l!==D.a&&(D.a=Q(j,"fg",l,D.a)),g!==D.o&&(D.o=Q(H,"fg",g,D.o)),k!==D.i&&(D.i=Q(U,"value",k,D.i)),C!==D.n&&(D.n=Q(U,"placeholder",C,D.n)),N!==D.s&&(D.s=Q(F,"fg",N,D.s)),D},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),f})()}var s4=S(()=>{w();w();w();w();w();w();w();B1();u1();uJ();kz()});function bS(J,Y,Z={}){return new Promise((X)=>{J.replace(()=>I(o4,{currentTitle:Y,get dialogTitle(){return Z.dialogTitle},get fieldLabel(){return Z.fieldLabel},get submitLabel(){return Z.submitLabel},get placeholder(){return Z.placeholder},get allowEmpty(){return Z.allowEmpty},onSubmit:(G)=>X(G),onCancel:()=>X(void 0)}),()=>X(void 0))})}var UY;var QW=S(()=>{w();s4();UY={show:bS}});import{TextAttributes as TS}from"@opentui/core";function ES(J){if(!J)return J;return J.charAt(0).toUpperCase()+J.slice(1)}function sY(J){let Y=h1(),{theme:Z}=v0(),[X,G]=NZ({active:J.initialActive??"confirm"});return L1(()=>({bindings:[{key:"return",cmd:()=>{if(X.active==="confirm")J.onConfirm?.();if(X.active==="cancel")J.onCancel?.();Y.clear()}},{key:"left",cmd:()=>G("active",X.active==="confirm"?"cancel":"confirm")},{key:"right",cmd:()=>G("active",X.active==="confirm"?"cancel":"confirm")}]})),(()=>{var z=V("box"),f=V("box"),q=V("text"),B=V("text"),j=V("text"),K=V("box");return W(z,f),W(z,j),W(z,K),Q(z,"paddingLeft",2),Q(z,"paddingRight",2),Q(z,"paddingBottom",1),Q(z,"gap",0),W(f,q),W(f,B),Q(f,"flexDirection","row"),Q(f,"justifyContent","space-between"),M(q,()=>J.title),W(B,T("esc")),Q(B,"onMouseUp",()=>Y.clear()),M(j,()=>J.message),Q(K,"flexDirection","row"),Q(K,"justifyContent","flex-end"),Q(K,"paddingTop",1),M(K,I(X1,{each:["cancel","confirm"],children:(H)=>(()=>{var U=V("box"),L=V("text");return W(U,L),Q(U,"paddingLeft",1),Q(U,"paddingRight",1),Q(U,"onMouseUp",()=>{if(H==="confirm")J.onConfirm?.();if(H==="cancel")J.onCancel?.();Y.clear()}),M(L,()=>ES(H==="cancel"?J.label??H:J.confirmLabel??H)),x((F)=>{var D=H===X.active?Z.primary:void 0,A=H===X.active?Z.selectedListItemText:Z.textMuted;return D!==F.e&&(F.e=Q(U,"backgroundColor",D,F.e)),A!==F.t&&(F.t=Q(L,"fg",A,F.t)),F},{e:void 0,t:void 0}),U})()})),x((H)=>{var U=TS.BOLD,L=Z.text,F=Z.textMuted,D=Z.textMuted;return U!==H.e&&(H.e=Q(q,"attributes",U,H.e)),L!==H.t&&(H.t=Q(q,"fg",L,H.t)),F!==H.a&&(H.a=Q(B,"fg",F,H.a)),D!==H.o&&(H.o=Q(j,"fg",D,H.o)),H},{e:void 0,t:void 0,a:void 0,o:void 0}),z})()}var fW=S(()=>{w();w();w();w();w();w();w();B1();Az();u1();gJ();uJ();sY.show=(J,Y,Z,X,G,z)=>{return new Promise((f)=>{J.replace(()=>I(sY,{title:Y,message:Z,onConfirm:()=>f(!0),onCancel:()=>f(!1),label:X,confirmLabel:G,get initialActive(){return z?.initialActive}}),()=>f(void 0)),J.setSize("small")})}});import{unlinkSync as uS}from"fs";import{join as xS}from"path";function t4(J){return J instanceof QJ}function e4(J,Y){try{J?.destroy()}catch(Z){console.error(`kobe: renderer.destroy() failed during ${Y}:`,Z)}}async function qW(J,Y,Z){if(await sY.show(J,"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;Y.clear();try{uS(xS(DY(),".kobe","tasks.json"))}catch(G){if(G.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",G)}e4(Z,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
223
+ `),process.exit(0)}async function BW(J,Y,Z){if(!(Y instanceof QJ))return;if(await sY.show(J,"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(Z,"daemon restart"),process.stderr.write(`kobe: window closed. Relaunch kobe to start fresh.
224
+ `),process.exit(0)}var JU=S(()=>{IZ();n1();fW()});function wS(J){return`theme:${J}`}function jW(J){return`accent:${J}`}function hS(J){return`engine:${J}`}function Nz(J){return`surface:${J}`}function HW(J){return[...J.themeNames.map((Y)=>({id:wS(Y),kind:"theme",name:Y})),{id:"transparent",kind:"transparent"},...J.focusAccentSlots.map((Y)=>({id:jW(Y),kind:"focusAccent",slot:Y})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:"zen-keep-tasks",kind:"zenKeepTasks"},{id:Nz("chattab"),kind:"surface",surface:"chattab"},{id:Nz("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function PS(J){return[...J.map((Y)=>({id:hS(Y),kind:"engine",vendor:Y})),{id:"add-engine",kind:"engineAdd"}]}function vS(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function bz(J){return[{id:"dev-reset",kind:"devReset"},...J?[{id:"dev-restart",kind:"devRestartDaemon"}]:[],{id:"remote-projects",kind:"devRemoteProjects"},{id:"auto-status",kind:"devAutoStatus"},{id:"dispatcher",kind:"devDispatcher"}]}function ZU(J,Y){switch(J){case"general":return HW(Y);case"engines":return PS(Y.engineList);case"accounts":case"keys":return[];case"feedback":return vS();case"dev":return bz(Y.hasDaemon)}}function Tz(J,Y){return J.findIndex((Z)=>Z.id===Y)}function Cq(J,Y){return J[Y]}var OX,YU;var WW=S(()=>{OX=[{id:"general",label:"General"},{id:"engines",label:"Engines"},{id:"accounts",label:"Accounts"},{id:"keys",label:"Keybindings"},{id:"feedback",label:"Feedback"},{id:"dev",label:"Dev"}],YU={primary:"Primary (brand accent)",success:"Success (legacy green)",info:"Info (cool blue)"}});import{TextAttributes as $0}from"@opentui/core";function XU(J){let{theme:Y}=v0();return(()=>{var Z=V("box");return Q(Z,"flexDirection","column"),Q(Z,"flexShrink",0),Q(Z,"width",14),Q(Z,"gap",0),M(Z,I(X1,{each:OX,children:(X,G)=>{let z=()=>G()===J.cursor(),f=()=>z()&&J.level()==="sidebar";return(()=>{var q=V("box"),B=V("text");return W(q,B),Q(q,"paddingLeft",1),Q(q,"paddingRight",1),Q(q,"onMouseUp",()=>J.switchSection(X.id)),Q(B,"wrapMode","none"),M(B,()=>X.label),x((j)=>{var K=f()?Y.primary:void 0,H=f()?Y.selectedListItemText:z()?Y.accent:Y.textMuted,U=z()?$0.BOLD:void 0;return K!==j.e&&(j.e=Q(q,"backgroundColor",K,j.e)),H!==j.t&&(j.t=Q(B,"fg",H,j.t)),U!==j.a&&(j.a=Q(B,"attributes",U,j.a)),j},{e:void 0,t:void 0,a:void 0}),q})()}})),Z})()}function GU(J){let Y=v0(),{theme:Z}=Y,X=()=>HW({themeNames:J.themeNames(),focusAccentSlots:MX}),G=(C)=>Tz(X(),C),z=()=>G("transparent"),f=()=>G("toast"),q=()=>G("sound"),B=()=>G("zen-keep-tasks"),j=()=>G(Nz("chattab")),K=()=>G(Nz("taskpanel")),H=()=>G("editor-kind"),U=()=>G("editor-custom"),L=()=>J.bodyRow()===z(),F=()=>J.bodyRow()===f(),D=()=>J.bodyRow()===q(),A=()=>J.bodyRow()===B(),R=()=>J.bodyRow()===j(),l=()=>J.bodyRow()===K(),g=()=>J.bodyRow()===H(),k=()=>J.bodyRow()===U();return(()=>{var C=V("box"),N=V("text"),_=V("text"),X0=V("box"),s=V("box"),Y0=V("text"),u=V("text"),Q0=V("box"),t=V("text"),j0=V("box"),S0=V("text"),$=V("text"),P=V("box"),G0=V("text"),Z0=V("text"),K0=V("box"),h=V("text"),y=T(" Toast"),e=V("box"),V0=V("text"),q0=T(" Sound"),A0=V("box"),I0=V("text"),k0=V("text"),a0=V("box"),v=V("text"),H0=T(" Keep Tasks pane in zen mode"),o=V("box"),R0=V("text"),b0=V("text"),w0=V("box"),N0=V("text"),d=T(" ChatTab (separate page)"),J0=V("box"),F0=V("text"),d0=T(" Task panel (in-pane overlay)"),r0=V("box"),x0=V("text"),e0=V("text"),G1=V("box"),F1=V("text"),a=V("box"),r=V("text");return W(C,N),W(C,_),W(C,X0),W(C,s),W(C,j0),W(C,P),W(C,A0),W(C,o),W(C,r0),Q(C,"flexDirection","column"),Q(C,"gap",1),W(N,T("Theme")),W(_,T("l to enter list \xB7 j/k to highlight \xB7 enter to apply")),Q(X0,"flexDirection","column"),Q(X0,"gap",0),M(X0,I(X1,{get each(){return J.themeNames()},children:(O,L0)=>{let f0=()=>J.level()==="body"&&J.bodyRow()===L0(),n0=()=>O===Y.selected;return(()=>{var M0=V("box"),m0=V("text");return W(M0,m0),Q(M0,"flexDirection","row"),Q(M0,"gap",1),Q(M0,"paddingLeft",1),Q(M0,"paddingRight",1),Q(M0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(L0()),J.setThemeCursor(L0()),J.selectTheme(O)}),Q(m0,"wrapMode","none"),M(m0,()=>n0()?"\u25CF ":" ",null),M(m0,O,null),x((D0)=>{var E0=f0()?Z.primary:void 0,z1=f0()?Z.selectedListItemText:n0()?Z.accent:Z.text,p0=f0()||n0()?$0.BOLD:void 0;return E0!==D0.e&&(D0.e=Q(M0,"backgroundColor",E0,D0.e)),z1!==D0.t&&(D0.t=Q(m0,"fg",z1,D0.t)),p0!==D0.a&&(D0.a=Q(m0,"attributes",p0,D0.a)),D0},{e:void 0,t:void 0,a:void 0}),M0})()}})),W(s,Y0),W(s,u),W(s,Q0),Q(s,"flexDirection","column"),Q(s,"gap",0),Q(s,"paddingTop",1),W(Y0,T("Transparent background")),W(u,T("Drops the renderer's bg fill so the host terminal shows through. `t` toggles.")),Q(u,"wrapMode","word"),W(Q0,t),Q(Q0,"flexDirection","row"),Q(Q0,"paddingLeft",1),Q(Q0,"paddingRight",1),Q(Q0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(z()),J.toggleTransparent()}),Q(t,"wrapMode","none"),M(t,()=>Y.transparentBackground?"[x] on":"[ ] off"),W(j0,S0),W(j0,$),Q(j0,"flexDirection","column"),Q(j0,"gap",0),Q(j0,"paddingTop",1),W(S0,T("Focus accent")),W($,T("Color of focused pane title, \u258C marker, and split borders.")),Q($,"wrapMode","word"),M(j0,I(X1,{each:MX,children:(O)=>{let L0=()=>G(jW(O)),f0=()=>J.level()==="body"&&J.bodyRow()===L0(),n0=()=>Y.focusAccent===O;return(()=>{var M0=V("box"),m0=V("text");return W(M0,m0),Q(M0,"flexDirection","row"),Q(M0,"gap",1),Q(M0,"paddingLeft",1),Q(M0,"paddingRight",1),Q(M0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(L0()),J.selectFocusAccent(O)}),Q(m0,"wrapMode","none"),M(m0,()=>n0()?"\u25CF ":" ",null),M(m0,()=>YU[O],null),x((D0)=>{var E0=f0()?Z.primary:void 0,z1=f0()?Z.selectedListItemText:n0()?Z.focusAccent:Z.text,p0=f0()||n0()?$0.BOLD:void 0;return E0!==D0.e&&(D0.e=Q(M0,"backgroundColor",E0,D0.e)),z1!==D0.t&&(D0.t=Q(m0,"fg",z1,D0.t)),p0!==D0.a&&(D0.a=Q(m0,"attributes",p0,D0.a)),D0},{e:void 0,t:void 0,a:void 0}),M0})()}}),null),W(P,G0),W(P,Z0),W(P,K0),W(P,e),Q(P,"flexDirection","column"),Q(P,"gap",0),Q(P,"paddingTop",1),W(G0,T("Notifications")),W(Z0,T("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.")),Q(Z0,"wrapMode","word"),W(K0,h),Q(K0,"flexDirection","row"),Q(K0,"gap",1),Q(K0,"paddingLeft",1),Q(K0,"paddingRight",1),Q(K0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(f()),J.toggleToast()}),W(h,y),Q(h,"wrapMode","none"),M(h,()=>J.toastEnabled()?"[x]":"[ ]",y),W(e,V0),Q(e,"flexDirection","row"),Q(e,"gap",1),Q(e,"paddingLeft",1),Q(e,"paddingRight",1),Q(e,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(q()),J.toggleSound()}),W(V0,q0),Q(V0,"wrapMode","none"),M(V0,()=>J.soundEnabled()?"[x]":"[ ]",q0),W(A0,I0),W(A0,k0),W(A0,a0),Q(A0,"flexDirection","column"),Q(A0,"gap",0),Q(A0,"paddingTop",1),W(I0,T("Zen mode")),W(k0,T("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.")),Q(k0,"wrapMode","word"),W(a0,v),Q(a0,"flexDirection","row"),Q(a0,"gap",1),Q(a0,"paddingLeft",1),Q(a0,"paddingRight",1),Q(a0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(B()),J.toggleZenKeepsTasks()}),W(v,H0),Q(v,"wrapMode","none"),M(v,()=>J.zenKeepsTasks()?"[x]":"[ ]",H0),W(o,R0),W(o,b0),W(o,w0),W(o,J0),Q(o,"flexDirection","column"),Q(o,"gap",0),Q(o,"paddingTop",1),W(R0,T("Settings page")),W(b0,T("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.")),Q(b0,"wrapMode","word"),W(w0,N0),Q(w0,"flexDirection","row"),Q(w0,"gap",1),Q(w0,"paddingLeft",1),Q(w0,"paddingRight",1),Q(w0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(j()),J.selectSurface("chattab")}),W(N0,d),Q(N0,"wrapMode","none"),M(N0,()=>J.settingsSurface()==="chattab"?"[x]":"[ ]",d),W(J0,F0),Q(J0,"flexDirection","row"),Q(J0,"gap",1),Q(J0,"paddingLeft",1),Q(J0,"paddingRight",1),Q(J0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(K()),J.selectSurface("taskpanel")}),W(F0,d0),Q(F0,"wrapMode","none"),M(F0,()=>J.settingsSurface()==="taskpanel"?"[x]":"[ ]",d0),W(r0,x0),W(r0,e0),W(r0,G1),W(r0,a),Q(r0,"flexDirection","column"),Q(r0,"gap",0),Q(r0,"paddingTop",1),W(x0,T("Editor")),W(e0,T("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.")),Q(e0,"wrapMode","word"),W(G1,F1),Q(G1,"flexDirection","row"),Q(G1,"gap",1),Q(G1,"paddingLeft",1),Q(G1,"paddingRight",1),Q(G1,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(H()),J.cycleEditorKind()}),Q(F1,"wrapMode","none"),M(F1,()=>`editor: < ${J.editorKind()} > (enter to change)`),W(a,r),Q(a,"flexDirection","row"),Q(a,"gap",1),Q(a,"paddingLeft",1),Q(a,"paddingRight",1),Q(a,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(U()),J.editEditorCustom()}),Q(r,"wrapMode","none"),M(r,()=>`custom: ${J.editorCustomCommand().trim()||"(unset \u2014 enter to edit)"}`),x((O)=>{var L0=Z.text,f0=$0.BOLD,n0=Z.textMuted,M0=Z.text,m0=$0.BOLD,D0=Z.textMuted,E0=L()?Z.primary:void 0,z1=L()?Z.selectedListItemText:Y.transparentBackground?Z.accent:Z.textMuted,p0=$0.BOLD,_0=Z.text,Z1=$0.BOLD,C1=Z.textMuted,g0=Z.text,c=$0.BOLD,C0=Z.textMuted,A1=F()?Z.primary:void 0,S1=F()?Z.selectedListItemText:J.toastEnabled()?Z.accent:Z.textMuted,H1=$0.BOLD,o0=D()?Z.primary:void 0,v1=D()?Z.selectedListItemText:J.soundEnabled()?Z.accent:Z.textMuted,b=$0.BOLD,W0=Z.text,h0=$0.BOLD,Q1=Z.textMuted,YJ=A()?Z.primary:void 0,qJ=A()?Z.selectedListItemText:J.zenKeepsTasks()?Z.accent:Z.textMuted,VJ=$0.BOLD,bY=Z.text,TY=$0.BOLD,KJ=Z.textMuted,RX=R()?Z.primary:void 0,tY=R()?Z.selectedListItemText:J.settingsSurface()==="chattab"?Z.accent:Z.textMuted,n=$0.BOLD,m=l()?Z.primary:void 0,i=l()?Z.selectedListItemText:J.settingsSurface()==="taskpanel"?Z.accent:Z.textMuted,E=$0.BOLD,O0=Z.text,T0=$0.BOLD,y0=Z.textMuted,P0=g()?Z.primary:void 0,D1=g()?Z.selectedListItemText:Z.accent,V1=$0.BOLD,ZJ=k()?Z.primary:void 0,pJ=k()?Z.selectedListItemText:J.editorKind()==="custom"?Z.text:Z.textMuted;return L0!==O.e&&(O.e=Q(N,"fg",L0,O.e)),f0!==O.t&&(O.t=Q(N,"attributes",f0,O.t)),n0!==O.a&&(O.a=Q(_,"fg",n0,O.a)),M0!==O.o&&(O.o=Q(Y0,"fg",M0,O.o)),m0!==O.i&&(O.i=Q(Y0,"attributes",m0,O.i)),D0!==O.n&&(O.n=Q(u,"fg",D0,O.n)),E0!==O.s&&(O.s=Q(Q0,"backgroundColor",E0,O.s)),z1!==O.h&&(O.h=Q(t,"fg",z1,O.h)),p0!==O.r&&(O.r=Q(t,"attributes",p0,O.r)),_0!==O.d&&(O.d=Q(S0,"fg",_0,O.d)),Z1!==O.l&&(O.l=Q(S0,"attributes",Z1,O.l)),C1!==O.u&&(O.u=Q($,"fg",C1,O.u)),g0!==O.c&&(O.c=Q(G0,"fg",g0,O.c)),c!==O.w&&(O.w=Q(G0,"attributes",c,O.w)),C0!==O.m&&(O.m=Q(Z0,"fg",C0,O.m)),A1!==O.f&&(O.f=Q(K0,"backgroundColor",A1,O.f)),S1!==O.y&&(O.y=Q(h,"fg",S1,O.y)),H1!==O.g&&(O.g=Q(h,"attributes",H1,O.g)),o0!==O.p&&(O.p=Q(e,"backgroundColor",o0,O.p)),v1!==O.b&&(O.b=Q(V0,"fg",v1,O.b)),b!==O.T&&(O.T=Q(V0,"attributes",b,O.T)),W0!==O.A&&(O.A=Q(I0,"fg",W0,O.A)),h0!==O.O&&(O.O=Q(I0,"attributes",h0,O.O)),Q1!==O.I&&(O.I=Q(k0,"fg",Q1,O.I)),YJ!==O.S&&(O.S=Q(a0,"backgroundColor",YJ,O.S)),qJ!==O.W&&(O.W=Q(v,"fg",qJ,O.W)),VJ!==O.C&&(O.C=Q(v,"attributes",VJ,O.C)),bY!==O.B&&(O.B=Q(R0,"fg",bY,O.B)),TY!==O.v&&(O.v=Q(R0,"attributes",TY,O.v)),KJ!==O.k&&(O.k=Q(b0,"fg",KJ,O.k)),RX!==O.x&&(O.x=Q(w0,"backgroundColor",RX,O.x)),tY!==O.j&&(O.j=Q(N0,"fg",tY,O.j)),n!==O.q&&(O.q=Q(N0,"attributes",n,O.q)),m!==O.z&&(O.z=Q(J0,"backgroundColor",m,O.z)),i!==O.P&&(O.P=Q(F0,"fg",i,O.P)),E!==O.H&&(O.H=Q(F0,"attributes",E,O.H)),O0!==O.F&&(O.F=Q(x0,"fg",O0,O.F)),T0!==O.M&&(O.M=Q(x0,"attributes",T0,O.M)),y0!==O.D&&(O.D=Q(e0,"fg",y0,O.D)),P0!==O.R&&(O.R=Q(G1,"backgroundColor",P0,O.R)),D1!==O.E&&(O.E=Q(F1,"fg",D1,O.E)),V1!==O.L&&(O.L=Q(F1,"attributes",V1,O.L)),ZJ!==O.N&&(O.N=Q(a,"backgroundColor",ZJ,O.N)),pJ!==O.G&&(O.G=Q(r,"fg",pJ,O.G)),O},{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}),C})()}function zU(J){let{theme:Y}=v0(),Z=()=>J.vendors.length;return(()=>{var X=V("box"),G=V("text"),z=V("text"),f=V("box"),q=V("box"),B=V("text");return W(X,G),W(X,z),W(X,f),Q(X,"flexDirection","column"),Q(X,"gap",1),W(G,T("Launch command")),W(z,T("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.")),Q(z,"wrapMode","word"),W(f,q),Q(f,"flexDirection","column"),Q(f,"gap",0),M(f,I(X1,{get each(){return J.vendors},children:(j,K)=>{let H=()=>J.level()==="body"&&J.bodyRow()===K();return(()=>{var U=V("box"),L=V("text"),F=V("text"),D=V("text");return W(U,L),W(U,F),W(U,D),Q(U,"flexDirection","row"),Q(U,"gap",1),Q(U,"paddingLeft",1),Q(U,"paddingRight",1),Q(U,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(K()),J.editEngine(j)}),Q(L,"wrapMode","none"),M(L,()=>J.isDefaultEngine(j)?"\u25CF":" "),Q(F,"wrapMode","none"),M(F,()=>J.displayName(j)),Q(D,"wrapMode","none"),M(D,()=>J.commandText(j),null),M(D,(()=>{var A=Y1(()=>!!J.isDefault(j));return()=>A()?" (default)":J.isCustom(j)?" (custom)":""})(),null),x((A)=>{var R=H()?Y.primary:void 0,l=H()?Y.selectedListItemText:Y.accent,g=$0.BOLD,k=H()?Y.selectedListItemText:Y.text,C=$0.BOLD,N=H()?Y.selectedListItemText:J.isDefault(j)?Y.textMuted:Y.accent;return R!==A.e&&(A.e=Q(U,"backgroundColor",R,A.e)),l!==A.t&&(A.t=Q(L,"fg",l,A.t)),g!==A.a&&(A.a=Q(L,"attributes",g,A.a)),k!==A.o&&(A.o=Q(F,"fg",k,A.o)),C!==A.i&&(A.i=Q(F,"attributes",C,A.i)),N!==A.n&&(A.n=Q(D,"fg",N,A.n)),A},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),U})()}}),q),W(q,B),Q(q,"flexDirection","row"),Q(q,"paddingLeft",1),Q(q,"paddingRight",1),Q(q,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(Z()),J.onAddEngine()}),W(B,T("+ Add engine")),Q(B,"wrapMode","none"),x((j)=>{var K=Y.text,H=$0.BOLD,U=Y.textMuted,L=J.level()==="body"&&J.bodyRow()===Z()?Y.primary:void 0,F=J.level()==="body"&&J.bodyRow()===Z()?Y.selectedListItemText:Y.primary;return K!==j.e&&(j.e=Q(G,"fg",K,j.e)),H!==j.t&&(j.t=Q(G,"attributes",H,j.t)),U!==j.a&&(j.a=Q(z,"fg",U,j.a)),L!==j.o&&(j.o=Q(q,"backgroundColor",L,j.o)),F!==j.i&&(j.i=Q(B,"fg",F,j.i)),j},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),X})()}function QU(J){let{theme:Y}=v0(),Z=(X)=>X.binary.found?`Binary: ${X.binary.path}`:`Binary: ${X.binary.error}`;return(()=>{var X=V("box"),G=V("text"),z=V("text"),f=V("box"),q=V("text"),B=V("box"),j=V("text"),K=V("box"),H=V("text");return W(X,G),W(X,z),W(X,f),W(X,B),W(X,K),Q(X,"flexDirection","column"),Q(X,"gap",1),W(G,T("Accounts")),W(z,T("Read-only view of locally-detected engine accounts. Login flows land here later.")),Q(z,"wrapMode","word"),W(f,q),Q(f,"flexDirection","column"),Q(f,"gap",0),W(q,T("claude-code")),M(f,I(z0,{get when(){return J.claudeStatus()===null},get children(){var U=V("text");return W(U,T("Checking\u2026")),x((L)=>Q(U,"fg",Y.textMuted,L)),U}}),null),M(f,I(z0,{get when(){return J.claudeStatus()},children:(U)=>(()=>{var L=V("box"),F=V("text");return W(L,F),Q(L,"flexDirection","column"),Q(L,"gap",0),Q(F,"wrapMode","word"),M(F,()=>Z(U())),M(L,()=>{let D=U().account;if(D.kind==="oauth"){let A=[D.organization,D.billingType].filter((R)=>!!R).join(" \xB7 ");return(()=>{var R=V("text");return Q(R,"wrapMode","word"),M(R,()=>`\u25CF Logged in: ${D.email}${A?` (${A})`:""}`),x((l)=>Q(R,"fg",Y.success,l)),R})()}return(()=>{var A=V("text");return W(A,T("\u25CB Not logged in")),x((R)=>Q(A,"fg",Y.textMuted,R)),A})()},null),M(L,I(z0,{get when(){return U().accountError},children:(D)=>(()=>{var A=V("text");return Q(A,"wrapMode","word"),M(A,()=>`! ${D()}`),x((R)=>Q(A,"fg",Y.warning,R)),A})()}),null),x((D)=>Q(F,"fg",U().binary.found?Y.textMuted:Y.warning,D)),L})()}),null),W(B,j),Q(B,"flexDirection","column"),Q(B,"gap",0),W(j,T("codex")),M(B,I(z0,{get when(){return J.codexStatus()===null},get children(){var U=V("text");return W(U,T("Checking\u2026")),x((L)=>Q(U,"fg",Y.textMuted,L)),U}}),null),M(B,I(z0,{get when(){return J.codexStatus()},children:(U)=>(()=>{var L=V("box"),F=V("text");return W(L,F),Q(L,"flexDirection","column"),Q(L,"gap",0),Q(F,"wrapMode","word"),M(F,()=>Z(U())),M(L,()=>{let D=U().account;if(D.kind==="chatgpt")return(()=>{var A=V("text");return Q(A,"wrapMode","word"),M(A,()=>`\u25CF ChatGPT login: ${D.email}${D.plan?` (${D.plan})`:""}`),x((R)=>Q(A,"fg",Y.success,R)),A})();if(D.kind==="apikey")return(()=>{var A=V("text");return W(A,T("\u25CF API key configured")),x((R)=>Q(A,"fg",Y.success,R)),A})();return(()=>{var A=V("text");return W(A,T("\u25CB Not logged in")),x((R)=>Q(A,"fg",Y.textMuted,R)),A})()},null),M(L,I(z0,{get when(){return U().accountError},children:(D)=>(()=>{var A=V("text");return Q(A,"wrapMode","word"),M(A,()=>`! ${D()}`),x((R)=>Q(A,"fg",Y.warning,R)),A})()}),null),x((D)=>Q(F,"fg",U().binary.found?Y.textMuted:Y.warning,D)),L})()}),null),W(K,H),Q(K,"flexDirection","column"),Q(K,"gap",0),W(H,T("copilot")),M(K,I(z0,{get when(){return J.copilotStatus()===null},get children(){var U=V("text");return W(U,T("Checking\u2026")),x((L)=>Q(U,"fg",Y.textMuted,L)),U}}),null),M(K,I(z0,{get when(){return J.copilotStatus()},children:(U)=>(()=>{var L=V("box"),F=V("text");return W(L,F),Q(L,"flexDirection","column"),Q(L,"gap",0),Q(F,"wrapMode","word"),M(F,()=>Z(U())),M(L,()=>{let D=U().account;if(D.kind==="token")return(()=>{var A=V("text");return M(A,()=>`\u25CF Token configured (${D.source})`),x((R)=>Q(A,"fg",Y.success,R)),A})();if(D.kind==="oauth")return(()=>{var A=V("text");return W(A,T("\u25CF Copilot login detected")),x((R)=>Q(A,"fg",Y.success,R)),A})();return(()=>{var A=V("text");return W(A,T("\u25CB Not logged in")),x((R)=>Q(A,"fg",Y.textMuted,R)),A})()},null),M(L,I(z0,{get when(){return U().accountError},children:(D)=>(()=>{var A=V("text");return Q(A,"wrapMode","word"),M(A,()=>`! ${D()}`),x((R)=>Q(A,"fg",Y.warning,R)),A})()}),null),x((D)=>Q(F,"fg",U().binary.found?Y.textMuted:Y.warning,D)),L})()}),null),x((U)=>{var L=Y.text,F=$0.BOLD,D=Y.textMuted,A=Y.text,R=$0.BOLD,l=Y.text,g=$0.BOLD,k=Y.text,C=$0.BOLD;return L!==U.e&&(U.e=Q(G,"fg",L,U.e)),F!==U.t&&(U.t=Q(G,"attributes",F,U.t)),D!==U.a&&(U.a=Q(z,"fg",D,U.a)),A!==U.o&&(U.o=Q(q,"fg",A,U.o)),R!==U.i&&(U.i=Q(q,"attributes",R,U.i)),l!==U.n&&(U.n=Q(j,"fg",l,U.n)),g!==U.s&&(U.s=Q(j,"attributes",g,U.s)),k!==U.h&&(U.h=Q(H,"fg",k,U.h)),C!==U.r&&(U.r=Q(H,"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}),X})()}function fU(J){let{theme:Y}=v0(),Z=()=>J.level()==="body"&&J.bodyRow()===0,X=()=>J.level()==="body"&&J.bodyRow()===1,G=()=>J.level()==="body"&&J.bodyRow()===2;return(()=>{var z=V("box"),f=V("text"),q=V("text"),B=V("box"),j=V("box"),K=V("text"),H=V("text"),U=V("box"),L=V("text"),F=V("text"),D=V("box"),A=V("text");return W(z,f),W(z,q),W(z,B),Q(z,"flexDirection","column"),Q(z,"gap",1),W(f,T("Feedback")),W(q,T("Sends a GitHub Discussion to the kobe repo through `gh`. Requires `gh auth login`; category defaults to Feedback.")),Q(q,"wrapMode","word"),W(B,j),W(B,U),W(B,D),Q(B,"flexDirection","column"),Q(B,"gap",0),W(j,K),W(j,H),Q(j,"flexDirection","row"),Q(j,"gap",1),Q(j,"paddingLeft",1),Q(j,"paddingRight",1),Q(j,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(0),J.editTitle()}),W(K,T("title")),Q(H,"wrapMode","none"),M(H,()=>J.title().trim()||"(enter to edit)"),W(U,L),W(U,F),Q(U,"flexDirection","row"),Q(U,"gap",1),Q(U,"paddingLeft",1),Q(U,"paddingRight",1),Q(U,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(1),J.editBody()}),W(L,T("body")),Q(F,"wrapMode","none"),M(F,()=>J.body().trim()||"(enter to edit)"),W(D,A),Q(D,"flexDirection","row"),Q(D,"paddingLeft",1),Q(D,"paddingRight",1),Q(D,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(2),J.submit()}),W(A,T("[enter] Send to GitHub Discussions")),M(z,I(z0,{get when(){return J.status()},get children(){var R=V("text");return Q(R,"wrapMode","word"),M(R,()=>J.status()),x((l)=>Q(R,"fg",J.status().startsWith("error:")?Y.warning:Y.success,l)),R}}),null),x((R)=>{var l=Y.text,g=$0.BOLD,k=Y.textMuted,C=Z()?Y.primary:void 0,N=Z()?Y.selectedListItemText:Y.text,_=$0.BOLD,X0=Z()?Y.selectedListItemText:Y.textMuted,s=X()?Y.primary:void 0,Y0=X()?Y.selectedListItemText:Y.text,u=$0.BOLD,Q0=X()?Y.selectedListItemText:Y.textMuted,t=G()?Y.primary:Y.backgroundElement,j0=G()?Y.selectedListItemText:Y.accent,S0=$0.BOLD;return l!==R.e&&(R.e=Q(f,"fg",l,R.e)),g!==R.t&&(R.t=Q(f,"attributes",g,R.t)),k!==R.a&&(R.a=Q(q,"fg",k,R.a)),C!==R.o&&(R.o=Q(j,"backgroundColor",C,R.o)),N!==R.i&&(R.i=Q(K,"fg",N,R.i)),_!==R.n&&(R.n=Q(K,"attributes",_,R.n)),X0!==R.s&&(R.s=Q(H,"fg",X0,R.s)),s!==R.h&&(R.h=Q(U,"backgroundColor",s,R.h)),Y0!==R.r&&(R.r=Q(L,"fg",Y0,R.r)),u!==R.d&&(R.d=Q(L,"attributes",u,R.d)),Q0!==R.l&&(R.l=Q(F,"fg",Q0,R.l)),t!==R.u&&(R.u=Q(D,"backgroundColor",t,R.u)),j0!==R.c&&(R.c=Q(A,"fg",j0,R.c)),S0!==R.w&&(R.w=Q(A,"attributes",S0,R.w)),R},{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}),z})()}function qU(J){let{theme:Y}=v0(),Z=()=>J.level()==="body"&&J.bodyRow()===0,X=()=>J.level()==="body"&&J.bodyRow()===1,G=()=>Tz(bz(J.hasDaemon),"remote-projects"),z=()=>J.level()==="body"&&J.bodyRow()===G(),f=()=>Tz(bz(J.hasDaemon),"auto-status"),q=()=>J.level()==="body"&&J.bodyRow()===f(),B=()=>Tz(bz(J.hasDaemon),"dispatcher"),j=()=>J.level()==="body"&&J.bodyRow()===B();return(()=>{var K=V("box"),H=V("text"),U=V("text"),L=V("box"),F=V("text"),D=V("text"),A=V("box"),R=V("text"),l=V("text"),g=V("box"),k=V("text"),C=V("text"),N=V("box"),_=V("text"),X0=V("text"),s=V("box"),Y0=V("text");return W(K,H),W(K,U),W(K,L),W(K,D),W(K,A),Q(K,"flexDirection","column"),Q(K,"gap",1),W(H,T("Reset UI state")),W(U,T("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.")),Q(U,"wrapMode","word"),W(L,F),Q(L,"flexDirection","row"),Q(L,"paddingLeft",1),Q(L,"paddingRight",1),Q(L,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(0),J.confirmReset()}),W(F,T("[enter] Reset")),M(K,I(z0,{get when(){return J.hasDaemon},get children(){var u=V("box"),Q0=V("text"),t=V("text"),j0=V("box"),S0=V("text");return W(u,Q0),W(u,t),W(u,j0),Q(u,"flexDirection","column"),Q(u,"gap",0),Q(u,"paddingTop",1),W(Q0,T("Restart backend")),W(t,T("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.")),Q(t,"wrapMode","word"),W(j0,S0),Q(j0,"flexDirection","row"),Q(j0,"paddingLeft",1),Q(j0,"paddingRight",1),Q(j0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(1),J.confirmRestartDaemon()}),W(S0,T("[enter] Restart")),x(($)=>{var P=Y.text,G0=$0.BOLD,Z0=Y.textMuted,K0=X()?Y.primary:Y.backgroundElement,h=X()?Y.selectedListItemText:Y.accent,y=$0.BOLD;return P!==$.e&&($.e=Q(Q0,"fg",P,$.e)),G0!==$.t&&($.t=Q(Q0,"attributes",G0,$.t)),Z0!==$.a&&($.a=Q(t,"fg",Z0,$.a)),K0!==$.o&&($.o=Q(j0,"backgroundColor",K0,$.o)),h!==$.i&&($.i=Q(S0,"fg",h,$.i)),y!==$.n&&($.n=Q(S0,"attributes",y,$.n)),$},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),u}}),D),W(D,T("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.")),Q(D,"wrapMode","word"),W(A,R),W(A,l),W(A,g),W(A,C),W(A,N),W(A,X0),W(A,s),Q(A,"flexDirection","column"),Q(A,"gap",0),Q(A,"paddingTop",1),W(R,T("Experimental")),W(l,T("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`.")),Q(l,"wrapMode","word"),W(g,k),Q(g,"flexDirection","row"),Q(g,"paddingLeft",1),Q(g,"paddingRight",1),Q(g,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(G()),J.toggleRemoteProjects()}),M(k,()=>J.remoteProjectsEnabled()?"[x] Remote projects (on)":"[ ] Remote projects (off)"),W(C,T("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.")),Q(C,"wrapMode","word"),W(N,_),Q(N,"flexDirection","row"),Q(N,"paddingLeft",1),Q(N,"paddingRight",1),Q(N,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(f()),J.toggleAutoStatus()}),M(_,()=>J.autoStatusEnabled()?"[x] Auto status flow (on)":"[ ] Auto status flow (off)"),W(X0,T("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.")),Q(X0,"wrapMode","word"),W(s,Y0),Q(s,"flexDirection","row"),Q(s,"paddingLeft",1),Q(s,"paddingRight",1),Q(s,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(B()),J.toggleDispatcher()}),M(Y0,()=>J.dispatcherEnabled()?"[x] Field-notes dispatcher (on)":"[ ] Field-notes dispatcher (off)"),x((u)=>{var Q0=Y.text,t=$0.BOLD,j0=Y.textMuted,S0=Z()?Y.primary:Y.backgroundElement,$=Z()?Y.selectedListItemText:Y.warning,P=$0.BOLD,G0=Y.textMuted,Z0=Y.text,K0=$0.BOLD,h=Y.textMuted,y=z()?Y.primary:Y.backgroundElement,e=z()?Y.selectedListItemText:Y.text,V0=J.remoteProjectsEnabled()?$0.BOLD:void 0,q0=Y.textMuted,A0=q()?Y.primary:Y.backgroundElement,I0=q()?Y.selectedListItemText:Y.text,k0=J.autoStatusEnabled()?$0.BOLD:void 0,a0=Y.textMuted,v=j()?Y.primary:Y.backgroundElement,H0=j()?Y.selectedListItemText:Y.text,o=J.dispatcherEnabled()?$0.BOLD:void 0;return Q0!==u.e&&(u.e=Q(H,"fg",Q0,u.e)),t!==u.t&&(u.t=Q(H,"attributes",t,u.t)),j0!==u.a&&(u.a=Q(U,"fg",j0,u.a)),S0!==u.o&&(u.o=Q(L,"backgroundColor",S0,u.o)),$!==u.i&&(u.i=Q(F,"fg",$,u.i)),P!==u.n&&(u.n=Q(F,"attributes",P,u.n)),G0!==u.s&&(u.s=Q(D,"fg",G0,u.s)),Z0!==u.h&&(u.h=Q(R,"fg",Z0,u.h)),K0!==u.r&&(u.r=Q(R,"attributes",K0,u.r)),h!==u.d&&(u.d=Q(l,"fg",h,u.d)),y!==u.l&&(u.l=Q(g,"backgroundColor",y,u.l)),e!==u.u&&(u.u=Q(k,"fg",e,u.u)),V0!==u.c&&(u.c=Q(k,"attributes",V0,u.c)),q0!==u.w&&(u.w=Q(C,"fg",q0,u.w)),A0!==u.m&&(u.m=Q(N,"backgroundColor",A0,u.m)),I0!==u.f&&(u.f=Q(_,"fg",I0,u.f)),k0!==u.y&&(u.y=Q(_,"attributes",k0,u.y)),a0!==u.g&&(u.g=Q(X0,"fg",a0,u.g)),v!==u.p&&(u.p=Q(s,"backgroundColor",v,u.p)),H0!==u.b&&(u.b=Q(Y0,"fg",H0,u.b)),o!==u.T&&(u.T=Q(Y0,"attributes",o,u.T)),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,w:void 0,m:void 0,f:void 0,y:void 0,g:void 0,p:void 0,b:void 0,T:void 0}),K})()}function BU(){let{theme:J}=v0(),Y=g4(),Z=Object.keys(gj).sort();return(()=>{var X=V("box"),G=V("text"),z=V("text"),f=V("box"),q=V("text"),B=V("text"),j=V("text"),K=V("text");return W(X,G),W(X,z),W(X,f),W(X,j),W(X,K),Q(X,"flexDirection","column"),Q(X,"gap",1),W(G,T("Keybindings")),W(z,T("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.")),Q(z,"wrapMode","word"),W(f,q),W(f,B),Q(f,"flexDirection","column"),Q(f,"gap",0),W(q,T("Config file")),Q(B,"wrapMode","word"),M(B,()=>Y.path,null),M(B,()=>Y.exists?"":" (not created yet)",null),M(X,I(z0,{get when(){return!Y.exists},get children(){var H=V("box"),U=V("text"),L=V("text"),F=V("text"),D=V("text"),A=V("text"),R=V("text"),l=V("text"),g=V("text"),k=V("text"),C=V("text");return W(H,U),W(H,L),W(H,F),W(H,D),W(H,A),W(H,R),W(H,l),W(H,g),W(H,k),W(H,C),Q(H,"flexDirection","column"),Q(H,"gap",0),W(U,T("Example")),W(L,T("bindings:")),W(F,T(" chat.fork.new: ctrl+g # string = one chord")),W(D,T(" sidebar.select: [enter] # list = several chords")),W(A,T(" files.createPR: null # null = unbind")),W(R,T(" tmux.tab.new: ctrl+y # tmux session key (see below)")),W(l,T(" tmux.layout.workspaceSplit: g # prefix g")),W(g,T("darwin: # platform overlay (also: linux)")),W(k,T(" bindings:")),W(C,T(" palette.open: [cmd+p, ctrl+p]")),x((N)=>{var _=J.text,X0=$0.BOLD,s=J.textMuted,Y0=J.textMuted,u=J.textMuted,Q0=J.textMuted,t=J.textMuted,j0=J.textMuted,S0=J.textMuted,$=J.textMuted,P=J.textMuted;return _!==N.e&&(N.e=Q(U,"fg",_,N.e)),X0!==N.t&&(N.t=Q(U,"attributes",X0,N.t)),s!==N.a&&(N.a=Q(L,"fg",s,N.a)),Y0!==N.o&&(N.o=Q(F,"fg",Y0,N.o)),u!==N.i&&(N.i=Q(D,"fg",u,N.i)),Q0!==N.n&&(N.n=Q(A,"fg",Q0,N.n)),t!==N.s&&(N.s=Q(R,"fg",t,N.s)),j0!==N.h&&(N.h=Q(l,"fg",j0,N.h)),S0!==N.r&&(N.r=Q(g,"fg",S0,N.r)),$!==N.d&&(N.d=Q(k,"fg",$,N.d)),P!==N.l&&(N.l=Q(C,"fg",P,N.l)),N},{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}),H}}),j),M(X,I(z0,{get when(){return Y.exists},get children(){var H=V("box"),U=V("text");return W(H,U),Q(H,"flexDirection","column"),Q(H,"gap",0),W(U,T("Overrides applied")),M(H,I(z0,{get when(){return Y.applied.length===0},get children(){var L=V("text");return W(L,T("none")),x((F)=>Q(L,"fg",J.textMuted,F)),L}}),null),M(H,I(X1,{get each(){return Y.applied},children:(L)=>(()=>{var F=V("text");return Q(F,"wrapMode","word"),M(F,()=>`${L.id} \u2192 ${L.keys.length>0?L.keys.join(" / "):"(unbound)"} (default: ${L.defaultKeys.join(" / ")})`),x((D)=>Q(F,"fg",J.text,D)),F})()}),null),x((L)=>{var F=J.text,D=$0.BOLD;return F!==L.e&&(L.e=Q(U,"fg",F,L.e)),D!==L.t&&(L.t=Q(U,"attributes",D,L.t)),L},{e:void 0,t:void 0}),H}}),j),M(X,I(z0,{get when(){return Y.warnings.length>0},get children(){var H=V("box"),U=V("text");return W(H,U),Q(H,"flexDirection","column"),Q(H,"gap",0),W(U,T("Warnings")),M(H,I(X1,{get each(){return Y.warnings},children:(L)=>(()=>{var F=V("text");return Q(F,"wrapMode","word"),M(F,`! ${L}`),x((D)=>Q(F,"fg",J.warning,D)),F})()}),null),x((L)=>{var F=J.warning,D=$0.BOLD;return F!==L.e&&(L.e=Q(U,"fg",F,L.e)),D!==L.t&&(L.t=Q(U,"attributes",D,L.t)),L},{e:void 0,t:void 0}),H}}),j),W(j,T("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.")),Q(j,"wrapMode","word"),Q(K,"wrapMode","word"),M(K,()=>`Fixed (not rebindable): ${Z.join(", ")}.`),x((H)=>{var U=J.text,L=$0.BOLD,F=J.textMuted,D=J.text,A=$0.BOLD,R=J.textMuted,l=J.textMuted,g=J.textMuted;return U!==H.e&&(H.e=Q(G,"fg",U,H.e)),L!==H.t&&(H.t=Q(G,"attributes",L,H.t)),F!==H.a&&(H.a=Q(z,"fg",F,H.a)),D!==H.o&&(H.o=Q(q,"fg",D,H.o)),A!==H.i&&(H.i=Q(q,"attributes",A,H.i)),R!==H.n&&(H.n=Q(B,"fg",R,H.n)),l!==H.s&&(H.s=Q(j,"fg",l,H.s)),g!==H.h&&(H.h=Q(K,"fg",g,H.h)),H},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),X})()}var jU=S(()=>{w();w();w();w();w();w();w();w();B1();oH();u1();jf();WW()});import{TextAttributes as mS}from"@opentui/core";function cS(J){return J.split(/[-_]+/).filter((Y)=>Y.length>0).map((Y)=>Y.charAt(0).toUpperCase()+Y.slice(1)).join(" ")}function AX(J){let Y=h1(),Z=v0(),X=e1(),{theme:G}=Z,[z,f]=p("sidebar"),[q,B]=p("general"),[j,K]=p(0),[H,U]=p(0),[L,F]=p(""),[D,A]=p(""),[R,l]=p(""),g=U0(()=>Z.all().slice().sort()),[,k]=p(Math.max(0,g().findIndex((c)=>c===Z.selected))),C=t4(J.orchestrator),[N,_]=p(null),[X0,s]=p(null),[Y0,u]=p(null),Q0=!1;s0(()=>{if(q()!=="accounts"||Q0)return;Q0=!0,AQ().then(_),RQ().then(s),CQ().then(u)});function t(){return ZU(q(),{themeNames:g(),focusAccentSlots:MX,engineList:b0(),hasDaemon:C})}function j0(){return t().length}function S0(){return fX(J.kv.get($Y,QX))}function $(c){if(Z.selected===c)return;if(!Z.set(c))return;J.kv.set("activeTheme",c),J.onVisualPrefsChange?.()}function P(c){if(Z.transparentBackground===c)return;Z.setTransparentBackground(c),J.kv.set("transparentBackground",c),J.onVisualPrefsChange?.()}function G0(){P(!Z.transparentBackground)}function Z0(c){if(Z.focusAccent===c)return;Z.setFocusAccent(c),J.kv.set("focusAccent",c),J.onVisualPrefsChange?.()}function K0(c){J.kv.set($Y,c)}function h(){return J.kv.get("notifications.toast.enabled",!0)!==!1}function y(){return J.kv.get("notifications.sound.enabled",!0)!==!1}function e(){J.kv.set("notifications.toast.enabled",!h())}function V0(){J.kv.set("notifications.sound.enabled",!y())}function q0(){return J.kv.get(bf,!0)!==!1}function A0(){J.kv.set(bf,!q0())}function I0(){return J.kv.get("experimental.remoteProjects",!1)===!0}function k0(){J.kv.set("experimental.remoteProjects",!I0())}function a0(){return J.kv.get(YX,!1)===!0}function v(){J.kv.set(YX,!a0())}function H0(){return J.kv.get(ZX,!1)===!0}function o(){J.kv.set(ZX,!H0())}function R0(){let c=J.kv.get("customEngineIds",[]);return Array.isArray(c)?c.filter((C0)=>typeof C0==="string"&&C0.trim().length>0):[]}function b0(){return[...m1,...R0()]}function w0(c){let C0=J.kv.get(fY(c),"");return typeof C0==="string"?C0.trim():""}function N0(c){return w0(c)||eG(c).join(" ")}function d(c){return XJ(c)&&w0(c).length===0&&!F0(c)}function J0(c){let C0=J.kv.get(qY(c),"");return typeof C0==="string"?C0.trim():""}function F0(c){return J0(c).length>0}function d0(c){return J0(c)||Dj[c]||c}let[r0,x0]=p(g1("lastSelectedVendor")??k1);function e0(c){return r0()===c}function G1(c){i1("lastSelectedVendor",c),J.kv.set("lastSelectedVendor",c),x0(c)}async function F1(c){let C0=await UY.show(Y,N0(c),{dialogTitle:`${d0(c)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(C0===void 0)return;J.kv.set(fY(c),C0.trim())}async function a(c){let C0=await UY.show(Y,d0(c),{dialogTitle:`${d0(c)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(C0===void 0)return;J.kv.set(qY(c),C0.trim())}function r(c){if(J.kv.set(fY(c),""),J.kv.set(qY(c),""),!XJ(c))J.kv.set("customEngineIds",R0().filter((C0)=>C0!==c)),U((C0)=>Math.max(0,Math.min(C0,b0().length)))}async function O(){let c=await UY.show(Y,"",{dialogTitle:"Add engine",fieldLabel:"id",submitLabel:"next",placeholder:"lowercase slug, e.g. aider"});if(c===void 0)return;let C0=c.trim().toLowerCase();if(!C0||XJ(C0)||R0().includes(C0))return;let A1=await UY.show(Y,"",{dialogTitle:`Add engine \xB7 ${C0}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(A1===void 0)return;let S1=await UY.show(Y,C0,{dialogTitle:`Add engine \xB7 ${C0}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(J.kv.set("customEngineIds",[...R0(),C0]),A1.trim())J.kv.set(fY(C0),A1.trim());let H1=S1?.trim()??"";J.kv.set(qY(C0),H1&&H1!==C0?H1:cS(C0))}function L0(){if(q()!=="engines"||z()!=="body")return null;let c=Cq(t(),H());return c?.kind==="engine"?c.vendor:null}function f0(){return iX(J.kv.get(lY,rQ))}function n0(){let c=zX.indexOf(f0()),C0=zX[(c+1)%zX.length];if(C0)J.kv.set(lY,C0)}function M0(){let c=J.kv.get(LZ,"");return typeof c==="string"?c:""}async function m0(){let c=await UY.show(Y,M0(),{dialogTitle:"Custom editor command (use {file} for the path)",fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(c===void 0)return;let C0=c.trim();if(J.kv.set(LZ,C0),C0)J.kv.set(lY,"custom")}async function D0(){let c=await UY.show(Y,L(),{dialogTitle:"Feedback title",fieldLabel:"title",submitLabel:"save"});if(c===void 0)return;F(c),l("")}async function E0(){let c=await UY.show(Y,D(),{dialogTitle:"Feedback body",fieldLabel:"body",submitLabel:"save",allowEmpty:!0});if(c===void 0)return;A(c),l("")}async function z1(){l("submitting...");try{let c=WG({title:L(),body:D()});l(`sent: ${c.url}`),F(""),A("")}catch(c){l(`error: ${c instanceof Error?c.message:String(c)}`)}}function p0(){if(z()!=="sidebar"||j0()===0)return;if(f("body"),U(0),q()==="general")k(0)}function _0(c){if(z()==="sidebar"){let S1=(j()+c+OX.length)%OX.length;K(S1);let H1=OX[S1];if(H1)B(H1.id),U(0);return}let C0=j0();if(C0===0)return;let A1=(H()+c+C0)%C0;if(U(A1),Cq(t(),A1)?.kind==="theme")k(A1)}function Z1(c){B(c),K(OX.findIndex((C0)=>C0.id===c)),U(0),f("sidebar")}let C1={theme:(c)=>$(c.name),transparent:()=>G0(),focusAccent:(c)=>Z0(c.slot),toast:()=>e(),sound:()=>V0(),zenKeepTasks:()=>A0(),surface:(c)=>K0(c.surface),editorKind:()=>n0(),editorCustom:()=>void m0(),engine:(c)=>void F1(c.vendor),engineAdd:()=>void O(),feedbackTitle:()=>void D0(),feedbackBody:()=>void E0(),feedbackSend:()=>void z1(),devReset:()=>void qW(Y,J.kv,X),devRestartDaemon:()=>void BW(Y,J.orchestrator,X),devRemoteProjects:()=>k0(),devAutoStatus:()=>v(),devDispatcher:()=>o()};function g0(){let c=Cq(t(),H());if(!c)return;C1[c.kind](c)}return L1(()=>({enabled:!J.standalone||Y.stack.length===0,bindings:[{key:"down",cmd:()=>_0(1)},{key:"up",cmd:()=>_0(-1)},{key:"j",cmd:()=>_0(1)},{key:"k",cmd:()=>_0(-1)},{key:"tab",cmd:()=>_0(1)},{key:"right",cmd:p0},{key:"l",cmd:p0},{key:"left",cmd:()=>f("sidebar")},{key:"h",cmd:()=>f("sidebar")},{key:"return",cmd:()=>{if(z()==="sidebar"){p0();return}g0()}},{key:"t",cmd:G0},{key:"r",cmd:()=>{let c=L0();if(c)a(c)}},{key:"x",cmd:()=>{let c=L0();if(c)r(c)}},{key:"d",cmd:()=>{let c=L0();if(c)G1(c)}}]})),(()=>{var c=V("box"),C0=V("box"),A1=V("text"),S1=V("text"),H1=V("box"),o0=V("box"),v1=V("box"),b=V("text");return W(c,C0),W(c,H1),W(c,v1),Q(c,"paddingLeft",2),Q(c,"paddingRight",2),Q(c,"paddingBottom",1),Q(c,"gap",1),W(C0,A1),W(C0,S1),Q(C0,"flexDirection","row"),Q(C0,"justifyContent","space-between"),W(A1,T("Settings")),W(S1,T("esc")),Q(S1,"onMouseUp",()=>J.onClose()),W(H1,o0),Q(H1,"flexDirection","row"),Q(H1,"gap",2),M(H1,I(XU,{level:z,cursor:j,switchSection:Z1}),o0),Q(o0,"flexGrow",1),Q(o0,"flexShrink",1),Q(o0,"flexDirection","column"),Q(o0,"gap",1),M(o0,I(z0,{get when(){return q()==="general"},get children(){return I(GU,{level:z,bodyRow:H,setLevel:f,setBodyRow:U,themeNames:g,setThemeCursor:k,selectTheme:$,toggleTransparent:G0,selectFocusAccent:Z0,toastEnabled:h,soundEnabled:y,toggleToast:e,toggleSound:V0,zenKeepsTasks:q0,toggleZenKeepsTasks:A0,settingsSurface:S0,selectSurface:K0,editorKind:f0,cycleEditorKind:n0,editorCustomCommand:M0,editEditorCustom:()=>void m0()})}}),null),M(o0,I(z0,{get when(){return q()==="engines"},get children(){return I(zU,{level:z,bodyRow:H,setLevel:f,setBodyRow:U,get vendors(){return b0()},isCustom:(W0)=>!XJ(W0),displayName:d0,commandText:N0,isDefault:d,isDefaultEngine:e0,editEngine:(W0)=>void F1(W0),renameEngine:(W0)=>void a(W0),resetEngine:r,onAddEngine:()=>void O()})}}),null),M(o0,I(z0,{get when(){return q()==="accounts"},get children(){return I(QU,{claudeStatus:N,codexStatus:X0,copilotStatus:Y0})}}),null),M(o0,I(z0,{get when(){return q()==="keys"},get children(){return I(BU,{})}}),null),M(o0,I(z0,{get when(){return q()==="feedback"},get children(){return I(fU,{level:z,bodyRow:H,setLevel:f,setBodyRow:U,title:L,body:D,status:R,editTitle:()=>void D0(),editBody:()=>void E0(),submit:()=>void z1()})}}),null),M(o0,I(z0,{get when(){return q()==="dev"},get children(){return I(qU,{level:z,bodyRow:H,setLevel:f,setBodyRow:U,hasDaemon:C,confirmReset:()=>void qW(Y,J.kv,X),confirmRestartDaemon:()=>void BW(Y,J.orchestrator,X),remoteProjectsEnabled:I0,toggleRemoteProjects:k0,autoStatusEnabled:a0,toggleAutoStatus:v,dispatcherEnabled:H0,toggleDispatcher:o})}}),null),W(v1,b),Q(v1,"paddingTop",0),W(b,T("j/k pick \xB7 h/l switch level \xB7 enter activate \xB7 esc close")),x((W0)=>{var h0=mS.BOLD,Q1=G.text,YJ=G.textMuted,qJ=G.textMuted;return h0!==W0.e&&(W0.e=Q(A1,"attributes",h0,W0.e)),Q1!==W0.t&&(W0.t=Q(A1,"fg",Q1,W0.t)),YJ!==W0.a&&(W0.a=Q(S1,"fg",YJ,W0.a)),qJ!==W0.o&&(W0.o=Q(b,"fg",qJ,W0.o)),W0},{e:void 0,t:void 0,a:void 0,o:void 0}),c})()}var VW=S(()=>{w();w();w();w();w();w();w();w();B1();aZ();bJ();nf();rG();aQ();O1();Pj();SJ();BJ();u1();oQ();gJ();uJ();QW();JU();WW();jU();AX.show=(J,Y,Z)=>{let X=!1;return new Promise((G)=>{J.replace(()=>I(AX,{kv:Y,orchestrator:Z,onVisualPrefsChange:()=>{X=!0},onClose:()=>G({visualPrefsChanged:X})}),()=>G({visualPrefsChanged:X}))})}});import{TextAttributes as dS}from"@opentui/core";function WU(){let{theme:J}=v0(),Y=IY(),Z=Uq(),X=()=>Z.toasts().slice(-HU),G=()=>Math.max(0,Y().width-nS-iS),z=()=>Math.max(0,Y().height-lS-HU-1);return I(z0,{get when(){return Z.toasts().length>0},get children(){var f=V("box");return Q(f,"position","absolute"),Q(f,"zIndex",2500),Q(f,"width",40),Q(f,"flexDirection","column"),Q(f,"gap",0),M(f,I(X1,{get each(){return X()},children:(q)=>{let B=()=>q.kind==="needs_input"?J.warning:q.kind==="error"?J.error:J.success,j=()=>J.selectedListItemText,K=()=>q.kind==="needs_input"?"?":q.kind==="error"?"\u2715":"\u2713";return(()=>{var H=V("box"),U=V("text"),L=V("text");return W(H,U),W(H,L),Q(H,"flexDirection","row"),Q(H,"gap",1),Q(H,"paddingLeft",1),Q(H,"paddingRight",1),Q(H,"onMouseUp",()=>Z.dismiss(q.id)),Q(U,"wrapMode","none"),M(U,K),Q(L,"wrapMode","none"),M(L,()=>q.title),x((F)=>{var D=B(),A=j(),R=dS.BOLD,l=j();return D!==F.e&&(F.e=Q(H,"backgroundColor",D,F.e)),A!==F.t&&(F.t=Q(U,"fg",A,F.t)),R!==F.a&&(F.a=Q(U,"attributes",R,F.a)),l!==F.o&&(F.o=Q(L,"fg",l,F.o)),F},{e:void 0,t:void 0,a:void 0,o:void 0}),H})()}})),x((q)=>{var B=G(),j=z();return B!==q.e&&(q.e=Q(f,"left",B,q.e)),j!==q.t&&(q.t=Q(f,"top",j,q.t)),q},{e:void 0,t:void 0}),f}})}var HU=4,nS=40,iS=2,lS=2;var VU=S(()=>{w();w();w();w();w();w();w();B1();Lq();u1()});import{TextAttributes as $S}from"@opentui/core";function aS(J,Y){return`daemon is ${J?`v${J}`:"an older build"} \u2014 you launched v${Y}. Run \`kobe daemon restart\` then \`kobe reload\``}function KU(J){let{theme:Y}=v0(),Z=()=>Math.max(4,J.width()-2);return I(z0,{get when(){return J.stale()},get children(){var X=V("box"),G=V("text"),z=V("box"),f=V("text"),q=V("box"),B=V("text");return W(X,G),W(X,z),W(X,q),Q(X,"flexDirection","column"),Q(X,"flexShrink",0),Q(X,"paddingLeft",1),Q(X,"paddingRight",1),Q(X,"paddingBottom",1),Q(G,"wrapMode","none"),M(G,()=>"\u2594".repeat(Z())),W(z,f),Q(z,"flexDirection","row"),Q(z,"gap",1),W(f,T("\u26A0 DAEMON OUT OF DATE")),Q(f,"wrapMode","none"),W(q,B),Q(q,"flexDirection","row"),Q(q,"gap",1),Q(B,"wrapMode","word"),M(B,()=>aS(J.daemonVersion(),J.clientVersion)),x((j)=>{var{warning:K,warning:H}=Y,U=$S.BOLD,L=Y.text;return K!==j.e&&(j.e=Q(G,"fg",K,j.e)),H!==j.t&&(j.t=Q(f,"fg",H,j.t)),U!==j.a&&(j.a=Q(f,"attributes",U,j.a)),L!==j.o&&(j.o=Q(B,"fg",L,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),X}})}var UU=S(()=>{w();w();w();w();w();w();w();B1();u1()});function LU(J,Y){return J.find((Z)=>Z.id!==Y&&!Z.archived)}async function pS(J){let Y=J.tasks.find((z)=>z.id===J.taskId);if(!Y)return null;let Z=!Y.archived;try{await J.orch.setArchived(J.taskId,Z)}catch(z){return J.logger.error(`${J.logPrefix} archive failed:`,z),null}if(!Z)return{archived:Z};let X=K1(J.taskId),G=LU(J.tasks,J.taskId);if(await yY(X,G?K1(G.id):void 0).catch((z)=>{J.logger.error(`${J.logPrefix} switch-client failed:`,z)}),J.updateActiveTask)await J.orch.setActiveTask(G?.id??null).catch(()=>{});return await mJ(X).catch((z)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,z)}),{archived:Z,nextTask:G}}async function _S(J){let Y=LU(J.tasks,J.taskId),Z=K1(J.taskId);if(J.switchBeforeKill)await yY(Z,Y?K1(Y.id):void 0).catch((X)=>{J.logger.error(`${J.logPrefix} switch-client failed:`,X)});if(J.updateActiveTask)await J.orch?.setActiveTask(Y?.id??null).catch(()=>{});return await mJ(Z).catch((X)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,X)}),{nextTask:Y}}async function DU(J,Y){if(!J.orch)return;let Z=J.tasks().find((G)=>G.id===Y);if(!Z)return;if(!Z.archived){if(!await J.confirm({title:`Archive "${Z.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 pS({orch:J.orch,tasks:J.tasks(),taskId:Y,logger:J.logger,logPrefix:J.logPrefix,updateActiveTask:J.updateActiveTask}))return;await J.reload?.()}async function MU(J,Y){if(!J.orch)return;let Z=J.tasks().find((f)=>f.id===Y);if(!Z)return;if(!await J.confirm({title:`Delete "${Z.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 J.orch.deleteTask(Y),G=!0}catch(f){if((f instanceof Error?f.message:String(f)).includes(zB)){if(await J.confirm({title:`"${Z.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 J.orch.deleteTask(Y,{force:!0}),G=!0}catch(j){J.logger.error(`${J.logPrefix} force delete failed:`,j),J.notifyError?.(`Couldn't delete: ${j instanceof Error?j.message:String(j)}`)}}else J.logger.error(`${J.logPrefix} delete failed:`,f),J.notifyError?.(`Couldn't delete: ${f instanceof Error?f.message:String(f)}`)}if(!G)return;let{nextTask:z}=await _S({orch:J.orch,tasks:J.tasks(),taskId:Y,logger:J.logger,logPrefix:J.logPrefix,switchBeforeKill:J.switchBeforeKill,updateActiveTask:J.updateActiveTask});await J.reload?.(),J.onTaskDeleted?.(Y,z)}async function FU(J,Y){let Z=J.tasks().find((G)=>G.id===Y);if(!Z)return;let X=await J.promptText(Z.title);if(!X||!J.orch)return;try{await J.orch.setTitle(Y,X)}catch(G){J.logger.error(`${J.logPrefix} task.rename failed:`,G),J.notifyError?.(`Couldn't rename task: ${G instanceof Error?G.message:String(G)}`);return}await J.reload?.()}async function OU(J,Y){let Z=J.tasks().find((G)=>G.id===Y);if(!Z||Z.kind==="main")return;let X=await J.promptText(Z.branch,{dialogTitle:"Rename branch",fieldLabel:"branch"});if(!X||!J.orch)return;try{await J.orch.setBranch(Y,X)}catch(G){J.logger.error(`${J.logPrefix} task.setBranch failed:`,G),J.notifyError?.(`Couldn't rename branch: ${G instanceof Error?G.message:String(G)}`);return}await J.reload?.()}async function AU(J,Y){let Z=J.tasks().find((z)=>z.id===Y);if(!Z||!J.orch)return;let X=await mY(),G=eY(X,Z.vendor??k1);try{await J.orch.setVendor(Y,G)}catch(z){J.logger.error(`${J.logPrefix} task.setVendor failed:`,z),J.notifyError?.(`Couldn't switch engine: ${z instanceof Error?z.message:String(z)}`);return}J.notifyInfo?.(`Engine \u2192 ${XX(G)} (applies on reopen)`),await J.reload?.()}async function RU(J){let Y=wJ(),Z=J.cursorRepo()??Y[0]??process.cwd();if(J.openCreateSurface&&await J.openCreateSurface(Z))return;let X=J.lastVendor()??k1,G=await mY();if(G.length===0)J.notifyInfo?.("No engine CLI detected \u2014 install claude or codex, or add one in Settings \u2192 Engines");let z=J.orch,f=await J.promptNewTask(Z,Y,{defaultVendor:X,availableVendors:G,discoverAdoptable:z?(B)=>z.discoverAdoptableWorktrees(B):void 0});if(!f)return;if(J.rememberVendor(f.vendor),xY(f.repo),J.onRepoSaved?.(),!z){J.logger.error(`${J.logPrefix} no daemon; cannot create task`);return}J.notifyInfo?.("Creating task\u2026");let q;try{if(f.mode==="adopt")for(let B of f.adopt)q=(await z.adoptWorktree({repo:f.repo,worktreePath:B.worktreePath,branch:B.branch,vendor:f.vendor})).id;else q=(await z.createTask({repo:f.repo,baseRef:f.baseRef,vendor:f.vendor})).id}catch(B){J.logger.error(`${J.logPrefix} task.create/adopt failed:`,B),J.notifyError?.(`Couldn't create task: ${B instanceof Error?B.message:String(B)}`);return}if(await J.reload?.(),q)J.selectTask?.(q),await J.enterTask?.(q)}var CU=S(()=>{aZ();bJ();qB();O1();SJ();BJ();t1()});import{spawn as rS}from"child_process";import{existsSync as oS}from"fs";import{basename as sS,delimiter as tS,isAbsolute as eS,join as Jk}from"path";function KW(J,Y,Z){if(eS(J))return Z(J);let X=Y.PATH??"";for(let G of X.split(tS)){if(!G)continue;if(Z(Jk(G,J)))return!0}return!1}function Xk(J){let Y=sS(J);if(Y==="code")return"VS Code";if(Y==="cursor")return"Cursor";if(Y==="windsurf")return"Windsurf";if(Y==="zed")return"Zed";return Y||J}function gU(J={}){let Y=J.env??process.env,Z=J.platform??process.platform,X=J.exists??oS,G=Y.KOBE_OPEN_EDITOR?.trim();if(G)return{id:"env",label:Xk(G),command:G,args:[]};for(let z of Yk)if(KW(z.command,Y,X))return{id:z.id,label:z.label,command:z.command,args:[]};if(Z==="darwin"&&KW("open",Y,X)){for(let z of Zk)if(z.paths.some((f)=>X(f)))return{id:z.id,label:z.label,command:"open",args:["-a",z.appName]};return{id:"mac-open",label:"Finder",command:"open",args:[]}}if(Z==="linux"&&KW("xdg-open",Y,X))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function Gk(J,Y){return[Y.command,[...Y.args,J]]}function yU(J,Y,Z={}){if(!J)return!1;let X=Z.spawn??rS,[G,z]=Gk(J,Y);try{let f=X(G,z,{detached:!0,stdio:"ignore"});if(f.pid===void 0)return!1;return f.unref(),!0}catch{return!1}}var Yk,Zk;var SU=S(()=>{Yk=[{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"}],Zk=[{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 gq(J){let Y=new Map;function Z(X){let G=Y.get(X);if(!G){let[z,f]=p(J.initial,J.equals?{equals:J.equals}:void 0);G={read:z,write:(q)=>f(()=>q),inFlight:!1,nextAllowedAt:0},Y.set(X,G)}return G}return{read(X){if(!X)return J.initial;return Z(X).read()},poll(X){if(!X)return;let G=Z(X);lQ(G,J,(z)=>J.run(X,z),(z)=>G.write(z))},reset(){Y.clear()}}}var Ez=S(()=>{B1();tG();tG()});import{stat as zk}from"fs/promises";import{join as Qk}from"path";async function jk(J){try{let Y=await zk(Qk(J,".git","HEAD"));return`${Y.mtimeMs}:${Y.size}`}catch{return null}}async function Hk(J,Y,Z=QY){let X=await jk(J);if(X!==null){let q=kU.get(J);if(q&&q.fingerprint===X)return q.value}let G="",z=await Z("git",["symbolic-ref","--short","HEAD"],{cwd:J,env:TJ(),signal:Y}),f=z.status===0?z.stdout.trim():"";if(f&&f!=="HEAD")G=f;else if((await Z("git",["rev-parse","--verify","HEAD"],{cwd:J,env:TJ(),signal:Y})).status===0)G="(detached)";if(X!==null)kU.set(J,{fingerprint:X,value:G});return G}function NU(J){return IU.read(J)}function bU(J){IU.poll(J)}var fk=2000,qk=30000,Bk=1500,kU,IU;var TU=S(()=>{DZ();Ez();kU=new Map;IU=gq({initial:"",timeoutMs:fk,slowRetryMs:qk,minIntervalMs:Bk,run:(J,Y)=>Hk(J,Y)})});function UW(J){let Y=J.scheduleTimeout??((B,j)=>{let K=setTimeout(B,j);return()=>clearTimeout(K)}),Z=!1,X=null,G=()=>{Z=!0,X?.(),X=Y(()=>{Z=!1,X=null},700)},z=()=>{Z=!1,X?.(),X=null},f=(B)=>{let j=J.getFlatIds();if(j.length===0)return;let K=J.getCursor(),H=K<0?0:K,U=Math.min(j.length-1,Math.max(0,H+B));J.setCursor(U)},q=(B)=>{let j=J.getFlatIds();if(j.length===0)return;J.setCursor(Math.min(j.length-1,Math.max(0,B)))};return{moveDown(){z(),f(1)},moveUp(){z(),f(-1)},selectCurrent(){z();let B=J.getFlatIds(),j=J.getCursor();if(j<0||j>=B.length)return;let K=B[j];if(K!==void 0)J.onSelect(K)},pressG(){if(Z)z(),q(0);else G()},pressShiftG(){z(),q(J.getFlatIds().length-1)},isChordArmed(){return Z},disarmChord(){z()}}}function EU(J){let Y=UW({getCursor:()=>J.cursorIndex(),setCursor:(z)=>J.setCursorIndex(z),getFlatIds:()=>J.flatTaskIds(),onSelect:(z)=>J.onSelect(z)}),Z=()=>{let z=J.flatTaskIds(),f=J.cursorIndex();if(f<0||f>=z.length)return;return z[f]},X=()=>J.searchMode?.()??!1,G=()=>J.moveMode?.()??!1;L1(()=>({enabled:J.focused()&&!X(),bindings:TZ({"sidebar.nav":(z,f)=>{let q=(f??0)%2===0;if(G()){let B=Z();if(B===void 0)return;J.onMoveRequest?.(B,q?1:-1);return}if(q)Y.moveDown();else Y.moveUp()},"sidebar.select":()=>{if(G()){J.onMoveModeExit?.();return}Y.selectCurrent()},"sidebar.goto":(z)=>{if(G())return;if(z.shift)Y.pressShiftG();else Y.pressG()},"sidebar.delete":()=>{if(G())return;let z=Z();if(z!==void 0)J.onDeleteRequest?.(z)},"sidebar.archive":()=>{if(G())return;let z=Z();if(z!==void 0)J.onArchiveRequest?.(z)},"sidebar.localMerge":(z)=>{if(!z.shift)return;let f=Z();if(f!==void 0)J.onLocalMergeRequest?.(f)},"sidebar.rename":()=>{if(G())return;let z=Z();if(z!==void 0)J.onRenameRequest?.(z)},"sidebar.pin":(z)=>{if(G())return;if(!z.shift)return;let f=Z();if(f!==void 0)J.onPinRequest?.(f)},"sidebar.search.enter":()=>{if(G())return;J.onSearchEnter?.()},"sidebar.sort":()=>{if(G())return;J.onSortModeToggle?.()},"sidebar.projectFilter":()=>{if(G())return;J.onProjectFilterToggle?.()}})})),L1(()=>({enabled:J.focused()&&G(),bindings:[{key:"escape",cmd:()=>J.onMoveModeExit?.()}]})),L1(()=>({enabled:J.focused(),bindings:TZ({"sidebar.view":(z,f)=>{J.onViewSwitch?.((f??0)%2===0?-1:1)}})})),L1(()=>({enabled:J.focused()&&X(),bindings:TZ({"sidebar.search.nav":(z,f)=>{if((f??0)%2===0)Y.moveDown();else Y.moveUp()},"sidebar.search.submit":()=>{Y.selectCurrent(),J.onSearchExit?.(!0)},"sidebar.search.cancel":()=>J.onSearchExit?.(!1)})}))}var uU=S(()=>{MG();gJ()});function LW(J,Y){if(Y<=0)return"";if(J.length<=Y)return J;return`${J.slice(0,Math.max(0,Y-1))}\u2026`}function DW(J,Y){return` ${LW(J,Math.max(0,Y))}`}function Kk(J){switch(J){case"rate_limited":return{text:"rate limited",tone:"warning"};case"permission_needed":return{text:"needs permission",tone:"warning"};case"error":return{text:"error",tone:"error"};default:return null}}function hU(J){switch(J.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 Dk(J){if(J.kind==="main")return!1;return J.vendor!==void 0&&!XJ(J.vendor)}function MW(J){let{task:Y}=J,Z=Y.kind==="main",X=Z?J.mainBranch??"":Y.branch,G=Wk[Y.status],z=J.activity?.state,f=z!==void 0,q=Mk(z),B=Kk(z),j=Dk(Y)&&!f,K=J.job!==void 0,H=K||!j&&(z==="running"||J.live||!f&&!Z&&Y.status==="in_progress"),U=RG[J.spinnerFrame]??RG[0],L=K?"primary":j?"textMuted":B?.tone??(H?"primary":q?.tone??G.tone),F=j?Uk:Vk[Y.status],D=K?J.truncateBranch(Lk,J.subtitleBudget):B?J.truncateBranch(B.text,J.subtitleBudget):X.length>0?J.truncateBranch(X,J.subtitleBudget):J.truncateBranch(F,J.subtitleBudget),A=j?xU:q?.glyph??G.glyph,R=j?xU:q?.glyph??"\u2605";return{isMain:Z,titleText:Z?KY(Y.repo):Y.title,subtitleText:D,loading:H,stateGlyph:H?U:A,projectGlyph:H?U:R,tone:L}}function FW(J,Y){if(!J.loading)return J;let Z=RG[Y()%RG.length]??"\u280B";if(Z===J.stateGlyph&&Z===J.projectGlyph)return J;return{...J,stateGlyph:Z,projectGlyph:Z}}function Mk(J){switch(J){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 Wk,Vk,RG,wU=100,xU="\xB7",Uk="no activity tracking",Lk="materializing";var PU=S(()=>{BJ();Oq();Wk={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"}},Vk={done:"done",in_review:"in review",in_progress:"working",backlog:"\u2014",canceled:"canceled",error:"error"};RG=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function OW(J){return vU.read(J)}function AW(J){vU.poll(J)}var Fk=4000,Ok=60000,Ak=1500,Rk,vU;var mU=S(()=>{DZ();Ez();fG();Ez();Rk={added:0,deleted:0},vU=gq({initial:Rk,equals:kY,timeoutMs:Fk,slowRetryMs:Ok,minIntervalMs:Ak,run:async(J,Y)=>{let Z=await QY("git",["status","--porcelain=v1"],{cwd:J,env:TJ(),signal:Y});if(Z.status!==0)throw Error("git status failed");return QG(Z.stdout)}})});import{TextAttributes as y1}from"@opentui/core";function dU(J,Y=gk){if(J.length<=Y)return J;return`${J.slice(0,Math.max(0,Y-1))}\u2026`}function yk(J){let Y=0;for(let Z of J)Y+=(Z.codePointAt(0)??0)>=4352?2:1;return Y}function Sk(J,Y){if(Y<=0||J.length<=Y)return J;return`\u2026${J.slice(J.length-Math.max(0,Y-1))}`}function nU(J){let{theme:Y}=v0(),Z=()=>J.focused?J.focused():!0,[X,G]=p("active"),[z,f]=p(!1),[q,B]=p(""),[j,K]=p(null),H=()=>J.projectFilter?.()??j(),U=(d)=>{if(J.onProjectFilterChange)J.onProjectFilterChange(d);else K(d)};function L(){B(""),f(!0),J.onSearchActiveChange?.(!0)}function F(d){f(!1),B(""),J.onSearchActiveChange?.(!1)}s0(()=>{if(!z())return;let d=e1();if(!d)return;let J0=(F0)=>{if(F0.defaultPrevented)return;if(!Z())return;if(F0.ctrl||F0.meta||F0.option)return;if(F0.name==="backspace"){B((x0)=>x0.slice(0,-1));return}let d0=F0.sequence;if(!d0||d0.length!==1)return;let r0=d0.charCodeAt(0);if(r0<32||r0===127)return;B((x0)=>x0+d0)};d.keyInput.on("keypress",J0),P1(()=>d.keyInput.off("keypress",J0))});let[D,A]=p(0),R=setInterval(()=>A((d)=>d+1),Ck);P1(()=>clearInterval(R));let[l,g]=p(0),k=setInterval(()=>g((d)=>(d+1)%RG.length),wU);P1(()=>clearInterval(k));let C=()=>J.sortMode?.()??"default",N=U0(()=>i4(J.tasks(),X())),_=U0(()=>{let d=H();if(!d)return null;let J0=aJ(d);return N().find((F0)=>aJ(F0.repo)===J0)??null}),X0=U0(()=>_()?.repo??null),s=U0(()=>_()?.label??"all"),Y0=U0(()=>{let d=_();return d?d.count:N().reduce((J0,F0)=>J0+F0.count,0)}),u=U0((d)=>a4(d,ZW(J.tasks(),X(),z()?q():"",C(),X0())),[]),Q0=U0(()=>XW(u())),t=U0(()=>$4(u())),j0=U0(()=>t().projectRows),S0=U0(()=>t().taskRows),$=U0(()=>{let d=new Map;for(let J0 of u())d.set(J0.flatIndex,J0);return d}),P=U0(()=>XW(ZW(J.tasks(),X(),"",C(),X0())).length),G0=U0(()=>S0().length>0);s0(()=>{let d=H(),J0=N();if(d!==null&&J0.length>0&&(J0.length<=1||_()===null))U(null)});function Z0(){let d=N();if(d.length<=1){U(null);return}let J0=X0(),F0=J0?aJ(J0):null,d0=F0===null?-1:d.findIndex((x0)=>aJ(x0.repo)===F0),r0=d[d0+1];U(r0?.repo??null)}let K0=()=>J.width?J.width():cU,h=U0(()=>Math.max(6,K0()-9)),y=U0(()=>Math.max(6,K0()-16)),e=IY(),V0=U0(()=>{let d=Math.max(2,Math.min(10,Math.floor(e().height*0.25))),J0=Math.max(2,j0().length*2);return Math.min(d,J0)}),[q0,A0]=p(null),[I0,k0]=p(-1),a0,v,H0,o=new Map;s0(()=>{let d=J.width?J.width():cU,J0=H0;if(!J0)return;J0.width=d,J0.flexShrink=1,J0.minHeight=0}),s0(LJ([I0,u],([d])=>{let J0=$().get(d);if(!J0)return;let F0=J0.task.kind==="main"?a0:v;if(!F0)return;if(F0.viewport.height<=0)return;let d0=o.get(d);if(!d0)return;F0.scrollChildIntoView(d0.id)})),s0(LJ(()=>[J.selectedId(),Q0()],([d,J0])=>{let F0=l1(I0);if(d===null){if(F0===-1&&J0.length>0)k0(0);else if(F0>=J0.length)k0(Math.max(0,J0.length-1));else if(J0.length===0)k0(-1);return}let d0=J0.indexOf(d);if(d0>=0){if(d0!==F0)k0(d0)}else if(J0.length===0)k0(-1);else if(F0<0||F0>=J0.length)k0(J0.length-1)})),s0(LJ(X,()=>{let d=Q0();k0(d.length>0?0:-1)},{defer:!0})),s0(LJ(X0,(d)=>k0(l4(u(),d)),{defer:!0})),s0(LJ([z,q],()=>{if(!z())return;let d=Q0();k0(d.length>0?0:-1)}));function R0(d){let J0=X(),F0=uz.findIndex((x0)=>x0.view===J0);if(F0<0)return;let d0=(F0+d+uz.length)%uz.length,r0=uz[d0];if(r0)G(r0.view)}EU({focused:Z,cursorIndex:I0,setCursorIndex:k0,flatTaskIds:Q0,onSelect:(d)=>{J.onSelect(d),J.onActivate?.(d)},onDeleteRequest:(d)=>J.onDeleteRequest?.(d),onArchiveRequest:(d)=>J.onArchiveRequest?.(d),onLocalMergeRequest:(d)=>J.onLocalMergeRequest?.(d),moveMode:J.moveMode,onMoveRequest:(d,J0)=>J.onMoveRequest?.(d,J0),onMoveModeExit:()=>J.onMoveModeExit?.(),onRenameRequest:(d)=>J.onRenameRequest?.(d),onPinRequest:(d)=>J.onPinRequest?.(d),onViewSwitch:(d)=>R0(d),onSortModeToggle:()=>J.onSortModeToggle?.(),onProjectFilterToggle:()=>Z0(),searchMode:z,onSearchEnter:()=>L(),onSearchExit:(d)=>F(d)});let b0=(d)=>(()=>{var J0=V("box"),F0=V("box"),d0=V("text"),r0=V("text");return W(J0,F0),Q(J0,"flexDirection","column"),Q(J0,"flexShrink",0),M(J0,I(z0,{get when(){return d.topPad},get children(){var x0=V("box"),e0=V("text");return W(x0,e0),Q(x0,"flexShrink",0),W(e0,T(" ")),Q(e0,"wrapMode","none"),x0}}),F0),W(F0,d0),W(F0,r0),Q(F0,"flexDirection","row"),Q(F0,"flexShrink",0),Q(F0,"gap",1),Q(F0,"paddingLeft",1),Q(F0,"paddingRight",1),Q(d0,"wrapMode","none"),M(d0,()=>d.label),Q(r0,"wrapMode","none"),M(r0,()=>"\u2500".repeat(Math.max(2,K0()-10-d.label.length-(d.suffix?.length??0)))),M(F0,I(z0,{get when(){return d.suffix},get children(){var x0=V("text");return Q(x0,"wrapMode","none"),M(x0,()=>d.suffix),x((e0)=>{var G1=Y.info,F1=y1.BOLD;return G1!==e0.e&&(e0.e=Q(x0,"fg",G1,e0.e)),F1!==e0.t&&(e0.t=Q(x0,"attributes",F1,e0.t)),e0},{e:void 0,t:void 0}),x0}}),null),x((x0)=>{var e0=Y.textMuted,G1=y1.BOLD,F1=Y.border;return e0!==x0.e&&(x0.e=Q(d0,"fg",e0,x0.e)),G1!==x0.t&&(x0.t=Q(d0,"attributes",G1,x0.t)),F1!==x0.a&&(x0.a=Q(r0,"fg",F1,x0.a)),x0},{e:void 0,t:void 0,a:void 0}),J0})(),w0=(d)=>{switch(d){case"success":return Y.success;case"warning":return Y.warning;case"primary":return Y.primary;case"error":return Y.error;default:return Y.textMuted}},N0=(d)=>{let J0=d.row.task,F0=d.row.flatIndex,d0=()=>F0===I0(),r0=()=>J0.id===J.selectedId(),x0=U0(()=>{let f0=J.chatRunState?.();if(!f0)return!1;let n0=`${J0.id}:`;for(let[M0,m0]of f0)if(m0==="running"&&M0.startsWith(n0))return!0;return!1}),e0=U0(()=>{let f0=Pf(J.worktreeChanges?.(),J0.worktreePath);if(f0)return f0;if(D(),!J0.archived)AW(J0.worktreePath);return OW(J0.worktreePath)},void 0,{equals:kY}),G1=U0(()=>{return D(),bU(J0.repo),NU(J0.repo)}),F1=U0(()=>MW({task:J0,activity:J.engineState?.().get(J0.id),job:J.taskJobs?.().get(J0.id),live:x0(),spinnerFrame:0,subtitleBudget:y(),truncateBranch:dU,mainBranch:G1()})),a=U0(()=>FW(F1(),l)),r=()=>!a().loading?Y.primary:w0(a().tone),O=()=>d0()?Y.focusAccent:r0()?Y.primary:void 0,L0=()=>d0()||r0()?"\u258C":" ";return(()=>{var f0=V("box"),n0=V("box"),M0=V("box"),m0=V("text"),D0=V("box"),E0=V("text"),z1=V("text"),p0=V("box"),_0=V("text"),Z1=V("box"),C1=V("text");return W(f0,n0),Q(f0,"flexDirection","column"),Q(f0,"gap",0),Q(f0,"paddingBottom",0),W(n0,M0),W(n0,p0),kZ((g0)=>{o.set(F0,g0),P1(()=>{if(o.get(F0)===g0)o.delete(F0)})},n0),Q(n0,"flexDirection","column"),Q(n0,"gap",0),Q(n0,"onMouseUp",()=>{if(J.onSelect(J0.id),J.activateOnClick)J.onActivate?.(J0.id)}),Q(n0,"onMouseOver",(g0)=>A0({task:J0,x:g0.x,y:g0.y})),Q(n0,"onMouseOut",()=>A0((g0)=>g0?.task.id===J0.id?null:g0)),W(M0,m0),W(M0,D0),Q(M0,"flexDirection","row"),Q(M0,"gap",0),Q(m0,"wrapMode","none"),M(m0,L0),W(D0,E0),W(D0,z1),Q(D0,"flexDirection","row"),Q(D0,"flexGrow",1),Q(D0,"paddingRight",1),Q(D0,"gap",0),Q(E0,"wrapMode","none"),M(E0,()=>a().projectGlyph),Q(z1,"wrapMode","none"),Q(z1,"flexGrow",1),M(z1,()=>DW(a().titleText,h())),W(p0,_0),W(p0,Z1),Q(p0,"flexDirection","row"),Q(p0,"gap",0),Q(_0,"wrapMode","none"),M(_0,L0),W(Z1,C1),Q(Z1,"flexDirection","row"),Q(Z1,"flexGrow",1),Q(Z1,"paddingLeft",2),Q(Z1,"paddingRight",1),Q(Z1,"gap",1),Q(C1,"wrapMode","none"),Q(C1,"flexGrow",1),M(C1,()=>a().subtitleText),M(Z1,I(z0,{get when(){return e0().added>0},get children(){var g0=V("text"),c=T("+");return W(g0,c),Q(g0,"wrapMode","none"),M(g0,()=>e0().added,null),x((C0)=>Q(g0,"fg",Y.success,C0)),g0}}),null),M(Z1,I(z0,{get when(){return e0().deleted>0},get children(){var g0=V("text"),c=T("\u2212");return W(g0,c),Q(g0,"wrapMode","none"),M(g0,()=>e0().deleted,null),x((C0)=>Q(g0,"fg",Y.error,C0)),g0}}),null),x((g0)=>{var c=d0()?Y.backgroundElement:void 0,C0=O(),A1=r(),S1=y1.BOLD,H1=Y.text,o0=y1.BOLD,v1=O(),b=Y.textMuted,W0=y1.DIM;return c!==g0.e&&(g0.e=Q(n0,"backgroundColor",c,g0.e)),C0!==g0.t&&(g0.t=Q(m0,"fg",C0,g0.t)),A1!==g0.a&&(g0.a=Q(E0,"fg",A1,g0.a)),S1!==g0.o&&(g0.o=Q(E0,"attributes",S1,g0.o)),H1!==g0.i&&(g0.i=Q(z1,"fg",H1,g0.i)),o0!==g0.n&&(g0.n=Q(z1,"attributes",o0,g0.n)),v1!==g0.s&&(g0.s=Q(_0,"fg",v1,g0.s)),b!==g0.h&&(g0.h=Q(C1,"fg",b,g0.h)),W0!==g0.r&&(g0.r=Q(C1,"attributes",W0,g0.r)),g0},{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}),f0})()};return(()=>{var d=V("box"),J0=V("box"),F0=V("box"),d0=V("text"),r0=V("box"),x0=V("box"),e0=V("text"),G1=V("scrollbox"),F1=V("box");return W(d,J0),W(d,r0),W(d,G1),kZ((a)=>{H0=a},d),Q(d,"flexGrow",1),Q(d,"minHeight",0),Q(d,"flexDirection","column"),Q(d,"paddingTop",1),Q(d,"paddingBottom",1),Q(d,"paddingLeft",0),Q(d,"paddingRight",0),W(J0,F0),Q(J0,"flexDirection","row"),Q(J0,"justifyContent","space-between"),Q(J0,"gap",1),Q(J0,"paddingBottom",1),Q(J0,"paddingLeft",1),Q(J0,"paddingRight",1),W(F0,d0),Q(F0,"flexDirection","row"),Q(F0,"gap",1),W(d0,T("KOBE")),Q(d0,"wrapMode","none"),M(F0,I(z0,{get when(){return J.headerStatus?.()},children:(a)=>(()=>{var r=V("text");return Q(r,"wrapMode","none"),Q(r,"onMouseUp",()=>J.onHeaderStatusClick?.()),M(r,()=>a().label),x((O)=>{var L0=a().emphasize?Y.warning:Y.textMuted,f0=a().emphasize?y1.BOLD:y1.DIM;return L0!==O.e&&(O.e=Q(r,"fg",L0,O.e)),f0!==O.t&&(O.t=Q(r,"attributes",f0,O.t)),O},{e:void 0,t:void 0}),r})()}),null),M(J0,I(z0,{get when(){return J.onAddTask},get children(){var a=V("text");return W(a,T("[+]")),Q(a,"wrapMode","none"),Q(a,"onMouseUp",()=>J.onAddTask?.()),x((r)=>{var O=Y.primary,L0=y1.BOLD;return O!==r.e&&(r.e=Q(a,"fg",O,r.e)),L0!==r.t&&(r.t=Q(a,"attributes",L0,r.t)),r},{e:void 0,t:void 0}),a}}),null),M(d,I(z0,{get when(){return z()},get children(){var a=V("box"),r=V("text"),O=V("text"),L0=V("text");return W(a,r),W(a,O),W(a,L0),Q(a,"flexDirection","row"),Q(a,"gap",0),Q(a,"paddingBottom",1),Q(a,"paddingLeft",1),W(r,T("/")),Q(r,"wrapMode","none"),Q(O,"wrapMode","none"),M(O,q),W(L0,T("\u2588")),Q(L0,"wrapMode","none"),M(a,I(z0,{get when(){return q().length===0},get children(){var f0=V("text"),n0=T(" fuzzy filter");return W(f0,n0),Q(f0,"wrapMode","none"),x((M0)=>Q(f0,"fg",Y.textMuted,M0)),f0}}),null),M(a,I(z0,{get when(){return q().length>0},get children(){var f0=V("text"),n0=T(" "),M0=T("/");return W(f0,n0),W(f0,M0),Q(f0,"wrapMode","none"),M(f0,()=>Q0().length,M0),M(f0,P,null),x((m0)=>Q(f0,"fg",Y.textMuted,m0)),f0}}),null),x((f0)=>{var{info:n0,text:M0,info:m0}=Y,D0=y1.BLINK;return n0!==f0.e&&(f0.e=Q(r,"fg",n0,f0.e)),M0!==f0.t&&(f0.t=Q(O,"fg",M0,f0.t)),m0!==f0.a&&(f0.a=Q(L0,"fg",m0,f0.a)),D0!==f0.o&&(f0.o=Q(L0,"attributes",D0,f0.o)),f0},{e:void 0,t:void 0,a:void 0,o:void 0}),a}}),r0),W(r0,x0),Q(r0,"flexDirection","row"),Q(r0,"justifyContent","space-between"),Q(r0,"gap",1),Q(r0,"paddingBottom",1),Q(r0,"paddingLeft",1),Q(r0,"paddingRight",1),W(x0,e0),Q(x0,"flexDirection","row"),Q(x0,"gap",2),M(x0,I(X1,{each:uz,children:(a)=>{let r=()=>X()===a.view;return(()=>{var O=V("text");return Q(O,"wrapMode","none"),Q(O,"onMouseUp",()=>G(a.view)),M(O,()=>a.label),x((L0)=>{var f0=r()?Y.primary:Y.textMuted,n0=r()?y1.BOLD:void 0;return f0!==L0.e&&(L0.e=Q(O,"fg",f0,L0.e)),n0!==L0.t&&(L0.t=Q(O,"attributes",n0,L0.t)),L0},{e:void 0,t:void 0}),O})()}}),e0),W(e0,T("[/]")),Q(e0,"wrapMode","none"),M(r0,I(z0,{get when(){return J.sortMode},get children(){var a=V("text");return W(a,T("sort")),Q(a,"wrapMode","none"),Q(a,"onMouseUp",()=>J.onSortModeToggle?.()),x((r)=>{var O=Y.textMuted,L0=y1.DIM;return O!==r.e&&(r.e=Q(a,"fg",O,r.e)),L0!==r.t&&(r.t=Q(a,"attributes",L0,r.t)),r},{e:void 0,t:void 0}),a}}),null),M(d,I(z0,{get when(){return N().length>1},get children(){var a=V("box"),r=V("box"),O=V("text"),L0=V("text"),f0=V("text"),n0=T(" ");return W(a,r),W(a,f0),Q(a,"flexDirection","row"),Q(a,"justifyContent","space-between"),Q(a,"gap",1),Q(a,"paddingBottom",1),Q(a,"paddingLeft",1),Q(a,"paddingRight",1),Q(a,"onMouseUp",()=>Z0()),W(r,O),W(r,L0),Q(r,"flexDirection","row"),Q(r,"gap",1),W(O,T("Project")),Q(O,"wrapMode","none"),Q(L0,"wrapMode","none"),M(L0,s),W(f0,n0),Q(f0,"wrapMode","none"),M(f0,Y0,n0),M(f0,()=>Y0()===1?"task":"tasks",null),x((M0)=>{var m0=Y.textMuted,D0=y1.BOLD,E0=X0()?Y.primary:Y.textMuted,z1=X0()?y1.BOLD:void 0,p0=Y.textMuted,_0=y1.DIM;return m0!==M0.e&&(M0.e=Q(O,"fg",m0,M0.e)),D0!==M0.t&&(M0.t=Q(O,"attributes",D0,M0.t)),E0!==M0.a&&(M0.a=Q(L0,"fg",E0,M0.a)),z1!==M0.o&&(M0.o=Q(L0,"attributes",z1,M0.o)),p0!==M0.i&&(M0.i=Q(f0,"fg",p0,M0.i)),_0!==M0.n&&(M0.n=Q(f0,"attributes",_0,M0.n)),M0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),a}}),G1),M(d,I(z0,{get when(){return j0().length>0},get children(){var a=V("box"),r=V("scrollbox"),O=V("box");return W(a,r),Q(a,"flexDirection","column"),Q(a,"flexShrink",0),M(a,I(b0,{label:"PROJECTS"}),r),W(r,O),kZ((L0)=>{a0=L0},r),Q(r,"flexShrink",0),Q(r,"flexGrow",0),Q(r,"minHeight",0),Q(r,"stickyScroll",!1),Q(r,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),Q(O,"flexShrink",0),Q(O,"gap",0),Q(O,"paddingRight",1),M(O,I(X1,{get each(){return j0()},children:(L0)=>I(N0,{row:L0})})),x((L0)=>Q(r,"maxHeight",V0(),L0)),a}}),G1),M(d,I(b0,{label:"TASKS",get suffix(){return Y1(()=>C()==="default")()?void 0:C()},get topPad(){return j0().length>0}}),G1),W(G1,F1),kZ((a)=>{v=a},G1),Q(G1,"flexGrow",1),Q(G1,"minHeight",0),Q(G1,"stickyScroll",!1),Q(G1,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),Q(F1,"flexShrink",0),Q(F1,"gap",0),Q(F1,"paddingRight",1),M(F1,I(X1,{get each(){return S0()},children:(a)=>{let{task:r,flatIndex:O}=a,L0=()=>O===I0(),f0=()=>r.id===J.selectedId(),n0=U0(()=>{let _0=J.chatRunState?.();if(!_0)return!1;let Z1=`${r.id}:`;for(let[C1,g0]of _0)if(g0==="running"&&C1.startsWith(Z1))return!0;return!1}),M0=U0(()=>{let _0=Pf(J.worktreeChanges?.(),r.worktreePath);if(_0)return _0;if(D(),!r.archived)AW(r.worktreePath);return OW(r.worktreePath)},void 0,{equals:kY}),m0=U0(()=>MW({task:r,activity:J.engineState?.().get(r.id),job:J.taskJobs?.().get(r.id),live:n0(),spinnerFrame:0,subtitleBudget:y(),truncateBranch:dU,mainBranch:""})),D0=U0(()=>FW(m0(),l)),E0=()=>w0(D0().tone),z1=()=>L0()?Y.focusAccent:f0()?Y.primary:void 0,p0=()=>L0()||f0()?"\u258C":" ";return(()=>{var _0=V("box"),Z1=V("box"),C1=V("box"),g0=V("text"),c=V("box"),C0=V("text"),A1=V("text"),S1=V("box"),H1=V("text"),o0=V("box"),v1=V("text");return W(_0,Z1),Q(_0,"flexDirection","column"),Q(_0,"gap",0),Q(_0,"paddingBottom",1),W(Z1,C1),W(Z1,S1),kZ((b)=>{o.set(O,b),P1(()=>{if(o.get(O)===b)o.delete(O)})},Z1),Q(Z1,"flexDirection","column"),Q(Z1,"gap",0),Q(Z1,"onMouseUp",()=>{if(J.onSelect(r.id),J.activateOnClick)J.onActivate?.(r.id)}),Q(Z1,"onMouseOver",(b)=>A0({task:r,x:b.x,y:b.y})),Q(Z1,"onMouseOut",()=>A0((b)=>b?.task.id===r.id?null:b)),W(C1,g0),W(C1,c),Q(C1,"flexDirection","row"),Q(C1,"gap",0),Q(g0,"wrapMode","none"),M(g0,p0),W(c,C0),W(c,A1),Q(c,"flexDirection","row"),Q(c,"flexGrow",1),Q(c,"paddingRight",1),Q(c,"gap",0),Q(C0,"wrapMode","none"),M(C0,()=>D0().stateGlyph),Q(A1,"wrapMode","none"),Q(A1,"flexGrow",1),M(A1,()=>DW(D0().titleText,h())),M(c,I(z0,{get when(){return Y1(()=>!!J.moveMode?.())()&&L0()},get children(){var b=V("text");return W(b,T(" move")),Q(b,"wrapMode","none"),x((W0)=>Q(b,"fg",Y.warning,W0)),b}}),null),W(S1,H1),W(S1,o0),Q(S1,"flexDirection","row"),Q(S1,"gap",0),Q(H1,"wrapMode","none"),M(H1,p0),W(o0,v1),Q(o0,"flexDirection","row"),Q(o0,"flexGrow",1),Q(o0,"paddingLeft",2),Q(o0,"paddingRight",1),Q(o0,"gap",1),Q(v1,"wrapMode","none"),Q(v1,"flexGrow",1),M(v1,()=>D0().subtitleText),M(o0,I(z0,{get when(){return r.pinned===!0},get children(){var b=V("text");return W(b,T("\u25B4")),Q(b,"wrapMode","none"),x((W0)=>Q(b,"fg",Y.warning,W0)),b}}),null),M(o0,I(z0,{get when(){return hU(r)},children:(b)=>(()=>{var W0=V("text");return Q(W0,"wrapMode","none"),M(W0,()=>b().glyph),x((h0)=>Q(W0,"fg",w0(b().tone),h0)),W0})()}),null),M(o0,I(z0,{get when(){return M0().added>0},get children(){var b=V("text"),W0=T("+");return W(b,W0),Q(b,"wrapMode","none"),M(b,()=>M0().added,null),x((h0)=>Q(b,"fg",Y.success,h0)),b}}),null),M(o0,I(z0,{get when(){return M0().deleted>0},get children(){var b=V("text"),W0=T("\u2212");return W(b,W0),Q(b,"wrapMode","none"),M(b,()=>M0().deleted,null),x((h0)=>Q(b,"fg",Y.error,h0)),b}}),null),x((b)=>{var W0=L0()?Y.backgroundElement:void 0,h0=z1(),Q1=E0(),YJ=y1.BOLD,qJ=Y.text,VJ=f0()||L0()?y1.BOLD:void 0,bY=z1(),TY=Y.textMuted,KJ=y1.DIM;return W0!==b.e&&(b.e=Q(Z1,"backgroundColor",W0,b.e)),h0!==b.t&&(b.t=Q(g0,"fg",h0,b.t)),Q1!==b.a&&(b.a=Q(C0,"fg",Q1,b.a)),YJ!==b.o&&(b.o=Q(C0,"attributes",YJ,b.o)),qJ!==b.i&&(b.i=Q(A1,"fg",qJ,b.i)),VJ!==b.n&&(b.n=Q(A1,"attributes",VJ,b.n)),bY!==b.s&&(b.s=Q(H1,"fg",bY,b.s)),TY!==b.h&&(b.h=Q(v1,"fg",TY,b.h)),KJ!==b.r&&(b.r=Q(v1,"attributes",KJ,b.r)),b},{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}),_0})()}}),null),M(F1,I(z0,{get when(){return Q0().length===0},get children(){var a=V("box"),r=V("text");return W(a,r),Q(a,"paddingTop",1),Q(a,"paddingLeft",1),M(r,(()=>{var O=Y1(()=>!!(z()&&q().trim().length>0));return()=>O()?"No matching tasks \u2014 esc to clear.":Y1(()=>!!X0())()?X()==="active"?"No active tasks for this project.":"No archived tasks for this project.":X()==="active"?"No active tasks \u2014 press n or [+] to create one.":"No archived tasks."})()),x((O)=>Q(r,"fg",Y.textMuted,O)),a}}),null),M(F1,I(z0,{get when(){return Y1(()=>!!(X0()&&Q0().length>0&&!G0()))()&&!(z()&&q().trim().length>0)},get children(){var a=V("box"),r=V("text");return W(a,r),Q(a,"paddingTop",1),Q(a,"paddingLeft",1),Q(r,"wrapMode","none"),M(r,()=>X()==="active"?"No active tasks for this project.":"No archived tasks for this project."),x((O)=>{var L0=Y.textMuted,f0=y1.DIM;return L0!==O.e&&(O.e=Q(r,"fg",L0,O.e)),f0!==O.t&&(O.t=Q(r,"attributes",f0,O.t)),O},{e:void 0,t:void 0}),a}}),null),M(F1,I(z0,{get when(){return Y1(()=>X()==="archived")()&&Q0().length>0},get children(){var a=V("box"),r=V("text");return W(a,r),Q(a,"paddingTop",1),Q(a,"paddingLeft",1),W(r,T("a to unarchive")),Q(r,"wrapMode","none"),x((O)=>{var L0=Y.textMuted,f0=y1.DIM;return L0!==O.e&&(O.e=Q(r,"fg",L0,O.e)),f0!==O.t&&(O.t=Q(r,"attributes",f0,O.t)),O},{e:void 0,t:void 0}),a}}),null),M(d,I(z0,{get when(){return J.zenActive?.()},get children(){var a=V("box"),r=V("text");return W(a,r),Q(a,"flexShrink",0),Q(a,"paddingLeft",1),Q(a,"paddingRight",1),Q(a,"paddingTop",1),W(r,T("\u262F ZEN")),Q(r,"wrapMode","none"),x((O)=>{var L0=Y.accent,f0=y1.BOLD;return L0!==O.e&&(O.e=Q(r,"fg",L0,O.e)),f0!==O.t&&(O.t=Q(r,"attributes",f0,O.t)),O},{e:void 0,t:void 0}),a}}),null),M(d,I(z0,{get when(){return q0()},children:(a)=>{let r=U0(()=>{let D0=a().task,E0=[];if(E0.push({text:D0.kind==="main"?KY(D0.repo):D0.title,bold:!0}),D0.branch.length>0)E0.push({text:`\u2387 ${D0.branch}`});if(D0.worktreePath.length>0)E0.push({text:D0.worktreePath,dim:!0});return E0}),O=72,L0=U0(()=>Math.min(68,Math.max(...r().map((D0)=>yk(D0.text))))),f0=U0(()=>L0()+4),n0=U0(()=>r().length+2),M0=U0(()=>Math.max(0,Math.min(a().x+2,e().width-f0()-1))),m0=U0(()=>Math.max(0,Math.min(a().y+1,e().height-n0()-1)));return(()=>{var D0=V("box");return Q(D0,"position","absolute"),Q(D0,"zIndex",2600),Q(D0,"flexDirection","column"),Q(D0,"border",!0),Q(D0,"paddingLeft",1),Q(D0,"paddingRight",1),M(D0,I(X1,{get each(){return r()},children:(E0)=>(()=>{var z1=V("text");return Q(z1,"wrapMode","none"),M(z1,(()=>{var p0=Y1(()=>!!E0.dim);return()=>p0()?Sk(E0.text,L0()):LW(E0.text,L0())})()),x((p0)=>{var _0=E0.dim?Y.textMuted:Y.text,Z1=E0.bold?y1.BOLD:E0.dim?y1.DIM:void 0;return _0!==p0.e&&(p0.e=Q(z1,"fg",_0,p0.e)),Z1!==p0.t&&(p0.t=Q(z1,"attributes",Z1,p0.t)),p0},{e:void 0,t:void 0}),z1})()})),x((E0)=>{var z1=M0(),p0=m0(),_0=f0(),Z1=Y.focusAccent,C1=Y.backgroundElement;return z1!==E0.e&&(E0.e=Q(D0,"left",z1,E0.e)),p0!==E0.t&&(E0.t=Q(D0,"top",p0,E0.t)),_0!==E0.a&&(E0.a=Q(D0,"width",_0,E0.a)),Z1!==E0.o&&(E0.o=Q(D0,"borderColor",Z1,E0.o)),C1!==E0.i&&(E0.i=Q(D0,"backgroundColor",C1,E0.i)),E0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),D0})()}}),null),x((a)=>{var r=Z()?Y.focusAccent:Y.textMuted,O=y1.BOLD,L0=Y.textMuted,f0=y1.DIM;return r!==a.e&&(a.e=Q(d0,"fg",r,a.e)),O!==a.t&&(a.t=Q(d0,"attributes",O,a.t)),L0!==a.a&&(a.a=Q(e0,"fg",L0,a.a)),f0!==a.o&&(a.o=Q(e0,"attributes",f0,a.o)),a},{e:void 0,t:void 0,a:void 0,o:void 0}),d})()}var cU=32,uz,Ck=2000,gk=16;var iU=S(()=>{w();w();w();w();w();w();w();w();w();w();B1();u1();u1();TU();Oq();uU();PU();fG();mU();uz=[{view:"active",label:"Workspace"},{view:"archived",label:"Archives"}]});var _U={};q1(_U,{startTasksPane:()=>Tk,legendRowCap:()=>pU,legendCap:()=>aU});import{existsSync as lU}from"fs";import{stat as kk}from"fs/promises";import{TextAttributes as yq}from"@opentui/core";function RW(J){return!!J&&pz(J)}function $U(J){let Y=J instanceof Error?J.message:String(J);if(/not a git repository/i.test(Y))return"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.";return`Couldn't create the worktree: ${Y}`}function Nk(J){let{theme:Y}=v0(),Z=h1(),X=FG(),G=Uq(),[z,f]=p(J.tasks().some((v)=>v.id===J.initialTaskId)?J.initialTaskId:J.tasks()[0]?.id??null);function q(v){G.notify({kind:"error",taskId:z()??"",tabId:"",title:v})}function B(v){G.notify({kind:"done",taskId:z()??"",tabId:"",title:v})}let[j,K]=p(!1),[H,U]=p(X.get("activeSortMode")==="recent"?"recent":"default"),L=X.get("tasksPane.projectFilter"),[F,D]=p(typeof L==="string"&&L.length>0?L:null),A=(v)=>{D(v),X.set("tasksPane.projectFilter",v)},[R,l]=p(null),[g,k]=p(!1);{let v=process.env.TMUX_PANE;if(v){let H0=()=>{c0(["show-options","-wqv","-t",v,uX]).then(({code:R0,stdout:b0})=>{k(R0===0&&b0.trim().length>0)})};H0();let o=setInterval(H0,1000);P1(()=>clearInterval(o))}}let C=IY(),N=!J.initialTaskId;s0(()=>{let v=J.orch?.activeTaskSignal()();if(!v)return;if(!N){if(v!==J.initialTaskId)return;N=!0}f(v)}),s0(LJ(()=>J.orch?.uiPrefsSignal()(),(v)=>{if(v&&v.sortMode!==l1(H))U(v.sortMode);if(v&&v.projectFilter!==l1(F))D(v.projectFilter)})),s0(()=>{let v=J.orch?.updateSignal()();if(v)l(v)});let _={orch:J.orch,tasks:()=>J.tasks(),confirm:async(v)=>await sY.show(Z,v.title,v.body,v.cancelLabel,v.confirmLabel)===!0,promptText:(v,H0)=>UY.show(Z,v,H0),logger:console,logPrefix:"[kobe tasks]",notifyError:q,notifyInfo:B,reload:()=>J.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(v,H0)=>{if(z()!==v)return;let o=J.tasks();f(H0?.id??(o.find((R0)=>!R0.archived)??o[0])?.id??null)},promptNewTask:(v,H0,o)=>Bq.show(Z,v,H0,o),cursorRepo:()=>{let v=J.tasks();return(v.find((H0)=>H0.id===z())??v[0])?.repo},lastVendor:()=>g1("lastSelectedVendor"),rememberVendor:(v)=>i1("lastSelectedVendor",v),openCreateSurface:async(v)=>{if(fX(X.get($Y,QX))!=="chattab")return!1;let o=await AJ();if(!o)return!1;return await If(o,v),!0},selectTask:(v)=>f(v),enterTask:(v)=>q0(v)};async function X0(){await RU(_)}async function s(){if(fX(X.get($Y,QX))==="chattab"){let o=await AJ();if(o){await Sf(o);return}}if(!(await AX.show(Z,X,J.orch??void 0)).visualPrefsChanged)return;if(!X.flush())return;try{let o=await AJ();if(o)await GG(o)}catch(o){console.error("[kobe tasks] failed to refresh workspace panes:",o)}}async function Y0(){let v=await AJ();if(v){await kf(v);return}AG.show(Z)}async function u(){if(!R()?.hasUpdate){B(`Already on the latest version (v${i0})`);return}let H0=await AJ();if(!H0)return;await Nf(H0)}async function Q0(v){await DU(_,v)}async function t(v){await MU(_,v)}async function j0(v){await FU(_,v)}async function S0(v){await OU(_,v)}async function $(v){await AU(_,v)}async function P(v){let o=J.tasks().find((b0)=>b0.id===v)?.worktreePath;if(!o||!lU(o)){if(!J.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),q("No daemon running \u2014 can't create the worktree");return}try{o=await J.orch.ensureWorktree(v)}catch(b0){console.error("[kobe tasks] task.ensureWorktree failed:",b0),q($U(b0));return}await J.reload()}if(!o||!lU(o))return;let R0=gU();if(!R0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),q("No editor found \u2014 set KOBE_OPEN_EDITOR (e.g. 'code', 'cursor', 'nvim')");return}if(!yU(o,R0))console.error(`[kobe tasks] failed to open worktree with ${R0.label}`),q(`Couldn't open worktree with ${R0.label}`)}async function G0(){if(!process.env.TMUX_PANE)return;let v=await AJ();if(!v)return;let H0=await cX(v);if(!H0)return;await u0(["select-pane","-t",H0])}async function Z0(v,H0){let o=J.tasks().find((R0)=>R0.id===v);if(!o||o.kind==="main"||!J.orch)return;try{await J.orch.moveTask(v,H0)}catch(R0){console.error("[kobe tasks] task.move failed:",R0),q(`Couldn't move task: ${R0 instanceof Error?R0.message:String(R0)}`);return}f(v),await J.reload()}let[K0,h]=p(X.get("tasksPane.keysCollapsed",!1)===!0),y=(v)=>{h(v),X.set("tasksPane.keysCollapsed",v)};s0(LJ(()=>J.orch?.uiPrefsSignal()(),(v)=>{if(v&&v.keysCollapsed!==l1(K0))h(v.keysCollapsed)}));let[e,V0]=p(!1);L1(()=>({enabled:Z.stack.length===0&&!e(),bindings:TZ({"help.open":()=>void Y0(),"task.new":()=>void X0(),"settings.open.sidebar":()=>void s(),"tasks.update":()=>void u(),"tasks.openWorktree":()=>{let v=z();if(v)P(v)},"tasks.renameBranch":()=>{let v=z();if(v)S0(v)},"tasks.cycleEngine":()=>{let v=z();if(v)$(v)},"tasks.toggleKeys":()=>y(!K0()),"tasks.focusEngine":()=>void G0().catch((v)=>console.error("[kobe tasks] focus engine pane failed:",v))})}));async function q0(v){let H0=K1(v),o=J.tasks().find((J0)=>J0.id===v),R0=await AJ();if(R0&&R0!==H0)await zz(R0);if(await f1(H0)){let J0=await xQ(H0,"@kobe_worktree")||o?.worktreePath||"";if(RW(J0)){let F0=o?.repo?aY(o.repo,J0,{kind:"repo-init"}):void 0;await RZ({name:H0,cwd:J0,command:RJ(o?.vendor),taskId:v,vendor:o?.vendor,repo:o?.repo,launchInit:F0})}await xf(H0),await u0(["switch-client","-t",`=${H0}`]),J.orch?.setActiveTask(v).catch(()=>{});return}let w0=o?.worktreePath;if(!RW(w0)){if(!J.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),q("No daemon running \u2014 can't open this task");return}try{w0=await J.orch.ensureWorktree(v)}catch(J0){console.error("[kobe tasks] task.ensureWorktree failed:",J0),q($U(J0));return}await J.reload()}if(!RW(w0))return;let N0=o?.repo?aY(o.repo,w0,{kind:"repo-init"}):void 0;if(!await RZ({name:H0,cwd:w0,command:RJ(o?.vendor),taskId:v,vendor:o?.vendor,repo:o?.repo,launchInit:N0})){console.error(`[kobe tasks] failed to start session ${H0}`),q("Couldn't start this task's session");return}await xf(H0),await u0(["switch-client","-t",`=${H0}`]),J.orch?.setActiveTask(v).catch(()=>{})}let A0=U0(()=>{let v=R();if(v?.hasUpdate)return{label:`v${v.latest} \u2191`,emphasize:!0};return{label:`v${i0}`,emphasize:!1}}),I0=()=>J.orch?.daemonStaleSignal()()??!1,k0=()=>J.orch?.daemonVersionSignal()()??null,a0=U0(()=>J.tasks().find((v)=>v.id===z())?.kind==="main");return(()=>{var v=V("box"),H0=V("box");return W(v,H0),Q(v,"flexDirection","column"),Q(v,"flexGrow",1),M(v,I(KU,{stale:I0,daemonVersion:k0,clientVersion:i0,width:()=>C().width}),H0),Q(H0,"flexGrow",1),Q(H0,"flexShrink",1),M(H0,I(nU,{get tasks(){return J.tasks},selectedId:z,onSelect:f,onActivate:(o)=>void q0(o),activateOnClick:!0,headerStatus:A0,onHeaderStatusClick:()=>void u(),onAddTask:()=>void X0(),zenActive:g,width:()=>C().width,get engineState(){return Y1(()=>!!J.orch)()?J.orch.engineStateSignal():void 0},get taskJobs(){return Y1(()=>!!J.orch)()?J.orch.taskJobsSignal():void 0},get worktreeChanges(){return J.orch?()=>{let o=J.orch;if(!o||o.connectionStateSignal()()!=="online")return null;return o.worktreeChangesSignal()()}:void 0},onRenameRequest:(o)=>void j0(o),onDeleteRequest:(o)=>void t(o),onArchiveRequest:(o)=>void Q0(o),onLocalMergeRequest:(o)=>{let R0=J.tasks().find((b0)=>b0.id===o);if(!R0||R0.kind==="main")return;f(o),K((b0)=>!b0)},moveMode:j,onMoveRequest:(o,R0)=>void Z0(o,R0),onMoveModeExit:()=>K(!1),sortMode:H,projectFilter:F,onProjectFilterChange:A,onSortModeToggle:()=>{let o=H()==="default"?"recent":"default";U(o),X.set("activeSortMode",o)},focused:()=>Z.stack.length===0,onSearchActiveChange:V0})),M(v,I(bk,{moveMode:j,selectedIsMain:a0,collapsed:K0,onToggleCollapsed:()=>y(!K0())}),null),x((o)=>Q(v,"backgroundColor",Y.background,o)),v})()}function aU(J){let Y=rH(J);if(!Y)return null;let Z=Y.hint?.keys??Y.keys[0];return Z&&Z.length>0?Z:null}function pU(J){let Y=J.map(aU).filter((Z)=>Z!==null);return Y.length>0?Y.join("/"):null}function bk(J){let{theme:Y}=v0(),[Z,X]=p("Prefix");s1(()=>{c0(["show-options","-g","prefix"]).then(({code:U,stdout:L})=>{if(U!==0)return;let F=Rq(L);if(F)X(F)})});let G=()=>{_H();let U=Hf(),L=U.binds,F=[],D=U.focus.filter((R)=>R!==null).map((R)=>R.chord);if(D.length===4&&D.every((R,l)=>R===MZ[l]))F.push({k:"ctrl+hjkl",label:"move panes"});else if(D.length>0)F.push({k:D[0],label:"move panes"});let A=(R,l)=>{let g=l.map((k)=>L[k]?.chord).filter((k)=>!!k);if(g.length>0)F.push({k:`prefix ${g.join("/")}`,label:R})};if(L["tmux.detach"])F.push({k:L["tmux.detach"].chord,label:"tasks\u2192detach"});return A("splits",["tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"]),A("panes",["tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle"]),F},z=()=>{_H();let U=[{ids:["help.open"],label:"full help"},{ids:["task.new"],label:"new task"},{ids:["settings.open.sidebar"],label:"settings"},{ids:["sidebar.select"],label:"open"},{ids:["tasks.focusEngine"],label:"focus engine"},{ids:["tasks.openWorktree"],label:"open wt"},{ids:["sidebar.delete"],label:"delete"},{ids:["sidebar.view"],label:"views"},{ids:["sidebar.projectFilter"],label:"project"}],L=[];for(let F of U){let D=pU(F.ids);if(D===null)continue;L.push({k:D,label:F.label,dimWhenMain:F.dimWhenMain})}return L.push(...G()),L},f=[{k:"j/k",label:"reorder"},{k:"enter/esc",label:"done"}],q=()=>J.moveMode?.()?f:z(),B=18,j=()=>Math.min(B,Math.max(...q().map((U)=>U.label.length))),K=(U)=>U.length<=j()?U:`${U.slice(0,Math.max(0,j()-1))}\u2026`,H=()=>(J.collapsed?.()??!1)&&!(J.moveMode?.()??!1);return(()=>{var U=V("box"),L=V("text");return W(U,L),Q(U,"flexShrink",0),Q(U,"flexDirection","column"),Q(U,"paddingLeft",1),Q(U,"paddingRight",1),Q(U,"paddingTop",1),Q(U,"paddingBottom",1),Q(U,"gap",0),Q(L,"wrapMode","none"),Q(L,"onMouseUp",()=>J.onToggleCollapsed?.()),M(L,()=>H()?"\u2500\u2500 keys ?\u25B8 \u2500\u2500":"\u2500\u2500 keys ?\u25BE \u2500\u2500"),M(U,I(z0,{get when(){return!H()},get children(){return I(X1,{get each(){return q()},children:(F)=>{let D=()=>F.dimWhenMain===!0&&(J.selectedIsMain?.()??!1);return(()=>{var A=V("box"),R=V("box"),l=V("text"),g=T("["),k=T("]"),C=V("box"),N=V("text");return W(A,R),W(A,C),Q(A,"flexDirection","row"),Q(A,"gap",1),Q(A,"justifyContent","space-between"),W(R,l),Q(R,"width",10),Q(R,"flexShrink",0),W(l,g),W(l,k),Q(l,"wrapMode","none"),M(l,()=>OG(F.k,Z()),k),W(C,N),Q(C,"flexShrink",0),Q(N,"wrapMode","none"),M(N,()=>K(F.label)),x((_)=>{var X0=D()?Y.textMuted:Y.accent,s=D()?yq.DIM:yq.BOLD,Y0=j(),u=Y.textMuted,Q0=D()?yq.DIM:void 0;return X0!==_.e&&(_.e=Q(l,"fg",X0,_.e)),s!==_.t&&(_.t=Q(l,"attributes",s,_.t)),Y0!==_.a&&(_.a=Q(C,"width",Y0,_.a)),u!==_.o&&(_.o=Q(N,"fg",u,_.o)),Q0!==_.i&&(_.i=Q(N,"attributes",Q0,_.i)),_},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),A})()}})}}),null),x((F)=>{var D=Y.textMuted,A=yq.DIM;return D!==F.e&&(F.e=Q(L,"fg",D,F.e)),A!==F.t&&(F.t=Q(L,"attributes",A,F.t)),F},{e:void 0,t:void 0}),U})()}async function Tk(J={}){await WJ({logContext:"tasks",providers:{notifications:!0},setup:()=>Ek(J)})}async function Ek(J){let Y=new yX({homeDir:DY()});await Y.load();let[Z,X]=p(Y.list()),G=null;try{let j=await lJ();if(j){let K=new QJ(j);await K.init(),G=K}else vY("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(j){zZ("tasks-boot",j),vY("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let z=()=>G&&G.connectionStateSignal()()==="online"?G.tasksSignal()():Z(),f=async()=>{await Y.load(),X(Y.list())},q="",B=setInterval(()=>{if(G&&G.connectionStateSignal()()==="online")return;(async()=>{let j="missing";try{let K=await kk(Y.filePath);j=`${K.mtimeMs}:${K.size}`}catch{}if(j===q)return;q=j,await f()})().catch(()=>{})},Ik);return{root:()=>[I(Nk,{tasks:z,get initialTaskId(){return J.initialTaskId},orch:G,reload:f}),I(WU,{})],onDestroy:()=>{if(B)clearInterval(B);G?.dispose()}}}var Ik=1500;var rU=S(()=>{w();w();w();w();w();w();w();w();N1();XY();w();$Z();CJ();B1();IZ();bJ();n1();rJ();IG();tX();O1();Wf();jJ();zW();kz();QW();VW();VU();UU();MG();Iz();Lq();u1();GW();uZ();gJ();CU();SU();iU();t1();uJ();fW()});var oU={};q1(oU,{startSettingsHost:()=>xk});function uk(J){let Y=FG(),Z=h1(),{theme:X}=v0(),G=!1,z=!1;async function f(){if(z)return;z=!0;try{if(Y.flush()&&G){let B=await AJ();if(B)await GG(B)}}catch(q){console.error("[kobe settings] failed to refresh workspace panes:",q)}finally{process.exit(0)}}return L1(()=>({enabled:Z.stack.length===0,bindings:[{key:"escape",cmd:f},{key:"q",cmd:f},{key:"ctrl+c",cmd:f}]})),(()=>{var q=V("scrollbox");return Q(q,"flexGrow",1),Q(q,"paddingTop",1),Q(q,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),M(q,I(AX,{kv:Y,get orchestrator(){return J.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{G=!0},onClose:f})),x((B)=>Q(q,"backgroundColor",X.background,B)),q})()}async function xk(){await WJ({setup:async()=>{let J=null;try{let Y=await lJ();if(Y){let Z=new QJ(Y);await Z.init(),J=Z}else console.error("[kobe settings] no daemon running; Restart backend disabled")}catch(Y){console.error("[kobe settings] daemon unavailable; Restart backend disabled:",Y)}return{root:()=>I(uk,{orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var sU=S(()=>{w();w();w();w();w();w();CJ();IZ();VW();Iz();u1();uZ();gJ();t1();uJ()});var tU={};q1(tU,{startHelpHost:()=>hk});function wk(){let J=h1(),{theme:Y}=v0();function Z(){process.exit(0)}return L1(()=>({enabled:J.stack.length===0,bindings:[{key:"escape",cmd:Z},{key:"q",cmd:Z},{key:"f1",cmd:Z},{key:"ctrl+c",cmd:Z}]})),(()=>{var X=V("box");return Q(X,"flexGrow",1),Q(X,"paddingTop",1),M(X,I(AG,{onClose:Z})),x((G)=>Q(X,"backgroundColor",Y.background,G)),X})()}async function hk(){await WJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>I(wk,{})})})}var eU=S(()=>{w();w();w();w();w();zW();u1();uZ();gJ();uJ()});var JL={};q1(JL,{startUpdateHost:()=>ik});import{spawn as Pk,spawnSync as vk}from"child_process";import{TextAttributes as CG}from"@opentui/core";function mk(J){if(!J)return!1;let Y=process.platform,[Z,X]=Y==="darwin"?["open",[J]]:Y==="win32"?["cmd",["/c","start","",J]]:["xdg-open",[J]];try{return Pk(Z,X,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function ck(J){return J.replace(/\r\n/g,`
225
225
  `).split(`
226
- `).map((Y)=>Y.trim()).filter(Boolean)}function Kk(){if(!process.stdin.isTTY)return Promise.resolve();return new Promise((J)=>{let Y=process.stdin,Z=()=>{Y.off("data",Z),Y.setRawMode?.(!1),Y.pause(),J()};Y.setRawMode?.(!0),Y.resume(),Y.once("data",Z)})}function Uk(){let{theme:J}=x0(),Y=s1(),[Z,f]=p(null),[X,G]=p([]),[Q,q]=p(!0),[B,H]=p("update"),[K,j]=p(null),U=V0(()=>Z()?.latest??n0),L=V0(()=>X()[0]?.url??Nq(U())),F=V0(()=>[{id:"update",key:"U",label:"Update now",detail:kY},{id:"release",key:"R",label:"Open release",detail:L()??"release URL unavailable"},{id:"close",key:"Q",label:"Close",detail:"return to the previous tmux window"}]);o1(()=>{D()});async function D(){let R=await RX({force:!0});f(R);let C=R?.latest??n0,g=await Iq({current:n0,latest:C});G(g),q(!1)}function O(R){let C=F().map(($)=>$.id),y=(C.indexOf(B())+R+C.length)%C.length;H(C[y]??"update")}function A(R=B()){if(R==="close")process.exit(0);if(R==="release"){j(Wk(L())?"Opened release page in your browser.":"Could not open release URL.");return}l()}async function l(){j("Leaving the TUI page and running the updater in this tmux window..."),await new Promise((g)=>setTimeout(g,30)),Y?.destroy(),process.stdout.write(`
227
- kobe ${n0} -> latest
228
- `),process.stdout.write(`running: ${kY}
226
+ `).map((Y)=>Y.trim()).filter(Boolean)}function dk(){if(!process.stdin.isTTY)return Promise.resolve();return new Promise((J)=>{let Y=process.stdin,Z=()=>{Y.off("data",Z),Y.setRawMode?.(!1),Y.pause(),J()};Y.setRawMode?.(!0),Y.resume(),Y.once("data",Z)})}function nk(){let{theme:J}=v0(),Y=e1(),[Z,X]=p(null),[G,z]=p([]),[f,q]=p(!0),[B,j]=p("update"),[K,H]=p(null),U=U0(()=>Z()?.latest??i0),L=U0(()=>G()[0]?.url??xq(U())),F=U0(()=>[{id:"update",key:"U",label:"Update now",detail:EY},{id:"release",key:"R",label:"Open release",detail:L()??"release URL unavailable"},{id:"close",key:"Q",label:"Close",detail:"return to the previous tmux window"}]);s1(()=>{D()});async function D(){let g=await yG({force:!0});X(g);let k=g?.latest??i0,C=await uq({current:i0,latest:k});z(C),q(!1)}function A(g){let k=F().map((_)=>_.id),N=(k.indexOf(B())+g+k.length)%k.length;j(k[N]??"update")}function R(g=B()){if(g==="close")process.exit(0);if(g==="release"){H(mk(L())?"Opened release page in your browser.":"Could not open release URL.");return}l()}async function l(){H("Leaving the TUI page and running the updater in this tmux window..."),await new Promise((C)=>setTimeout(C,30)),Y?.destroy(),process.stdout.write(`
227
+ kobe ${i0} -> latest
228
+ `),process.stdout.write(`running: ${EY}
229
229
 
230
- `);let R=jk("sh",["-c",kY],{stdio:"inherit"}),C=R.status??(R.error?1:0);if(R.error)process.stderr.write(`
231
- kobe update: failed to start updater: ${R.error.message}
232
- `);process.stdout.write(C===0?`
230
+ `);let g=vk("sh",["-c",EY],{stdio:"inherit"}),k=g.status??(g.error?1:0);if(g.error)process.stderr.write(`
231
+ kobe update: failed to start updater: ${g.error.message}
232
+ `);process.stdout.write(k===0?`
233
233
  kobe update complete. Relaunch kobe to use the new version.
234
234
  `:`
235
- kobe update failed with exit code ${C}.
236
- `),process.stdout.write("Press any key to close this update window."),await Kk(),process.exit(C)}return U1(()=>({bindings:[{key:"up",cmd:()=>O(-1)},{key:"down",cmd:()=>O(1)},{key:"k",cmd:()=>O(-1)},{key:"j",cmd:()=>O(1)},{key:"return",cmd:()=>A()},{key:"u",cmd:()=>A("update")},{key:"r",cmd:()=>A("release")},{key:"q",cmd:()=>A("close")},{key:"escape",cmd:()=>A("close")},{key:"ctrl+c",cmd:()=>A("close")}]})),(()=>{var R=V("box"),C=V("box"),g=V("text"),y=V("text"),$=V("box"),G0=V("text"),t=V("text"),Z0=T("v"),u=V("text"),B0=V("text"),Y0=T("v"),W0=V("box"),o=V("box"),_=V("text"),r=T("\u2500\u2500 changes from v"),f0=T(" to v"),a=T(" \u2500\u2500"),U0=V("scrollbox"),c=V("box");return W(R,C),W(R,$),W(R,W0),W(R,o),W(R,U0),z(R,"flexDirection","column"),z(R,"flexGrow",1),z(R,"paddingTop",1),z(R,"paddingLeft",2),z(R,"paddingRight",2),W(C,g),W(C,y),z(C,"flexDirection","row"),z(C,"justifyContent","space-between"),z(C,"flexShrink",0),W(g,T("KOBE UPDATE")),z(g,"wrapMode","none"),W(y,T("q / esc")),z(y,"wrapMode","none"),z(y,"onMouseUp",()=>A("close")),W($,G0),W($,t),W($,u),W($,B0),z($,"flexDirection","row"),z($,"gap",2),z($,"flexShrink",0),z($,"paddingTop",1),W(G0,T("current")),z(G0,"wrapMode","none"),W(t,Z0),z(t,"wrapMode","none"),M(t,n0,null),W(u,T("latest")),z(u,"wrapMode","none"),W(B0,Y0),z(B0,"wrapMode","none"),M(B0,U,null),z(W0,"flexDirection","column"),z(W0,"flexShrink",0),z(W0,"paddingTop",1),z(W0,"gap",0),M(W0,k(Y1,{get each(){return F()},children:(N)=>(()=>{var s=V("box"),H0=V("box"),D0=V("text"),y0=T("["),d0=T("]"),x=V("box"),F0=V("text"),Q0=V("text");return W(s,H0),W(s,x),W(s,Q0),z(s,"flexDirection","row"),z(s,"gap",1),z(s,"paddingLeft",1),z(s,"paddingRight",1),z(s,"onMouseUp",()=>A(N.id)),W(H0,D0),z(H0,"width",4),z(H0,"flexShrink",0),W(D0,y0),W(D0,d0),z(D0,"wrapMode","none"),M(D0,()=>N.key,d0),W(x,F0),z(x,"width",14),z(x,"flexShrink",0),z(F0,"wrapMode","none"),M(F0,()=>N.label),z(Q0,"wrapMode","word"),M(Q0,()=>N.detail),w((L0)=>{var k0=B()===N.id?J.primary:void 0,T0=B()===N.id?J.selectedListItemText:J.accent,m0=FX.BOLD,$0=B()===N.id?J.selectedListItemText:J.text,O0=B()===N.id?J.selectedListItemText:J.textMuted;return k0!==L0.e&&(L0.e=z(s,"backgroundColor",k0,L0.e)),T0!==L0.t&&(L0.t=z(D0,"fg",T0,L0.t)),m0!==L0.a&&(L0.a=z(D0,"attributes",m0,L0.a)),$0!==L0.o&&(L0.o=z(F0,"fg",$0,L0.o)),O0!==L0.i&&(L0.i=z(Q0,"fg",O0,L0.i)),L0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),s})()})),M(R,k(z0,{get when(){return K()},get children(){var N=V("text");return z(N,"wrapMode","word"),M(N,K),w((s)=>z(N,"fg",J.info,s)),N}}),o),W(o,_),z(o,"flexShrink",0),z(o,"paddingTop",1),W(_,r),W(_,f0),W(_,a),z(_,"wrapMode","none"),M(_,n0,f0),M(_,U,a),W(U0,c),z(U0,"flexGrow",1),z(U0,"flexShrink",1),z(U0,"stickyScroll",!1),z(c,"flexDirection","column"),z(c,"paddingRight",1),z(c,"paddingBottom",1),z(c,"gap",0),M(c,k(z0,{get when(){return Q()},get children(){var N=V("text");return W(N,T("Loading release notes...")),w((s)=>z(N,"fg",J.textMuted,s)),N}}),null),M(c,k(z0,{get when(){return r0(()=>!Q())()&&X().length===0},get children(){var N=V("text");return W(N,T("Release notes are unavailable. Use Open release to view the GitHub release page.")),z(N,"wrapMode","word"),w((s)=>z(N,"fg",J.textMuted,s)),N}}),null),M(c,k(Y1,{get each(){return X()},children:(N)=>(()=>{var s=V("box"),H0=V("text"),D0=T("v");return W(s,H0),z(s,"flexDirection","column"),z(s,"paddingBottom",1),z(s,"gap",0),W(H0,D0),z(H0,"wrapMode","none"),M(H0,()=>N.version,null),M(s,k(Y1,{get each(){return Vk(N.body)},children:(y0)=>(()=>{var d0=V("text");return z(d0,"wrapMode","word"),M(d0,y0),w((x)=>z(d0,"fg",J.textMuted,x)),d0})()}),null),w((y0)=>{var d0=J.text,x=FX.BOLD;return d0!==y0.e&&(y0.e=z(H0,"fg",d0,y0.e)),x!==y0.t&&(y0.t=z(H0,"attributes",x,y0.t)),y0},{e:void 0,t:void 0}),s})()}),null),w((N)=>{var{background:s,text:H0}=J,D0=FX.BOLD,y0=J.textMuted,d0=J.textMuted,x=J.text,F0=FX.BOLD,Q0=J.textMuted,L0=Z()?.hasUpdate?J.warning:J.success,k0=FX.BOLD,T0=J.textMuted,m0=FX.DIM,$0={trackOptions:{backgroundColor:J.background,foregroundColor:J.borderActive}};return s!==N.e&&(N.e=z(R,"backgroundColor",s,N.e)),H0!==N.t&&(N.t=z(g,"fg",H0,N.t)),D0!==N.a&&(N.a=z(g,"attributes",D0,N.a)),y0!==N.o&&(N.o=z(y,"fg",y0,N.o)),d0!==N.i&&(N.i=z(G0,"fg",d0,N.i)),x!==N.n&&(N.n=z(t,"fg",x,N.n)),F0!==N.s&&(N.s=z(t,"attributes",F0,N.s)),Q0!==N.h&&(N.h=z(u,"fg",Q0,N.h)),L0!==N.r&&(N.r=z(B0,"fg",L0,N.r)),k0!==N.d&&(N.d=z(B0,"attributes",k0,N.d)),T0!==N.l&&(N.l=z(_,"fg",T0,N.l)),m0!==N.u&&(N.u=z(_,"attributes",m0,N.u)),$0!==N.c&&(N.c=z(U0,"verticalScrollbarOptions",$0,N.c)),N},{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}),R})()}async function Lk(){await qJ({setup:()=>({root:()=>k(Uk,{})})})}var vU=S(()=>{h();h();h();h();h();h();h();h();h();q1();QJ();T1();NZ();MJ()});async function mU(J,Y){if(!Y)return 0;return a1(J).history.latestTranscriptMtimeForWorktree(Y)}var cU=S(()=>{qZ()});function Dk(J){return J.trim().split(/\s+/)[0]??""}function nU(J,Y,Z,f){let X=Z1(Z);if(J==="vim")return{bin:"vim",command:`vim ${X}`};if(J==="nvim")return{bin:"nvim",command:`nvim ${X}`};if(J==="nano")return{bin:"nano",command:`nano ${X}`};if(J==="emacs")return{bin:"emacs",command:`emacs ${X}`};let G=(Y.trim()||(f??"").trim()).trim();if(!G)return null;let Q=Dk(G);if(!Q)return null;let q=G.includes(dU)?G.split(dU).join(X):`${G} ${X}`;return{bin:Q,command:q}}function Mk(J,Y,Z){let f=Z1(Y);return["f=$(mktemp 2>/dev/null)",`if [ -n "$f" ] && git show ${Z1(`HEAD:./${Z}`)} > "$f" 2>/dev/null; then`,` ${J} -d "$f" ${f} -c 'setlocal nomodifiable' -c 'wincmd l'; r=$?`,"else",` ${J} ${f}; r=$?`,"fi",'rm -f "$f" 2>/dev/null; exit $r'].join(`
237
- `)}function Fk(J,Y){let Z=J.endsWith("/")?J:`${J}/`;return Y.startsWith(Z)?Y.slice(Z.length):null}async function Ok(J){let Y=mf(C1(dY)),Z=C1(KZ)??"",f=(process.env.VISUAL??process.env.EDITOR??"").trim();if(Y!=="auto")return nU(Y,Z,J,f);if(f)return nU("custom","",J,f);let X=Z1(J);for(let G of C5)if(await iU(G))return{bin:G,command:`${G} ${X}`};return null}async function iU(J){try{return await Bun.spawn(["sh","-c",`command -v ${Z1(J)} >/dev/null 2>&1`],{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function Ak(J,Y){try{return await Bun.spawn(["git","diff","--quiet","HEAD","--",Y],{cwd:J,stdin:"ignore",stdout:"ignore",stderr:"ignore",env:IJ()}).exited===1}catch{return!1}}async function lU(J,Y,Z){let f=await Ok(Z);if(!f)return!1;if(!await iU(f.bin))return!1;let X=await Rk(f,Y,Z);return await sJ(J,{cwd:Y,command:X,name:gk(Z)}),!0}async function Rk(J,Y,Z){let{bin:f,command:X}=J;if(f!=="nvim"&&f!=="vim")return X;if(X!==`${f} ${Z1(Z)}`)return X;let G=Fk(Y,Z);if(!G)return X;if(!await Ak(Y,G))return X;return Mk(f,Z,G)}function gk(J){let Y=J.slice(J.lastIndexOf("/")+1).trim();return Y.length>0?Y:"edit"}var dU="{file}";var $U=S(()=>{UZ();A1();iz();N1();KY()});async function W9(J,Y){if(!Y)throw Error("git(): cwd is required");let Z=await cf(Y,J),f=Z.status??-1;if(f!==0){let X=(Z.stderr??"").trim(),G=(Z.stdout??"").trim();throw Error(`git ${J.join(" ")} (cwd=${Y}) exited with code ${f}: ${X||G||"(no output)"}`)}return Z.stdout??""}async function V9(J){let Z=(await W9(["ls-files","--cached","--others","--exclude-standard","--full-name"],J)).split(`
238
- `).map((X)=>X.replace(/\r$/,"")),f=new Set;for(let X of Z)if(X.length>0)f.add(X);return Array.from(f).sort()}async function K9(J){let Y=await W9(["status","--porcelain"],J),Z=_U(Y),f=null;try{let X=await W9(["diff","--no-color","--numstat","HEAD"],J);f=new Map(Ck(X).map((G)=>[G.path,{added:G.added,deleted:G.deleted}]))}catch{f=new Map}return Z.map((X)=>{let G=f?.get(X.path);if(G)return{...X,added:G.added,deleted:G.deleted};return X})}function Ck(J){let Y=J.split(`
239
- `).map((f)=>f.replace(/\r$/,"")),Z=[];for(let f of Y){if(f.length===0)continue;let X=f.indexOf("\t");if(X<0)continue;let G=f.indexOf("\t",X+1);if(G<0)continue;let Q=f.slice(0,X),q=f.slice(X+1,G),B=f.slice(G+1),H=B.indexOf(" -> ");if(H>=0)B=B.slice(H+4);let K=Q==="-"?null:Number.parseInt(Q,10),j=q==="-"?null:Number.parseInt(q,10);if(B.length===0)continue;Z.push({path:B,added:Number.isNaN(K)?null:K,deleted:Number.isNaN(j)?null:j})}return Z}function aU(J){let Y={name:"",path:"",isDir:!0,children:[]};for(let Z of J){if(!Z)continue;let f=Z.split("/").filter((G)=>G.length>0);if(f.length===0)continue;let X=Y;for(let G=0;G<f.length;G++){let Q=f[G],B=G!==f.length-1,H=X.children.find((K)=>K.name===Q&&K.isDir===B);if(!H)H={name:Q,path:f.slice(0,G+1).join("/"),isDir:B,children:[]},X.children.push(H);X=H}}return pU(Y),Y}function pU(J){J.children.sort((Y,Z)=>{if(Y.isDir!==Z.isDir)return Y.isDir?-1:1;return Y.name.localeCompare(Z.name)});for(let Y of J.children)pU(Y)}function _U(J){let Y=J.split(`
240
- `).map((f)=>f.replace(/\r$/,"")),Z=[];for(let f of Y){if(f.length<4)continue;let X=f[0],G=f[1],Q=f[2];if(X===void 0||G===void 0||Q!==" ")continue;let q=f.slice(3),B;if(X==="?"&&G==="?")B="?";else{let H=G!==" "?G:X;if(H==="M"||H==="A"||H==="D"||H==="R"||H==="C"||H==="U")B=H;else continue}if(B==="R"){let H=q.indexOf(" -> ");if(H>=0)q=q.slice(H+4)}if(q.length===0)continue;Z.push({path:q,status:B})}return Z}var U9=S(()=>{lz()});function L9(J){U1(()=>({enabled:J.focused(),bindings:kZ({"files.nav":(Y,Z)=>{if((Z??0)%2===0)J.moveDown();else J.moveUp()},"files.hierarchy":(Y,Z)=>{if((Z??0)%2===0)J.collapseOrParent();else J.expandOrDescend()},"files.tab":(Y,Z)=>{let f=J.currentTab(),X=TG.indexOf(f);if(X<0)return;let G=(Z??0)%2===0?-1:1,Q=TG[(X+G+TG.length)%TG.length];if(Q)J.setTab(Q)},"files.open":()=>J.openCurrent(),"files.mention":()=>J.mentionCurrent?.(),"files.createPR":()=>J.createPR?.(),"files.openExternal":()=>J.openExternal(),"files.refresh":()=>J.refresh()})}))}var TG;var D9=S(()=>{KX();MJ();TG=["all","changes"]});import{spawn as rU}from"child_process";import{existsSync as Sk}from"fs";import{platform as yk}from"os";function oU(J){if(!J)return;let Y=yk();if(Y==="linux"){if(Sk("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){EG("wslview",[J],()=>{let Z=rU("wslpath",["-w",J],{stdio:["ignore","pipe","ignore"]}),f="";Z.stdout?.on("data",(X)=>{f+=X.toString()}),Z.on("close",(X)=>{if(X===0)EG("explorer.exe",[f.trim()])})});return}EG("xdg-open",[J]);return}if(Y==="darwin"){EG("open",[J]);return}if(Y==="win32"){EG("cmd.exe",["/c","start","",J]);return}}function EG(J,Y,Z){try{let f=rU(J,Y,{stdio:"ignore",detached:!0});f.on("error",()=>Z?.()),f.unref()}catch{Z?.()}}var sU=()=>{};function M9(J,Y,Z,f){for(let X of J.children)if(X.isDir){let G=Y.has(X.path);if(f.push({kind:"dir",path:X.path,name:X.name,depth:Z,expanded:G,hasChildren:X.children.length>0}),G)M9(X,Y,Z+1,f)}else f.push({kind:"file",path:X.path,name:X.name,depth:Z})}function tU(J){return J.map((Y)=>({kind:"status",path:Y.path,status:Y.status,added:Y.added,deleted:Y.deleted}))}function kk(J){return`${J.kind}\x00${J.path}`}function Ik(J,Y){if(J.kind!==Y.kind||J.path!==Y.path)return!1;switch(J.kind){case"file":{let Z=Y;return J.name===Z.name&&J.depth===Z.depth}case"dir":{let Z=Y;return J.name===Z.name&&J.depth===Z.depth&&J.expanded===Z.expanded&&J.hasChildren===Z.hasChildren}case"status":{let Z=Y;return J.status===Z.status&&J.added===Z.added&&J.deleted===Z.deleted}}}function eU(J,Y){return Wq(J,Y,kk,Ik)}function JL(J,Y){if(J===Y)return!0;if(J==null||Y==null)return!1;if(J.length!==Y.length)return!1;for(let Z=0;Z<J.length;Z++)if(J[Z]!==Y[Z])return!1;return!0}function YL(J,Y){if(J===Y)return!0;if(J==null||Y==null)return!1;if(J.length!==Y.length)return!1;for(let Z=0;Z<J.length;Z++){let f=J[Z],X=Y[Z];if(f.path!==X.path||f.status!==X.status||f.added!==X.added||f.deleted!==X.deleted)return!1}return!0}var ZL=()=>{};import{watch as Nk}from"fs";import{TextAttributes as Fq}from"@opentui/core";function bk(J){switch(J){case"M":return"warning";case"A":return"success";case"D":return"error";case"?":return"textMuted";case"R":case"C":case"U":return"info"}}function Ek(J){let Y=J.toLowerCase();if(Y.includes("not a git repository"))return"not a git repository";if(Y.includes("does not exist")||Y.includes("enoent"))return"worktree path is missing";if(Y.includes("permission denied")||Y.includes("eacces"))return"permission denied";if(Y.includes("git: not found")||Y.includes("command not found"))return"git is not installed";let Z=J.indexOf(": ");if(Z>=0&&J.startsWith("git "))return J.slice(Z+2).trim()||"git command failed";return J.trim()||"git command failed"}function xk(J,Y){if(Y<=0||J.length<=Y)return J;return`\u2026${J.slice(J.length-Math.max(0,Y-1))}`}function F9(J){let{theme:Y}=x0(),Z=RY(),f=()=>J.focused?J.focused():!0,[X,G]=p("all"),[Q,q]=p(0),[B,H]=p(0),[K,j]=p(null,{equals:JL}),[U,L]=p(null,{equals:YL}),[F,D]=p(null),[O,A]=p(new Set),l=0;async function R(r,f0){let a=++l;if(f0==null){j(null),L(null),D(null);return}D(null);try{if(r==="all"){let U0=await V9(f0);if(a!==l||J.worktreePath()!==f0)return;j(U0)}else if(r==="changes"){let U0=await K9(f0);if(a!==l||J.worktreePath()!==f0)return;L(U0)}}catch(U0){let c=U0 instanceof Error?U0.message:String(U0);if(a===l&&J.worktreePath()===f0)D(c)}}p0(WJ(J.worktreePath,async(r)=>{j(null),L(null),D(null),q(0),A(new Set),await R(X(),r)})),p0(WJ(J.worktreePath,(r)=>{if(r==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let f0=null,a=null;try{a=Nk(r,{recursive:!0},(U0,c)=>{if(c==null)return;let N=c.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,H((s)=>s+1)},500)}),a.on("error",()=>{})}catch{}i1(()=>{if(f0!=null)clearTimeout(f0);if(a!=null)a.close()})})),p0(WJ([X,B],async([r,f0])=>{let a=J.worktreePath();if(a==null)return;q(0);let c=B()>0;if(r==="all"){if(K()==null||c)await R("all",a)}else if(r==="changes"){if(U()==null||c)await R("changes",a)}}));let C=V0(()=>{let r=K();if(r==null)return null;return aU(r)}),g=V0((r)=>{let f0=[];if(X()==="all"){let a=C();if(a!=null)M9(a,O(),0,f0)}else if(X()==="changes"){let a=U();if(a!=null)f0.push(...tU(a))}return eU(r??[],f0)},[]),y=V0(()=>{let r=0,f0=0;for(let a of g()){if(a.kind!=="status")continue;if(a.added!=null)r=Math.max(r,String(a.added).length+1);if(a.deleted!=null)f0=Math.max(f0,String(a.deleted).length+1)}return{added:r,deleted:f0}}),$=V0(()=>{let r=y(),f0=(r.added>0?r.added+1:0)+(r.deleted>0?r.deleted+1:0);return Math.max(8,Z().width-6-f0)});function G0(){let r=g();if(r.length===0)return;q(Math.min(Q()+1,r.length-1))}function t(){if(g().length===0)return;q(Math.max(Q()-1,0))}function Z0(){let r=g(),f0=Q(),a=r[f0];if(!a)return;if(a.kind!=="dir")return;if(!a.expanded&&a.hasChildren)A((U0)=>{let c=new Set(U0);return c.add(a.path),c});else if(a.expanded){if(f0+1<r.length)q(f0+1)}}function u(){if(X()!=="all")return;let r=g(),f0=Q(),a=r[f0];if(!a)return;if(a.kind==="dir"&&a.expanded){A((c)=>{let N=new Set(c);return N.delete(a.path),N});return}if(a.kind!=="dir"&&a.kind!=="file")return;let U0=a.depth-1;if(U0<0)return;for(let c=f0-1;c>=0;c--){let N=r[c];if(!N)continue;if(N.kind==="dir"&&N.depth===U0){q(c);return}}}function B0(){let r=g(),f0=Q();if(f0<0||f0>=r.length)return;let a=r[f0];if(!a)return;if(a.kind==="dir"){A((U0)=>{let c=new Set(U0);if(c.has(a.path))c.delete(a.path);else c.add(a.path);return c});return}J.onOpenFile(a.path)}function Y0(){let r=g(),f0=Q();if(f0<0||f0>=r.length)return;let a=r[f0];if(!a||a.kind==="dir")return;J.onMention?.(a.path)}function W0(){H((r)=>r+1),J.onRefresh?.()}function o(){let r=g(),f0=Q();if(f0<0||f0>=r.length)return;let a=r[f0];if(!a||a.kind==="dir")return;let U0=J.worktreePath();if(!U0)return;let c=`${U0}/${a.path}`;oU(c)}L9({focused:f,moveDown:G0,moveUp:t,setTab:(r)=>G(r),currentTab:X,openCurrent:B0,mentionCurrent:Y0,createPR:J.onCreatePR,openExternal:o,refresh:W0,expandOrDescend:Z0,collapseOrParent:u});let _;return p0(WJ([Q,g],([r,f0])=>{if(!_)return;if(f0.length===0)return;let a=_.scrollTop,U0=_.viewport.height;if(U0<=0)return;if(r<a)_.scrollTo({x:0,y:r});else if(r>=a+U0)_.scrollTo({x:0,y:r-U0+1})})),(()=>{var r=V("box"),f0=V("box"),a=V("box"),U0=V("scrollbox");return W(r,f0),W(r,U0),z(r,"flexDirection","column"),z(r,"flexGrow",1),z(r,"paddingTop",1),z(r,"paddingBottom",1),z(r,"paddingLeft",0),z(r,"paddingRight",0),M(r,k(z0,{get when(){return J.onCreatePR},get children(){var c=V("box"),N=V("box"),s=V("text"),H0=V("text");return W(c,N),z(c,"flexDirection","row"),z(c,"justifyContent","flex-end"),z(c,"paddingBottom",1),z(c,"flexShrink",0),W(N,s),W(N,H0),z(N,"flexDirection","row"),z(N,"gap",1),z(N,"onMouseUp",()=>J.onCreatePR?.()),W(s,T("[P]")),z(s,"wrapMode","none"),W(H0,T("create PR")),z(H0,"wrapMode","none"),w((D0)=>{var y0=Y.accent,d0=Fq.BOLD,x=Y.text;return y0!==D0.e&&(D0.e=z(s,"fg",y0,D0.e)),d0!==D0.t&&(D0.t=z(s,"attributes",d0,D0.t)),x!==D0.a&&(D0.a=z(H0,"fg",x,D0.a)),D0},{e:void 0,t:void 0,a:void 0}),c}}),f0),W(f0,a),z(f0,"flexDirection","row"),z(f0,"justifyContent","space-between"),z(f0,"paddingBottom",0),z(f0,"flexShrink",0),z(a,"flexDirection","row"),z(a,"gap",2),M(a,k(Y1,{each:Tk,children:(c)=>{let N=()=>X()===c;return(()=>{var s=V("text");return z(s,"wrapMode","none"),z(s,"onMouseUp",()=>G(c)),M(s,()=>uk[c]),w((H0)=>{var D0=N()?Y.primary:Y.textMuted,y0=N()?Fq.BOLD:void 0;return D0!==H0.e&&(H0.e=z(s,"fg",D0,H0.e)),y0!==H0.t&&(H0.t=z(s,"attributes",y0,H0.t)),H0},{e:void 0,t:void 0}),s})()}})),M(f0,k(z0,{get when(){return J.cornerBadge?.()},children:(c)=>(()=>{var N=V("text");return z(N,"wrapMode","none"),M(N,()=>c().text),w((s)=>{var H0=c().active?Y.accent:Y.textMuted,D0=c().active?Fq.BOLD:void 0;return H0!==s.e&&(s.e=z(N,"fg",H0,s.e)),D0!==s.t&&(s.t=z(N,"attributes",D0,s.t)),s},{e:void 0,t:void 0}),N})()}),null),M(r,k(z0,{get when(){return X()==="changes"},get children(){var c=V("box"),N=V("text");return W(c,N),z(c,"flexDirection","column"),z(c,"paddingBottom",1),z(c,"flexShrink",0),z(c,"gap",0),W(N,T("M modified \xB7 A added \xB7 D deleted \xB7 ? untracked")),z(N,"wrapMode","none"),w((s)=>z(N,"fg",Y.textMuted,s)),c}}),U0),M(r,k(z0,{get when(){return X()!=="changes"},get children(){var c=V("box");return z(c,"flexDirection","row"),z(c,"paddingBottom",1),z(c,"flexShrink",0),c}}),U0),gZ((c)=>{_=c},U0),z(U0,"flexGrow",1),z(U0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),M(U0,k(z0,{get when(){return J.worktreePath()==null},get children(){var c=V("box"),N=V("text");return W(c,N),z(c,"paddingTop",1),z(c,"paddingLeft",1),W(N,T("(no task \u2014 press n to create)")),w((s)=>z(N,"fg",Y.textMuted,s)),c}}),null),M(U0,k(z0,{get when(){return r0(()=>J.worktreePath()!=null)()&&F()!=null},get children(){var c=V("box"),N=V("text"),s=V("text");return W(c,N),W(c,s),z(c,"paddingTop",1),z(c,"paddingLeft",1),z(c,"flexDirection","column"),z(c,"gap",0),z(N,"wrapMode","word"),M(N,()=>Ek(F()??"")),W(s,T("press r to retry")),z(s,"wrapMode","word"),w((H0)=>{var{error:D0,textMuted:y0}=Y;return D0!==H0.e&&(H0.e=z(N,"fg",D0,H0.e)),y0!==H0.t&&(H0.t=z(s,"fg",y0,H0.t)),H0},{e:void 0,t:void 0}),c}}),null),M(U0,k(z0,{get when(){return r0(()=>J.worktreePath()!=null&&F()==null&&g().length===0)()&&(X()==="all"&&K()!=null||X()==="changes"&&U()!=null)},get children(){var c=V("box"),N=V("text");return W(c,N),z(c,"paddingTop",1),z(c,"paddingLeft",1),M(N,()=>X()==="all"?"(empty worktree)":"(no changes \u2014 clean worktree)"),w((s)=>z(N,"fg",Y.textMuted,s)),c}}),null),M(U0,k(z0,{get when(){return r0(()=>J.worktreePath()!=null&&F()==null)()&&g().length>0},get children(){var c=V("box");return z(c,"flexShrink",0),z(c,"gap",0),z(c,"paddingRight",1),M(c,k(Y1,{get each(){return g()},children:(N,s)=>{let H0=()=>s()===Q(),D0=(()=>{var k0=V("text");return z(k0,"wrapMode","none"),M(k0,()=>H0()?"\u258C":" "),w((T0)=>z(k0,"fg",H0()?Y.focusAccent:void 0,T0)),k0})(),y0=()=>H0()?Y.backgroundElement:void 0;if(N.kind==="dir"){let k0=" ".repeat(N.depth),T0=N.expanded?"\u25BE":"\u25B8";return(()=>{var m0=V("box"),$0=V("box"),O0=V("text");return W(m0,$0),z(m0,"flexDirection","row"),z(m0,"gap",0),z(m0,"onMouseUp",()=>{q(s()),A((v)=>{let X0=new Set(v);if(X0.has(N.path))X0.delete(N.path);else X0.add(N.path);return X0})}),M(m0,D0,$0),W($0,O0),z($0,"flexGrow",1),z($0,"paddingRight",1),z(O0,"wrapMode","none"),M(O0,()=>`${k0}${T0} ${N.name}/`),w((v)=>{var X0=y0(),A0=Y.textMuted,E=Fq.BOLD;return X0!==v.e&&(v.e=z(m0,"backgroundColor",X0,v.e)),A0!==v.t&&(v.t=z(O0,"fg",A0,v.t)),E!==v.a&&(v.a=z(O0,"attributes",E,v.a)),v},{e:void 0,t:void 0,a:void 0}),m0})()}if(N.kind==="file"){let k0=" ".repeat(N.depth);return(()=>{var T0=V("box"),m0=V("box"),$0=V("text");return W(T0,m0),z(T0,"flexDirection","row"),z(T0,"gap",0),z(T0,"onMouseUp",()=>{q(s()),J.onOpenFile(N.path)}),M(T0,D0,m0),W(m0,$0),z(m0,"flexGrow",1),z(m0,"paddingRight",1),z($0,"wrapMode","none"),M($0,()=>`${k0} ${N.name}`),w((O0)=>{var v=y0(),X0=Y.text;return v!==O0.e&&(O0.e=z(T0,"backgroundColor",v,O0.e)),X0!==O0.t&&(O0.t=z($0,"fg",X0,O0.t)),O0},{e:void 0,t:void 0}),T0})()}let d0=bk(N.status),x=()=>{switch(d0){case"success":return Y.success;case"warning":return Y.warning;case"error":return Y.error;case"info":return Y.info;default:return Y.textMuted}},F0=y(),Q0=N.added==null?" ".repeat(F0.added):`+${N.added}`.padStart(F0.added),L0=N.deleted==null?" ".repeat(F0.deleted):`-${N.deleted}`.padStart(F0.deleted);return(()=>{var k0=V("box"),T0=V("box"),m0=V("text"),$0=V("text");return W(k0,T0),z(k0,"flexDirection","row"),z(k0,"gap",0),z(k0,"onMouseUp",()=>{q(s()),J.onOpenFile(N.path)}),M(k0,D0,T0),W(T0,m0),W(T0,$0),z(T0,"flexDirection","row"),z(T0,"flexGrow",1),z(T0,"gap",1),z(T0,"paddingRight",1),z(m0,"wrapMode","none"),M(m0,()=>N.status),z($0,"wrapMode","none"),z($0,"flexGrow",1),M($0,()=>xk(N.path,$())),M(T0,k(z0,{get when(){return F0.added>0},get children(){var O0=V("text");return z(O0,"wrapMode","none"),M(O0,Q0),w((v)=>z(O0,"fg",Y.success,v)),O0}}),null),M(T0,k(z0,{get when(){return F0.deleted>0},get children(){var O0=V("text");return z(O0,"wrapMode","none"),M(O0,L0),w((v)=>z(O0,"fg",Y.error,v)),O0}}),null),w((O0)=>{var v=y0(),X0=x(),A0=Y.text;return v!==O0.e&&(O0.e=z(k0,"backgroundColor",v,O0.e)),X0!==O0.t&&(O0.t=z(m0,"fg",X0,O0.t)),A0!==O0.a&&(O0.a=z($0,"fg",A0,O0.a)),O0},{e:void 0,t:void 0,a:void 0}),k0})()}})),c}}),null),M(r,k(z0,{get when(){return J.worktreePath()!=null},get children(){var c=V("box"),N=V("text");return W(c,N),z(c,"flexDirection","row"),z(c,"paddingTop",1),z(c,"flexShrink",0),W(N,T("\u21B5 open")),z(N,"wrapMode","none"),w((s)=>z(N,"fg",Y.textMuted,s)),c}}),null),r})()}var Tk,uk;var fL=S(()=>{h();h();h();h();h();h();h();h();h();h();q1();T1();U9();D9();sU();ZL();Tk=["all","changes"];uk={all:"All",changes:"Changes"}});var XL=S(()=>{fL();U9();D9()});import{promises as wk}from"fs";import hk from"path";async function Oq(J,Y){let Z=new AbortController,f=setTimeout(()=>Z.abort(),Pk);try{let X=await lY("git",Y,{cwd:J,env:IJ(),signal:Z.signal});if(Z.signal.aborted)return null;if(X.status!==0)return null;return X.stdout.trim()}finally{clearTimeout(f)}}async function vk(J){return await Oq(J,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function mk(J){let Y=await Oq(J,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!Y)return"main";return Y.startsWith("origin/")?Y.slice(7):Y}async function ck(J){let Y=await Oq(J,["rev-parse","--abbrev-ref","@{u}"]);return Y!==null&&Y.length>0}async function dk(J){let Y=await Oq(J,["status","--porcelain"]);if(!Y)return 0;return Y.split(`
241
- `).filter((Z)=>Z.length>0).length}async function nk(J){let[Y,Z,f,X]=await Promise.all([vk(J),mk(J),ck(J),dk(J)]);return{branch:Y,targetBranch:Z,hasUpstream:f,dirtyCount:X}}function ik(J){if(J<=0)return"There are no uncommitted changes.";if(J===1)return"There is 1 uncommitted change.";return`There are ${J} uncommitted changes.`}function lk(J){return J?"The current branch tracks an upstream.":"There is no upstream branch yet."}function $k(J,Y){let Z={branch:Y.branch,targetBranch:Y.targetBranch,dirtyCountSentence:ik(Y.dirtyCount),upstreamSentence:lk(Y.hasUpstream)};return J.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(f,X)=>Object.hasOwn(Z,X)?Z[X]:f)}async function ak(J){let Y=hk.join(J,".kobe","pr-instructions.md");try{let Z=await wk.readFile(Y,"utf8");return Z.length>0?Z:GL}catch{return GL}}async function zL(J){let[Y,Z]=await Promise.all([ak(J),nk(J)]);return $k(Y,Z)}var Pk=5000,GL=`The user likes the current state of the code.
235
+ kobe update failed with exit code ${k}.
236
+ `),process.stdout.write("Press any key to close this update window."),await dk(),process.exit(k)}return L1(()=>({bindings:[{key:"up",cmd:()=>A(-1)},{key:"down",cmd:()=>A(1)},{key:"k",cmd:()=>A(-1)},{key:"j",cmd:()=>A(1)},{key:"return",cmd:()=>R()},{key:"u",cmd:()=>R("update")},{key:"r",cmd:()=>R("release")},{key:"q",cmd:()=>R("close")},{key:"escape",cmd:()=>R("close")},{key:"ctrl+c",cmd:()=>R("close")}]})),(()=>{var g=V("box"),k=V("box"),C=V("text"),N=V("text"),_=V("box"),X0=V("text"),s=V("text"),Y0=T("v"),u=V("text"),Q0=V("text"),t=T("v"),j0=V("box"),S0=V("box"),$=V("text"),P=T("\u2500\u2500 changes from v"),G0=T(" to v"),Z0=T(" \u2500\u2500"),K0=V("scrollbox"),h=V("box");return W(g,k),W(g,_),W(g,j0),W(g,S0),W(g,K0),Q(g,"flexDirection","column"),Q(g,"flexGrow",1),Q(g,"paddingTop",1),Q(g,"paddingLeft",2),Q(g,"paddingRight",2),W(k,C),W(k,N),Q(k,"flexDirection","row"),Q(k,"justifyContent","space-between"),Q(k,"flexShrink",0),W(C,T("KOBE UPDATE")),Q(C,"wrapMode","none"),W(N,T("q / esc")),Q(N,"wrapMode","none"),Q(N,"onMouseUp",()=>R("close")),W(_,X0),W(_,s),W(_,u),W(_,Q0),Q(_,"flexDirection","row"),Q(_,"gap",2),Q(_,"flexShrink",0),Q(_,"paddingTop",1),W(X0,T("current")),Q(X0,"wrapMode","none"),W(s,Y0),Q(s,"wrapMode","none"),M(s,i0,null),W(u,T("latest")),Q(u,"wrapMode","none"),W(Q0,t),Q(Q0,"wrapMode","none"),M(Q0,U,null),Q(j0,"flexDirection","column"),Q(j0,"flexShrink",0),Q(j0,"paddingTop",1),Q(j0,"gap",0),M(j0,I(X1,{get each(){return F()},children:(y)=>(()=>{var e=V("box"),V0=V("box"),q0=V("text"),A0=T("["),I0=T("]"),k0=V("box"),a0=V("text"),v=V("text");return W(e,V0),W(e,k0),W(e,v),Q(e,"flexDirection","row"),Q(e,"gap",1),Q(e,"paddingLeft",1),Q(e,"paddingRight",1),Q(e,"onMouseUp",()=>R(y.id)),W(V0,q0),Q(V0,"width",4),Q(V0,"flexShrink",0),W(q0,A0),W(q0,I0),Q(q0,"wrapMode","none"),M(q0,()=>y.key,I0),W(k0,a0),Q(k0,"width",14),Q(k0,"flexShrink",0),Q(a0,"wrapMode","none"),M(a0,()=>y.label),Q(v,"wrapMode","word"),M(v,()=>y.detail),x((H0)=>{var o=B()===y.id?J.primary:void 0,R0=B()===y.id?J.selectedListItemText:J.accent,b0=CG.BOLD,w0=B()===y.id?J.selectedListItemText:J.text,N0=B()===y.id?J.selectedListItemText:J.textMuted;return o!==H0.e&&(H0.e=Q(e,"backgroundColor",o,H0.e)),R0!==H0.t&&(H0.t=Q(q0,"fg",R0,H0.t)),b0!==H0.a&&(H0.a=Q(q0,"attributes",b0,H0.a)),w0!==H0.o&&(H0.o=Q(a0,"fg",w0,H0.o)),N0!==H0.i&&(H0.i=Q(v,"fg",N0,H0.i)),H0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),e})()})),M(g,I(z0,{get when(){return K()},get children(){var y=V("text");return Q(y,"wrapMode","word"),M(y,K),x((e)=>Q(y,"fg",J.info,e)),y}}),S0),W(S0,$),Q(S0,"flexShrink",0),Q(S0,"paddingTop",1),W($,P),W($,G0),W($,Z0),Q($,"wrapMode","none"),M($,i0,G0),M($,U,Z0),W(K0,h),Q(K0,"flexGrow",1),Q(K0,"flexShrink",1),Q(K0,"stickyScroll",!1),Q(h,"flexDirection","column"),Q(h,"paddingRight",1),Q(h,"paddingBottom",1),Q(h,"gap",0),M(h,I(z0,{get when(){return f()},get children(){var y=V("text");return W(y,T("Loading release notes...")),x((e)=>Q(y,"fg",J.textMuted,e)),y}}),null),M(h,I(z0,{get when(){return Y1(()=>!f())()&&G().length===0},get children(){var y=V("text");return W(y,T("Release notes are unavailable. Use Open release to view the GitHub release page.")),Q(y,"wrapMode","word"),x((e)=>Q(y,"fg",J.textMuted,e)),y}}),null),M(h,I(X1,{get each(){return G()},children:(y)=>(()=>{var e=V("box"),V0=V("text"),q0=T("v");return W(e,V0),Q(e,"flexDirection","column"),Q(e,"paddingBottom",1),Q(e,"gap",0),W(V0,q0),Q(V0,"wrapMode","none"),M(V0,()=>y.version,null),M(e,I(X1,{get each(){return ck(y.body)},children:(A0)=>(()=>{var I0=V("text");return Q(I0,"wrapMode","word"),M(I0,A0),x((k0)=>Q(I0,"fg",J.textMuted,k0)),I0})()}),null),x((A0)=>{var I0=J.text,k0=CG.BOLD;return I0!==A0.e&&(A0.e=Q(V0,"fg",I0,A0.e)),k0!==A0.t&&(A0.t=Q(V0,"attributes",k0,A0.t)),A0},{e:void 0,t:void 0}),e})()}),null),x((y)=>{var{background:e,text:V0}=J,q0=CG.BOLD,A0=J.textMuted,I0=J.textMuted,k0=J.text,a0=CG.BOLD,v=J.textMuted,H0=Z()?.hasUpdate?J.warning:J.success,o=CG.BOLD,R0=J.textMuted,b0=CG.DIM,w0={trackOptions:{backgroundColor:J.background,foregroundColor:J.borderActive}};return e!==y.e&&(y.e=Q(g,"backgroundColor",e,y.e)),V0!==y.t&&(y.t=Q(C,"fg",V0,y.t)),q0!==y.a&&(y.a=Q(C,"attributes",q0,y.a)),A0!==y.o&&(y.o=Q(N,"fg",A0,y.o)),I0!==y.i&&(y.i=Q(X0,"fg",I0,y.i)),k0!==y.n&&(y.n=Q(s,"fg",k0,y.n)),a0!==y.s&&(y.s=Q(s,"attributes",a0,y.s)),v!==y.h&&(y.h=Q(u,"fg",v,y.h)),H0!==y.r&&(y.r=Q(Q0,"fg",H0,y.r)),o!==y.d&&(y.d=Q(Q0,"attributes",o,y.d)),R0!==y.l&&(y.l=Q($,"fg",R0,y.l)),b0!==y.u&&(y.u=Q($,"attributes",b0,y.u)),w0!==y.c&&(y.c=Q(K0,"verticalScrollbarOptions",w0,y.c)),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,u:void 0,c:void 0}),g})()}async function ik(){await WJ({setup:()=>({root:()=>I(nk,{})})})}var YL=S(()=>{w();w();w();w();w();w();w();w();w();B1();jJ();u1();uZ();gJ()});async function ZL(J,Y){if(!Y)return 0;return a1(J).history.latestTranscriptMtimeForWorktree(Y)}var XL=S(()=>{jZ()});function lk(J){return J.trim().split(/\s+/)[0]??""}function zL(J,Y,Z,X){let G=J1(Z);if(J==="vim")return{bin:"vim",command:`vim ${G}`};if(J==="nvim")return{bin:"nvim",command:`nvim ${G}`};if(J==="nano")return{bin:"nano",command:`nano ${G}`};if(J==="emacs")return{bin:"emacs",command:`emacs ${G}`};let z=(Y.trim()||(X??"").trim()).trim();if(!z)return null;let f=lk(z);if(!f)return null;let q=z.includes(GL)?z.split(GL).join(G):`${z} ${G}`;return{bin:f,command:q}}function $k(J,Y,Z){let X=J1(Y);return["f=$(mktemp 2>/dev/null)",`if [ -n "$f" ] && git show ${J1(`HEAD:./${Z}`)} > "$f" 2>/dev/null; then`,` ${J} -d "$f" ${X} -c 'setlocal nomodifiable' -c 'wincmd l'; r=$?`,"else",` ${J} ${X}; r=$?`,"fi",'rm -f "$f" 2>/dev/null; exit $r'].join(`
237
+ `)}function ak(J,Y){let Z=J.endsWith("/")?J:`${J}/`;return Y.startsWith(Z)?Y.slice(Z.length):null}async function pk(J){let Y=iX(g1(lY)),Z=g1(LZ)??"",X=(process.env.VISUAL??process.env.EDITOR??"").trim();if(Y!=="auto")return zL(Y,Z,J,X);if(X)return zL("custom","",J,X);let G=J1(J);for(let z of mV)if(await QL(z))return{bin:z,command:`${z} ${G}`};return null}async function QL(J){try{return await Bun.spawn(["sh","-c",`command -v ${J1(J)} >/dev/null 2>&1`],{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function _k(J,Y){try{return await Bun.spawn(["git","diff","--quiet","HEAD","--",Y],{cwd:J,stdin:"ignore",stdout:"ignore",stderr:"ignore",env:TJ()}).exited===1}catch{return!1}}async function fL(J,Y,Z){let X=await pk(Z);if(!X)return!1;if(!await QL(X.bin))return!1;let G=await rk(X,Y,Z);return await zY(J,{cwd:Y,command:G,name:ok(Z)}),!0}async function rk(J,Y,Z){let{bin:X,command:G}=J;if(X!=="nvim"&&X!=="vim")return G;if(G!==`${X} ${J1(Z)}`)return G;let z=ak(Y,Z);if(!z)return G;if(!await _k(Y,z))return G;return $k(X,Z,z)}function ok(J){let Y=J.slice(J.lastIndexOf("/")+1).trim();return Y.length>0?Y:"edit"}var GL="{file}";var qL=S(()=>{DZ();O1();oQ();N1();XY()});async function CW(J,Y){if(!Y)throw Error("git(): cwd is required");let Z=await lX(Y,J),X=Z.status??-1;if(X!==0){let G=(Z.stderr??"").trim(),z=(Z.stdout??"").trim();throw Error(`git ${J.join(" ")} (cwd=${Y}) exited with code ${X}: ${G||z||"(no output)"}`)}return Z.stdout??""}async function gW(J){let Z=(await CW(["ls-files","--cached","--others","--exclude-standard","--full-name"],J)).split(`
238
+ `).map((G)=>G.replace(/\r$/,"")),X=new Set;for(let G of Z)if(G.length>0)X.add(G);return Array.from(X).sort()}async function yW(J){let Y=await CW(["status","--porcelain","--untracked-files=all"],J),Z=HL(Y),X=null;try{let G=await CW(["diff","--no-color","--numstat","HEAD"],J);X=new Map(sk(G).map((z)=>[z.path,{added:z.added,deleted:z.deleted}]))}catch{X=new Map}return Z.map((G)=>{let z=X?.get(G.path);if(z)return{...G,added:z.added,deleted:z.deleted};return G})}function sk(J){let Y=J.split(`
239
+ `).map((X)=>X.replace(/\r$/,"")),Z=[];for(let X of Y){if(X.length===0)continue;let G=X.indexOf("\t");if(G<0)continue;let z=X.indexOf("\t",G+1);if(z<0)continue;let f=X.slice(0,G),q=X.slice(G+1,z),B=X.slice(z+1),j=B.indexOf(" -> ");if(j>=0)B=B.slice(j+4);let K=f==="-"?null:Number.parseInt(f,10),H=q==="-"?null:Number.parseInt(q,10);if(B.length===0)continue;Z.push({path:B,added:Number.isNaN(K)?null:K,deleted:Number.isNaN(H)?null:H})}return Z}function BL(J){let Y={name:"",path:"",isDir:!0,children:[]};for(let Z of J){if(!Z)continue;let X=Z.split("/").filter((z)=>z.length>0);if(X.length===0)continue;let G=Y;for(let z=0;z<X.length;z++){let f=X[z],B=z!==X.length-1,j=G.children.find((K)=>K.name===f&&K.isDir===B);if(!j)j={name:f,path:X.slice(0,z+1).join("/"),isDir:B,children:[]},G.children.push(j);G=j}}return jL(Y),Y}function jL(J){J.children.sort((Y,Z)=>{if(Y.isDir!==Z.isDir)return Y.isDir?-1:1;return Y.name.localeCompare(Z.name)});for(let Y of J.children)jL(Y)}function HL(J){let Y=J.split(`
240
+ `).map((X)=>X.replace(/\r$/,"")),Z=[];for(let X of Y){if(X.length<4)continue;let G=X[0],z=X[1],f=X[2];if(G===void 0||z===void 0||f!==" ")continue;let q=X.slice(3),B;if(G==="?"&&z==="?")B="?";else{let j=z!==" "?z:G;if(j==="M"||j==="A"||j==="D"||j==="R"||j==="C"||j==="U")B=j;else continue}if(B==="R"){let j=q.indexOf(" -> ");if(j>=0)q=q.slice(j+4)}if(q.length===0)continue;if(q.endsWith("/"))continue;Z.push({path:q,status:B})}return Z}var SW=S(()=>{sQ()});function kW(J){L1(()=>({enabled:J.focused(),bindings:TZ({"files.nav":(Y,Z)=>{if((Z??0)%2===0)J.moveDown();else J.moveUp()},"files.hierarchy":(Y,Z)=>{if((Z??0)%2===0)J.collapseOrParent();else J.expandOrDescend()},"files.tab":(Y,Z)=>{let X=J.currentTab(),G=xz.indexOf(X);if(G<0)return;let z=(Z??0)%2===0?-1:1,f=xz[(G+z+xz.length)%xz.length];if(f)J.setTab(f)},"files.open":()=>J.openCurrent(),"files.mention":()=>J.mentionCurrent?.(),"files.createPR":()=>J.createPR?.(),"files.openExternal":()=>J.openExternal(),"files.refresh":()=>J.refresh()})}))}var xz;var IW=S(()=>{MG();gJ();xz=["all","changes"]});import{spawn as WL}from"child_process";import{existsSync as tk}from"fs";import{platform as ek}from"os";function VL(J){if(!J)return;let Y=ek();if(Y==="linux"){if(tk("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){wz("wslview",[J],()=>{let Z=WL("wslpath",["-w",J],{stdio:["ignore","pipe","ignore"]}),X="";Z.stdout?.on("data",(G)=>{X+=G.toString()}),Z.on("close",(G)=>{if(G===0)wz("explorer.exe",[X.trim()])})});return}wz("xdg-open",[J]);return}if(Y==="darwin"){wz("open",[J]);return}if(Y==="win32"){wz("cmd.exe",["/c","start","",J]);return}}function wz(J,Y,Z){try{let X=WL(J,Y,{stdio:"ignore",detached:!0});X.on("error",()=>Z?.()),X.unref()}catch{Z?.()}}var KL=()=>{};function NW(J,Y,Z,X){for(let G of J.children)if(G.isDir){let z=Y.has(G.path);if(X.push({kind:"dir",path:G.path,name:G.name,depth:Z,expanded:z,hasChildren:G.children.length>0}),z)NW(G,Y,Z+1,X)}else X.push({kind:"file",path:G.path,name:G.name,depth:Z})}function UL(J,Y){if(Y<=0)return J;let Z=[...J];if(Z.length<=Y)return J;return`\u2026${Z.slice(Z.length-Math.max(0,Y-1)).join("")}`}function LL(J){return J.map((Y)=>({kind:"status",path:Y.path,status:Y.status,added:Y.added,deleted:Y.deleted}))}function JI(J){return`${J.kind}\x00${J.path}`}function YI(J,Y){if(J.kind!==Y.kind||J.path!==Y.path)return!1;switch(J.kind){case"file":{let Z=Y;return J.name===Z.name&&J.depth===Z.depth}case"dir":{let Z=Y;return J.name===Z.name&&J.depth===Z.depth&&J.expanded===Z.expanded&&J.hasChildren===Z.hasChildren}case"status":{let Z=Y;return J.status===Z.status&&J.added===Z.added&&J.deleted===Z.deleted}}}function DL(J,Y){return Fq(J,Y,JI,YI)}function ML(J,Y){if(J===Y)return!0;if(J==null||Y==null)return!1;if(J.length!==Y.length)return!1;for(let Z=0;Z<J.length;Z++)if(J[Z]!==Y[Z])return!1;return!0}function FL(J,Y){if(J===Y)return!0;if(J==null||Y==null)return!1;if(J.length!==Y.length)return!1;for(let Z=0;Z<J.length;Z++){let X=J[Z],G=Y[Z];if(X.path!==G.path||X.status!==G.status||X.added!==G.added||X.deleted!==G.deleted)return!1}return!0}var OL=()=>{};import{watch as ZI}from"fs";import{TextAttributes as hz}from"@opentui/core";function XI(J){switch(J){case"M":return"warning";case"A":return"success";case"D":return"error";case"?":return"textMuted";case"R":case"C":case"U":return"info"}}function zI(J){let Y=J.toLowerCase();if(Y.includes("not a git repository"))return"not a git repository";if(Y.includes("does not exist")||Y.includes("enoent"))return"worktree path is missing";if(Y.includes("permission denied")||Y.includes("eacces"))return"permission denied";if(Y.includes("git: not found")||Y.includes("command not found"))return"git is not installed";let Z=J.indexOf(": ");if(Z>=0&&J.startsWith("git "))return J.slice(Z+2).trim()||"git command failed";return J.trim()||"git command failed"}function bW(J){let{theme:Y}=v0(),Z=IY(),X=()=>J.focused?J.focused():!0,[G,z]=p("all"),[f,q]=p(0),[B,j]=p(0),[K,H]=p(null,{equals:ML}),[U,L]=p(null,{equals:FL}),[F,D]=p(null),[A,R]=p(new Set),l=0;async function g(P,G0){let Z0=++l;if(G0==null){H(null),L(null),D(null);return}D(null);try{if(P==="all"){let K0=await gW(G0);if(Z0!==l||J.worktreePath()!==G0)return;H(K0)}else if(P==="changes"){let K0=await yW(G0);if(Z0!==l||J.worktreePath()!==G0)return;L(K0)}}catch(K0){let h=K0 instanceof Error?K0.message:String(K0);if(Z0===l&&J.worktreePath()===G0)D(h)}}s0(LJ(J.worktreePath,async(P)=>{H(null),L(null),D(null),q(0),R(new Set),await g(G(),P)})),s0(LJ(J.worktreePath,(P)=>{if(P==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let G0=null,Z0=null;try{Z0=ZI(P,{recursive:!0},(K0,h)=>{if(h==null)return;let y=h.toString();if(y===".git"||y.startsWith(".git/")||y.startsWith(".git\\"))return;if(y.startsWith("node_modules/")||y.startsWith("node_modules\\"))return;if(G0!=null)clearTimeout(G0);G0=setTimeout(()=>{G0=null,j((e)=>e+1)},500)}),Z0.on("error",()=>{})}catch{}P1(()=>{if(G0!=null)clearTimeout(G0);if(Z0!=null)Z0.close()})})),s0(LJ([G,B],async([P,G0])=>{let Z0=J.worktreePath();if(Z0==null)return;q(0);let h=B()>0;if(P==="all"){if(K()==null||h)await g("all",Z0)}else if(P==="changes"){if(U()==null||h)await g("changes",Z0)}}));let k=U0(()=>{let P=K();if(P==null)return null;return BL(P)}),C=U0((P)=>{let G0=[];if(G()==="all"){let Z0=k();if(Z0!=null)NW(Z0,A(),0,G0)}else if(G()==="changes"){let Z0=U();if(Z0!=null)G0.push(...LL(Z0))}return DL(P??[],G0)},[]),N=U0(()=>{let P=0,G0=0;for(let Z0 of C()){if(Z0.kind!=="status")continue;if(Z0.added!=null)P=Math.max(P,String(Z0.added).length+1);if(Z0.deleted!=null)G0=Math.max(G0,String(Z0.deleted).length+1)}return{added:P,deleted:G0}}),_=U0(()=>{let P=N(),G0=(P.added>0?P.added+1:0)+(P.deleted>0?P.deleted+1:0);return Math.max(8,Z().width-6-G0)});function X0(){let P=C();if(P.length===0)return;q(Math.min(f()+1,P.length-1))}function s(){if(C().length===0)return;q(Math.max(f()-1,0))}function Y0(){let P=C(),G0=f(),Z0=P[G0];if(!Z0)return;if(Z0.kind!=="dir")return;if(!Z0.expanded&&Z0.hasChildren)R((K0)=>{let h=new Set(K0);return h.add(Z0.path),h});else if(Z0.expanded){if(G0+1<P.length)q(G0+1)}}function u(){if(G()!=="all")return;let P=C(),G0=f(),Z0=P[G0];if(!Z0)return;if(Z0.kind==="dir"&&Z0.expanded){R((h)=>{let y=new Set(h);return y.delete(Z0.path),y});return}if(Z0.kind!=="dir"&&Z0.kind!=="file")return;let K0=Z0.depth-1;if(K0<0)return;for(let h=G0-1;h>=0;h--){let y=P[h];if(!y)continue;if(y.kind==="dir"&&y.depth===K0){q(h);return}}}function Q0(){let P=C(),G0=f();if(G0<0||G0>=P.length)return;let Z0=P[G0];if(!Z0)return;if(Z0.kind==="dir"){R((K0)=>{let h=new Set(K0);if(h.has(Z0.path))h.delete(Z0.path);else h.add(Z0.path);return h});return}J.onOpenFile(Z0.path)}function t(){let P=C(),G0=f();if(G0<0||G0>=P.length)return;let Z0=P[G0];if(!Z0||Z0.kind==="dir")return;J.onMention?.(Z0.path)}function j0(){j((P)=>P+1),J.onRefresh?.()}function S0(){let P=C(),G0=f();if(G0<0||G0>=P.length)return;let Z0=P[G0];if(!Z0||Z0.kind==="dir")return;let K0=J.worktreePath();if(!K0)return;let h=`${K0}/${Z0.path}`;VL(h)}kW({focused:X,moveDown:X0,moveUp:s,setTab:(P)=>z(P),currentTab:G,openCurrent:Q0,mentionCurrent:t,createPR:J.onCreatePR,openExternal:S0,refresh:j0,expandOrDescend:Y0,collapseOrParent:u});let $;return s0(LJ([f,C],([P,G0])=>{if(!$)return;if(G0.length===0)return;let Z0=$.scrollTop,K0=$.viewport.height;if(K0<=0)return;if(P<Z0)$.scrollTo({x:0,y:P});else if(P>=Z0+K0)$.scrollTo({x:0,y:P-K0+1})})),(()=>{var P=V("box"),G0=V("box"),Z0=V("box"),K0=V("scrollbox");return W(P,G0),W(P,K0),Q(P,"flexDirection","column"),Q(P,"flexGrow",1),Q(P,"paddingTop",1),Q(P,"paddingBottom",1),Q(P,"paddingLeft",0),Q(P,"paddingRight",0),M(P,I(z0,{get when(){return J.onZenToggle||J.onCreatePR},get children(){var h=V("box");return Q(h,"flexDirection","row"),Q(h,"justifyContent","flex-end"),Q(h,"gap",2),Q(h,"paddingBottom",1),Q(h,"flexShrink",0),M(h,I(z0,{get when(){return J.onZenToggle},get children(){var y=V("box"),e=V("text"),V0=V("text");return W(y,e),W(y,V0),Q(y,"flexDirection","row"),Q(y,"gap",1),Q(y,"onMouseUp",()=>J.onZenToggle?.()),W(e,T("\u262F")),Q(e,"wrapMode","none"),W(V0,T("zen")),Q(V0,"wrapMode","none"),x((q0)=>{var A0=Y.accent,I0=hz.BOLD,k0=Y.text;return A0!==q0.e&&(q0.e=Q(e,"fg",A0,q0.e)),I0!==q0.t&&(q0.t=Q(e,"attributes",I0,q0.t)),k0!==q0.a&&(q0.a=Q(V0,"fg",k0,q0.a)),q0},{e:void 0,t:void 0,a:void 0}),y}}),null),M(h,I(z0,{get when(){return J.onCreatePR},get children(){var y=V("box"),e=V("text"),V0=V("text");return W(y,e),W(y,V0),Q(y,"flexDirection","row"),Q(y,"gap",1),Q(y,"onMouseUp",()=>J.onCreatePR?.()),W(e,T("[P]")),Q(e,"wrapMode","none"),W(V0,T("create PR")),Q(V0,"wrapMode","none"),x((q0)=>{var A0=Y.accent,I0=hz.BOLD,k0=Y.text;return A0!==q0.e&&(q0.e=Q(e,"fg",A0,q0.e)),I0!==q0.t&&(q0.t=Q(e,"attributes",I0,q0.t)),k0!==q0.a&&(q0.a=Q(V0,"fg",k0,q0.a)),q0},{e:void 0,t:void 0,a:void 0}),y}}),null),h}}),G0),W(G0,Z0),Q(G0,"flexDirection","row"),Q(G0,"justifyContent","space-between"),Q(G0,"paddingBottom",0),Q(G0,"flexShrink",0),Q(Z0,"flexDirection","row"),Q(Z0,"gap",2),M(Z0,I(X1,{each:GI,children:(h)=>{let y=()=>G()===h;return(()=>{var e=V("text");return Q(e,"wrapMode","none"),Q(e,"onMouseUp",()=>z(h)),M(e,()=>QI[h]),x((V0)=>{var q0=y()?Y.primary:Y.textMuted,A0=y()?hz.BOLD:void 0;return q0!==V0.e&&(V0.e=Q(e,"fg",q0,V0.e)),A0!==V0.t&&(V0.t=Q(e,"attributes",A0,V0.t)),V0},{e:void 0,t:void 0}),e})()}})),M(G0,I(z0,{get when(){return J.cornerBadge?.()},children:(h)=>(()=>{var y=V("text");return Q(y,"wrapMode","none"),M(y,()=>h().text),x((e)=>{var V0=h().active?Y.accent:Y.textMuted,q0=h().active?hz.BOLD:void 0;return V0!==e.e&&(e.e=Q(y,"fg",V0,e.e)),q0!==e.t&&(e.t=Q(y,"attributes",q0,e.t)),e},{e:void 0,t:void 0}),y})()}),null),M(P,I(z0,{get when(){return G()==="changes"},get children(){var h=V("box"),y=V("text");return W(h,y),Q(h,"flexDirection","column"),Q(h,"paddingBottom",1),Q(h,"flexShrink",0),Q(h,"gap",0),W(y,T("M modified \xB7 A added \xB7 D deleted \xB7 ? untracked")),Q(y,"wrapMode","none"),x((e)=>Q(y,"fg",Y.textMuted,e)),h}}),K0),M(P,I(z0,{get when(){return G()!=="changes"},get children(){var h=V("box");return Q(h,"flexDirection","row"),Q(h,"paddingBottom",1),Q(h,"flexShrink",0),h}}),K0),kZ((h)=>{$=h},K0),Q(K0,"flexGrow",1),Q(K0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),M(K0,I(z0,{get when(){return J.worktreePath()==null},get children(){var h=V("box"),y=V("text");return W(h,y),Q(h,"paddingTop",1),Q(h,"paddingLeft",1),W(y,T("(no task \u2014 press n to create)")),x((e)=>Q(y,"fg",Y.textMuted,e)),h}}),null),M(K0,I(z0,{get when(){return Y1(()=>J.worktreePath()!=null)()&&F()!=null},get children(){var h=V("box"),y=V("text"),e=V("text");return W(h,y),W(h,e),Q(h,"paddingTop",1),Q(h,"paddingLeft",1),Q(h,"flexDirection","column"),Q(h,"gap",0),Q(y,"wrapMode","word"),M(y,()=>zI(F()??"")),W(e,T("press r to retry")),Q(e,"wrapMode","word"),x((V0)=>{var{error:q0,textMuted:A0}=Y;return q0!==V0.e&&(V0.e=Q(y,"fg",q0,V0.e)),A0!==V0.t&&(V0.t=Q(e,"fg",A0,V0.t)),V0},{e:void 0,t:void 0}),h}}),null),M(K0,I(z0,{get when(){return Y1(()=>J.worktreePath()!=null&&F()==null&&C().length===0)()&&(G()==="all"&&K()!=null||G()==="changes"&&U()!=null)},get children(){var h=V("box"),y=V("text");return W(h,y),Q(h,"paddingTop",1),Q(h,"paddingLeft",1),M(y,()=>G()==="all"?"(empty worktree)":"(no changes \u2014 clean worktree)"),x((e)=>Q(y,"fg",Y.textMuted,e)),h}}),null),M(K0,I(z0,{get when(){return Y1(()=>J.worktreePath()!=null&&F()==null)()&&C().length>0},get children(){var h=V("box");return Q(h,"flexShrink",0),Q(h,"gap",0),Q(h,"paddingRight",1),M(h,I(X1,{get each(){return C()},children:(y,e)=>{let V0=()=>e()===f(),q0=(()=>{var o=V("text");return Q(o,"wrapMode","none"),M(o,()=>V0()?"\u258C":" "),x((R0)=>Q(o,"fg",V0()?Y.focusAccent:void 0,R0)),o})(),A0=()=>V0()?Y.backgroundElement:void 0;if(y.kind==="dir"){let o=" ".repeat(y.depth),R0=y.expanded?"\u25BE":"\u25B8";return(()=>{var b0=V("box"),w0=V("box"),N0=V("text");return W(b0,w0),Q(b0,"flexDirection","row"),Q(b0,"gap",0),Q(b0,"onMouseUp",()=>{q(e()),R((d)=>{let J0=new Set(d);if(J0.has(y.path))J0.delete(y.path);else J0.add(y.path);return J0})}),M(b0,q0,w0),W(w0,N0),Q(w0,"flexGrow",1),Q(w0,"paddingRight",1),Q(N0,"wrapMode","none"),M(N0,()=>`${o}${R0} ${y.name}/`),x((d)=>{var J0=A0(),F0=Y.textMuted,d0=hz.BOLD;return J0!==d.e&&(d.e=Q(b0,"backgroundColor",J0,d.e)),F0!==d.t&&(d.t=Q(N0,"fg",F0,d.t)),d0!==d.a&&(d.a=Q(N0,"attributes",d0,d.a)),d},{e:void 0,t:void 0,a:void 0}),b0})()}if(y.kind==="file"){let o=" ".repeat(y.depth);return(()=>{var R0=V("box"),b0=V("box"),w0=V("text");return W(R0,b0),Q(R0,"flexDirection","row"),Q(R0,"gap",0),Q(R0,"onMouseUp",()=>{q(e()),J.onOpenFile(y.path)}),M(R0,q0,b0),W(b0,w0),Q(b0,"flexGrow",1),Q(b0,"paddingRight",1),Q(w0,"wrapMode","none"),M(w0,()=>`${o} ${y.name}`),x((N0)=>{var d=A0(),J0=Y.text;return d!==N0.e&&(N0.e=Q(R0,"backgroundColor",d,N0.e)),J0!==N0.t&&(N0.t=Q(w0,"fg",J0,N0.t)),N0},{e:void 0,t:void 0}),R0})()}let I0=XI(y.status),k0=()=>{switch(I0){case"success":return Y.success;case"warning":return Y.warning;case"error":return Y.error;case"info":return Y.info;default:return Y.textMuted}},a0=N(),v=y.added==null?" ".repeat(a0.added):`+${y.added}`.padStart(a0.added),H0=y.deleted==null?" ".repeat(a0.deleted):`-${y.deleted}`.padStart(a0.deleted);return(()=>{var o=V("box"),R0=V("box"),b0=V("text"),w0=V("text");return W(o,R0),Q(o,"flexDirection","row"),Q(o,"gap",0),Q(o,"onMouseUp",()=>{q(e()),J.onOpenFile(y.path)}),M(o,q0,R0),W(R0,b0),W(R0,w0),Q(R0,"flexDirection","row"),Q(R0,"flexGrow",1),Q(R0,"gap",1),Q(R0,"paddingRight",1),Q(b0,"wrapMode","none"),M(b0,()=>y.status),Q(w0,"wrapMode","none"),Q(w0,"flexGrow",1),M(w0,()=>UL(y.path,_())),M(R0,I(z0,{get when(){return a0.added>0},get children(){var N0=V("text");return Q(N0,"wrapMode","none"),M(N0,v),x((d)=>Q(N0,"fg",Y.success,d)),N0}}),null),M(R0,I(z0,{get when(){return a0.deleted>0},get children(){var N0=V("text");return Q(N0,"wrapMode","none"),M(N0,H0),x((d)=>Q(N0,"fg",Y.error,d)),N0}}),null),x((N0)=>{var d=A0(),J0=k0(),F0=Y.text;return d!==N0.e&&(N0.e=Q(o,"backgroundColor",d,N0.e)),J0!==N0.t&&(N0.t=Q(b0,"fg",J0,N0.t)),F0!==N0.a&&(N0.a=Q(w0,"fg",F0,N0.a)),N0},{e:void 0,t:void 0,a:void 0}),o})()}})),h}}),null),M(P,I(z0,{get when(){return J.worktreePath()!=null},get children(){var h=V("box"),y=V("text");return W(h,y),Q(h,"flexDirection","row"),Q(h,"paddingTop",1),Q(h,"flexShrink",0),W(y,T("\u21B5 open")),Q(y,"wrapMode","none"),x((e)=>Q(y,"fg",Y.textMuted,e)),h}}),null),P})()}var GI,QI;var AL=S(()=>{w();w();w();w();w();w();w();w();w();w();B1();u1();SW();IW();KL();OL();GI=["all","changes"];QI={all:"All",changes:"Changes"}});var RL=S(()=>{AL();SW();IW()});import{promises as fI}from"fs";import qI from"path";async function Sq(J,Y){let Z=new AbortController,X=setTimeout(()=>Z.abort(),BI);try{let G=await QY("git",Y,{cwd:J,env:TJ(),signal:Z.signal});if(Z.signal.aborted)return null;if(G.status!==0)return null;return G.stdout.trim()}finally{clearTimeout(X)}}async function jI(J){return await Sq(J,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function HI(J){let Y=await Sq(J,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!Y)return"main";return Y.startsWith("origin/")?Y.slice(7):Y}async function WI(J){let Y=await Sq(J,["rev-parse","--abbrev-ref","@{u}"]);return Y!==null&&Y.length>0}async function VI(J){let Y=await Sq(J,["status","--porcelain"]);if(!Y)return 0;return Y.split(`
241
+ `).filter((Z)=>Z.length>0).length}async function KI(J){let[Y,Z,X,G]=await Promise.all([jI(J),HI(J),WI(J),VI(J)]);return{branch:Y,targetBranch:Z,hasUpstream:X,dirtyCount:G}}function UI(J){if(J<=0)return"There are no uncommitted changes.";if(J===1)return"There is 1 uncommitted change.";return`There are ${J} uncommitted changes.`}function LI(J){return J?"The current branch tracks an upstream.":"There is no upstream branch yet."}function DI(J,Y){let Z={branch:Y.branch,targetBranch:Y.targetBranch,dirtyCountSentence:UI(Y.dirtyCount),upstreamSentence:LI(Y.hasUpstream)};return J.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(X,G)=>Object.hasOwn(Z,G)?Z[G]:X)}async function MI(J){let Y=qI.join(J,".kobe","pr-instructions.md");try{let Z=await fI.readFile(Y,"utf8");return Z.length>0?Z:CL}catch{return CL}}async function gL(J){let[Y,Z]=await Promise.all([MI(J),KI(J)]);return DI(Y,Z)}var BI=5000,CL=`The user likes the current state of the code.
242
242
 
243
243
  {{dirtyCountSentence}}
244
244
  The current branch is {{branch}}.
@@ -255,21 +255,21 @@ Follow these steps to create a PR:
255
255
  - Push to origin.
256
256
  - 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
257
 
258
- If any of these steps fail, ask the user for help.`;var QL=S(()=>{UZ();NG()});var O9={};Q1(O9,{startOpsPreview:()=>qI,startOpsHost:()=>ZI,nextActivityPollDelay:()=>HL});import{createHash as pk}from"crypto";import{SyntaxStyle as _k}from"@opentui/core";function HL(J,Y){if(Y<ok)return BL;return Math.min(J*2,rk)}function JI(J){let{theme:Y}=x0(),[Z,f]=p(0),[X,G]=p(0),Q=!1;o1(()=>{let F=!1,D,O=BL,A=0,l=0;async function R(){try{let C=await mU(J.vendor,J.worktree);if(F)return;if(!Q)Q=!0,f(C),l=C;if(C>l)l=C,A=0;else A++;G(C)}catch{A++}finally{if(!F)O=HL(O,A),D=setTimeout(()=>void R(),O)}}R(),i1(()=>{if(F=!0,D)clearTimeout(D)})});let q=()=>Q&&X()>Z(),B=()=>q()?{text:"\u25CF new",active:!0}:null;function H(){f(X())}o1(()=>{if(!J.targetPane)return;let F=l8(J.vendor),D=!1,O=null,A="",l=!1,R=0,C=null;async function g(t){if(t===C)return;C=t,await HZ(J.targetPane,ek,t)}async function y(){try{A=qL(await Pf(J.targetPane,80)),O=(await F.latestCompletion(J.worktree))?.id??null,await g(F.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function $(){try{let t=qL(await Pf(J.targetPane,80));if(D)return;if(t!==A)A=t,l=!0,R=0,await g(F.supportsCompletionMarkers()?"running":"unknown");else if(l)R++;if(!F.supportsCompletionMarkers()||!l||R<tk)return;let Z0=await F.latestCompletion(J.worktree);if(D||!Z0||Z0.id===O)return;O=Z0.id,l=!1,R=0,await g("done")}catch{}}y();let G0=setInterval(()=>void $(),sk);i1(()=>{D=!0,clearInterval(G0)})});function K(F){if(!J.taskId)return;sJ(K1(J.taskId),{cwd:J.worktree,command:O8({worktree:J.worktree,relPath:F,cliInvocation:S1()}),name:YI(F)})}function j(F){if(!J.taskId){K(F);return}let D=`${J.worktree}/${F}`;lU(K1(J.taskId),J.worktree,D).then((O)=>{if(!O)K(F)})}function U(F){if(!J.targetPane)return;Tz(J.targetPane,`@${F} `)}async function L(){if(!J.targetPane)return;let F=await zL(J.worktree);await Tz(J.targetPane,F),await lX(J.targetPane,"Enter")}return(()=>{var F=V("box");return z(F,"flexDirection","column"),z(F,"flexGrow",1),M(F,k(F9,{worktreePath:()=>J.worktree,focused:()=>!0,onOpenFile:j,onMention:U,onCreatePR:()=>void L(),cornerBadge:B,onRefresh:H})),w((D)=>z(F,"backgroundColor",Y.background,D)),F})()}function YI(J){let Y=J.lastIndexOf("/");return Y>=0?J.slice(Y+1):J}function qL(J){return pk("sha1").update(J).digest("hex")}async function ZI(J){await qJ({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>k(JI,J)})})}function fI(J){switch(J.slice(J.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 XI(J,Y){let Z=await cf(J,["diff","HEAD","--",Y]);return Z.status===0?Z.stdout:""}async function GI(J,Y){return await S5(J,Y)??""}function zI(J){let Y={fg:J.primary},Z={fg:J.success},f={fg:J.info},X={fg:J.warning},G={fg:J.accent},Q={fg:J.textMuted,italic:!0},q={fg:J.textMuted},B={fg:J.text};return _k.fromStyles({keyword:Y,"keyword.function":Y,"keyword.return":Y,"keyword.import":Y,"keyword.exception":Y,"keyword.conditional":Y,"keyword.repeat":Y,"keyword.operator":Y,"keyword.modifier":Y,"keyword.type":Y,string:Z,"string.escape":Z,"string.regexp":Z,"string.special":Z,"character.special":Z,comment:Q,"comment.documentation":Q,function:f,"function.call":f,"function.method":f,"function.builtin":f,constructor:f,type:X,"type.builtin":X,constant:G,"constant.builtin":G,boolean:G,number:G,operator:q,"punctuation.bracket":q,"punctuation.delimiter":q,"punctuation.special":q,variable:B,"variable.member":B,"variable.parameter":B,"variable.builtin":G,property:B,attribute:X,label:B,module:B})}function QI(J){let{theme:Y}=x0(),Z=zI(Y),f=fI(J.relPath),[X]=tG(()=>J.relPath,async(G)=>{let Q=await XI(J.worktree,G);if(Q.trim().length>0)return{kind:"diff",text:Q};return{kind:"code",text:await GI(J.worktree,G)}});return U1(()=>({bindings:[{key:"q",cmd:()=>process.exit(0)},{key:"escape",cmd:()=>process.exit(0)},{key:"ctrl+c",cmd:()=>process.exit(0)}]})),(()=>{var G=V("box"),Q=V("box"),q=V("text"),B=V("text"),H=V("text"),K=V("box");return W(G,Q),W(G,K),z(G,"flexDirection","column"),z(G,"flexGrow",1),W(Q,q),W(Q,B),W(Q,H),z(Q,"flexDirection","row"),z(Q,"gap",1),z(Q,"paddingLeft",1),z(Q,"paddingRight",1),M(q,()=>J.relPath),M(B,()=>X()?.kind==="diff"?"diff vs HEAD":"file"),W(H,T("\xB7 q to close")),z(K,"flexGrow",1),M(K,k(z0,{get when(){return X()},get fallback(){return(()=>{var j=V("text");return W(j,T("loading\u2026")),w((U)=>z(j,"fg",Y.textMuted,U)),j})()},children:(j)=>k(z0,{get when(){return j().kind==="diff"},get fallback(){return(()=>{var U=V("code");return z(U,"filetype",f),z(U,"syntaxStyle",Z),w((L)=>z(U,"content",j().text,L)),U})()},get children(){var U=V("diff");return z(U,"view","unified"),z(U,"filetype",f),z(U,"syntaxStyle",Z),z(U,"showLineNumbers",!0),w((L)=>z(U,"diff",j().text,L)),U}})})),w((j)=>{var{background:U,accent:L,textMuted:F,textMuted:D}=Y;return U!==j.e&&(j.e=z(G,"backgroundColor",U,j.e)),L!==j.t&&(j.t=z(q,"fg",L,j.t)),F!==j.a&&(j.a=z(B,"fg",F,j.a)),D!==j.o&&(j.o=z(H,"fg",D,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),G})()}async function qI(J){await qJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>k(QI,J)})})}var BL=2500,rk=20000,ok=3,sk=1500,tk=2,ek="@kobe_tab_state";var A9=S(()=>{h();h();h();h();h();h();h();h();wY();xB();cU();N1();$U();KY();lz();q1();T1();NZ();MJ();XL();QL()});var KL={};Q1(KL,{startDirectTmux:()=>HI,chooseInitialTask:()=>VL});import{resolve as jL}from"path";function VL(J,Y={}){let Z=(Q)=>Q?J.find((q)=>q.id===Q):void 0,f=Z(Y.activeTaskId);if(f)return f;let X=Z(Y.persistedTaskId);if(X)return X;if(Y.cwdRepo){let Q=J.find((q)=>q.kind==="main"&&q.repo===Y.cwdRepo);if(Q)return Q}let G=J.filter((Q)=>!Q.archived);return G.find((Q)=>Q.pinned)??G[0]??J[0]}async function WL(J){if(J.length===0)return null;try{return await Bun.spawn(J,{stdin:"inherit",stdout:"inherit",stderr:"inherit",env:process.env}).exited}catch{return null}}async function BI(J){wq();let Y=[...uJ()];if(Y.length===0)Y=[NY(jL(process.cwd())).path];for(let Z of Y)try{await J.ensureMainTask(Z)}catch(f){console.error(`[kobe] ensureMainTask failed for ${Z}:`,f)}return Y[0]??jL(process.cwd())}async function HI(){if(qz("gui"),Promise.resolve().then(() => (Bj(),qj)).then((Z)=>Z.ensureGlobalKobeHooks()),!await LY()){console.error("kobe: tmux not found on PATH \u2014 install tmux to use kobe 0.6 direct mode"),process.exitCode=1;return}let J=await fY(),Y=new XJ(J,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=J.socketPath,await Y.init();let Z=await BI(Y),f=VL(Y.listTasks(),{activeTaskId:Y.activeTaskSignal()(),persistedTaskId:C1("lastSelectedTaskId"),cwdRepo:Z});if(!f){let K=await Ez();if(await Qf(),await SQ(K),await WL(xf(K))===null)console.error("kobe: failed to attach to the kobe-home session"),process.exitCode=1;return}let X=f.worktreePath||await Y.ensureWorktree(f.id),G=K1(f.id);await Y.setActiveTask(f.id).catch(()=>{}),d1("lastSelectedTaskId",f.id);let Q=iY(f.repo,X,{kind:"repo-init"});if(!await MZ({name:G,cwd:X,command:LJ(f.vendor),taskId:f.id,vendor:f.vendor,repo:f.repo,launchInit:Q})){console.error(`kobe: tmux session ${G} failed to start (check the daemon log)`),process.exitCode=1;return}await Qf(),await SQ(G);let B=await WL(xf(G));if(B===null){console.error(`kobe: failed to attach to tmux session ${G}`),process.exitCode=1;return}if(B!==0&&!await X1(G)){console.error(`kobe: tmux session ${G} ended unexpectedly (attach exited ${B})`),process.exitCode=B;return}let H=Y.getTask(f.id);if(H&&H.title===jY&&H.worktreePath)try{let K=await bf(H.worktreePath,H.vendor);if(K)await Y.setTitle(H.id,K)}catch(K){console.error("[kobe] auto-title failed:",K)}}finally{Y.dispose()}}var UL=S(()=>{cZ();DJ();CZ();kJ();Iz();TX();rf();A1();N1();HQ();ZJ()});var LL={};Q1(LL,{startTui:()=>jI});async function jI(){A6();let{startDirectTmux:J}=await Promise.resolve().then(() => (UL(),KL));await J()}var DL=S(()=>{dQ()});Rq();zJ();import{resolve as OL}from"path";QJ();function T9(){return[`kobe ${n0}`,"","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 ML=`Usage: kobe add [path]
258
+ If any of these steps fail, ask the user for help.`;var yL=S(()=>{DZ();Ez()});var TW={};q1(TW,{startOpsPreview:()=>xI,startOpsHost:()=>II,nextActivityPollDelay:()=>IL});import{createHash as FI}from"crypto";import{SyntaxStyle as OI}from"@opentui/core";function IL(J,Y){if(Y<RI)return kL;return Math.min(J*2,AI)}function SI(J){let{theme:Y}=v0(),[Z,X]=p(0),[G,z]=p(0),f=!1;s1(()=>{let D=!1,A,R=kL,l=0,g=0;async function k(){try{let C=await ZL(J.vendor,J.worktree);if(D)return;if(!f)f=!0,X(C),g=C;if(C>g)g=C,l=0;else l++;z(C)}catch{l++}finally{if(!D)R=IL(R,l),A=setTimeout(()=>void k(),R)}}k(),P1(()=>{if(D=!0,A)clearTimeout(A)})});let q=()=>f&&G()>Z(),B=()=>q()?{text:"\u25CF new",active:!0}:null;function j(){X(G())}s1(()=>{if(!J.targetPane)return;let D=XV(J.vendor),A=!1,R=null,l="",g=!1,k=0,C=null;async function N(Y0){if(Y0===C)return;C=Y0,await WZ(J.targetPane,yI,Y0)}async function _(){try{l=SL(await dX(J.targetPane,80)),R=(await D.latestCompletion(J.worktree))?.id??null,await N(D.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function X0(){try{let Y0=SL(await dX(J.targetPane,80));if(A)return;if(Y0!==l)l=Y0,g=!0,k=0,await N(D.supportsCompletionMarkers()?"running":"unknown");else if(g)k++;if(!D.supportsCompletionMarkers()||!g||k<gI)return;let u=await D.latestCompletion(J.worktree);if(A||!u||u.id===R)return;R=u.id,g=!1,k=0,await N("done")}catch{}}_();let s=setInterval(()=>void X0(),CI);P1(()=>{A=!0,clearInterval(s)})});function K(D){if(!J.taskId)return;zY(K1(J.taskId),{cwd:J.worktree,command:u7({worktree:J.worktree,relPath:D,cliInvocation:R1()}),name:kI(D)})}function H(D){if(!J.taskId){K(D);return}let A=`${J.worktree}/${D}`;fL(K1(J.taskId),J.worktree,A).then((R)=>{if(!R)K(D)})}function U(D){if(!J.targetPane)return;hQ(J.targetPane,`@${D} `)}async function L(){if(!J.targetPane)return;let D=await gL(J.worktree);await hQ(J.targetPane,D),await pG(J.targetPane,"Enter")}function F(){if(!J.taskId)return;let D=K1(J.taskId),A=R1(),R=`${p1()}${MJ(A)} layout --session ${J1(D)} --action zen-toggle`;u0(["run-shell","-b",R])}return(()=>{var D=V("box");return Q(D,"flexDirection","column"),Q(D,"flexGrow",1),M(D,I(bW,{worktreePath:()=>J.worktree,focused:()=>!0,onOpenFile:H,onMention:U,onCreatePR:()=>void L(),get onZenToggle(){return J.taskId?F:void 0},cornerBadge:B,onRefresh:j})),x((A)=>Q(D,"backgroundColor",Y.background,A)),D})()}function kI(J){let Y=J.lastIndexOf("/");return Y>=0?J.slice(Y+1):J}function SL(J){return FI("sha1").update(J).digest("hex")}async function II(J){await WJ({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>I(SI,J)})})}function NI(J){switch(J.slice(J.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 bI(J,Y){let Z=await lX(J,["diff","HEAD","--",Y]);return Z.status===0?Z.stdout:""}async function TI(J,Y){return await cV(J,Y)??""}function EI(J){let Y={fg:J.primary},Z={fg:J.success},X={fg:J.info},G={fg:J.warning},z={fg:J.accent},f={fg:J.textMuted,italic:!0},q={fg:J.textMuted},B={fg:J.text};return OI.fromStyles({keyword:Y,"keyword.function":Y,"keyword.return":Y,"keyword.import":Y,"keyword.exception":Y,"keyword.conditional":Y,"keyword.repeat":Y,"keyword.operator":Y,"keyword.modifier":Y,"keyword.type":Y,string:Z,"string.escape":Z,"string.regexp":Z,"string.special":Z,"character.special":Z,comment:f,"comment.documentation":f,function:X,"function.call":X,"function.method":X,"function.builtin":X,constructor:X,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:B,"variable.member":B,"variable.parameter":B,"variable.builtin":z,property:B,attribute:G,label:B,module:B})}function uI(J){let{theme:Y}=v0(),Z=EI(Y),X=NI(J.relPath),[G]=ZQ(()=>J.relPath,async(z)=>{let f=await bI(J.worktree,z);if(f.trim().length>0)return{kind:"diff",text:f};return{kind:"code",text:await TI(J.worktree,z)}});return L1(()=>({bindings:[{key:"q",cmd:()=>process.exit(0)},{key:"escape",cmd:()=>process.exit(0)},{key:"ctrl+c",cmd:()=>process.exit(0)}]})),(()=>{var z=V("box"),f=V("box"),q=V("text"),B=V("text"),j=V("text"),K=V("box");return W(z,f),W(z,K),Q(z,"flexDirection","column"),Q(z,"flexGrow",1),W(f,q),W(f,B),W(f,j),Q(f,"flexDirection","row"),Q(f,"gap",1),Q(f,"paddingLeft",1),Q(f,"paddingRight",1),M(q,()=>J.relPath),M(B,()=>G()?.kind==="diff"?"diff vs HEAD":"file"),W(j,T("\xB7 q to close")),Q(K,"flexGrow",1),M(K,I(z0,{get when(){return G()},get fallback(){return(()=>{var H=V("text");return W(H,T("loading\u2026")),x((U)=>Q(H,"fg",Y.textMuted,U)),H})()},children:(H)=>I(z0,{get when(){return H().kind==="diff"},get fallback(){return(()=>{var U=V("code");return Q(U,"filetype",X),Q(U,"syntaxStyle",Z),x((L)=>Q(U,"content",H().text,L)),U})()},get children(){var U=V("diff");return Q(U,"view","unified"),Q(U,"filetype",X),Q(U,"syntaxStyle",Z),Q(U,"showLineNumbers",!0),x((L)=>Q(U,"diff",H().text,L)),U}})})),x((H)=>{var{background:U,accent:L,textMuted:F,textMuted:D}=Y;return U!==H.e&&(H.e=Q(z,"backgroundColor",U,H.e)),L!==H.t&&(H.t=Q(q,"fg",L,H.t)),F!==H.a&&(H.a=Q(B,"fg",F,H.a)),D!==H.o&&(H.o=Q(j,"fg",D,H.o)),H},{e:void 0,t:void 0,a:void 0,o:void 0}),z})()}async function xI(J){await WJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>I(uI,J)})})}var kL=2500,AI=20000,RI=3,CI=1500,gI=2,yI="@kobe_tab_state";var EW=S(()=>{w();w();w();w();w();w();w();w();cY();mB();XL();N1();qL();XY();sQ();B1();u1();uZ();gJ();RL();eZ();yL()});var EL={};q1(EL,{startDirectTmux:()=>hI,chooseInitialTask:()=>TL});import{resolve as NL}from"path";function TL(J,Y={}){let Z=(f)=>f?J.find((q)=>q.id===f):void 0,X=Z(Y.activeTaskId);if(X)return X;let G=Z(Y.persistedTaskId);if(G)return G;if(Y.cwdRepo){let f=J.find((q)=>q.kind==="main"&&q.repo===Y.cwdRepo);if(f)return f}let z=J.filter((f)=>!f.archived);return z.find((f)=>f.pinned)??z[0]??J[0]}async function bL(J){if(J.length===0)return null;try{return await Bun.spawn(J,{stdin:"inherit",stdout:"inherit",stderr:"inherit",env:process.env}).exited}catch{return null}}async function wI(J){cq();let Y=[...wJ()];if(Y.length===0)Y=[xY(NL(process.cwd())).path];for(let Z of Y)try{await J.ensureMainTask(Z)}catch(X){console.error(`[kobe] ensureMainTask failed for ${Z}:`,X)}return Y[0]??NL(process.cwd())}async function hI(){if(VQ("gui"),Promise.resolve().then(() => (OH(),FH)).then((Z)=>Z.ensureGlobalKobeHooks()),!await CY()){console.error("kobe: tmux not found on PATH \u2014 install tmux to use kobe 0.6 direct mode"),process.exitCode=1;return}let J=await HY(),Y=new QJ(J,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=J.socketPath,await Y.init();let Z=await wI(Y),X=TL(Y.listTasks(),{activeTaskId:Y.activeTaskSignal()(),persistedTaskId:g1("lastSelectedTaskId"),cwdRepo:Z});if(!X){let K=await PQ();if(await WX(),await uf(K),await bL(vX(K))===null)console.error("kobe: failed to attach to the kobe-home session"),process.exitCode=1;return}let G=X.worktreePath||await Y.ensureWorktree(X.id),z=K1(X.id);await Y.setActiveTask(X.id).catch(()=>{}),i1("lastSelectedTaskId",X.id);let f=aY(X.repo,G,{kind:"repo-init"});if(!await RZ({name:z,cwd:G,command:RJ(X.vendor),taskId:X.id,vendor:X.vendor,repo:X.repo,launchInit:f})){console.error(`kobe: tmux session ${z} failed to start (check the daemon log)`),process.exitCode=1;return}await WX(),await uf(z);let B=await bL(vX(z));if(B===null){console.error(`kobe: failed to attach to tmux session ${z}`),process.exitCode=1;return}if(B!==0&&!await f1(z)){console.error(`kobe: tmux session ${z} ended unexpectedly (attach exited ${B})`),process.exitCode=B;return}let j=Y.getTask(X.id);if(j&&j.title===OY&&j.worktreePath)try{let K=await wX(j.worktreePath,j.vendor);if(K)await Y.setTitle(j.id,K)}catch(K){console.error("[kobe] auto-title failed:",K)}}finally{Y.dispose()}}var uL=S(()=>{$Z();CJ();IZ();bJ();uQ();xG();tX();O1();N1();Df();t1()});var xL={};q1(xL,{startTui:()=>PI});async function PI(){P6();let{startDirectTmux:J}=await Promise.resolve().then(() => (uL(),EL));await J()}var wL=S(()=>{_f()});kq();BJ();import{resolve as vL}from"path";jJ();function nW(){return[`kobe ${i0}`,"","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 hL=`Usage: kobe add [path]
260
260
  kobe add --remote --host <host> --user <user> --path <basePath> [--port N] [--key <path> | --password]
261
261
 
262
262
  Save a repo for the new-task picker. With --remote, register an SSH-backed
263
263
  project whose worktrees + engine run on <host> under <basePath>.
264
- `;async function WI(J){let Y=J[0];if(Y==="--help"||Y==="-h"||Y==="help"){process.stdout.write(ML);return}if(Y==="--remote"){let{runAddRemote:G}=await Promise.resolve().then(() => (_9(),p9));await G(J.slice(1));return}if(Y?.startsWith("-"))process.stderr.write(`kobe add: unknown flag "${Y}"
264
+ `;async function vI(J){let Y=J[0];if(Y==="--help"||Y==="-h"||Y==="help"){process.stdout.write(hL);return}if(Y==="--remote"){let{runAddRemote:z}=await Promise.resolve().then(() => (z9(),G9));await z(J.slice(1));return}if(Y?.startsWith("-"))process.stderr.write(`kobe add: unknown flag "${Y}"
265
265
 
266
- ${ML}`),process.exit(2);let Z=OL(process.cwd(),Y&&Y.length>0?Y:"."),{addSavedRepo:f}=await Promise.resolve().then(() => (A1(),tY)),X=f(Z);if(X.added)console.log(`added ${X.path} (${X.total} saved repo${X.total===1?"":"s"} total)`);else console.log(`already saved: ${X.path}`);await VI(X.path)}async function VI(J){let Y=await AL(),Z;try{Z=await Y.discoverAdoptableWorktrees(J)}catch(f){console.error(`(skipped worktree scan: ${f instanceof Error?f.message:String(f)})`);return}if(Z.length===0)return;console.log(`scanning ${J}: ${Z.length} unlinked worktree(s) \u2192 importing`),await RL(Y,J,Z,TZ(void 0))}async function AL(){let{TaskIndexStore:J}=await Promise.resolve().then(() => (SX(),dq)),{GitWorktreeManager:Y}=await Promise.resolve().then(() => ($q(),DW)),{Orchestrator:Z}=await Promise.resolve().then(() => (TX(),cW)),f=new J;return await f.load(),new Z({store:f,worktrees:new Y})}async function RL(J,Y,Z,f){let{connectIfRunning:X}=await Promise.resolve().then(() => (DJ(),NH)),G=await X();try{for(let Q of Z){let q=G?(await G.request("worktree.adopt",{repo:Y,worktreePath:Q.path,branch:Q.branch,vendor:f})).task:await J.adoptWorktree({repo:Y,worktreePath:Q.path,branch:Q.branch,vendor:f});console.log(` adopted ${Q.branch} \u2192 task ${q.id} (${q.title})`)}}finally{G?.close()}}var gL=["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 R9(J){process.stderr.write(`kobe adopt: ${J}
266
+ ${hL}`),process.exit(2);let Z=vL(process.cwd(),Y&&Y.length>0?Y:"."),{addSavedRepo:X}=await Promise.resolve().then(() => (O1(),JZ)),G=X(Z);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 mI(G.path)}async function mI(J){let Y=await mL(),Z;try{Z=await Y.discoverAdoptableWorktrees(J)}catch(X){console.error(`(skipped worktree scan: ${X instanceof Error?X.message:String(X)})`);return}if(Z.length===0)return;console.log(`scanning ${J}: ${Z.length} unlinked worktree(s) \u2192 importing`),await cL(Y,J,Z,wZ(void 0))}async function mL(){let{TaskIndexStore:J}=await Promise.resolve().then(() => (IG(),aq)),{GitWorktreeManager:Y}=await Promise.resolve().then(() => (oq(),I9)),{Orchestrator:Z}=await Promise.resolve().then(() => (xG(),e9)),X=new J;return await X.load(),new Z({store:X,worktrees:new Y})}async function cL(J,Y,Z,X){let{connectIfRunning:G}=await Promise.resolve().then(() => (CJ(),hj)),z=await G();try{for(let f of Z){let q=z?(await z.request("worktree.adopt",{repo:Y,worktreePath:f.path,branch:f.branch,vendor:X})).task:await J.adoptWorktree({repo:Y,worktreePath:f.path,branch:f.branch,vendor:X});console.log(` adopted ${f.branch} \u2192 task ${q.id} (${q.title})`)}}finally{z?.close()}}var dL=["Usage: kobe adopt [glob] [--repo <path>] [--vendor <v>] [--yes]","","Import existing git worktrees in a repo as kobe tasks.","No glob \u2192 dry-run listing. With a glob \u2192 list matches; --yes adopts them.","","Options:"," --repo <path> Repo to scan (default: current directory)"," --vendor <v> Engine vendor for adopted tasks"," -y, --yes Actually adopt the matched worktrees"," -h, --help Print this help",""].join(`
267
+ `);function uW(J){process.stderr.write(`kobe adopt: ${J}
268
268
 
269
- ${gL}
270
- `),process.exit(2)}async function KI(J){let Y,Z,f,X=!1;for(let U=0;U<J.length;U++){let L=J[U];if(L==="--help"||L==="-h"||L==="help"){process.stdout.write(`${gL}
271
- `);return}if(L==="--repo"){if(Z=J[++U],Z===void 0)R9("--repo requires a value")}else if(L==="--vendor"){if(f=J[++U],f===void 0)R9("--vendor requires a value")}else if(L==="--yes"||L==="-y")X=!0;else if(L&&!L.startsWith("-")&&Y===void 0)Y=L;else R9(`unexpected argument "${L}"`)}let{resolveRepoRoot:G}=await Promise.resolve().then(() => (A1(),tY)),Q=G(OL(process.cwd(),Z&&Z.length>0?Z:".")),q=TZ(f),B=await AL(),H=await B.discoverAdoptableWorktrees(Q);if(H.length===0){console.log(`no adoptable worktrees for ${Q} \u2014 every git worktree here is already a task`);return}let K=(U)=>!Y||xG(Y,U.path);console.log(`adoptable worktrees in ${Q}:`);for(let U of H){let L=Y?K(U)?"*":" ":"-",F=[U.dirty?"dirty":"",U.kobeManaged?"":"external"].filter(Boolean).join(",");console.log(` ${L} ${U.branch} ${U.path}${F?` (${F})`:""}`)}if(!Y){console.log(`
272
- pass a path glob to adopt, e.g. kobe adopt '${Q}/*' --yes`);return}let j=H.filter(K);if(j.length===0){console.log(`
273
- no worktrees match glob ${JSON.stringify(Y)}`);return}if(!X){console.log(`
274
- ${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await RL(B,Q,j,q),console.log(`done \u2014 adopted ${j.length} worktree(s)`)}function FL(J){J.write(`${T9()}
275
- `)}function CY(J){let Y={};for(let Z=0;Z<J.length;Z++){let f=J[Z],X=J[Z+1];if(X===void 0)continue;if(f==="--task-id")Y.taskId=X,Z++;else if(f==="--worktree")Y.worktree=X,Z++;else if(f==="--target-pane")Y.targetPane=X,Z++;else if(f==="--vendor")Y.vendor=X,Z++;else if(f==="--preview")Y.preview=X,Z++;else if(f==="--session")Y.session=X,Z++;else if(f==="--repo")Y.repo=X,Z++;else if(f==="--initial-task-id")Y.initialTaskId=X,Z++;else if(f==="--action")Y.action=X,Z++;else if(f==="--window")Y.windowId=X,Z++}return Y}async function UI(){let[,,...J]=process.argv,[Y,...Z]=J;if(Y==="--version"||Y==="-v"||Y==="version"){let{CURRENT_VERSION:X}=await Promise.resolve().then(() => (QJ(),b9));console.log(`kobe ${X}`);return}if(Y==="--help"||Y==="-h"||Y==="help"){FL(process.stdout);return}if(Y==="add"){await WI(Z);return}if(Y==="adopt"){await KI(Z);return}if(Y==="export"){let{runExportSubcommand:X}=await Promise.resolve().then(() => (TV(),bV));await X(Z);return}if(Y==="repo"){let{runRepoSubcommand:X}=await Promise.resolve().then(() => (wV(),xV));await X(Z);return}if(Y==="api"){let{runApiSubcommand:X}=await Promise.resolve().then(() => (tV(),sV));await X(Z);return}if(Y==="update"){let{runUpdateSubcommand:X}=await Promise.resolve().then(() => (f6(),Z6));await X(Z);return}if(Y==="theme"){let{runThemeSubcommand:X}=await Promise.resolve().then(() => (q6(),Q6));await X(Z);return}if(Y==="feedback"){let{runFeedbackSubcommand:X}=await Promise.resolve().then(() => (V6(),W6));await X(Z);return}if(Y==="daemon"){let{runDaemonSubcommand:X}=await Promise.resolve().then(() => (M6(),D6));await X(Z);return}if(Y==="doctor"){let{runDoctorSubcommand:X}=await Promise.resolve().then(() => (iQ(),nQ));await X(Z);return}if(Y==="web"){let{runWebSubcommand:X}=await Promise.resolve().then(() => (x6(),u6));await X(Z);return}if(Y==="reset"){let{runResetSubcommand:X}=await Promise.resolve().then(() => (iQ(),nQ));await X(Z);return}if(Y==="reload"){let{runReloadSubcommand:X}=await Promise.resolve().then(() => (iQ(),nQ));await X(Z);return}if(Y==="skill"){let{runSkillSubcommand:X}=await Promise.resolve().then(() => (P6(),h6));await X(Z);return}if(Y==="hook"){let{runHookSubcommand:X}=await Promise.resolve().then(() => (Bj(),qj));await X(Z);return}if(Y==="new-chattab"){let X=CY(Z),G=X.session;if(!G)console.error("kobe new-chattab: --session <name> is required"),process.exit(2);let{windowIsSurface:Q}=await Promise.resolve().then(() => (N1(),$X));if(await Q(G))return;let q;if(X.vendor!==void 0){let H=X.vendor.trim(),{getCustomEngineIds:K}=await Promise.resolve().then(() => (A1(),tY)),{isBuiltinVendor:j}=await Promise.resolve().then(() => (zJ(),g9));if(!(j(H)||K().includes(H))){let F=[...h1,...K()].join(", "),D=`kobe: unknown engine '${H}' (known: ${F})`,{runTmux:O}=await Promise.resolve().then(() => (N1(),$X));await O(["display-message","-t",G,D]),console.error(D),process.exit(2)}q=H;let{setPersistedString:L}=await Promise.resolve().then(() => (A1(),tY));L("lastSelectedVendor",q)}let{newChatTab:B}=await Promise.resolve().then(() => (ZJ(),ZY));await B(G,q);return}if(Y==="kill-sessions"){let{runTmux:X,KOBE_TMUX_SOCKET:G}=await Promise.resolve().then(() => (N1(),$X)),Q=await X(["kill-server"]);console.log(Q===0?`kobe: killed all tmux sessions on the \`${G}\` socket`:`kobe: no tmux sessions to kill on the \`${G}\` socket`);return}if(Y==="quick-create"){let G=CY(Z).session;if(!G)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:Q}=await Promise.resolve().then(() => (ZJ(),ZY));await Q(G);return}if(Y==="focus-tasks"){let X=CY(Z),G=X.session;if(!G)console.error("kobe focus-tasks: --session <name> is required"),process.exit(2);let{windowIsSurface:Q}=await Promise.resolve().then(() => (N1(),$X));if(X.windowId&&await Q(X.windowId))return;let{selectTasksPane:q}=await Promise.resolve().then(() => (ZJ(),ZY));await q(G,{windowId:X.windowId});return}if(Y==="heal-layout"){let G=CY(Z).session;if(!G)console.error("kobe heal-layout: --session <name> is required"),process.exit(2);let{healSessionLayout:Q}=await Promise.resolve().then(() => (ZJ(),ZY)),{coalesceLayoutWork:q}=await Promise.resolve().then(() => (YG(),gH));await q(G,"heal",()=>Q(G));return}if(Y==="capture-layout"){let G=CY(Z).session;if(!G)console.error("kobe capture-layout: --session <name> is required"),process.exit(2);let{captureGlobalLayoutOnDrag:Q}=await Promise.resolve().then(() => (ZJ(),ZY)),{coalesceLayoutWork:q,genAgeMs:B,RESIZE_GUARD_MS:H}=await Promise.resolve().then(() => (YG(),gH));await q(G,"capture",async()=>{if(B(G,"resize")<H)return;await Q(G)});return}if(Y==="layout"){let X=CY(Z),G=X.session;if(!G)console.error("kobe layout: --session <name> is required"),process.exit(2);let Q=X.action;if(!Q||!new Set(["workspace-split","workspace-close","workspace-reset","tasks-toggle","tasks-restore","ops-toggle","terminal-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, chat-tab-close"),process.exit(2);let{runLayoutAction:B}=await Promise.resolve().then(() => (ZJ(),ZY));await B(G,Q,{windowId:X.windowId});return}if(Y==="quick-task"){let X=CY(Z),{startQuickTaskHost:G}=await Promise.resolve().then(() => (E4(),T4));await G({session:X.session});return}if(Y==="tasks"){let X=CY(Z),{startTasksPane:G}=await Promise.resolve().then(() => (EU(),TU));await G({initialTaskId:X.initialTaskId});return}if(Y==="settings"){let{startSettingsHost:X}=await Promise.resolve().then(() => (xU(),uU));await X();return}if(Y==="help-page"){let{startHelpHost:X}=await Promise.resolve().then(() => (hU(),wU));await X();return}if(Y==="new-task"){let X=CY(Z),{startNewTaskHost:G}=await Promise.resolve().then(() => (lj(),g4));await G({defaultRepo:X.repo});return}if(Y==="update-page"){let{startUpdateHost:X}=await Promise.resolve().then(() => (vU(),PU));await X();return}if(Y==="ops"){let X=CY(Z);if(!X.worktree)console.error("kobe ops: --worktree <path> is required"),process.exit(2);if(X.preview){let{startOpsPreview:Q}=await Promise.resolve().then(() => (A9(),O9));await Q({worktree:X.worktree,relPath:X.preview});return}let{startOpsHost:G}=await Promise.resolve().then(() => (A9(),O9));await G({taskId:X.taskId??"",worktree:X.worktree,targetPane:X.targetPane??null,vendor:TZ(X.vendor)});return}if(Y!==void 0)console.error(`kobe: unknown command '${Y}'`),FL(process.stderr),process.exit(2);let{startTui:f}=await Promise.resolve().then(() => (DL(),LL));await f()}UI().catch((J)=>{console.error("kobe failed to start:",J),process.exit(1)});
269
+ ${dL}
270
+ `),process.exit(2)}async function cI(J){let Y,Z,X,G=!1;for(let U=0;U<J.length;U++){let L=J[U];if(L==="--help"||L==="-h"||L==="help"){process.stdout.write(`${dL}
271
+ `);return}if(L==="--repo"){if(Z=J[++U],Z===void 0)uW("--repo requires a value")}else if(L==="--vendor"){if(X=J[++U],X===void 0)uW("--vendor requires a value")}else if(L==="--yes"||L==="-y")G=!0;else if(L&&!L.startsWith("-")&&Y===void 0)Y=L;else uW(`unexpected argument "${L}"`)}let{resolveRepoRoot:z}=await Promise.resolve().then(() => (O1(),JZ)),f=z(vL(process.cwd(),Z&&Z.length>0?Z:".")),q=wZ(X),B=await mL(),j=await B.discoverAdoptableWorktrees(f);if(j.length===0){console.log(`no adoptable worktrees for ${f} \u2014 every git worktree here is already a task`);return}let K=(U)=>!Y||vz(Y,U.path);console.log(`adoptable worktrees in ${f}:`);for(let U of j){let L=Y?K(U)?"*":" ":"-",F=[U.dirty?"dirty":"",U.kobeManaged?"":"external"].filter(Boolean).join(",");console.log(` ${L} ${U.branch} ${U.path}${F?` (${F})`:""}`)}if(!Y){console.log(`
272
+ pass a path glob to adopt, e.g. kobe adopt '${f}/*' --yes`);return}let H=j.filter(K);if(H.length===0){console.log(`
273
+ no worktrees match glob ${JSON.stringify(Y)}`);return}if(!G){console.log(`
274
+ ${H.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await cL(B,f,H,q),console.log(`done \u2014 adopted ${H.length} worktree(s)`)}function PL(J){J.write(`${nW()}
275
+ `)}function LY(J){let Y={};for(let Z=0;Z<J.length;Z++){let X=J[Z],G=J[Z+1];if(G===void 0)continue;if(X==="--task-id")Y.taskId=G,Z++;else if(X==="--worktree")Y.worktree=G,Z++;else if(X==="--target-pane")Y.targetPane=G,Z++;else if(X==="--vendor")Y.vendor=G,Z++;else if(X==="--preview")Y.preview=G,Z++;else if(X==="--session")Y.session=G,Z++;else if(X==="--repo")Y.repo=G,Z++;else if(X==="--initial-task-id")Y.initialTaskId=G,Z++;else if(X==="--action")Y.action=G,Z++;else if(X==="--window")Y.windowId=G,Z++;else if(X==="--cols")Y.cols=G,Z++;else if(X==="--rows")Y.rows=G,Z++;else if(X==="--status")Y.status=G,Z++;else if(X==="--client")Y.client=G,Z++}return Y}async function dI(){let[,,...J]=process.argv,[Y,...Z]=J;if(Y==="--version"||Y==="-v"||Y==="version"){let{CURRENT_VERSION:G}=await Promise.resolve().then(() => (jJ(),dW));console.log(`kobe ${G}`);return}if(Y==="--help"||Y==="-h"||Y==="help"){PL(process.stdout);return}if(Y==="add"){await vI(Z);return}if(Y==="adopt"){await cI(Z);return}if(Y==="export"){let{runExportSubcommand:G}=await Promise.resolve().then(() => (p5(),a5));await G(Z);return}if(Y==="repo"){let{runRepoSubcommand:G}=await Promise.resolve().then(() => (s5(),o5));await G(Z);return}if(Y==="api"){let{runApiSubcommand:G}=await Promise.resolve().then(() => (K6(),V6));await G(Z);return}if(Y==="update"){let{runUpdateSubcommand:G}=await Promise.resolve().then(() => (F6(),M6));await G(Z);return}if(Y==="theme"){let{runThemeSubcommand:G}=await Promise.resolve().then(() => (g6(),C6));await G(Z);return}if(Y==="feedback"){let{runFeedbackSubcommand:G}=await Promise.resolve().then(() => (N6(),I6));await G(Z);return}if(Y==="daemon"){let{runDaemonSubcommand:G}=await Promise.resolve().then(() => (x6(),u6));await G(Z);return}if(Y==="doctor"){let{runDoctorSubcommand:G}=await Promise.resolve().then(() => (of(),rf));await G(Z);return}if(Y==="web"){let{runWebSubcommand:G}=await Promise.resolve().then(() => (o6(),r6));await G(Z);return}if(Y==="reset"){let{runResetSubcommand:G}=await Promise.resolve().then(() => (of(),rf));await G(Z);return}if(Y==="reload"){let{runReloadSubcommand:G}=await Promise.resolve().then(() => (of(),rf));await G(Z);return}if(Y==="skill"){let{runSkillSubcommand:G}=await Promise.resolve().then(() => (e6(),t6));await G(Z);return}if(Y==="hook"){let{runHookSubcommand:G}=await Promise.resolve().then(() => (OH(),FH));await G(Z);return}if(Y==="new-chattab"){let G=LY(Z),z=G.session;if(!z)console.error("kobe new-chattab: --session <name> is required"),process.exit(2);let{windowIsSurface:f}=await Promise.resolve().then(() => (N1(),_G));if(await f(z))return;let q;if(G.vendor!==void 0){let j=G.vendor.trim(),{getCustomEngineIds:K}=await Promise.resolve().then(() => (O1(),JZ)),{isBuiltinVendor:H}=await Promise.resolve().then(() => (BJ(),xW));if(!(H(j)||K().includes(j))){let F=[...m1,...K()].join(", "),D=`kobe: unknown engine '${j}' (known: ${F})`,{runTmux:A}=await Promise.resolve().then(() => (N1(),_G));await A(["display-message","-t",z,D]),console.error(D),process.exit(2)}q=j;let{setPersistedString:L}=await Promise.resolve().then(() => (O1(),JZ));L("lastSelectedVendor",q)}let{newChatTab:B}=await Promise.resolve().then(() => (t1(),iJ));await B(z,q);return}if(Y==="kill-sessions"){let{runTmux:G,KOBE_TMUX_SOCKET:z}=await Promise.resolve().then(() => (N1(),_G)),f=await G(["kill-server"]);console.log(f===0?`kobe: killed all tmux sessions on the \`${z}\` socket`:`kobe: no tmux sessions to kill on the \`${z}\` socket`);return}if(Y==="quick-create"){let z=LY(Z).session;if(!z)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:f}=await Promise.resolve().then(() => (t1(),iJ));await f(z);return}if(Y==="focus-tasks"){let G=LY(Z),z=G.session;if(!z)console.error("kobe focus-tasks: --session <name> is required"),process.exit(2);let{windowIsSurface:f}=await Promise.resolve().then(() => (N1(),_G));if(G.windowId&&await f(G.windowId))return;let{selectTasksPane:q}=await Promise.resolve().then(() => (t1(),iJ));await q(z,{windowId:G.windowId});return}if(Y==="heal-layout"){let z=LY(Z).session;if(!z)console.error("kobe heal-layout: --session <name> is required"),process.exit(2);let{healSessionLayout:f}=await Promise.resolve().then(() => (t1(),iJ)),{coalesceLayoutWork:q}=await Promise.resolve().then(() => (ZG(),Mf));await q(z,"heal",()=>f(z));return}if(Y==="resync-window"){let G=LY(Z),z=G.session;if(!z)console.error("kobe resync-window: --session <name> is required"),process.exit(2);let f=Number.parseInt(G.cols??"",10),q=Number.parseInt(G.rows??"",10),B=Number.isInteger(f)&&f>0&&Number.isInteger(q)&&q>0?{columns:f,rows:q}:null,{resyncWindowToClient:j}=await Promise.resolve().then(() => (t1(),iJ)),{coalesceLayoutWork:K}=await Promise.resolve().then(() => (ZG(),Mf));await K(z,"resync",()=>j(z,{size:B,status:G.status,clientName:G.client}));return}if(Y==="capture-layout"){let z=LY(Z).session;if(!z)console.error("kobe capture-layout: --session <name> is required"),process.exit(2);let{captureGlobalLayoutOnDrag:f}=await Promise.resolve().then(() => (t1(),iJ)),{coalesceLayoutWork:q,genAgeMs:B,RESIZE_GUARD_MS:j}=await Promise.resolve().then(() => (ZG(),Mf));await q(z,"capture",async()=>{if(B(z,"resize")<j)return;await f(z)});return}if(Y==="layout"){let G=LY(Z),z=G.session;if(!z)console.error("kobe layout: --session <name> is required"),process.exit(2);let f=G.action;if(!f||!new Set(["workspace-split","workspace-close","workspace-reset","tasks-toggle","tasks-restore","ops-toggle","terminal-toggle","zen-toggle","chat-tab-close"]).has(f))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:B}=await Promise.resolve().then(() => (t1(),iJ));await B(z,f,{windowId:G.windowId});return}if(Y==="quick-task"){let G=LY(Z),{startQuickTaskHost:z}=await Promise.resolve().then(() => (_4(),p4));await z({session:G.session});return}if(Y==="tasks"){let G=LY(Z),{startTasksPane:z}=await Promise.resolve().then(() => (rU(),_U));await z({initialTaskId:G.initialTaskId});return}if(Y==="settings"){let{startSettingsHost:G}=await Promise.resolve().then(() => (sU(),oU));await G();return}if(Y==="help-page"){let{startHelpHost:G}=await Promise.resolve().then(() => (eU(),tU));await G();return}if(Y==="new-task"){let G=LY(Z),{startNewTaskHost:z}=await Promise.resolve().then(() => (YW(),m4));await z({defaultRepo:G.repo});return}if(Y==="update-page"){let{startUpdateHost:G}=await Promise.resolve().then(() => (YL(),JL));await G();return}if(Y==="ops"){let G=LY(Z);if(!G.worktree)console.error("kobe ops: --worktree <path> is required"),process.exit(2);if(G.preview){let{startOpsPreview:f}=await Promise.resolve().then(() => (EW(),TW));await f({worktree:G.worktree,relPath:G.preview});return}let{startOpsHost:z}=await Promise.resolve().then(() => (EW(),TW));await z({taskId:G.taskId??"",worktree:G.worktree,targetPane:G.targetPane??null,vendor:wZ(G.vendor)});return}if(Y!==void 0)console.error(`kobe: unknown command '${Y}'`),PL(process.stderr),process.exit(2);let{startTui:X}=await Promise.resolve().then(() => (wL(),xL));await X()}dI().catch((J)=>{console.error("kobe failed to start:",J),process.exit(1)});