@sma1lboy/kobe 0.7.34 → 0.7.35

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 +162 -162
  2. package/package.json +1 -1
package/dist/cli/index.js CHANGED
@@ -1,94 +1,94 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var XL=Object.defineProperty;var zL=(J)=>J;function QL(J,Y){this[J]=zL.bind(null,Y)}var q1=(J,Y)=>{for(var Z in Y)XL(J,Z,{get:Y[Z],enumerable:!0,configurable:!0,set:QL.bind(Y,Z)})};var y=(J,Y)=>()=>(J&&(Y=J(J=0)),Y);var CX=import.meta.require;import{basename as qL}from"path";function BL(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 SX(J,Y){let Z;try{Z=BL(J)}catch{return!1}return Z.test(Y)||Z.test(qL(Y))}var Wq=()=>{};var j9={};q1(j9,{nextVendorWithin:()=>CZ,nextVendor:()=>HL,isBuiltinVendor:()=>e1,coerceVendorId:()=>LG,BUILTIN_VENDORS:()=>gZ,ALL_VENDORS:()=>x1});function e1(J){return J==="claude"||J==="codex"||J==="copilot"}function HL(J){let Y=x1.indexOf(J);return x1[(Y+1)%x1.length]??x1[0]}function CZ(J,Y){if(J.length===0)return Y;let Z=J.indexOf(Y);return J[(Z+1)%J.length]??J[0]??Y}function LG(J){let Y=J?.trim();return Y&&Y.length>0?Y:"claude"}var gZ,x1;var QJ=y(()=>{gZ=["claude","codex","copilot"],x1=[...gZ]});var yX;var W9=y(()=>{yX={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.34",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.12"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.11","@tsconfig/bun":"1.0.9","@types/bun":"1.3.12","@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 V9}from"crypto";import{homedir as WL}from"os";import{join as SZ}from"path";function K9(){return process.env.KOBE_DEV==="1"}function fY(){return process.env.KOBE_HOME_DIR??WL()}function _1(){return SZ(fY(),".kobe")}function kJ(){return SZ(fY(),".config","kobe","state.json")}function VL(){return SZ(_1(),"settings")}function U9(){return SZ(VL(),"keybindings.yaml")}function Vq(){return SZ(_1(),"issue-assets")}function kX(J,Y,Z){let f=V9("sha1").update(`${Y}@${J}:${Z??22}`).digest("hex").slice(0,16);return SZ(_1(),"ssh",`${f}.sock`)}function L9(J){let Y=V9("sha1").update(J).digest("hex").slice(0,16);return SZ(_1(),"worktree-init",Y)}var v1=()=>{};var M9={};q1(M9,{repoSlug:()=>yZ,releasePageUrl:()=>Mq,recommendedGlobalInstallCommand:()=>Lq,isNewerSemver:()=>Kq,fetchReleaseSummaries:()=>LL,fetchReleaseNotesRange:()=>Dq,fetchReleaseNotes:()=>UL,compareSemver:()=>IX,checkLatestVersion:()=>DG,UPDATE_SCRIPT_URL:()=>bX,UPDATE_COMMAND:()=>RY,PACKAGE_NAME:()=>Uq,CURRENT_VERSION:()=>m0});function yZ(){let J=yX.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 Lq(){return`npm install -g ${Uq}@latest`}async function KL(J){let Y=new AbortController,Z=setTimeout(()=>Y.abort(),NX);try{let f=J.replace("/","%2F"),G=await fetch(`https://registry.npmjs.org/${f}/latest`,{signal:Y.signal,headers:{accept:"application/json"}});if(!G.ok)return null;let X=await G.json();if(typeof X.version!=="string")return null;return X.version}catch{return null}finally{clearTimeout(Z)}}function Kq(J,Y){return IX(J,Y)>0}function IX(J,Y){let Z=(X)=>X.split("-")[0]??X,f=Z(J).split(".").map((X)=>Number.parseInt(X,10)),G=Z(Y).split(".").map((X)=>Number.parseInt(X,10));for(let X=0;X<3;X++){let Q=f[X]??0,q=G[X]??0;if(Number.isNaN(Q)||Number.isNaN(q))return 0;if(Q>q)return 1;if(Q<q)return-1}return 0}async function DG(J={}){let Y=process.env.KOBE_FAKE_UPDATE;if(Y)return{current:m0,latest:Y,hasUpdate:Kq(Y,m0)};if(K9()&&!J.force)return null;let Z=await KL(Uq);if(!Z)return null;return{current:m0,latest:Z,hasUpdate:Kq(Z,m0)}}function D9(J){if(typeof J!=="string")return null;return J.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function UL(J){let Y=yZ();if(!Y)return null;let Z=`v${J}`,f=new AbortController,G=setTimeout(()=>f.abort(),NX);try{let X=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(!X.ok)return null;let Q=await X.json();if(typeof Q.body!=="string"||typeof Q.html_url!=="string")return null;return{body:Q.body,url:Q.html_url,version:J}}catch{return null}finally{clearTimeout(G)}}async function Dq(J){let Y=yZ();if(!Y)return[];let Z=J.limit??100,f=new AbortController,G=setTimeout(()=>f.abort(),NX);try{let X=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(!X.ok)return[];let Q=await X.json();if(!Array.isArray(Q))return[];return Q.map((q)=>{let B=D9(q.tag_name);if(!B||typeof q.html_url!=="string"||typeof q.body!=="string")return null;if(IX(B,J.current)<=0)return null;if(IX(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 LL(J=12){let Y=yZ();if(!Y)return[];let Z=new AbortController,f=setTimeout(()=>Z.abort(),NX);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 X=await G.json();if(!Array.isArray(X))return[];return X.map((Q)=>{let q=D9(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 Mq(J){let Y=yZ();if(!Y)return null;return`https://github.com/${Y}/releases/tag/v${J}`}var m0,Uq,bX="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",RY,NX=3000;var XJ=y(()=>{W9();v1();m0=yX.version,Uq=yX.name;RY=`curl -fsSL ${bX} | sh`});import{spawn as DL,spawnSync as ML}from"child_process";import{existsSync as O9}from"fs";import{mkdir as FL,readFile as OL,readdir as AL}from"fs/promises";function kZ(J){return`'${J.replace(/'/g,"'\\''")}'`}function RL(J){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(J)?J:kZ(J)}function R9(J){return J.map(kZ).join(" ")}function gL(J,Y){let Z=R9(J);return Y?`cd ${kZ(Y)} && ${Z}`:Z}function CL(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}=${kZ(f)}`).join(" ")} `}function MG(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 g9(J,Y={}){return new Promise((Z)=>{let[f,...G]=J,X="",Q="",q=!1,B=(K)=>{if(q)return;q=!0,Z({stdout:X,stderr:Q,exitCode:K})},H;try{H=DL(f??"",G,{cwd:Y.cwd,env:Y.env,shell:!1,signal:Y.signal})}catch{B(-1);return}H.stdout?.setEncoding("utf8"),H.stdout?.on("data",(K)=>{X+=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 TX{isRemote=!1;run(J,Y={}){return g9(J,{cwd:Y.cwd,env:Y.env?{...process.env,...Y.env}:process.env,signal:Y.signal})}async exists(J){return O9(J)}existsSync(J){return O9(J)}async mkdirp(J){await FL(J,{recursive:!0})}async readFile(J){try{return await OL(J,"utf8")}catch{return null}}async readdir(J){try{return await AL(J)}catch{return[]}}wrapCommand(J){return J}ensureReady(){}}class Wf{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(J,Y=A9,Z){this.spec=J;this.spawn=Y;this.spawnAsync=Z??(this.spawn===A9?SL:async(f,G)=>this.spawn(f,G))}ensureReady(){if(this.masterUp)return;if(this.spawn([...MG(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let Y=[...MG(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=`${CL(Y.env)}${R9(J)}`,f=Y.cwd?`cd ${kZ(Y.cwd)} && ${Z}`:Z;return this.spawnAsync([...MG(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([...MG(this.spec,{batch:!0}),gL(["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 ${kZ(Y.cwd)} && ${J}`:J;return`${MG(this.spec,{tty:Y.tty}).map(RL).join(" ")} ${kZ(Z)}`}}var A9=(J,Y)=>{let[Z,...f]=J,G=ML(Z??"",f,{env:Y?{...process.env,...Y}:process.env,encoding:"utf8",shell:!1});return{stdout:G.stdout??"",stderr:G.stderr??"",exitCode:G.status??-1}},SL=(J,Y,Z)=>g9(J,{env:Y?{...process.env,...Y}:process.env,signal:Z?.signal});var Fq=()=>{};import{spawnSync as yL}from"child_process";import{platform as kL}from"os";function C9(J,Y,Z){return{service:IL,account:Z?`${Y}@${J}:${Z}`:`${Y}@${J}`}}function Aq(J=Oq){return J.platform()==="darwin"}function S9(J,Y,Z=Oq){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 EX(J,Y=Oq){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 Oq,IL="kobe-remote-ssh";var Rq=y(()=>{Oq={run(J){let[Y,...Z]=J,f=yL(Y??"",Z,{encoding:"utf8",shell:!1});return{stdout:f.stdout??"",exitCode:f.status??-1}},platform(){return kL()}}});import{mkdirSync as bL,readFileSync as NL,renameSync as TL,writeFileSync as EL}from"fs";import{dirname as uL}from"path";function i1(){try{let J=NL(kJ(),"utf8"),Y=JSON.parse(J);if(Y&&typeof Y==="object"&&!Array.isArray(Y))return Y}catch{}return{}}function y9(J){let Y=kJ();bL(uL(Y),{recursive:!0});let Z=`${Y}.tmp`;EL(Z,JSON.stringify(J,null,2),"utf8"),TL(Z,Y)}function Vf(J){let Y=i1();if(J(Y)!==!1)y9(Y);return Y}function IZ(J){return Vf((Y)=>{for(let[Z,f]of Object.entries(J))if(f===void 0)delete Y[Z];else Y[Z]=f;return})}function k9(J){y9(J)}var Kf=y(()=>{v1()});var aY={};q1(aY,{statePath:()=>wL,setRepoInitOverride:()=>hL,setPersistedString:()=>m1,resolveRepoRoot:()=>gY,resolveMainRepoRoot:()=>xL,removeSavedRepo:()=>PL,remoteRepoKey:()=>E9,normalizeSavedRepos:()=>Cq,isRemoteRepoKey:()=>bJ,isRemoteProjectsEnabled:()=>yq,getSavedRepos:()=>IJ,getRepoInitOverride:()=>Sq,getRemoteRepos:()=>Iq,getRemoteRepoConfig:()=>SY,getPersistedString:()=>O1,getCustomEngineIds:()=>gq,addSavedRepo:()=>CY,addRemoteRepo:()=>bq});import{spawnSync as b9}from"child_process";import{realpathSync as I9}from"fs";function gY(J){if(bJ(J))return J;let Y=b9("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(I9(J)===I9(Z))return J}catch{}return Z}function xL(J){if(bJ(J))return J;let Y=b9("git",["worktree","list","--porcelain"],{cwd:J,encoding:"utf8",shell:!1});if(Y.status!==0)return gY(J);return(Y.stdout??"").split(/\r?\n/).find((f)=>f.startsWith("worktree "))?.slice(9).trim()||gY(J)}function wL(){return kJ()}function uX(J){let Y=J.savedRepos;if(!Array.isArray(Y))return[];return Y.filter((Z)=>typeof Z==="string")}function IJ(){return uX(i1())}function O1(J){let Y=i1()[J];return typeof Y==="string"?Y:void 0}function m1(J,Y){IZ({[J]:Y})}function gq(){let J=i1().customEngineIds;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string"&&Y.trim().length>0)}function CY(J){let Y=gY(J),Z={added:!1,path:Y,total:0};return Vf((f)=>{let G=uX(f);if(G.includes(Y))return Z={added:!1,path:Y,total:G.length},!1;f.savedRepos=[...G,Y],Z={added:!0,path:Y,total:G.length+1};return}),Z}function Cq(){let J=IJ(),Y=new Set,Z=[],f=!1;for(let G of J){let X=gY(G);if(X!==G)f=!0;if(Y.has(X)){f=!0;continue}Y.add(X),Z.push(X)}if(!f)return;IZ({savedRepos:Z})}function N9(J){let Y=J.repoConfigs;if(!Y||typeof Y!=="object"||Array.isArray(Y))return{};return Y}function T9(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 Sq(J){return T9(N9(i1())[gY(J)])}function hL(J,Y){let Z=gY(J),f={};return Vf((G)=>{let X={...N9(G)},Q=T9(X[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}=X;G.repoConfigs=K}else X[Z]=f,G.repoConfigs=X;return}),f}function PL(J){let Y={removed:!1,path:J,total:0};return Vf((Z)=>{let f=uX(Z);if(!f.includes(J))return Y={removed:!1,path:J,total:f.length},!1;Z.savedRepos=f.filter((G)=>G!==J),Y={removed:!0,path:J,total:f.length-1};return}),Y}function bJ(J){return J.startsWith("ssh://")}function yq(){return i1()["experimental.remoteProjects"]===!0}function E9(J,Y,Z){return Z?`ssh://${Y}@${J}:${Z}`:`ssh://${Y}@${J}`}function kq(J){let Y=J.remoteRepos;if(!Y||typeof Y!=="object"||Array.isArray(Y))return{};return Y}function SY(J){return kq(i1())[J]??null}function Iq(){return kq(i1())}function bq(J){let Y=E9(J.host,J.user,J.port),Z=!1;return Vf((f)=>{let G={...kq(f)};G[Y]=J,f.remoteRepos=G;let X=uX(f);if(Z=!X.includes(Y),Z)f.savedRepos=[...X,Y];return}),{key:Y,added:Z}}var D1=y(()=>{v1();Kf()});var w9={};q1(w9,{runAddRemote:()=>cL,parseRemoteFlags:()=>x9});import{createInterface as vL}from"readline";function x9(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 G=Number(J[++Z]);if(!Number.isInteger(G)||G<=0)mJ(`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(u9),process.exit(0);break;default:mJ(`unknown flag "${f}"`)}}return Y}function mJ(J){process.stderr.write(`kobe add --remote: ${J}
3
+ var UL=Object.defineProperty;var LL=(J)=>J;function DL(J,Y){this[J]=LL.bind(null,Y)}var j1=(J,Y)=>{for(var Z in Y)UL(J,Z,{get:Y[Z],enumerable:!0,configurable:!0,set:DL.bind(Y,Z)})};var S=(J,Y)=>()=>(J&&(Y=J(J=0)),Y);var Nf=import.meta.require;import{basename as ML}from"path";function FL(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 bf(J,Y){let Z;try{Z=FL(J)}catch{return!1}return Z.test(Y)||Z.test(ML(Y))}var Oq=()=>{};var FW={};j1(FW,{prevVendorWithin:()=>Aq,nextVendorWithin:()=>sY,nextVendor:()=>OL,isBuiltinVendor:()=>e1,coerceVendorId:()=>OG,BUILTIN_VENDORS:()=>NZ,ALL_VENDORS:()=>h1});function e1(J){return J==="claude"||J==="codex"||J==="copilot"}function OL(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 Aq(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 OG(J){let Y=J?.trim();return Y&&Y.length>0?Y:"claude"}var NZ,h1;var HJ=S(()=>{NZ=["claude","codex","copilot"],h1=[...NZ]});var Tf;var OW=S(()=>{Tf={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.35",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.12"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.11","@tsconfig/bun":"1.0.9","@types/bun":"1.3.12","@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 AW}from"crypto";import{homedir as RL}from"os";import{join as bZ}from"path";function RW(){return process.env.KOBE_DEV==="1"}function qY(){return process.env.KOBE_HOME_DIR??RL()}function r1(){return bZ(qY(),".kobe")}function TJ(){return bZ(qY(),".config","kobe","state.json")}function gL(){return bZ(r1(),"settings")}function gW(){return bZ(gL(),"keybindings.yaml")}function Rq(){return bZ(r1(),"issue-assets")}function Ef(J,Y,Z){let X=AW("sha1").update(`${Y}@${J}:${Z??22}`).digest("hex").slice(0,16);return bZ(r1(),"ssh",`${X}.sock`)}function CW(J){let Y=AW("sha1").update(J).digest("hex").slice(0,16);return bZ(r1(),"worktree-init",Y)}var c1=()=>{};var yW={};j1(yW,{repoSlug:()=>TZ,releasePageUrl:()=>kq,recommendedGlobalInstallCommand:()=>Sq,isNewerSemver:()=>gq,fetchReleaseSummaries:()=>yL,fetchReleaseNotesRange:()=>yq,fetchReleaseNotes:()=>SL,compareSemver:()=>uf,checkLatestVersion:()=>AG,UPDATE_SCRIPT_URL:()=>xf,UPDATE_COMMAND:()=>kY,PACKAGE_NAME:()=>Cq,CURRENT_VERSION:()=>d0});function TZ(){let J=Tf.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 Sq(){return`npm install -g ${Cq}@latest`}async function CL(J){let Y=new AbortController,Z=setTimeout(()=>Y.abort(),wf);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 f=await G.json();if(typeof f.version!=="string")return null;return f.version}catch{return null}finally{clearTimeout(Z)}}function gq(J,Y){return uf(J,Y)>0}function uf(J,Y){let Z=(f)=>f.split("-")[0]??f,X=Z(J).split(".").map((f)=>Number.parseInt(f,10)),G=Z(Y).split(".").map((f)=>Number.parseInt(f,10));for(let f=0;f<3;f++){let Q=X[f]??0,q=G[f]??0;if(Number.isNaN(Q)||Number.isNaN(q))return 0;if(Q>q)return 1;if(Q<q)return-1}return 0}async function AG(J={}){let Y=process.env.KOBE_FAKE_UPDATE;if(Y)return{current:d0,latest:Y,hasUpdate:gq(Y,d0)};if(RW()&&!J.force)return null;let Z=await CL(Cq);if(!Z)return null;return{current:d0,latest:Z,hasUpdate:gq(Z,d0)}}function SW(J){if(typeof J!=="string")return null;return J.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function SL(J){let Y=TZ();if(!Y)return null;let Z=`v${J}`,X=new AbortController,G=setTimeout(()=>X.abort(),wf);try{let f=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(!f.ok)return null;let Q=await f.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(G)}}async function yq(J){let Y=TZ();if(!Y)return[];let Z=J.limit??100,X=new AbortController,G=setTimeout(()=>X.abort(),wf);try{let f=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(!f.ok)return[];let Q=await f.json();if(!Array.isArray(Q))return[];return Q.map((q)=>{let B=SW(q.tag_name);if(!B||typeof q.html_url!=="string"||typeof q.body!=="string")return null;if(uf(B,J.current)<=0)return null;if(uf(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 yL(J=12){let Y=TZ();if(!Y)return[];let Z=new AbortController,X=setTimeout(()=>Z.abort(),wf);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 f=await G.json();if(!Array.isArray(f))return[];return f.map((Q)=>{let q=SW(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(X)}}function kq(J){let Y=TZ();if(!Y)return null;return`https://github.com/${Y}/releases/tag/v${J}`}var d0,Cq,xf="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",kY,wf=3000;var zJ=S(()=>{OW();c1();d0=Tf.version,Cq=Tf.name;kY=`curl -fsSL ${xf} | sh`});import{spawn as kL,spawnSync as IL}from"child_process";import{existsSync as IW}from"fs";import{mkdir as NL,readFile as bL,readdir as TL}from"fs/promises";function EZ(J){return`'${J.replace(/'/g,"'\\''")}'`}function EL(J){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(J)?J:EZ(J)}function bW(J){return J.map(EZ).join(" ")}function uL(J,Y){let Z=bW(J);return Y?`cd ${EZ(Y)} && ${Z}`:Z}function xL(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}=${EZ(X)}`).join(" ")} `}function RG(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 TW(J,Y={}){return new Promise((Z)=>{let[X,...G]=J,f="",Q="",q=!1,B=(K)=>{if(q)return;q=!0,Z({stdout:f,stderr:Q,exitCode:K})},H;try{H=kL(X??"",G,{cwd:Y.cwd,env:Y.env,shell:!1,signal:Y.signal})}catch{B(-1);return}H.stdout?.setEncoding("utf8"),H.stdout?.on("data",(K)=>{f+=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 hf{isRemote=!1;run(J,Y={}){return TW(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 NL(J,{recursive:!0})}async readFile(J){try{return await bL(J,"utf8")}catch{return null}}async readdir(J){try{return await TL(J)}catch{return[]}}wrapCommand(J){return J}ensureReady(){}}class DX{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(J,Y=NW,Z){this.spec=J;this.spawn=Y;this.spawnAsync=Z??(this.spawn===NW?wL:async(X,G)=>this.spawn(X,G))}ensureReady(){if(this.masterUp)return;if(this.spawn([...RG(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let Y=[...RG(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=`${xL(Y.env)}${bW(J)}`,X=Y.cwd?`cd ${EZ(Y.cwd)} && ${Z}`:Z;return this.spawnAsync([...RG(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([...RG(this.spec,{batch:!0}),uL(["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 ${EZ(Y.cwd)} && ${J}`:J;return`${RG(this.spec,{tty:Y.tty}).map(EL).join(" ")} ${EZ(Z)}`}}var NW=(J,Y)=>{let[Z,...X]=J,G=IL(Z??"",X,{env:Y?{...process.env,...Y}:process.env,encoding:"utf8",shell:!1});return{stdout:G.stdout??"",stderr:G.stderr??"",exitCode:G.status??-1}},wL=(J,Y,Z)=>TW(J,{env:Y?{...process.env,...Y}:process.env,signal:Z?.signal});var Iq=()=>{};import{spawnSync as hL}from"child_process";import{platform as PL}from"os";function EW(J,Y,Z){return{service:vL,account:Z?`${Y}@${J}:${Z}`:`${Y}@${J}`}}function bq(J=Nq){return J.platform()==="darwin"}function uW(J,Y,Z=Nq){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 Pf(J,Y=Nq){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 Nq,vL="kobe-remote-ssh";var Tq=S(()=>{Nq={run(J){let[Y,...Z]=J,X=hL(Y??"",Z,{encoding:"utf8",shell:!1});return{stdout:X.stdout??"",exitCode:X.status??-1}},platform(){return PL()}}});import{mkdirSync as mL,readFileSync as cL,renameSync as dL,writeFileSync as nL}from"fs";import{dirname as iL}from"path";function $1(){try{let J=cL(TJ(),"utf8"),Y=JSON.parse(J);if(Y&&typeof Y==="object"&&!Array.isArray(Y))return Y}catch{}return{}}function xW(J){let Y=TJ();mL(iL(Y),{recursive:!0});let Z=`${Y}.tmp`;nL(Z,JSON.stringify(J,null,2),"utf8"),dL(Z,Y)}function MX(J){let Y=$1();if(J(Y)!==!1)xW(Y);return Y}function uZ(J){return MX((Y)=>{for(let[Z,X]of Object.entries(J))if(X===void 0)delete Y[Z];else Y[Z]=X;return})}function wW(J){xW(J)}var FX=S(()=>{c1()});var tY={};j1(tY,{statePath:()=>$L,setRepoInitOverride:()=>aL,setPersistedString:()=>d1,resolveRepoRoot:()=>IY,resolveMainRepoRoot:()=>lL,removeSavedRepo:()=>pL,remoteRepoKey:()=>cW,normalizeSavedRepos:()=>uq,isRemoteRepoKey:()=>uJ,isRemoteProjectsEnabled:()=>wq,getSavedRepos:()=>EJ,getRepoInitOverride:()=>xq,getRemoteRepos:()=>Pq,getRemoteRepoConfig:()=>bY,getPersistedString:()=>C1,getCustomEngineIds:()=>Eq,addSavedRepo:()=>NY,addRemoteRepo:()=>vq});import{spawnSync as PW}from"child_process";import{realpathSync as hW}from"fs";function IY(J){if(uJ(J))return J;let Y=PW("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(hW(J)===hW(Z))return J}catch{}return Z}function lL(J){if(uJ(J))return J;let Y=PW("git",["worktree","list","--porcelain"],{cwd:J,encoding:"utf8",shell:!1});if(Y.status!==0)return IY(J);return(Y.stdout??"").split(/\r?\n/).find((X)=>X.startsWith("worktree "))?.slice(9).trim()||IY(J)}function $L(){return TJ()}function vf(J){let Y=J.savedRepos;if(!Array.isArray(Y))return[];return Y.filter((Z)=>typeof Z==="string")}function EJ(){return vf($1())}function C1(J){let Y=$1()[J];return typeof Y==="string"?Y:void 0}function d1(J,Y){uZ({[J]:Y})}function Eq(){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 MX((X)=>{let G=vf(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 uq(){let J=EJ(),Y=new Set,Z=[],X=!1;for(let G of J){let f=IY(G);if(f!==G)X=!0;if(Y.has(f)){X=!0;continue}Y.add(f),Z.push(f)}if(!X)return;uZ({savedRepos:Z})}function vW(J){let Y=J.repoConfigs;if(!Y||typeof Y!=="object"||Array.isArray(Y))return{};return Y}function mW(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 xq(J){return mW(vW($1())[IY(J)])}function aL(J,Y){let Z=IY(J),X={};return MX((G)=>{let f={...vW(G)},Q=mW(f[Z]),q=Y.initScript===void 0?Q.initScript:Y.initScript||void 0,B=Y.initPrompt===void 0?Q.initPrompt:Y.initPrompt||void 0;if(X={...q?{initScript:q}:{},...B?{initPrompt:B}:{}},!X.initScript&&!X.initPrompt){let{[Z]:H,...K}=f;G.repoConfigs=K}else f[Z]=X,G.repoConfigs=f;return}),X}function pL(J){let Y={removed:!1,path:J,total:0};return MX((Z)=>{let X=vf(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 uJ(J){return J.startsWith("ssh://")}function wq(){return $1()["experimental.remoteProjects"]===!0}function cW(J,Y,Z){return Z?`ssh://${Y}@${J}:${Z}`:`ssh://${Y}@${J}`}function hq(J){let Y=J.remoteRepos;if(!Y||typeof Y!=="object"||Array.isArray(Y))return{};return Y}function bY(J){return hq($1())[J]??null}function Pq(){return hq($1())}function vq(J){let Y=cW(J.host,J.user,J.port),Z=!1;return MX((X)=>{let G={...hq(X)};G[Y]=J,X.remoteRepos=G;let f=vf(X);if(Z=!f.includes(Y),Z)X.savedRepos=[...f,Y];return}),{key:Y,added:Z}}var A1=S(()=>{c1();FX()});var iW={};j1(iW,{runAddRemote:()=>oL,parseRemoteFlags:()=>nW});import{createInterface as _L}from"readline";function nW(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)lJ(`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(dW),process.exit(0);break;default:lJ(`unknown flag "${X}"`)}}return Y}function lJ(J){process.stderr.write(`kobe add --remote: ${J}
5
5
 
6
- ${u9}`),process.exit(2)}async function mL(J){let Y=vL({input:process.stdin,output:process.stdout,terminal:!0}),Z=process.stdout,f=!1,G=Z._writeToOutput?.bind(Z);return Z._writeToOutput=(X)=>{if(!f||!G)process.stdout.write(X)},process.stdout.write(J),f=!0,new Promise((X)=>{Y.question("",(Q)=>{if(f=!1,G)Z._writeToOutput=G;process.stdout.write(`
7
- `),Y.close(),X(Q)})})}async function cL(J){if(!yq())mJ("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let Y=x9(J);if(!Y.host)mJ("--host is required");if(!Y.user)mJ("--user is required");if(!Y.path)mJ("--path (remote base path) is required");if(Y.key&&Y.password)mJ("choose ONE of --key or --password, not both");if(!Y.key&&!Y.password)mJ("an auth method is required: --key [path] or --password");let Z;if(Y.password){if(!Aq())mJ("--password needs the macOS keychain (unsupported on this platform)");let X=C9(Y.host,Y.user,Y.port),Q=await mL(`Password for ${Y.user}@${Y.host}: `);if(Q.length===0)mJ("empty password");if(!S9(X,Q))mJ("failed to store the password in the keychain");Z={kind:"password",keychainRef:X}}else Z={kind:"key",keyPath:Y.key?.path};let{key:f,added:G}=bq({host:Y.host,user:Y.user,port:Y.port,basePath:Y.path,auth:Z});console.log(G?`added remote project ${f} (base ${Y.path})`:`updated remote project ${f} (base ${Y.path})`),await dL(Y,Z)}async function dL(J,Y){if(Y.kind==="password"&&!Aq())return;let Z=Y.kind==="key"?{kind:"key",keyPath:Y.keyPath}:{kind:"password",getPassword:()=>EX(Y.keychainRef)},f={host:J.host,user:J.user,port:J.port,auth:Z,controlPath:kX(J.host,J.user,J.port)};process.stdout.write("checking connection\u2026 ");try{if((await new Wf(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(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 u9;var h9=y(()=>{v1();Fq();Rq();D1();u9=`Usage: kobe add --remote --host <host> --user <user> --path <basePath>
6
+ ${dW}`),process.exit(2)}async function rL(J){let Y=_L({input:process.stdin,output:process.stdout,terminal:!0}),Z=process.stdout,X=!1,G=Z._writeToOutput?.bind(Z);return Z._writeToOutput=(f)=>{if(!X||!G)process.stdout.write(f)},process.stdout.write(J),X=!0,new Promise((f)=>{Y.question("",(Q)=>{if(X=!1,G)Z._writeToOutput=G;process.stdout.write(`
7
+ `),Y.close(),f(Q)})})}async function oL(J){if(!wq())lJ("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let Y=nW(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(!bq())lJ("--password needs the macOS keychain (unsupported on this platform)");let f=EW(Y.host,Y.user,Y.port),Q=await rL(`Password for ${Y.user}@${Y.host}: `);if(Q.length===0)lJ("empty password");if(!uW(f,Q))lJ("failed to store the password in the keychain");Z={kind:"password",keychainRef:f}}else Z={kind:"key",keyPath:Y.key?.path};let{key:X,added:G}=vq({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 sL(Y,Z)}async function sL(J,Y){if(Y.kind==="password"&&!bq())return;let Z=Y.kind==="key"?{kind:"key",keyPath:Y.keyPath}:{kind:"password",getPassword:()=>Pf(Y.keychainRef)},X={host:J.host,user:J.user,port:J.port,auth:Z,controlPath:Ef(J.host,J.user,J.port)};process.stdout.write("checking connection\u2026 ");try{if((await new DX(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 dW;var lW=S(()=>{c1();Iq();Tq();A1();dW=`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 P9(J){return typeof J==="string"&&nL.includes(J)}var FG=(J)=>J,I1="claude",nL;var NJ=y(()=>{nL=["backlog","in_progress","in_review","done","canceled","error"]});function iL(J,Y){let Z="",f=J;for(let G=Y-1;G>=0;G--){let X=f%32;Z="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[X]+Z,f=(f-X)/32}return Z}function c9(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 lL(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 $L(J){let Y="";for(let Z of J)Y+="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Z]??"0";return Y}function d9(J=Date.now()){let Y;if(J===v9){let Z=m9.slice();if(!lL(Z))Y=c9(16);else Y=Z}else Y=c9(16);return v9=J,m9=Y,iL(J,10)+$L(Y)}var v9=-1,m9;var n9=y(()=>{m9=Array(16).fill(0)});var $9={};q1($9,{TaskIndexStore:()=>Uf});import{mkdir as aL,open as pL,readFile as _L,rename as rL,unlink as i9}from"fs/promises";import{homedir as oL}from"os";import{dirname as sL,join as l9}from"path";class Uf{homeDir;kobeDir;path;tmpPath;cache={version:pY,tasks:[]};loaded=!1;listeners=new Set;saveChain=Promise.resolve();constructor(J={}){this.homeDir=J.homeDir??oL(),this.kobeDir=l9(this.homeDir,".kobe"),this.path=l9(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 _L(this.path,"utf8")}catch(Z){if(Z.code==="ENOENT")return this.cache={version:pY,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:pY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot()}return this.cache=tL(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 aL(sL(this.path),{recursive:!0});let J=this.snapshot(),Y=`${JSON.stringify(J,null,2)}
14
- `,Z=await pL(this.tmpPath,"w",420);try{await Z.writeFile(Y,"utf8"),await Z.sync()}finally{await Z.close()}await rL(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??I1,...J,id:FG(d9()),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:G,createdAt:X,...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 G=Z?.length?Z:this.cache.tasks.map((L)=>L.id),X=G.indexOf(String(J));if(X<0)throw Error(`task not movable in current group: ${J}`);let Q=G[X+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((G)=>{let X=this.cache.tasks.findIndex((q)=>q.id===G.id);if(!(X>=0?this.cache.tasks[X]:void 0))throw Error(`task not found: ${G.id}`);return{idx:X,position:G.position}}),Z=!1,f=new Map;for(let{idx:G,position:X}of Y){let Q=this.cache.tasks[G];if(!Q||Q.position===X)continue;if(!f.has(G))f.set(G,Q);this.cache.tasks[G]={...Q,position:X},Z=!0}if(!Z)return;try{await this.save()}catch(G){for(let[X,Q]of f)this.cache.tasks[X]=Q;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 i9(this.path)}catch(J){if(J.code!=="ENOENT")throw J}try{await i9(this.tmpPath)}catch(J){if(J.code!=="ENOENT")throw J}this.cache={version:pY,tasks:[]},this.loaded=!1}assertLoaded(){if(!this.loaded)throw Error("TaskIndexStore: call load() before any other method")}snapshot(){return{version:pY,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 tL(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:pY,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:pY,tasks:[]};let G=Array.isArray(Z.tasks)?Z.tasks:[],X=[];for(let Q of G){let q=eL(Q);if(q)X.push(q);else console.warn(`[kobe] dropping malformed task entry from ${Y}: ${JSON.stringify(Q)}`)}return{version:pY,tasks:X}}function eL(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(!XD(Y.status))return null;let Z=typeof Y.archived==="boolean"?Y.archived:!1,f=Y.kind==="main"?"main":"task",G=f==="main"?Y.status==="in_progress"||Y.status==="done"?"backlog":Y.status:Y.status==="done"&&!Z?"in_progress":Y.status;return{id:FG(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:f,vendor:GD(Y.vendor)?Y.vendor:I1,prStatus:JD(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 JD(J){if(!J||typeof J!=="object"||Array.isArray(J))return;let Y=J;if(!YD(Y.provider)||!ZD(Y.lifecycle)||!fD(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 YD(J){return J==="github"||J==="gitlab"||J==="bitbucket"||J==="unknown"}function ZD(J){return J==="creating"||J==="open"||J==="ready_to_merge"||J==="merged"||J==="closed"||J==="unknown"}function fD(J){return J==="none"||J==="pending"||J==="passing"||J==="failing"||J==="unknown"}function GD(J){return J==="claude"||J==="codex"}function XD(J){return J==="backlog"||J==="in_progress"||J==="in_review"||J==="done"||J==="canceled"||J==="error"}var pY=3;var xX=y(()=>{NJ();n9()});function a9(J){let Y=J.auth,Z=Y.kind==="key"?{kind:"key",keyPath:Y.keyPath}:{kind:"password",getPassword:()=>EX(Y.keychainRef)};return{host:J.host,user:J.user,port:J.port,auth:Z,controlPath:kX(J.host,J.user,J.port)}}function Lf(J){let Y=SY(J);if(!Y)return new TX;return new Wf(a9(Y))}function yY(J){for(let Y of Object.values(Iq()))if(J===Y.basePath||J.startsWith(`${Y.basePath}/`))return new Wf(a9(Y));return new TX}function p9(J){return J&&bJ(J)?J:void 0}function wX(J){let Y=yY(J);return Y.isRemote||Y.existsSync(J)}function g1(J){return yY(J).isRemote?fY():J}var cJ=y(()=>{v1();D1();Fq();Rq()});var hX;var _9=y(()=>{hX=class hX 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 zD}from"crypto";import o9 from"fs";import FJ from"path";function s9(J){if(!FJ.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return FJ.join(_1(),QD,WD(J))}function t9(J){if(!FJ.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[s9(J),...HD.map((Y)=>FJ.join(J,Y))]}function e9(J,Y){if(!Y||/[/\\\0]/.test(Y))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(Y)}`);return FJ.join(s9(J),Y)}async function JW(J){if(bJ(J)){let Z=SY(J)?.basePath;if(!Z)return[];return Lf(J).readdir(ZW(Z))}let Y=new Set;for(let Z of t9(J))try{for(let f of o9.readdirSync(Z,{withFileTypes:!0}))if(f.isDirectory())Y.add(f.name)}catch{}return[...Y]}function Nq(J,Y){if(!FJ.isAbsolute(J)||!FJ.isAbsolute(Y))return null;let Z=r9(Y);for(let f of t9(J)){let G=r9(f),X=FJ.relative(G,Z);if(X!==""&&!X.startsWith("..")&&!FJ.isAbsolute(X))return f}return null}function YW(J,Y){return Nq(J,Y)!==null}function ZW(J){return`${jD(J)}/.kobe/worktrees`}function fW(J,Y){if(!Y||/[/\\\0]/.test(Y))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(Y)}`);return`${ZW(J)}/${Y}`}function jD(J){return J.length>1&&J.endsWith("/")?J.replace(/\/+$/,""):J}function r9(J){try{return o9.realpathSync(J)}catch{return FJ.resolve(J)}}function WD(J){let Z=(FJ.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",f=zD("sha1").update(FJ.resolve(J)).digest("hex").slice(0,12);return`${Z}-${f}`}var QD="worktrees",qD=".kobe/worktrees",BD=".claude/worktrees",HD;var Tq=y(()=>{v1();cJ();D1();HD=[qD,BD]});var zW={};q1(zW,{GitWorktreeManager:()=>PX});import XW from"fs";import dJ from"path";class PX{execDeps;constructor(J=VD){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}),G={stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode};if(G.exitCode!==0&&!Z.allowFail)throw new hX(Y,Z.cwd,G);return G}async create(J,Y,Z,f){let G=this.ctxFor(J);if(_Y("repo",G.dir),_Y("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(dJ.dirname(Z));let Q=await this.branchExists(G,Y)?["worktree","add",Z,Y]:f?["worktree","add","-b",Y,Z,f]:["worktree","add","-b",Y,Z];await this.runGit(G.exec,Q,{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?fW(Y,J.slug):e9(J.repo,J.slug);return this.create(J.repo,J.branch,Z,J.baseRef)}async remove(J,Y){_Y("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 G=await this.findRepoFor(Z,J);if(!G)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 X=f?["worktree","remove","--force",J]:["worktree","remove",J];await this.runGit(Z,X,{cwd:G}),await this.runGit(Z,["worktree","prune"],{cwd:G,allowFail:!0})}async list(J){let Y=this.ctxFor(J);_Y("repo",Y.dir);let Z=await this.runGit(Y.exec,["worktree","list","--porcelain"],{cwd:Y.dir}),f=Eq(Z.stdout),G=[];for(let X of f){if(!X.path)continue;let Q=Y.remote?GW(Y.dir,X.path):Nq(J,X.path);if(!Q)continue;if(!X.branch||X.detached)continue;let q=OG(Q),B=OG(X.path),H=dJ.relative(q,B),K=dJ.join(Q,H),j=await this.isDirty(X.path);G.push({path:K,branch:X.branch,head:X.head??"",dirty:j})}return G}async listAll(J){let Y=this.ctxFor(J);_Y("repo",Y.dir);let Z=await this.runGit(Y.exec,["worktree","list","--porcelain"],{cwd:Y.dir}),f=Eq(Z.stdout),G=Y.remote?Y.dir:OG(Y.dir),X=[];for(let Q of f){if(!Q.path)continue;if(Q.bare)continue;if(!Q.branch||Q.detached)continue;if((Y.remote?Q.path:OG(Q.path))===G)continue;let q=await this.isDirty(Q.path);X.push({path:Q.path,branch:Q.branch,head:Q.head??"",dirty:q,kobeManaged:Y.remote?GW(Y.dir,Q.path)!==null:YW(J,Q.path),lastActivityMs:await this.lastActivityMs(Y.exec,Q.path)})}return X.sort((Q,q)=>q.lastActivityMs-Q.lastActivityMs),X}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 XW.statSync(Y).mtimeMs}catch{}return 0}async isDirty(J){_Y("path",J);let Y=this.execDeps.execForPath(J);return(await this.runGit(Y,["status","--porcelain"],{cwd:J})).stdout.length>0}async currentBranch(J){_Y("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(_Y("path",J),Y===Z)return;let f=this.execDeps.execForPath(J),G=await this.findRepoFor(f,J);if(!G)throw Error(`renameBranch(): ${J} is not a git worktree`);await this.runGit(f,["branch","-m",Y,Z],{cwd:G})}async tryDescribe(J,Y){let Z=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),f=Eq(Z.stdout),G=(q)=>J.remote?q:OG(q),X=G(Y),Q=f.find((q)=>q.path&&G(q.path)===X);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 G=dJ.isAbsolute(f)?f:dJ.resolve(Y,f);return dJ.basename(G)===".git"?dJ.dirname(G):G}catch(Z){if(Z instanceof hX)return null;throw Z}}}function Eq(J){let Y=[],Z=null;for(let f of J.split(`
15
- `)){let G=f.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 X=G.slice(7);Z.branch=X.startsWith("refs/heads/")?X.slice(11):X}else if(G==="detached")Z.detached=!0;else if(G==="bare")Z.bare=!0}if(Z)Y.push(Z);return Y}function GW(J,Y){let Z=`${J.replace(/\/+$/,"")}/.kobe/worktrees`;return Y===Z||Y.startsWith(`${Z}/`)?Z:null}function _Y(J,Y){if(!Y||!dJ.isAbsolute(Y))throw Error(`${J} must be an absolute path, got: ${JSON.stringify(Y)}`)}function OG(J){try{return XW.realpathSync(J)}catch{return dJ.resolve(J)}}var VD;var uq=y(()=>{cJ();D1();_9();Tq();VD={execForRepo:Lf,execForPath:yY,remoteBasePath(J){return SY(J)?.basePath??null}}});function QW(J){let Y=String(J),Z=Y.length-1;return b1.context.id+(Z?String.fromCharCode(96+Z):"")+Y}function hq(J){b1.context=J}function KD(){return{...b1.context,id:b1.getNextContextId(),count:0}}function bZ(J,Y){let Z=H1,f=d0,G=J.length===0,X=Y===void 0?f:Y,Q=G?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:X?X.context:null,owner:X},q=G?()=>J(()=>{throw Error("Dispose method must be an explicit argument to createRoot function")}):()=>J(()=>c1(()=>rY(Q)));iJ.afterCreateOwner&&iJ.afterCreateOwner(Q),d0=Q,H1=null;try{return qJ(q,!0)}finally{H1=Z,d0=f}}function r(J,Y){Y=Y?Object.assign({},cX,Y):cX;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(LW(Z),iJ.afterCreateSignal)iJ.afterCreateSignal(Z)}let f=(G)=>{if(typeof G==="function")if(B0&&B0.running&&B0.sources.has(Z))G=G(Z.tValue);else G=G(Z.value);return vq(Z,G)};return[DW.bind(Z),f]}function BW(J,Y,Z){let f=CG(J,Y,!0,OJ,Z);if(Mf&&B0&&B0.running)w1.push(f);else NZ(f)}function GY(J,Y,Z){let f=CG(J,Y,!1,OJ,Z);if(Mf&&B0&&B0.running)w1.push(f);else NZ(f)}function a0(J,Y,Z){UW=yD;let f=CG(J,Y,!1,OJ,Z),G=RG&&AJ(RG);if(G)f.suspense=G;if(!Z||!Z.render)f.user=!0;JJ?JJ.push(f):NZ(f)}function W0(J,Y,Z){Z=Z?Object.assign({},cX,Z):cX;let f=CG(J,Y,!0,0,Z);if(f.observers=null,f.observerSlots=null,f.comparator=Z.equals||void 0,Mf&&B0&&B0.running)f.tState=OJ,w1.push(f);else NZ(f);return DW.bind(f)}function OD(J){return J&&typeof J==="object"&&"then"in J}function lX(J,Y,Z){let f,G,X;if(typeof Y==="function")f=J,G=Y,X=Z||{};else f=!0,G=J,X=Y||{};let Q=null,q=xq,B=null,H=!1,K=!1,j="initialValue"in X,U=typeof f==="function"&&W0(f),L=new Set,[M,D]=(X.storage||r)(X.initialValue),[A,R]=r(void 0),[l,g]=r(void 0,{equals:!1}),[S,C]=r(j?"ready":"unresolved");if(b1.context){if(B=b1.getNextContextId(),X.ssrLoadFrom==="initial")q=X.initialValue;else if(b1.load&&b1.has(B))q=b1.load(B)}function k(E,Q0,e,j0){if(Q===E){if(Q=null,j0!==void 0&&(j=!0),(E===q||Q0===q)&&X.onHydrated)queueMicrotask(()=>X.onHydrated(j0,{value:Q0}));if(q=xq,B0&&E&&H)B0.promises.delete(E),H=!1,qJ(()=>{B0.running=!0,$(Q0,e)},!1);else $(Q0,e)}return Q0}function $(E,Q0){qJ(()=>{if(Q0===void 0)D(()=>E);C(Q0!==void 0?"errored":j?"ready":"unresolved"),R(Q0);for(let e of L.keys())e.decrement();L.clear()},!1)}function G0(){let E=RG&&AJ(RG),Q0=M(),e=A();if(e!==void 0&&!Q)throw e;if(H1&&!H1.user&&E)BW(()=>{if(l(),Q){if(E.resolved&&B0&&H)B0.promises.add(Q);else if(!L.has(E))E.increment(),L.add(E)}});return Q0}function s(E=!0){if(E!==!1&&K)return;K=!1;let Q0=U?U():f;if(H=B0&&B0.running,Q0==null||Q0===!1){k(Q,c1(M));return}if(B0&&Q)B0.promises.delete(Q);let e,j0=q!==xq?q:c1(()=>{try{return G(Q0,{value:M(),refetching:E})}catch(o){e=o}});if(e!==void 0){k(Q,void 0,mX(e),Q0);return}else if(!OD(j0))return k(Q,j0,void 0,Q0),j0;if(Q=j0,"v"in j0){if(j0.s===1)k(Q,j0.v,void 0,Q0);else k(Q,void 0,mX(j0.v),Q0);return j0}return K=!0,queueMicrotask(()=>K=!1),qJ(()=>{C(j?"refreshing":"pending"),g()},!1),j0.then((o)=>k(j0,o,void 0,Q0),(o)=>k(j0,void 0,mX(o),Q0))}Object.defineProperties(G0,{state:{get:()=>S()},error:{get:()=>A()},loading:{get(){let E=S();return E==="pending"||E==="refreshing"}},latest:{get(){if(!j)return G0();let E=A();if(E&&!Q)throw E;return M()}}});let J0=d0;if(U)BW(()=>(J0=d0,s(!1)));else s(!1);return[G0,{refetch:(E)=>AD(J0,()=>s(E)),mutate:D}]}function $X(J){return qJ(J,!1)}function c1(J){if(!Df&&H1===null)return J();let Y=H1;H1=null;try{if(Df)return Df.untrack(J);return J()}finally{H1=Y}}function BJ(J,Y,Z){let f=Array.isArray(J),G,X=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(X)return X=!1,Q;let B=c1(()=>Y(q,G,Q));return G=q,B}}function r1(J){a0(()=>c1(J))}function d1(J){if(d0===null)console.warn("cleanups created outside a `createRoot` or `render` will never be run");else if(d0.cleanups===null)d0.cleanups=[J];else d0.cleanups.push(J);return J}function aX(){return H1}function AD(J,Y){let Z=d0,f=H1;d0=J,H1=null;try{return qJ(Y,!0)}catch(G){pX(G)}finally{d0=Z,H1=f}}function RD(J){if(B0&&B0.running)return J(),B0.done;let Y=H1,Z=d0;return Promise.resolve().then(()=>{H1=Y,d0=Z;let f;if(Mf||RG)f=B0||(B0={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),f.done||(f.done=new Promise((G)=>f.resolve=G)),f.running=!0;return qJ(J,!1),H1=d0=null,f?f.done:void 0})}function jW(J,Y){let Z=CG(()=>c1(()=>{return Object.assign(J,{[MD]:!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 LW(J){if(d0){if(d0.sourceMap)d0.sourceMap.push(J);else d0.sourceMap=[J];J.graph=d0}if(iJ.afterRegisterGraph)iJ.afterRegisterGraph(J)}function XY(J,Y){let Z=Symbol("context");return{id:Z,Provider:kD(Z,Y),defaultValue:J}}function AJ(J){let Y;return d0&&d0.context&&(Y=d0.context[J.id])!==void 0?Y:J.defaultValue}function gD(J){let Y=W0(J),Z=W0(()=>Pq(Y()),void 0,{name:"children"});return Z.toArray=()=>{let f=Z();return Array.isArray(f)?f:f!=null?[f]:[]},Z}function DW(){let J=B0&&B0.running;if(this.sources&&(J?this.tState:this.state))if((J?this.tState:this.state)===OJ)NZ(this);else{let Y=w1;w1=null,qJ(()=>dX(this),!1),w1=Y}if(H1){let Y=this.observers?this.observers.length:0;if(!H1.sources)H1.sources=[this],H1.sourceSlots=[Y];else H1.sources.push(this),H1.sourceSlots.push(Y);if(!this.observers)this.observers=[H1],this.observerSlots=[H1.sources.length-1];else this.observers.push(H1),this.observerSlots.push(H1.sources.length-1)}if(J&&B0.sources.has(this))return this.tValue;return this.value}function vq(J,Y,Z){let f=B0&&B0.running&&B0.sources.has(J)?J.tValue:J.value;if(!J.comparator||!J.comparator(f,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)qJ(()=>{for(let G=0;G<J.observers.length;G+=1){let X=J.observers[G],Q=B0&&B0.running;if(Q&&B0.disposed.has(X))continue;if(Q?!X.tState:!X.state){if(X.pure)w1.push(X);else JJ.push(X);if(X.observers)FW(X)}if(!Q)X.state=OJ;else X.tState=OJ}if(w1.length>1e6){if(w1=[],UD)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return Y}function NZ(J){if(!J.fn)return;rY(J);let Y=iX;if(WW(J,B0&&B0.running&&B0.sources.has(J)?J.tValue:J.value,Y),B0&&!B0.running&&B0.sources.has(J))queueMicrotask(()=>{qJ(()=>{B0&&(B0.running=!0),H1=d0=J,WW(J,J.tValue,Y),H1=d0=null},!1)})}function WW(J,Y,Z){let f,G=d0,X=H1;H1=d0=J;try{f=J.fn(Y)}catch(Q){if(J.pure)if(B0&&B0.running)J.tState=OJ,J.tOwned&&J.tOwned.forEach(rY),J.tOwned=void 0;else J.state=OJ,J.owned&&J.owned.forEach(rY),J.owned=null;return J.updatedAt=Z+1,pX(Q)}finally{H1=X,d0=G}if(!J.updatedAt||J.updatedAt<=Z){if(J.updatedAt!=null&&"observers"in J)vq(J,f,!0);else if(B0&&B0.running&&J.pure){if(!B0.sources.has(J))J.value=f;B0.sources.add(J),J.tValue=f}else J.value=f;J.updatedAt=Z}}function CG(J,Y,Z,f=OJ,G){let X={fn:J,state:f,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:Y,owner:d0,context:d0?d0.context:null,pure:Z};if(B0&&B0.running)X.state=0,X.tState=f;if(d0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if(d0!==FD)if(B0&&B0.running&&d0.pure)if(!d0.tOwned)d0.tOwned=[X];else d0.tOwned.push(X);else if(!d0.owned)d0.owned=[X];else d0.owned.push(X);if(G&&G.name)X.name=G.name;if(Df&&X.fn){let Q=X.fn,[q,B]=r(void 0,{equals:!1}),H=Df.factory(Q,B);d1(()=>H.dispose());let K,j=()=>RD(B).then(()=>{if(K)K.dispose(),K=void 0});X.fn=(U)=>{if(q(),B0&&B0.running){if(!K)K=Df.factory(Q,j);return K.track(U)}return H.track(U)}}return iJ.afterCreateOwner&&iJ.afterCreateOwner(X),X}function gG(J){let Y=B0&&B0.running;if((Y?J.tState:J.state)===0)return;if((Y?J.tState:J.state)===AG)return dX(J);if(J.suspense&&c1(J.suspense.inFallback))return J.suspense.effects.push(J);let Z=[J];while((J=J.owner)&&(!J.updatedAt||J.updatedAt<iX)){if(Y&&B0.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 G=J,X=Z[f+1];while((G=G.owner)&&G!==X)if(B0.disposed.has(G))return}if((Y?J.tState:J.state)===OJ)NZ(J);else if((Y?J.tState:J.state)===AG){let G=w1;w1=null,qJ(()=>dX(J,Z[0]),!1),w1=G}}}function qJ(J,Y){if(w1)return J();let Z=!1;if(!Y)w1=[];if(JJ)Z=!0;else JJ=[];iX++;try{let f=J();return CD(Z),f}catch(f){if(!Z)JJ=null;w1=null,pX(f)}}function CD(J){if(w1){if(Mf&&B0&&B0.running)SD(w1);else MW(w1);w1=null}if(J)return;let Y;if(B0){if(!B0.promises.size&&!B0.queue.size){let{sources:f,disposed:G}=B0;JJ.push.apply(JJ,B0.effects),Y=B0.resolve;for(let X of JJ)"tState"in X&&(X.state=X.tState),delete X.tState;B0=null,qJ(()=>{for(let X of G)rY(X);for(let X of f){if(X.value=X.tValue,X.owned)for(let Q=0,q=X.owned.length;Q<q;Q++)rY(X.owned[Q]);if(X.tOwned)X.owned=X.tOwned;delete X.tValue,delete X.tOwned,X.tState=0}HW(!1)},!1)}else if(B0.running){B0.running=!1,B0.effects.push.apply(B0.effects,JJ),JJ=null,HW(!0);return}}let Z=JJ;if(JJ=null,Z.length)qJ(()=>UW(Z),!1);else iJ.afterUpdate&&iJ.afterUpdate();if(Y)Y()}function MW(J){for(let Y=0;Y<J.length;Y++)gG(J[Y])}function SD(J){for(let Y=0;Y<J.length;Y++){let Z=J[Y],f=B0.queue;if(!f.has(Z))f.add(Z),Mf(()=>{f.delete(Z),qJ(()=>{B0.running=!0,gG(Z)},!1),B0&&(B0.running=!1)})}}function yD(J){let Y,Z=0;for(Y=0;Y<J.length;Y++){let f=J[Y];if(!f.user)gG(f);else J[Z++]=f}if(b1.context){if(b1.count){b1.effects||(b1.effects=[]),b1.effects.push(...J.slice(0,Z));return}hq()}if(b1.effects&&(b1.done||!b1.count))J=[...b1.effects,...J],Z+=b1.effects.length,delete b1.effects;for(Y=0;Y<Z;Y++)gG(J[Y])}function dX(J,Y){let Z=B0&&B0.running;if(Z)J.tState=0;else J.state=0;for(let f=0;f<J.sources.length;f+=1){let G=J.sources[f];if(G.sources){let X=Z?G.tState:G.state;if(X===OJ){if(G!==Y&&(!G.updatedAt||G.updatedAt<iX))gG(G)}else if(X===AG)dX(G,Y)}}}function FW(J){let Y=B0&&B0.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=AG;else f.state=AG;if(f.pure)w1.push(f);else JJ.push(f);f.observers&&FW(f)}}}function rY(J){let Y;if(J.sources)while(J.sources.length){let Z=J.sources.pop(),f=J.sourceSlots.pop(),G=Z.observers;if(G&&G.length){let X=G.pop(),Q=Z.observerSlots.pop();if(f<G.length)X.sourceSlots[Q]=f,G[f]=X,Z.observerSlots[f]=Q}}if(J.tOwned){for(Y=J.tOwned.length-1;Y>=0;Y--)rY(J.tOwned[Y]);delete J.tOwned}if(B0&&B0.running&&J.pure)OW(J,!0);else if(J.owned){for(Y=J.owned.length-1;Y>=0;Y--)rY(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 OW(J,Y){if(!Y)J.tState=0,B0.disposed.add(J);if(J.owned)for(let Z=0;Z<J.owned.length;Z++)OW(J.owned[Z])}function mX(J){if(J instanceof Error)return J;return Error(typeof J==="string"?J:"Unknown error",{cause:J})}function VW(J,Y,Z){try{for(let f of Y)f(J)}catch(f){pX(f,Z&&Z.owner||null)}}function pX(J,Y=d0){let Z=qW&&Y&&Y.context&&Y.context[qW],f=mX(J);if(!Z)throw f;if(JJ)JJ.push({fn(){VW(f,Z,Y)},state:OJ});else VW(f,Z,Y)}function Pq(J){if(typeof J==="function"&&!J.length)return Pq(J());if(Array.isArray(J)){let Y=[];for(let Z=0;Z<J.length;Z++){let f=Pq(J[Z]);Array.isArray(f)?Y.push.apply(Y,f):Y.push(f)}return Y}return J}function kD(J,Y){return function(f){let G;return GY(()=>G=c1(()=>{return d0.context={...d0.context,[J]:f.value},gD(()=>f.children)}),void 0,Y),G}}function KW(J){for(let Y=0;Y<J.length;Y++)J[Y]()}function bD(J,Y,Z={}){let f=[],G=[],X=[],Q=0,q=Y.length>1?[]:null;return d1(()=>KW(X)),()=>{let B=J()||[],H=B.length,K,j;return B[nX],c1(()=>{let L,M,D,A,R,l,g,S,C;if(H===0){if(Q!==0)KW(X),X=[],f=[],G=[],Q=0,q&&(q=[]);if(Z.fallback)f=[ID],G[0]=bZ((k)=>{return X[0]=k,Z.fallback()}),Q=1}else if(Q===0){G=Array(H);for(j=0;j<H;j++)f[j]=B[j],G[j]=bZ(U);Q=H}else{D=Array(H),A=Array(H),q&&(R=Array(H));for(l=0,g=Math.min(Q,H);l<g&&f[l]===B[l];l++);for(g=Q-1,S=H-1;g>=l&&S>=l&&f[g]===B[S];g--,S--)D[S]=G[g],A[S]=X[g],q&&(R[S]=q[g]);L=new Map,M=Array(S+1);for(j=S;j>=l;j--)C=B[j],K=L.get(C),M[j]=K===void 0?-1:K,L.set(C,j);for(K=l;K<=g;K++)if(C=f[K],j=L.get(C),j!==void 0&&j!==-1)D[j]=G[K],A[j]=X[K],q&&(R[j]=q[K]),j=M[j],L.set(C,j);else X[K]();for(j=l;j<H;j++)if(j in D){if(G[j]=D[j],X[j]=A[j],q)q[j]=R[j],q[j](j)}else G[j]=bZ(U);G=G.slice(0,Q=H),f=B.slice(0)}return G});function U(L){if(X[j]=L,q){let[M,D]=r(j,{name:"index"});return q[j]=D,Y(B[j],M)}return Y(B[j])}}}function AW(J,Y){if(ND){if(b1.context){let Z=b1.context;hq(KD());let f=jW(J,Y||{});return hq(Z),f}}return jW(J,Y||{})}function vX(){return!0}function wq(J){return!(J=typeof J==="function"?J():J)?{}:J}function ED(){for(let J=0,Y=this.length;J<Y;++J){let Z=this[J]();if(Z!==void 0)return Z}}function _X(...J){let Y=!1;for(let Q=0;Q<J.length;Q++){let q=J[Q];Y=Y||!!q&&nJ in q,J[Q]=typeof q==="function"?(Y=!0,W0(q)):q}if(DD&&Y)return new Proxy({get(Q){for(let q=J.length-1;q>=0;q--){let B=wq(J[q])[Q];if(B!==void 0)return B}},has(Q){for(let q=J.length-1;q>=0;q--)if(Q in wq(J[q]))return!0;return!1},keys(){let Q=[];for(let q=0;q<J.length;q++)Q.push(...Object.keys(wq(J[q])));return[...new Set(Q)]}},TD);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:ED.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 G={},X=Object.keys(f);for(let Q=X.length-1;Q>=0;Q--){let q=X[Q],B=f[q];if(B&&B.get)Object.defineProperty(G,q,B);else G[q]=B?B.value:void 0}return G}function e0(J){let Y="fallback"in J&&{fallback:()=>J.fallback};return W0(bD(()=>J.each,J.children,Y||void 0),void 0,{name:"value"})}function X0(J){let Y=J.keyed,Z=W0(()=>J.when,void 0,{name:"condition value"}),f=Y?Z:W0(Z,void 0,{equals:(G,X)=>!G===!X,name:"condition"});return W0(()=>{let G=f();if(G){let X=J.children;return typeof X==="function"&&X.length>0?c1(()=>X(Y?G:()=>{if(!c1(f))throw uD("Show");return Z()})):X}return J.fallback},void 0,{name:"value"})}var b1,UD=!0,LD=(J,Y)=>J===Y,nJ,DD,nX,MD,cX,qW=null,UW,OJ=1,AG=2,FD,xq,d0=null,B0=null,Mf=null,Df=null,H1=null,w1=null,JJ=null,iX=0,iJ,oI,HW,RG,ID,ND=!1,TD,uD=(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.`,RW;var G1=y(()=>{b1={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return QW(this.context.count)},getNextContextId(){return QW(this.context.count++)}};nJ=Symbol("solid-proxy"),DD=typeof Proxy==="function",nX=Symbol("solid-track"),MD=Symbol("solid-dev-component"),cX={equals:LD},UW=MW,FD={},xq={},iJ={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[oI,HW]=r(!1);ID=Symbol("fallback");TD={get(J,Y,Z){if(Y===nJ)return Z;return J.get(Y)},has(J,Y){if(Y===nJ)return!0;return J.has(Y)},set:vX,deleteProperty:vX,getOwnPropertyDescriptor(J,Y){return{configurable:!0,enumerable:!0,get(){return J.get(Y)},set:vX,deleteProperty:vX}},ownKeys(J){return J.keys()}};RW={hooks:iJ,writeSignal:vq,registerGraph:LW};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 mq,cq,dq,nq="DIRTY_WORKTREE",iq,lq;var $q=y(()=>{mq=class mq 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"}};cq=class cq extends Error{constructor(J){super(`task not found: ${J}`);this.name="TaskNotFoundError"}};dq=class dq extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};iq=class iq extends Error{taskId;constructor(J){super(`${nq}: task ${J} worktree has uncommitted or untracked changes`);this.taskId=J;this.name="DirtyWorktreeError"}};lq=class lq 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 gW(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 rX(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 CW;var SW=y(()=>{CW=["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 aq{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??CW,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((G)=>!Y.has(G));if(Z.length>0){let G=Z[Math.floor(this.random()*Z.length)];return this.addPending(J,G),G}let f=this.pool[Math.floor(this.random()*this.pool.length)];for(let G=2;;G++){let X=`${f}-v${G}`;if(!Y.has(X))return this.addPending(J,X),X}}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 yW=y(()=>{SW();Tq()});var bW={};q1(bW,{PLACEHOLDER_TASK_TITLE:()=>zY,Orchestrator:()=>oX});import{realpathSync as xD}from"fs";import{basename as wD,resolve as hD}from"path";function kW(J){return SY(J)?.basePath??J}class oX{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 aq((X)=>this.store.list().filter((Q)=>Q.repo===X&&Q.kind!=="main").map((Q)=>{return Q.worktreePath.match(/([^/\\]+)[/\\]*$/)?.[1]??""}).filter((Q)=>Q.length>0));let[Y,Z]=r(this.store.list());this.tasksAcc=Y,this.setTasks=(X)=>Z(()=>X);let[f,G]=r(null);this.activeTaskAcc=f,this.setActiveTaskSig=(X)=>G(()=>X),this.unsubscribeStore=this.store.subscribe((X)=>{this.setTasks(X.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??zY).trim()||zY,Z=await this.store.create({repo:J.repo,title:Y,branch:J.branch??"",worktreePath:"",status:"backlog",kind:"task",vendor:J.vendor??I1,...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}=IW(J),f=this.store.list().find((Q)=>Q.kind==="main"&&IW(Q.repo).key===Z);if(f)return f;let G=this.mainTaskLocks.get(Z);if(G)return G;let X=(async()=>{return await this.store.create({repo:Y,title:PD(Y),branch:"",worktreePath:kW(Y),status:"backlog",kind:"main",vendor:I1})})();this.mainTaskLocks.set(Z,X);try{return await X}finally{this.mainTaskLocks.delete(Z)}}async ensureWorktree(J){let Y=this.requireTask(J);if(Y.kind==="main")return kW(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 X=await this.slugs.allocate(Y.repo);try{let Q=Y.branch||rX(Y.title,Y.id),q=this.pendingBaseRefs.get(Y.id),B=await this.worktrees.createForTask({repo:Y.repo,slug:X,branch:Q,baseRef:q});this.slugs.commit(Y.repo,X),this.pendingBaseRefs.delete(Y.id),await this.store.update(Y.id,{worktreePath:B.path,branch:Q})}catch(Q){throw this.slugs.cancel(Y.repo,X),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!==rX(zY,J.id))return;let Z=rX(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((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,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 mq(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 dq;let f=Y?.force===!0;if(Z.worktreePath){if(!f){let G=!1;try{G=await this.worktrees.isDirty(Z.worktreePath)}catch{}if(G)throw new iq(Z.id)}try{await this.worktrees.remove(Z.worktreePath,{force:f})}catch(G){throw new lq(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((f)=>f.worktreePath).map((f)=>Ff(f.worktreePath)));return Y.filter((f)=>!Z.has(Ff(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=Ff(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&&Ff(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)=>Ff(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 X=J.branch?.trim()||G.branch,Q=(J.title??wD(G.path)).trim()||zY;return this.store.create({repo:J.repo,title:Q,branch:X,worktreePath:G.path,status:"backlog",kind:"task",vendor:J.vendor??I1})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(J){let Y=this.store.get(J);if(!Y)throw new cq(String(J));return Y}}function PD(J){let Y=J.split(/[/\\]/).filter(Boolean);return Y.length>0?Y[Y.length-1]??J:J}function IW(J){let Y=gY(J);return{repo:Y,key:bJ(Y)?Y:Ff(Y)}}function Ff(J){try{return xD(J)}catch{return hD(J)}}var zY="(new task)";var SG=y(()=>{G1();D1();NJ();$q();yW()});function sX(J){return J.remoteVersion>=J.localMin&&J.localVersion>=J.remoteMin}function NW(J,Y){if(!J)return!1;return J!==Y}function mD(J){return typeof J==="string"&&vD.has(J)}function TW(J){if(!Array.isArray(J))return null;let Y=new Set;for(let Z of J)if(mD(Z))Y.add(Z);return Y.size>0?Y:null}function lJ(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 yG(J){return`${JSON.stringify(J)}
16
- `}var TJ=3,oY=2,pq,vD;var TZ=y(()=>{pq=["task.snapshot","issue.snapshot","active-task","update","engine-state","ui-prefs","keybindings","task.jobs","worktree.changes","session.deliver"],vD=new Set(pq)});import{createHash as cD}from"crypto";import{homedir as tX,tmpdir as dD}from"os";import{join as EZ}from"path";function nD(J){return cD("sha1").update(J).digest("hex").slice(0,8)}function rq(J,Y,Z,f){if(Buffer.byteLength(J,"utf8")<=_q)return J;let G=nD(Y),X=f===void 0?"":`-${f}`,Q=EZ(dD(),`kobe-${G}-${Z}${X}.sock`);if(Buffer.byteLength(Q,"utf8")<=_q)return Q;throw Error(`kobe socket path exceeds ${_q} bytes even after fallback: ${Q}`)}function QY(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 rq(EZ(Z,".kobe","daemon.sock"),Z,"daemon");let f=process.env.XDG_RUNTIME_DIR;if(f&&f.length>0)return rq(EZ(f,"kobe.sock"),f,"daemon");let G=tX();return rq(EZ(G,".kobe","daemon.sock"),G,"daemon")}function kY(J=process.env.KOBE_HOME_DIR??tX()){let Y=process.env.KOBE_DAEMON_PID_PATH;if(Y&&Y.length>0)return Y;return EZ(J,".kobe","daemon.pid")}function eX(J=process.env.KOBE_HOME_DIR??tX()){return EZ(J,".kobe","daemon.log")}function EW(J=process.env.KOBE_HOME_DIR??tX()){return EZ(J,".kobe","client.log")}var _q=100;var Of=()=>{};import{appendFile as uW,mkdir as iD}from"fs/promises";import{dirname as lD}from"path";function Jz(J){hW=J}function $D(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 PW(J,Y,Z=new Date){return`[${Z.toISOString()}] client ${hW} [${J}] pid=${process.pid}: ${Y}
17
- `}function aD(){if(xW)return;xW=!0;try{process.stderr.write(`[kobe] client log write failed; continuing without it
18
- `)}catch{}}function vW(J){let Y=EW();wW=wW.then(async()=>{try{await uW(Y,J)}catch(Z){if(Z?.code==="ENOENT")await iD(lD(Y),{recursive:!0}),await uW(Y,J);else throw Z}}).catch(()=>aD())}function IY(J,Y){vW(PW(J,Y))}function sY(J,Y){let Z=$D(Y);vW(PW(J,Z.stack??Z.message))}var hW="client",xW=!1,wW;var uZ=y(()=>{Of();wW=Promise.resolve()});import{connect as pD}from"net";import{StringDecoder as _D}from"string_decoder";class EJ{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++),G=new Promise((X,Q)=>{this.pending.set(f,{resolve:(q)=>X(q),reject:Q})});return Z.write(yG({type:"request",id:f,name:J,payload:Y})),G}openSocket(){return new Promise((J,Y)=>{let Z=pD(this.socketPath);this.socket=Z;let f=()=>{Z.off("error",G),J()},G=(Q)=>{if(Z.off("connect",f),this.socket===Z)this.socket=null;Y(Q)};Z.once("connect",f),Z.once("error",G);let X=new _D("utf8");this.buffer="",Z.on("data",(Q)=>this.onData(X.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 $W(J){return typeof J==="string"&&tL.includes(J)}var gG=(J)=>J,T1="claude",tL;var xJ=S(()=>{tL=["backlog","in_progress","in_review","done","canceled","error"]});function eL(J,Y){let Z="",X=J;for(let G=Y-1;G>=0;G--){let f=X%32;Z="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[f]+Z,X=(X-f)/32}return Z}function _W(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 JD(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 YD(J){let Y="";for(let Z of J)Y+="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Z]??"0";return Y}function rW(J=Date.now()){let Y;if(J===aW){let Z=pW.slice();if(!JD(Z))Y=_W(16);else Y=Z}else Y=_W(16);return aW=J,pW=Y,eL(J,10)+YD(Y)}var aW=-1,pW;var oW=S(()=>{pW=Array(16).fill(0)});var eW={};j1(eW,{TaskIndexStore:()=>OX});import{mkdir as ZD,open as XD,readFile as GD,rename as fD,unlink as sW}from"fs/promises";import{homedir as zD}from"os";import{dirname as QD,join as tW}from"path";class OX{homeDir;kobeDir;path;tmpPath;cache={version:eY,tasks:[]};loaded=!1;listeners=new Set;saveChain=Promise.resolve();constructor(J={}){this.homeDir=J.homeDir??zD(),this.kobeDir=tW(this.homeDir,".kobe"),this.path=tW(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 GD(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=qD(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 ZD(QD(this.path),{recursive:!0});let J=this.snapshot(),Y=`${JSON.stringify(J,null,2)}
14
+ `,Z=await XD(this.tmpPath,"w",420);try{await Z.writeFile(Y,"utf8"),await Z.sync()}finally{await Z.close()}await fD(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??T1,...J,id:gG(rW()),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:f,...Q}=Y,q={...X,...Q,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),f=G.indexOf(String(J));if(f<0)throw Error(`task not movable in current group: ${J}`);let Q=G[f+Y];if(!Q)return X;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 X;let[H]=this.cache.tasks.splice(q,1);if(!H)return X;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((G)=>{let f=this.cache.tasks.findIndex((q)=>q.id===G.id);if(!(f>=0?this.cache.tasks[f]:void 0))throw Error(`task not found: ${G.id}`);return{idx:f,position:G.position}}),Z=!1,X=new Map;for(let{idx:G,position:f}of Y){let Q=this.cache.tasks[G];if(!Q||Q.position===f)continue;if(!X.has(G))X.set(G,Q);this.cache.tasks[G]={...Q,position:f},Z=!0}if(!Z)return;try{await this.save()}catch(G){for(let[f,Q]of X)this.cache.tasks[f]=Q;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 sW(this.path)}catch(J){if(J.code!=="ENOENT")throw J}try{await sW(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 qD(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,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:eY,tasks:[]};let G=Array.isArray(Z.tasks)?Z.tasks:[],f=[];for(let Q of G){let q=BD(Q);if(q)f.push(q);else console.warn(`[kobe] dropping malformed task entry from ${Y}: ${JSON.stringify(Q)}`)}return{version:eY,tasks:f}}function BD(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(!UD(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:gG(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:KD(Y.vendor)?Y.vendor:T1,prStatus:HD(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 HD(J){if(!J||typeof J!=="object"||Array.isArray(J))return;let Y=J;if(!jD(Y.provider)||!WD(Y.lifecycle)||!VD(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 jD(J){return J==="github"||J==="gitlab"||J==="bitbucket"||J==="unknown"}function WD(J){return J==="creating"||J==="open"||J==="ready_to_merge"||J==="merged"||J==="closed"||J==="unknown"}function VD(J){return J==="none"||J==="pending"||J==="passing"||J==="failing"||J==="unknown"}function KD(J){return J==="claude"||J==="codex"}function UD(J){return J==="backlog"||J==="in_progress"||J==="in_review"||J==="done"||J==="canceled"||J==="error"}var eY=3;var mf=S(()=>{xJ();oW()});function J9(J){let Y=J.auth,Z=Y.kind==="key"?{kind:"key",keyPath:Y.keyPath}:{kind:"password",getPassword:()=>Pf(Y.keychainRef)};return{host:J.host,user:J.user,port:J.port,auth:Z,controlPath:Ef(J.host,J.user,J.port)}}function AX(J){let Y=bY(J);if(!Y)return new hf;return new DX(J9(Y))}function TY(J){for(let Y of Object.values(Pq()))if(J===Y.basePath||J.startsWith(`${Y.basePath}/`))return new DX(J9(Y));return new hf}function Y9(J){return J&&uJ(J)?J:void 0}function cf(J){let Y=TY(J);return Y.isRemote||Y.existsSync(J)}function k1(J){return TY(J).isRemote?qY():J}var $J=S(()=>{c1();A1();Iq();Tq()});var df;var Z9=S(()=>{df=class df 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 LD}from"crypto";import G9 from"fs";import RJ from"path";function f9(J){if(!RJ.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return RJ.join(r1(),DD,RD(J))}function z9(J){if(!RJ.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[f9(J),...OD.map((Y)=>RJ.join(J,Y))]}function Q9(J,Y){if(!Y||/[/\\\0]/.test(Y))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(Y)}`);return RJ.join(f9(J),Y)}async function q9(J){if(uJ(J)){let Z=bY(J)?.basePath;if(!Z)return[];return AX(J).readdir(H9(Z))}let Y=new Set;for(let Z of z9(J))try{for(let X of G9.readdirSync(Z,{withFileTypes:!0}))if(X.isDirectory())Y.add(X.name)}catch{}return[...Y]}function mq(J,Y){if(!RJ.isAbsolute(J)||!RJ.isAbsolute(Y))return null;let Z=X9(Y);for(let X of z9(J)){let G=X9(X),f=RJ.relative(G,Z);if(f!==""&&!f.startsWith("..")&&!RJ.isAbsolute(f))return X}return null}function B9(J,Y){return mq(J,Y)!==null}function H9(J){return`${AD(J)}/.kobe/worktrees`}function j9(J,Y){if(!Y||/[/\\\0]/.test(Y))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(Y)}`);return`${H9(J)}/${Y}`}function AD(J){return J.length>1&&J.endsWith("/")?J.replace(/\/+$/,""):J}function X9(J){try{return G9.realpathSync(J)}catch{return RJ.resolve(J)}}function RD(J){let Z=(RJ.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",X=LD("sha1").update(RJ.resolve(J)).digest("hex").slice(0,12);return`${Z}-${X}`}var DD="worktrees",MD=".kobe/worktrees",FD=".claude/worktrees",OD;var cq=S(()=>{c1();$J();A1();OD=[MD,FD]});var K9={};j1(K9,{GitWorktreeManager:()=>nf});import V9 from"fs";import aJ from"path";class nf{execDeps;constructor(J=gD){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 df(Y,Z.cwd,G);return G}async create(J,Y,Z,X){let G=this.ctxFor(J);if(JZ("repo",G.dir),JZ("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(aJ.dirname(Z));let Q=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,Q,{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?j9(Y,J.slug):Q9(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),X=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 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 f=X?["worktree","remove","--force",J]:["worktree","remove",J];await this.runGit(Z,f,{cwd:G}),await this.runGit(Z,["worktree","prune"],{cwd:G,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}),X=dq(Z.stdout),G=[];for(let f of X){if(!f.path)continue;let Q=Y.remote?W9(Y.dir,f.path):mq(J,f.path);if(!Q)continue;if(!f.branch||f.detached)continue;let q=CG(Q),B=CG(f.path),H=aJ.relative(q,B),K=aJ.join(Q,H),j=await this.isDirty(f.path);G.push({path:K,branch:f.branch,head:f.head??"",dirty:j})}return G}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}),X=dq(Z.stdout),G=Y.remote?Y.dir:CG(Y.dir),f=[];for(let Q of X){if(!Q.path)continue;if(Q.bare)continue;if(!Q.branch||Q.detached)continue;if((Y.remote?Q.path:CG(Q.path))===G)continue;let q=await this.isDirty(Q.path);f.push({path:Q.path,branch:Q.branch,head:Q.head??"",dirty:q,kobeManaged:Y.remote?W9(Y.dir,Q.path)!==null:B9(J,Q.path),lastActivityMs:await this.lastActivityMs(Y.exec,Q.path)})}return f.sort((Q,q)=>q.lastActivityMs-Q.lastActivityMs),f}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 V9.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),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(JZ("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=dq(Z.stdout),G=(q)=>J.remote?q:CG(q),f=G(Y),Q=X.find((q)=>q.path&&G(q.path)===f);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 X=Z.stdout.trim();if(!X)return null;let G=aJ.isAbsolute(X)?X:aJ.resolve(Y,X);return aJ.basename(G)===".git"?aJ.dirname(G):G}catch(Z){if(Z instanceof df)return null;throw Z}}}function dq(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 f=G.slice(7);Z.branch=f.startsWith("refs/heads/")?f.slice(11):f}else if(G==="detached")Z.detached=!0;else if(G==="bare")Z.bare=!0}if(Z)Y.push(Z);return Y}function W9(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 CG(J){try{return V9.realpathSync(J)}catch{return aJ.resolve(J)}}var gD;var nq=S(()=>{$J();A1();Z9();cq();gD={execForRepo:AX,execForPath:TY,remoteBasePath(J){return bY(J)?.basePath??null}}});function U9(J){let Y=String(J),Z=Y.length-1;return E1.context.id+(Z?String.fromCharCode(96+Z):"")+Y}function $q(J){E1.context=J}function CD(){return{...E1.context,id:E1.getNextContextId(),count:0}}function xZ(J,Y){let Z=W1,X=i0,G=J.length===0,f=Y===void 0?X:Y,Q=G?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:f?f.context:null,owner:f},q=G?()=>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=X}}function p(J,Y){Y=Y?Object.assign({},af,Y):af;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(C9(Z),_J.afterCreateSignal)_J.afterCreateSignal(Z)}let X=(G)=>{if(typeof G==="function")if(j0&&j0.running&&j0.sources.has(Z))G=G(Z.tValue);else G=G(Z.value);return pq(Z,G)};return[S9.bind(Z),X]}function D9(J,Y,Z){let X=IG(J,Y,!0,gJ,Z);if(gX&&j0&&j0.running)P1.push(X);else wZ(X)}function BY(J,Y,Z){let X=IG(J,Y,!1,gJ,Z);if(gX&&j0&&j0.running)P1.push(X);else wZ(X)}function p0(J,Y,Z){g9=hD;let X=IG(J,Y,!1,gJ,Z),G=yG&&CJ(yG);if(G)X.suspense=G;if(!Z||!Z.render)X.user=!0;JJ?JJ.push(X):wZ(X)}function V0(J,Y,Z){Z=Z?Object.assign({},af,Z):af;let X=IG(J,Y,!0,0,Z);if(X.observers=null,X.observerSlots=null,X.comparator=Z.equals||void 0,gX&&j0&&j0.running)X.tState=gJ,P1.push(X);else wZ(X);return S9.bind(X)}function bD(J){return J&&typeof J==="object"&&"then"in J}function of(J,Y,Z){let X,G,f;if(typeof Y==="function")X=J,G=Y,f=Z||{};else X=!0,G=J,f=Y||{};let Q=null,q=iq,B=null,H=!1,K=!1,j="initialValue"in f,U=typeof X==="function"&&V0(X),L=new Set,[M,D]=(f.storage||p)(f.initialValue),[O,A]=p(void 0),[l,R]=p(void 0,{equals:!1}),[C,g]=p(j?"ready":"unresolved");if(E1.context){if(B=E1.getNextContextId(),f.ssrLoadFrom==="initial")q=f.initialValue;else if(E1.load&&E1.has(B))q=E1.load(B)}function y(u,B0,Y0,W0){if(Q===u){if(Q=null,W0!==void 0&&(j=!0),(u===q||B0===q)&&f.onHydrated)queueMicrotask(()=>f.onHydrated(W0,{value:B0}));if(q=iq,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 f0(){let u=yG&&CJ(yG),B0=M(),Y0=O();if(Y0!==void 0&&!Q)throw Y0;if(W1&&!W1.user&&u)D9(()=>{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():X;if(H=j0&&j0.running,B0==null||B0===!1){y(Q,n1(M));return}if(j0&&Q)j0.promises.delete(Q);let Y0,W0=q!==iq?q:n1(()=>{try{return G(B0,{value:M(),refetching:u})}catch(o){Y0=o}});if(Y0!==void 0){y(Q,void 0,$f(Y0),B0);return}else if(!bD(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,$f(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,$f(o),B0))}Object.defineProperties(f0,{state:{get:()=>C()},error:{get:()=>O()},loading:{get(){let u=C();return u==="pending"||u==="refreshing"}},latest:{get(){if(!j)return f0();let u=O();if(u&&!Q)throw u;return M()}}});let Z0=i0;if(U)D9(()=>(Z0=i0,t(!1)));else t(!1);return[f0,{refetch:(u)=>TD(Z0,()=>t(u)),mutate:D}]}function sf(J){return jJ(J,!1)}function n1(J){if(!RX&&W1===null)return J();let Y=W1;W1=null;try{if(RX)return RX.untrack(J);return J()}finally{W1=Y}}function WJ(J,Y,Z){let X=Array.isArray(J),G,f=Z&&Z.defer;return(Q)=>{let q;if(X){q=Array(J.length);for(let H=0;H<J.length;H++)q[H]=J[H]()}else q=J();if(f)return f=!1,Q;let B=n1(()=>Y(q,G,Q));return G=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 tf(){return W1}function TD(J,Y){let Z=i0,X=W1;i0=J,W1=null;try{return jJ(Y,!0)}catch(G){ef(G)}finally{i0=Z,W1=X}}function ED(J){if(j0&&j0.running)return J(),j0.done;let Y=W1,Z=i0;return Promise.resolve().then(()=>{W1=Y,i0=Z;let X;if(gX||yG)X=j0||(j0={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 jJ(J,!1),W1=i0=null,X?X.done:void 0})}function F9(J,Y){let Z=IG(()=>n1(()=>{return Object.assign(J,{[ID]:!0}),J(Y)}),void 0,!0,0);return Z.props=Y,Z.observers=null,Z.observerSlots=null,Z.name=J.name,Z.component=J,wZ(Z),Z.tValue!==void 0?Z.tValue:Z.value}function C9(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:PD(Z,Y),defaultValue:J}}function CJ(J){let Y;return i0&&i0.context&&(Y=i0.context[J.id])!==void 0?Y:J.defaultValue}function uD(J){let Y=V0(J),Z=V0(()=>aq(Y()),void 0,{name:"children"});return Z.toArray=()=>{let X=Z();return Array.isArray(X)?X:X!=null?[X]:[]},Z}function S9(){let J=j0&&j0.running;if(this.sources&&(J?this.tState:this.state))if((J?this.tState:this.state)===gJ)wZ(this);else{let Y=P1;P1=null,jJ(()=>pf(this),!1),P1=Y}if(W1){let Y=this.observers?this.observers.length:0;if(!W1.sources)W1.sources=[this],W1.sourceSlots=[Y];else W1.sources.push(this),W1.sourceSlots.push(Y);if(!this.observers)this.observers=[W1],this.observerSlots=[W1.sources.length-1];else this.observers.push(W1),this.observerSlots.push(W1.sources.length-1)}if(J&&j0.sources.has(this))return this.tValue;return this.value}function pq(J,Y,Z){let X=j0&&j0.running&&j0.sources.has(J)?J.tValue:J.value;if(!J.comparator||!J.comparator(X,Y)){if(j0){let G=j0.running;if(G||!Z&&j0.sources.has(J))j0.sources.add(J),J.tValue=Y;if(!G)J.value=Y}else J.value=Y;if(J.observers&&J.observers.length)jJ(()=>{for(let G=0;G<J.observers.length;G+=1){let f=J.observers[G],Q=j0&&j0.running;if(Q&&j0.disposed.has(f))continue;if(Q?!f.tState:!f.state){if(f.pure)P1.push(f);else JJ.push(f);if(f.observers)k9(f)}if(!Q)f.state=gJ;else f.tState=gJ}if(P1.length>1e6){if(P1=[],SD)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return Y}function wZ(J){if(!J.fn)return;YZ(J);let Y=rf;if(O9(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,O9(J,J.tValue,Y),W1=i0=null},!1)})}function O9(J,Y,Z){let X,G=i0,f=W1;W1=i0=J;try{X=J.fn(Y)}catch(Q){if(J.pure)if(j0&&j0.running)J.tState=gJ,J.tOwned&&J.tOwned.forEach(YZ),J.tOwned=void 0;else J.state=gJ,J.owned&&J.owned.forEach(YZ),J.owned=null;return J.updatedAt=Z+1,ef(Q)}finally{W1=f,i0=G}if(!J.updatedAt||J.updatedAt<=Z){if(J.updatedAt!=null&&"observers"in J)pq(J,X,!0);else if(j0&&j0.running&&J.pure){if(!j0.sources.has(J))J.value=X;j0.sources.add(J),J.tValue=X}else J.value=X;J.updatedAt=Z}}function IG(J,Y,Z,X=gJ,G){let f={fn:J,state:X,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)f.state=0,f.tState=X;if(i0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if(i0!==ND)if(j0&&j0.running&&i0.pure)if(!i0.tOwned)i0.tOwned=[f];else i0.tOwned.push(f);else if(!i0.owned)i0.owned=[f];else i0.owned.push(f);if(G&&G.name)f.name=G.name;if(RX&&f.fn){let Q=f.fn,[q,B]=p(void 0,{equals:!1}),H=RX.factory(Q,B);i1(()=>H.dispose());let K,j=()=>ED(B).then(()=>{if(K)K.dispose(),K=void 0});f.fn=(U)=>{if(q(),j0&&j0.running){if(!K)K=RX.factory(Q,j);return K.track(U)}return H.track(U)}}return _J.afterCreateOwner&&_J.afterCreateOwner(f),f}function kG(J){let Y=j0&&j0.running;if((Y?J.tState:J.state)===0)return;if((Y?J.tState:J.state)===SG)return pf(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<rf)){if(Y&&j0.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,f=Z[X+1];while((G=G.owner)&&G!==f)if(j0.disposed.has(G))return}if((Y?J.tState:J.state)===gJ)wZ(J);else if((Y?J.tState:J.state)===SG){let G=P1;P1=null,jJ(()=>pf(J,Z[0]),!1),P1=G}}}function jJ(J,Y){if(P1)return J();let Z=!1;if(!Y)P1=[];if(JJ)Z=!0;else JJ=[];rf++;try{let X=J();return xD(Z),X}catch(X){if(!Z)JJ=null;P1=null,ef(X)}}function xD(J){if(P1){if(gX&&j0&&j0.running)wD(P1);else y9(P1);P1=null}if(J)return;let Y;if(j0){if(!j0.promises.size&&!j0.queue.size){let{sources:X,disposed:G}=j0;JJ.push.apply(JJ,j0.effects),Y=j0.resolve;for(let f of JJ)"tState"in f&&(f.state=f.tState),delete f.tState;j0=null,jJ(()=>{for(let f of G)YZ(f);for(let f of X){if(f.value=f.tValue,f.owned)for(let Q=0,q=f.owned.length;Q<q;Q++)YZ(f.owned[Q]);if(f.tOwned)f.owned=f.tOwned;delete f.tValue,delete f.tOwned,f.tState=0}M9(!1)},!1)}else if(j0.running){j0.running=!1,j0.effects.push.apply(j0.effects,JJ),JJ=null,M9(!0);return}}let Z=JJ;if(JJ=null,Z.length)jJ(()=>g9(Z),!1);else _J.afterUpdate&&_J.afterUpdate();if(Y)Y()}function y9(J){for(let Y=0;Y<J.length;Y++)kG(J[Y])}function wD(J){for(let Y=0;Y<J.length;Y++){let Z=J[Y],X=j0.queue;if(!X.has(Z))X.add(Z),gX(()=>{X.delete(Z),jJ(()=>{j0.running=!0,kG(Z)},!1),j0&&(j0.running=!1)})}}function hD(J){let Y,Z=0;for(Y=0;Y<J.length;Y++){let X=J[Y];if(!X.user)kG(X);else J[Z++]=X}if(E1.context){if(E1.count){E1.effects||(E1.effects=[]),E1.effects.push(...J.slice(0,Z));return}$q()}if(E1.effects&&(E1.done||!E1.count))J=[...E1.effects,...J],Z+=E1.effects.length,delete E1.effects;for(Y=0;Y<Z;Y++)kG(J[Y])}function pf(J,Y){let Z=j0&&j0.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 f=Z?G.tState:G.state;if(f===gJ){if(G!==Y&&(!G.updatedAt||G.updatedAt<rf))kG(G)}else if(f===SG)pf(G,Y)}}}function k9(J){let Y=j0&&j0.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=SG;else X.state=SG;if(X.pure)P1.push(X);else JJ.push(X);X.observers&&k9(X)}}}function YZ(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 f=G.pop(),Q=Z.observerSlots.pop();if(X<G.length)f.sourceSlots[Q]=X,G[X]=f,Z.observerSlots[X]=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)I9(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 I9(J,Y){if(!Y)J.tState=0,j0.disposed.add(J);if(J.owned)for(let Z=0;Z<J.owned.length;Z++)I9(J.owned[Z])}function $f(J){if(J instanceof Error)return J;return Error(typeof J==="string"?J:"Unknown error",{cause:J})}function A9(J,Y,Z){try{for(let X of Y)X(J)}catch(X){ef(X,Z&&Z.owner||null)}}function ef(J,Y=i0){let Z=L9&&Y&&Y.context&&Y.context[L9],X=$f(J);if(!Z)throw X;if(JJ)JJ.push({fn(){A9(X,Z,Y)},state:gJ});else A9(X,Z,Y)}function aq(J){if(typeof J==="function"&&!J.length)return aq(J());if(Array.isArray(J)){let Y=[];for(let Z=0;Z<J.length;Z++){let X=aq(J[Z]);Array.isArray(X)?Y.push.apply(Y,X):Y.push(X)}return Y}return J}function PD(J,Y){return function(X){let G;return BY(()=>G=n1(()=>{return i0.context={...i0.context,[J]:X.value},uD(()=>X.children)}),void 0,Y),G}}function R9(J){for(let Y=0;Y<J.length;Y++)J[Y]()}function mD(J,Y,Z={}){let X=[],G=[],f=[],Q=0,q=Y.length>1?[]:null;return i1(()=>R9(f)),()=>{let B=J()||[],H=B.length,K,j;return B[_f],n1(()=>{let L,M,D,O,A,l,R,C,g;if(H===0){if(Q!==0)R9(f),f=[],X=[],G=[],Q=0,q&&(q=[]);if(Z.fallback)X=[vD],G[0]=xZ((y)=>{return f[0]=y,Z.fallback()}),Q=1}else if(Q===0){G=Array(H);for(j=0;j<H;j++)X[j]=B[j],G[j]=xZ(U);Q=H}else{D=Array(H),O=Array(H),q&&(A=Array(H));for(l=0,R=Math.min(Q,H);l<R&&X[l]===B[l];l++);for(R=Q-1,C=H-1;R>=l&&C>=l&&X[R]===B[C];R--,C--)D[C]=G[R],O[C]=f[R],q&&(A[C]=q[R]);L=new Map,M=Array(C+1);for(j=C;j>=l;j--)g=B[j],K=L.get(g),M[j]=K===void 0?-1:K,L.set(g,j);for(K=l;K<=R;K++)if(g=X[K],j=L.get(g),j!==void 0&&j!==-1)D[j]=G[K],O[j]=f[K],q&&(A[j]=q[K]),j=M[j],L.set(g,j);else f[K]();for(j=l;j<H;j++)if(j in D){if(G[j]=D[j],f[j]=O[j],q)q[j]=A[j],q[j](j)}else G[j]=xZ(U);G=G.slice(0,Q=H),X=B.slice(0)}return G});function U(L){if(f[j]=L,q){let[M,D]=p(j,{name:"index"});return q[j]=D,Y(B[j],M)}return Y(B[j])}}}function N9(J,Y){if(cD){if(E1.context){let Z=E1.context;$q(CD());let X=F9(J,Y||{});return $q(Z),X}}return F9(J,Y||{})}function lf(){return!0}function lq(J){return!(J=typeof J==="function"?J():J)?{}:J}function nD(){for(let J=0,Y=this.length;J<Y;++J){let Z=this[J]();if(Z!==void 0)return Z}}function Jz(...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(kD&&Y)return new Proxy({get(Q){for(let q=J.length-1;q>=0;q--){let B=lq(J[q])[Q];if(B!==void 0)return B}},has(Q){for(let q=J.length-1;q>=0;q--)if(Q in lq(J[q]))return!0;return!1},keys(){let Q=[];for(let q=0;q<J.length;q++)Q.push(...Object.keys(lq(J[q])));return[...new Set(Q)]}},dD);let Z={},X=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(!X[K])X[K]=j.get?{enumerable:!0,configurable:!0,get:nD.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 G={},f=Object.keys(X);for(let Q=f.length-1;Q>=0;Q--){let q=f[Q],B=X[q];if(B&&B.get)Object.defineProperty(G,q,B);else G[q]=B?B.value:void 0}return G}function Y1(J){let Y="fallback"in J&&{fallback:()=>J.fallback};return V0(mD(()=>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"}),X=Y?Z:V0(Z,void 0,{equals:(G,f)=>!G===!f,name:"condition"});return V0(()=>{let G=X();if(G){let f=J.children;return typeof f==="function"&&f.length>0?n1(()=>f(Y?G:()=>{if(!n1(X))throw iD("Show");return Z()})):f}return J.fallback},void 0,{name:"value"})}var E1,SD=!0,yD=(J,Y)=>J===Y,pJ,kD,_f,ID,af,L9=null,g9,gJ=1,SG=2,ND,iq,i0=null,j0=null,gX=null,RX=null,W1=null,P1=null,JJ=null,rf=0,_J,zN,M9,yG,vD,cD=!1,dD,iD=(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.`,b9;var Q1=S(()=>{E1={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return U9(this.context.count)},getNextContextId(){return U9(this.context.count++)}};pJ=Symbol("solid-proxy"),kD=typeof Proxy==="function",_f=Symbol("solid-track"),ID=Symbol("solid-dev-component"),af={equals:yD},g9=y9,ND={},iq={},_J={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[zN,M9]=p(!1);vD=Symbol("fallback");dD={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:lf,deleteProperty:lf,getOwnPropertyDescriptor(J,Y){return{configurable:!0,enumerable:!0,get(){return J.get(Y)},set:lf,deleteProperty:lf}},ownKeys(J){return J.keys()}};b9={hooks:_J,writeSignal:pq,registerGraph:C9};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 _q,rq,oq,sq="DIRTY_WORKTREE",tq,eq;var JB=S(()=>{_q=class _q 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"}};rq=class rq extends Error{constructor(J){super(`task not found: ${J}`);this.name="TaskNotFoundError"}};oq=class oq extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};tq=class tq extends Error{taskId;constructor(J){super(`${sq}: task ${J} worktree has uncommitted or untracked changes`);this.taskId=J;this.name="DirtyWorktreeError"}};eq=class eq 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 T9(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 Yz(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 E9;var u9=S(()=>{E9=["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 YB{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??E9,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 f=`${X}-v${G}`;if(!Y.has(f))return this.addPending(J,f),f}}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 q9(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 x9=S(()=>{u9();cq()});var P9={};j1(P9,{PLACEHOLDER_TASK_TITLE:()=>jY,Orchestrator:()=>Zz});import{realpathSync as lD}from"fs";import{basename as $D,resolve as aD}from"path";function w9(J){return bY(J)?.basePath??J}class Zz{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 YB((f)=>this.store.list().filter((Q)=>Q.repo===f&&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=(f)=>Z(()=>f);let[X,G]=p(null);this.activeTaskAcc=X,this.setActiveTaskSig=(f)=>G(()=>f),this.unsubscribeStore=this.store.subscribe((f)=>{this.setTasks(f.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??T1,...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}=h9(J),X=this.store.list().find((Q)=>Q.kind==="main"&&h9(Q.repo).key===Z);if(X)return X;let G=this.mainTaskLocks.get(Z);if(G)return G;let f=(async()=>{return await this.store.create({repo:Y,title:pD(Y),branch:"",worktreePath:w9(Y),status:"backlog",kind:"main",vendor:T1})})();this.mainTaskLocks.set(Z,f);try{return await f}finally{this.mainTaskLocks.delete(Z)}}async ensureWorktree(J){let Y=this.requireTask(J);if(Y.kind==="main")return w9(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 f=await this.slugs.allocate(Y.repo);try{let Q=Y.branch||Yz(Y.title,Y.id),q=this.pendingBaseRefs.get(Y.id),B=await this.worktrees.createForTask({repo:Y.repo,slug:f,branch:Q,baseRef:q});this.slugs.commit(Y.repo,f),this.pendingBaseRefs.delete(Y.id),await this.store.update(Y.id,{worktreePath:B.path,branch:Q})}catch(Q){throw this.slugs.cancel(Y.repo,f),Q}})();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!==Yz(jY,J.id))return;let Z=Yz(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 _q(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 oq;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 tq(Z.id)}try{await this.worktrees.remove(Z.worktreePath,{force:X})}catch(G){throw new eq(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)=>CX(X.worktreePath)));return Y.filter((X)=>!Z.has(CX(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=CX(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&&CX(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)=>CX(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 f=J.branch?.trim()||G.branch,Q=(J.title??$D(G.path)).trim()||jY;return this.store.create({repo:J.repo,title:Q,branch:f,worktreePath:G.path,status:"backlog",kind:"task",vendor:J.vendor??T1})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(J){let Y=this.store.get(J);if(!Y)throw new rq(String(J));return Y}}function pD(J){let Y=J.split(/[/\\]/).filter(Boolean);return Y.length>0?Y[Y.length-1]??J:J}function h9(J){let Y=IY(J);return{repo:Y,key:uJ(Y)?Y:CX(Y)}}function CX(J){try{return lD(J)}catch{return aD(J)}}var jY="(new task)";var NG=S(()=>{Q1();A1();xJ();JB();x9()});function Xz(J){return J.remoteVersion>=J.localMin&&J.localVersion>=J.remoteMin}function v9(J,Y){if(!J)return!1;return J!==Y}function rD(J){return typeof J==="string"&&_D.has(J)}function m9(J){if(!Array.isArray(J))return null;let Y=new Set;for(let Z of J)if(rD(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 bG(J){return`${JSON.stringify(J)}
16
+ `}var wJ=3,ZZ=2,ZB,_D;var hZ=S(()=>{ZB=["task.snapshot","issue.snapshot","active-task","update","engine-state","ui-prefs","keybindings","task.jobs","worktree.changes","session.deliver"],_D=new Set(ZB)});import{createHash as oD}from"crypto";import{homedir as Gz,tmpdir as sD}from"os";import{join as PZ}from"path";function tD(J){return oD("sha1").update(J).digest("hex").slice(0,8)}function GB(J,Y,Z,X){if(Buffer.byteLength(J,"utf8")<=XB)return J;let G=tD(Y),f=X===void 0?"":`-${X}`,Q=PZ(sD(),`kobe-${G}-${Z}${f}.sock`);if(Buffer.byteLength(Q,"utf8")<=XB)return Q;throw Error(`kobe socket path exceeds ${XB} 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 GB(PZ(Z,".kobe","daemon.sock"),Z,"daemon");let X=process.env.XDG_RUNTIME_DIR;if(X&&X.length>0)return GB(PZ(X,"kobe.sock"),X,"daemon");let G=Gz();return GB(PZ(G,".kobe","daemon.sock"),G,"daemon")}function EY(J=process.env.KOBE_HOME_DIR??Gz()){let Y=process.env.KOBE_DAEMON_PID_PATH;if(Y&&Y.length>0)return Y;return PZ(J,".kobe","daemon.pid")}function fz(J=process.env.KOBE_HOME_DIR??Gz()){return PZ(J,".kobe","daemon.log")}function c9(J=process.env.KOBE_HOME_DIR??Gz()){return PZ(J,".kobe","client.log")}var XB=100;var SX=()=>{};import{appendFile as d9,mkdir as eD}from"fs/promises";import{dirname as JM}from"path";function zz(J){l9=J}function YM(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 $9(J,Y,Z=new Date){return`[${Z.toISOString()}] client ${l9} [${J}] pid=${process.pid}: ${Y}
17
+ `}function ZM(){if(n9)return;n9=!0;try{process.stderr.write(`[kobe] client log write failed; continuing without it
18
+ `)}catch{}}function a9(J){let Y=c9();i9=i9.then(async()=>{try{await d9(Y,J)}catch(Z){if(Z?.code==="ENOENT")await eD(JM(Y),{recursive:!0}),await d9(Y,J);else throw Z}}).catch(()=>ZM())}function uY(J,Y){a9($9(J,Y))}function XZ(J,Y){let Z=YM(Y);a9($9(J,Z.stack??Z.message))}var l9="client",n9=!1,i9;var vZ=S(()=>{SX();i9=Promise.resolve()});import{connect as XM}from"net";import{StringDecoder as GM}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 X=String(this.nextId++),G=new Promise((f,Q)=>{this.pending.set(X,{resolve:(q)=>f(q),reject:Q})});return Z.write(bG({type:"request",id:X,name:J,payload:Y})),G}openSocket(){return new Promise((J,Y)=>{let Z=XM(this.socketPath);this.socket=Z;let X=()=>{Z.off("error",G),J()},G=(Q)=>{if(Z.off("connect",X),this.socket===Z)this.socket=null;Y(Q)};Z.once("connect",X),Z.once("error",G);let f=new GM("utf8");this.buffer="",Z.on("data",(Q)=>this.onData(f.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(`
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){sY("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 kG=y(()=>{TZ();uZ()});function Yz(J){return rD.includes(J)}function mW(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 rD;var Zz=y(()=>{rD=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function oD(){let J=process.env.KOBE_ENGINE_STATE_TTL_MS;if(J===void 0)return cW;let Y=Number(J);return Number.isFinite(Y)&&Y>0?Y:cW}class oq{bus;staleMs;now;activity=new Map;constructor(J,Y=oD(),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 G=mW(f?.state,Y,Z),X=this.now(),Q={state:G,detail:Z,at:X};if(G!=="idle"&&G!=="turn_complete")Q.lapse=setTimeout(()=>{let q=this.activity.get(J);if(q&&q.at===X)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 cW=600000;var dW=y(()=>{Zz()});import{spawnSync as sD}from"child_process";import{existsSync as tD,statSync as eD}from"fs";import{homedir as JM}from"os";import IG from"path";async function nW(J=YM){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 G=J.home(),X=Z(IG.join(G,".claude","local","claude"));if(X)return X;let Q=J.env("NVM_BIN");if(Q){let H=Z(IG.join(Q,"claude"));if(H)return H}let q=IG.join(G,".nvm","versions","node"),B=J.readdir(q).sort().reverse();for(let H of B){let K=Z(IG.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(IG.join(G,H));if(K)return K}throw new fz(Y)}var fz,YM;var iW=y(()=>{fz=class fz 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}};YM={fileExists(J){try{return eD(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return JM()},which(J){let Y=process.platform==="win32"?"where":"which",Z=sD(Y,[J],{encoding:"utf8"});if(Z.status!==0)return;let f=Z.stdout.split(`
21
- `).map((G)=>G.trim()).filter(Boolean)[0];if(!f)return;if(f.startsWith("claude:")&&f.includes("aliased to")){let G=f.split("aliased to")[1]?.trim();return G&&tD(G)?G:void 0}return f},readdir(J){try{return CX("fs").readdirSync(J)}catch{return[]}}}});import{spawnSync as ZM}from"child_process";import{existsSync as fM,statSync as GM}from"fs";import{homedir as XM}from"os";import lW from"path";async function $W(J=zM){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 G=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 X=J.env("NVM_BIN");if(X){let Q=Z(lW.join(X,"codex"));if(Q)return Q}for(let Q of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let q=Z(lW.join(G,Q));if(q)return q}throw new Gz(Y)}var Gz,zM;var aW=y(()=>{Gz=class Gz 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}};zM={fileExists(J){try{return GM(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return XM()},which(J){let Y=process.platform==="win32"?"where":"which",Z=ZM(Y,[J],{encoding:"utf8"});if(Z.status!==0)return;let f=Z.stdout.split(`
22
- `).map((G)=>G.trim()).filter(Boolean)[0];if(!f)return;if(f.startsWith("codex:")&&f.includes("aliased to")){let G=f.split("aliased to")[1]?.trim();return G&&fM(G)?G:void 0}return f},readdir(J){try{return CX("fs").readdirSync(J)}catch{return[]}}}});import{spawnSync as QM}from"child_process";import{existsSync as qM,statSync as BM}from"fs";import{homedir as HM}from"os";import tY from"path";async function pW(J=jM){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 G=J.platform()==="win32"?["copilot.exe","copilot.cmd","copilot"]:["copilot"],X=(K)=>{if(!K)return;for(let j of G){let U=Z(tY.join(K,j));if(U)return U}return};for(let K of["/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin"]){let j=X(K);if(j)return j}let Q=J.env("NVM_BIN"),q=X(Q);if(q)return q;let B=J.home(),H=[tY.join(B,".npm-global/bin"),tY.join(B,".local/bin"),tY.join(B,".bun/bin"),tY.join(B,"bin")];if(J.platform()==="win32"){let K=J.env("APPDATA"),j=J.env("LOCALAPPDATA");if(H.unshift(tY.join(B,"AppData/Roaming/npm")),K)H.unshift(tY.join(K,"npm"));if(j)H.unshift(tY.join(j,"npm"))}for(let K of H){let j=X(K);if(j)return j}throw new Xz(Y)}var Xz,jM;var _W=y(()=>{Xz=class Xz 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}};jM={fileExists(J){try{return BM(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return HM()},which(J){let Y=process.platform==="win32"?"where":"which",Z=QM(Y,[J],{encoding:"utf8"});if(Z.status!==0)return;let f=Z.stdout.split(`
23
- `).map((G)=>G.trim()).filter(Boolean)[0];if(!f)return;if(f.startsWith("copilot:")&&f.includes("aliased to")){let G=f.split("aliased to")[1]?.trim();return G&&qM(G)?G:void 0}return f},platform(){return process.platform}}});import{readFileSync as WM,statSync as VM}from"fs";import{homedir as KM}from"os";import eY from"path";function UM(J,Y){let Z=J("CLAUDE_CONFIG_DIR")?.trim();if(Z)return eY.join(Z,".claude.json");return eY.join(Y,".claude.json")}function LM(J,Y){let f=J("CODEX_HOME")?.trim()??eY.join(Y,".codex");return eY.join(f,"auth.json")}function DM(J,Y){let f=J("COPILOT_HOME")?.trim()??eY.join(Y,".copilot");return eY.join(f,"config.json")}function MM(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,"/"),G=f+"=".repeat((4-f.length%4)%4);try{let X=Buffer.from(G,"base64").toString("utf8"),Q=JSON.parse(X);return typeof Q==="object"&&Q!==null?Q:null}catch{return null}}async function Qz(J){try{return{found:!0,path:await J()}}catch(Y){if(Y instanceof fz||Y instanceof Gz||Y instanceof Xz)return{found:!1,error:"not found on PATH"};return{found:!1,error:Y instanceof Error?Y.message:String(Y)}}}async function rW(J){return(await Promise.all([["claude",()=>J.findClaudeBinary()],["codex",()=>J.findCodexBinary()],["copilot",()=>J.findCopilotBinary()]].map(async([f,G])=>(await Qz(G)).found?f:null))).filter((f)=>f!==null)}function FM(J=Af){if(J!==Af)return rW(J);if(zz)return zz;let Y=rW(J).catch((Z)=>{throw zz=null,Z});return zz=Y,Y}async function bY(J=Af){return[...await FM(J),...gq()]}async function qz(J=Af){let Y=await Qz(()=>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 G;try{G=JSON.parse(f)}catch(B){return{binary:Y,account:{kind:"none"},accountError:`parse ${Z}: ${B instanceof Error?B.message:String(B)}`}}let X=G?.oauthAccount;if(!X||typeof X!=="object")return{binary:Y,account:{kind:"none"}};let Q=X,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 Bz(J=Af){let Y=await Qz(()=>J.findCodexBinary()),Z=LM(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 G;try{G=JSON.parse(f)}catch(H){return{binary:Y,account:{kind:"none"},accountError:`parse ${Z}: ${H instanceof Error?H.message:String(H)}`}}let X=G??{},Q=X.tokens,q=typeof Q?.id_token==="string"?Q.id_token:void 0;if(q){let H=MM(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=X.OPENAI_API_KEY;if(typeof B==="string"&&B.length>0)return{binary:Y,account:{kind:"apikey"}};return{binary:Y,account:{kind:"none"}}}async function Hz(J=Af){let Y=await Qz(()=>J.findCopilotBinary());for(let X of["COPILOT_GITHUB_TOKEN","GH_TOKEN","GITHUB_TOKEN"])if(J.env(X)?.trim())return{binary:Y,account:{kind:"token",source:X}};let Z=DM(J.env,J.home()),f;try{f=J.readFile(Z)}catch(X){return{binary:Y,account:{kind:"none"},accountError:`read ${Z}: ${X instanceof Error?X.message:String(X)}`}}if(f===null)return{binary:Y,account:{kind:"none"}};let G;try{G=JSON.parse(f)}catch(X){return{binary:Y,account:{kind:"none"},accountError:`parse ${Z}: ${X instanceof Error?X.message:String(X)}`}}if(!sq(G))return{binary:Y,account:{kind:"none"}};if(oW(G,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:Y,account:{kind:"oauth"}};return{binary:Y,account:{kind:"none"}}}function sq(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function oW(J,Y,Z=0){if(Z>4||!sq(J))return!1;for(let[f,G]of Object.entries(J)){if(Y.includes(f)&&typeof G==="string"&&G.length>0)return!0;if(sq(G)&&oW(G,Y,Z+1))return!0}return!1}var Af,zz=null;var xZ=y(()=>{D1();iW();aW();_W();Af={readFile(J){try{VM(J)}catch(Y){if(Y.code==="ENOENT")return null;throw Y}return WM(J,"utf8")},env(J){return process.env[J]},home(){return KM()},findClaudeBinary(){return nW()},findCodexBinary(){return $W()},findCopilotBinary(){return pW()}}});function sW(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 tW(J){return J.isMeta===!0||J.isCompactSummary===!0}function eW(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 ZN,mkdir as fN,readFile as OM,readdir as tq,stat as AM,unlink as GN,writeFile as XN}from"fs/promises";import{homedir as J8}from"os";import jz from"path";function gM(J){return J.replace(/[/.]/g,"-")}async function bG(J){if(!J)return[];let Y=jz.join(J8(),".claude","projects",gM(J)),Z;try{Z=await tq(Y)}catch{return[]}let f=[];for(let G of Z){if(!G.endsWith(".jsonl"))continue;let X=jz.join(Y,G),Q=0;try{Q=(await AM(X)).mtimeMs}catch{}f.push({sessionId:G.slice(0,-6),path:X,mtimeMs:Q})}return f.sort((G,X)=>X.mtimeMs-G.mtimeMs),f}async function Y8(J){return(await bG(J))[0]?.mtimeMs??0}async function Z8(J,Y=RM){let Z=Y.projectsDir(),f=await Y.readdir(Z);for(let G of f){let X=jz.join(Z,G,`${J}.jsonl`),Q;try{Q=await Y.readFile(X)}catch{continue}return CM(SM(Q,J))}return[]}function CM(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 SM(J,Y){let Z=[];for(let f of J.split(`
24
- `)){let G=f.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!eq(X))continue;let Q=yM(X,Y);if(Q)Z.push(Q)}return Z}function yM(J,Y){if(tW(J))return null;let Z=eq(J.message)?J.message:J,f=Z.role;if(f!=="user"&&f!=="assistant"&&f!=="system")return null;if(!("content"in Z))return null;let G=sW(Z.content);if(f==="user"&&eW(G))return null;let X=typeof J.timestamp==="string"?J.timestamp:new Date().toISOString(),Q=typeof J.sessionId==="string"?J.sessionId:Y,q=kM(Z.usage);return q?{role:f,blocks:G,timestamp:X,sessionId:Q,usage:q}:{role:f,blocks:G,timestamp:X,sessionId:Q}}function kM(J){if(!eq(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,G=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}:{},...G!==void 0?{cache_creation_input_tokens:G}:{}}}function eq(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var RM;var JB=y(()=>{RM={projectsDir(){return jz.join(J8(),".claude","projects")},async readdir(J){try{return await tq(J)}catch{return[]}},async readFile(J){return await OM(J,"utf8")},async pathExists(J){try{return await tq(J),!0}catch{return!1}}}});import{fileURLToPath as G8}from"url";function A1(){if(import.meta.url.endsWith(".js"))return["kobe"];let Y=G8(new URL("./index.ts",import.meta.url)),Z=G8(import.meta.resolve("@opentui/solid/preload"));return[process.execPath,"--preload",Z,"--conditions=browser",Y]}var NY=()=>{};function YB(J,Y={}){if(Y.bareSafe&&IM.test(J))return J;return`'${J.replace(/'/g,"'\\''")}'`}function Wz(J,Y={}){return J.map((Z)=>YB(Z,Y)).join(" ")}var IM;var ZB=y(()=>{IM=/^[A-Za-z0-9_/.:=-]+$/});function TG(J){return`kobe-hidden-${J.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function z8(J){let Y=Number.parseInt(J.replace(/^@/,""),10);return Number.isFinite(Y)&&Y>=0?1000+Y:1000}function PZ(J){if(!Number.isFinite(J))return wZ;return Math.max(bM,Math.min(NM,Math.round(J)))}function wY(J){if(!Number.isFinite(J))return null;return Math.max(TM,Math.min(EM,Math.round(J)))}function Y1(J){return YB(J)}function uJ(J){return Wz(J)}function HJ(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 fB(J){return`'${J.replace(/'/g,"'\\''")}'`}function Q8(){return`clear; printf ${fB("\\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 q8(J,Y){let Z=HJ(J),f=Y?.initScript?.trim();if(!f)return Z;let G=["{",f,"}"].join(`
25
- `);if(Y?.markerPath){let X=fB(Y.markerPath),Q=fB(uM(Y.markerPath));return[`if [ ! -f ${X} ]; then`,G,`if [ $? -eq 0 ]; then mkdir -p ${Q} && : > ${X}; fi`,"fi",Z].join(`
20
+ `)}}onLine(J){let Y;try{Y=JSON.parse(J)}catch(X){XZ("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 TG=S(()=>{hZ();vZ()});function Qz(J){return fM.includes(J)}function p9(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 fM;var qz=S(()=>{fM=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function zM(){let J=process.env.KOBE_ENGINE_STATE_TTL_MS;if(J===void 0)return _9;let Y=Number(J);return Number.isFinite(Y)&&Y>0?Y:_9}class fB{bus;staleMs;now;activity=new Map;constructor(J,Y=zM(),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=p9(X?.state,Y,Z),f=this.now(),Q={state:G,detail:Z,at:f};if(G!=="idle"&&G!=="turn_complete")Q.lapse=setTimeout(()=>{let q=this.activity.get(J);if(q&&q.at===f)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 _9=600000;var r9=S(()=>{qz()});import{spawnSync as QM}from"child_process";import{existsSync as qM,statSync as BM}from"fs";import{homedir as HM}from"os";import EG from"path";async function o9(J=jM){let Y=[],Z=(H)=>{if(!H)return;return Y.push(H),J.fileExists(H)?H:void 0},X=J.which("claude");if(X){if(Y.push(`which:${X}`),J.fileExists(X))return X}let G=J.home(),f=Z(EG.join(G,".claude","local","claude"));if(f)return f;let Q=J.env("NVM_BIN");if(Q){let H=Z(EG.join(Q,"claude"));if(H)return H}let q=EG.join(G,".nvm","versions","node"),B=J.readdir(q).sort().reverse();for(let H of B){let K=Z(EG.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(EG.join(G,H));if(K)return K}throw new Bz(Y)}var Bz,jM;var s9=S(()=>{Bz=class Bz 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}};jM={fileExists(J){try{return BM(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return HM()},which(J){let Y=process.platform==="win32"?"where":"which",Z=QM(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&&qM(G)?G:void 0}return X},readdir(J){try{return Nf("fs").readdirSync(J)}catch{return[]}}}});import{spawnSync as WM}from"child_process";import{existsSync as VM,statSync as KM}from"fs";import{homedir as UM}from"os";import t9 from"path";async function e9(J=LM){let Y=[],Z=(Q)=>{if(!Q)return;return Y.push(Q),J.fileExists(Q)?Q:void 0},X=J.which("codex");if(X){if(Y.push(`which:${X}`),J.fileExists(X))return X}let G=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 f=J.env("NVM_BIN");if(f){let Q=Z(t9.join(f,"codex"));if(Q)return Q}for(let Q of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let q=Z(t9.join(G,Q));if(q)return q}throw new Hz(Y)}var Hz,LM;var J8=S(()=>{Hz=class Hz 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}};LM={fileExists(J){try{return KM(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return UM()},which(J){let Y=process.platform==="win32"?"where":"which",Z=WM(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&&VM(G)?G:void 0}return X},readdir(J){try{return Nf("fs").readdirSync(J)}catch{return[]}}}});import{spawnSync as DM}from"child_process";import{existsSync as MM,statSync as FM}from"fs";import{homedir as OM}from"os";import GZ from"path";async function Y8(J=AM){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"],f=(K)=>{if(!K)return;for(let j of G){let U=Z(GZ.join(K,j));if(U)return U}return};for(let K of["/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin"]){let j=f(K);if(j)return j}let Q=J.env("NVM_BIN"),q=f(Q);if(q)return q;let B=J.home(),H=[GZ.join(B,".npm-global/bin"),GZ.join(B,".local/bin"),GZ.join(B,".bun/bin"),GZ.join(B,"bin")];if(J.platform()==="win32"){let K=J.env("APPDATA"),j=J.env("LOCALAPPDATA");if(H.unshift(GZ.join(B,"AppData/Roaming/npm")),K)H.unshift(GZ.join(K,"npm"));if(j)H.unshift(GZ.join(j,"npm"))}for(let K of H){let j=f(K);if(j)return j}throw new jz(Y)}var jz,AM;var Z8=S(()=>{jz=class jz 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}};AM={fileExists(J){try{return FM(J).isFile()}catch{return!1}},env(J){return process.env[J]},home(){return OM()},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(`
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&&MM(G)?G:void 0}return X},platform(){return process.platform}}});import{readFileSync as RM,statSync as gM}from"fs";import{homedir as CM}from"os";import fZ from"path";function SM(J,Y){let Z=J("CLAUDE_CONFIG_DIR")?.trim();if(Z)return fZ.join(Z,".claude.json");return fZ.join(Y,".claude.json")}function yM(J,Y){let X=J("CODEX_HOME")?.trim()??fZ.join(Y,".codex");return fZ.join(X,"auth.json")}function kM(J,Y){let X=J("COPILOT_HOME")?.trim()??fZ.join(Y,".copilot");return fZ.join(X,"config.json")}function IM(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 f=Buffer.from(G,"base64").toString("utf8"),Q=JSON.parse(f);return typeof Q==="object"&&Q!==null?Q:null}catch{return null}}async function Vz(J){try{return{found:!0,path:await J()}}catch(Y){if(Y instanceof Bz||Y instanceof Hz||Y instanceof jz)return{found:!1,error:"not found on PATH"};return{found:!1,error:Y instanceof Error?Y.message:String(Y)}}}async function X8(J){return(await Promise.all([["claude",()=>J.findClaudeBinary()],["codex",()=>J.findCodexBinary()],["copilot",()=>J.findCopilotBinary()]].map(async([X,G])=>(await Vz(G)).found?X:null))).filter((X)=>X!==null)}function NM(J=yX){if(J!==yX)return X8(J);if(Wz)return Wz;let Y=X8(J).catch((Z)=>{throw Wz=null,Z});return Wz=Y,Y}async function xY(J=yX){return[...await NM(J),...Eq()]}async function Kz(J=yX){let Y=await Vz(()=>J.findClaudeBinary()),Z=SM(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 f=G?.oauthAccount;if(!f||typeof f!=="object")return{binary:Y,account:{kind:"none"}};let Q=f,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 Uz(J=yX){let Y=await Vz(()=>J.findCodexBinary()),Z=yM(J.env,J.home()),X;try{X=J.readFile(Z)}catch(H){return{binary:Y,account:{kind:"none"},accountError:`read ${Z}: ${H instanceof Error?H.message:String(H)}`}}if(X===null)return{binary:Y,account:{kind:"none"}};let G;try{G=JSON.parse(X)}catch(H){return{binary:Y,account:{kind:"none"},accountError:`parse ${Z}: ${H instanceof Error?H.message:String(H)}`}}let f=G??{},Q=f.tokens,q=typeof Q?.id_token==="string"?Q.id_token:void 0;if(q){let H=IM(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=f.OPENAI_API_KEY;if(typeof B==="string"&&B.length>0)return{binary:Y,account:{kind:"apikey"}};return{binary:Y,account:{kind:"none"}}}async function Lz(J=yX){let Y=await Vz(()=>J.findCopilotBinary());for(let f of["COPILOT_GITHUB_TOKEN","GH_TOKEN","GITHUB_TOKEN"])if(J.env(f)?.trim())return{binary:Y,account:{kind:"token",source:f}};let Z=kM(J.env,J.home()),X;try{X=J.readFile(Z)}catch(f){return{binary:Y,account:{kind:"none"},accountError:`read ${Z}: ${f instanceof Error?f.message:String(f)}`}}if(X===null)return{binary:Y,account:{kind:"none"}};let G;try{G=JSON.parse(X)}catch(f){return{binary:Y,account:{kind:"none"},accountError:`parse ${Z}: ${f instanceof Error?f.message:String(f)}`}}if(!zB(G))return{binary:Y,account:{kind:"none"}};if(G8(G,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:Y,account:{kind:"oauth"}};return{binary:Y,account:{kind:"none"}}}function zB(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function G8(J,Y,Z=0){if(Z>4||!zB(J))return!1;for(let[X,G]of Object.entries(J)){if(Y.includes(X)&&typeof G==="string"&&G.length>0)return!0;if(zB(G)&&G8(G,Y,Z+1))return!0}return!1}var yX,Wz=null;var mZ=S(()=>{A1();s9();J8();Z8();yX={readFile(J){try{gM(J)}catch(Y){if(Y.code==="ENOENT")return null;throw Y}return RM(J,"utf8")},env(J){return process.env[J]},home(){return CM()},findClaudeBinary(){return o9()},findCodexBinary(){return e9()},findCopilotBinary(){return Y8()}}});function f8(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 z8(J){return J.isMeta===!0||J.isCompactSummary===!0}function Q8(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 Wb,mkdir as Vb,readFile as bM,readdir as QB,stat as TM,unlink as Kb,writeFile as Ub}from"fs/promises";import{homedir as q8}from"os";import Dz from"path";function uM(J){return J.replace(/[/.]/g,"-")}async function uG(J){if(!J)return[];let Y=Dz.join(q8(),".claude","projects",uM(J)),Z;try{Z=await QB(Y)}catch{return[]}let X=[];for(let G of Z){if(!G.endsWith(".jsonl"))continue;let f=Dz.join(Y,G),Q=0;try{Q=(await TM(f)).mtimeMs}catch{}X.push({sessionId:G.slice(0,-6),path:f,mtimeMs:Q})}return X.sort((G,f)=>f.mtimeMs-G.mtimeMs),X}async function B8(J){return(await uG(J))[0]?.mtimeMs??0}async function H8(J,Y=EM){let Z=Y.projectsDir(),X=await Y.readdir(Z);for(let G of X){let f=Dz.join(Z,G,`${J}.jsonl`),Q;try{Q=await Y.readFile(f)}catch{continue}return xM(wM(Q,J))}return[]}function xM(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 wM(J,Y){let Z=[];for(let X of J.split(`
24
+ `)){let G=X.trim();if(!G)continue;let f;try{f=JSON.parse(G)}catch{continue}if(!qB(f))continue;let Q=hM(f,Y);if(Q)Z.push(Q)}return Z}function hM(J,Y){if(z8(J))return null;let Z=qB(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=f8(Z.content);if(X==="user"&&Q8(G))return null;let f=typeof J.timestamp==="string"?J.timestamp:new Date().toISOString(),Q=typeof J.sessionId==="string"?J.sessionId:Y,q=PM(Z.usage);return q?{role:X,blocks:G,timestamp:f,sessionId:Q,usage:q}:{role:X,blocks:G,timestamp:f,sessionId:Q}}function PM(J){if(!qB(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 qB(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var EM;var BB=S(()=>{EM={projectsDir(){return Dz.join(q8(),".claude","projects")},async readdir(J){try{return await QB(J)}catch{return[]}},async readFile(J){return await bM(J,"utf8")},async pathExists(J){try{return await QB(J),!0}catch{return!1}}}});import{fileURLToPath as W8}from"url";function S1(){if(import.meta.url.endsWith(".js"))return["kobe"];let Y=W8(new URL("./index.ts",import.meta.url)),Z=W8(import.meta.resolve("@opentui/solid/preload"));return[process.execPath,"--preload",Z,"--conditions=browser",Y]}var wY=()=>{};function HB(J,Y={}){if(Y.bareSafe&&vM.test(J))return J;return`'${J.replace(/'/g,"'\\''")}'`}function Mz(J,Y={}){return J.map((Z)=>HB(Z,Y)).join(" ")}var vM;var jB=S(()=>{vM=/^[A-Za-z0-9_/.:=-]+$/});function wG(J){return`kobe-hidden-${J.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function K8(J){let Y=Number.parseInt(J.replace(/^@/,""),10);return Number.isFinite(Y)&&Y>=0?1000+Y:1000}function nZ(J){if(!Number.isFinite(J))return cZ;return Math.max(mM,Math.min(cM,Math.round(J)))}function cY(J){if(!Number.isFinite(J))return null;return Math.max(dM,Math.min(nM,Math.round(J)))}function Z1(J){return HB(J)}function PJ(J){return Mz(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 WB(J){return`'${J.replace(/'/g,"'\\''")}'`}function U8(){return`clear; printf ${WB("\\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 L8(J,Y){let Z=VJ(J),X=Y?.initScript?.trim();if(!X)return Z;let G=["{",X,"}"].join(`
25
+ `);if(Y?.markerPath){let f=WB(Y.markerPath),Q=WB(iM(Y.markerPath));return[`if [ ! -f ${f} ]; then`,G,`if [ $? -eq 0 ]; then mkdir -p ${Q} && : > ${f}; fi`,"fi",Z].join(`
26
26
  `)}return[G,Z].join(`
27
- `)}function uM(J){let Y=J.lastIndexOf("/");return Y<=0?".":J.slice(0,Y)}function X8(J){return`cd ${Y1(J)} && while :; do clear; printf "\\033[1m# %s\\033[0m\\n\\n" ${Y1(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 B8(J){let Y=Y1(J.worktree),Z=Y1(J.relPath),f=J.cliInvocation.map(Y1).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`${f} ops --worktree ${Y} --preview ${Z} || { ${G}; }`}function H8(J){return`${uJ([...J.cliInvocation,"update-page"])}`}function j8(J){let Y=J.opener??"open";return[`tmux -L ${Y1(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 JZ(J,Y={}){let Z=[...J,"tasks"];if(Y.initialTaskId)Z.push("--initial-task-id",Y.initialTaskId);return uJ(Z)}function gf(J){if(J.taskId&&J.claudePaneId){let Y=J.cliInvocation.map(Y1).join(" "),Z=J.vendor?` --vendor ${Y1(J.vendor)}`:"";return`KOBE_FILETREE_WATCH=1 ${Y} ops --task-id ${Y1(J.taskId)} --worktree ${Y1(J.cwd)} --target-pane ${Y1(J.claudePaneId)}${Z} || { ${X8(J.cwd)}; }`}return X8(J.cwd)}var wZ=32,TY="tasks",Rf="claude",hZ="ops",EY="shell",NG="workspace_aux",GB=4,qY="@kobe_hidden_shell_pane",RJ="@kobe_hidden_tasks_pane",uY="@kobe_tasks_width",bM=16,NM=120,Vz=60,EG=50,vZ="@kobe_right_width_pct",xY="@kobe_ops_height_pct",TM=10,EM=90;var BY=y(()=>{ZB()});import{mkdir as xM,readFile as wM,writeFile as hM}from"fs/promises";import{dirname as PM}from"path";function vM(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 HY(J){return!!J&&typeof J==="object"&&!Array.isArray(J)}async function cM(J){try{let Y=JSON.parse(await wM(J,"utf8"));return HY(Y)?Y:{}}catch{return{}}}function dM(J){if(!HY(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>HY(Y)&&typeof Y.command==="string"&&Y.command.includes(XB))}function nM(J){if(!HY(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>HY(Y)&&typeof Y.command==="string"&&mM.some((Z)=>Y.command.includes(Z)))}function iM(J,Y){let{hooks:Z,...f}=J,{WorktreeCreate:G,...X}=HY(Z)?Z:{},q=(Array.isArray(G)?G:[]).filter((H)=>!dM(H));if(Y!==null)q.push({hooks:[{type:"command",command:Y}]});let B={...X};if(q.length>0)B.WorktreeCreate=q;return Object.keys(B).length>0?{...f,hooks:B}:{...f}}function lM(J=A1()){let Y={};for(let{event:Z,matcher:f,verb:G}of Kz){let Q={hooks:[{type:"command",command:uJ([...J,"hook",G])}]};if(f)Q.matcher=f;Y[Z]=[Q]}return Y}function W8(J,Y,Z=A1()){let{hooks:f,...G}=J,X=HY(f)?{...f}:{},Q=Y?lM(Z):{};for(let{event:q}of Kz){let H=(Array.isArray(X[q])?X[q]:[]).filter((K)=>!nM(K));if(Y&&Array.isArray(Q[q]))H.push(...Q[q]);if(H.length>0)X[q]=H;else delete X[q]}return Object.keys(X).length>0?{...G,hooks:X}:{...G}}function $M(J=A1()){return{PostToolUse:[{matcher:"Bash",hooks:[{type:"command",command:uJ([...J,"hook",XB])}]}]}}function aM(J){if(!HY(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>HY(Y)&&typeof Y.command==="string"&&Y.command.includes(XB))}function V8(J,Y,Z=A1()){let{hooks:f,...G}=J,X=HY(f)?{...f}:{},Q="PostToolUse",B=(Array.isArray(X.PostToolUse)?X.PostToolUse:[]).filter((H)=>!aM(H));if(Y)B.push(...$M(Z).PostToolUse);if(B.length>0)X.PostToolUse=B;else delete X.PostToolUse;return Object.keys(X).length>0?{...G,hooks:X}:{...G}}class zB{vendor="claude";supportsHooks(){return!0}activityDetailFromPayload(J,Y){if(J==="turn-failed")return{failure:vM(Y.error_type)};if(J==="awaiting-input")return{waiting:"permission"};return}supportsWorktreeSync(){return!0}async installActivityHooks(J){await this.editSettings(J,(Y)=>W8(Y,!0))}async removeActivityHooks(J){await this.editSettings(J,(Y)=>W8(Y,!1))}async removeWorktreeSyncHook(J){await this.editSettings(J,(Y)=>iM(Y,null))}async installWorktreeWatchHook(J){await this.editSettings(J,(Y)=>V8(Y,!0))}async removeWorktreeWatchHook(J){await this.editSettings(J,(Y)=>V8(Y,!1))}async editSettings(J,Y){try{let Z=await cM(J),f=Y(Z);if(JSON.stringify(f)===JSON.stringify(Z))return;await xM(PM(J),{recursive:!0}),await hM(J,`${JSON.stringify(f,null,2)}
28
- `)}catch{}}}var Kz,FN,mM,XB="worktree-created";var K8=y(()=>{NY();BY();Kz=[{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"}],FN=Kz.map((J)=>J.event);mM=Kz.map((J)=>uJ(["hook",J.verb]))});function QB(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(!pM(Z))continue;let f=typeof Z.type==="string"?Z.type:void 0;if(f==="input_text"||f==="output_text"){let G=typeof Z.text==="string"?Z.text:"";if(G.length>0)Y.push({type:"text",text:G});continue}if(f)Y.push({type:"text",text:`[codex: ${f}]`})}return Y}function pM(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function U8(J){if(J.length===0)return!1;for(let Y of J){if(Y.type!=="text")return!1;let Z=(Y.text??"").trim();if(!_M(Z)&&!rM(Z))return!1}return!0}function _M(J){return J.startsWith("<environment_context>")&&J.endsWith("</environment_context>")}function rM(J){return J.startsWith("# AGENTS.md instructions for ")&&J.includes(`
27
+ `)}function iM(J){let Y=J.lastIndexOf("/");return Y<=0?".":J.slice(0,Y)}function V8(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 D8(J){let Y=Z1(J.worktree),Z=Z1(J.relPath),X=J.cliInvocation.map(Z1).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 M8(J){return`${PJ([...J.cliInvocation,"update-page"])}`}function F8(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 IX(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} || { ${V8(J.cwd)}; }`}return V8(J.cwd)}var cZ=32,hY="tasks",kX="claude",dZ="ops",PY="shell",xG="workspace_aux",VB=4,VY="@kobe_hidden_shell_pane",SJ="@kobe_hidden_tasks_pane",vY="@kobe_tasks_width",mM=16,cM=120,Fz=60,hG=50,iZ="@kobe_right_width_pct",mY="@kobe_ops_height_pct",dM=10,nM=90;var KY=S(()=>{jB()});import{mkdir as lM,readFile as $M,writeFile as aM}from"fs/promises";import{dirname as pM}from"path";function _M(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 oM(J){try{let Y=JSON.parse(await $M(J,"utf8"));return UY(Y)?Y:{}}catch{return{}}}function sM(J){if(!UY(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>UY(Y)&&typeof Y.command==="string"&&Y.command.includes(KB))}function tM(J){if(!UY(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>UY(Y)&&typeof Y.command==="string"&&rM.some((Z)=>Y.command.includes(Z)))}function eM(J,Y){let{hooks:Z,...X}=J,{WorktreeCreate:G,...f}=UY(Z)?Z:{},q=(Array.isArray(G)?G:[]).filter((H)=>!sM(H));if(Y!==null)q.push({hooks:[{type:"command",command:Y}]});let B={...f};if(q.length>0)B.WorktreeCreate=q;return Object.keys(B).length>0?{...X,hooks:B}:{...X}}function JF(J=S1()){let Y={};for(let{event:Z,matcher:X,verb:G}of Oz){let Q={hooks:[{type:"command",command:PJ([...J,"hook",G])}]};if(X)Q.matcher=X;Y[Z]=[Q]}return Y}function O8(J,Y,Z=S1()){let{hooks:X,...G}=J,f=UY(X)?{...X}:{},Q=Y?JF(Z):{};for(let{event:q}of Oz){let H=(Array.isArray(f[q])?f[q]:[]).filter((K)=>!tM(K));if(Y&&Array.isArray(Q[q]))H.push(...Q[q]);if(H.length>0)f[q]=H;else delete f[q]}return Object.keys(f).length>0?{...G,hooks:f}:{...G}}function YF(J=S1()){return{PostToolUse:[{matcher:"Bash",hooks:[{type:"command",command:PJ([...J,"hook",KB])}]}]}}function ZF(J){if(!UY(J)||!Array.isArray(J.hooks))return!1;return J.hooks.some((Y)=>UY(Y)&&typeof Y.command==="string"&&Y.command.includes(KB))}function A8(J,Y,Z=S1()){let{hooks:X,...G}=J,f=UY(X)?{...X}:{},Q="PostToolUse",B=(Array.isArray(f.PostToolUse)?f.PostToolUse:[]).filter((H)=>!ZF(H));if(Y)B.push(...YF(Z).PostToolUse);if(B.length>0)f.PostToolUse=B;else delete f.PostToolUse;return Object.keys(f).length>0?{...G,hooks:f}:{...G}}class UB{vendor="claude";supportsHooks(){return!0}activityDetailFromPayload(J,Y){if(J==="turn-failed")return{failure:_M(Y.error_type)};if(J==="awaiting-input")return{waiting:"permission"};return}supportsWorktreeSync(){return!0}async installActivityHooks(J){await this.editSettings(J,(Y)=>O8(Y,!0))}async removeActivityHooks(J){await this.editSettings(J,(Y)=>O8(Y,!1))}async removeWorktreeSyncHook(J){await this.editSettings(J,(Y)=>eM(Y,null))}async installWorktreeWatchHook(J){await this.editSettings(J,(Y)=>A8(Y,!0))}async removeWorktreeWatchHook(J){await this.editSettings(J,(Y)=>A8(Y,!1))}async editSettings(J,Y){try{let Z=await oM(J),X=Y(Z);if(JSON.stringify(X)===JSON.stringify(Z))return;await lM(pM(J),{recursive:!0}),await aM(J,`${JSON.stringify(X,null,2)}
28
+ `)}catch{}}}var Oz,Nb,rM,KB="worktree-created";var R8=S(()=>{wY();KY();Oz=[{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"}],Nb=Oz.map((J)=>J.event);rM=Oz.map((J)=>PJ(["hook",J.verb]))});function LB(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(!XF(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 XF(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function g8(J){if(J.length===0)return!1;for(let Y of J){if(Y.type!=="text")return!1;let Z=(Y.text??"").trim();if(!GF(Z)&&!fF(Z))return!1}return!0}function GF(J){return J.startsWith("<environment_context>")&&J.endsWith("</environment_context>")}function fF(J){return J.startsWith("# AGENTS.md instructions for ")&&J.includes(`
29
29
  <INSTRUCTIONS>
30
- `)&&J.endsWith("</INSTRUCTIONS>")}var L8=()=>{};function D8(J,Y={}){let Z=qB(J.input_tokens,0),f=qB(J.cached_input_tokens,0),G=qB(J.output_tokens,0),X=Math.max(0,Z-f);if(Z<=0&&G<=0&&f<=0)return;return{input_tokens:X,output_tokens:G,...f>0?{cache_read_input_tokens:f}:{},...oM(Y.contextWindowTokens)?{context_window_tokens:Y.contextWindowTokens}:{}}}function qB(J,Y){return typeof J==="number"&&Number.isFinite(J)?J:Y}function oM(J){return typeof J==="number"&&Number.isFinite(J)&&J>0}import{readFile as sM,readdir as tM,stat as eM,unlink as yN}from"fs/promises";import{homedir as JF}from"os";import mZ from"path";async function WB(J=cZ){let Y=J.sessionsDir(),Z=(await J.readdir(Y)).sort().reverse(),f=[];for(let G of Z){let X=mZ.join(Y,G),Q=(await J.readdir(X)).sort().reverse();for(let q of Q){let B=mZ.join(X,q),H=(await J.readdir(B)).sort().reverse();for(let K of H){let j=mZ.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(mZ.join(j,L))}}}return f}async function YF(J,Y=cZ){if(!J)return;let Z=J.toLowerCase(),f=await WB(Y);for(let G of f)if(mZ.basename(G).match(A8)?.[1]?.toLowerCase()===Z)return G;return}function ZF(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 R8(J,Y){let Z=M8.get(Y);if(!Z)Z=new Map,M8.set(Y,Z);let f=Z.get(J);if(f!==void 0)return f;let G;try{G=await Y.readFile(J)}catch{return null}let X=ZF(G);if(X)Z.set(J,X);return X}async function g8(J,Y=cZ){if(!J)return[];let Z=await WB(Y),f=[],G=0;for(let X of Z){if(G>=fF)break;if(G++,await R8(X,Y)!==J)continue;let Q=mZ.basename(X).match(A8)?.[1];if(Q)f.push(Q)}return f.reverse()}async function VB(J,Y=cZ){if(!J)return null;let Z=await WB(Y),f=0;for(let G of Z){if(f>=GF)break;if(f++,await R8(G,Y)!==J)continue;try{return{path:G,mtimeMs:(await Y.stat(G)).mtimeMs}}catch{}}return null}async function C8(J,Y=cZ){return(await VB(J,Y))?.mtimeMs??0}async function S8(J,Y=cZ){return(await XF(J,Y)).messages}async function XF(J,Y=cZ){let Z=await YF(J,Y);if(!Z)return{messages:[]};let f;try{f=await Y.readFile(Z)}catch{return{messages:[]}}let G=zF(QF(f,J)),X=WF(f);return{messages:G,...X?{usageMetrics:X}:{}}}function zF(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 QF(J,Y){let Z=[];for(let f of J.split(`
32
- `)){let G=f.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!uG(X))continue;if(X.type!=="response_item")continue;let Q=uG(X.payload)?X.payload:void 0;if(!Q)continue;let q=typeof X.timestamp==="string"?X.timestamp:new Date().toISOString(),B=qF(Q,q,Y);if(B)Z.push(B)}return Z}function qF(J,Y,Z){if(J.type==="message"){let f=J.role;if(f!=="user"&&f!=="assistant"&&f!=="system")return;let G=QB(J.content);if(f==="user"&&U8(G))return;return{role:f,blocks:G,timestamp:Y,sessionId:Z}}if(J.type==="reasoning")return BF(J,Y,Z);if(J.type==="function_call")return BB(J,Y,Z,{name:jB(J.name,"function_call"),input:HB(J.arguments)});if(J.type==="custom_tool_call")return BB(J,Y,Z,{name:jB(J.name,"custom_tool_call"),input:HB(J.input)});if(J.type==="tool_search_call")return BB(J,Y,Z,{name:"tool_search_call",input:Uz(J,["type","call_id","status"])});if(J.type==="function_call_output"||J.type==="custom_tool_call_output")return F8(J,Y,Z,HB(J.output));if(J.type==="tool_search_output")return F8(J,Y,Z,Uz(J,["type","call_id"]));if(J.type==="web_search_call"||J.type==="image_generation_call"||J.type==="local_shell_call")return HF(J,Y,Z);return}function BF(J,Y,Z){let f=jF(J);if(f.length===0)return;return{role:"assistant",blocks:[{type:"thinking",text:f}],timestamp:Y,sessionId:Z}}function BB(J,Y,Z,f){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:f.name,input:f.input}],timestamp:Y,sessionId:Z}}function F8(J,Y,Z,f){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:f,isError:!1}],timestamp:Y,sessionId:Z}}function HF(J,Y,Z){let f=typeof J.type==="string"?J.type:"tool",G=typeof J.call_id==="string"&&J.call_id.length>0?J.call_id:`${f}:${Y}`,X=jB(J.name,f),Q=Uz(J,["type","call_id","status"]),q=Uz(J,["type","call_id"]);return{role:"assistant",timestamp:Y,sessionId:Z,blocks:[{type:"tool_call",callId:G,name:X,input:Q},{type:"tool_result",callId:G,output:q,isError:!1}]}}function jF(J){let Y=O8(J.content);if(Y.length>0)return Y;let Z=typeof J.text==="string"?J.text:"";if(Z.length>0)return Z;return O8(J.summary)}function O8(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(!uG(Z))continue;let f=typeof Z.text==="string"?Z.text:"";if(f.length>0)Y.push(f)}return Y.join("")}function Uz(J,Y){let Z={};for(let[f,G]of Object.entries(J))if(!Y.includes(f))Z[f]=G;return Z}function jB(J,Y){return typeof J==="string"&&J.length>0?J:Y}function HB(J){if(typeof J!=="string")return J;try{return JSON.parse(J)}catch{return J}}function WF(J){let Y,Z=null;for(let f of J.split(`
33
- `)){let G=f.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!uG(X))continue;let Q=typeof X.timestamp==="string"?VF(X.timestamp):null;if(X.type==="response_item")continue;if(X.type!=="turn.completed")continue;let q=uG(X.usage)?X.usage:void 0;if(!q)continue;let B=D8(q);if(!B)continue;if(Q!==null&&(Z===null||Q>Z))Z=Q,Y=B;else if(Z===null)Y=B}return Y}function VF(J){let Y=new Date(J).getTime();return Number.isFinite(Y)?Y:null}function uG(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var cZ,A8,M8,fF=200,GF=12;var KB=y(()=>{L8();cZ={sessionsDir(){return mZ.join(JF(),".codex","sessions")},async readdir(J){try{return await tM(J)}catch{return[]}},async readFile(J){return await sM(J,"utf8")},stat:eM};A8=/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;M8=new WeakMap});function k8(J){if(!Lz(J))return;let Y=Lz(J.modelMetrics)?J.modelMetrics:void 0;if(!Y)return;let Z=0,f=0,G=0;for(let Q of Object.values(Y)){if(!Lz(Q)||!Lz(Q.usage))continue;Z+=Dz(Q.usage.inputTokens,0),f+=Dz(Q.usage.outputTokens,0),G+=Dz(Q.usage.cacheReadTokens,0)}let X=Dz(J.currentTokens,0);if(Z===0&&f===0&&G===0&&X===0)return;return{input_tokens:Z,output_tokens:f,...G>0?{cache_read_input_tokens:G}:{},...X>0?{context_tokens:X}:{}}}function Lz(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function Dz(J,Y){return typeof J==="number"&&Number.isFinite(J)?J:Y}import{readFile as KF,readdir as UF,rm as LF,stat as DF}from"fs/promises";import{homedir as MF}from"os";import YZ from"path";async function LB(J=dZ){let Y=YZ.join(J.copilotDir(),"session-state");return(await J.readdir(Y)).map((f)=>YZ.join(Y,f))}async function I8(J,Y=dZ){let Z=[];for(let f of await LB(Y)){let G=await DB(f,Y);if(G.cwd!==J)continue;Z.push({id:G.id??YZ.basename(f),updatedAt:G.updatedAt??""})}return Z.sort((f,G)=>f.updatedAt.localeCompare(G.updatedAt)).map((f)=>f.id)}async function b8(J,Y=dZ){if(!J)return 0;let Z=0;for(let f of await LB(Y)){if((await DB(f,Y)).cwd!==J)continue;try{let{mtimeMs:X}=await Y.stat(YZ.join(f,"events.jsonl"));if(X>Z)Z=X}catch{}}return Z}async function FF(J,Y=dZ){let Z=await OF(J,Y);if(!Z)return{messages:[]};let f=await Y.readFile(YZ.join(Z,"events.jsonl")).catch(()=>""),G=RF(f,J);return{messages:G.messages,...G.usageMetrics?{usageMetrics:G.usageMetrics}:{}}}async function N8(J,Y=dZ){return(await FF(J,Y)).messages}async function OF(J,Y=dZ){for(let Z of await LB(Y)){if(YZ.basename(Z)===J)return Z;let f=await DB(Z,Y);if(f.id===J||f.name?.toLowerCase()===J.toLowerCase())return Z}return}async function DB(J,Y=dZ){let Z=await Y.readFile(YZ.join(J,"workspace.yaml")).catch(()=>"");return AF(Z)}function AF(J){let Y={};for(let Z of J.split(`
34
- `)){let f=Z.match(/^([A-Za-z_]+):\s*(.*)$/);if(!f)continue;let G=f[1],X=f[2]??"";if(X.startsWith('"')&&X.endsWith('"'))X=X.slice(1,-1).replace(/\\"/g,'"');Y[G]=X}return{id:Y.id,cwd:Y.cwd,name:Y.name,updatedAt:Y.updated_at,createdAt:Y.created_at}}function RF(J,Y){let Z=[],f=new Map,G=Y,X,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(!UB(H)||typeof H.type!=="string")continue;let K=typeof H.timestamp==="string"?H.timestamp:new Date().toISOString(),j=UB(H.data)?H.data:{};if(H.type==="session.start"){let U=typeof j.sessionId==="string"?j.sessionId:void 0;if(U)G=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,gF),"utf8").toString("utf8");Z.push({role:"user",blocks:[{type:"text",text:U}],timestamp:K,sessionId:G});continue}if(H.type==="assistant.message"){let U=[],L=typeof j.content==="string"?j.content:"";if(L)U.push({type:"text",text:L});let M=Array.isArray(j.toolRequests)?j.toolRequests:[];for(let D of M){if(!UB(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(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"),M=j.result??(j.success===!1?{success:!1}:void 0);Z.push({role:"assistant",blocks:[{type:"tool_result",callId:U,output:M,isError:j.success===!1}],timestamp:K,sessionId:G});continue}if(H.type==="session.shutdown")X=k8(j)}return{messages:Z,usageMetrics:X,firstUserMessage:Q}}function UB(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var dZ,gF=200;var T8=y(()=>{dZ={copilotDir(){let J=process.env.COPILOT_HOME?.trim();if(J)return J;return YZ.join(MF(),".copilot")},async readdir(J){try{return await UF(J)}catch{return[]}},async readFile(J){return await KF(J,"utf8")},stat:DF,async rm(J){await LF(J,{recursive:!0,force:!0})}}});function MB(J){return l1(J).createHookAdapter()}class xG{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 FB=y(()=>{ZZ()});import{readFile as E8}from"fs/promises";class Mz{supportsCompletionMarkers(){return!0}}function u8(J){return l1(J).createTurnDetector()}function kF(J,Y="claude",Z=0){let f=null,G=0;for(let X of J.split(`
36
- `)){G++;let Q=x8(X);if(!Q)continue;let q=h8(Q.message)?Q.message:Q;if(q.role!=="assistant")continue;if(!("content"in q))continue;let B=w8(Q,Z),H={id:`claude:${Y}:${B}:${G}`,timestampMs:B,source:"claude"};if(!f||H.timestampMs>=f.timestampMs)f=H}return f}function IF(J,Y="codex"){let Z=null,f=0;for(let G of J.split(`
37
- `)){f++;let X=x8(G);if(!X||X.type!=="turn.completed")continue;let Q=w8(X,0),q={id:`codex:${Y}:${Q}:${f}`,timestampMs:Q,source:"codex"};if(!Z||q.timestampMs>=Z.timestampMs)Z=q}return Z}function x8(J){let Y=J.trim();if(!Y)return null;try{let Z=JSON.parse(Y);return h8(Z)?Z:null}catch{return null}}function w8(J,Y){let Z=typeof J.timestamp==="string"?Date.parse(J.timestamp):Number.NaN;return Number.isFinite(Z)?Z:Y}function h8(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var SF,OB,yF,AB,Fz;var RB=y(()=>{JB();KB();ZZ();SF={listSessionFiles:(J)=>bG(J),readFile:(J)=>E8(J,"utf8")};OB=class OB extends Mz{deps;vendor="claude";cache=new Map;constructor(J=SF){super();this.deps=J}async latestCompletion(J){let Y=await this.deps.listSessionFiles(J),Z=null,f=new Map;for(let G of Y.slice(0,4)){let X=this.cache.get(G.path),Q;if(X&&G.mtimeMs>0&&X.mtimeMs===G.mtimeMs)Q=X.marker;else{let q=await this.deps.readFile(G.path).catch(()=>"");Q=kF(q,G.path,G.mtimeMs)}if(f.set(G.path,{mtimeMs:G.mtimeMs,marker:Q}),Q&&(!Z||Q.timestampMs>Z.timestampMs))Z=Q}return this.cache=f,Z}};yF={findLatestRollout:(J)=>VB(J),readFile:(J)=>E8(J,"utf8")};AB=class AB extends Mz{deps;vendor="codex";cache=null;constructor(J=yF){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=IF(Z,Y.path);return this.cache={path:Y.path,mtimeMs:Y.mtimeMs,marker:f},f}};Fz=class Fz extends Mz{vendor;constructor(J){super();this.vendor=J}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function xF(J){return{vendor:J,builtin:!1,displayName:J,defaultCommand:[J],history:bF,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new xG(J),createTurnDetector:()=>new Fz(J)}}function l1(J){return e1(J)?uF[J]:xF(J)}var bF,NF,TF,EF,uF;var ZZ=y(()=>{QJ();xZ();JB();K8();KB();T8();FB();RB();bF={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},NF={async listSessionIdsForWorktree(J){return[...await bG(J)].sort((Z,f)=>Z.mtimeMs-f.mtimeMs).map((Z)=>Z.sessionId)},readHistory:(J)=>Z8(J),latestTranscriptMtimeForWorktree:(J)=>Y8(J)},TF={listSessionIdsForWorktree:(J)=>g8(J),readHistory:(J)=>S8(J),latestTranscriptMtimeForWorktree:(J)=>C8(J)},EF={listSessionIdsForWorktree:(J)=>I8(J),readHistory:(J)=>N8(J),latestTranscriptMtimeForWorktree:(J)=>b8(J)},uF={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:NF,detectAccount:(J)=>qz(J),createHookAdapter:()=>new zB,createTurnDetector:()=>new OB},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:TF,detectAccount:(J)=>Bz(J),createHookAdapter:()=>new xG("codex"),createTurnDetector:()=>new AB},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:EF,detectAccount:(J)=>Hz(J),createHookAdapter:()=>new xG("copilot"),createTurnDetector:()=>new Fz("copilot")}}});function P8(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(" "),f=gW(Z);return f.length>0?Buffer.from(f,"utf8").toString("utf8"):f}async function Cf(J,Y=I1){if(!J)return"";let{history:Z}=l1(Y),f=await Z.listSessionIdsForWorktree(J);for(let G of f.slice(0,wF)){let X=P8(await Z.readHistory(G));if(X)return X}return""}async function v8(J,Y){if(!Y)return"";try{return P8(await l1(J).history.readHistory(Y))}catch{return""}}var wF=8;var Oz=y(()=>{ZZ();NJ()});function Sf(J,Y,Z){if(!Y)return J;let f=Lf(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}=${Y1(Z)}`)}return J.length>0?`${J.join(" ")} `:""}var wG="@kobe_remote";var yf=y(()=>{cJ();BY()});var IB={};q1(IB,{windowCount:()=>vF,tmuxSessionName:()=>W1,tmuxCommandSequence:()=>CB,tmuxAvailable:()=>jY,tmuxArgs:()=>nZ,tagPaneRole:()=>d8,tagClaudePane:()=>cF,switchClientBeforeKill:()=>VY,setWindowOption:()=>iZ,setSessionOption:()=>bf,sessionExists:()=>Z1,sendKeys:()=>gz,sendKeyName:()=>vG,runTmuxSequenceCapturing:()=>hG,runTmuxSequence:()=>T1,runTmuxCapturing:()=>c0,runTmux:()=>E0,paneIdByRole:()=>yB,newWindow:()=>aJ,killSession:()=>xJ,globalTasksPaneWidth:()=>Rz,getSessionOptions:()=>jJ,getSessionOption:()=>Az,getServerOptions:()=>fZ,getServerOption:()=>c8,ensureFallbackSession:()=>Cz,currentSessionName:()=>WJ,claudePaneIdStrict:()=>Nf,claudePaneId:()=>kB,capturePaneById:()=>Tf,attachArgv:()=>If,PANE_ROLE_OPTION:()=>PG,KOBE_TMUX_SOCKET:()=>$J,KOBE_HOME_SESSION:()=>n8,CLAUDE_ROLE_OPTION:()=>mF,CHAT_TAB_SESSION_ID_OPTION:()=>WY});import{homedir as hF}from"os";function nZ(...J){return["tmux","-L",$J,...J]}function W1(J){return`kobe-${J.replace(/[^A-Za-z0-9_-]/g,"")}`}function If(J){return nZ("attach-session","-t",`=${J}`)}async function gB(J){if(!J)return"";try{return await new Response(J).text()}catch{return""}}async function E0(J){try{let Y=Bun.spawn(nZ(...J),{stdin:"ignore",cwd:kf,stdout:"ignore",stderr:"pipe"}),[Z,f]=await Promise.all([gB(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 PF(J){try{return await Bun.spawn(nZ(...J),{stdin:"ignore",cwd:kf,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function CB(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 T1(J){let Y=CB(J);return Y.length===0?0:E0(Y)}async function c0(J){try{let Y=Bun.spawn(nZ(...J),{stdin:"ignore",cwd:kf,stdout:"pipe",stderr:"pipe"}),[Z,f,G]=await Promise.all([gB(Y.stdout),gB(Y.stderr),Y.exited]);if(G!==0&&f.trim().length>0)console.error(`[kobe tmux] ${J.join(" ")} (${G}): ${f.trim()}`);return{code:G,stdout:Z}}catch{return{code:1,stdout:""}}}async function hG(J){let Y=CB(J);return Y.length===0?{code:0,stdout:""}:c0(Y)}async function jY(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:kf,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function Z1(J){return await PF(["has-session","-t",`=${J}`])===0}async function vF(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((f)=>f.trim().length>0).length}async function bf(J,Y,Z){await E0(["set-option","-t",J,Y,Z])}async function Az(J,Y){let{code:Z,stdout:f}=await c0(["show-options","-v","-t",J,Y]);return Z===0?f.trim():""}async function jJ(J,Y){let Z=Object.fromEntries(Y.map((X)=>[X,void 0])),{code:f,stdout:G}=await hG(Y.map((X)=>["show-options","-q","-t",J,X]));if(f!==0)return Z;for(let X of G.split(`
39
- `)){let Q=X.indexOf(" ");if(Q<=0)continue;let q=X.slice(0,Q);if(q in Z)Z[q]=X.slice(Q+1).trim()}return Z}async function c8(J){let{code:Y,stdout:Z}=await c0(["show-options","-sqv",J]);return Y===0?Z.trim():""}async function fZ(J){let Y=Object.fromEntries(J.map((G)=>[G,void 0])),{code:Z,stdout:f}=await hG(J.map((G)=>["show-options","-sq",G]));if(Z!==0)return Y;for(let G of f.split(`
40
- `)){let X=G.indexOf(" ");if(X<=0)continue;let Q=G.slice(0,X);if(Q in Y)Y[Q]=G.slice(X+1).trim()}return Y}async function Rz(){let J=await c8(uY),Y=Number.parseInt(J,10);return Number.isFinite(Y)&&Y>0?PZ(Y):wZ}async function d8(J,Y){await E0(["set-option","-p","-t",J,PG,Y])}async function iZ(J,Y,Z){await E0(["set-window-option","-t",J,Y,Z])}async function cF(J){await d8(J,SB)}async function yB(J,Y,Z=!1){let{code:f,stdout:G}=await c0(["list-panes","-t",`=${J}`,"-F",`#{pane_id} #{${PG}}`]);if(f!==0)return"";let X="";for(let Q of G.split(`
41
- `)){let[q,B]=Q.split("\t");if(!q)continue;if(!X)X=q.trim();if(B?.trim()===Y)return q.trim()}return Z?X:""}async function kB(J){return yB(J,SB,!0)}async function Nf(J){return yB(J,SB,!1)}async function Tf(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:G}=await c0(Z);return f===0?G:""}async function gz(J,Y){await E0(["send-keys","-t",J,"-l","--",Y])}async function vG(J,Y){await E0(["send-keys","-t",J,Y])}async function aJ(J,Y){let Z=["new-window","-t",`=${J}`,"-c",Y.cwd];if(Y.name)Z.push("-n",Y.name);Z.push(Y.command),await E0(Z)}async function WJ(){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 c0(J),G=f.trim();return Z===0&&G.length>0?G:null}async function xJ(J){if(!J.startsWith("kobe-hidden-")){let Y=TG(J);if(await Z1(Y))await E0(["kill-session","-t",`=${Y}`])}if(await Z1(J))await E0(["kill-session","-t",`=${J}`])}async function Cz(){let J=n8;if(await Z1(J)){if(await Az(J,m8)==="tasks")return J;await E0(["kill-session","-t",`=${J}`])}let Z=(await c0(["new-session","-d","-s",J,"-c",kf,"-x","220","-y","50","-P","-F","#{pane_id}",Q8()])).stdout.trim();if(Z){let f=await Rz(),X=(await c0(["split-window","-h","-b","-t",Z,"-l",`${f}`,"-c",kf,"-P","-F","#{pane_id}",HJ(YJ()+JZ(A1()))])).stdout.trim();if(X)await T1([["set-option","-p","-t",X,PG,"tasks"],["select-pane","-t",X]])}return await bf(J,m8,"tasks"),J}async function VY(J,Y){if(await WJ()!==J)return;if(Y&&Y!==J&&await Z1(Y)){await E0(["switch-client","-t",`=${Y}`]);return}let f=await Cz();await E0(["switch-client","-t",`=${f}`])}var $J,kf,PG="@kobe_role",mF,SB="claude",WY="@kobe_session_id",n8="kobe-home",m8="@kobe_home";var E1=y(()=>{NY();yf();BY();$J=process.env.KOBE_TMUX_SOCKET?.trim()||"kobe";kf=hF()||"/";mF=PG});async function dF(J,Y=i8){let{code:Z,stdout:f}=await Y.capture(["list-windows","-t",`=${J}`,"-F",`#{window_index} #{automatic-rename} #{${WY}}`]);if(Z!==0)return[];let G=[];for(let X of f.split(`
42
- `)){let[Q,q,B]=X.split("\t"),H=Number.parseInt((Q??"").trim(),10);if(!Number.isInteger(H))continue;G.push({index:H,sessionId:B?.trim()??"",autoRename:q?.trim()??""})}return G}async function nF(J,Y,Z){let{code:f,stdout:G}=await Z.capture(["show-window-options","-t",`=${J}:${Y}`,"automatic-rename"]);return f===0&&/\boff\b/.test(G)}async function iF(J){let{code:Y,stdout:Z}=await J.capture(["show-window-options","-g","automatic-rename"]);return Y===0&&/\boff\b/.test(Z)}async function lF(J,Y,Z,f){return await f.run(["rename-window","-t",`=${J}:${Y}`,"--",Z])===0}async function l8(J,Y=$F){let Z=0,f=null,G=async(X,Q)=>{if(Q.autoRename==="1")return!1;if(Q.autoRename==="0"){if(f===null)f=await iF(Y.runner);if(!f)return!0}return nF(X,Q.index,Y.runner)};for(let X of J.listTasks()){if(X.archived||X.kind==="main"||!X.worktreePath)continue;let Q=W1(X.id),q=await dF(Q,Y.runner);if(q.length===0)continue;let B=q.reduce((K,j)=>Math.min(K,j.index),Number.POSITIVE_INFINITY),H=X.vendor??I1;for(let K of q)try{if(await G(Q,K))continue;let j=K.sessionId?await Y.titleFromSessionId(H,K.sessionId):K.index===B?await Y.titleFromWorktree(X.worktreePath,H):"";if(j&&await lF(Q,K.index,j,Y.runner))Z++}catch{}}return Z}var i8,$F;var $8=y(()=>{Oz();E1();NJ();i8={capture:c0,run:E0};$F={runner:i8,titleFromSessionId:v8,titleFromWorktree:Cf}});function p8(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 a8(J,Y,Z=new Date){let f=p8(Y);return`[${Z.toISOString()}] daemon ${J}: ${f.stack??`${f.name}: ${f.message}`}
43
- `}function aF(J,Y,Z=new Date){let f=p8(Y);return`[${Z.toISOString()}] daemon error [${J}]: ${f.stack??`${f.name}: ${f.message}`}
44
- `}function h1(J,Y){process.stderr.write(aF(J,Y))}function pF(J,Y,Z=new Date){return`[${Z.toISOString()}] daemon [${J}]: ${Y}
45
- `}function GZ(J,Y){process.stderr.write(pF(J,Y))}function _8(J=(Y)=>process.stderr.write(Y)){if(bB||NB)return;bB=(Y)=>J(a8("unhandledRejection",Y)),NB=(Y)=>J(a8("uncaughtException",Y)),process.on("unhandledRejection",bB),process.on("uncaughtException",NB)}var bB,NB;async function _F(J,Y=Cf){let Z=[];for(let f of J.listTasks()){if(f.archived||f.title!==zY||!f.worktreePath)continue;try{let G=await Y(f.worktreePath,f.vendor??I1);if(!G)continue;let X=J.getTask(f.id);if(!X||X.title!==zY)continue;await J.setTitle(f.id,G),Z.push({id:f.id,title:G})}catch(G){h1("auto-title-poller",G)}}return Z}function r8(J,Y=TB,Z){if(Y<=0)return()=>{};let f=!1,X=setInterval(()=>{if(Z&&!Z())return;if(f)return;f=!0,_F(J).then(()=>l8(J)).catch((Q)=>h1("auto-title-poller",Q)).finally(()=>{f=!1})},Y);return X.unref?.(),()=>clearInterval(X)}var TB=4000;var o8=y(()=>{Oz();SG();$8();NJ()});class EB{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 Sz(){return i1()[lZ]===!0}var lZ="experimental.autoStatus";var mG=y(()=>{Kf()});async function s8(J,Y,Z=Sz){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 t8=y(()=>{mG()});import{createHash as rF}from"crypto";import{homedir as oF}from"os";import zZ from"path";function Y3(){return zZ.join(process.env.KOBE_HOME_DIR??oF(),".kobe")}function Z3(J){let Z=(zZ.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",f=rF("sha1").update(zZ.resolve(J)).digest("hex").slice(0,12);return`${Z}-${f}`}function f3(J){if(!zZ.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return zZ.join(Y3(),sF,Z3(J))}function G3(J){if(!zZ.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[f3(J),...J3.map((Y)=>zZ.join(J,Y))]}function XZ(J){return J.length>1&&J.endsWith("/")?J.slice(0,-1):J}function e8(J,Y){return Y===J||Y.startsWith(`${J}/`)}function J5(J,Y){let Z=XZ(Y),f,G=-1;for(let X of J){if(!X.worktreePath)continue;let Q=XZ(X.worktreePath);if(e8(Q,Z)&&Q.length>G)G=Q.length,f=X.id}return f}function uB(J,Y){let Z=XZ(Y),f,G=-1;for(let X of J){if(!X.repo)continue;let Q=XZ(X.repo);if(e8(Q,Z)&&Q.length>G)G=Q.length,f=Q}return f}function Y5(J,Y){let Z=XZ(Y),f=new Set,G=new Set;for(let X of J){if(X.repo)f.add(XZ(X.repo));if(X.worktreePath)G.add(XZ(X.worktreePath))}for(let X of f)for(let Q of G3(X).map(XZ)){let q=`${Q}/`;if(!Z.startsWith(q))continue;let H=Z.slice(q.length).split("/")[0];if(!H)continue;let K=`${q}${H}`;if(G.has(K))return;return{repo:X,worktreePath:K}}return}var sF="worktrees",tF=".kobe/worktrees",eF=".claude/worktrees",J3;var Z5=y(()=>{J3=[tF,eF]});function hB(J){return{message:J instanceof Error?J.message:String(J),name:J instanceof Error?J.name:void 0}}async function cG(J,Y,Z,f){let G=J.get(Y);if(!G)throw Error(`unknown daemon request: ${Y}`);return G.handle(PB(Z),f)}function dG(){return new Map([{name:"hello",handle(Y,Z){let f=typeof Y.protocolVersion==="number"?Y.protocolVersion:TJ,G=typeof Y.minProtocolVersion==="number"?Y.minProtocolVersion:f;if(!sX({localVersion:TJ,localMin:oY,remoteVersion:f,remoteMin:G}))throw Error(`daemon is protocol v${TJ} (min v${oY}); this client is v${f} (min v${G}). Upgrade your kobe.`);return{protocolVersion:TJ,minProtocolVersion:oY,kobeVersion:m0,capabilities:[...pq],daemonPid:Z.daemon.pid,clientId:Z.clientId,tasks:Z.orch.listTasks().map(lJ)}}},{name:"daemon.status",handle(Y,Z){return{daemonPid:Z.daemon.pid,kobeVersion:m0,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(lJ)}}},{name:"task.get",handle(Y,Z){let f=K1(Y,"taskId"),G=Z.orch.getTask(f);if(!G)throw Error(`task not found: ${f}`);return{task:lJ(G)}}},{name:"task.create",async handle(Y,Z){let f=K1(Y,"repo"),G=await Z.orch.createTask({repo:f,title:wJ(Y,"title"),branch:wJ(Y,"branch"),baseRef:wJ(Y,"baseRef"),vendor:wB(Y,"vendor"),modelEffort:wJ(Y,"effort")});return{taskId:G.id,task:lJ(G)}}},{name:"task.archive",async handle(Y,Z){let f=K1(Y,"taskId");return await Z.orch.setArchived(f,xB(Y,"archived")),{}}},{name:"task.rename",async handle(Y,Z){let f=K1(Y,"taskId");return await Z.orch.setTitle(f,K1(Y,"title")),{}}},{name:"task.setBranch",async handle(Y,Z){let f=K1(Y,"taskId");return await Z.orch.setBranch(f,K1(Y,"branch")),{}}},{name:"task.setVendor",async handle(Y,Z){let f=K1(Y,"taskId"),G=wB(Y,"vendor");if(!G)throw Error("task.setVendor: vendor is required");return await Z.orch.setVendor(f,G),{}}},{name:"task.delete",async handle(Y,Z){let f=K1(Y,"taskId");return await Z.orch.deleteTask(f,{force:xB(Y,"force")}),Z.activity.clearTask(f),{}}},{name:"task.pin",async handle(Y,Z){let f=K1(Y,"taskId");return await Z.orch.setPinned(f,xB(Y,"pinned")),{}}},{name:"task.move",async handle(Y,Z){let f=K1(Y,"taskId"),G=K1(Y,"direction");if(G!=="up"&&G!=="down")throw Error("direction must be up or down");return await Z.orch.moveTask(f,G==="up"?-1:1),{}}},{name:"task.status",async handle(Y,Z){let f=K1(Y,"taskId"),G=K1(Y,"status");if(!P9(G))throw Error("status must be a TaskStatus");let X=G==="done"?Z.orch.getTask(f):void 0,Q=X?.status;if(await Z.orch.setStatus(f,G),G==="done"&&Q!=="done"&&X)try{let q=await Z.issues.mirrorTaskDone(X.repo,f);if(q)Z.bus.publish("issue.snapshot",q)}catch(q){h1("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 G=f.map((X)=>{if(typeof X!=="object"||X===null)throw Error("each move needs taskId and position");let Q=X,q=K1(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(G),{}}},{name:"task.ensureMain",async handle(Y,Z){let f=K1(Y,"repo"),G=await Z.orch.ensureMainTask(f);return{task:lJ(G)}}},{name:"task.ensureWorktree",async handle(Y,Z){let f=K1(Y,"taskId");Z.bus.publish("task.jobs",{taskId:f,kind:"ensureWorktree",phase:"running"});try{let G=await Z.orch.ensureWorktree(f);return Z.bus.publish("task.jobs",{taskId:f,kind:"ensureWorktree",phase:"done"}),{worktreePath:G}}catch(G){throw Z.bus.publish("task.jobs",{taskId:f,kind:"ensureWorktree",phase:"error",error:G instanceof Error?G.message:String(G)}),G}}},{name:"worktree.discoverAdoptable",async handle(Y,Z){let f=K1(Y,"repo");return{worktrees:await Z.orch.discoverAdoptableWorktrees(f)}}},{name:"worktree.adopt",async handle(Y,Z){let f=await Z.orch.adoptWorktree({repo:K1(Y,"repo"),worktreePath:K1(Y,"worktreePath"),branch:wJ(Y,"branch"),vendor:wB(Y,"vendor"),title:wJ(Y,"title"),ifExists:wJ(Y,"ifExists")==="return"?"return":"error"});return{task:lJ(f)}}},{name:"worktree.reconcile",async handle(Y,Z){let f=K1(Y,"cwd"),G=K1(Y,"worktreePath"),X=uB(Z.orch.listTasks(),f)??uB(Z.orch.listTasks(),G);if(!X)return{adopted:!1};try{return{adopted:!0,taskId:(await Z.orch.adoptWorktree({repo:X,worktreePath:G,ifExists:"return"})).id}}catch(Q){return h1("worktree-created",Q),{adopted:!1}}}},{name:"task.setActive",async handle(Y,Z){let f=wJ(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(K1(Y,"repoRoot"))}},{name:"issue.mutate",async handle(Y,Z){let f=await Z.issues.mutate(K1(Y,"repoRoot"),Y.op);return Z.bus.publish("issue.snapshot",f),f}},{name:"session.deliver",async handle(Y,Z){let f=K1(Y,"taskId"),G=K1(Y,"text"),X=wJ(Y,"source");if(X!==void 0&&X!=="note"&&X!=="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:G,at:Date.now(),source:X??"dispatcher"}),{ok:!0}}},{name:"note.file",async handle(Y,Z){let f=K1(Y,"taskId"),G=K1(Y,"text"),X=Z.orch.getTask(f);if(!X)throw Error(`task not found: ${f}`);let Q=Z.orch.listTasks().find((B)=>(B.kind??"task")==="main"&&B.repo===X.repo&&!B.archived);if(!Q||Q.id===X.id)return{ok:!0,routed:!1};let q=X.title||X.branch||f;return Z.bus.publish("session.deliver",{taskId:Q.id,text:`[KOBE FIELD NOTE] from "${q}" (task ${f}): ${G}`,at:Date.now(),source:"note"}),{ok:!0,routed:!0}}},{name:"engine.reportEvent",async handle(Y,Z){let f=K1(Y,"kind");if(!Yz(f))throw Error(`unknown engine event kind: ${f}`);let G=wJ(Y,"taskId"),X=wJ(Y,"cwd");if(!G&&X&&f==="session-start"){let B=Y5(Z.orch.listTasks(),X);if(B)try{await Z.orch.adoptWorktree({repo:B.repo,worktreePath:B.worktreePath,ifExists:"return"})}catch(H){h1("worktree-autosync",H)}}let Q=G??(X?J5(Z.orch.listTasks(),X):void 0);if(!Q)return{};let q=X3(Y);if(Z.activity.report(Q,f,q),f==="turn-start")s8(Z.orch,Q).then((B)=>{if(B==="moved")console.log(`[status-rules] task ${Q} auto-moved backlog \u2192 in_progress`)}).catch((B)=>h1("status-rules",B));return{}}}].map((Y)=>[Y.name,Y]))}function PB(J){if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function K1(J,Y){let Z=J[Y];if(typeof Z!=="string"||Z.length===0)throw Error(`${Y} is required`);return Z}function wJ(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 xB(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 wB(J,Y){let Z=wJ(J,Y);return Z&&Z.trim().length>0?Z:void 0}function X3(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 yz=y(()=>{Zz();t8();NJ();XJ();Z5();TZ()});import{execFile as z3}from"child_process";import{mkdir as Q3,readFile as q3,realpath as f5,rename as B3,stat as H3,writeFile as j3}from"fs/promises";import{homedir as W3}from"os";import{dirname as V3,isAbsolute as K3,join as U3,resolve as G5}from"path";import{promisify as L3}from"util";function D3(J){return(J instanceof Error?J.message:String(J)).includes("not a git repository")}function Iz(J=process.env.KOBE_HOME_DIR??W3()){return U3(J,".kobe","issues.json")}function z5(J){return typeof J==="string"&&X5.includes(J)}function M3(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:z5(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 F3(){return{version:1,repos:{}}}function O3(){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 A3(J){let{stdout:Y}=await iB("git",["-C",J,"rev-parse","--git-common-dir"]),Z=Y.trim();return f5(K3(Z)?Z:G5(J,Z))}async function R3(J){let{stdout:Y}=await iB("git",["-C",J,"rev-parse","--show-toplevel"]);return Y.trim()}async function g3(J){let{stdout:Y}=await iB("git",["-C",J,"worktree","list","--porcelain"]),Z=Y.split(/\r?\n/).find((f)=>f.startsWith("worktree "))?.slice(9).trim();return Z?f5(Z):R3(J)}async function vB(J){if(typeof J!=="string"||J.length===0)throw Error("repoRoot is required");let Y=G5(J);if(!(await H3(Y).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[f,G]=await Promise.all([g3(Y),A3(Y)]);return{repoRoot:f,repoKey:G}}catch(f){if(D3(f))throw Error("repoRoot is not a git repository");throw f}}async function mB(J){try{let Y=JSON.parse(await q3(J,"utf8")),Z={};if(Y.repos&&typeof Y.repos==="object")for(let[f,G]of Object.entries(Y.repos)){if(!G||typeof G!=="object")continue;let X=G;Z[f]={repoRoot:typeof X.repoRoot==="string"?X.repoRoot:"",nextId:typeof X.nextId==="number"?X.nextId:1,issues:Array.isArray(X.issues)?X.issues.map(M3).filter((Q)=>Q!==null):[]}}return{version:1,repos:Z}}catch(Y){if(Y.code==="ENOENT")return F3();throw Y}}async function cB(J,Y){await Q3(V3(J),{recursive:!0});let Z=`${J}.tmp`;await j3(Z,`${JSON.stringify(Y,null,2)}
46
- `,"utf8"),await B3(Z,J)}function dB(J,Y){return{repoRoot:J,exists:Y!==null,nextId:Y?.nextId??1,issues:Y?.issues??[]}}async function nB(J,Y){let f=(kz.get(J)??Promise.resolve()).then(Y),G=f.then(()=>{return},()=>{return});return kz.set(J,G),G.then(()=>{if(kz.get(J)===G)kz.delete(J)}),f}class bz{path;constructor(J=Iz()){this.path=J}async list(J){let{repoRoot:Y,repoKey:Z}=await vB(J);return nB(this.path,async()=>{let f=await mB(this.path),G=f.repos[Z]??null;if(G&&G.repoRoot!==Y)G.repoRoot=Y,await cB(this.path,f);return dB(Y,G)})}async mirrorTaskDone(J,Y){let{repoRoot:Z,repoKey:f}=await vB(J);if(!Y)return null;return nB(this.path,async()=>{let G=await mB(this.path),X=G.repos[f];if(!X)return null;let Q=X.issues.find((q)=>q.taskId===Y);if(!Q||Q.status==="done")return null;return Q.status="done",X.repoRoot=Z,await cB(this.path,G),dB(Z,X)})}async mutate(J,Y){let{repoRoot:Z,repoKey:f}=await vB(J);if(!Y||typeof Y!=="object"||Array.isArray(Y)||typeof Y.type!=="string")throw Error("missing op");return nB(this.path,async()=>{let G=await mB(this.path),X=G.repos[f];if(!X)X={repoRoot:Z,nextId:1,issues:[]},G.repos[f]=X;X.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");X.issues=[{id:X.nextId,title:Q.title,status:"open",created:O3(),body:typeof Q.body==="string"?Q.body:""},...X.issues],X.nextId+=1}else if(Q.type==="setStatus"){if(typeof Q.id!=="number")throw Error("setStatus requires a numeric id");if(!z5(Q.status))throw Error(`invalid status: must be one of ${X5.join(", ")}`);let q=X.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=X.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=X.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=X.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=X.issues.filter((B)=>B.id!==Q.id);if(q.length===X.issues.length)throw Error(`no issue #${Q.id}`);X.issues=q}else throw Error(`unknown op type: ${Q.type}`);return await cB(this.path,G),dB(Z,X)})}}var iB,X5,kz;var lB=y(()=>{iB=L3(z3),X5=["open","doing","hold","done"];kz=new Map});import{mkdirSync as C3,watch as S3}from"fs";import{basename as y3,dirname as k3}from"path";function Nz(J){if(J.debounceMs<=0)return()=>{};let Y=k3(J.filePath),Z=new Set([y3(J.filePath),...J.matchBasenames??[]]),f=null,G=null,X=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{C3(Y,{recursive:!0}),X=S3(Y,(B,H)=>{let K=H===null?null:String(H);if(K!==null&&!Z.has(K))return;q()}),X.on("error",J.onError)}catch(B){J.onError(B)}if(J.pollMs&&J.pollMs>0)G=setInterval(Q,J.pollMs),G.unref?.();return()=>{if(f)clearTimeout(f),f=null;if(G)clearInterval(G),G=null;X?.close(),X=null}}var $B=()=>{};import{homedir as I3}from"os";import{basename as b3,join as N3}from"path";function pB(J=process.env.KOBE_HOME_DIR??I3()){return N3(J,".kobe","settings","keybindings.yaml")}function Q5(J,Y={}){let Z=Y.debounceMs??aB;if(Z<=0)return()=>{};let f=Y.path??pB(),G=b3(f),X=G.replace(/\.yaml$/,".yml"),Q=0;return J.publish("keybindings",{rev:Q}),Nz({filePath:f,matchBasenames:[G,X],debounceMs:Z,onTrigger:()=>{try{Q+=1,J.publish("keybindings",{rev:Q})}catch(B){h1("keybindings-watcher",B)}},onError:(B)=>h1("keybindings-watcher",B)})}var aB=200;var q5=y(()=>{$B()});class _B{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??T3,this.log=J.log??GZ}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 T3=(J,Y)=>{let Z=setTimeout(J,Y);return Z.unref?.(),()=>clearTimeout(Z)};var B5=()=>{};import{readFileSync as E3}from"fs";import{homedir as u3}from"os";import{basename as x3,join as w3}from"path";function oB(J=process.env.KOBE_HOME_DIR??u3()){return w3(J,".config","kobe","state.json")}function H5(J){let Y={};try{let B=JSON.parse(E3(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,G=typeof Y.focusAccent==="string"&&P3.includes(Y.focusAccent)?Y.focusAccent:null,X=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:G,sortMode:X,keysCollapsed:Q,projectFilter:q}}function v3(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 j5(J,Y={}){let Z=Y.debounceMs??rB;if(Z<=0)return()=>{};let f=Y.pollMs??h3,G=Y.statePath??oB(),X=x3(G),Q=H5(G);return J.publish("ui-prefs",Q),Nz({filePath:G,matchBasenames:[X],debounceMs:Z,pollMs:f,onTrigger:()=>{try{let B=H5(G);if(v3(Q,B))return;Q=B,J.publish("ui-prefs",B)}catch(B){h1("ui-prefs-watcher",B)}},onError:(B)=>h1("ui-prefs-watcher",B)})}var rB=200,h3=250,P3;var W5=y(()=>{$B();P3=["primary","success","info"]});function sB(){return i1()[$Z]===!0}var $Z="experimental.dispatcher";var Tz=y(()=>{Kf()});import{randomUUID as m3}from"crypto";function pJ(J){return`engineCommand.${J}`}function _J(J){return`engineName.${J}`}function aZ(J){return O1(_J(J))?.trim()||tB[J]||J}function nG(J){return l1(J??"claude").defaultCommand}function c3(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 VJ(J,Y){let Z=J??"claude",f=O1(pJ(Z))?.trim(),G=(()=>{if(f){let X=c3(f);if(X.length>0)return X}return nG(Z)})();return d3(G,Z,Y)}function d3(J,Y,Z){let f=Z?.trim();if(!f)return J;let G=Y??"claude";if(!l1(G).effortLevels?.includes(f))return J;if(G==="codex")return[...J,"-c",`model_reasoning_effort=${f}`];return J}function Ef(J,Y){if((Y??"claude")!=="claude")return{argv:J,sessionId:null};if(J.some((f)=>n3.has(f)))return{argv:J,sessionId:null};let Z=m3();return{argv:[...J,"--session-id",Z],sessionId:Z}}function pZ(){let J=(Y)=>/^[A-Za-z0-9_/.:=-]+$/.test(Y)?Y:`'${Y.replace(/'/g,"'\\''")}'`;try{return[...A1(),"api"].map(J).join(" ")}catch{return"kobe api"}}function i3(J,Y=pZ()){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 l3(J,Y=pZ()){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 $3(J,Y=pZ(),Z={}){let f=[];if((Z.status??Sz)())f.push(i3(J,Y));if((Z.notes??sB)())f.push(l3(J,Y));return f.length>0?f.join(`
30
+ `)&&J.endsWith("</INSTRUCTIONS>")}var C8=()=>{};function S8(J,Y={}){let Z=DB(J.input_tokens,0),X=DB(J.cached_input_tokens,0),G=DB(J.output_tokens,0),f=Math.max(0,Z-X);if(Z<=0&&G<=0&&X<=0)return;return{input_tokens:f,output_tokens:G,...X>0?{cache_read_input_tokens:X}:{},...zF(Y.contextWindowTokens)?{context_window_tokens:Y.contextWindowTokens}:{}}}function DB(J,Y){return typeof J==="number"&&Number.isFinite(J)?J:Y}function zF(J){return typeof J==="number"&&Number.isFinite(J)&&J>0}import{readFile as QF,readdir as qF,stat as BF,unlink as hb}from"fs/promises";import{homedir as HF}from"os";import lZ from"path";async function AB(J=$Z){let Y=J.sessionsDir(),Z=(await J.readdir(Y)).sort().reverse(),X=[];for(let G of Z){let f=lZ.join(Y,G),Q=(await J.readdir(f)).sort().reverse();for(let q of Q){let B=lZ.join(f,q),H=(await J.readdir(B)).sort().reverse();for(let K of H){let j=lZ.join(B,K),U=(await J.readdir(j)).filter((L)=>L.startsWith("rollout-")&&L.endsWith(".jsonl"));U.sort().reverse();for(let L of U)X.push(lZ.join(j,L))}}}return X}async function jF(J,Y=$Z){if(!J)return;let Z=J.toLowerCase(),X=await AB(Y);for(let G of X)if(lZ.basename(G).match(N8)?.[1]?.toLowerCase()===Z)return G;return}function WF(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 b8(J,Y){let Z=y8.get(Y);if(!Z)Z=new Map,y8.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 f=WF(G);if(f)Z.set(J,f);return f}async function T8(J,Y=$Z){if(!J)return[];let Z=await AB(Y),X=[],G=0;for(let f of Z){if(G>=VF)break;if(G++,await b8(f,Y)!==J)continue;let Q=lZ.basename(f).match(N8)?.[1];if(Q)X.push(Q)}return X.reverse()}async function RB(J,Y=$Z){if(!J)return null;let Z=await AB(Y),X=0;for(let G of Z){if(X>=KF)break;if(X++,await b8(G,Y)!==J)continue;try{return{path:G,mtimeMs:(await Y.stat(G)).mtimeMs}}catch{}}return null}async function E8(J,Y=$Z){return(await RB(J,Y))?.mtimeMs??0}async function u8(J,Y=$Z){return(await UF(J,Y)).messages}async function UF(J,Y=$Z){let Z=await jF(J,Y);if(!Z)return{messages:[]};let X;try{X=await Y.readFile(Z)}catch{return{messages:[]}}let G=LF(DF(X,J)),f=RF(X);return{messages:G,...f?{usageMetrics:f}:{}}}function LF(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 DF(J,Y){let Z=[];for(let X of J.split(`
32
+ `)){let G=X.trim();if(!G)continue;let f;try{f=JSON.parse(G)}catch{continue}if(!PG(f))continue;if(f.type!=="response_item")continue;let Q=PG(f.payload)?f.payload:void 0;if(!Q)continue;let q=typeof f.timestamp==="string"?f.timestamp:new Date().toISOString(),B=MF(Q,q,Y);if(B)Z.push(B)}return Z}function MF(J,Y,Z){if(J.type==="message"){let X=J.role;if(X!=="user"&&X!=="assistant"&&X!=="system")return;let G=LB(J.content);if(X==="user"&&g8(G))return;return{role:X,blocks:G,timestamp:Y,sessionId:Z}}if(J.type==="reasoning")return FF(J,Y,Z);if(J.type==="function_call")return MB(J,Y,Z,{name:OB(J.name,"function_call"),input:FB(J.arguments)});if(J.type==="custom_tool_call")return MB(J,Y,Z,{name:OB(J.name,"custom_tool_call"),input:FB(J.input)});if(J.type==="tool_search_call")return MB(J,Y,Z,{name:"tool_search_call",input:Az(J,["type","call_id","status"])});if(J.type==="function_call_output"||J.type==="custom_tool_call_output")return k8(J,Y,Z,FB(J.output));if(J.type==="tool_search_output")return k8(J,Y,Z,Az(J,["type","call_id"]));if(J.type==="web_search_call"||J.type==="image_generation_call"||J.type==="local_shell_call")return OF(J,Y,Z);return}function FF(J,Y,Z){let X=AF(J);if(X.length===0)return;return{role:"assistant",blocks:[{type:"thinking",text:X}],timestamp:Y,sessionId:Z}}function MB(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 k8(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 OF(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}`,f=OB(J.name,X),Q=Az(J,["type","call_id","status"]),q=Az(J,["type","call_id"]);return{role:"assistant",timestamp:Y,sessionId:Z,blocks:[{type:"tool_call",callId:G,name:f,input:Q},{type:"tool_result",callId:G,output:q,isError:!1}]}}function AF(J){let Y=I8(J.content);if(Y.length>0)return Y;let Z=typeof J.text==="string"?J.text:"";if(Z.length>0)return Z;return I8(J.summary)}function I8(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(!PG(Z))continue;let X=typeof Z.text==="string"?Z.text:"";if(X.length>0)Y.push(X)}return Y.join("")}function Az(J,Y){let Z={};for(let[X,G]of Object.entries(J))if(!Y.includes(X))Z[X]=G;return Z}function OB(J,Y){return typeof J==="string"&&J.length>0?J:Y}function FB(J){if(typeof J!=="string")return J;try{return JSON.parse(J)}catch{return J}}function RF(J){let Y,Z=null;for(let X of J.split(`
33
+ `)){let G=X.trim();if(!G)continue;let f;try{f=JSON.parse(G)}catch{continue}if(!PG(f))continue;let Q=typeof f.timestamp==="string"?gF(f.timestamp):null;if(f.type==="response_item")continue;if(f.type!=="turn.completed")continue;let q=PG(f.usage)?f.usage:void 0;if(!q)continue;let B=S8(q);if(!B)continue;if(Q!==null&&(Z===null||Q>Z))Z=Q,Y=B;else if(Z===null)Y=B}return Y}function gF(J){let Y=new Date(J).getTime();return Number.isFinite(Y)?Y:null}function PG(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var $Z,N8,y8,VF=200,KF=12;var gB=S(()=>{C8();$Z={sessionsDir(){return lZ.join(HF(),".codex","sessions")},async readdir(J){try{return await qF(J)}catch{return[]}},async readFile(J){return await QF(J,"utf8")},stat:BF};N8=/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;y8=new WeakMap});function w8(J){if(!Rz(J))return;let Y=Rz(J.modelMetrics)?J.modelMetrics:void 0;if(!Y)return;let Z=0,X=0,G=0;for(let Q of Object.values(Y)){if(!Rz(Q)||!Rz(Q.usage))continue;Z+=gz(Q.usage.inputTokens,0),X+=gz(Q.usage.outputTokens,0),G+=gz(Q.usage.cacheReadTokens,0)}let f=gz(J.currentTokens,0);if(Z===0&&X===0&&G===0&&f===0)return;return{input_tokens:Z,output_tokens:X,...G>0?{cache_read_input_tokens:G}:{},...f>0?{context_tokens:f}:{}}}function Rz(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function gz(J,Y){return typeof J==="number"&&Number.isFinite(J)?J:Y}import{readFile as CF,readdir as SF,rm as yF,stat as kF}from"fs/promises";import{homedir as IF}from"os";import QZ from"path";async function SB(J=aZ){let Y=QZ.join(J.copilotDir(),"session-state");return(await J.readdir(Y)).map((X)=>QZ.join(Y,X))}async function h8(J,Y=aZ){let Z=[];for(let X of await SB(Y)){let G=await yB(X,Y);if(G.cwd!==J)continue;Z.push({id:G.id??QZ.basename(X),updatedAt:G.updatedAt??""})}return Z.sort((X,G)=>X.updatedAt.localeCompare(G.updatedAt)).map((X)=>X.id)}async function P8(J,Y=aZ){if(!J)return 0;let Z=0;for(let X of await SB(Y)){if((await yB(X,Y)).cwd!==J)continue;try{let{mtimeMs:f}=await Y.stat(QZ.join(X,"events.jsonl"));if(f>Z)Z=f}catch{}}return Z}async function NF(J,Y=aZ){let Z=await bF(J,Y);if(!Z)return{messages:[]};let X=await Y.readFile(QZ.join(Z,"events.jsonl")).catch(()=>""),G=EF(X,J);return{messages:G.messages,...G.usageMetrics?{usageMetrics:G.usageMetrics}:{}}}async function v8(J,Y=aZ){return(await NF(J,Y)).messages}async function bF(J,Y=aZ){for(let Z of await SB(Y)){if(QZ.basename(Z)===J)return Z;let X=await yB(Z,Y);if(X.id===J||X.name?.toLowerCase()===J.toLowerCase())return Z}return}async function yB(J,Y=aZ){let Z=await Y.readFile(QZ.join(J,"workspace.yaml")).catch(()=>"");return TF(Z)}function TF(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],f=X[2]??"";if(f.startsWith('"')&&f.endsWith('"'))f=f.slice(1,-1).replace(/\\"/g,'"');Y[G]=f}return{id:Y.id,cwd:Y.cwd,name:Y.name,updatedAt:Y.updated_at,createdAt:Y.created_at}}function EF(J,Y){let Z=[],X=new Map,G=Y,f,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(!CB(H)||typeof H.type!=="string")continue;let K=typeof H.timestamp==="string"?H.timestamp:new Date().toISOString(),j=CB(H.data)?H.data:{};if(H.type==="session.start"){let U=typeof j.sessionId==="string"?j.sessionId:void 0;if(U)G=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,uF),"utf8").toString("utf8");Z.push({role:"user",blocks:[{type:"text",text:U}],timestamp:K,sessionId:G});continue}if(H.type==="assistant.message"){let U=[],L=typeof j.content==="string"?j.content:"";if(L)U.push({type:"text",text:L});let M=Array.isArray(j.toolRequests)?j.toolRequests:[];for(let D of M){if(!CB(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:G});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)X.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=X.get(U)??(typeof j.toolName==="string"?j.toolName:"tool"),M=j.result??(j.success===!1?{success:!1}:void 0);Z.push({role:"assistant",blocks:[{type:"tool_result",callId:U,output:M,isError:j.success===!1}],timestamp:K,sessionId:G});continue}if(H.type==="session.shutdown")f=w8(j)}return{messages:Z,usageMetrics:f,firstUserMessage:Q}}function CB(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var aZ,uF=200;var m8=S(()=>{aZ={copilotDir(){let J=process.env.COPILOT_HOME?.trim();if(J)return J;return QZ.join(IF(),".copilot")},async readdir(J){try{return await SF(J)}catch{return[]}},async readFile(J){return await CF(J,"utf8")},stat:kF,async rm(J){await yF(J,{recursive:!0,force:!0})}}});function kB(J){return a1(J).createHookAdapter()}class vG{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 IB=S(()=>{qZ()});import{readFile as c8}from"fs/promises";class Cz{supportsCompletionMarkers(){return!0}}function d8(J){return a1(J).createTurnDetector()}function PF(J,Y="claude",Z=0){let X=null,G=0;for(let f of J.split(`
36
+ `)){G++;let Q=n8(f);if(!Q)continue;let q=l8(Q.message)?Q.message:Q;if(q.role!=="assistant")continue;if(!("content"in q))continue;let B=i8(Q,Z),H={id:`claude:${Y}:${B}:${G}`,timestampMs:B,source:"claude"};if(!X||H.timestampMs>=X.timestampMs)X=H}return X}function vF(J,Y="codex"){let Z=null,X=0;for(let G of J.split(`
37
+ `)){X++;let f=n8(G);if(!f||f.type!=="turn.completed")continue;let Q=i8(f,0),q={id:`codex:${Y}:${Q}:${X}`,timestampMs:Q,source:"codex"};if(!Z||q.timestampMs>=Z.timestampMs)Z=q}return Z}function n8(J){let Y=J.trim();if(!Y)return null;try{let Z=JSON.parse(Y);return l8(Z)?Z:null}catch{return null}}function i8(J,Y){let Z=typeof J.timestamp==="string"?Date.parse(J.timestamp):Number.NaN;return Number.isFinite(Z)?Z:Y}function l8(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}var wF,NB,hF,bB,Sz;var TB=S(()=>{BB();gB();qZ();wF={listSessionFiles:(J)=>uG(J),readFile:(J)=>c8(J,"utf8")};NB=class NB extends Cz{deps;vendor="claude";cache=new Map;constructor(J=wF){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 f=this.cache.get(G.path),Q;if(f&&G.mtimeMs>0&&f.mtimeMs===G.mtimeMs)Q=f.marker;else{let q=await this.deps.readFile(G.path).catch(()=>"");Q=PF(q,G.path,G.mtimeMs)}if(X.set(G.path,{mtimeMs:G.mtimeMs,marker:Q}),Q&&(!Z||Q.timestampMs>Z.timestampMs))Z=Q}return this.cache=X,Z}};hF={findLatestRollout:(J)=>RB(J),readFile:(J)=>c8(J,"utf8")};bB=class bB extends Cz{deps;vendor="codex";cache=null;constructor(J=hF){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=vF(Z,Y.path);return this.cache={path:Y.path,mtimeMs:Y.mtimeMs,marker:X},X}};Sz=class Sz extends Cz{vendor;constructor(J){super();this.vendor=J}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function lF(J){return{vendor:J,builtin:!1,displayName:J,defaultCommand:[J],history:mF,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new vG(J),createTurnDetector:()=>new Sz(J)}}function a1(J){return e1(J)?iF[J]:lF(J)}var mF,cF,dF,nF,iF;var qZ=S(()=>{HJ();mZ();BB();R8();gB();m8();IB();TB();mF={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},cF={async listSessionIdsForWorktree(J){return[...await uG(J)].sort((Z,X)=>Z.mtimeMs-X.mtimeMs).map((Z)=>Z.sessionId)},readHistory:(J)=>H8(J),latestTranscriptMtimeForWorktree:(J)=>B8(J)},dF={listSessionIdsForWorktree:(J)=>T8(J),readHistory:(J)=>u8(J),latestTranscriptMtimeForWorktree:(J)=>E8(J)},nF={listSessionIdsForWorktree:(J)=>h8(J),readHistory:(J)=>v8(J),latestTranscriptMtimeForWorktree:(J)=>P8(J)},iF={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:cF,detectAccount:(J)=>Kz(J),createHookAdapter:()=>new UB,createTurnDetector:()=>new NB},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:dF,detectAccount:(J)=>Uz(J),createHookAdapter:()=>new vG("codex"),createTurnDetector:()=>new bB},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:nF,detectAccount:(J)=>Lz(J),createHookAdapter:()=>new vG("copilot"),createTurnDetector:()=>new Sz("copilot")}}});function $8(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=T9(Z);return X.length>0?Buffer.from(X,"utf8").toString("utf8"):X}async function NX(J,Y=T1){if(!J)return"";let{history:Z}=a1(Y),X=await Z.listSessionIdsForWorktree(J);for(let G of X.slice(0,$F)){let f=$8(await Z.readHistory(G));if(f)return f}return""}async function a8(J,Y){if(!Y)return"";try{return $8(await a1(J).history.readHistory(Y))}catch{return""}}var $F=8;var yz=S(()=>{qZ();xJ()});function bX(J,Y,Z){if(!Y)return J;let X=AX(Y);return X.ensureReady(),X.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 mG="@kobe_remote";var TX=S(()=>{$J();KY()});var PB={};j1(PB,{windowCount:()=>_F,tmuxSessionName:()=>K1,tmuxCommandSequence:()=>uB,tmuxAvailable:()=>LY,tmuxArgs:()=>pZ,tagPaneRole:()=>r8,tagClaudePane:()=>oF,switchClientBeforeKill:()=>MY,setWindowOption:()=>_Z,setSessionOption:()=>xX,sessionExists:()=>G1,sendKeys:()=>Nz,sendKeyName:()=>nG,runTmuxSequenceCapturing:()=>cG,runTmuxSequence:()=>x1,runTmuxCapturing:()=>n0,runTmux:()=>u0,paneIdByRole:()=>wB,newWindow:()=>sJ,killSession:()=>vJ,globalTasksPaneWidth:()=>Iz,getSessionOptions:()=>KJ,getSessionOption:()=>kz,getServerOptions:()=>BZ,getServerOption:()=>_8,ensureFallbackSession:()=>bz,currentSessionName:()=>UJ,claudePaneIdStrict:()=>wX,claudePaneId:()=>hB,capturePaneById:()=>hX,attachArgv:()=>uX,PANE_ROLE_OPTION:()=>dG,KOBE_TMUX_SOCKET:()=>oJ,KOBE_HOME_SESSION:()=>o8,CLAUDE_ROLE_OPTION:()=>rF,CHAT_TAB_SESSION_ID_OPTION:()=>DY});import{homedir as aF}from"os";function pZ(...J){return["tmux","-L",oJ,...J]}function K1(J){return`kobe-${J.replace(/[^A-Za-z0-9_-]/g,"")}`}function uX(J){return pZ("attach-session","-t",`=${J}`)}async function EB(J){if(!J)return"";try{return await new Response(J).text()}catch{return""}}async function u0(J){try{let Y=Bun.spawn(pZ(...J),{stdin:"ignore",cwd:EX,stdout:"ignore",stderr:"pipe"}),[Z,X]=await Promise.all([EB(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 pF(J){try{return await Bun.spawn(pZ(...J),{stdin:"ignore",cwd:EX,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function uB(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 x1(J){let Y=uB(J);return Y.length===0?0:u0(Y)}async function n0(J){try{let Y=Bun.spawn(pZ(...J),{stdin:"ignore",cwd:EX,stdout:"pipe",stderr:"pipe"}),[Z,X,G]=await Promise.all([EB(Y.stdout),EB(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 cG(J){let Y=uB(J);return Y.length===0?{code:0,stdout:""}:n0(Y)}async function LY(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:EX,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function G1(J){return await pF(["has-session","-t",`=${J}`])===0}async function _F(J){let{code:Y,stdout:Z}=await n0(["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 xX(J,Y,Z){await u0(["set-option","-t",J,Y,Z])}async function kz(J,Y){let{code:Z,stdout:X}=await n0(["show-options","-v","-t",J,Y]);return Z===0?X.trim():""}async function KJ(J,Y){let Z=Object.fromEntries(Y.map((f)=>[f,void 0])),{code:X,stdout:G}=await cG(Y.map((f)=>["show-options","-q","-t",J,f]));if(X!==0)return Z;for(let f of G.split(`
39
+ `)){let Q=f.indexOf(" ");if(Q<=0)continue;let q=f.slice(0,Q);if(q in Z)Z[q]=f.slice(Q+1).trim()}return Z}async function _8(J){let{code:Y,stdout:Z}=await n0(["show-options","-sqv",J]);return Y===0?Z.trim():""}async function BZ(J){let Y=Object.fromEntries(J.map((G)=>[G,void 0])),{code:Z,stdout:X}=await cG(J.map((G)=>["show-options","-sq",G]));if(Z!==0)return Y;for(let G of X.split(`
40
+ `)){let f=G.indexOf(" ");if(f<=0)continue;let Q=G.slice(0,f);if(Q in Y)Y[Q]=G.slice(f+1).trim()}return Y}async function Iz(){let J=await _8(vY),Y=Number.parseInt(J,10);return Number.isFinite(Y)&&Y>0?nZ(Y):cZ}async function r8(J,Y){await u0(["set-option","-p","-t",J,dG,Y])}async function _Z(J,Y,Z){await u0(["set-window-option","-t",J,Y,Z])}async function oF(J){await r8(J,xB)}async function wB(J,Y,Z=!1){let{code:X,stdout:G}=await n0(["list-panes","-t",`=${J}`,"-F",`#{pane_id} #{${dG}}`]);if(X!==0)return"";let f="";for(let Q of G.split(`
41
+ `)){let[q,B]=Q.split("\t");if(!q)continue;if(!f)f=q.trim();if(B?.trim()===Y)return q.trim()}return Z?f:""}async function hB(J){return wB(J,xB,!0)}async function wX(J){return wB(J,xB,!1)}async function hX(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 n0(Z);return X===0?G:""}async function Nz(J,Y){await u0(["send-keys","-t",J,"-l","--",Y])}async function nG(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);Z.push(Y.command),await u0(Z)}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:X}=await n0(J),G=X.trim();return Z===0&&G.length>0?G:null}async function vJ(J){if(!J.startsWith("kobe-hidden-")){let Y=wG(J);if(await G1(Y))await u0(["kill-session","-t",`=${Y}`])}if(await G1(J))await u0(["kill-session","-t",`=${J}`])}async function bz(){let J=o8;if(await G1(J)){if(await kz(J,p8)==="tasks")return J;await u0(["kill-session","-t",`=${J}`])}let Z=(await n0(["new-session","-d","-s",J,"-c",EX,"-x","220","-y","50","-P","-F","#{pane_id}",U8()])).stdout.trim();if(Z){let X=await Iz(),f=(await n0(["split-window","-h","-b","-t",Z,"-l",`${X}`,"-c",EX,"-P","-F","#{pane_id}",VJ(YJ()+zZ(S1()))])).stdout.trim();if(f)await x1([["set-option","-p","-t",f,dG,"tasks"],["select-pane","-t",f]])}return await xX(J,p8,"tasks"),J}async function MY(J,Y){if(await UJ()!==J)return;if(Y&&Y!==J&&await G1(Y)){await u0(["switch-client","-t",`=${Y}`]);return}let X=await bz();await u0(["switch-client","-t",`=${X}`])}var oJ,EX,dG="@kobe_role",rF,xB="claude",DY="@kobe_session_id",o8="kobe-home",p8="@kobe_home";var w1=S(()=>{wY();TX();KY();oJ=process.env.KOBE_TMUX_SOCKET?.trim()||"kobe";EX=aF()||"/";rF=dG});async function sF(J,Y=s8){let{code:Z,stdout:X}=await Y.capture(["list-windows","-t",`=${J}`,"-F",`#{window_index} #{automatic-rename} #{${DY}}`]);if(Z!==0)return[];let G=[];for(let f of X.split(`
42
+ `)){let[Q,q,B]=f.split("\t"),H=Number.parseInt((Q??"").trim(),10);if(!Number.isInteger(H))continue;G.push({index:H,sessionId:B?.trim()??"",autoRename:q?.trim()??""})}return G}async function tF(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 eF(J){let{code:Y,stdout:Z}=await J.capture(["show-window-options","-g","automatic-rename"]);return Y===0&&/\boff\b/.test(Z)}async function J3(J,Y,Z,X){return await X.run(["rename-window","-t",`=${J}:${Y}`,"--",Z])===0}async function t8(J,Y=Y3){let Z=0,X=null,G=async(f,Q)=>{if(Q.autoRename==="1")return!1;if(Q.autoRename==="0"){if(X===null)X=await eF(Y.runner);if(!X)return!0}return tF(f,Q.index,Y.runner)};for(let f of J.listTasks()){if(f.archived||f.kind==="main"||!f.worktreePath)continue;let Q=K1(f.id),q=await sF(Q,Y.runner);if(q.length===0)continue;let B=q.reduce((K,j)=>Math.min(K,j.index),Number.POSITIVE_INFINITY),H=f.vendor??T1;for(let K of q)try{if(await G(Q,K))continue;let j=K.sessionId?await Y.titleFromSessionId(H,K.sessionId):K.index===B?await Y.titleFromWorktree(f.worktreePath,H):"";if(j&&await J3(Q,K.index,j,Y.runner))Z++}catch{}}return Z}var s8,Y3;var e8=S(()=>{yz();w1();xJ();s8={capture:n0,run:u0};Y3={runner:s8,titleFromSessionId:a8,titleFromWorktree:NX}});function Y5(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 J5(J,Y,Z=new Date){let X=Y5(Y);return`[${Z.toISOString()}] daemon ${J}: ${X.stack??`${X.name}: ${X.message}`}
43
+ `}function Z3(J,Y,Z=new Date){let X=Y5(Y);return`[${Z.toISOString()}] daemon error [${J}]: ${X.stack??`${X.name}: ${X.message}`}
44
+ `}function v1(J,Y){process.stderr.write(Z3(J,Y))}function X3(J,Y,Z=new Date){return`[${Z.toISOString()}] daemon [${J}]: ${Y}
45
+ `}function HZ(J,Y){process.stderr.write(X3(J,Y))}function Z5(J=(Y)=>process.stderr.write(Y)){if(vB||mB)return;vB=(Y)=>J(J5("unhandledRejection",Y)),mB=(Y)=>J(J5("uncaughtException",Y)),process.on("unhandledRejection",vB),process.on("uncaughtException",mB)}var vB,mB;async function G3(J,Y=NX){let Z=[];for(let X of J.listTasks()){if(X.archived||X.title!==jY||!X.worktreePath)continue;try{let G=await Y(X.worktreePath,X.vendor??T1);if(!G)continue;let f=J.getTask(X.id);if(!f||f.title!==jY)continue;await J.setTitle(X.id,G),Z.push({id:X.id,title:G})}catch(G){v1("auto-title-poller",G)}}return Z}function X5(J,Y=cB,Z){if(Y<=0)return()=>{};let X=!1,f=setInterval(()=>{if(Z&&!Z())return;if(X)return;X=!0,G3(J).then(()=>t8(J)).catch((Q)=>v1("auto-title-poller",Q)).finally(()=>{X=!1})},Y);return f.unref?.(),()=>clearInterval(f)}var cB=4000;var G5=S(()=>{yz();NG();e8();xJ()});class dB{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 Tz(){return $1()[rZ]===!0}var rZ="experimental.autoStatus";var iG=S(()=>{FX()});async function f5(J,Y,Z=Tz){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 z5=S(()=>{iG()});import{createHash as f3}from"crypto";import{homedir as z3}from"os";import WZ from"path";function j3(){return WZ.join(process.env.KOBE_HOME_DIR??z3(),".kobe")}function W3(J){let Z=(WZ.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",X=f3("sha1").update(WZ.resolve(J)).digest("hex").slice(0,12);return`${Z}-${X}`}function V3(J){if(!WZ.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return WZ.join(j3(),Q3,W3(J))}function K3(J){if(!WZ.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[V3(J),...H3.map((Y)=>WZ.join(J,Y))]}function jZ(J){return J.length>1&&J.endsWith("/")?J.slice(0,-1):J}function Q5(J,Y){return Y===J||Y.startsWith(`${J}/`)}function q5(J,Y){let Z=jZ(Y),X,G=-1;for(let f of J){if(!f.worktreePath)continue;let Q=jZ(f.worktreePath);if(Q5(Q,Z)&&Q.length>G)G=Q.length,X=f.id}return X}function nB(J,Y){let Z=jZ(Y),X,G=-1;for(let f of J){if(!f.repo)continue;let Q=jZ(f.repo);if(Q5(Q,Z)&&Q.length>G)G=Q.length,X=Q}return X}function B5(J,Y){let Z=jZ(Y),X=new Set,G=new Set;for(let f of J){if(f.repo)X.add(jZ(f.repo));if(f.worktreePath)G.add(jZ(f.worktreePath))}for(let f of X)for(let Q of K3(f).map(jZ)){let q=`${Q}/`;if(!Z.startsWith(q))continue;let H=Z.slice(q.length).split("/")[0];if(!H)continue;let K=`${q}${H}`;if(G.has(K))return;return{repo:f,worktreePath:K}}return}var Q3="worktrees",q3=".kobe/worktrees",B3=".claude/worktrees",H3;var H5=S(()=>{H3=[q3,B3]});function $B(J){return{message:J instanceof Error?J.message:String(J),name:J instanceof Error?J.name:void 0}}async function lG(J,Y,Z,X){let G=J.get(Y);if(!G)throw Error(`unknown daemon request: ${Y}`);return G.handle(aB(Z),X)}function $G(){return new Map([{name:"hello",handle(Y,Z){let X=typeof Y.protocolVersion==="number"?Y.protocolVersion:wJ,G=typeof Y.minProtocolVersion==="number"?Y.minProtocolVersion:X;if(!Xz({localVersion:wJ,localMin:ZZ,remoteVersion:X,remoteMin:G}))throw Error(`daemon is protocol v${wJ} (min v${ZZ}); this client is v${X} (min v${G}). Upgrade your kobe.`);return{protocolVersion:wJ,minProtocolVersion:ZZ,kobeVersion:d0,capabilities:[...ZB],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:d0,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 X=D1(Y,"taskId"),G=Z.orch.getTask(X);if(!G)throw Error(`task not found: ${X}`);return{task:rJ(G)}}},{name:"task.create",async handle(Y,Z){let X=D1(Y,"repo"),G=await Z.orch.createTask({repo:X,title:mJ(Y,"title"),branch:mJ(Y,"branch"),baseRef:mJ(Y,"baseRef"),vendor:lB(Y,"vendor"),modelEffort:mJ(Y,"effort")});return{taskId:G.id,task:rJ(G)}}},{name:"task.archive",async handle(Y,Z){let X=D1(Y,"taskId");return await Z.orch.setArchived(X,iB(Y,"archived")),{}}},{name:"task.rename",async handle(Y,Z){let X=D1(Y,"taskId");return await Z.orch.setTitle(X,D1(Y,"title")),{}}},{name:"task.setBranch",async handle(Y,Z){let X=D1(Y,"taskId");return await Z.orch.setBranch(X,D1(Y,"branch")),{}}},{name:"task.setVendor",async handle(Y,Z){let X=D1(Y,"taskId"),G=lB(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=D1(Y,"taskId");return await Z.orch.deleteTask(X,{force:iB(Y,"force")}),Z.activity.clearTask(X),{}}},{name:"task.pin",async handle(Y,Z){let X=D1(Y,"taskId");return await Z.orch.setPinned(X,iB(Y,"pinned")),{}}},{name:"task.move",async handle(Y,Z){let X=D1(Y,"taskId"),G=D1(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=D1(Y,"taskId"),G=D1(Y,"status");if(!$W(G))throw Error("status must be a TaskStatus");let f=G==="done"?Z.orch.getTask(X):void 0,Q=f?.status;if(await Z.orch.setStatus(X,G),G==="done"&&Q!=="done"&&f)try{let q=await Z.issues.mirrorTaskDone(f.repo,X);if(q)Z.bus.publish("issue.snapshot",q)}catch(q){v1("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((f)=>{if(typeof f!=="object"||f===null)throw Error("each move needs taskId and position");let Q=f,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(G),{}}},{name:"task.ensureMain",async handle(Y,Z){let X=D1(Y,"repo"),G=await Z.orch.ensureMainTask(X);return{task:rJ(G)}}},{name:"task.ensureWorktree",async handle(Y,Z){let X=D1(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=D1(Y,"repo");return{worktrees:await Z.orch.discoverAdoptableWorktrees(X)}}},{name:"worktree.adopt",async handle(Y,Z){let X=await Z.orch.adoptWorktree({repo:D1(Y,"repo"),worktreePath:D1(Y,"worktreePath"),branch:mJ(Y,"branch"),vendor:lB(Y,"vendor"),title:mJ(Y,"title"),ifExists:mJ(Y,"ifExists")==="return"?"return":"error"});return{task:rJ(X)}}},{name:"worktree.reconcile",async handle(Y,Z){let X=D1(Y,"cwd"),G=D1(Y,"worktreePath"),f=nB(Z.orch.listTasks(),X)??nB(Z.orch.listTasks(),G);if(!f)return{adopted:!1};try{return{adopted:!0,taskId:(await Z.orch.adoptWorktree({repo:f,worktreePath:G,ifExists:"return"})).id}}catch(Q){return v1("worktree-created",Q),{adopted:!1}}}},{name:"task.setActive",async handle(Y,Z){let X=mJ(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(D1(Y,"repoRoot"))}},{name:"issue.mutate",async handle(Y,Z){let X=await Z.issues.mutate(D1(Y,"repoRoot"),Y.op);return Z.bus.publish("issue.snapshot",X),X}},{name:"session.deliver",async handle(Y,Z){let X=D1(Y,"taskId"),G=D1(Y,"text"),f=mJ(Y,"source");if(f!==void 0&&f!=="note"&&f!=="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:f??"dispatcher"}),{ok:!0}}},{name:"note.file",async handle(Y,Z){let X=D1(Y,"taskId"),G=D1(Y,"text"),f=Z.orch.getTask(X);if(!f)throw Error(`task not found: ${X}`);let Q=Z.orch.listTasks().find((B)=>(B.kind??"task")==="main"&&B.repo===f.repo&&!B.archived);if(!Q||Q.id===f.id)return{ok:!0,routed:!1};let q=f.title||f.branch||X;return Z.bus.publish("session.deliver",{taskId:Q.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=D1(Y,"kind");if(!Qz(X))throw Error(`unknown engine event kind: ${X}`);let G=mJ(Y,"taskId"),f=mJ(Y,"cwd");if(!G&&f&&X==="session-start"){let B=B5(Z.orch.listTasks(),f);if(B)try{await Z.orch.adoptWorktree({repo:B.repo,worktreePath:B.worktreePath,ifExists:"return"})}catch(H){v1("worktree-autosync",H)}}let Q=G??(f?q5(Z.orch.listTasks(),f):void 0);if(!Q)return{};let q=U3(Y);if(Z.activity.report(Q,X,q),X==="turn-start")f5(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 aB(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 iB(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 lB(J,Y){let Z=mJ(J,Y);return Z&&Z.trim().length>0?Z:void 0}function U3(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 Ez=S(()=>{qz();z5();xJ();zJ();H5();hZ()});import{execFile as L3}from"child_process";import{mkdir as D3,readFile as M3,realpath as j5,rename as F3,stat as O3,writeFile as A3}from"fs/promises";import{homedir as R3}from"os";import{dirname as g3,isAbsolute as C3,join as S3,resolve as W5}from"path";import{promisify as y3}from"util";function k3(J){return(J instanceof Error?J.message:String(J)).includes("not a git repository")}function xz(J=process.env.KOBE_HOME_DIR??R3()){return S3(J,".kobe","issues.json")}function K5(J){return typeof J==="string"&&V5.includes(J)}function I3(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:K5(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 N3(){return{version:1,repos:{}}}function b3(){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 T3(J){let{stdout:Y}=await tB("git",["-C",J,"rev-parse","--git-common-dir"]),Z=Y.trim();return j5(C3(Z)?Z:W5(J,Z))}async function E3(J){let{stdout:Y}=await tB("git",["-C",J,"rev-parse","--show-toplevel"]);return Y.trim()}async function u3(J){let{stdout:Y}=await tB("git",["-C",J,"worktree","list","--porcelain"]),Z=Y.split(/\r?\n/).find((X)=>X.startsWith("worktree "))?.slice(9).trim();return Z?j5(Z):E3(J)}async function pB(J){if(typeof J!=="string"||J.length===0)throw Error("repoRoot is required");let Y=W5(J);if(!(await O3(Y).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[X,G]=await Promise.all([u3(Y),T3(Y)]);return{repoRoot:X,repoKey:G}}catch(X){if(k3(X))throw Error("repoRoot is not a git repository");throw X}}async function _B(J){try{let Y=JSON.parse(await M3(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 f=G;Z[X]={repoRoot:typeof f.repoRoot==="string"?f.repoRoot:"",nextId:typeof f.nextId==="number"?f.nextId:1,issues:Array.isArray(f.issues)?f.issues.map(I3).filter((Q)=>Q!==null):[]}}return{version:1,repos:Z}}catch(Y){if(Y.code==="ENOENT")return N3();throw Y}}async function rB(J,Y){await D3(g3(J),{recursive:!0});let Z=`${J}.tmp`;await A3(Z,`${JSON.stringify(Y,null,2)}
46
+ `,"utf8"),await F3(Z,J)}function oB(J,Y){return{repoRoot:J,exists:Y!==null,nextId:Y?.nextId??1,issues:Y?.issues??[]}}async function sB(J,Y){let X=(uz.get(J)??Promise.resolve()).then(Y),G=X.then(()=>{return},()=>{return});return uz.set(J,G),G.then(()=>{if(uz.get(J)===G)uz.delete(J)}),X}class wz{path;constructor(J=xz()){this.path=J}async list(J){let{repoRoot:Y,repoKey:Z}=await pB(J);return sB(this.path,async()=>{let X=await _B(this.path),G=X.repos[Z]??null;if(G&&G.repoRoot!==Y)G.repoRoot=Y,await rB(this.path,X);return oB(Y,G)})}async mirrorTaskDone(J,Y){let{repoRoot:Z,repoKey:X}=await pB(J);if(!Y)return null;return sB(this.path,async()=>{let G=await _B(this.path),f=G.repos[X];if(!f)return null;let Q=f.issues.find((q)=>q.taskId===Y);if(!Q||Q.status==="done")return null;return Q.status="done",f.repoRoot=Z,await rB(this.path,G),oB(Z,f)})}async mutate(J,Y){let{repoRoot:Z,repoKey:X}=await pB(J);if(!Y||typeof Y!=="object"||Array.isArray(Y)||typeof Y.type!=="string")throw Error("missing op");return sB(this.path,async()=>{let G=await _B(this.path),f=G.repos[X];if(!f)f={repoRoot:Z,nextId:1,issues:[]},G.repos[X]=f;f.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");f.issues=[{id:f.nextId,title:Q.title,status:"open",created:b3(),body:typeof Q.body==="string"?Q.body:""},...f.issues],f.nextId+=1}else if(Q.type==="setStatus"){if(typeof Q.id!=="number")throw Error("setStatus requires a numeric id");if(!K5(Q.status))throw Error(`invalid status: must be one of ${V5.join(", ")}`);let q=f.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=f.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=f.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=f.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=f.issues.filter((B)=>B.id!==Q.id);if(q.length===f.issues.length)throw Error(`no issue #${Q.id}`);f.issues=q}else throw Error(`unknown op type: ${Q.type}`);return await rB(this.path,G),oB(Z,f)})}}var tB,V5,uz;var eB=S(()=>{tB=y3(L3),V5=["open","doing","hold","done"];uz=new Map});import{mkdirSync as x3,watch as w3}from"fs";import{basename as h3,dirname as P3}from"path";function hz(J){if(J.debounceMs<=0)return()=>{};let Y=P3(J.filePath),Z=new Set([h3(J.filePath),...J.matchBasenames??[]]),X=null,G=null,f=null,Q=()=>{try{J.onTrigger()}catch(B){J.onError(B)}},q=()=>{if(X)clearTimeout(X);X=setTimeout(()=>{X=null,Q()},J.debounceMs),X.unref?.()};try{x3(Y,{recursive:!0}),f=w3(Y,(B,H)=>{let K=H===null?null:String(H);if(K!==null&&!Z.has(K))return;q()}),f.on("error",J.onError)}catch(B){J.onError(B)}if(J.pollMs&&J.pollMs>0)G=setInterval(Q,J.pollMs),G.unref?.();return()=>{if(X)clearTimeout(X),X=null;if(G)clearInterval(G),G=null;f?.close(),f=null}}var JH=()=>{};import{homedir as v3}from"os";import{basename as m3,join as c3}from"path";function ZH(J=process.env.KOBE_HOME_DIR??v3()){return c3(J,".kobe","settings","keybindings.yaml")}function U5(J,Y={}){let Z=Y.debounceMs??YH;if(Z<=0)return()=>{};let X=Y.path??ZH(),G=m3(X),f=G.replace(/\.yaml$/,".yml"),Q=0;return J.publish("keybindings",{rev:Q}),hz({filePath:X,matchBasenames:[G,f],debounceMs:Z,onTrigger:()=>{try{Q+=1,J.publish("keybindings",{rev:Q})}catch(B){v1("keybindings-watcher",B)}},onError:(B)=>v1("keybindings-watcher",B)})}var YH=200;var L5=S(()=>{JH()});class XH{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??d3,this.log=J.log??HZ}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 d3=(J,Y)=>{let Z=setTimeout(J,Y);return Z.unref?.(),()=>clearTimeout(Z)};var D5=()=>{};import{readFileSync as n3}from"fs";import{homedir as i3}from"os";import{basename as l3,join as $3}from"path";function fH(J=process.env.KOBE_HOME_DIR??i3()){return $3(J,".config","kobe","state.json")}function M5(J){let Y={};try{let B=JSON.parse(n3(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"&&p3.includes(Y.focusAccent)?Y.focusAccent:null,f=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:X,focusAccent:G,sortMode:f,keysCollapsed:Q,projectFilter:q}}function _3(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 F5(J,Y={}){let Z=Y.debounceMs??GH;if(Z<=0)return()=>{};let X=Y.pollMs??a3,G=Y.statePath??fH(),f=l3(G),Q=M5(G);return J.publish("ui-prefs",Q),hz({filePath:G,matchBasenames:[f],debounceMs:Z,pollMs:X,onTrigger:()=>{try{let B=M5(G);if(_3(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 GH=200,a3=250,p3;var O5=S(()=>{JH();p3=["primary","success","info"]});function zH(){return $1()[oZ]===!0}var oZ="experimental.dispatcher";var Pz=S(()=>{FX()});import{randomUUID as r3}from"crypto";function tJ(J){return`engineCommand.${J}`}function eJ(J){return`engineName.${J}`}function sZ(J){return C1(eJ(J))?.trim()||QH[J]||J}function aG(J){return a1(J??"claude").defaultCommand}function o3(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 LJ(J,Y){let Z=J??"claude",X=C1(tJ(Z))?.trim(),G=(()=>{if(X){let f=o3(X);if(f.length>0)return f}return aG(Z)})();return s3(G,Z,Y)}function s3(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 PX(J,Y){if((Y??"claude")!=="claude")return{argv:J,sessionId:null};if(J.some((X)=>t3.has(X)))return{argv:J,sessionId:null};let Z=r3();return{argv:[...J,"--session-id",Z],sessionId:Z}}function tZ(){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 e3(J,Y=tZ()){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 JO(J,Y=tZ()){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 YO(J,Y=tZ(),Z={}){let X=[];if((Z.status??Tz)())X.push(e3(J,Y));if((Z.notes??zH)())X.push(JO(J,Y));return X.length>0?X.join(`
49
49
 
50
- `):null}function Ez(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 G=$3(Z,pZ(),f);if(!G)return J;return[...J,"--append-system-prompt",G]}function a3(J,Y=pZ()){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 uz(J,Y,Z,f=sB){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",a3(Z)]}var tB,n3;var gJ=y(()=>{NY();ZZ();mG();Tz();D1();QJ();tB=Object.fromEntries(gZ.map((J)=>[J,l1(J).displayName]));n3=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});function uf(J){return _Z.includes(J)?J:"auto"}var _Z,V5,hY="editor.kind",QZ="editor.customCommand",xz="auto";var wz=y(()=>{_Z=["auto","vim","nvim","nano","emacs","custom"],V5=["nvim","vim","emacs","nano"]});function oZ(J){return J==="taskpanel"?"taskpanel":"chattab"}var PY="settings.surface",rZ="chattab";function CJ(J=process.env){return{...J,...eB}}var eB;var qZ=y(()=>{eB={GIT_OPTIONAL_LOCKS:"0"}});async function xf(J,Y,Z={}){if(!J)return{stdout:"",stderr:"worktreePath is required",status:-1};let f=(Z.execForPath??yY)(J),G=Z.timeoutMs&&Z.timeoutMs>0?new AbortController:null,X=!1,Q=G?setTimeout(()=>{X=!0,G.abort()},Z.timeoutMs):null,q;try{q=await f.run(["git",...Y],{cwd:J,env:eB,signal:G?.signal})}catch(B){if(Q)clearTimeout(Q);return{stdout:"",stderr:B instanceof Error?B.message:String(B),status:-1}}if(Q)clearTimeout(Q);if(X&&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 p3(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 K5(J,Y,Z={}){let f=p3(J,Y);if(!f)return null;let G=(Z.execForPath??yY)(J);try{return await G.readFile(f)}catch{return null}}var hz=y(()=>{cJ();qZ()});import{statSync as _3}from"fs";async function iG(J,Y){let Z=await xf(J,Y,{timeoutMs:r3}),f=Z.status??-1;return{ok:f===0,stdout:Z.stdout,stderr:Z.stderr,code:f}}function s3(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 U5(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 G=null,X=f.match(/^\+\+\+ b\/(.*)$/m);if(X&&X[1]!=="/dev/null")G=X[1];else{let Q=f.match(/^diff --git a\/.* b\/(.*)$/m);if(Q)G=Q[1]}if(!G)continue;Y.set(t3(G),f.endsWith(`
52
- `)?f:`${f}
53
- `)}return Y}function t3(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 e3(J,Y,Z){let f=Array(J.length),G=Math.max(1,Math.min(Y,J.length)),X=0;async function Q(){while(X<J.length){let q=X++;f[q]=await Z(J[q],q)}}return await Promise.all(Array.from({length:G},()=>Q())),f}async function JO(J,Y){let Z=await iG(J,["diff","--no-color","--no-index","--","/dev/null",Y]);if(Z.stdout.trim())return Z.stdout.endsWith(`
50
+ `):null}function vz(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=YO(Z,tZ(),X);if(!G)return J;return[...J,"--append-system-prompt",G]}function ZO(J,Y=tZ()){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 mz(J,Y,Z,X=zH){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",ZO(Z)]}var QH,t3;var yJ=S(()=>{wY();qZ();iG();Pz();A1();HJ();QH=Object.fromEntries(NZ.map((J)=>[J,a1(J).displayName]));t3=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});function vX(J){return eZ.includes(J)?J:"auto"}var eZ,A5,dY="editor.kind",VZ="editor.customCommand",cz="auto";var dz=S(()=>{eZ=["auto","vim","nvim","nano","emacs","custom"],A5=["nvim","vim","emacs","nano"]});function YX(J){return J==="taskpanel"?"taskpanel":"chattab"}var nY="settings.surface",JX="chattab";function kJ(J=process.env){return{...J,...qH}}var qH;var KZ=S(()=>{qH={GIT_OPTIONAL_LOCKS:"0"}});async function mX(J,Y,Z={}){if(!J)return{stdout:"",stderr:"worktreePath is required",status:-1};let X=(Z.execForPath??TY)(J),G=Z.timeoutMs&&Z.timeoutMs>0?new AbortController:null,f=!1,Q=G?setTimeout(()=>{f=!0,G.abort()},Z.timeoutMs):null,q;try{q=await X.run(["git",...Y],{cwd:J,env:qH,signal:G?.signal})}catch(B){if(Q)clearTimeout(Q);return{stdout:"",stderr:B instanceof Error?B.message:String(B),status:-1}}if(Q)clearTimeout(Q);if(f&&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 XO(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 R5(J,Y,Z={}){let X=XO(J,Y);if(!X)return null;let G=(Z.execForPath??TY)(J);try{return await G.readFile(X)}catch{return null}}var nz=S(()=>{$J();KZ()});import{statSync as GO}from"fs";async function pG(J,Y){let Z=await mX(J,Y,{timeoutMs:fO}),X=Z.status??-1;return{ok:X===0,stdout:Z.stdout,stderr:Z.stderr,code:X}}function QO(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 g5(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,f=X.match(/^\+\+\+ b\/(.*)$/m);if(f&&f[1]!=="/dev/null")G=f[1];else{let Q=X.match(/^diff --git a\/.* b\/(.*)$/m);if(Q)G=Q[1]}if(!G)continue;Y.set(qO(G),X.endsWith(`
52
+ `)?X:`${X}
53
+ `)}return Y}function qO(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 BO(J,Y,Z){let X=Array(J.length),G=Math.max(1,Math.min(Y,J.length)),f=0;async function Q(){while(f<J.length){let q=f++;X[q]=await Z(J[q],q)}}return await Promise.all(Array.from({length:G},()=>Q())),X}async function HO(J,Y){let Z=await pG(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 L5(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(!wX(f))return Response.json({error:"worktreePath does not exist"},{status:400});if(!yY(f).isRemote)try{if(!_3(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 X=await iG(f,["rev-parse","--is-inside-work-tree"]);if(!X.ok||X.stdout.trim()!=="true")return Response.json({error:`not a git work tree: ${X.stderr.trim()||f}`},{status:500});let[Q,q,B]=await Promise.all([iG(f,["status","--porcelain=v1","-z","--untracked-files=all"]),iG(f,["diff","--no-color"]),iG(f,["diff","--no-color","--staged"])]);if(!Q.ok)return Response.json({error:`git status failed: ${Q.stderr.trim()}`},{status:500});let H=U5(q.stdout),K=U5(B.stdout),j=Q.stdout.split("\x00"),U=[],L=[];for(let A=0;A<j.length;A++){let R=j[A];if(!R)continue;let l=R[0]??" ",g=R[1]??" ",S=R.slice(3);if(!S)continue;if(l==="R"||l==="C"||g==="R"||g==="C")A++;let C=l==="?"&&g==="?",k=l!==" "&&l!=="?"?l:g,$=l!==" "&&l!=="?",G0="";if(C)L.push({fileIndex:U.length,path:S});else if(G0=K.get(S)??H.get(S)??"",K.has(S)&&H.has(S))G0=`${K.get(S)}${H.get(S)}`;U.push({path:S,status:C?"untracked":s3(k),staged:$,patch:G0})}if(L.length>0){let A=await e3(L,o3,(R)=>JO(f,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 M=[B.stdout,q.stdout].filter(Boolean).join(`
57
- `),D={files:U,raw:M};return Response.json(D)}var r3=15000,o3=8;var D5=y(()=>{cJ();hz()});import{isAbsolute as YO}from"path";function F5(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function fO(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||!YO(Y))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!F5(Z))return Response.json({error:"invalid vendor"},{status:400});try{let f=l1(Z).history,[G,X]=await Promise.all([f.listSessionIdsForWorktree(Y),f.latestTranscriptMtimeForWorktree(Y)]);return Response.json({sessions:G,latestMtime:X})}catch(f){return Response.json({error:f instanceof Error?f.message:String(f)},{status:500})}}async function XO(J){let Y=J.searchParams.get("vendor")??"claude",Z=J.searchParams.get("sessionId");if(!F5(Y))return Response.json({error:"invalid vendor"},{status:400});if(!fO(Z))return Response.json({error:"invalid sessionId"},{status:400});try{let f=await l1(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 O5(J,Y){if(Y.pathname!==M5&&Y.pathname!==ZO)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Y.pathname===M5?GO(Y):XO(Y)}var M5="/api/history/sessions",ZO="/api/history/messages";var A5=y(()=>{ZZ()});import{mkdir as zO,readFile as QO,writeFile as qO}from"fs/promises";import{join as R5}from"path";function g5(){return R5(_1(),"notes")}function C5(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function S5(J){return R5(g5(),`${J}.md`)}async function HO(J){let Y=J.searchParams.get("taskId");if(!C5(Y))return Response.json({error:"invalid taskId"},{status:400});try{let Z="";try{Z=await QO(S5(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 jO(J){let Y;try{Y=await J.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!C5(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 zO(g5(),{recursive:!0}),await qO(S5(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 y5(J,Y){if(Y.pathname!==BO)return null;if(J.method==="GET")return HO(Y);if(J.method==="PUT")return jO(J);return Response.json({error:"method not allowed"},{status:405})}var BO="/api/notes";var k5=y(()=>{v1()});var wf;var Pz=y(()=>{wf={$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 hf;var vz=y(()=>{hf={$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 Pf;var mz=y(()=>{Pf={$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 vf;var cz=y(()=>{vf={$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 mf;var dz=y(()=>{mf={$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 cf;var nz=y(()=>{cf={$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 df;var iz=y(()=>{df={$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 YH(J,Y,Z=[]){if(Y===void 0)return null;if(typeof Y!=="string")return YH(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 YH(J,f,[...Z,Y])}function JH(J){return Math.max(0,Math.min(255,Math.round(J)))}function lG(J,Y,Z){let f=Number.parseInt(J.slice(1),16),G=Number.parseInt(Y.slice(1),16),X=(q,B)=>q>>B&255;return`#${(JH(X(f,16)+(X(G,16)-X(f,16))*Z)<<16|JH(X(f,8)+(X(G,8)-X(f,8))*Z)<<8|JH(X(f,0)+(X(G,0)-X(f,0))*Z)).toString(16).padStart(6,"0")}`}function OO(J){let Y=(q)=>YH(J,J.theme[q]),Z=Y("background"),f=Y("text");if(!Z||!f)return null;let G=Y("textMuted")??lG(f,Z,0.35),X=Y("primary")??f,Q=Y("border")??lG(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")??lG(Q,f,0.3),fg:f,muted:G,subtle:lG(G,Z,0.35),primary:X,"primary-hover":lG(X,f,0.35),"kobe-orange":X,"kobe-green":Y("success")??f,"kobe-blue":Y("info")??f,"kobe-red":Y("error")??f,"kobe-yellow":Y("warning")??f,"kobe-violet":Y("secondary")??X}}function I5(J,Y){if(Y.pathname!==RO)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:AO})}var FO,AO,RO="/api/themes";var b5=y(()=>{Pz();vz();mz();cz();dz();nz();iz();FO={claude:wf,conductor:hf,dracula:Pf,nord:vf,opencode:mf,"osaka-jade":cf,tokyonight:df};AO=Object.fromEntries(Object.entries(FO).map(([J,Y])=>[J,OO(Y)]).filter((J)=>J[1]!==null))});import{createHash as gO,randomUUID as CO}from"crypto";import{mkdir as SO}from"fs/promises";import{join as ZH,resolve as yO}from"path";function bO(J){return gO("sha1").update(J).digest("hex").slice(0,16)}async function EO(J){let Y=Number.parseInt(J.headers.get("content-length")??"",10);if(Number.isFinite(Y)&&Y>N5)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 G=Z.get("file");if(!(G instanceof File))return Response.json({error:"file must be a File"},{status:400});if(G.size>N5)return Response.json({error:"asset too large"},{status:413});let X=kO[G.type];if(!X)return Response.json({error:`unsupported content-type: ${G.type||"unknown"}`},{status:415});try{let Q=bO(f),q=ZH(Vq(),Q);await SO(q,{recursive:!0});let H=`${CO()}.${X}`;return await Bun.write(ZH(q,H),G),Response.json({url:`${lz}/${Q}/${H}`})}catch(Q){return Response.json({error:Q instanceof Error?Q.message:String(Q)},{status:500})}}async function uO(J){let Y=J.slice(lz.length+1),Z=Y.indexOf("/");if(Z<0)return Response.json({error:"not found"},{status:404});let f=Y.slice(0,Z),G=Y.slice(Z+1);if(!NO.test(f)||!TO.test(G))return Response.json({error:"invalid asset path"},{status:400});let X=Vq(),Q=yO(X,f,G);if(Q!==ZH(X,f,G)||!Q.startsWith(`${X}/`))return Response.json({error:"invalid asset path"},{status:400});let q=G.slice(G.lastIndexOf(".")+1).toLowerCase(),B=IO[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 T5(J,Y){if(Y.pathname===lz){if(J.method==="POST")return EO(J);return Response.json({error:"method not allowed"},{status:405})}if(Y.pathname.startsWith(`${lz}/`)){if(J.method==="GET")return uO(Y.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var lz="/api/issue-assets",N5=10485760,kO,IO,NO,TO;var E5=y(()=>{v1();kO={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},IO={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};NO=/^[a-f0-9]{16}$/,TO=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function u5(J,Y=500){return Response.json({error:J instanceof Error?J.message:String(J)},{status:Y})}function x5(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 xO(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 u5(f,x5(f))}}async function wO(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(G){return u5(G,x5(G))}}async function w5(J,Y,Z){if(Y.pathname!=="/api/issues")return null;if(J.method==="GET")return xO(Z,Y);if(J.method==="POST")return wO(Z,J);return Response.json({error:"method not allowed"},{status:405})}function h5(J){return hO.has(String(J??"").trim().toLowerCase())}function P5(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 PO(J){let Y=P5(J);return Y!==null&&h5(Y)}function v5(J,Y={}){if(!J)return!0;if(PO(J))return!0;let Z=Y.allowedHost?.trim();if(!Z)return!1;let f=P5(J);return f!==null&&f===Z}function m5(J){let Y=String(J??"").trim();return Y&&!h5(Y)?Y:void 0}var hO;var c5=y(()=>{hO=new Set(["localhost","127.0.0.1","::1","[::1]"])});var vO,d5;var n5=y(()=>{vO=["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"],d5=new Set(vO)});var fH={};q1(fH,{resolveRepoInit:()=>$5,resolveEngineLaunchInit:()=>vY});import{existsSync as l5,readFileSync as mO}from"fs";import{join as $z}from"path";function dO(J){return l5($z(J,i5))?`sh ${i5}`:void 0}function nO(J){let Y=$z(J,cO);if(!l5(Y))return;try{let Z=mO(Y,"utf8");return Z.trim().length>0?Z:void 0}catch{return}}function $5(J,Y){let Z=J?Sq(J):{},f=dO(Y)??Z.initScript,G=nO(Y)??Z.initPrompt;return{initScript:f&&f.trim().length>0?f:void 0,initPrompt:G&&G.trim().length>0?G:void 0}}function iO(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 vY(J,Y,Z={kind:"repo-init"}){let f=$5(J,Y);return{initScript:f.initScript,firstMessage:iO(Z,f)}}var i5,cO;var nf=y(()=>{D1();i5=$z(".kobe","init.sh"),cO=$z(".kobe","init-prompt.md")});import{existsSync as a5,readFileSync as lO}from"fs";function p5(){sZ=null}function $O(){let J=U9();if(a5(J))return{canonical:J,found:J};let Y=J.replace(/\.yaml$/,".yml");if(a5(Y))return{canonical:J,found:Y};return{canonical:J,found:null}}function az(){if(sZ)return sZ;let{canonical:J,found:Y}=$O();if(!Y)return sZ={path:J,exists:!1,doc:null,warnings:[]},sZ;let Z=[],f=null;try{let G=lO(Y,"utf8");f=Bun.YAML.parse(G)}catch(G){let X=G instanceof Error?G.message:String(G);Z.push(`could not read/parse ${Y}: ${X}`)}return sZ={path:J,exists:!0,doc:f,warnings:Z},sZ}var sZ=null;var GH=y(()=>{v1()});function lf(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 tO(J,Y){let Z=J.trim().toLowerCase();if(!Z)return{error:"empty chord"};let f=Z.split("+"),G=f.pop()??"";if(G===""&&f.length>0){if(G="+",f[f.length-1]==="")f.pop()}if(!G)return{error:`"${J}": no key after the modifiers`};let X=new Set;for(let B of f){let H=_O[B];if(!H)return{error:`"${J}": unknown modifier "${B}" (use ctrl / cmd / alt / shift)`};X.add(H)}if(G=rO[G]??G,X.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 Q=sO.filter((B)=>X.has(B)).join("+"),q=Q?`${Q}+${G}`:G;if(G.length>1&&!oO.has(G))return{chord:q,warning:`"${J}": unrecognized key name "${G}" \u2014 the chord may never fire`};return{chord:q}}function pz(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function eO(J){if(J==="darwin")return["darwin","macos","mac"];if(J==="win32")return["win32","windows"];return[J]}function JA(J){if(!pz(J))return null;let Y=J.bindings;if(pz(Y))return Y;return J}function _z(J,Y,Z){let f=[];if(J===null||J===void 0)return{entries:[],warnings:f};if(!pz(J))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let G=new Map,X=[];if(J.bindings!==void 0)if(pz(J.bindings))X.push(J.bindings);else f.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let Q of eO(Y)){let q=J[Q];if(q===void 0)continue;let B=JA(q);if(B)X.push(B);else f.push(`\`${Q}:\` must be a mapping (or contain a \`bindings:\` mapping)`)}for(let Q of X)for(let[q,B]of Object.entries(Q)){if(B===null||B===!1||Array.isArray(B)&&B.length===0){G.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=tO(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}G.set(q,K)}return{entries:Array.from(G,([Q,q])=>({id:Q,keys:q})),warnings:f}}function YA(J,Y){return J===Y||J==="global"||Y==="global"}function _5(J,Y){let Z=[],f=[];for(let G of Y){let X=J.find((j)=>j.id===G.id);if(!X){Z.push(`${G.id}: unknown binding id (press F1 in kobe for the full list)`);continue}let Q=XH[G.id];if(Q){Z.push(`${G.id}: not customizable \u2014 ${Q}`);continue}if(X.keys.length===0){Z.push(`${G.id}: not customizable \u2014 the key is handled outside the keymap (doc-only row)`);continue}let q=aO[G.id];if(q&&G.keys.length>0){let j=q.validateCount(G.keys.length);if(j){Z.push(`${G.id}: ${j} \u2014 keeping the default`);continue}}let B=G.keys.filter((j)=>{if(j.length===1&&pO.has(X.scope))return Z.push(`${G.id}: "${j}" dropped \u2014 a bare character on a ${X.scope}-scope binding would steal typed input (add a modifier)`),!1;return!0});if(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 H=X.keys,K=X;if(K.keys=B,X.hint)if(B.length===0)K.hint=void 0;else X.hint.keys=B.join("/");f.push({id:G.id,keys:B,defaultKeys:H})}for(let G of f)for(let X of G.keys){let Q=J.find((q)=>q.id===G.id);if(!Q)continue;for(let q of J){if(q.id===G.id)continue;if(!q.keys.includes(X))continue;if(!YA(Q.scope,q.scope))continue;Z.push(`${G.id}: "${X}" also fires ${q.id} (${q.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:f,warnings:Z}}var XH,aO,pO,_O,rO,oO,sO;var rz=y(()=>{XH={"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)"};aO={"sidebar.nav":lf("down","up"),"files.nav":lf("down","up"),"sidebar.search.nav":lf("down","up"),"files.hierarchy":lf("collapse","expand"),"sidebar.view":lf("previous view","next view"),"files.tab":lf("previous tab","next tab")},pO=new Set(["global","workspace","terminal"]),_O={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},rO={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},oO=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}`)]),sO=["ctrl","cmd","alt","shift"]});function $f(J){return J in r5}function Jf(J,Y){let Z=J.split("+"),f=Z.pop()??"";if(f===""&&Z.length>0){if(f="+",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 X;if(f.length===1)X=G.has("shift")?f.toUpperCase():f;else{let B=fA[f];if(!B)return{error:`"${J}": tmux can't bind the key "${f}"`};X=B}let Q=/^f\d+$/.test(f);if(G.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(G.has("ctrl"))q+="C-";if(G.has("alt"))q+="M-";if(G.has("shift"))q+="S-";return{key:q+X}}function s5(){let J={};for(let[Z,f]of Object.entries(eZ)){let G=Jf(f,{allowBare:$f(Z)});if("error"in G)throw Error(`default tmux chord for ${Z} failed to translate: ${G.error}`);J[Z]={chord:f,key:G.key}}let Y=BZ.map((Z)=>{let f=Jf(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 zH(J){let Y=s5(),Z=new Set;for(let f of J){if(!f.id.startsWith("tmux."))continue;if(f.id===KY){if(f.keys.length===0){Y.focus=[null,null,null,null],Z.add(KY);continue}if(f.keys.length!==BZ.length){Y.warnings.push(`${KY}: 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=Jf(H);if("error"in K){Y.warnings.push(`${KY}: ${K.error} \u2014 keeping the default`),B=!1;break}q.push({chord:H,key:K.key})}if(!B)continue;Y.focus=q,Z.add(KY);continue}if(!(f.id in eZ)){Y.warnings.push(`${f.id}: unknown tmux binding id`);continue}let G=f.id;if(f.keys.length===0){Y.binds[G]=null,Z.add(G);continue}if(f.keys.length>1)Y.warnings.push(`${G}: tmux bindings take ONE chord \u2014 using "${f.keys[0]}", ignoring the rest`);let X=f.keys[0],Q=Jf(X,{allowBare:$f(G)});if("error"in Q){Y.warnings.push(`${G}: ${Q.error} \u2014 keeping the default`);continue}if(X!==eZ[G])Z.add(G);Y.binds[G]={chord:X,key:Q.key}}return Y.overridden=Z,Y}function QH(J){return J.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function t5(){tZ=null}function oz(){if(tZ)return tZ;let J=az();if(!J.exists||J.doc===null)return tZ=s5(),tZ;let Y=_z(J.doc,process.platform,{chordOptsFor:QH}),Z=Y.warnings.filter((G)=>G.startsWith("tmux.")),f=zH(Y.entries);f.warnings=[...Z,...f.warnings];for(let G of f.warnings)console.warn(`[kobe/keybindings] ${G}`);return tZ=f,tZ}var ZA,r5,o5,eZ,KY="tmux.focus",BZ,fA,tZ=null;var sz=y(()=>{GH();rz();ZA={"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"},r5={"tmux.layout.workspaceSplit":"s","tmux.layout.workspaceClose":"x","tmux.layout.workspaceReset":"r","tmux.layout.tasksToggle":"a","tmux.layout.opsToggle":"o","tmux.layout.terminalToggle":"z"},o5=["F6","F7","F8","F9","F10","F11"],eZ={...ZA,...r5};BZ=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],fA={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 $G(J,Y){let Z=null;for(let G=0;G<24;G++){let X=await Nf(J);if(X){if(!Y)return{pane:X,ready:!0};let Q=(await Tf(X)).trim();if(Q.length>0&&Q===Z)return{pane:X,ready:!0};Z=Q}await GA(250)}return{pane:await Nf(J)||await kB(J),ready:!1}}async function aG(J,Y){let Z=`kobe-api-${J.replace(/[^A-Za-z0-9]/g,"")}`;await E0(["set-buffer","-b",Z,"--",Y]),await E0(["paste-buffer","-p","-d","-b",Z,"-t",J]),await vG(J,"Enter")}async function e5(J,Y){let{pane:Z}=await $G(J,!0);if(!Z)return;await aG(Z,Y.text)}var GA=(J)=>new Promise((Y)=>setTimeout(Y,J));var tz=y(()=>{E1()});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 Y7;var Z7=y(()=>{Pz();vz();mz();cz();dz();nz();iz();Y7={claude:wf,conductor:hf,nord:vf,opencode:mf,dracula:Pf,tokyonight:df,"osaka-jade":cf}});function XA(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,G,X]=Z;return`#${f}${f}${G}${G}${X}${X}`.toLowerCase()}return`#${Z.slice(0,6)}`.toLowerCase()}function f7(J,Y,Z="dark"){let f=J.defs??{};function G(Q,q){if(typeof Q==="string"){if(Q==="transparent"||Q==="none")return null;if(Q.startsWith("#"))return XA(Q);if(q.includes(Q))return null;let H=f[Q]??J.theme[Q];if(H===void 0)return null;return G(H,[...q,Q])}if(!Q||typeof Q!=="object")return null;let B=Q[Z];return typeof B==="string"?G(B,q):null}let X=J.theme[Y];if(X===void 0)return null;return G(X,[Y])}function ez(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function JQ(J){if(!ez(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(!ez(Z))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in Y&&Y.defs!==void 0){if(!ez(Y.defs))return{ok:!1,reason:"`defs` must be an object map"};for(let[f,G]of Object.entries(Y.defs))if(typeof G!=="string")return{ok:!1,reason:`defs.${f} must be a string (hex like "#abc" or a ref name)`}}for(let[f,G]of Object.entries(Z)){if(typeof G==="string")continue;if(!ez(G))return{ok:!1,reason:`theme.${f} must be a string or a { dark, light } object (got ${G===null?"null":Array.isArray(G)?"array":typeof G})`};let X=G;if(typeof X.dark!=="string")return{ok:!1,reason:`theme.${f}.dark must be a string`};if(typeof X.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 qH=()=>{};import{readFileSync as zA,readdirSync as QA}from"fs";import{join as G7}from"path";function af(){return G7(_1(),"themes")}function pG(){let J=af(),Y;try{Y=QA(J)}catch{return[]}let Z=[];for(let f of Y){if(!f.endsWith(".json"))continue;let G=G7(J,f),X;try{let B=zA(G,"utf8");X=JSON.parse(B)}catch(B){let H=B instanceof Error?B.message:String(B);console.warn(`[kobe] skipping user theme ${G}: invalid JSON \u2014 ${H}`);continue}let Q=JQ(X);if(!Q.ok){console.warn(`[kobe] skipping user theme ${G}: ${Q.reason}`);continue}let q=f.slice(0,-5);Z.push({name:q,theme:Q.theme})}return Z}var YQ=y(()=>{v1();qH()});import{readFileSync as qA}from"fs";function HA(){try{let J=JSON.parse(qA(kJ(),"utf8")),Y=typeof J.activeTheme==="string"&&J.activeTheme?J.activeTheme:"claude",Z=typeof J.focusAccent==="string"&&BA.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 jA(J){return pG().find((Z)=>Z.name===J)?.theme??Y7[J]??null}function rJ(J,...Y){for(let Z of Y){let f=f7(J,Z);if(f)return f}return null}function X7(J,Y){let Z=rJ(J,"text"),f=rJ(J,"background"),G=rJ(J,"textMuted","text"),X=rJ(J,"backgroundPanel","background"),Q=rJ(J,"backgroundElement","backgroundPanel","background"),q=rJ(J,"backgroundMenu","backgroundElement","backgroundPanel","background"),B=rJ(J,"selectedListItemText","background"),H=rJ(J,Y,"primary","borderActive","border","text");return{border:rJ(J,"border","text"),activeBorder:H,statusBg:X,statusFg:G,statusMutedFg:G,windowFg:G,currentWindowBg:Q,currentWindowFg:H,activityFg:rJ(J,"info","primary","text"),bellFg:rJ(J,"warning","error","primary","text"),messageBg:q,messageFg:Z,messageCommandFg:H,modeBg:H,modeFg:B??f}}function hJ(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 Q7(J){let Y=hJ({bg:J.statusBg,fg:J.statusFg}),Z=hJ({bg:J.statusBg,fg:J.statusMutedFg}),f=hJ({bg:J.statusBg,fg:J.windowFg});return[{key:"border",option:"pane-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:hJ({fg:J.border})},{key:"active",option:"pane-active-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:hJ({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:hJ({bg:J.currentWindowBg,fg:J.currentWindowFg,attrs:["bold"]})},{key:"activity-window",option:"window-status-activity-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:hJ({bg:J.statusBg,fg:J.activityFg})},{key:"bell-window",option:"window-status-bell-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:hJ({bg:J.statusBg,fg:J.bellFg,attrs:["bold"]})},{key:"last-window",option:"window-status-last-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:hJ({bg:J.statusBg,fg:J.statusFg})},{key:"message",option:"message-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:hJ({bg:J.messageBg,fg:J.messageFg})},{key:"message-command",option:"message-command-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:hJ({bg:J.messageBg,fg:J.messageCommandFg,attrs:["bold"]})},{key:"mode",option:"mode-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:hJ({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 WA(J){let Y=new Set(J.marker.split(",").map((X)=>X.trim()).filter(Boolean)),Z=[],f=[];for(let X of Q7(J.hexes))if(X.value){if((J.current[X.key]??"")!==X.value)Z.push(["set-option",X.setFlag,X.option,X.value]);f.push(X.key)}else if(Y.has(X.key))Z.push(["set-option",X.unsetFlag,X.option]);let G=f.join(",");if(G!==J.marker)Z.push(G?["set-option","-g",BH,G]:["set-option","-gu",BH]);return Z}async function z7(J){let{code:Y,stdout:Z}=await c0(J);return Y===0?Z.trim():""}async function Yf(){try{let J=HA(),Y=J.enabled?jA(J.themeName):null,Z=Y?X7(Y,J.focusAccentSlot):X7({theme:{}},J.focusAccentSlot),f=Q7(Z),[G,...X]=await Promise.all([z7(["show-options","-gqv",BH]),...f.map((B)=>z7(["show-options",B.showFlag,B.option]))]),Q=Object.fromEntries(f.map((B,H)=>[B.key,X[H]??""])),q=WA({marker:G,current:Q,hexes:Z});if(q.length>0)await T1(q)}catch{}}var BH="@kobe_border_theme",BA;var ZQ=y(()=>{v1();E1();Z7();YQ();BA=["primary","success","info"]});var jH={};q1(jH,{recordGen:()=>Zf,isLatestGen:()=>W7,genAgeMs:()=>FA,coalesceLayoutWork:()=>OA,RESIZE_GUARD_MS:()=>MA,LAYOUT_COALESCE_MS:()=>H7});import{createHash as VA,randomUUID as KA}from"crypto";import{mkdirSync as UA,readFileSync as q7,renameSync as LA,writeFileSync as DA}from"fs";import{join as B7}from"path";function j7(){return B7(_1(),"layout-coord")}function HH(J,Y){let Z=VA("sha1").update(J).digest("hex").slice(0,16);return B7(j7(),`${Z}.${Y}`)}function Zf(J,Y){let Z=KA();try{UA(j7(),{recursive:!0});let f=HH(J,Y),G=`${f}.${Z}.tmp`;DA(G,`${Date.now()}
58
- ${Z}`),LA(G,f)}catch{}return Z}function W7(J,Y,Z){try{return q7(HH(J,Y),"utf8").split(`
59
- `)[1]?.trim()===Z}catch{return!0}}function FA(J,Y,Z=Date.now()){try{let f=Number.parseInt(q7(HH(J,Y),"utf8").split(`
60
- `)[0]??"",10);return Number.isFinite(f)?Z-f:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function OA(J,Y,Z,f=H7){let G=Zf(J,Y);if(f>0)await new Promise((X)=>setTimeout(X,f));if(!W7(J,Y,G))return;await Z()}var H7=120,MA=400;var _G=y(()=>{v1()});function RA(J){let Y=[];for(let Z of J.split(`
61
- `)){let f=Z.trim();if(!f)continue;let[G,X,Q,q,B]=f.split("\t");if(!G||!X||!Q)continue;let H=Number.parseInt(B?.trim()??"",10);Y.push({windowId:G.trim(),paneId:X.trim(),role:Q.trim(),version:q?.trim()??"",...Number.isFinite(H)?{paneWidth:H}:{}})}return Y}function V7(J,Y){let Z=new Map;for(let G of J){let X=Z.get(G.windowId)??[];X.push(G),Z.set(G.windowId,X)}let f=[];for(let G of Z.values()){let X=G.find((H)=>H.role==="claude")?.paneId,Q=G.find((H)=>H.role==="tasks"),q=G.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:X&&(Y.vendorChanged||q?.version!==Y.currentVersion);if(q&&B)f.push({role:"ops",paneId:q.paneId,claudePaneId:X??null})}return f}async function WH(J){let{code:Y,stdout:Z}=await c0(["list-panes","-s","-t",`=${J}`,"-F",AA]);if(Y!==0)return null;return RA(Z)}function K7(J,Y){let Z=A1(),f=YJ(),G=[];for(let X of J){let Q=X.role==="tasks"?JZ(Z,{initialTaskId:Y.taskId}):gf({cwd:Y.cwd,taskId:Y.taskId,claudePaneId:X.claudePaneId,cliInvocation:Z,vendor:Y.vendor});G.push(["respawn-pane","-k","-t",X.paneId,"-c",g1(Y.cwd),HJ(f+Q)],["set-option","-p","-t",X.paneId,"@kobe_role",X.role],["set-option","-p","-t",X.paneId,oJ,m0])}return G}async function U7(J,Y,Z,f,G){let X=await WH(J);if(!X)return!1;let Q=X.filter((H)=>H.role==="claude");if(Q.length===0)return!1;let q=g1(Y),B=[];for(let H of Q){let K=Ef(Z,G),j=HJ(Sf(uJ(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,WY,K.sessionId]:["set-window-option","-u","-t",H.paneId,WY])}return await T1(B),!0}async function L7(){let J=await fZ([uY,vZ,xY]),Y=Number.parseInt(J[uY]??"",10),Z=Number.isFinite(Y)&&Y>0?PZ(Y):wZ,f=gA({widthPct:wY(Number.parseInt(J[vZ]??"",10)),heightPct:wY(Number.parseInt(J[xY]??"",10))});return{tasksWidth:Z,rcArgs:f}}function gA(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 D7(){return(await L7()).rcArgs}async function pf(J,Y){Zf(J,"resize");let{tasksWidth:Z,rcArgs:f}=await L7(),G=await WH(J);if(!G)return;let X=[];for(let Q of G)if(Q.role==="tasks"&&Q.paneWidth!==Z)X.push(["resize-pane","-t",Q.paneId,"-x",`${Z}`]);if(f.length>0){for(let Q of G)if(Q.role==="ops")X.push(["resize-pane","-t",Q.paneId,...f])}if(Y)X.push(...K7(V7(G,{currentVersion:m0,force:!1,vendorChanged:Y.vendorChanged}),Y));if(X.length>0)await T1(X)}async function M7(J){if(!await Z1(J))return;await pf(J)}async function rG(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} #{${qY}} #{${RJ}}`]);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 G=Number.parseInt(f[0][3]?.trim()??"",10),X=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",uY,`${PZ(H)}`])}let B=f.find(([H])=>H?.trim()==="ops");if(B&&Number.isFinite(G)&&G>0&&Number.isFinite(X)&&X>0){let H=Number.parseInt(B[1]?.trim()??"",10),K=Number.parseInt(B[2]?.trim()??"",10),j=Number.isFinite(H)?wY(100*H/G):null,U=Number.isFinite(K)?wY(100*K/X):null;if(j!==null)Q.push(["set-option","-s",vZ,`${j}`]);if(U!==null)Q.push(["set-option","-s",xY,`${U}`])}if(Q.length>0)await T1(Q)}function CA(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 F7(J){let{code:Y,stdout:Z}=await c0(["list-panes","-t",`=${J}`,"-F",`#{@kobe_role} #{window_zoomed_flag} #{${qY}} #{${RJ}}`]);if(Y!==0||!CA(Z))return;await rG(J)}async function _f(J){let Y=await jJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor"]),Z=Y["@kobe_worktree"]||process.cwd(),f=Y["@kobe_task"]||void 0,G=Y["@kobe_vendor"]||void 0,X=await WH(J);if(!X)return;let Q=K7(V7(X,{currentVersion:m0,force:!0}),{cwd:Z,taskId:f,vendor:G});if(Q.length>0)await T1(Q);await Yf()}var oJ="@kobe_pane_version",AA;var oG=y(()=>{NY();gJ();cJ();E1();BY();ZQ();XJ();yf();_G();AA=`#{window_id} #{pane_id} #{@kobe_role} #{${oJ}} #{pane_width}`});function GQ(J,Y){return[["bind-key","-n",J,"previous-window"],["bind-key","-n",Y,"next-window"]]}function XQ(J,Y="kill-window"){return["bind-key","-n",J,"if-shell","-F","#{>:#{session_windows},1}",Y,"display-message 'Cannot close the only ChatTab'"]}function zQ(J){return["bind-key","-n",J,"command-prompt","-I","#{window_name}","rename-window -- '%%'"]}function QQ(J){return[["bind-key","-n",J,"command-prompt","-p",fQ],["bind-key","T","command-prompt","-p",fQ]]}function VH(J){return J.startsWith("C-")&&J.length===3?`^${J.slice(2)}`:J}function qQ(J){return`${[J.focusLeft?`${VH(J.focusLeft)} tasks`:null,J.detach?`${VH(J.detach)} detach`:null,J.newTab?`${VH(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 UH(J,Y){let Z=YJ(),f=await Rz(),G=HJ(Y.opsCommand??Z+gf({cwd:Y.cwd,taskId:Y.taskId,claudePaneId:J,cliInvocation:Y.inv,vendor:Y.vendor})),{stdout:X}=await hG([["set-option","-p","-t",J,"@kobe_role","claude"],["set-window-option","-t",J,KH,"idle"],["split-window","-h","-b","-t",J,"-l",`${f}`,"-c",g1(Y.cwd),"-P","-F","tasks=#{pane_id}",HJ(Z+JZ(Y.inv,{initialTaskId:Y.taskId}))],["split-window","-h","-t",J,"-l",`${100-Vz}%`,"-c",g1(Y.cwd),"-P","-F","ops=#{pane_id}",G],["split-window","-v","-l",`${100-EG}%`,"-c",g1(Y.cwd),"-P","-F","shell=#{pane_id}"],["select-pane","-t",J]]),Q=Object.fromEntries(X.split(`
64
- `).map((q)=>q.trim()).filter(Boolean).map((q)=>q.split("=",2)));if(await T1([...Q.tasks?[["set-option","-p","-t",Q.tasks,"@kobe_role",TY]]:[],...Q.tasks?[["set-option","-p","-t",Q.tasks,oJ,m0]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,"@kobe_role",hZ]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,oJ,m0]]:[],...Q.shell?[["set-option","-p","-t",Q.shell,"@kobe_role",EY]]:[]]),Q.ops){let q=await D7();if(q.length>0)await E0(["resize-pane","-t",Q.ops,...q])}}async function O7(J,Y){if(!await Z1(J))return;let Z=await jJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor",wG]),f=Z["@kobe_worktree"]||process.cwd(),G=Z["@kobe_task"]||void 0,X=Z[wG]||void 0,Q=Y??Z["@kobe_vendor"];if(Y)await SA(J,G,Y);let q=VJ(Q),B=Ef(q,Q),H=A1(),j=(await c0(["new-window","-t",`=${J}`,"-c",g1(f),"-P","-F","#{pane_id}",HJ(Sf(uJ(B.argv),X,f))])).stdout.trim();if(!j)return;if(B.sessionId)await iZ(j,WY,B.sessionId);await UH(j,{cwd:f,taskId:G,inv:H,vendor:Q})}async function HQ(J){if(!await Z1(J))return;let Z=(await jJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),f=A1(),X=`${YJ()}${f.map(Y1).join(" ")} settings`;await aJ(J,{cwd:g1(Z),command:X,name:"settings"})}async function jQ(J){if(!await Z1(J))return;let Z=(await jJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),f=A1(),X=`${YJ()}${f.map(Y1).join(" ")} help-page`;await aJ(J,{cwd:g1(Z),command:X,name:"help"})}async function WQ(J,Y){if(!await Z1(J))return;let f=(await jJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=A1(),X=YJ(),Q=Y?` --repo ${Y1(Y)}`:"",q=`${X}${G.map(Y1).join(" ")} new-task${Q}`;await aJ(J,{cwd:g1(f),command:q,name:"new task"})}async function VQ(J){if(!await Z1(J))return;let Z=(await jJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),f=A1(),X=`${YJ()}${H8({cliInvocation:f})}`;await aJ(J,{cwd:g1(Z),command:X,name:"update"})}async function A7(J){if(!await Z1(J))return;let Z=(await jJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),f=A1(),X=`${YJ()}${f.map(Y1).join(" ")} quick-task --session ${Y1(J)}`;await aJ(J,{cwd:g1(Z),command:X,name:"quick task"})}async function SA(J,Y,Z){if(await bf(J,"@kobe_vendor",Z),!Y)return;try{let{connectOrStartDaemon:f}=await Promise.resolve().then(() => (KJ(),DH)),G=await f();try{await G.request("task.setVendor",{taskId:Y,vendor:Z})}finally{G.close()}}catch(f){console.error("[kobe tmux] failed to persist selected engine vendor:",f)}}var fQ,KH="@kobe_tab_state",sG="#{?#{==:#{@kobe_tab_state},running},\u25CF,#{?#{==:#{@kobe_tab_state},done},\u2713,#{?#{==:#{@kobe_tab_state},error},!,#{?#{==:#{@kobe_tab_state},unknown},?,\u25CB}}}} #I:#W",BQ;var LH=y(()=>{NY();gJ();cJ();E1();BY();QJ();XJ();yf();oG();fQ=`engine (${x1.join("/")}/\u2026)`;BQ=sG});function kA(J){let Y=[];for(let Z of J.split(`
65
- `)){let f=Z.trim();if(!f)continue;let[G,X,Q,q,B,H,K]=f.split("\t");if(!G)continue;let j=Number.parseInt(q??"",10),U=Number.parseInt(B??"",10),L=Number.parseInt(H??"",10),M=Number.parseInt(K??"",10);Y.push({paneId:G.trim(),role:X?.trim()??"",active:Q?.trim()==="1",paneWidth:Number.isFinite(j)?j:0,paneHeight:Number.isFinite(U)?U:0,windowWidth:Number.isFinite(L)?L:0,windowHeight:Number.isFinite(M)?M:0})}return Y}function IA(J){let Y=J.find((f)=>f.role===Rf);if(!Y)return{kind:"missing-engine"};let Z=J.filter((f)=>f.role===NG);if(Z.length+1>=GB)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 R7(J){return J.find((Y)=>Y.role===EY)??J.find((Y)=>Y.role==="")}function bA(J){return 100-(wY(J??Number.NaN)??EG)}function NA(J){let Y=Number.parseInt(J??"",10);return Number.isFinite(Y)&&Y>0?Y:void 0}async function UY(J,Y){let Z=Y?.trim()||`=${J}`,{code:f,stdout:G}=await c0(["list-panes","-t",Z,"-F",yA]);return f===0?kA(G):null}async function TA(J){let{code:Y,stdout:Z}=await c0(["list-windows","-t",`=${J}`,"-F","#{window_active}\t#{window_id}"]);if(Y!==0)return"";for(let f of Z.split(`
66
- `)){let[G,X]=f.split("\t");if(G?.trim()==="1"&&X?.trim())return X.trim()}return""}async function KQ(J,Y){let{code:Z,stdout:f}=await c0(["show-options","-wqv","-t",J,Y]);return Z===0?f.trim():""}async function g7(J,Y,Z){await E0(["set-window-option","-t",J,Y,Z])}async function ff(J,Y){await E0(["set-window-option","-u","-t",J,Y])}async function MH(J){let{code:Y,stdout:Z}=await c0(["display-message","-p","-t",J,"#{pane_id}"]);return Y===0&&Z.trim()===J}async function P1(J,Y){await E0(["display-message","-t",J,Y])}async function UQ(J){let Y=await jJ(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 EA(J){let Y=A1(),Z=YJ();return HJ(Z+gf({cwd:J.cwd,taskId:J.taskId,claudePaneId:J.enginePaneId,cliInvocation:Y,vendor:J.vendor}))}async function uA(J,Y){return Y?.trim()||await TA(J)}async function xA(J,Y){let Z=await UY(J,Y);if(!Z)return;let f=IA(Z);if(f.kind==="missing-engine"){await P1(Y,"kobe: no engine pane in this window");return}if(f.kind==="maxed"){await P1(Y,`kobe: workspace split limit is ${GB} panes`);return}let{cwd:G}=await UQ(J),{code:X,stdout:Q}=await c0(["split-window",f.direction,"-t",f.targetPane,"-l","50%","-c",g1(G),"-P","-F","#{pane_id}",HJ("true")]),q=Q.trim();if(X!==0||!q)return;await T1([["set-option","-p","-t",q,"@kobe_role",NG],["select-pane","-t",q]])}async function wA(J,Y){let Z=await UY(J,Y);if(!Z)return;let f=Z.filter((Q)=>Q.role===NG);if(f.length===0){await P1(Y,"kobe: no workspace split to close");return}let X=f.find((Q)=>Q.active)??f[f.length-1];if(!X)return;await E0(["kill-pane","-t",X.paneId])}async function hA(J,Y){let Z=await UY(J,Y);if(!Z)return;let f=Z.filter((G)=>G.role===NG);if(f.length===0){await P1(Y,"kobe: no workspace splits to reset");return}await T1(f.map((G)=>["kill-pane","-t",G.paneId]))}async function C7(){let J=await fZ([uY]);return PZ(NA(J[uY])??wZ)}async function PA(J){let{cwd:Y,taskId:Z}=await UQ(J),f=A1(),G=YJ();return{cwd:Y,command:HJ(G+JZ(f,{initialTaskId:Z}))}}async function vA(J,Y){let Z=await UY(J,Y);if(!Z)return;let f=Z.find((D)=>D.role===hZ);if(f){await E0(["kill-pane","-t",f.paneId]);return}let G=R7(Z),X=Z.find((D)=>D.role===Rf);if(!X){await P1(Y,"kobe: cannot restore file pane in this layout");return}let{cwd:Q,taskId:q,vendor:B}=await UQ(J),H=EA({cwd:Q,taskId:q,vendor:B,enginePaneId:X.paneId}),K=G?["split-window","-v","-b","-t",G.paneId,"-l",`${await mA()}%`,"-c",g1(Q),"-P","-F","#{pane_id}",H]:["split-window","-h","-t",X.paneId,"-l",`${await FH()}%`,"-c",g1(Q),"-P","-F","#{pane_id}",H],{code:j,stdout:U}=await c0(K),L=U.trim();if(j!==0||!L)return;let M=[["set-option","-p","-t",L,"@kobe_role",hZ],["set-option","-p","-t",L,oJ,m0]];if(G?.role==="")M.push(["set-option","-p","-t",G.paneId,"@kobe_role",EY]);await T1(M)}async function mA(){let J=await fZ([xY]);return wY(Number.parseInt(J[xY]??"",10))??EG}async function FH(){let J=await fZ([vZ]);return wY(Number.parseInt(J[vZ]??"",10))??100-Vz}async function S7(){let J=await fZ([xY]);return bA(Number.parseInt(J[xY]??"",10))}async function cA(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((f)=>Number.parseInt(f.trim(),10)).filter((f)=>Number.isFinite(f)))}async function y7(J,Y){let Z=await cA(J),f=z8(Y);while(Z.has(f))f++;return f}async function k7(J){let Y=TG(J);if(await Z1(Y))return Y;return await E0(["new-session","-d","-s",Y,"-n","hidden-panes","-c",g1(process.cwd()),"while :; do sleep 3600; done"]),Y}async function OH(J){let Y=TG(J);if(!await Z1(Y))return;let{code:Z,stdout:f}=await c0(["list-panes","-s","-t",`=${Y}`,"-F","#{@kobe_role}"]);if(Z!==0)return;if(!f.split(`
68
- `).some((X)=>{let Q=X.trim();return Q===EY||Q===TY}))await E0(["kill-session","-t",`=${Y}`])}async function dA(J,Y){await I7(J,Y,qY)}async function nA(J,Y){await I7(J,Y,RJ)}async function I7(J,Y,Z){let f=await KQ(Y,Z);if(!f)return;if(await MH(f))await E0(["kill-pane","-t",f]);await ff(Y,Z)}async function iA(J,Y){await dA(J,Y),await nA(J,Y),await OH(J)}function b7(J){return J.find((Y)=>Y.role===Rf)??J[0]}async function AH(J,Y,Z){let f=b7(Z);if(!f)return await P1(Y,"kobe: cannot restore Tasks pane in this layout"),!1;let G=await C7(),{cwd:X,command:Q}=await PA(J),{code:q,stdout:B}=await c0(["split-window","-h","-b","-t",f.paneId,"-l",`${G}`,"-c",g1(X),"-P","-F","#{pane_id}",Q]),H=B.trim();if(q!==0||!H)return!1;return await T1([["set-option","-p","-t",H,"@kobe_role",TY],["set-option","-p","-t",H,oJ,m0],["select-pane","-t",H]]),await ff(Y,RJ),await P1(Y,"kobe: Tasks pane restored"),!0}async function lA(J,Y,Z){let f=await k7(J),G=await y7(f,Y),{code:X,stdout:Q}=await c0(["break-pane","-d","-s",Z.paneId,"-t",`${f}:${G}`,"-P","-F","#{pane_id}"]),q=Q.trim()||Z.paneId;if(X!==0||!q){await P1(Y,"kobe: could not hide Tasks pane");return}await g7(Y,RJ,q),await P1(Y,"kobe: Tasks pane hidden")}async function N7(J,Y,Z){let f=await UY(J,Y);if(!f)return;if(!await MH(Z)){await ff(Y,RJ);let Q=f.find((q)=>q.role===TY);if(Q){await E0(["select-pane","-t",Q.paneId]);return}await AH(J,Y,f);return}let G=b7(f);if(!G){await P1(Y,"kobe: cannot restore Tasks pane in this layout");return}if(await E0(["join-pane","-h","-b","-s",Z,"-t",G.paneId,"-l",`${await C7()}`])!==0){await P1(Y,"kobe: could not restore Tasks pane");return}await T1([["set-option","-p","-t",Z,"@kobe_role",TY],["set-option","-p","-t",Z,oJ,m0],["select-pane","-t",Z]]),await ff(Y,RJ),await OH(J),await P1(Y,"kobe: Tasks pane restored")}async function $A(J,Y){let Z=await KQ(Y,RJ);if(Z){await N7(J,Y,Z);return}let f=await UY(J,Y);if(!f)return;let G=f.find((X)=>X.role===TY);if(G){await lA(J,Y,G);return}await AH(J,Y,f)}async function aA(J,Y){let Z=await KQ(Y,RJ);if(Z){await N7(J,Y,Z);return}let f=await UY(J,Y);if(!f)return;let G=f.find((X)=>X.role===TY);if(G){await E0(["select-pane","-t",G.paneId]);return}await AH(J,Y,f)}async function pA(J,Y,Z){if(Z.role==="")await E0(["set-option","-p","-t",Z.paneId,"@kobe_role",EY]);let f=await k7(J),G=await y7(f,Y),{code:X,stdout:Q}=await c0(["break-pane","-d","-s",Z.paneId,"-t",`${f}:${G}`,"-P","-F","#{pane_id}"]),q=Q.trim()||Z.paneId;if(X!==0||!q){await P1(Y,"kobe: could not hide terminal pane");return}await g7(Y,qY,q),await P1(Y,"kobe: Terminal pane hidden")}async function T7(J,Y,Z){let f=Z.find((K)=>K.role===hZ),G=Z.find((K)=>K.role===Rf);if(!f&&!G)return await P1(Y,"kobe: cannot restore terminal pane in this layout"),!1;let{cwd:X}=await UQ(J),Q=f?["split-window","-v","-t",f.paneId,"-l",`${await S7()}%`,"-c",g1(X),"-P","-F","#{pane_id}"]:["split-window","-h","-t",G?.paneId??"","-l",`${await FH()}%`,"-c",g1(X),"-P","-F","#{pane_id}"],{code:q,stdout:B}=await c0(Q),H=B.trim();if(q!==0||!H)return!1;return await E0(["set-option","-p","-t",H,"@kobe_role",EY]),await ff(Y,qY),await P1(Y,"kobe: Terminal pane restored"),!0}async function _A(J,Y,Z){let f=await UY(J,Y);if(!f)return;if(!await MH(Z)){await ff(Y,qY),await T7(J,Y,f);return}let G=f.find((H)=>H.role===hZ),X=f.find((H)=>H.role===Rf);if(!G&&!X){await P1(Y,"kobe: cannot restore terminal pane in this layout");return}let Q=G?["join-pane","-v","-s",Z,"-t",G.paneId,"-l",`${await S7()}%`]:["join-pane","-h","-s",Z,"-t",X?.paneId??"","-l",`${await FH()}%`];if(await E0(Q)!==0){await P1(Y,"kobe: could not restore terminal pane");return}await E0(["set-option","-p","-t",Z,"@kobe_role",EY]),await ff(Y,qY),await OH(J),f=await UY(J,Y);let B=f?.find((H)=>H.paneId===Z);if(B)await E0(["select-pane","-t",B.paneId]);await P1(Y,"kobe: Terminal pane restored")}async function rA(J,Y){let Z=await KQ(Y,qY);if(Z){await _A(J,Y,Z);return}let f=await UY(J,Y);if(!f)return;let G=R7(f);if(G){await pA(J,Y,G);return}await T7(J,Y,f)}async function oA(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((f)=>f.trim().length>0).length}async function sA(J,Y){if(await oA(J)<=1){await P1(Y,"Cannot close the only ChatTab");return}await iA(J,Y),await E0(["kill-window","-t",Y])}async function LQ(J,Y,Z={}){if(!await Z1(J))return;let f=await uA(J,Z.windowId);if(!f)return;switch(Y){case"workspace-split":await xA(J,f);return;case"workspace-close":await wA(J,f);return;case"workspace-reset":await hA(J,f);return;case"tasks-toggle":await $A(J,f);return;case"tasks-restore":await aA(J,f);return;case"ops-toggle":await vA(J,f);return;case"terminal-toggle":await rA(J,f);return;case"chat-tab-close":await sA(J,f);return}}var yA="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var RH=y(()=>{NY();cJ();E1();BY();XJ();yf();oG()});var sJ={};q1(sJ,{tmuxWindowSizeArgsForClient:()=>h7,tmuxSessionName:()=>W1,tmuxInitialSizeArgs:()=>u7,tmuxInitialClientSize:()=>CH,tmuxAvailable:()=>jY,switchClientBeforeKill:()=>VY,sessionExists:()=>Z1,selectTasksPane:()=>G2,runLayoutAction:()=>LQ,refreshKobeWorkspacePanes:()=>_f,quickCreate:()=>A7,prepareWindowForSwitch:()=>MQ,prepareWindowForAttach:()=>DQ,parseTmuxClientRows:()=>x7,parseObservedSession:()=>m7,openUpdateTab:()=>VQ,openSettingsTab:()=>HQ,openNewTaskTab:()=>WQ,openHelpTab:()=>jQ,newChatTab:()=>O7,kobeStatusRight:()=>qQ,killSession:()=>xJ,healSessionLayout:()=>M7,focusBindCommand:()=>v7,ensureSession:()=>jZ,currentSessionName:()=>WJ,clientsWithConflictingSize:()=>w7,chatTabSwitchBindings:()=>GQ,chatTabRenameBinding:()=>zQ,chatTabCloseBinding:()=>XQ,chatTabChooseEngineBindings:()=>QQ,captureGlobalLayoutOnDrag:()=>F7,captureGlobalLayout:()=>rG,attachArgv:()=>If,PANE_VERSION_OPTION:()=>oJ,CHAT_TAB_STATUS_FORMAT:()=>sG,CHAT_TAB_STATUS_CURRENT_FORMAT:()=>BQ,CHAT_TAB_STATE_OPTION:()=>KH,CHAT_TAB_ENGINE_PROMPT:()=>fQ});function u7(J=process.stdout,Y=process.env){let Z=CH(J,Y);return Z?["-x",`${Z.columns}`,"-y",`${Z.rows}`]:[]}function CH(J=process.stdout,Y=process.env){let Z=HZ(J.columns)??HZ(Y.COLUMNS),f=HZ(J.rows)??HZ(Y.LINES);return Z&&f?{columns:Z,rows:f}:null}function HZ(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 x7(J){let Y=[];for(let Z of J.split(`
70
- `)){let[f,G,X,Q,q]=Z.split("\t"),B=HZ(X?.trim()),H=HZ(Q?.trim());if(!f?.trim()||!G?.trim()||!B||!H)continue;Y.push({name:f.trim(),session:G.trim(),width:B,height:H,flags:q?.trim()??""})}return Y}function w7(J,Y,Z,f={}){return J.filter((G)=>G.session===Y).filter((G)=>G.name!==f.currentClientName).filter((G)=>G.width!==Z.columns||G.height!==Z.rows).map((G)=>G.name)}function h7(J,Y){let Z=Math.max(1,J.rows-(Y.status?.trim()==="on"?1:0));return["-x",`${J.columns}`,"-y",`${Z}`]}async function P7(J,Y,Z={}){if(!Y)return;let{code:f,stdout:G}=await c0(["list-clients","-t",`=${J}`,"-F",tA]);if(f!==0)return;let X=w7(x7(G),J,Y,Z),Q=[];if(Z.currentClientName)Q.push(["refresh-client","-f","!ignore-size","-t",Z.currentClientName]);for(let q of X)Q.push(["refresh-client","-f","ignore-size","-t",q]);if(Q.length>0)await T1(Q)}async function DQ(J){Zf(J,"resize");let Y=CH();await P7(J,Y);let Z=Y?["-x",`${Y.columns}`,"-y",`${Y.rows}`]:[];if(Z.length>0)await E0(["resize-window","-t",`=${J}`,...Z]);await pf(J)}async function eA(){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,f,G,X]=Y.trim().split("\t"),Q=HZ(f),q=HZ(G),B=Q&&q?{columns:Q,rows:q}:null;return{sizeArgs:B?h7(B,{status:X}):[],clientSize:B,clientName:Z?.trim()||void 0}}async function MQ(J){Zf(J,"resize");let Y=await eA();await P7(J,Y.clientSize,{currentClientName:Y.clientName});let Z=Y.sizeArgs;if(Z.length>0)await E0(["resize-window","-t",`=${J}`,...Z]);await pf(J)}function v7(J,Y,Z){let f=`#{?window_zoomed_flag,1,#{?${J2[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 jZ(J){let Y=gH.get(J.name);if(Y)return Y;let Z=f2(J);gH.set(J.name,Z);try{return await Z}finally{gH.delete(J.name)}}function m7(J){let Y="",Z="",f=!1,G=new Set;for(let X of J.split(`
71
- `)){let[Q,q,B,H,K]=X.split("\t");if(!Q?.trim())continue;if(G.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:G.size}}async function Z2(J){if(!await Z1(J))return null;let{code:Y,stdout:Z}=await c0(["list-panes","-s","-t",`=${J}`,"-F",Y2]);if(Y!==0)return{worktree:"",vendor:"",claudePaneAlive:!1,windowCount:0};return m7(Z)}async function f2(J){let Y=J.launchInit,Z=await Z2(J.name),f=J7(Z,{cwd:J.cwd,vendor:J.vendor,hasEngineCommand:J.command.length>0}),G=p9(J.repo);if(f.kind==="reuse")return await pf(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor}),!0;if(f.kind==="respawn-engine"){if(await U7(J.name,J.cwd,J.command,G,J.vendor)){if(J.vendor)await bf(J.name,"@kobe_vendor",J.vendor);return await pf(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor,vendorChanged:!0}),!0}}if(f.kind==="rebuild"||f.kind==="respawn-engine")await xJ(J.name);let X=A1(),Q=Ef(J.command,J.vendor),q=J.repo!==void 0&&J.cwd===J.repo,B=q||G?void 0:J.taskId,H=q&&!G?J.taskId:void 0,K=uz(Ez(Q.argv,J.vendor,B),J.vendor,H),j=Sf(uJ(K),G,J.cwd),L=(await c0(["new-session","-d","-s",J.name,"-c",g1(J.cwd),...u7(),"-P","-F","#{pane_id}",q8(j,{initScript:G?void 0:Y?.initScript,markerPath:!G&&Y?.initScript?L9(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 iZ(L,WY,Q.sessionId);await T1([...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,wG,G]]:[]]),await UH(L,{cwd:J.cwd,taskId:J.taskId,opsCommand:J.opsCommand,inv:X,vendor:J.vendor});let M=YJ(),D=X.map(Y1).join(" "),A=`${M}${D} new-chattab --session '#{session_name}'`,R=`${A} --vendor '%%'`,l=`run-shell ${Y1(R)}`,g=`${M}${D} focus-tasks --session '#{session_name}' --window '#{window_id}'`,S=`run-shell ${Y1(g)}`,C=(t)=>`${M}${D} layout --session '#{session_name}' --window '#{window_id}' --action ${t}`,k=C("tasks-restore"),$=`run-shell ${Y1(k)}`,G0=C("chat-tab-close"),s=`run-shell ${Y1(G0)}`,J0=`${M}${D} heal-layout --session '#{session_name}'`,E=`run-shell -b ${Y1(J0)}`,Q0=`${M}${D} capture-layout --session '#{session_name}'`,e=`run-shell -b ${Y1(Q0)}`,j0=j8({tmuxSocket:$J}),o=oz(),p=o5.map((t)=>["unbind-key","-n",t]);if(o.overridden.has(KY))for(let t of BZ){let q0=Jf(t);if("key"in q0)p.push(["unbind-key","-n",q0.key])}for(let t of o.overridden){if(t===KY)continue;let q0=eZ[t],M0=$f(t),S0=Jf(q0,{allowBare:M0});if("key"in S0)p.push(M0?["unbind-key",S0.key]:["unbind-key","-n",S0.key])}let _=["-L","-D","-U","-R"],f0=o.focus.flatMap((t,q0)=>{let M0=_[q0],S0=M0==="-L"?$:void 0;return t&&M0?[v7(t.key,M0,S0)]:[]}),a=o.binds,L0=(t,q0)=>{let M0=a[t];return M0?[["bind-key",M0.key,"run-shell",C(q0)]]:[]},m=(...t)=>{let q0=t.map((M0)=>a[M0]?.chord).filter((M0)=>!!M0);return q0.length>0?q0.join("/"):null};await T1([["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",sG],["set-option","-g","window-status-current-format",BQ],["set-option","-g","status-right",qQ({focusLeft:o.focus[0]?.key??null,detach:a["tmux.detach"]?.key??null,newTab:a["tmux.tab.new"]?.key??null,layoutSplits:m("tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"),layoutPanes:m("tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle")})],["set-option","-g","mouse","on"],["set-hook","-g","window-resized",E],["set-hook","-g","window-layout-changed",e],...p,...a["tmux.detach"]?[["bind-key","-n",a["tmux.detach"].key,"if-shell","-F",`#{?#{${RJ}},1,#{==:#{@kobe_role},tasks}}`,"detach-client",S]]:[],...f0,...a["tmux.tab.new"]?[["bind-key","-n",a["tmux.tab.new"].key,"run-shell",A]]:[],...a["tmux.tab.chooseEngine"]?QQ(a["tmux.tab.chooseEngine"].key).map((t)=>[...t,l]):[],...a["tmux.tab.prev"]&&a["tmux.tab.next"]?GQ(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"]?[XQ(a["tmux.tab.close"].key,s)]:[],...a["tmux.tab.rename"]?[zQ(a["tmux.tab.rename"].key)]:[],...L0("tmux.layout.workspaceSplit","workspace-split"),...L0("tmux.layout.workspaceClose","workspace-close"),...L0("tmux.layout.workspaceReset","workspace-reset"),...L0("tmux.layout.tasksToggle","tasks-toggle"),...L0("tmux.layout.opsToggle","ops-toggle"),...L0("tmux.layout.terminalToggle","terminal-toggle"),["bind-key","f","run-shell",`${M}${D} quick-create --session '#{session_name}'`],["bind-key","u","display-popup","-E",j0]]),await Yf(),await E0(["select-pane","-t",L]);let b=Y?.firstMessage;if(b)e5(J.name,b).catch((t)=>console.error("[kobe tmux] first message delivery failed:",t));return!0}async function E7(J,Y,Z){let f=Z?.trim()||`=${J}`,{code:G,stdout:X}=await c0(["list-panes","-t",f,"-F","#{pane_id}\t#{@kobe_role}"]);if(G!==0)return"";for(let Q of X.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 Z1(J))return"";let Z=await E7(J,"tasks",Y.windowId);if(!Z)await LQ(J,"tasks-restore",{windowId:Y.windowId}),Z=await E7(J,"tasks",Y.windowId);if(!Z)return"";return await E0(["select-pane","-t",Z]),Z}var tA="#{client_name}\t#{client_session}\t#{client_width}\t#{client_height}\t#{client_flags}",J2,gH,Y2="#{window_id}\t#{window_active}\t#{@kobe_role}\t#{@kobe_worktree}\t#{@kobe_vendor}";var ZJ=y(()=>{NY();gJ();v1();cJ();E1();sz();tz();BY();ZQ();LH();yf();RH();_G();oG();E1();LH();oG();RH();J2={"-L":"pane_at_left","-D":"pane_at_bottom","-U":"pane_at_top","-R":"pane_at_right"};gH=new Map});async function X2(J,Y){let{task:Z}=await J.request("task.get",{taskId:Y});return Z}async function SH(J,Y){let Z=await X2(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 c7(J,Y){let{task:Z,worktreePath:f}=await SH(J,Y),G=W1(Y);if(!await Z1(G)){let X=vY(Z.repo??"",f,{kind:"repo-init"});if(!await jZ({name:G,cwd:f,command:VJ(Z.vendor,Z.modelEffort),taskId:Y,vendor:Z.vendor,launchInit:X}))throw Error(`failed to start tmux session for ${Y}`)}return{session:G,worktreePath:f}}function z2(J){return Wz(J,{bareSafe:!0})}async function d7(J,Y){let{task:Z,worktreePath:f}=await SH(J,Y),G=Z.kind==="main"?void 0:Y,X=Z.kind==="main"?Y:void 0,Q=[...uz(Ez(VJ(Z.vendor,Z.modelEffort),Z.vendor,G),Z.vendor,X)],q=vY(Z.repo??"",f,{kind:"none"}),B=z2(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 n7(J,Y){let{worktreePath:Z}=await SH(J,Y),f=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:Z,command:[f,"-il"]}}async function i7(J){let Y=W1(J);await VY(Y).catch(()=>{}),await xJ(Y).catch(()=>{})}var l7=y(()=>{gJ();ZB();nf();E1();ZJ()});import{existsSync as Q2}from"fs";import{join as $7,normalize as _7}from"path";function q2(J){let Y=null,Z=null,f=new TextEncoder,G=new ReadableStream({start(X){Y=J((q,B)=>{try{X.enqueue(f.encode(`event: ${q}
56
+ `;return""}async function C5(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(!cf(X))return Response.json({error:"worktreePath does not exist"},{status:400});if(!TY(X).isRemote)try{if(!GO(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 f=await pG(X,["rev-parse","--is-inside-work-tree"]);if(!f.ok||f.stdout.trim()!=="true")return Response.json({error:`not a git work tree: ${f.stderr.trim()||X}`},{status:500});let[Q,q,B]=await Promise.all([pG(X,["status","--porcelain=v1","-z","--untracked-files=all"]),pG(X,["diff","--no-color"]),pG(X,["diff","--no-color","--staged"])]);if(!Q.ok)return Response.json({error:`git status failed: ${Q.stderr.trim()}`},{status:500});let H=g5(q.stdout),K=g5(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!=="?",f0="";if(g)L.push({fileIndex:U.length,path:C});else if(f0=K.get(C)??H.get(C)??"",K.has(C)&&H.has(C))f0=`${K.get(C)}${H.get(C)}`;U.push({path:C,status:g?"untracked":QO(y),staged:$,patch:f0})}if(L.length>0){let O=await BO(L,zO,(A)=>HO(X,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 M=[B.stdout,q.stdout].filter(Boolean).join(`
57
+ `),D={files:U,raw:M};return Response.json(D)}var fO=15000,zO=8;var S5=S(()=>{$J();nz()});import{isAbsolute as jO}from"path";function k5(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function VO(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9._-]+$/.test(J)&&!J.includes("..")}async function KO(J){let Y=J.searchParams.get("worktreePath"),Z=J.searchParams.get("vendor")??"claude";if(!Y||!jO(Y))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!k5(Z))return Response.json({error:"invalid vendor"},{status:400});try{let X=a1(Z).history,[G,f]=await Promise.all([X.listSessionIdsForWorktree(Y),X.latestTranscriptMtimeForWorktree(Y)]);return Response.json({sessions:G,latestMtime:f})}catch(X){return Response.json({error:X instanceof Error?X.message:String(X)},{status:500})}}async function UO(J){let Y=J.searchParams.get("vendor")??"claude",Z=J.searchParams.get("sessionId");if(!k5(Y))return Response.json({error:"invalid vendor"},{status:400});if(!VO(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 I5(J,Y){if(Y.pathname!==y5&&Y.pathname!==WO)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Y.pathname===y5?KO(Y):UO(Y)}var y5="/api/history/sessions",WO="/api/history/messages";var N5=S(()=>{qZ()});import{mkdir as LO,readFile as DO,writeFile as MO}from"fs/promises";import{join as b5}from"path";function T5(){return b5(r1(),"notes")}function E5(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function u5(J){return b5(T5(),`${J}.md`)}async function OO(J){let Y=J.searchParams.get("taskId");if(!E5(Y))return Response.json({error:"invalid taskId"},{status:400});try{let Z="";try{Z=await DO(u5(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 AO(J){let Y;try{Y=await J.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!E5(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 LO(T5(),{recursive:!0}),await MO(u5(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 x5(J,Y){if(Y.pathname!==FO)return null;if(J.method==="GET")return OO(Y);if(J.method==="PUT")return AO(J);return Response.json({error:"method not allowed"},{status:405})}var FO="/api/notes";var w5=S(()=>{c1()});var cX;var iz=S(()=>{cX={$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 dX;var lz=S(()=>{dX={$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 nX;var $z=S(()=>{nX={$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 iX;var az=S(()=>{iX={$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 lX;var pz=S(()=>{lX={$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 $X;var _z=S(()=>{$X={$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 aX;var rz=S(()=>{aX={$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 HH(J,Y,Z=[]){if(Y===void 0)return null;if(typeof Y!=="string")return HH(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 HH(J,X,[...Z,Y])}function BH(J){return Math.max(0,Math.min(255,Math.round(J)))}function _G(J,Y,Z){let X=Number.parseInt(J.slice(1),16),G=Number.parseInt(Y.slice(1),16),f=(q,B)=>q>>B&255;return`#${(BH(f(X,16)+(f(G,16)-f(X,16))*Z)<<16|BH(f(X,8)+(f(G,8)-f(X,8))*Z)<<8|BH(f(X,0)+(f(G,0)-f(X,0))*Z)).toString(16).padStart(6,"0")}`}function bO(J){let Y=(q)=>HH(J,J.theme[q]),Z=Y("background"),X=Y("text");if(!Z||!X)return null;let G=Y("textMuted")??_G(X,Z,0.35),f=Y("primary")??X,Q=Y("border")??_G(X,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")??_G(Q,X,0.3),fg:X,muted:G,subtle:_G(G,Z,0.35),primary:f,"primary-hover":_G(f,X,0.35),"kobe-orange":f,"kobe-green":Y("success")??X,"kobe-blue":Y("info")??X,"kobe-red":Y("error")??X,"kobe-yellow":Y("warning")??X,"kobe-violet":Y("secondary")??f}}function h5(J,Y){if(Y.pathname!==EO)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:TO})}var NO,TO,EO="/api/themes";var P5=S(()=>{iz();lz();$z();az();pz();_z();rz();NO={claude:cX,conductor:dX,dracula:nX,nord:iX,opencode:lX,"osaka-jade":$X,tokyonight:aX};TO=Object.fromEntries(Object.entries(NO).map(([J,Y])=>[J,bO(Y)]).filter((J)=>J[1]!==null))});import{createHash as uO,randomUUID as xO}from"crypto";import{mkdir as wO}from"fs/promises";import{join as jH,resolve as hO}from"path";function mO(J){return uO("sha1").update(J).digest("hex").slice(0,16)}async function nO(J){let Y=Number.parseInt(J.headers.get("content-length")??"",10);if(Number.isFinite(Y)&&Y>v5)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>v5)return Response.json({error:"asset too large"},{status:413});let f=PO[G.type];if(!f)return Response.json({error:`unsupported content-type: ${G.type||"unknown"}`},{status:415});try{let Q=mO(X),q=jH(Rq(),Q);await wO(q,{recursive:!0});let H=`${xO()}.${f}`;return await Bun.write(jH(q,H),G),Response.json({url:`${oz}/${Q}/${H}`})}catch(Q){return Response.json({error:Q instanceof Error?Q.message:String(Q)},{status:500})}}async function iO(J){let Y=J.slice(oz.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(!cO.test(X)||!dO.test(G))return Response.json({error:"invalid asset path"},{status:400});let f=Rq(),Q=hO(f,X,G);if(Q!==jH(f,X,G)||!Q.startsWith(`${f}/`))return Response.json({error:"invalid asset path"},{status:400});let q=G.slice(G.lastIndexOf(".")+1).toLowerCase(),B=vO[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 m5(J,Y){if(Y.pathname===oz){if(J.method==="POST")return nO(J);return Response.json({error:"method not allowed"},{status:405})}if(Y.pathname.startsWith(`${oz}/`)){if(J.method==="GET")return iO(Y.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var oz="/api/issue-assets",v5=10485760,PO,vO,cO,dO;var c5=S(()=>{c1();PO={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},vO={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};cO=/^[a-f0-9]{16}$/,dO=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function d5(J,Y=500){return Response.json({error:J instanceof Error?J.message:String(J)},{status:Y})}function n5(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 lO(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 d5(X,n5(X))}}async function $O(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 d5(G,n5(G))}}async function i5(J,Y,Z){if(Y.pathname!=="/api/issues")return null;if(J.method==="GET")return lO(Z,Y);if(J.method==="POST")return $O(Z,J);return Response.json({error:"method not allowed"},{status:405})}function l5(J){return aO.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 pO(J){let Y=$5(J);return Y!==null&&l5(Y)}function a5(J,Y={}){if(!J)return!0;if(pO(J))return!0;let Z=Y.allowedHost?.trim();if(!Z)return!1;let X=$5(J);return X!==null&&X===Z}function p5(J){let Y=String(J??"").trim();return Y&&!l5(Y)?Y:void 0}var aO;var _5=S(()=>{aO=new Set(["localhost","127.0.0.1","::1","[::1]"])});var _O,r5;var o5=S(()=>{_O=["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"],r5=new Set(_O)});var WH={};j1(WH,{resolveRepoInit:()=>e5,resolveEngineLaunchInit:()=>iY});import{existsSync as t5,readFileSync as rO}from"fs";import{join as sz}from"path";function sO(J){return t5(sz(J,s5))?`sh ${s5}`:void 0}function tO(J){let Y=sz(J,oO);if(!t5(Y))return;try{let Z=rO(Y,"utf8");return Z.trim().length>0?Z:void 0}catch{return}}function e5(J,Y){let Z=J?xq(J):{},X=sO(Y)??Z.initScript,G=tO(Y)??Z.initPrompt;return{initScript:X&&X.trim().length>0?X:void 0,initPrompt:G&&G.trim().length>0?G:void 0}}function eO(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 X=e5(J,Y);return{initScript:X.initScript,firstMessage:eO(Z,X)}}var s5,oO;var pX=S(()=>{A1();s5=sz(".kobe","init.sh"),oO=sz(".kobe","init-prompt.md")});import{existsSync as J7,readFileSync as JA}from"fs";function Y7(){ZX=null}function YA(){let J=gW();if(J7(J))return{canonical:J,found:J};let Y=J.replace(/\.yaml$/,".yml");if(J7(Y))return{canonical:J,found:Y};return{canonical:J,found:null}}function tz(){if(ZX)return ZX;let{canonical:J,found:Y}=YA();if(!Y)return ZX={path:J,exists:!1,doc:null,warnings:[]},ZX;let Z=[],X=null;try{let G=JA(Y,"utf8");X=Bun.YAML.parse(G)}catch(G){let f=G instanceof Error?G.message:String(G);Z.push(`could not read/parse ${Y}: ${f}`)}return ZX={path:J,exists:!0,doc:X,warnings:Z},ZX}var ZX=null;var VH=S(()=>{c1()});function _X(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 qA(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 f=new Set;for(let B of X){let H=GA[B];if(!H)return{error:`"${J}": unknown modifier "${B}" (use ctrl / cmd / alt / shift)`};f.add(H)}if(G=fA[G]??G,f.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 Q=QA.filter((B)=>f.has(B)).join("+"),q=Q?`${Q}+${G}`:G;if(G.length>1&&!zA.has(G))return{chord:q,warning:`"${J}": unrecognized key name "${G}" \u2014 the chord may never fire`};return{chord:q}}function ez(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function BA(J){if(J==="darwin")return["darwin","macos","mac"];if(J==="win32")return["win32","windows"];return[J]}function HA(J){if(!ez(J))return null;let Y=J.bindings;if(ez(Y))return Y;return J}function JQ(J,Y,Z){let X=[];if(J===null||J===void 0)return{entries:[],warnings:X};if(!ez(J))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let G=new Map,f=[];if(J.bindings!==void 0)if(ez(J.bindings))f.push(J.bindings);else X.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let Q of BA(Y)){let q=J[Q];if(q===void 0)continue;let B=HA(q);if(B)f.push(B);else X.push(`\`${Q}:\` must be a mapping (or contain a \`bindings:\` mapping)`)}for(let Q of f)for(let[q,B]of Object.entries(Q)){if(B===null||B===!1||Array.isArray(B)&&B.length===0){G.set(q,[]);continue}let H=typeof B==="string"?[B]:Array.isArray(B)?B:null;if(!H){X.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"){X.push(`${q}: chord entries must be strings`),j=!0;continue}let L=qA(U,Z?.chordOptsFor?.(q));if("error"in L){X.push(`${q}: ${L.error}`),j=!0;continue}if(L.warning)X.push(`${q}: ${L.warning}`);if(!K.includes(L.chord))K.push(L.chord)}if(K.length===0&&j){X.push(`${q}: no valid chords \u2014 keeping the default`);continue}G.set(q,K)}return{entries:Array.from(G,([Q,q])=>({id:Q,keys:q})),warnings:X}}function jA(J,Y){return J===Y||J==="global"||Y==="global"}function Z7(J,Y){let Z=[],X=[];for(let G of Y){let f=J.find((j)=>j.id===G.id);if(!f){Z.push(`${G.id}: unknown binding id (press F1 in kobe for the full list)`);continue}let Q=KH[G.id];if(Q){Z.push(`${G.id}: not customizable \u2014 ${Q}`);continue}if(f.keys.length===0){Z.push(`${G.id}: not customizable \u2014 the key is handled outside the keymap (doc-only row)`);continue}let q=ZA[G.id];if(q&&G.keys.length>0){let j=q.validateCount(G.keys.length);if(j){Z.push(`${G.id}: ${j} \u2014 keeping the default`);continue}}let B=G.keys.filter((j)=>{if(j.length===1&&XA.has(f.scope))return Z.push(`${G.id}: "${j}" dropped \u2014 a bare character on a ${f.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 H=f.keys,K=f;if(K.keys=B,f.hint)if(B.length===0)K.hint=void 0;else f.hint.keys=B.join("/");X.push({id:G.id,keys:B,defaultKeys:H})}for(let G of X)for(let f of G.keys){let Q=J.find((q)=>q.id===G.id);if(!Q)continue;for(let q of J){if(q.id===G.id)continue;if(!q.keys.includes(f))continue;if(!jA(Q.scope,q.scope))continue;Z.push(`${G.id}: "${f}" also fires ${q.id} (${q.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:X,warnings:Z}}var KH,ZA,XA,GA,fA,zA,QA;var YQ=S(()=>{KH={"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)"};ZA={"sidebar.nav":_X("down","up"),"files.nav":_X("down","up"),"sidebar.search.nav":_X("down","up"),"files.hierarchy":_X("collapse","expand"),"sidebar.view":_X("previous view","next view"),"files.tab":_X("previous tab","next tab")},XA=new Set(["global","workspace","terminal"]),GA={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},fA={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},zA=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}`)]),QA=["ctrl","cmd","alt","shift"]});function rX(J){return J in X7}function fX(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 f;if(X.length===1)f=G.has("shift")?X.toUpperCase():X;else{let B=VA[X];if(!B)return{error:`"${J}": tmux can't bind the key "${X}"`};f=B}let Q=/^f\d+$/.test(X);if(G.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(G.has("ctrl"))q+="C-";if(G.has("alt"))q+="M-";if(G.has("shift"))q+="S-";return{key:q+f}}function f7(){let J={};for(let[Z,X]of Object.entries(GX)){let G=fX(X,{allowBare:rX(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=UZ.map((Z)=>{let X=fX(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 UH(J){let Y=f7(),Z=new Set;for(let X of J){if(!X.id.startsWith("tmux."))continue;if(X.id===FY){if(X.keys.length===0){Y.focus=[null,null,null,null],Z.add(FY);continue}if(X.keys.length!==UZ.length){Y.warnings.push(`${FY}: 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 H of X.keys){let K=fX(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(!(X.id in GX)){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 f=X.keys[0],Q=fX(f,{allowBare:rX(G)});if("error"in Q){Y.warnings.push(`${G}: ${Q.error} \u2014 keeping the default`);continue}if(f!==GX[G])Z.add(G);Y.binds[G]={chord:f,key:Q.key}}return Y.overridden=Z,Y}function LH(J){return J.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function z7(){XX=null}function ZQ(){if(XX)return XX;let J=tz();if(!J.exists||J.doc===null)return XX=f7(),XX;let Y=JQ(J.doc,process.platform,{chordOptsFor:LH}),Z=Y.warnings.filter((G)=>G.startsWith("tmux.")),X=UH(Y.entries);X.warnings=[...Z,...X.warnings];for(let G of X.warnings)console.warn(`[kobe/keybindings] ${G}`);return XX=X,XX}var WA,X7,G7,GX,FY="tmux.focus",UZ,VA,XX=null;var XQ=S(()=>{VH();YQ();WA={"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"},X7={"tmux.layout.workspaceSplit":"s","tmux.layout.workspaceClose":"x","tmux.layout.workspaceReset":"r","tmux.layout.tasksToggle":"a","tmux.layout.opsToggle":"o","tmux.layout.terminalToggle":"z"},G7=["F6","F7","F8","F9","F10","F11"],GX={...WA,...X7};UZ=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],VA={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 rG(J,Y){let Z=null;for(let G=0;G<24;G++){let f=await wX(J);if(f){if(!Y)return{pane:f,ready:!0};let Q=(await hX(f)).trim();if(Q.length>0&&Q===Z)return{pane:f,ready:!0};Z=Q}await KA(250)}return{pane:await wX(J)||await hB(J),ready:!1}}async function oG(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 nG(J,"Enter")}async function Q7(J,Y){let{pane:Z}=await rG(J,!0);if(!Z)return;await oG(Z,Y.text)}var KA=(J)=>new Promise((Y)=>setTimeout(Y,J));var GQ=S(()=>{w1()});function q7(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 B7;var H7=S(()=>{iz();lz();$z();az();pz();_z();rz();B7={claude:cX,conductor:dX,nord:iX,opencode:lX,dracula:nX,tokyonight:aX,"osaka-jade":$X}});function UA(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,f]=Z;return`#${X}${X}${G}${G}${f}${f}`.toLowerCase()}return`#${Z.slice(0,6)}`.toLowerCase()}function j7(J,Y,Z="dark"){let X=J.defs??{};function G(Q,q){if(typeof Q==="string"){if(Q==="transparent"||Q==="none")return null;if(Q.startsWith("#"))return UA(Q);if(q.includes(Q))return null;let H=X[Q]??J.theme[Q];if(H===void 0)return null;return G(H,[...q,Q])}if(!Q||typeof Q!=="object")return null;let B=Q[Z];return typeof B==="string"?G(B,q):null}let f=J.theme[Y];if(f===void 0)return null;return G(f,[Y])}function fQ(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function zQ(J){if(!fQ(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(!fQ(Z))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in Y&&Y.defs!==void 0){if(!fQ(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(!fQ(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 f=G;if(typeof f.dark!=="string")return{ok:!1,reason:`theme.${X}.dark must be a string`};if(typeof f.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 DH=()=>{};import{readFileSync as LA,readdirSync as DA}from"fs";import{join as W7}from"path";function oX(){return W7(r1(),"themes")}function sG(){let J=oX(),Y;try{Y=DA(J)}catch{return[]}let Z=[];for(let X of Y){if(!X.endsWith(".json"))continue;let G=W7(J,X),f;try{let B=LA(G,"utf8");f=JSON.parse(B)}catch(B){let H=B instanceof Error?B.message:String(B);console.warn(`[kobe] skipping user theme ${G}: invalid JSON \u2014 ${H}`);continue}let Q=zQ(f);if(!Q.ok){console.warn(`[kobe] skipping user theme ${G}: ${Q.reason}`);continue}let q=X.slice(0,-5);Z.push({name:q,theme:Q.theme})}return Z}var QQ=S(()=>{c1();DH()});import{readFileSync as MA}from"fs";function OA(){try{let J=JSON.parse(MA(TJ(),"utf8")),Y=typeof J.activeTheme==="string"&&J.activeTheme?J.activeTheme:"claude",Z=typeof J.focusAccent==="string"&&FA.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 AA(J){return sG().find((Z)=>Z.name===J)?.theme??B7[J]??null}function JY(J,...Y){for(let Z of Y){let X=j7(J,Z);if(X)return X}return null}function V7(J,Y){let Z=JY(J,"text"),X=JY(J,"background"),G=JY(J,"textMuted","text"),f=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:f,statusFg:G,statusMutedFg:G,windowFg:G,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??X}}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 U7(J){let Y=cJ({bg:J.statusBg,fg:J.statusFg}),Z=cJ({bg:J.statusBg,fg:J.statusMutedFg}),X=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:X},{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 RA(J){let Y=new Set(J.marker.split(",").map((f)=>f.trim()).filter(Boolean)),Z=[],X=[];for(let f of U7(J.hexes))if(f.value){if((J.current[f.key]??"")!==f.value)Z.push(["set-option",f.setFlag,f.option,f.value]);X.push(f.key)}else if(Y.has(f.key))Z.push(["set-option",f.unsetFlag,f.option]);let G=X.join(",");if(G!==J.marker)Z.push(G?["set-option","-g",MH,G]:["set-option","-gu",MH]);return Z}async function K7(J){let{code:Y,stdout:Z}=await n0(J);return Y===0?Z.trim():""}async function zX(){try{let J=OA(),Y=J.enabled?AA(J.themeName):null,Z=Y?V7(Y,J.focusAccentSlot):V7({theme:{}},J.focusAccentSlot),X=U7(Z),[G,...f]=await Promise.all([K7(["show-options","-gqv",MH]),...X.map((B)=>K7(["show-options",B.showFlag,B.option]))]),Q=Object.fromEntries(X.map((B,H)=>[B.key,f[H]??""])),q=RA({marker:G,current:Q,hexes:Z});if(q.length>0)await x1(q)}catch{}}var MH="@kobe_border_theme",FA;var qQ=S(()=>{c1();w1();H7();QQ();FA=["primary","success","info"]});var OH={};j1(OH,{recordGen:()=>QX,isLatestGen:()=>O7,genAgeMs:()=>NA,coalesceLayoutWork:()=>bA,RESIZE_GUARD_MS:()=>IA,LAYOUT_COALESCE_MS:()=>M7});import{createHash as gA,randomUUID as CA}from"crypto";import{mkdirSync as SA,readFileSync as L7,renameSync as yA,writeFileSync as kA}from"fs";import{join as D7}from"path";function F7(){return D7(r1(),"layout-coord")}function FH(J,Y){let Z=gA("sha1").update(J).digest("hex").slice(0,16);return D7(F7(),`${Z}.${Y}`)}function QX(J,Y){let Z=CA();try{SA(F7(),{recursive:!0});let X=FH(J,Y),G=`${X}.${Z}.tmp`;kA(G,`${Date.now()}
58
+ ${Z}`),yA(G,X)}catch{}return Z}function O7(J,Y,Z){try{return L7(FH(J,Y),"utf8").split(`
59
+ `)[1]?.trim()===Z}catch{return!0}}function NA(J,Y,Z=Date.now()){try{let X=Number.parseInt(L7(FH(J,Y),"utf8").split(`
60
+ `)[0]??"",10);return Number.isFinite(X)?Z-X:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function bA(J,Y,Z,X=M7){let G=QX(J,Y);if(X>0)await new Promise((f)=>setTimeout(f,X));if(!O7(J,Y,G))return;await Z()}var M7=120,IA=400;var tG=S(()=>{c1()});function EA(J){let Y=[];for(let Z of J.split(`
61
+ `)){let X=Z.trim();if(!X)continue;let[G,f,Q,q,B]=X.split("\t");if(!G||!f||!Q)continue;let H=Number.parseInt(B?.trim()??"",10);Y.push({windowId:G.trim(),paneId:f.trim(),role:Q.trim(),version:q?.trim()??"",...Number.isFinite(H)?{paneWidth:H}:{}})}return Y}function A7(J,Y){let Z=new Map;for(let G of J){let f=Z.get(G.windowId)??[];f.push(G),Z.set(G.windowId,f)}let X=[];for(let G of Z.values()){let f=G.find((H)=>H.role==="claude")?.paneId,Q=G.find((H)=>H.role==="tasks"),q=G.find((H)=>H.role==="ops");if(Q&&(Y.force||Q.version!==Y.currentVersion))X.push({role:"tasks",paneId:Q.paneId});let B=Y.force?!0:f&&(Y.vendorChanged||q?.version!==Y.currentVersion);if(q&&B)X.push({role:"ops",paneId:q.paneId,claudePaneId:f??null})}return X}async function AH(J){let{code:Y,stdout:Z}=await n0(["list-panes","-s","-t",`=${J}`,"-F",TA]);if(Y!==0)return null;return EA(Z)}function R7(J,Y){let Z=S1(),X=YJ(),G=[];for(let f of J){let Q=f.role==="tasks"?zZ(Z,{initialTaskId:Y.taskId}):IX({cwd:Y.cwd,taskId:Y.taskId,claudePaneId:f.claudePaneId,cliInvocation:Z,vendor:Y.vendor});G.push(["respawn-pane","-k","-t",f.paneId,"-c",k1(Y.cwd),VJ(X+Q)],["set-option","-p","-t",f.paneId,"@kobe_role",f.role],["set-option","-p","-t",f.paneId,YY,d0])}return G}async function g7(J,Y,Z,X,G){let f=await AH(J);if(!f)return!1;let Q=f.filter((H)=>H.role==="claude");if(Q.length===0)return!1;let q=k1(Y),B=[];for(let H of Q){let K=PX(Z,G),j=VJ(bX(PJ(K.argv),X,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 x1(B),!0}async function C7(){let J=await BZ([vY,iZ,mY]),Y=Number.parseInt(J[vY]??"",10),Z=Number.isFinite(Y)&&Y>0?nZ(Y):cZ,X=uA({widthPct:cY(Number.parseInt(J[iZ]??"",10)),heightPct:cY(Number.parseInt(J[mY]??"",10))});return{tasksWidth:Z,rcArgs:X}}function uA(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 S7(){return(await C7()).rcArgs}async function sX(J,Y){QX(J,"resize");let{tasksWidth:Z,rcArgs:X}=await C7(),G=await AH(J);if(!G)return;let f=[];for(let Q of G)if(Q.role==="tasks"&&Q.paneWidth!==Z)f.push(["resize-pane","-t",Q.paneId,"-x",`${Z}`]);if(X.length>0){for(let Q of G)if(Q.role==="ops")f.push(["resize-pane","-t",Q.paneId,...X])}if(Y)f.push(...R7(A7(G,{currentVersion:d0,force:!1,vendorChanged:Y.vendorChanged}),Y));if(f.length>0)await x1(f)}async function y7(J){if(!await G1(J))return;await sX(J)}async function eG(J){let{code:Y,stdout:Z}=await n0(["list-panes","-t",`=${J}`,"-F",`#{@kobe_role} #{pane_width} #{pane_height} #{window_width} #{window_height} #{window_zoomed_flag} #{${VY}} #{${SJ}}`]);if(Y!==0)return;let X=Z.split(`
62
+ `).map((H)=>H.split("\t")).filter((H)=>(H[0]?.trim()??"")!=="");if(X.length===0)return;if(X.some((H)=>H[5]?.trim()==="1"))return;if(X.some((H)=>(H[6]?.trim()??"")!==""))return;if(X.some((H)=>(H[7]?.trim()??"")!==""))return;let G=Number.parseInt(X[0][3]?.trim()??"",10),f=Number.parseInt(X[0][4]?.trim()??"",10),Q=[],q=X.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,`${nZ(H)}`])}let B=X.find(([H])=>H?.trim()==="ops");if(B&&Number.isFinite(G)&&G>0&&Number.isFinite(f)&&f>0){let H=Number.parseInt(B[1]?.trim()??"",10),K=Number.parseInt(B[2]?.trim()??"",10),j=Number.isFinite(H)?cY(100*H/G):null,U=Number.isFinite(K)?cY(100*K/f):null;if(j!==null)Q.push(["set-option","-s",iZ,`${j}`]);if(U!==null)Q.push(["set-option","-s",mY,`${U}`])}if(Q.length>0)await x1(Q)}function xA(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 k7(J){let{code:Y,stdout:Z}=await n0(["list-panes","-t",`=${J}`,"-F",`#{@kobe_role} #{window_zoomed_flag} #{${VY}} #{${SJ}}`]);if(Y!==0||!xA(Z))return;await eG(J)}async function tX(J){let Y=await KJ(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,f=await AH(J);if(!f)return;let Q=R7(A7(f,{currentVersion:d0,force:!0}),{cwd:Z,taskId:X,vendor:G});if(Q.length>0)await x1(Q);await zX()}var YY="@kobe_pane_version",TA;var Jf=S(()=>{wY();yJ();$J();w1();KY();qQ();zJ();TX();tG();TA=`#{window_id} #{pane_id} #{@kobe_role} #{${YY}} #{pane_width}`});function HQ(J,Y){return[["bind-key","-n",J,"previous-window"],["bind-key","-n",Y,"next-window"]]}function jQ(J,Y="kill-window"){return["bind-key","-n",J,"if-shell","-F","#{>:#{session_windows},1}",Y,"display-message 'Cannot close the only ChatTab'"]}function WQ(J){return["bind-key","-n",J,"command-prompt","-I","#{window_name}","rename-window -- '%%'"]}function VQ(J){return[["bind-key","-n",J,"command-prompt","-p",BQ],["bind-key","T","command-prompt","-p",BQ]]}function RH(J){return J.startsWith("C-")&&J.length===3?`^${J.slice(2)}`:J}function KQ(J){return`${[J.focusLeft?`${RH(J.focusLeft)} tasks`:null,J.detach?`${RH(J.detach)} detach`:null,J.newTab?`${RH(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 CH(J,Y){let Z=YJ(),X=await Iz(),G=VJ(Y.opsCommand??Z+IX({cwd:Y.cwd,taskId:Y.taskId,claudePaneId:J,cliInvocation:Y.inv,vendor:Y.vendor})),{stdout:f}=await cG([["set-option","-p","-t",J,"@kobe_role","claude"],["set-window-option","-t",J,gH,"idle"],["split-window","-h","-b","-t",J,"-l",`${X}`,"-c",k1(Y.cwd),"-P","-F","tasks=#{pane_id}",VJ(Z+zZ(Y.inv,{initialTaskId:Y.taskId}))],["split-window","-h","-t",J,"-l",`${100-Fz}%`,"-c",k1(Y.cwd),"-P","-F","ops=#{pane_id}",G],["split-window","-v","-l",`${100-hG}%`,"-c",k1(Y.cwd),"-P","-F","shell=#{pane_id}"],["select-pane","-t",J]]),Q=Object.fromEntries(f.split(`
64
+ `).map((q)=>q.trim()).filter(Boolean).map((q)=>q.split("=",2)));if(await x1([...Q.tasks?[["set-option","-p","-t",Q.tasks,"@kobe_role",hY]]:[],...Q.tasks?[["set-option","-p","-t",Q.tasks,YY,d0]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,"@kobe_role",dZ]]:[],...Q.ops?[["set-option","-p","-t",Q.ops,YY,d0]]:[],...Q.shell?[["set-option","-p","-t",Q.shell,"@kobe_role",PY]]:[]]),Q.ops){let q=await S7();if(q.length>0)await u0(["resize-pane","-t",Q.ops,...q])}}async function I7(J,Y){if(!await G1(J))return;let Z=await KJ(J,["@kobe_worktree","@kobe_task","@kobe_vendor",mG]),X=Z["@kobe_worktree"]||process.cwd(),G=Z["@kobe_task"]||void 0,f=Z[mG]||void 0,Q=Y??Z["@kobe_vendor"];if(Y)await wA(J,G,Y);let q=LJ(Q),B=PX(q,Q),H=S1(),j=(await n0(["new-window","-t",`=${J}`,"-c",k1(X),"-P","-F","#{pane_id}",VJ(bX(PJ(B.argv),f,X))])).stdout.trim();if(!j)return;if(B.sessionId)await _Z(j,DY,B.sessionId);await CH(j,{cwd:X,taskId:G,inv:H,vendor:Q})}async function LQ(J){if(!await G1(J))return;let Z=(await KJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),X=S1(),f=`${YJ()}${X.map(Z1).join(" ")} settings`;await sJ(J,{cwd:k1(Z),command:f,name:"settings"})}async function DQ(J){if(!await G1(J))return;let Z=(await KJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),X=S1(),f=`${YJ()}${X.map(Z1).join(" ")} help-page`;await sJ(J,{cwd:k1(Z),command:f,name:"help"})}async function MQ(J,Y){if(!await G1(J))return;let X=(await KJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=S1(),f=YJ(),Q=Y?` --repo ${Z1(Y)}`:"",q=`${f}${G.map(Z1).join(" ")} new-task${Q}`;await sJ(J,{cwd:k1(X),command:q,name:"new task"})}async function FQ(J){if(!await G1(J))return;let Z=(await KJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),X=S1(),f=`${YJ()}${M8({cliInvocation:X})}`;await sJ(J,{cwd:k1(Z),command:f,name:"update"})}async function N7(J){if(!await G1(J))return;let Z=(await KJ(J,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),X=S1(),f=`${YJ()}${X.map(Z1).join(" ")} quick-task --session ${Z1(J)}`;await sJ(J,{cwd:k1(Z),command:f,name:"quick task"})}async function wA(J,Y,Z){if(await xX(J,"@kobe_vendor",Z),!Y)return;try{let{connectOrStartDaemon:X}=await Promise.resolve().then(() => (DJ(),yH)),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 BQ,gH="@kobe_tab_state",Yf="#{?#{==:#{@kobe_tab_state},running},\u25CF,#{?#{==:#{@kobe_tab_state},done},\u2713,#{?#{==:#{@kobe_tab_state},error},!,#{?#{==:#{@kobe_tab_state},unknown},?,\u25CB}}}} #I:#W",UQ;var SH=S(()=>{wY();yJ();$J();w1();KY();HJ();zJ();TX();Jf();BQ=`engine (${h1.join("/")}/\u2026)`;UQ=Yf});function PA(J){let Y=[];for(let Z of J.split(`
65
+ `)){let X=Z.trim();if(!X)continue;let[G,f,Q,q,B,H,K]=X.split("\t");if(!G)continue;let j=Number.parseInt(q??"",10),U=Number.parseInt(B??"",10),L=Number.parseInt(H??"",10),M=Number.parseInt(K??"",10);Y.push({paneId:G.trim(),role:f?.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(M)?M:0})}return Y}function vA(J){let Y=J.find((X)=>X.role===kX);if(!Y)return{kind:"missing-engine"};let Z=J.filter((X)=>X.role===xG);if(Z.length+1>=VB)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 b7(J){return J.find((Y)=>Y.role===PY)??J.find((Y)=>Y.role==="")}function mA(J){return 100-(cY(J??Number.NaN)??hG)}function cA(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:X,stdout:G}=await n0(["list-panes","-t",Z,"-F",hA]);return X===0?PA(G):null}async function dA(J){let{code:Y,stdout:Z}=await n0(["list-windows","-t",`=${J}`,"-F","#{window_active}\t#{window_id}"]);if(Y!==0)return"";for(let X of Z.split(`
66
+ `)){let[G,f]=X.split("\t");if(G?.trim()==="1"&&f?.trim())return f.trim()}return""}async function OQ(J,Y){let{code:Z,stdout:X}=await n0(["show-options","-wqv","-t",J,Y]);return Z===0?X.trim():""}async function T7(J,Y,Z){await u0(["set-window-option","-t",J,Y,Z])}async function qX(J,Y){await u0(["set-window-option","-u","-t",J,Y])}async function kH(J){let{code:Y,stdout:Z}=await n0(["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 AQ(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 nA(J){let Y=S1(),Z=YJ();return VJ(Z+IX({cwd:J.cwd,taskId:J.taskId,claudePaneId:J.enginePaneId,cliInvocation:Y,vendor:J.vendor}))}async function iA(J,Y){return Y?.trim()||await dA(J)}async function lA(J,Y){let Z=await OY(J,Y);if(!Z)return;let X=vA(Z);if(X.kind==="missing-engine"){await m1(Y,"kobe: no engine pane in this window");return}if(X.kind==="maxed"){await m1(Y,`kobe: workspace split limit is ${VB} panes`);return}let{cwd:G}=await AQ(J),{code:f,stdout:Q}=await n0(["split-window",X.direction,"-t",X.targetPane,"-l","50%","-c",k1(G),"-P","-F","#{pane_id}",VJ("true")]),q=Q.trim();if(f!==0||!q)return;await x1([["set-option","-p","-t",q,"@kobe_role",xG],["select-pane","-t",q]])}async function $A(J,Y){let Z=await OY(J,Y);if(!Z)return;let X=Z.filter((Q)=>Q.role===xG);if(X.length===0){await m1(Y,"kobe: no workspace split to close");return}let f=X.find((Q)=>Q.active)??X[X.length-1];if(!f)return;await u0(["kill-pane","-t",f.paneId])}async function aA(J,Y){let Z=await OY(J,Y);if(!Z)return;let X=Z.filter((G)=>G.role===xG);if(X.length===0){await m1(Y,"kobe: no workspace splits to reset");return}await x1(X.map((G)=>["kill-pane","-t",G.paneId]))}async function E7(){let J=await BZ([vY]);return nZ(cA(J[vY])??cZ)}async function pA(J){let{cwd:Y,taskId:Z}=await AQ(J),X=S1(),G=YJ();return{cwd:Y,command:VJ(G+zZ(X,{initialTaskId:Z}))}}async function _A(J,Y){let Z=await OY(J,Y);if(!Z)return;let X=Z.find((D)=>D.role===dZ);if(X){await u0(["kill-pane","-t",X.paneId]);return}let G=b7(Z),f=Z.find((D)=>D.role===kX);if(!f){await m1(Y,"kobe: cannot restore file pane in this layout");return}let{cwd:Q,taskId:q,vendor:B}=await AQ(J),H=nA({cwd:Q,taskId:q,vendor:B,enginePaneId:f.paneId}),K=G?["split-window","-v","-b","-t",G.paneId,"-l",`${await rA()}%`,"-c",k1(Q),"-P","-F","#{pane_id}",H]:["split-window","-h","-t",f.paneId,"-l",`${await IH()}%`,"-c",k1(Q),"-P","-F","#{pane_id}",H],{code:j,stdout:U}=await n0(K),L=U.trim();if(j!==0||!L)return;let M=[["set-option","-p","-t",L,"@kobe_role",dZ],["set-option","-p","-t",L,YY,d0]];if(G?.role==="")M.push(["set-option","-p","-t",G.paneId,"@kobe_role",PY]);await x1(M)}async function rA(){let J=await BZ([mY]);return cY(Number.parseInt(J[mY]??"",10))??hG}async function IH(){let J=await BZ([iZ]);return cY(Number.parseInt(J[iZ]??"",10))??100-Fz}async function u7(){let J=await BZ([mY]);return mA(Number.parseInt(J[mY]??"",10))}async function oA(J){let{code:Y,stdout:Z}=await n0(["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 x7(J,Y){let Z=await oA(J),X=K8(Y);while(Z.has(X))X++;return X}async function w7(J){let Y=wG(J);if(await G1(Y))return Y;return await u0(["new-session","-d","-s",Y,"-n","hidden-panes","-c",k1(process.cwd()),"while :; do sleep 3600; done"]),Y}async function NH(J){let Y=wG(J);if(!await G1(Y))return;let{code:Z,stdout:X}=await n0(["list-panes","-s","-t",`=${Y}`,"-F","#{@kobe_role}"]);if(Z!==0)return;if(!X.split(`
68
+ `).some((f)=>{let Q=f.trim();return Q===PY||Q===hY}))await u0(["kill-session","-t",`=${Y}`])}async function sA(J,Y){await h7(J,Y,VY)}async function tA(J,Y){await h7(J,Y,SJ)}async function h7(J,Y,Z){let X=await OQ(Y,Z);if(!X)return;if(await kH(X))await u0(["kill-pane","-t",X]);await qX(Y,Z)}async function eA(J,Y){await sA(J,Y),await tA(J,Y),await NH(J)}function P7(J){return J.find((Y)=>Y.role===kX)??J[0]}async function bH(J,Y,Z){let X=P7(Z);if(!X)return await m1(Y,"kobe: cannot restore Tasks pane in this layout"),!1;let G=await E7(),{cwd:f,command:Q}=await pA(J),{code:q,stdout:B}=await n0(["split-window","-h","-b","-t",X.paneId,"-l",`${G}`,"-c",k1(f),"-P","-F","#{pane_id}",Q]),H=B.trim();if(q!==0||!H)return!1;return await x1([["set-option","-p","-t",H,"@kobe_role",hY],["set-option","-p","-t",H,YY,d0],["select-pane","-t",H]]),await qX(Y,SJ),await m1(Y,"kobe: Tasks pane restored"),!0}async function J2(J,Y,Z){let X=await w7(J),G=await x7(X,Y),{code:f,stdout:Q}=await n0(["break-pane","-d","-s",Z.paneId,"-t",`${X}:${G}`,"-P","-F","#{pane_id}"]),q=Q.trim()||Z.paneId;if(f!==0||!q){await m1(Y,"kobe: could not hide Tasks pane");return}await T7(Y,SJ,q),await m1(Y,"kobe: Tasks pane hidden")}async function v7(J,Y,Z){let X=await OY(J,Y);if(!X)return;if(!await kH(Z)){await qX(Y,SJ);let Q=X.find((q)=>q.role===hY);if(Q){await u0(["select-pane","-t",Q.paneId]);return}await bH(J,Y,X);return}let G=P7(X);if(!G){await m1(Y,"kobe: cannot restore Tasks pane in this layout");return}if(await u0(["join-pane","-h","-b","-s",Z,"-t",G.paneId,"-l",`${await E7()}`])!==0){await m1(Y,"kobe: could not restore Tasks pane");return}await x1([["set-option","-p","-t",Z,"@kobe_role",hY],["set-option","-p","-t",Z,YY,d0],["select-pane","-t",Z]]),await qX(Y,SJ),await NH(J),await m1(Y,"kobe: Tasks pane restored")}async function Y2(J,Y){let Z=await OQ(Y,SJ);if(Z){await v7(J,Y,Z);return}let X=await OY(J,Y);if(!X)return;let G=X.find((f)=>f.role===hY);if(G){await J2(J,Y,G);return}await bH(J,Y,X)}async function Z2(J,Y){let Z=await OQ(Y,SJ);if(Z){await v7(J,Y,Z);return}let X=await OY(J,Y);if(!X)return;let G=X.find((f)=>f.role===hY);if(G){await u0(["select-pane","-t",G.paneId]);return}await bH(J,Y,X)}async function X2(J,Y,Z){if(Z.role==="")await u0(["set-option","-p","-t",Z.paneId,"@kobe_role",PY]);let X=await w7(J),G=await x7(X,Y),{code:f,stdout:Q}=await n0(["break-pane","-d","-s",Z.paneId,"-t",`${X}:${G}`,"-P","-F","#{pane_id}"]),q=Q.trim()||Z.paneId;if(f!==0||!q){await m1(Y,"kobe: could not hide terminal pane");return}await T7(Y,VY,q),await m1(Y,"kobe: Terminal pane hidden")}async function m7(J,Y,Z){let X=Z.find((K)=>K.role===dZ),G=Z.find((K)=>K.role===kX);if(!X&&!G)return await m1(Y,"kobe: cannot restore terminal pane in this layout"),!1;let{cwd:f}=await AQ(J),Q=X?["split-window","-v","-t",X.paneId,"-l",`${await u7()}%`,"-c",k1(f),"-P","-F","#{pane_id}"]:["split-window","-h","-t",G?.paneId??"","-l",`${await IH()}%`,"-c",k1(f),"-P","-F","#{pane_id}"],{code:q,stdout:B}=await n0(Q),H=B.trim();if(q!==0||!H)return!1;return await u0(["set-option","-p","-t",H,"@kobe_role",PY]),await qX(Y,VY),await m1(Y,"kobe: Terminal pane restored"),!0}async function G2(J,Y,Z){let X=await OY(J,Y);if(!X)return;if(!await kH(Z)){await qX(Y,VY),await m7(J,Y,X);return}let G=X.find((H)=>H.role===dZ),f=X.find((H)=>H.role===kX);if(!G&&!f){await m1(Y,"kobe: cannot restore terminal pane in this layout");return}let Q=G?["join-pane","-v","-s",Z,"-t",G.paneId,"-l",`${await u7()}%`]:["join-pane","-h","-s",Z,"-t",f?.paneId??"","-l",`${await IH()}%`];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 qX(Y,VY),await NH(J),X=await OY(J,Y);let B=X?.find((H)=>H.paneId===Z);if(B)await u0(["select-pane","-t",B.paneId]);await m1(Y,"kobe: Terminal pane restored")}async function f2(J,Y){let Z=await OQ(Y,VY);if(Z){await G2(J,Y,Z);return}let X=await OY(J,Y);if(!X)return;let G=b7(X);if(G){await X2(J,Y,G);return}await m7(J,Y,X)}async function z2(J){let{code:Y,stdout:Z}=await n0(["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 Q2(J,Y){if(await z2(J)<=1){await m1(Y,"Cannot close the only ChatTab");return}await eA(J,Y),await u0(["kill-window","-t",Y])}async function RQ(J,Y,Z={}){if(!await G1(J))return;let X=await iA(J,Z.windowId);if(!X)return;switch(Y){case"workspace-split":await lA(J,X);return;case"workspace-close":await $A(J,X);return;case"workspace-reset":await aA(J,X);return;case"tasks-toggle":await Y2(J,X);return;case"tasks-restore":await Z2(J,X);return;case"ops-toggle":await _A(J,X);return;case"terminal-toggle":await f2(J,X);return;case"chat-tab-close":await Q2(J,X);return}}var hA="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var TH=S(()=>{wY();$J();w1();KY();zJ();TX();Jf()});var ZY={};j1(ZY,{tmuxWindowSizeArgsForClient:()=>l7,tmuxSessionName:()=>K1,tmuxInitialSizeArgs:()=>d7,tmuxInitialClientSize:()=>uH,tmuxAvailable:()=>LY,switchClientBeforeKill:()=>MY,sessionExists:()=>G1,selectTasksPane:()=>K2,runLayoutAction:()=>RQ,refreshKobeWorkspacePanes:()=>tX,quickCreate:()=>N7,prepareWindowForSwitch:()=>CQ,prepareWindowForAttach:()=>gQ,parseTmuxClientRows:()=>n7,parseObservedSession:()=>p7,openUpdateTab:()=>FQ,openSettingsTab:()=>LQ,openNewTaskTab:()=>MQ,openHelpTab:()=>DQ,newChatTab:()=>I7,kobeStatusRight:()=>KQ,killSession:()=>vJ,healSessionLayout:()=>y7,focusBindCommand:()=>a7,ensureSession:()=>DZ,currentSessionName:()=>UJ,clientsWithConflictingSize:()=>i7,chatTabSwitchBindings:()=>HQ,chatTabRenameBinding:()=>WQ,chatTabCloseBinding:()=>jQ,chatTabChooseEngineBindings:()=>VQ,captureGlobalLayoutOnDrag:()=>k7,captureGlobalLayout:()=>eG,attachArgv:()=>uX,PANE_VERSION_OPTION:()=>YY,CHAT_TAB_STATUS_FORMAT:()=>Yf,CHAT_TAB_STATUS_CURRENT_FORMAT:()=>UQ,CHAT_TAB_STATE_OPTION:()=>gH,CHAT_TAB_ENGINE_PROMPT:()=>BQ});function d7(J=process.stdout,Y=process.env){let Z=uH(J,Y);return Z?["-x",`${Z.columns}`,"-y",`${Z.rows}`]:[]}function uH(J=process.stdout,Y=process.env){let Z=LZ(J.columns)??LZ(Y.COLUMNS),X=LZ(J.rows)??LZ(Y.LINES);return Z&&X?{columns:Z,rows:X}:null}function LZ(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 n7(J){let Y=[];for(let Z of J.split(`
70
+ `)){let[X,G,f,Q,q]=Z.split("\t"),B=LZ(f?.trim()),H=LZ(Q?.trim());if(!X?.trim()||!G?.trim()||!B||!H)continue;Y.push({name:X.trim(),session:G.trim(),width:B,height:H,flags:q?.trim()??""})}return Y}function i7(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 l7(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:X,stdout:G}=await n0(["list-clients","-t",`=${J}`,"-F",q2]);if(X!==0)return;let f=i7(n7(G),J,Y,Z),Q=[];if(Z.currentClientName)Q.push(["refresh-client","-f","!ignore-size","-t",Z.currentClientName]);for(let q of f)Q.push(["refresh-client","-f","ignore-size","-t",q]);if(Q.length>0)await x1(Q)}async function gQ(J){QX(J,"resize");let Y=uH();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 sX(J)}async function B2(){let{code:J,stdout:Y}=await n0(["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,f]=Y.trim().split("\t"),Q=LZ(X),q=LZ(G),B=Q&&q?{columns:Q,rows:q}:null;return{sizeArgs:B?l7(B,{status:f}):[],clientSize:B,clientName:Z?.trim()||void 0}}async function CQ(J){QX(J,"resize");let Y=await B2();await $7(J,Y.clientSize,{currentClientName:Y.clientName});let Z=Y.sizeArgs;if(Z.length>0)await u0(["resize-window","-t",`=${J}`,...Z]);await sX(J)}function a7(J,Y,Z){let X=`#{?window_zoomed_flag,1,#{?${H2[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 DZ(J){let Y=EH.get(J.name);if(Y)return Y;let Z=V2(J);EH.set(J.name,Z);try{return await Z}finally{EH.delete(J.name)}}function p7(J){let Y="",Z="",X=!1,G=new Set;for(let f of J.split(`
71
+ `)){let[Q,q,B,H,K]=f.split("\t");if(!Q?.trim())continue;if(G.add(Q.trim()),!Y&&H?.trim())Y=H.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 W2(J){if(!await G1(J))return null;let{code:Y,stdout:Z}=await n0(["list-panes","-s","-t",`=${J}`,"-F",j2]);if(Y!==0)return{worktree:"",vendor:"",claudePaneAlive:!1,windowCount:0};return p7(Z)}async function V2(J){let Y=J.launchInit,Z=await W2(J.name),X=q7(Z,{cwd:J.cwd,vendor:J.vendor,hasEngineCommand:J.command.length>0}),G=Y9(J.repo);if(X.kind==="reuse")return await sX(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor}),!0;if(X.kind==="respawn-engine"){if(await g7(J.name,J.cwd,J.command,G,J.vendor)){if(J.vendor)await xX(J.name,"@kobe_vendor",J.vendor);return await sX(J.name,{cwd:J.cwd,taskId:J.taskId,vendor:J.vendor,vendorChanged:!0}),!0}}if(X.kind==="rebuild"||X.kind==="respawn-engine")await vJ(J.name);let f=S1(),Q=PX(J.command,J.vendor),q=J.repo!==void 0&&J.cwd===J.repo,B=q||G?void 0:J.taskId,H=q&&!G?J.taskId:void 0,K=mz(vz(Q.argv,J.vendor,B),J.vendor,H),j=bX(PJ(K),G,J.cwd),L=(await n0(["new-session","-d","-s",J.name,"-c",k1(J.cwd),...d7(),"-P","-F","#{pane_id}",L8(j,{initScript:G?void 0:Y?.initScript,markerPath:!G&&Y?.initScript?CW(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 _Z(L,DY,Q.sessionId);await x1([...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,mG,G]]:[]]),await CH(L,{cwd:J.cwd,taskId:J.taskId,opsCommand:J.opsCommand,inv:f,vendor:J.vendor});let M=YJ(),D=f.map(Z1).join(" "),O=`${M}${D} new-chattab --session '#{session_name}'`,A=`${O} --vendor '%%'`,l=`run-shell ${Z1(A)}`,R=`${M}${D} focus-tasks --session '#{session_name}' --window '#{window_id}'`,C=`run-shell ${Z1(R)}`,g=(s)=>`${M}${D} layout --session '#{session_name}' --window '#{window_id}' --action ${s}`,y=g("tasks-restore"),$=`run-shell ${Z1(y)}`,f0=g("chat-tab-close"),t=`run-shell ${Z1(f0)}`,Z0=`${M}${D} heal-layout --session '#{session_name}'`,u=`run-shell -b ${Z1(Z0)}`,B0=`${M}${D} capture-layout --session '#{session_name}'`,Y0=`run-shell -b ${Z1(B0)}`,W0=F8({tmuxSocket:oJ}),o=ZQ(),_=G7.map((s)=>["unbind-key","-n",s]);if(o.overridden.has(FY))for(let s of UZ){let H0=fX(s);if("key"in H0)_.push(["unbind-key","-n",H0.key])}for(let s of o.overridden){if(s===FY)continue;let H0=GX[s],D0=rX(s),y0=fX(H0,{allowBare:D0});if("key"in y0)_.push(D0?["unbind-key",y0.key]:["unbind-key","-n",y0.key])}let r=["-L","-D","-U","-R"],X0=o.focus.flatMap((s,H0)=>{let D0=r[H0],y0=D0==="-L"?$:void 0;return s&&D0?[a7(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 x1([["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",Yf],["set-option","-g","window-status-current-format",UQ],["set-option","-g","status-right",KQ({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",`#{?#{${SJ}},1,#{==:#{@kobe_role},tasks}}`,"detach-client",C]]:[],...X0,...a["tmux.tab.new"]?[["bind-key","-n",a["tmux.tab.new"].key,"run-shell",O]]:[],...a["tmux.tab.chooseEngine"]?VQ(a["tmux.tab.chooseEngine"].key).map((s)=>[...s,l]):[],...a["tmux.tab.prev"]&&a["tmux.tab.next"]?HQ(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"]?[jQ(a["tmux.tab.close"].key,t)]:[],...a["tmux.tab.rename"]?[WQ(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",`${M}${D} quick-create --session '#{session_name}'`],["bind-key","u","display-popup","-E",W0]]),await zX(),await u0(["select-pane","-t",L]);let N=Y?.firstMessage;if(N)Q7(J.name,N).catch((s)=>console.error("[kobe tmux] first message delivery failed:",s));return!0}async function c7(J,Y,Z){let X=Z?.trim()||`=${J}`,{code:G,stdout:f}=await n0(["list-panes","-t",X,"-F","#{pane_id}\t#{@kobe_role}"]);if(G!==0)return"";for(let Q of f.split(`
72
+ `)){let[q,B]=Q.split("\t");if(q?.trim()&&B?.trim()===Y)return q.trim()}return""}async function K2(J,Y={}){if(!await G1(J))return"";let Z=await c7(J,"tasks",Y.windowId);if(!Z)await RQ(J,"tasks-restore",{windowId:Y.windowId}),Z=await c7(J,"tasks",Y.windowId);if(!Z)return"";return await u0(["select-pane","-t",Z]),Z}var q2="#{client_name}\t#{client_session}\t#{client_width}\t#{client_height}\t#{client_flags}",H2,EH,j2="#{window_id}\t#{window_active}\t#{@kobe_role}\t#{@kobe_worktree}\t#{@kobe_vendor}";var ZJ=S(()=>{wY();yJ();c1();$J();w1();XQ();GQ();KY();qQ();SH();TX();TH();tG();Jf();w1();SH();Jf();TH();H2={"-L":"pane_at_left","-D":"pane_at_bottom","-U":"pane_at_top","-R":"pane_at_right"};EH=new Map});async function U2(J,Y){let{task:Z}=await J.request("task.get",{taskId:Y});return Z}async function xH(J,Y){let Z=await U2(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 _7(J,Y){let{task:Z,worktreePath:X}=await xH(J,Y),G=K1(Y);if(!await G1(G)){let f=iY(Z.repo??"",X,{kind:"repo-init"});if(!await DZ({name:G,cwd:X,command:LJ(Z.vendor,Z.modelEffort),taskId:Y,vendor:Z.vendor,launchInit:f}))throw Error(`failed to start tmux session for ${Y}`)}return{session:G,worktreePath:X}}function L2(J){return Mz(J,{bareSafe:!0})}async function r7(J,Y){let{task:Z,worktreePath:X}=await xH(J,Y),G=Z.kind==="main"?void 0:Y,f=Z.kind==="main"?Y:void 0,Q=[...mz(vz(LJ(Z.vendor,Z.modelEffort),Z.vendor,G),Z.vendor,f)],q=iY(Z.repo??"",X,{kind:"none"}),B=L2(Q),H=q.initScript?.trim()?`${q.initScript}
73
+ ${B}`:B,K=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:X,command:[K,"-ilc",H]}}async function o7(J,Y){let{worktreePath:Z}=await xH(J,Y),X=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:Z,command:[X,"-il"]}}async function s7(J){let Y=K1(J);await MY(Y).catch(()=>{}),await vJ(Y).catch(()=>{})}var t7=S(()=>{yJ();jB();pX();w1();ZJ()});import{existsSync as D2}from"fs";import{join as e7,normalize as ZV}from"path";function M2(J){let Y=null,Z=null,X=new TextEncoder,G=new ReadableStream({start(f){Y=J((q,B)=>{try{f.enqueue(X.encode(`event: ${q}
74
74
  data: ${JSON.stringify(B)}
75
75
 
76
- `))}catch{}}),Z=setInterval(()=>{try{X.enqueue(f.encode(`: ping
76
+ `))}catch{}}),Z=setInterval(()=>{try{f.enqueue(X.encode(`: ping
77
77
 
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 B2(J,Y,Z){try{let{name:f,payload:G}=await J.json();if(!f)return Response.json({error:"missing rpc name"},{status:400});if(!d5.has(f))return Response.json({error:`rpc ${f} is not exposed to the web UI`},{status:403});let X=await Y.request(f,G),Q=G?.taskId;if(typeof Q==="string"){let q=f==="task.archive"&&G.archived!==!1;if(f==="task.delete"||q)Z(Q)}return Response.json({result:X})}catch(f){let G=f instanceof Error&&f.name!=="Error"?f.name:void 0;return Response.json({error:f instanceof Error?f.message:String(f),...G?{name:G}:{}},{status:500})}}async function H2(){try{let Y=(await bY()).map((Z)=>({id:Z,label:aZ(Z),effortLevels:l1(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 j2(){return Response.json({api:pZ()})}function W2(){return Response.json({projects:IJ()})}function WZ(J,Y=""){return typeof J==="string"?J:Y}function V2(J,Y){return typeof J==="boolean"?J:Y}function e7(J){let Y=J.customEngineIds;if(!Array.isArray(Y))return[];return Y.filter((Z)=>typeof Z==="string"&&t7.test(Z)&&!e1(Z))}function K2(J){return J.split(/[-_]+/).filter(Boolean).map((Y)=>`${Y.slice(0,1).toUpperCase()}${Y.slice(1)}`).join(" ")}function U2(J,Y){return WZ(J[_J(Y)]).trim()||aZ(Y)}function L2(J,Y){return WZ(J[pJ(Y)]).trim()||nG(Y).join(" ")}function JV(){let J=i1(),Y=e7(J),Z=[...gZ,...Y],f=WZ(J.lastSelectedVendor,"claude"),G=WZ(J.focusAccent,"primary");return Response.json({activeTheme:WZ(J.activeTheme,"claude"),transparentBackground:V2(J.transparentBackground,!1),focusAccent:s7.includes(G)?G:"primary",notificationsToast:J["notifications.toast.enabled"]!==!1,notificationsSound:J["notifications.sound.enabled"]!==!1,settingsSurface:oZ(J[PY]??rZ),editorKind:uf(J[hY]??xz),editorCustomCommand:WZ(J[QZ]),remoteProjects:J["experimental.remoteProjects"]===!0,autoStatus:J[lZ]===!0,dispatcher:J[$Z]===!0,defaultEngine:f,engines:Z.map((X)=>({id:X,label:U2(J,X),command:L2(J,X),isBuiltin:e1(X),isCustom:!e1(X),isDefault:X===f}))})}function tG(J,Y,Z){if(typeof Z==="string")J[Y]=Z.trim()}function rf(J,Y,Z){if(typeof Z==="boolean")J[Y]=Z}async function D2(J){try{let Y=await J.json(),Z={};if(tG(Z,"activeTheme",Y.activeTheme),rf(Z,"transparentBackground",Y.transparentBackground),s7.includes(Y.focusAccent))Z.focusAccent=Y.focusAccent;if(rf(Z,"notifications.toast.enabled",Y.notificationsToast),rf(Z,"notifications.sound.enabled",Y.notificationsSound),Y.settingsSurface==="chattab"||Y.settingsSurface==="taskpanel")Z[PY]=Y.settingsSurface;if(_Z.includes(Y.editorKind))Z[hY]=Y.editorKind;tG(Z,QZ,Y.editorCustomCommand),rf(Z,"experimental.remoteProjects",Y.remoteProjects),rf(Z,lZ,Y.autoStatus),rf(Z,$Z,Y.dispatcher),tG(Z,"lastSelectedVendor",Y.defaultEngine);let f=i1(),G=e7(f),X=new Set([...gZ,...G]),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"||!X.has(B.id))continue;tG(Z,pJ(B.id),B.command),tG(Z,_J(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(!t7.test(B)||e1(B)||X.has(B))return Response.json({error:"invalid or duplicate engine id"},{status:400});Z.customEngineIds=[...G,B],Z[pJ(B)]=WZ(q.command).trim();let H=WZ(q.label).trim();Z[_J(B)]=H&&H!==B?H:K2(B)}if(typeof Y.removeEngine==="string"){let q=Y.removeEngine;if(!e1(q)){if(Z.customEngineIds=G.filter((B)=>B!==q),Z[pJ(q)]=void 0,Z[_J(q)]=void 0,f.lastSelectedVendor===q)Z.lastSelectedVendor="claude"}}if(Object.keys(Z).length>0)IZ(Z);return JV()}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:400})}}async function M2(J,Y){try{let{taskId:Z}=await J.json();if(!Z)return Response.json({error:"missing taskId"},{status:400});return Response.json(await c7(Y,Z))}catch(Z){return Response.json({error:Z instanceof Error?Z.message:String(Z)},{status:500})}}async function a7(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 YV(){return Response.json({review:O1(FQ.review)??null,pr:O1(FQ.pr)??null})}async function F2(J){try{let Y=await J.json();if(typeof Y.review==="string")m1(FQ.review,Y.review);if(typeof Y.pr==="string")m1(FQ.pr,Y.pr);return YV()}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:400})}}async function O2(J,Y){let f=_7($7(Y,J==="/"?"/index.html":J));if(!f.startsWith(Y))return new Response("forbidden",{status:403});let G=Bun.file(Q2(f)?f:$7(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 A2(J){let{link:Y,sseSends:Z,staticDir:f}=J,G=J.tearDownSession??((X)=>void i7(X));return async function(Q){let q=new URL(Q.url);if(q.pathname===o7)return new Response(r7);if(!v5(Q.headers.get("origin"),{allowedHost:J.allowedHost}))return new Response("forbidden: cross-origin request rejected",{status:403});if(q.pathname==="/events")return q2((M)=>{let D=J.onSseOpen?.()??(()=>{});return M("snapshot",Y.snapshot()),Z.add(M),()=>{Z.delete(M),D()}});if(q.pathname==="/api/rpc"&&Q.method==="POST")return B2(Q,Y,G);if(q.pathname==="/api/session"&&Q.method==="POST")return M2(Q,Y);if(q.pathname==="/api/engine-spec"&&Q.method==="GET")return a7(q,Y,d7);if(q.pathname==="/api/terminal-spec"&&Q.method==="GET")return a7(q,Y,n7);if(q.pathname==="/api/engines"&&Q.method==="GET")return H2();if(q.pathname==="/api/cli-invocation"&&Q.method==="GET")return j2();if(q.pathname==="/api/projects"&&Q.method==="GET")return W2();if(q.pathname==="/api/settings"&&Q.method==="GET")return JV();if(q.pathname==="/api/settings"&&Q.method==="PATCH")return D2(Q);if(q.pathname==="/api/quick-prompts"&&Q.method==="GET")return YV();if(q.pathname==="/api/quick-prompts"&&Q.method==="PUT")return F2(Q);let B=await y5(Q,q);if(B)return B;let H=await L5(Q,q);if(H)return H;let K=await O5(Q,q);if(K)return K;let j=await w5(Q,q,Y);if(j)return j;let U=await T5(Q,q);if(U)return U;let L=I5(Q,q);if(L)return L;if(f)return O2(q.pathname,f);return new Response("not found",{status:404})}}function Gf(J,Y){let Z=J.snapshot().find((f)=>f.channel===Y);return Z?Z.payload:null}function yH(J){return J.length>1?J.replace(/\/+$/,""):J}function R2(J,Y){let Z=yH(Y),f=new Set([Y]);for(let G of J){let X=yH(G.repo),Q=yH(G.worktreePath);if(X===Z||Q===Z){if(G.repo)f.add(G.repo);if(G.worktreePath)f.add(G.worktreePath)}}return[...f]}function ZV(J){let Y=dG();return{async request(Z,f){return await cG(Y,Z,f,J.ctx(0))},snapshot(){let Z=J.orch.listTasks().map(lJ),f={},G=Gf(J.bus,"issue.snapshot");if(G)for(let q of R2(Z,G.repoRoot))f[q]={...G,repoRoot:q};let X=Gf(J.bus,"task.jobs"),Q=X?.phase==="running"?{[X.taskId]:X}:{};return{tasks:Z,activeTaskId:Gf(J.bus,"active-task")?.taskId??null,engineStates:J.activity.snapshotByTask(),update:Gf(J.bus,"update")?.info??null,jobs:Q,worktreeChanges:Gf(J.bus,"worktree.changes")?.changes??{},issueSnapshots:f,deliver:Gf(J.bus,"session.deliver"),uiPrefs:Gf(J.bus,"ui-prefs"),connected:!0}}}}async function p7(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 g2(J,Y=o7){let Z;try{Z=(await(await fetch(`http://localhost:${J}${Y}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Z!==r7)throw Error(`port ${J} is in use by a non-kobe service; refusing to replace it`);let f=await p7(J);for(let X of f)try{process.kill(X,"SIGTERM")}catch{}let G=Date.now()+2000;while(Date.now()<G){if((await p7(J)).length===0)return;await new Promise((X)=>setTimeout(X,100))}}async function fV(J){if(J.takeover!==!1)await g2(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",G=m5(f),X=A2({link:J.link,sseSends:Y,staticDir:J.staticDir?_7(J.staticDir):void 0,allowedHost:G,onSseOpen:J.onSseOpen}),Q=Bun.serve({port:J.port,hostname:f,idleTimeout:0,fetch:X});return{port:Q.port??J.port,hostname:f,close(){Z(),Q.stop(!0)}}}var r7="kobe-web",o7="/__kobe_web",s7,t7,FQ;var GV=y(()=>{xZ();gJ();ZZ();mG();Tz();D1();Kf();wz();QJ();D5();A5();k5();b5();yz();TZ();E5();c5();n5();l7();s7=["primary","success","info"],t7=/^[a-z][a-z0-9_-]{0,47}$/;FQ={review:"boardPrompt.review",pr:"boardPrompt.pr"}});import{spawn as C2}from"child_process";function kH(J,Y,Z,f){if(Z)return J+f.slowRetryMs;return Y+Math.max(f.minIntervalMs,(Y-J)*5)}function IH(J,Y){return!J.inFlight&&Y>=J.nextAllowedAt}function OQ(J,Y,Z,f){let G=Date.now();if(!IH(J,G))return!1;J.inFlight=!0;let X=new AbortController,Q=setTimeout(()=>X.abort(),Y.timeoutMs);return(async()=>{let q,B=!1;try{q=await Z(X.signal),B=!0}catch{}clearTimeout(Q);let H=X.signal.aborted;if(J.nextAllowedAt=kH(G,Date.now(),H,Y),J.inFlight=!1,B&&!H)f(q)})(),!0}function mY(J,Y,Z){return new Promise((f)=>{let G="",X=!1,Q=(B)=>{if(X)return;X=!0,f({status:B,stdout:G})},q=C2(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",()=>Q(null)),q.on("close",(B)=>Q(B))})}var AQ=()=>{};var XV={};q1(XV,{sameWorktreeChanges:()=>LY,readWorktreeChanges:()=>y2,pickPushedChanges:()=>gQ,parsePorcelain:()=>of});import{spawnSync as S2}from"child_process";function LY(J,Y){return J.added===Y.added&&J.deleted===Y.deleted}function gQ(J,Y){if(!J)return null;return J.get(Y)??RQ}function y2(J){if(!J)return RQ;try{let Y=S2("git",["status","--porcelain=v1"],{cwd:J,encoding:"utf8",stdio:["ignore","pipe","pipe"],env:CJ()});if(Y.status!==0||!Y.stdout)return RQ;return of(Y.stdout)}catch{return RQ}}function of(J){let Y=0,Z=0;for(let f of J.split(`
80
- `)){if(!f||f.startsWith("##"))continue;let G=f.charAt(0),X=f.charAt(1);if(G==="D"||X==="D")Z+=1;else Y+=1}return{added:Y,deleted:Z}}var RQ;var sf=y(()=>{qZ();RQ={added:0,deleted:0}});async function N2(J,Y){let Z=await mY("git",["status","--porcelain=v1"],{cwd:J,env:CJ(),signal:Y});if(Z.status!==0)throw Error("git status failed");return of(Z.stdout)}function T2(J){let Y=new Set;for(let Z of J){if(Z.archived)continue;if(!Z.worktreePath)continue;if(bJ(Z.repo)||bJ(Z.worktreePath))continue;Y.add(Z.worktreePath)}return Y}class zV{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=T2(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){h1("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:k2,slowRetryMs:I2,minIntervalMs:b2},f=this.options.run??N2;OQ(Y,Z,(G)=>f(J,G),(G)=>{if(this.stopped)return;if(this.entries.get(J)!==Y)return;if(Y.value&&LY(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 QV(J,Y,Z=bH,f){if(Z<=0)return()=>{};let G=new zV(J,Y,{hasSubscribers:f});G.tick();let X=setInterval(()=>G.tick(),Z);return X.unref?.(),()=>{clearInterval(X),G.stop()}}var bH=2000,k2=4000,I2=60000,b2=1500;var qV=y(()=>{qZ();AQ();D1();sf()});import{mkdir as BV,readFile as E2,unlink as NH,writeFile as u2}from"fs/promises";import{createServer as x2}from"net";import{dirname as HV}from"path";import{StringDecoder as w2}from"string_decoder";function P2(){let J=process.env.KOBE_DAEMON_IDLE_GRACE_MS;if(J===void 0)return jV;let Y=Number(J);return Number.isFinite(Y)&&Y>=0?Y:jV}async function VV(J,Y={}){let Z=Y.socketPath??QY(Y.homeDir),f=Y.pidPath??kY(Y.homeDir),G=Y.startedAt??new Date,X=new Set,Q=new Set,q=1,B=new _B({clients:function*(){yield*X,yield*Q},idleGraceMs:P2(),onIdleStop:()=>void s().catch((o)=>h1("daemon-idle-shutdown",o))}),H=new EB;H.onPublish((o)=>{WV(X,{type:"event",name:o.channel,payload:o.payload})});let K=new oq(H),j=new bz(Iz(Y.homeDir));await BV(HV(Z),{recursive:!0}),await BV(HV(f),{recursive:!0}),await NH(Z).catch(()=>{});let U=x2((o)=>{let p={id:q++,connectedAt:new Date,socket:o,buffer:"",subscribed:!1,holdsLifetime:!1,channels:null};X.add(p);let _=new w2("utf8");o.on("data",(f0)=>{p.buffer+=_.write(f0),j0(p)}),o.on("error",()=>{}),o.on("close",()=>{if(X.delete(p),p.subscribed)GZ("conn",`client #${p.id} (${p.holdsLifetime?"gui":"pane"}) disconnected \u2014 ${X.size} client(s), ${B.guiCount()} gui left`);B.clientDisconnected(p.holdsLifetime)})}),L=J.subscribeTasks((o)=>{H.publish("task.snapshot",{tasks:o.map(lJ)})}),M=Y.checkUpdate??DG,D=Y.updatePollMs??h2,A=()=>{M().then((o)=>H.publish("update",{info:o})).catch((o)=>h1("update-poller",o))},R=null;if(D>0)A(),R=setInterval(A,D),R.unref?.();let l=Y.autoTitlePollMs??TB,g=r8(J,l,()=>B.hasSubscribers()),S=j5(H,{statePath:oB(Y.homeDir),debounceMs:Y.uiPrefsDebounceMs??rB}),C=Q5(H,{path:pB(Y.homeDir),debounceMs:Y.keybindingsDebounceMs??aB}),k=QV(J,H,Y.worktreeChangesTickMs??bH,()=>B.hasSubscribers()),$=null,G0={socketPath:Z,pidPath:f,startedAt:G,get webPort(){return $?.port},clients:X,async close(){if(B.markStopping(),L(),$?.close(),$=null,R)clearInterval(R);g(),S(),C(),k(),K.close(),WV(X,{type:"event",name:"daemon.stopping",payload:{}});for(let o of Array.from(X))o.socket.destroy();await new Promise((o)=>U.close(()=>o())),await NH(Z).catch(()=>{}),await NH(f).catch(()=>{})}};await new Promise((o,p)=>{let _=U;_.once("error",p),U.listen(Z,()=>{_.removeListener("error",p),o()})}),await u2(f,`${process.pid}
81
- `,"utf8");async function s(){if(B.isStopping())return;B.markStopping(),await Y.onStop?.(),setTimeout(()=>{G0.close().catch((o)=>h1("daemon-shutdown",o))},0).unref()}let J0=dG();function E(o){return{orch:J,bus:H,activity:K,issues:j,daemon:{startedAt:G,socketPath:Z,webPort:$?.port,pid:process.pid,guiCount:()=>B.guiCount(),stopSoon:s},clientId:o}}if(Y.webPort!==void 0){let o=ZV({orch:J,bus:H,activity:K,ctx:E});$=await fV({port:Y.webPort,hostname:Y.webHost,staticDir:Y.webStaticDir,link:o,onEvent:(p)=>H.onPublish(p),onSseOpen:()=>{let p={subscribed:!0,holdsLifetime:!0};return Q.add(p),B.guiAttached(),GZ("conn",`web client subscribed \u2014 ${X.size+Q.size} client(s), ${B.guiCount()} gui`),()=>{Q.delete(p),GZ("conn",`web client disconnected \u2014 ${X.size+Q.size} client(s), ${B.guiCount()} gui left`),B.clientDisconnected(!0)}}}),GZ("web",`daemon web transport listening on http://${$.hostname}:${$.port}`)}async function Q0(o,p){if(o.name==="subscribe"){let _=PB(o.payload),f0=p.subscribed;p.subscribed=!0;let a=_.role==="gui"?"gui":"pane";p.holdsLifetime=a==="gui",p.channels=TW(_.channels);let L0=!f0;if(p.holdsLifetime)B.guiAttached();GZ("conn",`client #${p.id} subscribed as ${a}${p.channels?` [${[...p.channels].join(",")}]`:""} \u2014 ${X.size} client(s), ${B.guiCount()} gui${L0?" (collectors resume)":""}`);for(let m of H.snapshot()){if(p.channels&&!p.channels.has(m.channel))continue;eG(p,{type:"event",name:m.channel,payload:m.payload})}if(!p.channels||p.channels.has("engine-state"))for(let m of K.currentNonIdle())eG(p,{type:"event",name:"engine-state",payload:m});return{}}return cG(J0,o.name,o.payload,E(p.id))}async function e(o,p){try{let _=await Q0(o,p);eG(p,{type:"response",id:o.id,name:o.name,payload:_})}catch(_){eG(p,{type:"response",id:o.id,name:o.name,error:hB(_)})}}function j0(o){let p=o.buffer.indexOf(`
82
- `);while(p!==-1){let _=o.buffer.slice(0,p);if(o.buffer=o.buffer.slice(p+1),_.trim().length>0)try{let f0=JSON.parse(_);if(f0.type!=="request")throw Error("daemon only accepts request frames from clients");e(f0,o)}catch(f0){eG(o,{type:"response",id:"parse-error",error:{message:f0 instanceof Error?f0.message:String(f0)}})}p=o.buffer.indexOf(`
83
- `)}}return G0}async function tf(J){try{let Y=await E2(J,"utf8"),Z=Number(Y.trim());return Number.isFinite(Z)?Z:null}catch{return null}}function eG(J,Y){J.socket.write(yG(Y))}function WV(J,Y){let Z=Y.type==="event"&&Y.name!=="daemon.stopping"?Y.name:null,f=null;for(let G of J){if(!G.subscribed&&Y.type==="event")continue;if(Z&&G.channels&&!G.channels.has(Z))continue;f??=yG(Y),G.socket.write(f)}}var h2=21600000,jV=3000;var CQ=y(()=>{XJ();dW();o8();yz();lB();q5();B5();Of();TZ();W5();GV();qV();yz();lB()});import{unlink as KV}from"fs/promises";function v2(J){try{return process.kill(J,0),!0}catch(Y){return Y.code==="EPERM"}}async function ef(J,Y){let Z=await tf(Y),f=Z!==null&&Z!==process.pid?Z:null,G=f!==null&&v2(f),X=G?"graceful":"absent",Q=new EJ(J),q=Q.request("daemon.stop").catch(()=>{return}),B=new Promise((H)=>setTimeout(H,2000));if(await Promise.race([q,B]),Q.close(),G&&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{}X="sigterm",K=!0}await new Promise((j)=>setTimeout(j,50))}try{process.kill(f,0),process.kill(f,"SIGKILL"),X="sigkill",await new Promise((j)=>setTimeout(j,100))}catch{}}return await KV(J).catch(()=>{}),await KV(Y).catch(()=>{}),{pid:Z,method:X}}var SQ=y(()=>{kG();CQ()});var DH={};q1(DH,{testDaemonResponds:()=>yQ,ensureDaemonReachable:()=>JG,connectOrStartDaemon:()=>tJ,connectIfRunning:()=>PJ});import{spawn as m2}from"child_process";import{closeSync as c2,existsSync as d2,mkdirSync as n2,openSync as i2}from"fs";import{dirname as UV,resolve as TH}from"path";import{fileURLToPath as l2}from"url";function p2(J,Y,Z,f){let G="ignore",X;try{n2(UV(f),{recursive:!0}),X=i2(f,"a"),G=["ignore",X,X]}catch{G="ignore"}if(m2(J,[...Y],{detached:!0,stdio:G,env:Z}).unref(),X!==void 0)try{c2(X)}catch{}}async function JG(){let J=QY();if(await yQ(J))return J;await ef(J,kY()).catch(()=>{});let[Y,...Z]=_2($2);p2(Y,Z,process.env,eX());let f=Date.now()+5000;while(Date.now()<f){if(await yQ(J))return J;await new Promise((G)=>setTimeout(G,100))}throw Error(`kobe: daemon did not start (or stayed wedged) at ${J}`)}async function tJ(){let J=await JG(),Y=new EJ(J);return await Y.connect(),Y}async function PJ(){let J=QY();if(!await yQ(J))return null;let Y=new EJ(J);return await Y.connect(),Y}async function yQ(J,Y=a2){let Z=new EJ(J);try{await Z.connect()}catch{return Z.close(),!1}let f=Z.request("hello",{protocolVersion:TJ}).then(()=>!0).catch(()=>!0),G,X=new Promise((q)=>{G=setTimeout(()=>q(!1),Y)}),Q=await Promise.race([f,X]);if(G)clearTimeout(G);return Z.close(),Q}function _2(J){let Y=l2(import.meta.url);if(Y.startsWith("/$bunfs")||Y.startsWith("B:\\~BUN"))return[process.execPath,...J];let Z=UV(Y),f=[TH(Z,"../cli/index.ts"),TH(Z,"../../../kobe/src/cli/index.ts"),TH(Z,"../cli/index.js")],G=f.find((X)=>d2(X));if(G)return[process.execPath,G,...J];throw Error(`kobe: could not locate kobe entry near ${Z}; checked ${f.join(", ")}`)}var $2,a2=3000;var KJ=y(()=>{SQ();Of();TZ();kG();$2=["daemon","start"]});var MV={};q1(MV,{runRepoSubcommand:()=>t2});import{readFileSync as r2}from"fs";import{resolve as kQ}from"path";function VZ(J){process.stderr.write(`kobe repo: ${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 F2(J,Y,Z){try{let{name:X,payload:G}=await J.json();if(!X)return Response.json({error:"missing rpc name"},{status:400});if(!r5.has(X))return Response.json({error:`rpc ${X} is not exposed to the web UI`},{status:403});let f=await Y.request(X,G),Q=G?.taskId;if(typeof Q==="string"){let q=X==="task.archive"&&G.archived!==!1;if(X==="task.delete"||q)Z(Q)}return Response.json({result:f})}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 O2(){try{let Y=(await xY()).map((Z)=>({id:Z,label:sZ(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 A2(){return Response.json({api:tZ()})}function R2(){return Response.json({projects:EJ()})}function MZ(J,Y=""){return typeof J==="string"?J:Y}function g2(J,Y){return typeof J==="boolean"?J:Y}function QV(J){let Y=J.customEngineIds;if(!Array.isArray(Y))return[];return Y.filter((Z)=>typeof Z==="string"&&zV.test(Z)&&!e1(Z))}function C2(J){return J.split(/[-_]+/).filter(Boolean).map((Y)=>`${Y.slice(0,1).toUpperCase()}${Y.slice(1)}`).join(" ")}function S2(J,Y){return MZ(J[eJ(Y)]).trim()||sZ(Y)}function y2(J,Y){return MZ(J[tJ(Y)]).trim()||aG(Y).join(" ")}function qV(){let J=$1(),Y=QV(J),Z=[...NZ,...Y],X=MZ(J.lastSelectedVendor,"claude"),G=MZ(J.focusAccent,"primary");return Response.json({activeTheme:MZ(J.activeTheme,"claude"),transparentBackground:g2(J.transparentBackground,!1),focusAccent:fV.includes(G)?G:"primary",notificationsToast:J["notifications.toast.enabled"]!==!1,notificationsSound:J["notifications.sound.enabled"]!==!1,settingsSurface:YX(J[nY]??JX),editorKind:vX(J[dY]??cz),editorCustomCommand:MZ(J[VZ]),remoteProjects:J["experimental.remoteProjects"]===!0,autoStatus:J[rZ]===!0,dispatcher:J[oZ]===!0,defaultEngine:X,engines:Z.map((f)=>({id:f,label:S2(J,f),command:y2(J,f),isBuiltin:e1(f),isCustom:!e1(f),isDefault:f===X}))})}function Zf(J,Y,Z){if(typeof Z==="string")J[Y]=Z.trim()}function eX(J,Y,Z){if(typeof Z==="boolean")J[Y]=Z}async function k2(J){try{let Y=await J.json(),Z={};if(Zf(Z,"activeTheme",Y.activeTheme),eX(Z,"transparentBackground",Y.transparentBackground),fV.includes(Y.focusAccent))Z.focusAccent=Y.focusAccent;if(eX(Z,"notifications.toast.enabled",Y.notificationsToast),eX(Z,"notifications.sound.enabled",Y.notificationsSound),Y.settingsSurface==="chattab"||Y.settingsSurface==="taskpanel")Z[nY]=Y.settingsSurface;if(eZ.includes(Y.editorKind))Z[dY]=Y.editorKind;Zf(Z,VZ,Y.editorCustomCommand),eX(Z,"experimental.remoteProjects",Y.remoteProjects),eX(Z,rZ,Y.autoStatus),eX(Z,oZ,Y.dispatcher),Zf(Z,"lastSelectedVendor",Y.defaultEngine);let X=$1(),G=QV(X),f=new Set([...NZ,...G]),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"||!f.has(B.id))continue;Zf(Z,tJ(B.id),B.command),Zf(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(!zV.test(B)||e1(B)||f.has(B))return Response.json({error:"invalid or duplicate engine id"},{status:400});Z.customEngineIds=[...G,B],Z[tJ(B)]=MZ(q.command).trim();let H=MZ(q.label).trim();Z[eJ(B)]=H&&H!==B?H:C2(B)}if(typeof Y.removeEngine==="string"){let q=Y.removeEngine;if(!e1(q)){if(Z.customEngineIds=G.filter((B)=>B!==q),Z[tJ(q)]=void 0,Z[eJ(q)]=void 0,X.lastSelectedVendor===q)Z.lastSelectedVendor="claude"}}if(Object.keys(Z).length>0)uZ(Z);return qV()}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:400})}}async function I2(J,Y){try{let{taskId:Z}=await J.json();if(!Z)return Response.json({error:"missing taskId"},{status:400});return Response.json(await _7(Y,Z))}catch(Z){return Response.json({error:Z instanceof Error?Z.message:String(Z)},{status:500})}}async function JV(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 BV(){return Response.json({review:C1(SQ.review)??null,pr:C1(SQ.pr)??null})}async function N2(J){try{let Y=await J.json();if(typeof Y.review==="string")d1(SQ.review,Y.review);if(typeof Y.pr==="string")d1(SQ.pr,Y.pr);return BV()}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:400})}}async function b2(J,Y){let X=ZV(e7(Y,J==="/"?"/index.html":J));if(!X.startsWith(Y))return new Response("forbidden",{status:403});let G=Bun.file(D2(X)?X:e7(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 T2(J){let{link:Y,sseSends:Z,staticDir:X}=J,G=J.tearDownSession??((f)=>void s7(f));return async function(Q){let q=new URL(Q.url);if(q.pathname===GV)return new Response(XV);if(!a5(Q.headers.get("origin"),{allowedHost:J.allowedHost}))return new Response("forbidden: cross-origin request rejected",{status:403});if(q.pathname==="/events")return M2((M)=>{let D=J.onSseOpen?.()??(()=>{});return M("snapshot",Y.snapshot()),Z.add(M),()=>{Z.delete(M),D()}});if(q.pathname==="/api/rpc"&&Q.method==="POST")return F2(Q,Y,G);if(q.pathname==="/api/session"&&Q.method==="POST")return I2(Q,Y);if(q.pathname==="/api/engine-spec"&&Q.method==="GET")return JV(q,Y,r7);if(q.pathname==="/api/terminal-spec"&&Q.method==="GET")return JV(q,Y,o7);if(q.pathname==="/api/engines"&&Q.method==="GET")return O2();if(q.pathname==="/api/cli-invocation"&&Q.method==="GET")return A2();if(q.pathname==="/api/projects"&&Q.method==="GET")return R2();if(q.pathname==="/api/settings"&&Q.method==="GET")return qV();if(q.pathname==="/api/settings"&&Q.method==="PATCH")return k2(Q);if(q.pathname==="/api/quick-prompts"&&Q.method==="GET")return BV();if(q.pathname==="/api/quick-prompts"&&Q.method==="PUT")return N2(Q);let B=await x5(Q,q);if(B)return B;let H=await C5(Q,q);if(H)return H;let K=await I5(Q,q);if(K)return K;let j=await i5(Q,q,Y);if(j)return j;let U=await m5(Q,q);if(U)return U;let L=h5(Q,q);if(L)return L;if(X)return b2(q.pathname,X);return new Response("not found",{status:404})}}function BX(J,Y){let Z=J.snapshot().find((X)=>X.channel===Y);return Z?Z.payload:null}function wH(J){return J.length>1?J.replace(/\/+$/,""):J}function E2(J,Y){let Z=wH(Y),X=new Set([Y]);for(let G of J){let f=wH(G.repo),Q=wH(G.worktreePath);if(f===Z||Q===Z){if(G.repo)X.add(G.repo);if(G.worktreePath)X.add(G.worktreePath)}}return[...X]}function HV(J){let Y=$G();return{async request(Z,X){return await lG(Y,Z,X,J.ctx(0))},snapshot(){let Z=J.orch.listTasks().map(rJ),X={},G=BX(J.bus,"issue.snapshot");if(G)for(let q of E2(Z,G.repoRoot))X[q]={...G,repoRoot:q};let f=BX(J.bus,"task.jobs"),Q=f?.phase==="running"?{[f.taskId]:f}:{};return{tasks:Z,activeTaskId:BX(J.bus,"active-task")?.taskId??null,engineStates:J.activity.snapshotByTask(),update:BX(J.bus,"update")?.info??null,jobs:Q,worktreeChanges:BX(J.bus,"worktree.changes")?.changes??{},issueSnapshots:X,deliver:BX(J.bus,"session.deliver"),uiPrefs:BX(J.bus,"ui-prefs"),connected:!0}}}}async function YV(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 u2(J,Y=GV){let Z;try{Z=(await(await fetch(`http://localhost:${J}${Y}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Z!==XV)throw Error(`port ${J} is in use by a non-kobe service; refusing to replace it`);let X=await YV(J);for(let f of X)try{process.kill(f,"SIGTERM")}catch{}let G=Date.now()+2000;while(Date.now()<G){if((await YV(J)).length===0)return;await new Promise((f)=>setTimeout(f,100))}}async function jV(J){if(J.takeover!==!1)await u2(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=p5(X),f=T2({link:J.link,sseSends:Y,staticDir:J.staticDir?ZV(J.staticDir):void 0,allowedHost:G,onSseOpen:J.onSseOpen}),Q=Bun.serve({port:J.port,hostname:X,idleTimeout:0,fetch:f});return{port:Q.port??J.port,hostname:X,close(){Z(),Q.stop(!0)}}}var XV="kobe-web",GV="/__kobe_web",fV,zV,SQ;var WV=S(()=>{mZ();yJ();qZ();iG();Pz();A1();FX();dz();HJ();S5();N5();w5();P5();Ez();hZ();c5();_5();o5();t7();fV=["primary","success","info"],zV=/^[a-z][a-z0-9_-]{0,47}$/;SQ={review:"boardPrompt.review",pr:"boardPrompt.pr"}});import{spawn as x2}from"child_process";function hH(J,Y,Z,X){if(Z)return J+X.slowRetryMs;return Y+Math.max(X.minIntervalMs,(Y-J)*5)}function PH(J,Y){return!J.inFlight&&Y>=J.nextAllowedAt}function yQ(J,Y,Z,X){let G=Date.now();if(!PH(J,G))return!1;J.inFlight=!0;let f=new AbortController,Q=setTimeout(()=>f.abort(),Y.timeoutMs);return(async()=>{let q,B=!1;try{q=await Z(f.signal),B=!0}catch{}clearTimeout(Q);let H=f.signal.aborted;if(J.nextAllowedAt=hH(G,Date.now(),H,Y),J.inFlight=!1,B&&!H)X(q)})(),!0}function lY(J,Y,Z){return new Promise((X)=>{let G="",f=!1,Q=(B)=>{if(f)return;f=!0,X({status:B,stdout:G})},q=x2(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",()=>Q(null)),q.on("close",(B)=>Q(B))})}var kQ=()=>{};var VV={};j1(VV,{sameWorktreeChanges:()=>AY,readWorktreeChanges:()=>h2,pickPushedChanges:()=>NQ,parsePorcelain:()=>JG});import{spawnSync as w2}from"child_process";function AY(J,Y){return J.added===Y.added&&J.deleted===Y.deleted}function NQ(J,Y){if(!J)return null;return J.get(Y)??IQ}function h2(J){if(!J)return IQ;try{let Y=w2("git",["status","--porcelain=v1"],{cwd:J,encoding:"utf8",stdio:["ignore","pipe","pipe"],env:kJ()});if(Y.status!==0||!Y.stdout)return IQ;return JG(Y.stdout)}catch{return IQ}}function JG(J){let Y=0,Z=0;for(let X of J.split(`
80
+ `)){if(!X||X.startsWith("##"))continue;let G=X.charAt(0),f=X.charAt(1);if(G==="D"||f==="D")Z+=1;else Y+=1}return{added:Y,deleted:Z}}var IQ;var YG=S(()=>{KZ();IQ={added:0,deleted:0}});async function c2(J,Y){let Z=await lY("git",["status","--porcelain=v1"],{cwd:J,env:kJ(),signal:Y});if(Z.status!==0)throw Error("git status failed");return JG(Z.stdout)}function d2(J){let Y=new Set;for(let Z of J){if(Z.archived)continue;if(!Z.worktreePath)continue;if(uJ(Z.repo)||uJ(Z.worktreePath))continue;Y.add(Z.worktreePath)}return Y}class KV{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=d2(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:P2,slowRetryMs:v2,minIntervalMs:m2},X=this.options.run??c2;yQ(Y,Z,(G)=>X(J,G),(G)=>{if(this.stopped)return;if(this.entries.get(J)!==Y)return;if(Y.value&&AY(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 UV(J,Y,Z=vH,X){if(Z<=0)return()=>{};let G=new KV(J,Y,{hasSubscribers:X});G.tick();let f=setInterval(()=>G.tick(),Z);return f.unref?.(),()=>{clearInterval(f),G.stop()}}var vH=2000,P2=4000,v2=60000,m2=1500;var LV=S(()=>{KZ();kQ();A1();YG()});import{mkdir as DV,readFile as n2,unlink as mH,writeFile as i2}from"fs/promises";import{createServer as l2}from"net";import{dirname as MV}from"path";import{StringDecoder as $2}from"string_decoder";function p2(){let J=process.env.KOBE_DAEMON_IDLE_GRACE_MS;if(J===void 0)return FV;let Y=Number(J);return Number.isFinite(Y)&&Y>=0?Y:FV}async function AV(J,Y={}){let Z=Y.socketPath??WY(Y.homeDir),X=Y.pidPath??EY(Y.homeDir),G=Y.startedAt??new Date,f=new Set,Q=new Set,q=1,B=new XH({clients:function*(){yield*f,yield*Q},idleGraceMs:p2(),onIdleStop:()=>void t().catch((o)=>v1("daemon-idle-shutdown",o))}),H=new dB;H.onPublish((o)=>{OV(f,{type:"event",name:o.channel,payload:o.payload})});let K=new fB(H),j=new wz(xz(Y.homeDir));await DV(MV(Z),{recursive:!0}),await DV(MV(X),{recursive:!0}),await mH(Z).catch(()=>{});let U=l2((o)=>{let _={id:q++,connectedAt:new Date,socket:o,buffer:"",subscribed:!1,holdsLifetime:!1,channels:null};f.add(_);let r=new $2("utf8");o.on("data",(X0)=>{_.buffer+=r.write(X0),W0(_)}),o.on("error",()=>{}),o.on("close",()=>{if(f.delete(_),_.subscribed)HZ("conn",`client #${_.id} (${_.holdsLifetime?"gui":"pane"}) disconnected \u2014 ${f.size} client(s), ${B.guiCount()} gui left`);B.clientDisconnected(_.holdsLifetime)})}),L=J.subscribeTasks((o)=>{H.publish("task.snapshot",{tasks:o.map(rJ)})}),M=Y.checkUpdate??AG,D=Y.updatePollMs??a2,O=()=>{M().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??cB,R=X5(J,l,()=>B.hasSubscribers()),C=F5(H,{statePath:fH(Y.homeDir),debounceMs:Y.uiPrefsDebounceMs??GH}),g=U5(H,{path:ZH(Y.homeDir),debounceMs:Y.keybindingsDebounceMs??YH}),y=UV(J,H,Y.worktreeChangesTickMs??vH,()=>B.hasSubscribers()),$=null,f0={socketPath:Z,pidPath:X,startedAt:G,get webPort(){return $?.port},clients:f,async close(){if(B.markStopping(),L(),$?.close(),$=null,A)clearInterval(A);R(),C(),g(),y(),K.close(),OV(f,{type:"event",name:"daemon.stopping",payload:{}});for(let o of Array.from(f))o.socket.destroy();await new Promise((o)=>U.close(()=>o())),await mH(Z).catch(()=>{}),await mH(X).catch(()=>{})}};await new Promise((o,_)=>{let r=U;r.once("error",_),U.listen(Z,()=>{r.removeListener("error",_),o()})}),await i2(X,`${process.pid}
81
+ `,"utf8");async function t(){if(B.isStopping())return;B.markStopping(),await Y.onStop?.(),setTimeout(()=>{f0.close().catch((o)=>v1("daemon-shutdown",o))},0).unref()}let Z0=$G();function u(o){return{orch:J,bus:H,activity:K,issues:j,daemon:{startedAt:G,socketPath:Z,webPort:$?.port,pid:process.pid,guiCount:()=>B.guiCount(),stopSoon:t},clientId:o}}if(Y.webPort!==void 0){let o=HV({orch:J,bus:H,activity:K,ctx:u});$=await jV({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(),HZ("conn",`web client subscribed \u2014 ${f.size+Q.size} client(s), ${B.guiCount()} gui`),()=>{Q.delete(_),HZ("conn",`web client disconnected \u2014 ${f.size+Q.size} client(s), ${B.guiCount()} gui left`),B.clientDisconnected(!0)}}}),HZ("web",`daemon web transport listening on http://${$.hostname}:${$.port}`)}async function B0(o,_){if(o.name==="subscribe"){let r=aB(o.payload),X0=_.subscribed;_.subscribed=!0;let a=r.role==="gui"?"gui":"pane";_.holdsLifetime=a==="gui",_.channels=m9(r.channels);let U0=!X0;if(_.holdsLifetime)B.guiAttached();HZ("conn",`client #${_.id} subscribed as ${a}${_.channels?` [${[..._.channels].join(",")}]`:""} \u2014 ${f.size} client(s), ${B.guiCount()} gui${U0?" (collectors resume)":""}`);for(let c of H.snapshot()){if(_.channels&&!_.channels.has(c.channel))continue;Xf(_,{type:"event",name:c.channel,payload:c.payload})}if(!_.channels||_.channels.has("engine-state"))for(let c of K.currentNonIdle())Xf(_,{type:"event",name:"engine-state",payload:c});return{}}return lG(Z0,o.name,o.payload,u(_.id))}async function Y0(o,_){try{let r=await B0(o,_);Xf(_,{type:"response",id:o.id,name:o.name,payload:r})}catch(r){Xf(_,{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 X0=JSON.parse(r);if(X0.type!=="request")throw Error("daemon only accepts request frames from clients");Y0(X0,o)}catch(X0){Xf(o,{type:"response",id:"parse-error",error:{message:X0 instanceof Error?X0.message:String(X0)}})}_=o.buffer.indexOf(`
83
+ `)}}return f0}async function ZG(J){try{let Y=await n2(J,"utf8"),Z=Number(Y.trim());return Number.isFinite(Z)?Z:null}catch{return null}}function Xf(J,Y){J.socket.write(bG(Y))}function OV(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??=bG(Y),G.socket.write(X)}}var a2=21600000,FV=3000;var bQ=S(()=>{zJ();r9();G5();Ez();eB();L5();D5();SX();hZ();O5();WV();LV();Ez();eB()});import{unlink as RV}from"fs/promises";function _2(J){try{return process.kill(J,0),!0}catch(Y){return Y.code==="EPERM"}}async function XG(J,Y){let Z=await ZG(Y),X=Z!==null&&Z!==process.pid?Z:null,G=X!==null&&_2(X),f=G?"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(),G&&X!==null){let H=Date.now()+5000,K=!1;while(Date.now()<H){try{process.kill(X,0)}catch{break}if(!K&&Date.now()-(H-5000)>2000){try{process.kill(X,"SIGTERM")}catch{}f="sigterm",K=!0}await new Promise((j)=>setTimeout(j,50))}try{process.kill(X,0),process.kill(X,"SIGKILL"),f="sigkill",await new Promise((j)=>setTimeout(j,100))}catch{}}return await RV(J).catch(()=>{}),await RV(Y).catch(()=>{}),{pid:Z,method:f}}var TQ=S(()=>{TG();bQ()});var yH={};j1(yH,{testDaemonResponds:()=>EQ,ensureDaemonReachable:()=>GG,connectOrStartDaemon:()=>XY,connectIfRunning:()=>dJ});import{spawn as r2}from"child_process";import{closeSync as o2,existsSync as s2,mkdirSync as t2,openSync as e2}from"fs";import{dirname as gV,resolve as cH}from"path";import{fileURLToPath as JR}from"url";function XR(J,Y,Z,X){let G="ignore",f;try{t2(gV(X),{recursive:!0}),f=e2(X,"a"),G=["ignore",f,f]}catch{G="ignore"}if(r2(J,[...Y],{detached:!0,stdio:G,env:Z}).unref(),f!==void 0)try{o2(f)}catch{}}async function GG(){let J=WY();if(await EQ(J))return J;await XG(J,EY()).catch(()=>{});let[Y,...Z]=GR(YR);XR(Y,Z,process.env,fz());let X=Date.now()+5000;while(Date.now()<X){if(await EQ(J))return J;await new Promise((G)=>setTimeout(G,100))}throw Error(`kobe: daemon did not start (or stayed wedged) at ${J}`)}async function XY(){let J=await GG(),Y=new hJ(J);return await Y.connect(),Y}async function dJ(){let J=WY();if(!await EQ(J))return null;let Y=new hJ(J);return await Y.connect(),Y}async function EQ(J,Y=ZR){let Z=new hJ(J);try{await Z.connect()}catch{return Z.close(),!1}let X=Z.request("hello",{protocolVersion:wJ}).then(()=>!0).catch(()=>!0),G,f=new Promise((q)=>{G=setTimeout(()=>q(!1),Y)}),Q=await Promise.race([X,f]);if(G)clearTimeout(G);return Z.close(),Q}function GR(J){let Y=JR(import.meta.url);if(Y.startsWith("/$bunfs")||Y.startsWith("B:\\~BUN"))return[process.execPath,...J];let Z=gV(Y),X=[cH(Z,"../cli/index.ts"),cH(Z,"../../../kobe/src/cli/index.ts"),cH(Z,"../cli/index.js")],G=X.find((f)=>s2(f));if(G)return[process.execPath,G,...J];throw Error(`kobe: could not locate kobe entry near ${Z}; checked ${X.join(", ")}`)}var YR,ZR=3000;var DJ=S(()=>{TQ();SX();hZ();TG();YR=["daemon","start"]});var yV={};j1(yV,{runRepoSubcommand:()=>qR});import{readFileSync as fR}from"fs";import{resolve as uQ}from"path";function FZ(J){process.stderr.write(`kobe repo: ${J}
84
84
 
85
- ${DV}
86
- `),process.exit(2)}function LV(J){try{return r2(kQ(process.cwd(),J),"utf8")}catch(Y){VZ(`cannot read ${J}: ${Y instanceof Error?Y.message:String(Y)}`)}}function o2(J){let Y={};for(let Z=0;Z<J.length;Z++){let f=J[Z],G=()=>{let X=J[++Z];if(X===void 0)VZ(`${f} requires a value`);return X};if(f==="--init-script")Y.initScript=G();else if(f==="--init-script-file")Y.initScript=LV(G());else if(f==="--init-prompt")Y.initPrompt=G();else if(f==="--init-prompt-file")Y.initPrompt=LV(G());else if(f.startsWith("-"))VZ(`unknown flag "${f}"`);else if(Y.path===void 0)Y.path=f;else VZ(`unexpected argument "${f}"`)}return Y}function s2(J){let Y,Z=!1,f=!1;for(let G of J)if(G==="--init-script")Z=!0;else if(G==="--init-prompt")f=!0;else if(G.startsWith("-"))VZ(`unknown flag "${G}"`);else if(Y===void 0)Y=G;else VZ(`unexpected argument "${G}"`);if(!Z&&!f)Z=!0,f=!0;return{path:Y,clearScript:Z,clearPrompt:f}}async function t2(J){let[Y,...Z]=J;if(Y===void 0||Y==="--help"||Y==="-h"||Y==="help"){process.stdout.write(`${DV}
87
- `);return}let{getRepoInitOverride:f,setRepoInitOverride:G,resolveRepoRoot:X}=await Promise.resolve().then(() => (D1(),aY)),{existsSync:Q}=await import("fs"),{join:q}=await import("path");if(Y==="show"){let[B]=Z.filter((L)=>!L.startsWith("-")),H=X(kQ(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?YG(K.initScript):"(unset)"}`),console.log(` override initPrompt: ${K.initPrompt?YG(K.initPrompt):"(unset)"}`);return}if(Y==="set"){let B=o2(Z);if(B.initScript===void 0&&B.initPrompt===void 0)VZ("set needs at least one of --init-script(-file) / --init-prompt(-file)");let H=X(kQ(process.cwd(),B.path??".")),K=G(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?YG(K.initScript):"(unset)"}`),console.log(` initPrompt: ${K.initPrompt?YG(K.initPrompt):"(unset)"}`);return}if(Y==="unset"){let{path:B,clearScript:H,clearPrompt:K}=s2(Z),j=X(kQ(process.cwd(),B??".")),U=G(j,{...H?{initScript:""}:{},...K?{initPrompt:""}:{}});console.log(`cleared override for ${j}`),console.log(` initScript: ${U.initScript?YG(U.initScript):"(unset)"}`),console.log(` initPrompt: ${U.initPrompt?YG(U.initPrompt):"(unset)"}`);return}VZ(`unknown verb "${Y}"`)}function YG(J){let Y=J.replace(/\s+/g," ").trim();return Y.length>60?`"${Y.slice(0,57)}\u2026"`:`"${Y}"`}var DV;var FV=y(()=>{DV=["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(`
88
- `)});import{spawnSync as e2}from"child_process";function ZR(J){let[Y,Z]=J.split("/");if(!Y||!Z)throw Error(`invalid GitHub repository slug: ${J}`);return{owner:Y,name:Z}}function OV(J,Y){let Z=J.trim();if(!Z)throw Error(`${Y} is required`);return Z}function AV(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 RV(J,Y,Z){let f=["api","graphql","-f",`query=${J}`];for(let[B,H]of Object.entries(Y))f.push("-f",`${B}=${H}`);let G=Z.spawn("gh",f,{encoding:"utf8"});if(G.error)throw Error(`failed to run gh: ${G.error.message}`);let X=typeof G.stdout==="string"?G.stdout:String(G.stdout??""),Q=typeof G.stderr==="string"?G.stderr:String(G.stderr??""),q;try{q=JSON.parse(X)}catch{throw Error(`failed to parse gh response: ${AV(Q,void 0)}`)}if((G.status??0)!==0||q.errors?.length)throw Error(AV(Q,q.errors));if(!q.data)throw Error("GitHub CLI response did not include data");return q.data}function fR(J){return`${J}
85
+ ${SV}
86
+ `),process.exit(2)}function CV(J){try{return fR(uQ(process.cwd(),J),"utf8")}catch(Y){FZ(`cannot read ${J}: ${Y instanceof Error?Y.message:String(Y)}`)}}function zR(J){let Y={};for(let Z=0;Z<J.length;Z++){let X=J[Z],G=()=>{let f=J[++Z];if(f===void 0)FZ(`${X} requires a value`);return f};if(X==="--init-script")Y.initScript=G();else if(X==="--init-script-file")Y.initScript=CV(G());else if(X==="--init-prompt")Y.initPrompt=G();else if(X==="--init-prompt-file")Y.initPrompt=CV(G());else if(X.startsWith("-"))FZ(`unknown flag "${X}"`);else if(Y.path===void 0)Y.path=X;else FZ(`unexpected argument "${X}"`)}return Y}function QR(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("-"))FZ(`unknown flag "${G}"`);else if(Y===void 0)Y=G;else FZ(`unexpected argument "${G}"`);if(!Z&&!X)Z=!0,X=!0;return{path:Y,clearScript:Z,clearPrompt:X}}async function qR(J){let[Y,...Z]=J;if(Y===void 0||Y==="--help"||Y==="-h"||Y==="help"){process.stdout.write(`${SV}
87
+ `);return}let{getRepoInitOverride:X,setRepoInitOverride:G,resolveRepoRoot:f}=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=f(uQ(process.cwd(),B??".")),K=X(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?fG(K.initScript):"(unset)"}`),console.log(` override initPrompt: ${K.initPrompt?fG(K.initPrompt):"(unset)"}`);return}if(Y==="set"){let B=zR(Z);if(B.initScript===void 0&&B.initPrompt===void 0)FZ("set needs at least one of --init-script(-file) / --init-prompt(-file)");let H=f(uQ(process.cwd(),B.path??".")),K=G(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?fG(K.initScript):"(unset)"}`),console.log(` initPrompt: ${K.initPrompt?fG(K.initPrompt):"(unset)"}`);return}if(Y==="unset"){let{path:B,clearScript:H,clearPrompt:K}=QR(Z),j=f(uQ(process.cwd(),B??".")),U=G(j,{...H?{initScript:""}:{},...K?{initPrompt:""}:{}});console.log(`cleared override for ${j}`),console.log(` initScript: ${U.initScript?fG(U.initScript):"(unset)"}`),console.log(` initPrompt: ${U.initPrompt?fG(U.initPrompt):"(unset)"}`);return}FZ(`unknown verb "${Y}"`)}function fG(J){let Y=J.replace(/\s+/g," ").trim();return Y.length>60?`"${Y.slice(0,57)}\u2026"`:`"${Y}"`}var SV;var kV=S(()=>{SV=["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(`
88
+ `)});import{spawnSync as BR}from"child_process";function WR(J){let[Y,Z]=J.split("/");if(!Y||!Z)throw Error(`invalid GitHub repository slug: ${J}`);return{owner:Y,name:Z}}function IV(J,Y){let Z=J.trim();if(!Z)throw Error(`${Y} is required`);return Z}function NV(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 bV(J,Y,Z){let X=["api","graphql","-f",`query=${J}`];for(let[B,H]of Object.entries(Y))X.push("-f",`${B}=${H}`);let G=Z.spawn("gh",X,{encoding:"utf8"});if(G.error)throw Error(`failed to run gh: ${G.error.message}`);let f=typeof G.stdout==="string"?G.stdout:String(G.stdout??""),Q=typeof G.stderr==="string"?G.stderr:String(G.stderr??""),q;try{q=JSON.parse(f)}catch{throw Error(`failed to parse gh response: ${NV(Q,void 0)}`)}if((G.status??0)!==0||q.errors?.length)throw Error(NV(Q,q.errors));if(!q.data)throw Error("GitHub CLI response did not include data");return q.data}function VR(J){return`${J}
89
89
 
90
90
  ---
91
- Submitted from kobe ${m0}.`}function ZG(J,Y={}){let Z=OV(J.title,"feedback title"),f=fR(OV(J.body,"feedback body")),G=(Y.repoSlug??yZ)();if(!G)throw Error("package repository is not a GitHub repository");let{owner:X,name:Q}=ZR(G),q=J.categorySlug?.trim()||EH,B={spawn:Y.spawn??e2},K=RV(JR,{owner:X,name:Q},B).repository,j=K?.id;if(!j)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 M=RV(YR,{repositoryId:j,categoryId:U.id,title:Z,body:f},B).createDiscussion?.discussion;if(!M?.url||typeof M.number!=="number")throw Error("GitHub did not return the created Discussion");return{number:M.number,url:M.url}}var EH="feedback",JR=`
91
+ Submitted from kobe ${d0}.`}function zG(J,Y={}){let Z=IV(J.title,"feedback title"),X=VR(IV(J.body,"feedback body")),G=(Y.repoSlug??TZ)();if(!G)throw Error("package repository is not a GitHub repository");let{owner:f,name:Q}=WR(G),q=J.categorySlug?.trim()||dH,B={spawn:Y.spawn??BR},K=bV(HR,{owner:f,name:Q},B).repository,j=K?.id;if(!j)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 M=bV(jR,{repositoryId:j,categoryId:U.id,title:Z,body:X},B).createDiscussion?.discussion;if(!M?.url||typeof M.number!=="number")throw Error("GitHub did not return the created Discussion");return{number:M.number,url:M.url}}var dH="feedback",HR=`
92
92
  query($owner: String!, $name: String!) {
93
93
  repository(owner: $owner, name: $name) {
94
94
  id
@@ -101,7 +101,7 @@ query($owner: String!, $name: String!) {
101
101
  }
102
102
  }
103
103
  }
104
- `,YR=`
104
+ `,jR=`
105
105
  mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!) {
106
106
  createDiscussion(input: {
107
107
  repositoryId: $repositoryId,
@@ -115,74 +115,74 @@ mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!)
115
115
  }
116
116
  }
117
117
  }
118
- `;var IQ=y(()=>{XJ()});async function gV(J={}){let Y=J.mode==="require-running"?await PJ():await tJ();if(!Y)return null;return{client:Y,close:()=>Y.close()}}var CV=y(()=>{KJ()});var wV={};q1(wV,{verbSchema:()=>PH,verbHelp:()=>EV,validateAgainstSpec:()=>wH,schemaIndex:()=>NV,runApiSubcommand:()=>IR,parseFlags:()=>xH,parseAgentsSpec:()=>IV,invokeVerb:()=>kR,fullSchema:()=>TV,findVerb:()=>JX,deliverPrompt:()=>uV,defaultApiRuntime:()=>vH,apiUsage:()=>bQ,VerbArgs:()=>hH,VERB_GROUPS:()=>GG,VERBS:()=>XG,FANOUT_CAP:()=>fG,ApiError:()=>j1,API_VERBS:()=>zR,API_SCHEMA_VERSION:()=>uH});import{resolve as SV}from"path";function kV(J){for(let[Y,Z]of Object.entries(GG))if(Z.includes(J))return Y;return"other"}async function XR(J){let Y=J.args.str("verb");if(Y){let f=JX(Y);if(!f)throw new j1(`unknown verb: ${Y}`,"BAD_VERB");return PH(f)}let Z=J.args.str("group");if(Z)return qR(Z);if(J.args.bool("all"))return TV();return NV()}function JX(J){let Y=NQ[J]??J;return XG.find((Z)=>Z.name===Y)}function xH(J,Y=new Set){let Z=new Map,f=!1,G=!1;for(let X=0;X<J.length;X++){let Q=J[X];if(!Q.startsWith("--")&&Q!=="-h")throw new j1(`unexpected positional arg: ${Q}`,"BAD_FLAG");if(Q==="-h"){G=!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")G=j!=="false"&&j!=="0";else Z.set(K,j);continue}let B=Q.slice(2);if(B==="pretty"){f=!0;continue}if(B==="help"){G=!0;continue}if(Y.has(B)){Z.set(B,"true");continue}let H=J[X+1];if(H===void 0||H.startsWith("--"))throw new j1(`flag --${B} requires a value`,"BAD_FLAG");Z.set(B,H),X+=1}return{flags:Z,pretty:f,help:G}}function wH(J,Y){let Z=new Set(J.flags.map((f)=>f.name));for(let f of Y.keys())if(!Z.has(f))throw new j1(`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 j1(`--${f.name} is required for "${J.name}"`,"MISSING_FLAG");if(f.type==="enum"&&f.values){let G=Y.get(f.name);if(G!==void 0&&!f.values.includes(G))throw new j1(`--${f.name} must be one of ${f.values.join(", ")}`,"BAD_FLAG")}if(f.type==="int"){let G=Y.get(f.name);if(G!==void 0){let X=Number.parseInt(G,10);if(!Number.isInteger(X)||X<=0)throw new j1(`--${f.name} must be a positive integer`,"BAD_FLAG")}}}}class hH{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 j1(`--${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 j1(`--${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 j1(`--${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 j1(`--${J} must be a positive integer`,"BAD_FLAG");return Z}path(J){let Y=this.str(J);return Y===void 0?void 0:SV(process.cwd(),Y)}requirePath(J){return SV(process.cwd(),this.require(J))}}function IV(J){let Y=[];for(let Z of J.split(",")){let f=Z.trim();if(!f)continue;let G=f.indexOf(":");if(G===-1)throw new j1(`--agents entry "${f}" must be vendor:count`,"BAD_FLAG");let X=f.slice(0,G);if(!x1.includes(X))throw new j1(`--agents vendor "${X}" must be one of ${x1.join(", ")}`,"BAD_FLAG");let Q=Number.parseInt(f.slice(G+1),10);if(!Number.isInteger(Q)||Q<=0)throw new j1(`--agents count for "${X}" must be a positive integer`,"BAD_FLAG");if(Y.length+Q>fG)throw new j1(`--agents requests ${Y.length+Q} agents, exceeds the cap of ${fG}`,"BAD_FLAG");for(let q=0;q<Q;q++)Y.push(X)}if(Y.length===0)throw new j1('--agents specified no agents (e.g. "claude:2,codex:1")',"BAD_FLAG");return Y}function QR(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 PH(J){return{name:J.name,group:kV(J.name),summary:J.summary,offline:J.offline??!1,flags:J.flags.map(QR)}}function NV(){return{apiVersion:uH,kobeVersion:m0,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:GG,verbs:XG.map((J)=>({name:J.name,group:kV(J.name),summary:J.summary})),globalFlags:bV,aliases:NQ}}function qR(J){let Y=GG[J];if(!Y)throw new j1(`unknown group: ${J}. Groups: ${Object.keys(GG).join(", ")}`,"BAD_FLAG");return{group:J,verbs:Y.map((Z)=>{let f=JX(Z);return{name:Z,summary:f?.summary??""}})}}function TV(){return{apiVersion:uH,kobeVersion:m0,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:bV,aliases:NQ,groups:GG,verbs:XG.map(PH)}}function BR(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 EV(J){let Y=[`kobe api ${J.name} ${BR(J)}`.trimEnd(),"",J.summary,""],Z=Object.entries(NQ).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 G=f.required?" (required)":"",X=f.default!==void 0?` [default: ${f.default}]`:"",Q=f.type==="enum"&&f.values?` {${f.values.join("|")}}`:"";Y.push(` --${f.name}${Q}${G}${X} ${f.description}`)}Y.push("")}return Y.push("Global: [--pretty] [--help]"),Y.join(`
119
- `)}function bQ(){return["usage: kobe api <verb> [flags] [--pretty] [--help]","","Explore the full surface (names, flags, types) with: kobe api schema","","verbs:",...XG.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(`
120
- `)}function HR(J,Y){let Z=Y?JSON.stringify(J,null,2):JSON.stringify(J);process.stdout.write(`${Z}
121
- `)}function cY(J,Y,Z=1){process.stderr.write(`${JSON.stringify({error:{message:J,code:Y}})}
122
- `),process.exit(Z)}async function uV(J,Y,Z,f=jR){let G=Y.worktreePath;if(!G)G=(await J.request("task.ensureWorktree",{taskId:Y.id})).worktreePath;if(!G)throw new j1(`task ${Y.id} has no worktree`,"NO_WORKTREE");let X=W1(Y.id),Q=await f.sessionExists(X);if(!Q){let H=await f.resolveEngineLaunchInit(Y.repo??"",G,{kind:"none"});if(!await f.ensureSession({name:X,cwd:G,command:f.engineCommand(Y.vendor),taskId:Y.id,vendor:Y.vendor,repo:Y.repo,launchInit:H}))throw new j1(`failed to start tmux session for ${Y.id}`,"SESSION_FAILED")}let{pane:q,ready:B}=await f.waitForEnginePane(X,!Q);if(!q)throw new j1(`no engine pane in session ${X}`,"NO_ENGINE_PANE");return await f.pasteAndSubmit(q,Z),{session:X,pane:q,started:!Q,engineReady:B}}async function WR(J){let Y=null,Z=J.onChannel("active-task",(f)=>{Y=f.taskId});try{await J.subscribe()}finally{Z()}return Y}function SJ(J){if(!J.client)throw new j1("daemon required","BAD_DAEMON");return J.client}async function eJ(J,Y,Z){return SJ(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 j1("issue-update requires --title and/or --body","MISSING_FLAG");return eJ(J,"issue.mutate",{repoRoot:J.args.requirePath("repo"),op:{type:"update",id:J.args.int("id"),title:Y,body:Z}})}async function KR(J){let Y=SJ(J),{args:Z,runtime:f}=J,X={repo:await f.resolveRepoRoot(Z.requirePath("repo"))},Q=Z.str("title");if(Q)X.title=Q;let q=Z.str("branch");if(q)X.branch=q;let B=Z.str("base-branch");if(B)X.baseRef=B;let H=Z.vendor()??await f.defaultVendor();if(H)X.vendor=H;let K=await Y.request("task.create",X),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 M=K.task;if(U||L!==void 0)M=(await Y.request("task.get",{taskId:j})).task;let D=Z.str("prompt");if(!D)return{taskId:j,task:M,started:!1};let A=await J.runtime.deliverPrompt(Y,{id:j,worktreePath:M.worktreePath,vendor:M.vendor,repo:M.repo},D);return M=(await Y.request("task.get",{taskId:j})).task,{taskId:j,task:M,started:A.started,engineReady:A.engineReady,session:A.session}}async function UR(J){let Y=SJ(J),Z=J.args.require("prompt"),f=J.args.str("task-id");if(!f){let Q=await WR(Y);if(!Q)throw new j1("no --task-id given and no active task \u2014 open a task first or pass --task-id","MISSING_TARGET");f=Q}let G=await Y.request("task.get",{taskId:f}),X=await J.runtime.deliverPrompt(Y,{id:f,worktreePath:G.task.worktreePath,vendor:G.task.vendor,repo:G.task.repo},Z);return{ok:!0,taskId:f,session:X.session,started:X.started,engineReady:X.engineReady}}async function LR(J){let Y=SJ(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 DR(J){let Y=SJ(J),Z=J.args.require("task-id"),f=J.args.require("text");return await Y.request("note.file",{taskId:Z,text:f})}async function MR(J){let Y=SJ(J),Z=J.args.require("task-id"),f=await Y.request("task.get",{taskId:Z}),G=await J.runtime.isTaskRunning(Z);return{task:f.task,running:G}}async function FR(J){return SJ(J).request("task.list")}async function OR(J){let Y=SJ(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=SJ(J),Z=J.args.require("task-id"),f=J.args.bool("archived")??!0,G=await Y.request("task.archive",{taskId:Z,archived:f});if(f)await J.runtime.tearDownSession(Z);return G}async function RR(J){let Y=SJ(J),Z=J.args.require("task-id"),f=J.args.bool("force")??!1,G=await Y.request("task.delete",{taskId:Z,force:f});return await J.runtime.tearDownSession(Z),G}async function gR(J){let Y=SJ(J),{args:Z}=J,f={repo:Z.requirePath("repo"),worktreePath:Z.requirePath("worktree")},G=Z.str("branch");if(G)f.branch=G;let X=Z.vendor();if(X)f.vendor=X;let Q=Z.str("title");if(Q)f.title=Q;return Y.request("worktree.adopt",f)}async function CR(J){let Y=SJ(J),{args:Z,runtime:f}=J,G=await f.resolveRepoRoot(Z.requirePath("repo")),X=Z.require("prompt"),Q=Z.str("title"),q=Z.str("base-branch"),B=Z.str("agents"),H=await f.defaultVendor(),K=B?IV(B):Array(Z.int("count")??1).fill(Z.vendor()??H??"claude");if(K.length>fG)throw new j1(`fan-out of ${K.length} exceeds the cap of ${fG} \u2014 spawn in batches`,"BAD_FLAG");let j=[];for(let U of K){let L={repo:G,vendor:U};if(Q)L.title=Q;if(q)L.baseRef=q;let M=await Y.request("task.create",L),D=await J.runtime.deliverPrompt(Y,{id:M.taskId,worktreePath:M.task.worktreePath,vendor:U,repo:M.task.repo},X);j.push({taskId:M.taskId,vendor:U,started:D.started,engineReady:D.engineReady,session:D.session})}return{count:j.length,tasks:j}}async function SR(J){let Y=SJ(J),{args:Z,runtime:f}=J,G=Z.str("task-ids"),X=Z.path("repo"),Q;if(G)Q=G.split(",").map((B)=>B.trim()).filter(Boolean);else if(X){let B=await f.resolveRepoRoot(X),{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 j1("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 yR(J){return{ok:!0,discussion:ZG({title:J.args.require("title"),body:J.args.require("body"),categorySlug:J.args.str("category")})}}function xV(J,Y,Z,f){return{args:new hH(J,Y),client:Z,runtime:f}}async function kR(J,Y,Z){let f=JX(J);if(!f)throw new j1(`unknown verb: ${J}`,"BAD_VERB");let G=new Set(f.flags.filter((Q)=>Q.type==="bool").map((Q)=>Q.name)),X=xH(Y,G);return wH(f,X.flags),f.handler(xV(f,X.flags,Z.client,Z.runtime??vH))}async function IR(J){let[Y,...Z]=J;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(!Y)cY(bQ(),"MISSING_VERB",2);process.stdout.write(`${bQ()}
123
- `);return}let f=JX(Y);if(!f)cY(`unknown verb: ${Y}
124
- ${bQ()}`,"BAD_VERB",2);let G=new Set(f.flags.filter((q)=>q.type==="bool").map((q)=>q.name)),X;try{X=xH(Z,G)}catch(q){if(q instanceof j1)cY(q.message,q.code,2);cY(q instanceof Error?q.message:String(q),"BAD_FLAG",2)}if(X.help){process.stdout.write(`${EV(f)}
125
- `);return}try{wH(f,X.flags)}catch(q){if(q instanceof j1)cY(q.message,q.code,2);cY(q instanceof Error?q.message:String(q),"BAD_FLAG",2)}let Q=null;if(!f.offline)try{Q=await gV()}catch(q){cY(`could not reach or start the kobe daemon: ${q instanceof Error?q.message:String(q)}`,"BAD_DAEMON",2)}try{let q=await f.handler(xV(f,X.flags,Q?.client??null,vH));HR(q,X.pretty)}catch(q){if(q instanceof j1)cY(q.message,q.code,1);cY(q instanceof Error?q.message:String(q),"RPC_ERROR",1)}finally{Q?.close()}}var uH=2,fG=10,yV,GR,j1,X1,NQ,GG,XG,zR,bV,jR,vH;var hV=y(()=>{gJ();IQ();E1();tz();QJ();XJ();CV();yV=["backlog","in_progress","in_review","done","canceled","error"],GR=["open","doing","hold","done"];j1=class j1 extends Error{code;constructor(J,Y){super(J);this.code=Y}};X1={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:x1,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})},NQ={"spawn-task":"add"},GG={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"]};XG=[{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:XR},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:FR},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[X1.taskId()],handler:MR},{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:[X1.repo(),X1.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."},X1.vendor(),{name:"status",type:"enum",values:yV,default:"backlog",description:"Initial lifecycle status."},{name:"pin",type:"bool",description:"Pin the task to the top of the sidebar."},X1.prompt(!1,"Optional first message \u2014 when set, materializes the worktree, starts the engine, and pastes it.")],handler:KR},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${fG}.`,flags:[X1.repo(),X1.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)."},X1.vendor(),X1.title(),{name:"base-branch",type:"string",placeholder:"B",description:"Base ref for every worktree."}],handler:CR},{name:"send",summary:"Paste a follow-up prompt into a task's running engine (one full turn). Defaults to the active task.",flags:[X1.taskId(!1),X1.prompt(!0,"Text pasted + submitted into the engine pane.")],handler:UR},{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:[X1.taskId(!0),X1.prompt(!0,"Text delivered into the task's engine session.")],handler:LR},{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:[X1.taskId(!0),{name:"text",type:"string",required:!0,placeholder:"TEXT",description:"One line: the verified conclusion another session could act on."}],handler:DR},{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:EH,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:yR},{name:"issue-list",summary:"List daemon-owned issues for a repo.",flags:[X1.repo()],handler:(J)=>eJ(J,"issue.list",{repoRoot:J.args.requirePath("repo")})},{name:"issue-create",summary:"Create a daemon-owned issue for a repo.",flags:[X1.repo(),{name:"title",type:"string",required:!0,placeholder:"T",description:"Issue title."},{name:"body",type:"string",placeholder:"TEXT",description:"Issue body."}],handler:(J)=>eJ(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:[X1.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"status",type:"enum",required:!0,values:GR,description:"New issue status."}],handler:(J)=>eJ(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:[X1.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."},X1.repo(!1)],handler:SR},{name:"rename",summary:"Set a task's title.",flags:[X1.taskId(),{name:"title",type:"string",required:!0,placeholder:"T",description:"New title."}],handler:(J)=>eJ(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:[X1.taskId(),{name:"branch",type:"string",required:!0,placeholder:"B",description:"New branch name."}],handler:(J)=>eJ(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:[X1.taskId(),{...X1.vendor(),required:!0}],handler:(J)=>eJ(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:[X1.taskId(),{name:"status",type:"enum",required:!0,values:yV,description:"New status."}],handler:(J)=>eJ(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:[X1.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:[X1.taskId(),{name:"pinned",type:"bool",default:"true",description:"true to pin, false to unpin."}],handler:(J)=>eJ(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:[X1.taskId(!1),{name:"none",type:"bool",description:"Clear the active task instead of setting one."}],handler:OR},{name:"ensure-worktree",summary:"Materialize a task's git worktree on disk now (without starting an engine). Returns { worktreePath }.",flags:[X1.taskId()],handler:(J)=>eJ(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:[X1.taskId(),{name:"force",type:"bool",description:"Delete even with uncommitted changes."}],handler:RR},{name:"discover-adoptable",summary:"List existing git worktrees in a repo not yet tracked as kobe tasks. Returns { worktrees }.",flags:[X1.repo()],handler:(J)=>eJ(J,"worktree.discoverAdoptable",{repo:J.args.requirePath("repo")})},{name:"adopt",summary:"Import an existing git worktree as a kobe task. Returns { task }.",flags:[X1.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)."},X1.vendor(),X1.title()],handler:gR}],zR=XG.map((J)=>J.name);bV=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];jR={sessionExists:Z1,ensureSession:async(J)=>(await Promise.resolve().then(() => (ZJ(),sJ))).ensureSession(J),waitForEnginePane:$G,pasteAndSubmit:aG,resolveEngineLaunchInit:async(J,Y,Z)=>(await Promise.resolve().then(() => (nf(),fH))).resolveEngineLaunchInit(J,Y,Z),engineCommand:VJ};vH={isTaskRunning:(J)=>Z1(W1(J)),deliverPrompt:(J,Y,Z)=>uV(J,Y,Z),resolveRepoRoot:async(J)=>(await Promise.resolve().then(() => (D1(),aY))).resolveMainRepoRoot(J),defaultVendor:async()=>{let{getPersistedString:J}=await Promise.resolve().then(() => (D1(),aY)),Y=J("lastSelectedVendor")?.trim();return Y?Y:void 0},readWorktreeChanges:async(J)=>(await Promise.resolve().then(() => (sf(),XV))).readWorktreeChanges(J),tearDownSession:async(J)=>{let Y=W1(J);await VY(Y).catch(()=>{}),await xJ(Y).catch(()=>{})}}});var cV={};q1(cV,{updatePlan:()=>PV,runUpdateSubcommand:()=>NR,parseUpdateArgs:()=>vV});import{spawnSync as bR}from"child_process";function PV(){return{command:"sh",args:["-c",RY],display:RY}}function vV(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}"
118
+ `;var xQ=S(()=>{zJ()});async function TV(J={}){let Y=J.mode==="require-running"?await dJ():await XY();if(!Y)return null;return{client:Y,close:()=>Y.close()}}var EV=S(()=>{DJ()});var iV={};j1(iV,{verbSchema:()=>aH,verbHelp:()=>cV,validateAgainstSpec:()=>lH,schemaIndex:()=>vV,runApiSubcommand:()=>vR,parseFlags:()=>iH,parseAgentsSpec:()=>hV,invokeVerb:()=>PR,fullSchema:()=>mV,findVerb:()=>Gf,deliverPrompt:()=>dV,defaultApiRuntime:()=>pH,apiUsage:()=>wQ,VerbArgs:()=>$H,VERB_GROUPS:()=>qG,VERBS:()=>BG,FANOUT_CAP:()=>QG,ApiError:()=>V1,API_VERBS:()=>LR,API_SCHEMA_VERSION:()=>nH});import{resolve as uV}from"path";function wV(J){for(let[Y,Z]of Object.entries(qG))if(Z.includes(J))return Y;return"other"}async function UR(J){let Y=J.args.str("verb");if(Y){let X=Gf(Y);if(!X)throw new V1(`unknown verb: ${Y}`,"BAD_VERB");return aH(X)}let Z=J.args.str("group");if(Z)return MR(Z);if(J.args.bool("all"))return mV();return vV()}function Gf(J){let Y=hQ[J]??J;return BG.find((Z)=>Z.name===Y)}function iH(J,Y=new Set){let Z=new Map,X=!1,G=!1;for(let f=0;f<J.length;f++){let Q=J[f];if(!Q.startsWith("--")&&Q!=="-h")throw new V1(`unexpected positional arg: ${Q}`,"BAD_FLAG");if(Q==="-h"){G=!0;continue}let q=Q.indexOf("=");if(q!==-1){let K=Q.slice(2,q),j=Q.slice(q+1);if(K==="pretty")X=j!=="false"&&j!=="0";else if(K==="help")G=j!=="false"&&j!=="0";else Z.set(K,j);continue}let B=Q.slice(2);if(B==="pretty"){X=!0;continue}if(B==="help"){G=!0;continue}if(Y.has(B)){Z.set(B,"true");continue}let H=J[f+1];if(H===void 0||H.startsWith("--"))throw new V1(`flag --${B} requires a value`,"BAD_FLAG");Z.set(B,H),f+=1}return{flags:Z,pretty:X,help:G}}function lH(J,Y){let Z=new Set(J.flags.map((X)=>X.name));for(let X of Y.keys())if(!Z.has(X))throw new V1(`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 V1(`--${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 V1(`--${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 f=Number.parseInt(G,10);if(!Number.isInteger(f)||f<=0)throw new V1(`--${X.name} must be a positive integer`,"BAD_FLAG")}}}}class $H{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:uV(process.cwd(),Y)}requirePath(J){return uV(process.cwd(),this.require(J))}}function hV(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 V1(`--agents entry "${X}" must be vendor:count`,"BAD_FLAG");let f=X.slice(0,G);if(!h1.includes(f))throw new V1(`--agents vendor "${f}" must be one of ${h1.join(", ")}`,"BAD_FLAG");let Q=Number.parseInt(X.slice(G+1),10);if(!Number.isInteger(Q)||Q<=0)throw new V1(`--agents count for "${f}" must be a positive integer`,"BAD_FLAG");if(Y.length+Q>QG)throw new V1(`--agents requests ${Y.length+Q} agents, exceeds the cap of ${QG}`,"BAD_FLAG");for(let q=0;q<Q;q++)Y.push(f)}if(Y.length===0)throw new V1('--agents specified no agents (e.g. "claude:2,codex:1")',"BAD_FLAG");return Y}function DR(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 aH(J){return{name:J.name,group:wV(J.name),summary:J.summary,offline:J.offline??!1,flags:J.flags.map(DR)}}function vV(){return{apiVersion:nH,kobeVersion:d0,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:qG,verbs:BG.map((J)=>({name:J.name,group:wV(J.name),summary:J.summary})),globalFlags:PV,aliases:hQ}}function MR(J){let Y=qG[J];if(!Y)throw new V1(`unknown group: ${J}. Groups: ${Object.keys(qG).join(", ")}`,"BAD_FLAG");return{group:J,verbs:Y.map((Z)=>{let X=Gf(Z);return{name:Z,summary:X?.summary??""}})}}function mV(){return{apiVersion:nH,kobeVersion:d0,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:PV,aliases:hQ,groups:qG,verbs:BG.map(aH)}}function FR(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 cV(J){let Y=[`kobe api ${J.name} ${FR(J)}`.trimEnd(),"",J.summary,""],Z=Object.entries(hQ).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)":"",f=X.default!==void 0?` [default: ${X.default}]`:"",Q=X.type==="enum"&&X.values?` {${X.values.join("|")}}`:"";Y.push(` --${X.name}${Q}${G}${f} ${X.description}`)}Y.push("")}return Y.push("Global: [--pretty] [--help]"),Y.join(`
119
+ `)}function wQ(){return["usage: kobe api <verb> [flags] [--pretty] [--help]","","Explore the full surface (names, flags, types) with: kobe api schema","","verbs:",...BG.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(`
120
+ `)}function OR(J,Y){let Z=Y?JSON.stringify(J,null,2):JSON.stringify(J);process.stdout.write(`${Z}
121
+ `)}function $Y(J,Y,Z=1){process.stderr.write(`${JSON.stringify({error:{message:J,code:Y}})}
122
+ `),process.exit(Z)}async function dV(J,Y,Z,X=AR){let G=Y.worktreePath;if(!G)G=(await J.request("task.ensureWorktree",{taskId:Y.id})).worktreePath;if(!G)throw new V1(`task ${Y.id} has no worktree`,"NO_WORKTREE");let f=K1(Y.id),Q=await X.sessionExists(f);if(!Q){let H=await X.resolveEngineLaunchInit(Y.repo??"",G,{kind:"none"});if(!await X.ensureSession({name:f,cwd:G,command:X.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 X.waitForEnginePane(f,!Q);if(!q)throw new V1(`no engine pane in session ${f}`,"NO_ENGINE_PANE");return await X.pasteAndSubmit(q,Z),{session:f,pane:q,started:!Q,engineReady:B}}async function RR(J){let Y=null,Z=J.onChannel("active-task",(X)=>{Y=X.taskId});try{await J.subscribe()}finally{Z()}return Y}function IJ(J){if(!J.client)throw new V1("daemon required","BAD_DAEMON");return J.client}async function GY(J,Y,Z){return IJ(J).request(Y,Z)}async function gR(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 GY(J,"issue.mutate",{repoRoot:J.args.requirePath("repo"),op:{type:"update",id:J.args.int("id"),title:Y,body:Z}})}async function CR(J){let Y=IJ(J),{args:Z,runtime:X}=J,f={repo:await X.resolveRepoRoot(Z.requirePath("repo"))},Q=Z.str("title");if(Q)f.title=Q;let q=Z.str("branch");if(q)f.branch=q;let B=Z.str("base-branch");if(B)f.baseRef=B;let H=Z.vendor()??await X.defaultVendor();if(H)f.vendor=H;let K=await Y.request("task.create",f),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 M=K.task;if(U||L!==void 0)M=(await Y.request("task.get",{taskId:j})).task;let D=Z.str("prompt");if(!D)return{taskId:j,task:M,started:!1};let O=await J.runtime.deliverPrompt(Y,{id:j,worktreePath:M.worktreePath,vendor:M.vendor,repo:M.repo},D);return M=(await Y.request("task.get",{taskId:j})).task,{taskId:j,task:M,started:O.started,engineReady:O.engineReady,session:O.session}}async function SR(J){let Y=IJ(J),Z=J.args.require("prompt"),X=J.args.str("task-id");if(!X){let Q=await RR(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");X=Q}let G=await Y.request("task.get",{taskId:X}),f=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:f.session,started:f.started,engineReady:f.engineReady}}async function yR(J){let Y=IJ(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 kR(J){let Y=IJ(J),Z=J.args.require("task-id"),X=J.args.require("text");return await Y.request("note.file",{taskId:Z,text:X})}async function IR(J){let Y=IJ(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 NR(J){return IJ(J).request("task.list")}async function bR(J){let Y=IJ(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 TR(J){let Y=IJ(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 ER(J){let Y=IJ(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 uR(J){let Y=IJ(J),{args:Z}=J,X={repo:Z.requirePath("repo"),worktreePath:Z.requirePath("worktree")},G=Z.str("branch");if(G)X.branch=G;let f=Z.vendor();if(f)X.vendor=f;let Q=Z.str("title");if(Q)X.title=Q;return Y.request("worktree.adopt",X)}async function xR(J){let Y=IJ(J),{args:Z,runtime:X}=J,G=await X.resolveRepoRoot(Z.requirePath("repo")),f=Z.require("prompt"),Q=Z.str("title"),q=Z.str("base-branch"),B=Z.str("agents"),H=await X.defaultVendor(),K=B?hV(B):Array(Z.int("count")??1).fill(Z.vendor()??H??"claude");if(K.length>QG)throw new V1(`fan-out of ${K.length} exceeds the cap of ${QG} \u2014 spawn in batches`,"BAD_FLAG");let j=[];for(let U of K){let L={repo:G,vendor:U};if(Q)L.title=Q;if(q)L.baseRef=q;let M=await Y.request("task.create",L),D=await J.runtime.deliverPrompt(Y,{id:M.taskId,worktreePath:M.task.worktreePath,vendor:U,repo:M.task.repo},f);j.push({taskId:M.taskId,vendor:U,started:D.started,engineReady:D.engineReady,session:D.session})}return{count:j.length,tasks:j}}async function wR(J){let Y=IJ(J),{args:Z,runtime:X}=J,G=Z.str("task-ids"),f=Z.path("repo"),Q;if(G)Q=G.split(",").map((B)=>B.trim()).filter(Boolean);else if(f){let B=await X.resolveRepoRoot(f),{tasks:H}=await Y.request("task.list");Q=[];for(let K of H){if(K.archived)continue;if(await X.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 X.isTaskRunning(B),j=H.worktreePath?await X.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 hR(J){return{ok:!0,discussion:zG({title:J.args.require("title"),body:J.args.require("body"),categorySlug:J.args.str("category")})}}function nV(J,Y,Z,X){return{args:new $H(J,Y),client:Z,runtime:X}}async function PR(J,Y,Z){let X=Gf(J);if(!X)throw new V1(`unknown verb: ${J}`,"BAD_VERB");let G=new Set(X.flags.filter((Q)=>Q.type==="bool").map((Q)=>Q.name)),f=iH(Y,G);return lH(X,f.flags),X.handler(nV(X,f.flags,Z.client,Z.runtime??pH))}async function vR(J){let[Y,...Z]=J;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(!Y)$Y(wQ(),"MISSING_VERB",2);process.stdout.write(`${wQ()}
123
+ `);return}let X=Gf(Y);if(!X)$Y(`unknown verb: ${Y}
124
+ ${wQ()}`,"BAD_VERB",2);let G=new Set(X.flags.filter((q)=>q.type==="bool").map((q)=>q.name)),f;try{f=iH(Z,G)}catch(q){if(q instanceof V1)$Y(q.message,q.code,2);$Y(q instanceof Error?q.message:String(q),"BAD_FLAG",2)}if(f.help){process.stdout.write(`${cV(X)}
125
+ `);return}try{lH(X,f.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(!X.offline)try{Q=await TV()}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 X.handler(nV(X,f.flags,Q?.client??null,pH));OR(q,f.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 nH=2,QG=10,xV,KR,V1,q1,hQ,qG,BG,LR,PV,AR,pH;var lV=S(()=>{yJ();xQ();w1();GQ();HJ();zJ();EV();xV=["backlog","in_progress","in_review","done","canceled","error"],KR=["open","doing","hold","done"];V1=class V1 extends Error{code;constructor(J,Y){super(J);this.code=Y}};q1={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})},hQ={"spawn-task":"add"},qG={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"]};BG=[{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:UR},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:NR},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[q1.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:[q1.repo(),q1.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."},q1.vendor(),{name:"status",type:"enum",values:xV,default:"backlog",description:"Initial lifecycle status."},{name:"pin",type:"bool",description:"Pin the task to the top of the sidebar."},q1.prompt(!1,"Optional first message \u2014 when set, materializes the worktree, starts the engine, and pastes it.")],handler:CR},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${QG}.`,flags:[q1.repo(),q1.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)."},q1.vendor(),q1.title(),{name:"base-branch",type:"string",placeholder:"B",description:"Base ref for every worktree."}],handler:xR},{name:"send",summary:"Paste a follow-up prompt into a task's running engine (one full turn). Defaults to the active task.",flags:[q1.taskId(!1),q1.prompt(!0,"Text pasted + submitted into the engine pane.")],handler:SR},{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:[q1.taskId(!0),q1.prompt(!0,"Text delivered into the task's engine session.")],handler:yR},{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:[q1.taskId(!0),{name:"text",type:"string",required:!0,placeholder:"TEXT",description:"One line: the verified conclusion another session could act on."}],handler:kR},{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:dH,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:hR},{name:"issue-list",summary:"List daemon-owned issues for a repo.",flags:[q1.repo()],handler:(J)=>GY(J,"issue.list",{repoRoot:J.args.requirePath("repo")})},{name:"issue-create",summary:"Create a daemon-owned issue for a repo.",flags:[q1.repo(),{name:"title",type:"string",required:!0,placeholder:"T",description:"Issue title."},{name:"body",type:"string",placeholder:"TEXT",description:"Issue body."}],handler:(J)=>GY(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:[q1.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"status",type:"enum",required:!0,values:KR,description:"New issue status."}],handler:(J)=>GY(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:[q1.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:gR},{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."},q1.repo(!1)],handler:wR},{name:"rename",summary:"Set a task's title.",flags:[q1.taskId(),{name:"title",type:"string",required:!0,placeholder:"T",description:"New title."}],handler:(J)=>GY(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:[q1.taskId(),{name:"branch",type:"string",required:!0,placeholder:"B",description:"New branch name."}],handler:(J)=>GY(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:[q1.taskId(),{...q1.vendor(),required:!0}],handler:(J)=>GY(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:[q1.taskId(),{name:"status",type:"enum",required:!0,values:xV,description:"New status."}],handler:(J)=>GY(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:[q1.taskId(),{name:"archived",type:"bool",default:"true",description:"true to archive, false to unarchive."}],handler:TR},{name:"pin",summary:"Pin (or with --pinned=false, unpin) a task to the top of the sidebar.",flags:[q1.taskId(),{name:"pinned",type:"bool",default:"true",description:"true to pin, false to unpin."}],handler:(J)=>GY(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:[q1.taskId(!1),{name:"none",type:"bool",description:"Clear the active task instead of setting one."}],handler:bR},{name:"ensure-worktree",summary:"Materialize a task's git worktree on disk now (without starting an engine). Returns { worktreePath }.",flags:[q1.taskId()],handler:(J)=>GY(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:[q1.taskId(),{name:"force",type:"bool",description:"Delete even with uncommitted changes."}],handler:ER},{name:"discover-adoptable",summary:"List existing git worktrees in a repo not yet tracked as kobe tasks. Returns { worktrees }.",flags:[q1.repo()],handler:(J)=>GY(J,"worktree.discoverAdoptable",{repo:J.args.requirePath("repo")})},{name:"adopt",summary:"Import an existing git worktree as a kobe task. Returns { task }.",flags:[q1.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)."},q1.vendor(),q1.title()],handler:uR}],LR=BG.map((J)=>J.name);PV=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];AR={sessionExists:G1,ensureSession:async(J)=>(await Promise.resolve().then(() => (ZJ(),ZY))).ensureSession(J),waitForEnginePane:rG,pasteAndSubmit:oG,resolveEngineLaunchInit:async(J,Y,Z)=>(await Promise.resolve().then(() => (pX(),WH))).resolveEngineLaunchInit(J,Y,Z),engineCommand:LJ};pH={isTaskRunning:(J)=>G1(K1(J)),deliverPrompt:(J,Y,Z)=>dV(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(() => (YG(),VV))).readWorktreeChanges(J),tearDownSession:async(J)=>{let Y=K1(J);await MY(Y).catch(()=>{}),await vJ(Y).catch(()=>{})}}});var _V={};j1(_V,{updatePlan:()=>$V,runUpdateSubcommand:()=>cR,parseUpdateArgs:()=>aV});import{spawnSync as mR}from"child_process";function $V(){return{command:"sh",args:["-c",kY],display:kY}}function aV(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}"
126
126
 
127
- `),mV(process.stderr),process.exit(2)}return{help:!1,dryRun:Y}}function mV(J){J.write(["Usage: kobe update [--dry-run]","","Runs kobe's GitHub-hosted update script.","","Default command:",` ${RY}`,"","Script URL:",` ${bX}`,"","Manual fallback:",` ${Lq()}`,"","Examples:"," kobe update"," kobe update --dry-run",""].join(`
128
- `))}async function NR(J,Y){let Z={spawn:Y?.spawn??bR,stdout:Y?.stdout??process.stdout,stderr:Y?.stderr??process.stderr,exit:Y?.exit??((Q)=>process.exit(Q))},f=vV(J);if(f.help){mV(Z.stdout);return}let G=PV();if(Z.stdout.write(`kobe ${m0} -> latest
127
+ `),pV(process.stderr),process.exit(2)}return{help:!1,dryRun:Y}}function pV(J){J.write(["Usage: kobe update [--dry-run]","","Runs kobe's GitHub-hosted update script.","","Default command:",` ${kY}`,"","Script URL:",` ${xf}`,"","Manual fallback:",` ${Sq()}`,"","Examples:"," kobe update"," kobe update --dry-run",""].join(`
128
+ `))}async function cR(J,Y){let Z={spawn:Y?.spawn??mR,stdout:Y?.stdout??process.stdout,stderr:Y?.stderr??process.stderr,exit:Y?.exit??((Q)=>process.exit(Q))},X=aV(J);if(X.help){pV(Z.stdout);return}let G=$V();if(Z.stdout.write(`kobe ${d0} -> latest
129
129
  `),Z.stdout.write(`running: ${G.display}
130
- `),f.dryRun)return;let X=Z.spawn(G.command,G.args,{stdio:"inherit"});if(X.error)Z.stderr.write(`kobe update: failed to run ${G.command}: ${X.error.message}
131
- `),Z.exit(1);Z.exit(X.status??1)}var dV=y(()=>{XJ()});var $V={};q1($V,{runThemeSubcommand:()=>nR});import{existsSync as iV,mkdirSync as TR,readFileSync as ER,readdirSync as uR,unlinkSync as xR,writeFileSync as wR}from"fs";import{basename as nV,join as cH,resolve as hR}from"path";function dY(J){process.stderr.write(`kobe theme: ${J}
132
- `),process.exit(1)}function KZ(J){process.stderr.write(`kobe theme: ${J}
130
+ `),X.dryRun)return;let f=Z.spawn(G.command,G.args,{stdio:"inherit"});if(f.error)Z.stderr.write(`kobe update: failed to run ${G.command}: ${f.error.message}
131
+ `),Z.exit(1);Z.exit(f.status??1)}var rV=S(()=>{zJ()});var eV={};j1(eV,{runThemeSubcommand:()=>tR});import{existsSync as sV,mkdirSync as dR,readFileSync as nR,readdirSync as iR,unlinkSync as lR,writeFileSync as $R}from"fs";import{basename as oV,join as rH,resolve as aR}from"path";function aY(J){process.stderr.write(`kobe theme: ${J}
132
+ `),process.exit(1)}function OZ(J){process.stderr.write(`kobe theme: ${J}
133
133
 
134
- `),lV(),process.exit(2)}function PR(){let J=[];J.push("bundled:");for(let f of[...mH].sort())J.push(` ${f} [built-in]`);let Y=af(),Z=[];try{Z=uR(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 G=f.slice(0,-5),X=cH(Y,f),Q=mH.includes(G)?" (overrides built-in)":"";J.push(` ${G}${Q} ${X}`)}process.stdout.write(`${J.join(`
134
+ `),tV(),process.exit(2)}function pR(){let J=[];J.push("bundled:");for(let X of[..._H].sort())J.push(` ${X} [built-in]`);let Y=oX(),Z=[];try{Z=iR(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),f=rH(Y,X),Q=_H.includes(G)?" (overrides built-in)":"";J.push(` ${G}${Q} ${f}`)}process.stdout.write(`${J.join(`
135
135
  `)}
136
- `)}async function vR(J){if(/^https?:\/\//i.test(J)){let X;try{X=await fetch(J)}catch(K){dY(`failed to fetch ${J}: ${K instanceof Error?K.message:String(K)}`)}if(!X.ok)dY(`failed to fetch ${J}: HTTP ${X.status} ${X.statusText}`);let Q=await X.text(),q=J.split(/[?#]/)[0]??J,B=nV(q)||"theme.json",H=B.endsWith(".json")?B.slice(0,-5):B;return{text:Q,defaultName:H}}let Y=hR(process.cwd(),J),Z;try{Z=ER(Y,"utf8")}catch(X){dY(`failed to read ${Y}: ${X instanceof Error?X.message:String(X)}`)}let f=nV(Y),G=f.endsWith(".json")?f.slice(0,-5):f;return{text:Z,defaultName:G}}function mR(J){let Y=null,Z,f=!1;for(let G=0;G<J.length;G+=1){let X=J[G];if(X==="--force"||X==="-f"){f=!0;continue}if(X==="--name"||X==="-n"){let Q=J[G+1];if(Q===void 0)KZ("--name requires a value");Z=Q,G+=1;continue}if(X.startsWith("--name=")){Z=X.slice(7);continue}if(X.startsWith("--"))KZ(`unknown flag: ${X}`);if(Y===null){Y=X;continue}KZ(`unexpected positional argument: ${X}`)}if(Y===null)KZ("missing <source> (URL or path to theme JSON)");return{source:Y,opts:{name:Z,force:f}}}async function cR(J){let{source:Y,opts:Z}=mR(J),{text:f,defaultName:G}=await vR(Y),X;try{X=JSON.parse(f)}catch(K){dY(`source is not valid JSON: ${K instanceof Error?K.message:String(K)}`)}let Q=JQ(X);if(!Q.ok)dY(`source is not a valid kobe theme: ${Q.reason}`);let q=Z.name??G;if(!q||!/^[a-zA-Z0-9._-]+$/.test(q))dY(`invalid theme name "${q}" (use letters, digits, '.', '_', '-')`);let B=af();TR(B,{recursive:!0});let H=cH(B,`${q}.json`);if(iV(H)&&!Z.force)dY(`${H} already exists (pass --force to overwrite)`);wR(H,`${JSON.stringify(Q.theme,null,2)}
136
+ `)}async function _R(J){if(/^https?:\/\//i.test(J)){let f;try{f=await fetch(J)}catch(K){aY(`failed to fetch ${J}: ${K instanceof Error?K.message:String(K)}`)}if(!f.ok)aY(`failed to fetch ${J}: HTTP ${f.status} ${f.statusText}`);let Q=await f.text(),q=J.split(/[?#]/)[0]??J,B=oV(q)||"theme.json",H=B.endsWith(".json")?B.slice(0,-5):B;return{text:Q,defaultName:H}}let Y=aR(process.cwd(),J),Z;try{Z=nR(Y,"utf8")}catch(f){aY(`failed to read ${Y}: ${f instanceof Error?f.message:String(f)}`)}let X=oV(Y),G=X.endsWith(".json")?X.slice(0,-5):X;return{text:Z,defaultName:G}}function rR(J){let Y=null,Z,X=!1;for(let G=0;G<J.length;G+=1){let f=J[G];if(f==="--force"||f==="-f"){X=!0;continue}if(f==="--name"||f==="-n"){let Q=J[G+1];if(Q===void 0)OZ("--name requires a value");Z=Q,G+=1;continue}if(f.startsWith("--name=")){Z=f.slice(7);continue}if(f.startsWith("--"))OZ(`unknown flag: ${f}`);if(Y===null){Y=f;continue}OZ(`unexpected positional argument: ${f}`)}if(Y===null)OZ("missing <source> (URL or path to theme JSON)");return{source:Y,opts:{name:Z,force:X}}}async function oR(J){let{source:Y,opts:Z}=rR(J),{text:X,defaultName:G}=await _R(Y),f;try{f=JSON.parse(X)}catch(K){aY(`source is not valid JSON: ${K instanceof Error?K.message:String(K)}`)}let Q=zQ(f);if(!Q.ok)aY(`source is not a valid kobe theme: ${Q.reason}`);let q=Z.name??G;if(!q||!/^[a-zA-Z0-9._-]+$/.test(q))aY(`invalid theme name "${q}" (use letters, digits, '.', '_', '-')`);let B=oX();dR(B,{recursive:!0});let H=rH(B,`${q}.json`);if(sV(H)&&!Z.force)aY(`${H} already exists (pass --force to overwrite)`);$R(H,`${JSON.stringify(Q.theme,null,2)}
137
137
  `,"utf8"),process.stdout.write(`installed theme "${q}" -> ${H}
138
- `)}function dR(J){let Y=J[0];if(!Y)KZ("missing <name>");if(J.length>1)KZ(`unexpected extra arguments after "${Y}"`);if(mH.includes(Y))dY(`"${Y}" is a built-in theme and cannot be removed`);let Z=cH(af(),`${Y}.json`);if(!iV(Z))dY(`no user theme named "${Y}" (looked for ${Z})`);xR(Z),process.stdout.write(`removed theme "${Y}" (${Z})
139
- `)}function lV(){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: ${af()}`,"Schema: https://raw.githubusercontent.com/sma1lboy/kobe/main/packages/kobe/src/tui/context/theme/theme.schema.json",""].join(`
140
- `))}async function nR(J){let[Y,...Z]=J;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(lV(),!Y)process.exit(2);return}if(Y==="list"||Y==="ls"){if(Z.length>0)KZ(`"${Y}" takes no arguments`);PR();return}if(Y==="add"){await cR(Z);return}if(Y==="remove"||Y==="rm"){dR(Z);return}KZ(`unknown action "${Y}" (try "list", "add", or "remove")`)}var mH;var aV=y(()=>{v1();YQ();qH();mH=["claude","conductor","dracula","nord","opencode","osaka-jade","tokyonight"]});var oV={};q1(oV,{runFeedbackSubcommand:()=>lR,parseFeedbackArgs:()=>rV});import{readFileSync as pV}from"fs";function UZ(J){process.stderr.write(`kobe feedback: ${J}
138
+ `)}function sR(J){let Y=J[0];if(!Y)OZ("missing <name>");if(J.length>1)OZ(`unexpected extra arguments after "${Y}"`);if(_H.includes(Y))aY(`"${Y}" is a built-in theme and cannot be removed`);let Z=rH(oX(),`${Y}.json`);if(!sV(Z))aY(`no user theme named "${Y}" (looked for ${Z})`);lR(Z),process.stdout.write(`removed theme "${Y}" (${Z})
139
+ `)}function tV(){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: ${oX()}`,"Schema: https://raw.githubusercontent.com/sma1lboy/kobe/main/packages/kobe/src/tui/context/theme/theme.schema.json",""].join(`
140
+ `))}async function tR(J){let[Y,...Z]=J;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(tV(),!Y)process.exit(2);return}if(Y==="list"||Y==="ls"){if(Z.length>0)OZ(`"${Y}" takes no arguments`);pR();return}if(Y==="add"){await oR(Z);return}if(Y==="remove"||Y==="rm"){sR(Z);return}OZ(`unknown action "${Y}" (try "list", "add", or "remove")`)}var _H;var J6=S(()=>{c1();QQ();DH();_H=["claude","conductor","dracula","nord","opencode","osaka-jade","tokyonight"]});var G6={};j1(G6,{runFeedbackSubcommand:()=>Jg,parseFeedbackArgs:()=>X6});import{readFileSync as Y6}from"fs";function AZ(J){process.stderr.write(`kobe feedback: ${J}
141
141
 
142
- ${_V}
143
- `),process.exit(2)}function iR(J){if(J==="-")return pV(0,"utf8");return pV(J,"utf8")}function rV(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)UZ("--title requires a value");continue}if(f==="--body"){if(Y.body=J[++Z],Y.body===void 0)UZ("--body requires a value");continue}if(f==="--body-file"){if(Y.bodyFile=J[++Z],Y.bodyFile===void 0)UZ("--body-file requires a value");continue}if(f==="--category"){if(Y.category=J[++Z],Y.category===void 0)UZ("--category requires a value");continue}UZ(`unexpected argument "${f}"`)}return Y}async function lR(J){let Y=rV(J);if(Y.help){process.stdout.write(`${_V}
144
- `);return}if(!Y.title)UZ("--title is required");if(Y.body&&Y.bodyFile)UZ("pass either --body or --body-file, not both");let Z=Y.bodyFile?iR(Y.bodyFile):Y.body;if(!Z)UZ("--body or --body-file is required");let f=ZG({title:Y.title,body:Z,categorySlug:Y.category});console.log(`created Discussion #${f.number}: ${f.url}`)}var _V;var sV=y(()=>{IQ();_V=["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(`
145
- `)});import{homedir as $R}from"os";async function tV(J={}){let Y=J.homeDir??process.env.KOBE_HOME_DIR??$R(),Z=new Uf({homeDir:Y});await Z.load();let f=new PX,G=new oX({store:Z,worktrees:f});return{homeDir:Y,orchestrator:G,store:Z,worktrees:f,async close(){G.dispose()}}}var eV=y(()=>{SG();xX();uq()});var Y6={};q1(Y6,{runDaemonSubcommand:()=>pR});function J6(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(`
146
- `))}function aR(){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 pR(J){let[Y="status"]=J,Z=QY(),f=kY();if(Y==="--help"||Y==="-h"||Y==="help"){J6(process.stdout);return}if(Y==="status"){let q=new EJ(Z);try{let B=await q.request("daemon.status");console.log(JSON.stringify(B,null,2))}catch{let B=await tf(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 EJ(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 ef(Z,f),(await tJ()).close(),console.log(`kobe daemon: restarted, listening on ${Z}`);return}if(Y!=="start")process.stderr.write(`kobe daemon: unknown command "${Y}"
142
+ ${Z6}
143
+ `),process.exit(2)}function eR(J){if(J==="-")return Y6(0,"utf8");return Y6(J,"utf8")}function X6(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)AZ("--title requires a value");continue}if(X==="--body"){if(Y.body=J[++Z],Y.body===void 0)AZ("--body requires a value");continue}if(X==="--body-file"){if(Y.bodyFile=J[++Z],Y.bodyFile===void 0)AZ("--body-file requires a value");continue}if(X==="--category"){if(Y.category=J[++Z],Y.category===void 0)AZ("--category requires a value");continue}AZ(`unexpected argument "${X}"`)}return Y}async function Jg(J){let Y=X6(J);if(Y.help){process.stdout.write(`${Z6}
144
+ `);return}if(!Y.title)AZ("--title is required");if(Y.body&&Y.bodyFile)AZ("pass either --body or --body-file, not both");let Z=Y.bodyFile?eR(Y.bodyFile):Y.body;if(!Z)AZ("--body or --body-file is required");let X=zG({title:Y.title,body:Z,categorySlug:Y.category});console.log(`created Discussion #${X.number}: ${X.url}`)}var Z6;var f6=S(()=>{xQ();Z6=["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(`
145
+ `)});import{homedir as Yg}from"os";async function z6(J={}){let Y=J.homeDir??process.env.KOBE_HOME_DIR??Yg(),Z=new OX({homeDir:Y});await Z.load();let X=new nf,G=new Zz({store:Z,worktrees:X});return{homeDir:Y,orchestrator:G,store:Z,worktrees:X,async close(){G.dispose()}}}var Q6=S(()=>{NG();mf();nq()});var B6={};j1(B6,{runDaemonSubcommand:()=>Xg});function q6(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(`
146
+ `))}function Zg(){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 Xg(J){let[Y="status"]=J,Z=WY(),X=EY();if(Y==="--help"||Y==="-h"||Y==="help"){q6(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 ZG(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 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 XG(Z,X),(await XY()).close(),console.log(`kobe daemon: restarted, listening on ${Z}`);return}if(Y!=="start")process.stderr.write(`kobe daemon: unknown command "${Y}"
147
147
 
148
- `),J6(process.stderr),process.exit(2);_8();let G=await tV(),X=await VV(G.orchestrator,{socketPath:Z,pidPath:f,homeDir:G.homeDir,webPort:aR(),webHost:process.env.KOBE_WEB_HOST,webStaticDir:process.env.KOBE_DAEMON_WEB_STATIC_DIR,onStop:async()=>{await G.close()}});if(console.log(`kobe daemon: listening on ${X.socketPath}`),X.webPort)console.log(`kobe daemon: web transport listening on http://127.0.0.1:${X.webPort}`);let Q=async()=>{await X.close(),await G.close(),process.exit(0)};process.once("SIGINT",()=>void Q()),process.once("SIGTERM",()=>void Q())}var Z6=y(()=>{kG();KJ();SQ();Of();CQ();eV()});import{existsSync as _R,readFileSync as rR}from"fs";import{homedir as oR}from"os";import{join as f6}from"path";function iH(J={}){return["skills","add",sR,"--skill","kobe","--agent",J.agent??TQ]}function EQ(J={}){return`npx ${iH(J).join(" ")}`}function lH(J={}){let Y=J.home??oR(),Z=J.cwd??process.cwd();return[f6(Y,G6),f6(Z,G6)]}function tR(J){let Y=J.match(/kobe-skill-version:\s*(\d+)/);return Y?Number.parseInt(Y[1],10):null}function ZX(J){let Y=lH(J).find((G)=>_R(G));if(!Y)return{installed:!1,installedVersion:null,currentVersion:dH,stale:!1};let Z=null;try{Z=tR(rR(Y,"utf8"))}catch{Z=null}let f=Z===null||Z<dH;return{installed:!0,installedVersion:Z,currentVersion:dH,stale:f}}function X6(){let J=ZX();if(!J.installed){if(O1(nH)==="1")return;m1(nH,"1"),process.stderr.write(`
148
+ `),q6(process.stderr),process.exit(2);Z5();let G=await z6(),f=await AV(G.orchestrator,{socketPath:Z,pidPath:X,homeDir:G.homeDir,webPort:Zg(),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 ${f.socketPath}`),f.webPort)console.log(`kobe daemon: web transport listening on http://127.0.0.1:${f.webPort}`);let Q=async()=>{await f.close(),await G.close(),process.exit(0)};process.once("SIGINT",()=>void Q()),process.once("SIGTERM",()=>void Q())}var H6=S(()=>{TG();DJ();TQ();SX();bQ();Q6()});import{existsSync as Gg,readFileSync as fg}from"fs";import{homedir as zg}from"os";import{join as j6}from"path";function tH(J={}){return["skills","add",Qg,"--skill","kobe","--agent",J.agent??PQ]}function vQ(J={}){return`npx ${tH(J).join(" ")}`}function eH(J={}){let Y=J.home??zg(),Z=J.cwd??process.cwd();return[j6(Y,W6),j6(Z,W6)]}function qg(J){let Y=J.match(/kobe-skill-version:\s*(\d+)/);return Y?Number.parseInt(Y[1],10):null}function zf(J){let Y=eH(J).find((G)=>Gg(G));if(!Y)return{installed:!1,installedVersion:null,currentVersion:oH,stale:!1};let Z=null;try{Z=qg(fg(Y,"utf8"))}catch{Z=null}let X=Z===null||Z<oH;return{installed:!0,installedVersion:Z,currentVersion:oH,stale:X}}function V6(){let J=zf();if(!J.installed){if(C1(sH)==="1")return;d1(sH,"1"),process.stderr.write(`
149
149
  kobe: the kobe agent skill isn't installed \u2014 install it so your coding agent can drive kobe via \`kobe api\`:
150
- ${YX}
151
- (wraps \`${EQ()}\`; check anytime with \`kobe doctor\`)
150
+ ${ff}
151
+ (wraps \`${vQ()}\`; check anytime with \`kobe doctor\`)
152
152
 
153
- `);return}if(J.stale){let Y=`${nH}:v${J.currentVersion}`;if(O1(Y)==="1")return;m1(Y,"1");let Z=J.installedVersion===null?"an older":`v${J.installedVersion}`;process.stderr.write(`
153
+ `);return}if(J.stale){let Y=`${sH}:v${J.currentVersion}`;if(C1(Y)==="1")return;d1(Y,"1");let Z=J.installedVersion===null?"an older":`v${J.installedVersion}`;process.stderr.write(`
154
154
  kobe: your kobe agent skill is out of date (${Z}; this kobe wants v${J.currentVersion}) \u2014 refresh it so \`kobe api\` guidance matches:
155
- ${YX}
155
+ ${ff}
156
156
 
157
- `)}}var dH=2,G6=".claude/skills/kobe/SKILL.md",YX="kobe skill install",sR="Sma1lboy/kobe",TQ="claude-code",nH="skillHintSeen";var uQ=y(()=>{D1()});var xQ={};q1(xQ,{runResetSubcommand:()=>jg,runReloadSubcommand:()=>Wg,runDoctorSubcommand:()=>Bg});import{existsSync as eR,readFileSync as q6,statSync as Jg}from"fs";import{unlink as Yg}from"fs/promises";import{join as B6}from"path";import{createInterface as Zg}from"readline";function fg(J){try{return process.kill(J,0),!0}catch(Y){return Y.code==="EPERM"}}async function Gg(J){let Y=new EJ(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 zg(J){if(J<1024)return`${J} B`;if(J<1048576)return`${(J/1024).toFixed(1)} KB`;return`${(J/1048576).toFixed(1)} MB`}function $H(J){try{let Y=Jg(J);return`present (${zg(Y.size)}, modified ${Y.mtime.toISOString()})`}catch{return"absent"}}function H6(J){try{let Y=JSON.parse(q6(J,"utf8"));return Array.isArray(Y.tasks)?Y.tasks.length:null}catch{return null}}function Qg(J,Y){try{return q6(J,"utf8").split(`
158
- `).filter((f)=>f.trim().length>0).slice(-Y).join(`
159
- `)}catch{return""}}async function aH(J){let Y=Bun.spawn(nZ(...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 qg(){if(!await jY())return 0;let{code:J,stdout:Y}=await aH(["list-sessions","-F","#{session_name}"]);if(J!==0)return 0;return Y.split(`
160
- `).filter((Z)=>Z.trim().length>0).length}async function Bg(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(`
157
+ `)}}var oH=2,W6=".claude/skills/kobe/SKILL.md",ff="kobe skill install",Qg="Sma1lboy/kobe",PQ="claude-code",sH="skillHintSeen";var mQ=S(()=>{A1()});var cQ={};j1(cQ,{runResetSubcommand:()=>Ag,runReloadSubcommand:()=>Rg,runDoctorSubcommand:()=>Fg});import{existsSync as Bg,readFileSync as L6,statSync as Hg}from"fs";import{unlink as jg}from"fs/promises";import{join as D6}from"path";import{createInterface as Wg}from"readline";function Vg(J){try{return process.kill(J,0),!0}catch(Y){return Y.code==="EPERM"}}async function Kg(J){let Y=new hJ(J);try{return await Y.request("daemon.status")}catch{return null}finally{Y.close()}}function Ug(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 Lg(J){if(J<1024)return`${J} B`;if(J<1048576)return`${(J/1024).toFixed(1)} KB`;return`${(J/1048576).toFixed(1)} MB`}function Jj(J){try{let Y=Hg(J);return`present (${Lg(Y.size)}, modified ${Y.mtime.toISOString()})`}catch{return"absent"}}function M6(J){try{let Y=JSON.parse(L6(J,"utf8"));return Array.isArray(Y.tasks)?Y.tasks.length:null}catch{return null}}function Dg(J,Y){try{return L6(J,"utf8").split(`
158
+ `).filter((X)=>X.trim().length>0).slice(-Y).join(`
159
+ `)}catch{return""}}async function Yj(J){let Y=Bun.spawn(pZ(...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 Mg(){if(!await LY())return 0;let{code:J,stdout:Y}=await Yj(["list-sessions","-F","#{session_name}"]);if(J!==0)return 0;return Y.split(`
160
+ `).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(`
161
161
  `));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(`
162
- `)),process.exit(2);let Z=QY(),f=kY(),G=eX(),X=B6(_1(),"tasks.json"),Q=kJ(),q=["kobe doctor",` home: ${fY()}`,` socket: ${Z}`,""],B=await Gg(Z);if(B){let j=typeof B.daemonPid==="number"?B.daemonPid:"?",U=typeof B.uptimeMs==="number"?Xg(B.uptimeMs):"?",L=typeof B.taskCount==="number"?B.taskCount:"?",M=typeof B.attachedClients==="number"?B.attachedClients:"?";q.push(`daemon: \u2713 running (pid ${j}, up ${U}, ${L} task(s), ${M} client(s))`);let D=typeof B.kobeVersion==="string"?B.kobeVersion:void 0;if(D&&D!==m0)q.push(` \u26A0 stale build: daemon is v${D}, you launched v${m0}`),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 tf(f);if(j&&fg(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(eR(Z))q.push(` orphan socket file present: ${Z}`);let U=Qg(G,8);if(U){q.push(" last lines of daemon.log:");for(let L of U.split(`
163
- `))q.push(` \u2502 ${L}`)}}if(q.push(""),await jY())q.push(`tmux: ${await qg()} kobe session(s) on \`${$J}\` socket`);else q.push("tmux: \u2717 not found on PATH (task sessions need tmux)");q.push("");let H=ZX();if(!H.installed)q.push("skill: \u2717 kobe agent skill not installed (optional \u2014 lets a coding agent drive `kobe api`)"),q.push(` \u2192 ${YX}`);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 ${YX}`)}else q.push(`skill: \u2713 kobe agent skill installed (v${H.installedVersion})`);q.push("");let K=H6(X);q.push(`tasks.json: ${$H(X)}${K===null?"":` \u2014 ${K} task(s)`}`),q.push(`state.json: ${$H(Q)}`),q.push(`daemon.log: ${$H(G)}`),console.log(q.join(`
164
- `))}async function Hg(J){let Y=Zg({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 z6(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 Q6(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(`
165
- `))}async function jg(J){if(J.includes("--help")||J.includes("-h")||J.includes("help")){Q6(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}"
162
+ `)),process.exit(2);let Z=WY(),X=EY(),G=fz(),f=D6(r1(),"tasks.json"),Q=TJ(),q=["kobe doctor",` home: ${qY()}`,` socket: ${Z}`,""],B=await Kg(Z);if(B){let j=typeof B.daemonPid==="number"?B.daemonPid:"?",U=typeof B.uptimeMs==="number"?Ug(B.uptimeMs):"?",L=typeof B.taskCount==="number"?B.taskCount:"?",M=typeof B.attachedClients==="number"?B.attachedClients:"?";q.push(`daemon: \u2713 running (pid ${j}, up ${U}, ${L} task(s), ${M} client(s))`);let D=typeof B.kobeVersion==="string"?B.kobeVersion:void 0;if(D&&D!==d0)q.push(` \u26A0 stale build: daemon is v${D}, you launched v${d0}`),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 ZG(X);if(j&&Vg(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(Bg(Z))q.push(` orphan socket file present: ${Z}`);let U=Dg(G,8);if(U){q.push(" last lines of daemon.log:");for(let L of U.split(`
163
+ `))q.push(` \u2502 ${L}`)}}if(q.push(""),await LY())q.push(`tmux: ${await Mg()} kobe session(s) on \`${oJ}\` socket`);else q.push("tmux: \u2717 not found on PATH (task sessions need tmux)");q.push("");let H=zf();if(!H.installed)q.push("skill: \u2717 kobe agent skill not installed (optional \u2014 lets a coding agent drive `kobe api`)"),q.push(` \u2192 ${ff}`);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 ${ff}`)}else q.push(`skill: \u2713 kobe agent skill installed (v${H.installedVersion})`);q.push("");let K=M6(f);q.push(`tasks.json: ${Jj(f)}${K===null?"":` \u2014 ${K} task(s)`}`),q.push(`state.json: ${Jj(Q)}`),q.push(`daemon.log: ${Jj(G)}`),console.log(q.join(`
164
+ `))}async function Og(J){let Y=Wg({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 K6(J,Y){try{await jg(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 U6(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(`
165
+ `))}async function Ag(J){if(J.includes("--help")||J.includes("-h")||J.includes("help")){U6(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
166
 
167
- `),Q6(process.stderr),process.exit(2);let f=J.includes("--hard"),G=J.includes("--yes")||J.includes("-y"),X=QY(),Q=kY(),q=B6(_1(),"tasks.json"),B=kJ();if(console.log("kobe reset will:"),console.log(" \u2022 stop the kobe daemon (graceful \u2192 SIGTERM \u2192 SIGKILL)"),console.log(` \u2022 remove its socket + pidfile (${X})`),console.log(` \u2022 kill all kobe tmux sessions on the \`${$J}\` socket`),f){let j=H6(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(!G){if(!process.stdin.isTTY){console.log(`
168
- re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await Hg(f?`
167
+ `),U6(process.stderr),process.exit(2);let X=J.includes("--hard"),G=J.includes("--yes")||J.includes("-y"),f=WY(),Q=EY(),q=D6(r1(),"tasks.json"),B=TJ();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 (${f})`),console.log(` \u2022 kill all kobe tmux sessions on the \`${oJ}\` socket`),X){let j=M6(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"),!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(`
168
+ re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await Og(X?`
169
169
  Stop daemon, kill sessions AND wipe task index? [y/N] `:`
170
- Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:H,method:K}=await ef(X,Q);if(console.log(K==="absent"?" daemon: was not running (cleared any stale socket/pidfile)":` daemon: stopped via ${K}${H?` (pid ${H})`:""}`),await jY()){let{code:j}=await aH(["kill-server"]);console.log(j===0?` tmux: killed all sessions on \`${$J}\``:` tmux: no sessions on \`${$J}\``)}else console.log(" tmux: not installed \u2014 no sessions to kill");if(f)await z6(q,"task index"),await z6(B,"UI state");console.log(`
171
- kobe: reset complete. Relaunch kobe to start fresh.`)}async function Wg(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(`
170
+ Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:H,method:K}=await XG(f,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 Yj(["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(X)await K6(q,"task index"),await K6(B,"UI state");console.log(`
171
+ kobe: reset complete. Relaunch kobe to start fresh.`)}async function Rg(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(`
172
172
  `));return}let Y=J.find((q)=>q.length>0);if(Y!==void 0)process.stderr.write(`kobe reload: unexpected argument "${Y}"
173
173
 
174
174
  Usage: kobe reload (takes no options)
175
- `),process.exit(2);if(!await jY()){console.log("kobe reload: tmux is not installed \u2014 no panes to reload");return}let{code:Z,stdout:f}=await aH(["list-sessions","-F","#{session_name}"]);if(Z!==0){console.log(`kobe reload: no kobe tmux sessions on the \`${$J}\` socket`);return}let G=f.split(`
176
- `).map((q)=>q.trim()).filter((q)=>q.length>0);if(G.length===0){console.log(`kobe reload: no kobe tmux sessions on the \`${$J}\` socket`);return}let{refreshKobeWorkspacePanes:X}=await Promise.resolve().then(() => (ZJ(),sJ)),Q=0;for(let q of G)try{await X(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}/${G.length} session(s) \u2014 engine panes untouched`)}var wQ=y(()=>{kG();SQ();Of();CQ();v1();uQ();E1();XJ()});var D6={};q1(D6,{runWebSubcommand:()=>Og});import{existsSync as V6}from"fs";import{homedir as Vg}from"os";import{resolve as hQ}from"path";import{fileURLToPath as K6}from"url";function j6(){let J=process.env.KOBE_HOME_DIR?.trim();return J?`sandbox: ${J}`:`${Vg()}/.kobe (production)`}function Ug(){let J=K6(import.meta.url),Y=[hQ(J,"../../../../kobe-web/dist"),hQ(J,"../../web-ui")];for(let Z of Y)if(V6(`${Z}/index.html`))return Z;return}function Lg(){let J=K6(import.meta.url),Y=[hQ(J,"../../../../kobe-web/pty-server.mjs"),hQ(J,"../../web-ui/pty-server.mjs")];for(let Z of Y)if(V6(Z))return Z;return}async function W6(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(`
177
- `).map((f)=>Number.parseInt(f.trim(),10)).filter((f)=>Number.isFinite(f)&&f!==process.pid)}catch{return[]}}async function Dg(J){let Y;try{Y=(await(await fetch(`http://localhost:${J}${L6}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Y!==U6)throw Error(`PTY port ${J} is in use by a non-kobe service; refusing to replace it`);let Z=await W6(J);for(let G of Z)try{process.kill(G,"SIGTERM")}catch{}let f=Date.now()+2000;while(Date.now()<f){if((await W6(J)).length===0)return;await new Promise((G)=>setTimeout(G,100))}}async function Mg(J){let Y=Lg();if(!Y)return null;let Z=J.webPort+2;if(J.takeover)await Dg(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 Fg(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}${L6}`,{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!==U6)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 Og(J){if(J.includes("--help")||J.includes("-h")){process.stdout.write(Kg);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
178
- `),process.exit(2);Y=f}try{let f=J.includes("--routes-only")||J.includes("--bridge-only"),G=!J.includes("--no-takeover"),X=f?void 0:Ug();if(!f&&!X)throw Error("web assets are missing from this kobe build; run `bun run build` in packages/kobe, or `bun run dev` in packages/kobe-web from a source checkout");await Fg(Y,X);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)
179
- `),process.stdout.write(` home: ${j6()}
180
- `);else if(Q=await Mg({webPort:Y,takeover:G}),process.stdout.write(`kobe web \u2192 http://localhost:${Y}
181
- `),process.stdout.write(` home: ${j6()}
175
+ `),process.exit(2);if(!await LY()){console.log("kobe reload: tmux is not installed \u2014 no panes to reload");return}let{code:Z,stdout:X}=await Yj(["list-sessions","-F","#{session_name}"]);if(Z!==0){console.log(`kobe reload: no kobe tmux sessions on the \`${oJ}\` socket`);return}let G=X.split(`
176
+ `).map((q)=>q.trim()).filter((q)=>q.length>0);if(G.length===0){console.log(`kobe reload: no kobe tmux sessions on the \`${oJ}\` socket`);return}let{refreshKobeWorkspacePanes:f}=await Promise.resolve().then(() => (ZJ(),ZY)),Q=0;for(let q of G)try{await f(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}/${G.length} session(s) \u2014 engine panes untouched`)}var dQ=S(()=>{TG();TQ();SX();bQ();c1();mQ();w1();zJ()});var S6={};j1(S6,{runWebSubcommand:()=>bg});import{existsSync as A6}from"fs";import{homedir as gg}from"os";import{resolve as nQ}from"path";import{fileURLToPath as R6}from"url";function F6(){let J=process.env.KOBE_HOME_DIR?.trim();return J?`sandbox: ${J}`:`${gg()}/.kobe (production)`}function Sg(){let J=R6(import.meta.url),Y=[nQ(J,"../../../../kobe-web/dist"),nQ(J,"../../web-ui")];for(let Z of Y)if(A6(`${Z}/index.html`))return Z;return}function yg(){let J=R6(import.meta.url),Y=[nQ(J,"../../../../kobe-web/pty-server.mjs"),nQ(J,"../../web-ui/pty-server.mjs")];for(let Z of Y)if(A6(Z))return Z;return}async function O6(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(`
177
+ `).map((X)=>Number.parseInt(X.trim(),10)).filter((X)=>Number.isFinite(X)&&X!==process.pid)}catch{return[]}}async function kg(J){let Y;try{Y=(await(await fetch(`http://localhost:${J}${C6}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Y!==g6)throw Error(`PTY port ${J} is in use by a non-kobe service; refusing to replace it`);let Z=await O6(J);for(let G of Z)try{process.kill(G,"SIGTERM")}catch{}let X=Date.now()+2000;while(Date.now()<X){if((await O6(J)).length===0)return;await new Promise((G)=>setTimeout(G,100))}}async function Ig(J){let Y=yg();if(!Y)return null;let Z=J.webPort+2;if(J.takeover)await kg(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 Ng(J,Y){if(process.env.KOBE_DAEMON_WEB_PORT=String(J),Y)process.env.KOBE_DAEMON_WEB_STATIC_DIR=Y;await GG();let Z;try{Z=(await(await fetch(`http://127.0.0.1:${J}${C6}`,{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!==g6)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 bg(J){if(J.includes("--help")||J.includes("-h")){process.stdout.write(Cg);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
178
+ `),process.exit(2);Y=X}try{let X=J.includes("--routes-only")||J.includes("--bridge-only"),G=!J.includes("--no-takeover"),f=X?void 0:Sg();if(!X&&!f)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 Ng(Y,f);let Q=null,q=!1,B=()=>{if(q)return;q=!0,Q?.kill(),Q=null};if(X)process.stdout.write(`kobe daemon web transport listening on http://localhost:${Y} (routes only)
179
+ `),process.stdout.write(` home: ${F6()}
180
+ `);else if(Q=await Ig({webPort:Y,takeover:G}),process.stdout.write(`kobe web \u2192 http://localhost:${Y}
181
+ `),process.stdout.write(` home: ${F6()}
182
182
  `),!Q)process.stderr.write(`kobe web: PTY server not found; terminal tabs will be unavailable
183
183
  `);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
184
- `),B(),process.exit(1)}),await new Promise(()=>{})}catch(f){process.stderr.write(`kobe web: ${f instanceof Error?f.message:String(f)}
185
- `),process.exit(1)}}var U6="kobe-web",L6="/__kobe_web",Kg=`Usage: kobe web [options]
184
+ `),B(),process.exit(1)}),await new Promise(()=>{})}catch(X){process.stderr.write(`kobe web: ${X instanceof Error?X.message:String(X)}
185
+ `),process.exit(1)}}var g6="kobe-web",C6="/__kobe_web",Cg=`Usage: kobe web [options]
186
186
 
187
187
  Launch the kobe web UI through daemon web transport on http://localhost:<port>.
188
188
 
@@ -191,45 +191,45 @@ Options:
191
191
  --routes-only Routes only; Vite serves the SPA separately.
192
192
  --no-takeover Reserved for compatibility; daemon owns the web port.
193
193
  -h, --help Show this help.
194
- `;var M6=y(()=>{KJ()});var O6={};q1(O6,{runSkillSubcommand:()=>Rg});function pH(){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: ${TQ}.`].join(`
195
- `)}function F6(J){let Y=TQ;for(let Z=0;Z<J.length;Z++){let f=J[Z];if(f==="--agent"){let G=J[Z+1];if(!G||G.startsWith("--"))process.stderr.write(`kobe skill: --agent requires a value
196
- `),process.exit(2);Y=G,Z++}else if(f.startsWith("--agent="))Y=f.slice(8);else process.stderr.write(`kobe skill: unknown flag "${f}"
194
+ `;var y6=S(()=>{DJ()});var I6={};j1(I6,{runSkillSubcommand:()=>Eg});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: ${PQ}.`].join(`
195
+ `)}function k6(J){let Y=PQ;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
196
+ `),process.exit(2);Y=G,Z++}else if(X.startsWith("--agent="))Y=X.slice(8);else process.stderr.write(`kobe skill: unknown flag "${X}"
197
197
 
198
- ${pH()}
199
- `),process.exit(2)}return Y}async function Rg(J){let[Y,...Z]=J;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(process.stdout.write(`${pH()}
200
- `),!Y)process.exitCode=2;return}if(!Ag.includes(Y))process.stderr.write(`kobe skill: unknown verb "${Y}"
198
+ ${Zj()}
199
+ `),process.exit(2)}return Y}async function Eg(J){let[Y,...Z]=J;if(!Y||Y==="--help"||Y==="-h"||Y==="help"){if(process.stdout.write(`${Zj()}
200
+ `),!Y)process.exitCode=2;return}if(!Tg.includes(Y))process.stderr.write(`kobe skill: unknown verb "${Y}"
201
201
 
202
- ${pH()}
203
- `),process.exit(2);if(Y==="status"){let q=ZX(),[B,H]=lH(),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(`
204
- `));return}if(Y==="command"){process.stdout.write(`${EQ({agent:F6(Z)})}
205
- `);return}let f=F6(Z),G=iH({agent:f});process.stdout.write(`kobe skill: running \`npx ${G.join(" ")}\`
202
+ ${Zj()}
203
+ `),process.exit(2);if(Y==="status"){let q=zf(),[B,H]=eH(),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(`
204
+ `));return}if(Y==="command"){process.stdout.write(`${vQ({agent:k6(Z)})}
205
+ `);return}let X=k6(Z),G=tH({agent:X});process.stdout.write(`kobe skill: running \`npx ${G.join(" ")}\`
206
206
  `);let Q=await Bun.spawn(["npx",...G],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(Q!==0)process.stderr.write(`
207
207
  kobe skill install failed (npx exited ${Q}). Is \`npx\` on PATH and are you online?
208
- You can run it yourself: ${EQ({agent:f})}
208
+ You can run it yourself: ${vQ({agent:X})}
209
209
  `),process.exit(Q||1);process.stdout.write(`kobe skill: installed.
210
- `)}var Ag;var A6=y(()=>{uQ();Ag=["install","status","command"]});var rH={};q1(rH,{runHookSubcommand:()=>Ng,readTextWithTimeout:()=>S6,parseWorktreeAddPath:()=>k6,ensureGlobalKobeHooks:()=>ug});import{homedir as gg}from"os";import{join as g6,resolve as C6}from"path";async function S6(J,Y=Cg){let Z;try{return await Promise.race([J(),new Promise((f)=>{Z=setTimeout(()=>f(""),Y)})])}finally{if(Z!==void 0)clearTimeout(Z)}}async function y6(){try{let J=await S6(()=>Bun.stdin.text());if(!J.trim())return{};let Y=JSON.parse(J);return Y&&typeof Y==="object"&&!Array.isArray(Y)?Y:{}}catch{return{}}}function Sg(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 kg(J){return!!J&&typeof J==="object"&&!Array.isArray(J)}function Ig(J){let Y=[],Z=/"([^"]*)"|'([^']*)'|(\S+)/g,f;while((f=Z.exec(J))!==null)Y.push(f[1]??f[2]??f[3]??"");return Y}function k6(J){let Y=Ig(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 G=f+2;while(G<Y.length){let X=Y[G];if(X==="&&"||X==="||"||X===";"||X==="|"||X===">"||X===">>")break;if(X.startsWith("-")){G+=Z.has(X)?2:1;continue}return X}}return}async function bg(){let J=await y6(),Y=kg(J.tool_input)?J.tool_input:{},Z=typeof Y.command==="string"?Y.command:"";if(!Z.includes("worktree"))return;let f=k6(Z);if(!f)return;let G=typeof J.cwd==="string"&&J.cwd?J.cwd:process.cwd(),X=C6(G,f),Q=await PJ();if(!Q)return;try{await Q.request("worktree.reconcile",{cwd:G,worktreePath:X})}finally{Q.close()}}async function Ng(J){let[Y,...Z]=J;if(Y==="setup"){await xg(Z);return}if(Y===yg){try{await bg()}catch{}return}try{if(!Y||!Yz(Y))return;let f=await y6(),G=Sg(Z,"--task-id"),X=typeof f.cwd==="string"&&f.cwd?f.cwd:process.cwd(),Q;for(let B of I6())if(Q=B.activityDetailFromPayload(Y,f),Q)break;let q=await PJ();if(!q)return;try{await q.request("engine.reportEvent",{...G?{taskId:G}:{cwd:X},kind:Y,...Q?{detail:Q}:{}})}finally{q.close()}}catch{}}function Tg(){return x1.map((J)=>MB(J)).filter((J)=>J.supportsWorktreeSync())}function I6(){return x1.map((J)=>MB(J)).filter((J)=>J.supportsHooks())}function _H(){return g6(gg(),".claude","settings.json")}function Eg(J){if(!J||J==="off")return;if(J==="global")return _H();if(J.startsWith("repo:"))return g6(C6(J.slice(5)),".claude","settings.json");return J}async function ug(){try{let J=_H();for(let Y of I6())await Y.installActivityHooks(J),await Y.installWorktreeWatchHook(J);await b6()}catch{}}async function b6(){let J=Tg();if(J.length===0)return;let Y=O1(R6),Z=new Set([_H()]),f=Eg(Y);if(f)Z.add(f);for(let G of J)for(let X of Z)await G.removeWorktreeSyncHook(X);if(Y!=="off")m1(R6,"off")}async function xg(J){await b6(),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(`
211
- `))}var Cg=500,yg="worktree-created",R6="externalWorktreeSync";var oH=y(()=>{KJ();FB();Zz();D1();QJ()});function T6(J){var Y;if(J>=55296&&J<=57343||J>1114111)return 65533;return(Y=wg.get(J))!==null&&Y!==void 0?Y:J}var sH,wg,N6;var E6=y(()=>{wg=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]]),N6=(sH=String.fromCodePoint)!==null&&sH!==void 0?sH:(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 u6(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 G=0,X=0;G<Z;G+=2){let Q=Y.charCodeAt(G),q=Y.charCodeAt(G+1);f[X++]=Q|q<<8}return f}var x6;var w6=y(()=>{x6=u6("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/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/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg")});var fJ;var h6=y(()=>{(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 tH(J){return J>=C1.ZERO&&J<=C1.NINE}function hg(J){return J>=C1.UPPER_A&&J<=C1.UPPER_F||J>=C1.LOWER_A&&J<=C1.LOWER_F}function Pg(J){return J>=C1.UPPER_A&&J<=C1.UPPER_Z||J>=C1.LOWER_A&&J<=C1.LOWER_Z||tH(J)}function vg(J){return J===C1.EQUALS||Pg(J)}class eH{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=nY.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)===C1.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)|P6)===C1.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(tH(Z)||hg(Z)){let f=Z<=C1.NINE?Z-C1.ZERO:(Z|P6)-C1.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(tH(Z))this.result=this.result*10+(Z-C1.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===C1.SEMI)this.consumed+=1;else if(this.decodeMode===nY.Strict)return 0;if(this.emitCodePoint(T6(this.result),this.consumed),this.errors){if(J!==C1.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(J,Y){let{decodeTree:Z}=this,f=Z[this.treeIndex],G=(f&fJ.VALUE_LENGTH)>>14;while(Y<J.length){if(G===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],G=(f&fJ.VALUE_LENGTH)>>14}if(Y>=J.length)break;let X=J.charCodeAt(Y);if(X===C1.SEMI&&G!==0&&(f&fJ.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.treeIndex=cg(Z,f,this.treeIndex+Math.max(1,G),X),this.treeIndex<0)return this.result===0||this.decodeMode===nY.Attribute&&(G===0||vg(X))?0:this.emitNotTerminatedNamedEntity();if(f=Z[this.treeIndex],G=(f&fJ.VALUE_LENGTH)>>14,G!==0){if(X===C1.SEMI)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.decodeMode!==nY.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 $1.NamedEntity:return this.result!==0&&(this.decodeMode!==nY.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 mg(J){let Y="",Z=new eH(J,(f)=>Y+=N6(f));return function(G,X){let Q=0,q=0;while((q=G.indexOf("&",q))>=0){Y+=G.slice(Q,q),Z.startEntity(X);let H=Z.write(G,q+1);if(H<0){Q=q+Z.end();break}Q=q+H,q=H===0?Q+1:Q}let B=Y+G.slice(Q);return Y="",B}}function cg(J,Y,Z,f){let G=(Y&fJ.BRANCH_LENGTH)>>7,X=Y&fJ.JUMP_TABLE;if(G===0)return X!==0&&f===X?Z:-1;if(X){let H=f-X;return H<0||H>=G?-1:J[Z+H]-1}let Q=G+1>>1,q=0,B=G-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 Xf(J,Y=nY.Legacy){return dg(J,Y)}var C1,P6=32,$1,nY,dg;var v6=y(()=>{E6();w6();h6();(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"})(C1||(C1={}));(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"})(nY||(nY={}));dg=mg(x6)});var m6,c6;var n6=y(()=>{v6();(function(J){J[J.XML=0]="XML",J[J.HTML=1]="HTML"})(m6||(m6={}));(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"})(c6||(c6={}))});import{CliRenderer as ig,createCliRenderer as lg,engine as $g}from"@opentui/core";import{createTestRenderer as AP}from"@opentui/core/testing";import{ASCIIFontRenderable as ag,BoxRenderable as pg,CodeRenderable as _g,DiffRenderable as rg,InputRenderable as og,LineNumberRenderable as sg,MarkdownRenderable as tg,ScrollBoxRenderable as eg,SelectRenderable as JC,TabSelectRenderable as YC,TextareaRenderable as ZC,TextAttributes as Jj,TextNodeRenderable as fC,TextRenderable as GC}from"@opentui/core";import{engine as CP,Timeline as SP}from"@opentui/core";import{BaseRenderable as _6,createTextAttributes as zC,InputRenderable as Yj,InputRenderableEvents as fX,isTextNodeRenderable as Gj,parseColor as i6,Renderable as QC,RootTextNodeRenderable as qC,ScrollBoxRenderable as BC,SelectRenderable as l6,SelectRenderableEvents as Zj,TabSelectRenderable as $6,TabSelectRenderableEvents as fj,TextNodeRenderable as HC,TextRenderable as r6}from"@opentui/core";import{BaseRenderable as FC,isTextNodeRenderable as OC,TextNodeRenderable as AC,TextRenderable as RC,Yoga as p6}from"@opentui/core";import{BoxRenderable as wP,RootRenderable as hP}from"@opentui/core";import{TimeToFirstDrawRenderable as yC}from"@opentui/core";import{createSlotRegistry as mP}from"@opentui/core";function WC({createElement:J,createTextNode:Y,createSlotNode:Z,isTextNode:f,replaceText:G,insertNode:X,removeNode:Q,setProperty:q,getParentNode:B,getFirstChild:H,getNextSibling:K}){function j(g,S,C,k){if(C!==void 0&&!k)k=[];if(typeof S!=="function")return U(g,S,k,C);GY(($)=>U(g,S(),$,C),k)}function U(g,S,C,k,$){while(typeof C==="function")C=C();if(S===C)return C;let G0=typeof S,s=k!==void 0;if(G0==="string"||G0==="number"){if(G0==="number")S=S.toString();if(s){let J0=C[0];if(J0&&f(J0))G(J0,S);else J0=Y(S);C=D(g,C,k,J0)}else if(C!==""&&typeof C==="string")G(H(g),C=S);else D(g,C,k,Y(S)),C=S}else if(S==null||G0==="boolean")C=D(g,C,k);else if(G0==="function")return GY(()=>{let J0=S();while(typeof J0==="function")J0=J0();C=U(g,J0,C,k)}),()=>C;else if(Array.isArray(S)){let J0=[];if(L(J0,S,$))return GY(()=>C=U(g,J0,C,k,!0)),()=>C;if(J0.length===0){let E=D(g,C,k);if(s)return C=E}else if(Array.isArray(C))if(C.length===0)A(g,J0,k);else M(g,C,J0);else if(C==null||C==="")A(g,J0);else M(g,s&&C||[H(g)],J0);C=J0}else{if(Array.isArray(C)){if(s)return C=D(g,C,k,S);D(g,C,null,S)}else if(C==null||C===""||!H(g))X(g,S);else R(g,S,H(g));C=S}return C}function L(g,S,C){let k=!1;for(let $=0,G0=S.length;$<G0;$++){let s=S[$],J0;if(s==null||s===!0||s===!1);else if(Array.isArray(s))k=L(g,s)||k;else if((J0=typeof s)==="string"||J0==="number")g.push(Y(s));else if(J0==="function")if(C){while(typeof s==="function")s=s();k=L(g,Array.isArray(s)?s:[s])||k}else g.push(s),k=!0;else g.push(s)}return k}function M(g,S,C){let k=C.length,$=S.length,G0=k,s=0,J0=0,E=K(S[$-1]),Q0=null;while(s<$||J0<G0){if(S[s]===C[J0]){s++,J0++;continue}while(S[$-1]===C[G0-1])$--,G0--;if($===s){let e=G0<k?J0?K(C[J0-1]):C[G0-J0]:E;while(J0<G0)X(g,C[J0++],e)}else if(G0===J0)while(s<$){if(!Q0||!Q0.has(S[s]))Q(g,S[s]);s++}else if(S[s]===C[G0-1]&&C[J0]===S[$-1]){let e=K(S[--$]);X(g,C[J0++],K(S[s++])),X(g,C[--G0],e),S[$]=C[G0]}else{if(!Q0){Q0=new Map;let j0=J0;while(j0<G0)Q0.set(C[j0],j0++)}let e=Q0.get(S[s]);if(e!=null)if(J0<e&&e<G0){let j0=s,o=1,p;while(++j0<$&&j0<G0){if((p=Q0.get(S[j0]))==null||p!==e+o)break;o++}if(o>e-J0){let _=S[s];while(J0<e)X(g,C[J0++],_)}else R(g,C[J0++],S[s++])}else s++;else Q(g,S[s++])}}}function D(g,S,C,k){if(C===void 0){let G0;while(G0=H(g))Q(g,G0);return k&&X(g,k),k??""}let $=k||Z();if(S.length){let G0=!1;for(let s=S.length-1;s>=0;s--){let J0=S[s];if($!==J0){let E=B(J0)===g;if(!G0&&!s)E?R(g,$,J0):X(g,$,C);else E&&Q(g,J0)}else G0=!0}}else X(g,$,C);return[$]}function A(g,S,C){for(let k=0,$=S.length;k<$;k++)X(g,S[k],C)}function R(g,S,C){X(g,S,C),Q(g,C)}function l(g,S,C={},k){if(S||(S={}),!k)GY(()=>C.children=U(g,S.children,C.children));return GY(()=>S.ref&&S.ref(g)),GY(()=>{for(let $ in S){if($==="children"||$==="ref")continue;let G0=S[$];if(G0===C[$])continue;q(g,$,G0,C[$]),C[$]=G0}}),C}return{render(g,S){let C;return bZ((k)=>{C=k,j(S,g())}),C},insert:j,spread(g,S,C){if(typeof S==="function")GY((k)=>l(g,S(),k,C));else l(g,S,void 0,C)},createElement:J,createTextNode:Y,insertNode:X,setProp(g,S,C,k){return q(g,S,C,k),C},mergeProps:_X,effect:GY,memo:jC,createComponent:AW,use(g,S,C){return c1(()=>g(S,C))}}}function VC(J){let Y=WC(J);return Y.mergeProps=_X,Y}function Bj(J){if(!PQ.has(J))PQ.set(J,0);let Y=PQ.get(J)+1;return PQ.set(J,Y),`${J}-${Y}`}function KC(J,Y,Z){if(a1("Inserting node:",n1(Y),"into parent:",n1(J),"with anchor:",n1(Z),Y instanceof zG),Y instanceof GX)Y.parent=J,Y=Y.getSlotChild(J);if(Z&&Z instanceof GX)Z=Z.getSlotChild(J);if(Gj(Y)){if(!(J instanceof r6)&&!Gj(J))throw Error(`Orphan text error: "${Y.toChunks().map((X)=>X.text).join("")}" must have a <text> as a parent: ${J.id} above ${Y.id}`)}if(!(J instanceof _6))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=Xj(J),G=f.findIndex((X)=>X.id===Z.id);if(G===-1)a1("[INSERT]","Could not find anchor",n1(J),n1(Z),"[children]",...f.map((X)=>X.id));J.add(Y,G)}function UC(J,Y){if(a1("Removing node:",n1(Y),"from parent:",n1(J)),Y instanceof GX)Y.parent=null,Y=Y.getSlotChild(J);J.remove(Y.id),process.nextTick(()=>{if(Y instanceof _6&&!Y.parent){Y.destroyRecursively();return}})}function LC(J){a1("Creating text node:",J);let Y=Bj("text-node");if(typeof J==="number")J=J.toString();return zG.fromString(Xf(J),{id:Y})}function DC(){let J=Bj("slot-node");return a1("Creating slot node",J),new GX(J)}function a6(J){a1("Getting parent of node:",n1(J));let Y=J.parent??void 0;if(Y instanceof qC)Y=Y.textParent??void 0;let Z=Y?.parent?.parent?.parent;if(Z instanceof BC&&Z.content===Y)Y=Z;return Y}function CC(J){Object.assign(ZK,J)}function SC(){return ZK}var qj,o1=()=>{let J=AJ(qj);if(!J)throw Error("No renderer found");return J},XC=(J)=>{let Y=o1();r1(()=>{Y.on("resize",J)}),d1(()=>{Y.off("resize",J)})},DY=()=>{let J=o1(),[Y,Z]=r({width:J.width,height:J.height});return XC((G,X)=>{Z({width:G,height:X})}),Y},jC=(J)=>W0(()=>J()),PQ,a1=(...J)=>{if(process.env.DEBUG)console.log("[Reconciler]",...J)},zG,n1=(J)=>{if(!J)return;return J.id},Xj=(J)=>{let Y;if(J instanceof r6)Y=J.getTextChildren();else Y=J.getChildren();return Y},MC,x,o0,I,V,T,W,F,EP,z,o6,LZ,Hj,s6,t6,GX,XX,vQ,zj,Qj,e6,JK,YK,gC,ZK,kC=(J,Y)=>{let Z,f=!1,G=!1,X=!0,Q=!1,q=J.destroy.bind(J),B=()=>{if(G)return;if(!Z){f=!0;return}G=!0,Z()};J.once("destroy",B),J.destroy=()=>{if(X){Q=!0;return}q()};try{Z=MC(()=>I(qj.Provider,{get value(){return J},get children(){return I(Y,{})}}),J.root)}finally{X=!1,J.destroy=q}if(f)B();if(Q)q()},fK=async(J,Y={})=>{let Z=Y instanceof ig?Y:await lg({...Y,onDestroy:()=>{Y.onDestroy?.()}});$g.attach(Z),kC(Z,J)};var w=y(()=>{G1();n6();G1();G1();G1();qj=XY();PQ=new Map;zG=class zG extends HC{static fromString(J,Y={}){let Z=new zG(Y);return Z.add(J),Z}};({render:MC,effect:x,memo:o0,createComponent:I,createElement:V,createTextNode:T,insertNode:W,insert:F,spread:EP,setProp:z,mergeProps:o6,use:LZ}=VC({createElement(J){a1("Creating element:",J);let Y=Bj(J),Z=AJ(qj);if(!Z)throw Error("No renderer found");let f=SC();if(!f[J])throw Error(`[Reconciler] Unknown component type: ${J}`);let G=new f[J](Z,{id:Y});return a1("Element created with id:",Y),G},createTextNode:LC,createSlotNode:DC,replaceText(J,Y){if(a1("Replacing text:",Y,"in node:",n1(J)),!(J instanceof zG))return;J.replace(Xf(Y),0)},setProperty(J,Y,Z,f){if(Y.startsWith("on:")){let G=Y.slice(3);if(Z)J.on(G,Z);if(f)J.off(G,f);return}if(Gj(J)){if(Y==="href"){J.link={url:Z};return}if(Y==="style"){J.attributes|=zC(Z),J.fg=Z.fg?i6(Z.fg):J.fg,J.bg=Z.bg?i6(Z.bg):J.bg;return}return}switch(Y){case"id":a1("Id mapped",J.id,"=",Z),J[Y]=Z;break;case"focused":if(!(J instanceof QC))return;if(Z)J.focus();else J.blur();break;case"onChange":let G=void 0;if(J instanceof l6)G=Zj.SELECTION_CHANGED;else if(J instanceof $6)G=fj.SELECTION_CHANGED;else if(J instanceof Yj)G=fX.CHANGE;if(!G)break;if(Z)J.on(G,Z);if(f)J.off(G,f);break;case"onInput":if(J instanceof Yj){if(Z)J.on(fX.INPUT,Z);if(f)J.off(fX.INPUT,f)}break;case"onSubmit":if(J instanceof Yj){if(Z)J.on(fX.ENTER,Z);if(f)J.off(fX.ENTER,f)}else J[Y]=Z;break;case"onSelect":if(J instanceof l6){if(Z)J.on(Zj.ITEM_SELECTED,Z);if(f)J.off(Zj.ITEM_SELECTED,f)}else if(J instanceof $6){if(Z)J.on(fj.ITEM_SELECTED,Z);if(f)J.off(fj.ITEM_SELECTED,f)}break;case"style":for(let X in Z){let Q=Z[X];if(f!==void 0&&Q===f[X])continue;J[X]=Q}break;case"text":case"content":{let X=typeof Z==="string"?Z:Array.isArray(Z)?Z.join(""):`${Z}`;J[Y]=Xf(X);break}default:J[Y]=Z}},isTextNode(J){return J instanceof zG},insertNode:KC,removeNode:UC,getParentNode:a6,getFirstChild(J){a1("Getting first child of node:",n1(J));let Y=Xj(J)[0];if(!Y){a1("No first child found for node:",n1(J));return}return a1("First child found:",n1(Y),"for node:",n1(J)),Y},getNextSibling(J){a1("Getting next sibling of node:",n1(J));let Y=a6(J);if(!Y){a1("No parent found for node:",n1(J));return}let Z=Xj(Y),f=Z.indexOf(J);if(f===-1||f===Z.length-1){a1("No next sibling found for node:",n1(J));return}let G=Z[f+1];if(!G){a1("Next sibling is null for node:",n1(J));return}return a1("Next sibling found:",n1(G),"for node:",n1(J)),G}}));Hj=class Hj extends FC{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}};s6=class s6 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()}};t6=class t6 extends Hj{yogaNode;slotParent;destroyed=!1;constructor(J,Y){super(J);this._visible=!1,this.slotParent=Y,this.yogaNode=p6.default.Node.create(),this.yogaNode.setDisplay(p6.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};GX=class GX extends Hj{layoutNode;textNode;destroyed=!1;constructor(J){super(J);this._visible=!1}getSlotChild(J){if(OC(J)||J instanceof RC){if(!this.textNode)this.textNode=new s6(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new t6(`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()}};XX=class XX extends fC{_ctx;constructor(J,Y){super(Y);this._ctx=J}};vQ=class vQ extends XX{constructor(J,Y){super(null,J);if(Y==="b"||Y==="strong")this.attributes=(this.attributes||0)|Jj.BOLD;else if(Y==="i"||Y==="em")this.attributes=(this.attributes||0)|Jj.ITALIC;else if(Y==="u")this.attributes=(this.attributes||0)|Jj.UNDERLINE}};zj=class zj extends vQ{constructor(J){super(J,"b")}};Qj=class Qj extends vQ{constructor(J){super(J,"i")}};e6=class e6 extends vQ{constructor(J){super(J,"u")}};JK=class JK extends XX{constructor(J,Y){super(null,Y);this.add()}add(){return super.add(`
212
- `)}};YK=class YK extends XX{constructor(J,Y){let Z={...Y,link:{url:Y.href}};super(null,Z)}};gC={box:pg,text:GC,input:og,select:JC,textarea:ZC,ascii_font:ag,tab_select:YC,scrollbox:eg,code:_g,diff:rg,line_number:sg,markdown:tg,span:XX,strong:zj,b:zj,em:Qj,i:Qj,u:e6,br:JK,a:YK},ZK={...gC};CC({time_to_first_draw:yC})});function IC(J){let Y=J?.changes;if(!Y||typeof Y!=="object"||Array.isArray(Y))return null;let Z=new Map;for(let[f,G]of Object.entries(Y)){let X=G;if(typeof X?.added!=="number"||typeof X.deleted!=="number")return null;Z.set(f,{added:X.added,deleted:X.deleted})}return Z}function bC(J,Y){if(J.size!==Y.size)return!1;for(let[Z,f]of J){let G=Y.get(Z);if(!G||!LY(f,G))return!1}return!0}class GJ{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]=r([]),[G,X]=r(null),[Q,q]=r(null),[B,H]=r(null),[K,j]=r(new Map),[U,L]=r(new Map),[M,D]=r(null),[A,R]=r(null),[l,g]=r(null),[S,C]=r("online");this.tasksAcc=Z,this.setTasks=(k)=>f(()=>k),this.activeTaskAcc=G,this.setActiveTaskSig=(k)=>X(()=>k),this.updateAcc=Q,this.setUpdateSig=(k)=>q(()=>k),this.daemonVersionAcc=B,this.setDaemonVersionSig=(k)=>H(()=>k),this.engineStateAcc=K,this.setEngineStateSig=(k)=>j(()=>k),this.taskJobsAcc=U,this.setTaskJobsSig=(k)=>L(()=>k),this.worktreeChangesAcc=M,this.setWorktreeChangesSig=(k)=>D(()=>k),this.uiPrefsAcc=A,this.setUiPrefsSig=(k)=>R(()=>k),this.keybindingsRevAcc=l,this.setKeybindingsRevSig=(k)=>g(()=>k),this.connectionStateAcc=S,this.setConnectionState=(k)=>C(()=>k),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("*",(k)=>this.handleEvent(k.name,k.payload)),this.client.onLifecycle("close",()=>{if(this.setConnectionState("disconnected"),this.role==="pane")IY("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(),IY("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)sY("orch-reconnect",Z);J=Math.min(J*2,3000)}}this.reconnecting=!1}async init(){let J=await this.client.request("hello",{protocolVersion:TJ,minProtocolVersion:oY}),Y=typeof J.protocolVersion==="number"?J.protocolVersion:TJ,Z=typeof J.minProtocolVersion==="number"?J.minProtocolVersion:Y;if(!sX({localVersion:TJ,localMin:oY,remoteVersion:Y,remoteMin:Z}))throw Error(`kobe daemon is protocol v${Y} (min v${Z}); this client is v${TJ} (min v${oY}). 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(zX));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"),IY("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()=>NW(this.daemonVersionAcc()??void 0,m0)}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 bZ((Z)=>{return a0(()=>{let f=this.tasksAcc();if(Y){Y=!1;return}try{J(f)}catch(G){console.error("[kobe RemoteOrchestrator] task listener threw:",G)}}),Z})}async createTask(J){let{modelEffort:Y,...Z}=J,f=await this.client.request("task.create",{...Z,effort:Y});return zX(f.task)}async ensureMainTask(J){let Y=await this.client.request("task.ensureMain",{repo:J});return zX(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 zX(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(zX)),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 G=new Map(f);G.set(Z.taskId,{kind:Z.kind}),this.setTaskJobsSig(G);return}if((Z.phase==="done"||Z.phase==="error")&&f.has(Z.taskId)){let G=new Map(f);G.delete(Z.taskId),this.setTaskJobsSig(G)}return}if(J==="worktree.changes"){let Z=IC(Y);if(!Z)return;let f=this.worktreeChangesAcc();if(f&&bC(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((G)=>G.id)),f=null;for(let G of Y.keys()){if(Z.has(G))continue;if(!f)f=new Map(Y);f.delete(G)}if(f)this.setEngineStateSig(f)}pruneTaskJobs(J){let Y=this.taskJobsAcc();if(Y.size===0)return;let Z=new Set(J.map((G)=>G.id)),f=null;for(let G of Y.keys()){if(Z.has(G))continue;if(!f)f=new Map(Y);f.delete(G)}if(f)this.setTaskJobsSig(f)}}function zX(J){return{id:FG(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 DZ=y(()=>{uZ();KJ();TZ();G1();sf();NJ();XJ()});function zK(J){let Y=J[nJ];if(!Y){if(Object.defineProperty(J,nJ,{value:Y=new Proxy(J,EC)}),!Array.isArray(J)){let Z=Object.keys(J),f=Object.getOwnPropertyDescriptors(J);for(let G=0,X=Z.length;G<X;G++){let Q=Z[G];if(f[Q].get)Object.defineProperty(J,Q,{enumerable:f[Q].enumerable,get:f[Q].get.bind(Y)})}}}return Y}function mQ(J){let Y;return J!=null&&typeof J==="object"&&(J[nJ]||!(Y=Object.getPrototypeOf(J))||Y===Object.prototype||Array.isArray(J))}function qX(J,Y=new Set){let Z,f,G,X;if(Z=J!=null&&J[jj])return Z;if(!mQ(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(G=J[Q],(f=qX(G,Y))!==G)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(X=Q[B],q[X].get)continue;if(G=J[X],(f=qX(G,Y))!==G)J[X]=f}}return J}function cQ(J,Y){let Z=J[Y];if(!Z)Object.defineProperty(J,Y,{value:Z=Object.create(null)});return Z}function BX(J,Y,Z){if(J[Y])return J[Y];let[f,G]=r(Z,{equals:!1,internal:!0});return f.$=G,J[Y]=f}function NC(J,Y){let Z=Reflect.getOwnPropertyDescriptor(J,Y);if(!Z||Z.get||!Z.configurable||Y===nJ||Y===QG)return Z;return delete Z.value,delete Z.writable,Z.get=()=>J[nJ][Y],Z}function QK(J){aX()&&BX(cQ(J,QG),XK)()}function TC(J){return QK(J),Reflect.ownKeys(J)}function dQ(J,Y,Z,f=!1){if(!f&&J[Y]===Z)return;let G=J[Y],X=J.length;if(GK.onStoreNodeUpdate&&GK.onStoreNodeUpdate(J,Y,Z,G),Z===void 0){if(delete J[Y],J[iY]&&J[iY][Y]&&G!==void 0)J[iY][Y].$()}else if(J[Y]=Z,J[iY]&&J[iY][Y]&&G===void 0)J[iY][Y].$();let Q=cQ(J,QG),q;if(q=BX(Q,Y,G))q.$(()=>Z);if(Array.isArray(J)&&J.length!==X){for(let B=J.length;B<X;B++)(q=Q[B])&&q.$();(q=BX(Q,"length",X))&&q.$(J.length)}(q=Q[XK])&&q.$()}function qK(J,Y){let Z=Object.keys(Y);for(let f=0;f<Z.length;f+=1){let G=Z[f];dQ(J,G,Y[G])}}function uC(J,Y){if(typeof Y==="function")Y=Y(J);if(Y=qX(Y),Array.isArray(Y)){if(J===Y)return;let Z=0,f=Y.length;for(;Z<f;Z++){let G=Y[Z];if(J[Z]!==G)dQ(J,Z,G)}dQ(J,"length",f)}else qK(J,Y)}function QX(J,Y,Z=[]){let f,G=J;if(Y.length>1){f=Y.shift();let Q=typeof f,q=Array.isArray(J);if(Array.isArray(f)){for(let B=0;B<f.length;B++)QX(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))QX(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)QX(J,[j].concat(Y),Z);return}else if(Y.length>1){QX(J[f],Y,[f].concat(Z));return}G=J[f],Z=[f].concat(Z)}let X=Y[0];if(typeof X==="function"){if(X=X(G,Z),X===G)return}if(f===void 0&&X==null)return;if(X=qX(X),f===void 0||mQ(G)&&mQ(X)&&!Array.isArray(X))qK(G,X);else dQ(J,f,X)}function MZ(...[J,Y]){let Z=qX(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 G=zK(Z);RW.registerGraph({value:Z,name:Y&&Y.name});function X(...Q){$X(()=>{f&&Q.length===1?uC(Z,Q[0]):QX(Z,Q)})}return[G,X]}var jj,QG,iY,XK,GK,EC,oP;var HX=y(()=>{G1();jj=Symbol("store-raw"),QG=Symbol("store-node"),iY=Symbol("store-has"),XK=Symbol("store-self"),GK={onStoreNodeUpdate:null};EC={get(J,Y,Z){if(Y===jj)return J;if(Y===nJ)return Z;if(Y===nX)return QK(J),Z;let f=cQ(J,QG),G=f[Y],X=G?G():J[Y];if(Y===QG||Y===iY||Y==="__proto__")return X;if(!G){let Q=Object.getOwnPropertyDescriptor(J,Y);if(aX()&&(typeof X!=="function"||J.hasOwnProperty(Y))&&!(Q&&Q.get))X=BX(f,Y,X)()}return mQ(X)?zK(X):X},has(J,Y){if(Y===jj||Y===nJ||Y===nX||Y===QG||Y===iY||Y==="__proto__")return!0;return aX()&&BX(cQ(J,iY),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:TC,getOwnPropertyDescriptor:NC};oP=Symbol("store-root")});function nQ(J){let Y=XY();return{provider:(Z)=>{let f=J.init(Z);return I(X0,{get when(){return f.ready===void 0||f.ready===!0},get children(){return I(Y.Provider,{value:f,get children(){return Z.children}})}})},use(){let Z=AJ(Y);if(!Z)throw Error(`${J.name} context must be used within a context provider`);return Z}}}var Wj=y(()=>{w();w();G1()});import{RGBA as zf}from"@opentui/core";function wC(){return Object.keys(s1.themes)}function jX(J){return Boolean(s1.themes[J])}function Kj(J,Y){if(!J)return!1;if(!Y||typeof Y!=="object"||!Y.theme)return!1;return Qf("themes",{...s1.themes,[J]:Y}),!0}function Vj(J,Y="dark"){let Z=J.defs??{};function f(B,H=[]){if(typeof B==="string"){if(B==="transparent"||B==="none")return zf.fromInts(0,0,0,0);if(B.startsWith("#"))return zf.fromHex(B);if(H.includes(B))return zf.fromInts(0,0,0);let K=Z[B]??J.theme[B];if(K===void 0)return zf.fromInts(0,0,0);return f(K,[...H,B])}return f(B[Y],H)}let G={};for(let[B,H]of Object.entries(J.theme))G[B]=f(H);let X=G.text??zf.fromHex("#ffffff"),Q=G.background??zf.fromHex("#000000");return{...{primary:G.primary??X,secondary:G.secondary??X,accent:G.accent??G.primary??X,error:G.error??X,warning:G.warning??X,success:G.success??X,info:G.info??X,text:X,textMuted:G.textMuted??X,background:Q,backgroundPanel:G.backgroundPanel??Q,backgroundElement:G.backgroundElement??Q,backgroundMenu:G.backgroundMenu??G.backgroundElement??Q,backgroundDialog:G.backgroundDialog??G.backgroundPanel??Q,border:G.border??X,borderActive:G.borderActive??G.border??X,borderSubtle:G.borderSubtle??G.border??X,diffAdded:G.diffAdded??G.success??X,diffRemoved:G.diffRemoved??G.error??X,diffContext:G.diffContext??G.textMuted??X,diffHunkHeader:G.diffHunkHeader??G.textMuted??X,diffAddedBg:G.diffAddedBg??Q,diffRemovedBg:G.diffRemovedBg??Q,selectedListItemText:G.selectedListItemText??Q},...G}}var xC,qf,s1,Qf,u0,BK;var S1=y(()=>{w();G1();HX();Wj();Pz();vz();mz();cz();dz();nz();iz();xC={claude:wf,conductor:hf,nord:vf,opencode:mf,dracula:Pf,tokyonight:df,"osaka-jade":cf},qf=["primary","success","info"],[s1,Qf]=MZ({themes:{...xC},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:u0,provider:BK}=nQ({name:"Theme",init:(J)=>{if(J.mode)Qf("mode",J.mode);if(J.theme&&jX(J.theme))Qf("active",J.theme);let Y=o1(),Z=W0(()=>{let G=s1.themes[s1.active];if(G)return Vj(G,s1.mode);let X=s1.themes.claude??s1.themes.opencode??Object.values(s1.themes)[0];if(!X)return Vj({theme:{background:"#000000",text:"#ffffff"}},s1.mode);return Vj(X,s1.mode)}),f=W0(()=>{let G=Z(),X=G[s1.focusAccent]??G.primary,Q={...G,focusAccent:X};if(!s1.transparentBackground)return Q;let q=zf.fromInts(0,0,0,0);return{...Q,background:q,backgroundPanel:q}});return a0(()=>{Y?.setBackgroundColor(f().background)}),{theme:new Proxy({},{get(G,X){let Q=f();return Q[X]??Q.text}}),get selected(){return s1.active},get transparentBackground(){return s1.transparentBackground},get focusAccent(){return s1.focusAccent},mode(){return s1.mode},set(G){if(!jX(G))return!1;return Qf("active",G),!0},setMode(G){Qf("mode",G)},setTransparentBackground(G){Qf("transparentBackground",G)},setFocusAccent(G){Qf("focusAccent",G)},all(){return wC()},has(G){return jX(G)}}}}))});function hC(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 G=`${f.join("+")}+`;return Y.map((X)=>G+X)}function Uj(J,Y){if(Y.defaultPrevented)return!1;let Z=hC(Y);for(let f=J.length-1;f>=0;f--){let G=J[f];if(!G)continue;let X=G.config();if(X.enabled===!1)continue;let Q=X.bindings.find((q)=>Z.includes(q.key));if(Q)return Q.cmd(Y,Q.slot),Y.preventDefault(),!0}return!1}function vC(){if(Lj)return;let J=o1();if(!J)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");Lj=J.keyInput,HK=(Y)=>{Uj(iQ,Y)},Lj.on("keypress",HK)}function V1(J){vC();let Y=PC++,Z={config:J,id:Y};a0(()=>{J()}),iQ.push(Z),d1(()=>{let f=iQ.findIndex((G)=>G.id===Y);if(f>=0)iQ.splice(f,1)})}var PC=1,iQ,Lj=null,HK=null;var UJ=y(()=>{w();G1();iQ=[]});import{RGBA as jK}from"@opentui/core";function dC(J){let Y=DY(),Z=u0(),{theme:f}=Z,G=o1(),X=!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",()=>{X=!!G?.getSelection()}),z(H,"onMouseUp",()=>{if(X){X=!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)=>{X=!1,j.stopPropagation()}),z(K,"flexShrink",1),z(K,"flexGrow",0),z(K,"paddingTop",1),F(K,()=>J.children),x((j)=>{var U=Y().width,L=Y().height,M=Z.transparentBackground?cC:mC,D=Q(),A=Y().width-2,R=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)),M!==j.a&&(j.a=z(H,"backgroundColor",M,j.a)),D!==j.o&&(j.o=z(K,"width",D,j.o)),A!==j.i&&(j.i=z(K,"maxWidth",A,j.i)),R!==j.n&&(j.n=z(K,"maxHeight",R,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 nC(){let[J,Y]=MZ({stack:[],size:"medium"}),Z=o1(),f=null;function G(){setTimeout(()=>{if(!f)return;if(f.isDestroyed)return;function X(q){for(let B of q.getChildren()){if(B===f)return!0;if(X(B))return!0}return!1}let Q=Z?.root;if(!Q)return;if(!X(Q))return;f.focus()},1)}return V1(()=>({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 X of J.stack)X.onClose?.();$X(()=>{Y("size","medium"),Y("stack",[])}),G()},replace(X,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:X,onClose:Q}])},push(X,Q){if(J.stack.length===0)f=Z?.currentFocusedRenderable??null,f?.blur();Y("stack",[...J.stack,{element:X,onClose:Q}])},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(X){Y("size",X)}}}function VK(J){let Y=nC();return I(WK.Provider,{value:Y,get children(){return[o0(()=>J.children),(()=>{var Z=V("box");return z(Z,"position","absolute"),z(Z,"zIndex",3000),F(Z,I(X0,{get when(){return Y.stack.length},get children(){return I(dC,{onClose:()=>Y.clear(),get size(){return Y.size},get children(){return Y.stack.at(-1).element()}})}})),Z})()]}})}function N1(){let J=AJ(WK);if(!J)throw Error("useDialog must be used within a DialogProvider");return J}var mC,cC,WK;var yJ=y(()=>{w();w();w();w();w();w();w();w();G1();HX();S1();UJ();mC=jK.fromInts(0,0,0,128),cC=jK.fromInts(0,0,0,64);WK=XY()});import{spawnSync as Dj}from"child_process";import*as KK from"fs";function Mj(J){let Y=J.trim();if(!Y)return"repo path is required";let Z;try{Z=KK.statSync(Y)}catch{return`path does not exist: ${Y}`}if(!Z.isDirectory())return`not a directory: ${Y}`;try{if(Dj("git",["rev-parse","--git-dir"],{cwd:Y,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return`not a git repository: ${Y}`}catch{return`not a git repository: ${Y}`}return null}function WX(J){if(!J)return null;try{let Y=Dj("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 UK(J){if(!J)return[];try{let Y=Dj("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(`
213
- `).map((Z)=>Z.trim()).filter(Boolean).sort((Z,f)=>{let G=(q)=>q==="main"?0:q==="master"?1:q==="develop"?2:3,X=G(Z),Q=G(f);if(X!==Q)return X-Q;return Z.localeCompare(f)})}catch{return[]}}var JY="main";var lQ=()=>{};import*as LK from"fs";import*as $Q from"os";function t1(J){if(J==="~")return $Q.homedir();if(J.startsWith("~/"))return $Q.homedir()+J.slice(1);return J}function Fj(J){if(!J)return{base:"",filter:""};let Z=t1(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 Oj(J){if(!J)return[];try{let Y=LK.readdirSync(J,{withFileTypes:!0}),Z=[];for(let f of Y)if(f.isDirectory())Z.push(f.name);return Z.sort((f,G)=>f.localeCompare(G))}catch{return[]}}function Aj(J,Y){let Z=Y.toLowerCase(),G=Z.startsWith(".")?J:J.filter((X)=>!X.startsWith("."));if(!Z)return G;return G.filter((X)=>X.toLowerCase().startsWith(Z))}function qG(J,Y,Z){let f=`${Y+Z}/`;if(J.startsWith("~")){let G=$Q.homedir();if(f===`${G}/`)return"~/";if(f.startsWith(`${G}/`))return`~${f.slice(G.length)}`}return f}var aQ=()=>{};import{spawn as iC}from"child_process";import*as Bf from"fs";import*as VX from"path";function DK(J){let Y=J.trim().replace(/\/+$/,"");if(!Y)return"";let Z=Y.lastIndexOf("/"),f=Y.lastIndexOf(":"),G=Math.max(Z,f);return(G>=0?Y.slice(G+1):Y).replace(/\.git$/i,"")}function MK(J){let Y=J.trim();if(!Y)return"git URL is required";let Z=Y.includes("://"),f=Y.includes("@")&&Y.includes(":"),G=Y.includes("/");if(!Z&&!f&&!G)return`does not look like a git URL: ${Y}`;return null}function FK(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 G=t1(f),X;try{X=Bf.statSync(G)}catch{return`parent directory does not exist: ${G}`}if(!X.isDirectory())return`not a directory: ${G}`;let Q=VX.join(G,Z);if(Bf.existsSync(Q))return`target already exists: ${Q}`;return null}function OK(J,Y){return VX.join(t1(J.trim()),Y.trim())}function AK(J,Y){let Z=Y.trim();if(!Z)return Y;let f=t1(J.trim());if(!f)return Y;try{if(!Bf.statSync(f).isDirectory())return Y}catch{return Y}if(!Bf.existsSync(VX.join(f,Z)))return Z;for(let G=2;G<1000;G++){let X=`${Z}-${G}`;if(!Bf.existsSync(VX.join(f,X)))return X}return Z}function RK(J,Y,Z){return new Promise((f)=>{let G="";try{let X=iC("git",["clone","--progress",J,Y],{stdio:["ignore","ignore","pipe"]});X.stderr?.setEncoding("utf-8"),X.stderr?.on("data",(Q)=>{if(G+=Q,Z){let q=Q.split(/[\r\n]+/).filter((H)=>H.trim().length>0),B=q[q.length-1];if(B)Z(B)}}),X.on("error",(Q)=>{f({ok:!1,error:Q.message})}),X.on("close",(Q)=>{if(Q===0){f({ok:!0,path:Y});return}let q=G.split(/[\r\n]+/).filter((B)=>B.trim().length>0).pop()??`git clone exited with ${Q}`;f({ok:!1,error:q})})}catch(X){f({ok:!1,error:X instanceof Error?X.message:String(X)})}})}var gK=y(()=>{aQ()});function Rj(J){if(J==="existing")return"clone";if(J==="clone")return"adopt";return"existing"}function CK(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 LJ(J){return J.replace(/[\r\n]+/g,"")}function SK(J,Y="existing"){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 yK(J){if(J==="clone")return"cloneUrl";if(J==="adopt")return"adoptFilter";return"repo"}function kK(J,Y){let Z=Y.trim();if(!Z)return J;return J.filter((f)=>SX(Z,f.path))}function IK(J,Y){let Z=new Set,f=[];for(let G of[J,...Y]){let X=G.trim();if(!X||Z.has(X))continue;Z.add(X),f.push(X)}return f}function bK(J,Y){let Z=Y.trim().toLowerCase();if(!Z)return J;return J.filter((f)=>f.toLowerCase().includes(Z))}function NK(J,Y){let Z=Y.trim().toLowerCase();if(!Z)return J;return J.filter((f)=>f.toLowerCase().includes(Z))}function KX(J,Y,Z=lC){let f=J.length;if(f<=Z)return{items:J,start:0,total:f};let G=Math.floor(Z/2),X=Math.max(0,Y-G);if(X+Z>f)X=f-Z;return{items:J.slice(X,X+Z),start:X,total:f}}function MY(J,Y){if(Y<=0)return 0;return Math.max(0,Math.min(Y-1,J))}function TK(J,Y,Z){let f=Y[Z];if(f)return f;return J.trim()||JY}var lC=8;var gj=y(()=>{Wq();lQ()});import{TextAttributes as FY}from"@opentui/core";function EK(J){let Y=N1(),{theme:Z}=u0(),[f,G]=r("existing"),X=()=>{let O=J.availableVendors;return O&&O.length>0?O:x1},Q=(()=>{let O=X(),P=J.defaultVendor??"claude";return O.includes(P)?P:O[0]??"claude"})(),[q,B]=r(Q),[H,K]=r("repo"),[j,U]=r(J.defaultRepo),[L,M]=r(WX(t1(J.defaultRepo.trim()))??JY),[D,A]=r(!1),[R,l]=r(""),[g,S]=r(J.defaultCloneParent?.trim()?J.defaultCloneParent:"~/"),[C,k]=r(""),[$,G0]=r(!1),[s,J0]=r(JY),[E,Q0]=r(!1),[e,j0]=r(""),o=W0(()=>IK(J.defaultRepo,J.savedRepos)),p=W0(()=>CK(j(),o())),_=W0(()=>Fj(j())),f0=W0(()=>Oj(_().base)),a=W0(()=>Aj(f0(),_().filter)),L0=W0(()=>bK(o(),j())),m=W0(()=>p()==="browse"?a():L0()),[b,t]=r(0),q0=W0(()=>KX(m(),b())),M0=W0(()=>UK(t1(j().trim()))),S0=W0(()=>NK(M0(),L())),[h0,u]=r(0),D0=W0(()=>KX(S0(),h0())),z0=W0(()=>Fj(g())),g0=W0(()=>Oj(z0().base)),C0=W0(()=>Aj(g0(),z0().filter)),[y0,n0]=r(0),P0=W0(()=>KX(C0(),y0())),[O0,d]=r(""),[Y0,A0]=r(0),[N,i0]=r(new Set),[k0]=lX(()=>f()==="adopt"?t1(j().trim()):null,async(O)=>J.discoverAdoptable?await J.discoverAdoptable(O):[]),N0=W0(()=>kK(k0()??[],O0())),b0=W0(()=>KX(N0().map((O)=>O.path),Y0())),_0=W0(()=>{let O=b0();return N0().slice(O.start,O.start+O.items.length)});a0(()=>{N0(),A0((O)=>MY(O,N0().length))});function n(O){i0((P)=>{let F0=new Set(P);if(F0.has(O))F0.delete(O);else F0.add(O);return F0})}function Z0(){let O=N0()[Y0()];if(O)n(O.path)}a0(()=>{S0(),u(0)}),a0(()=>{let O=t1(j().trim());if(!O)return;if(D())return;let P=WX(O);if(P)M(P)}),a0(()=>{m(),t(0)}),a0(()=>{C0(),n0(0)}),a0(()=>{let O=R(),P=g();if($())return;let F0=DK(O);k(AK(P,F0))});let[H0,V0]=r(null);a0(()=>{j(),R(),g(),C(),O0(),V0(null)});function K0(){let O=t1(j().trim());if(!O)return;let P=Mj(O);if(P){V0(P),K("repo");return}let F0=L().trim()||JY;J.onSubmit({repo:O,baseRef:F0,vendor:q()}),Y.clear()}async function s0(){if(E())return;let O=MK(R());if(O){V0(O),K("cloneUrl");return}let P=FK(g(),C());if(P){V0(P),K(C().trim()?"cloneParent":"cloneFolder");return}let F0=OK(g(),C());Q0(!0),j0(`Cloning into ${F0}\u2026`);let w0=await RK(R().trim(),F0,(k1)=>{j0(k1)});if(Q0(!1),!w0.ok){V0(`git clone failed: ${w0.error}`),K("cloneUrl");return}let l0=s().trim()||JY,f1=t1(g().trim());J.onSubmit({repo:w0.path,baseRef:l0,vendor:q(),cloned:{parentDir:f1}}),Y.clear()}function T0(){let O=N0();if(O.length===0){V0("no adoptable worktrees to import");return}let P=N(),F0=P.size>0?O.filter((w0)=>P.has(w0.path)):O.slice(Y0(),Y0()+1);if(F0.length===0)return;J.onSubmit({mode:"adopt",repo:t1(j().trim()),vendor:q(),adopt:F0.map((w0)=>({worktreePath:w0.path,branch:w0.branch}))}),Y.clear()}function L1(){if(f()==="clone"){s0();return}if(f()==="adopt"){T0();return}K0()}function I0(O){if(E())return;if(O===f())return;G(O),K(yK(O)),V0(null)}function x0(){if(!j().trim()&&p()==="saved"){let P=m()[0];if(P){U(P),K("baseRef");return}}if(p()==="browse"){let F0=a()[b()],w0=_();if(F0){if(w0.filter){U(qG(j(),w0.base,F0));return}let l0=t1(j().trim());if(!l0||Mj(l0)!==null){U(qG(j(),w0.base,F0));return}}K("baseRef");return}let O=m()[b()];if(O){U(O),K("baseRef");return}K("baseRef")}function z1(O){let F0=m()[O];if(!F0)return;if(p()==="browse"){let w0=_();U(qG(j(),w0.base,F0)),t(O);return}U(F0),t(O),K("baseRef")}function B1(){let P=C0()[y0()],F0=z0();if(P){S(qG(g(),F0.base,P));return}K("cloneFolder")}function Q1(O){let F0=C0()[O];if(!F0)return;let w0=z0();S(qG(g(),w0.base,F0)),n0(O)}let J1=()=>{let O=N0();if(O.length===0)return;let P=O.every((F0)=>N().has(F0.path));i0(P?new Set:new Set(O.map((F0)=>F0.path)))};return V1(()=>({bindings:[{key:"tab",cmd:()=>K((O)=>SK(O,f()))},{key:"ctrl+]",cmd:()=>I0(Rj(f()))},{key:"ctrl+[",cmd:()=>I0(Rj(f()))},{key:"ctrl+e",cmd:()=>B((O)=>CZ(X(),O))},{key:"up",cmd:()=>{if(E())return;if(f()==="existing"&&H()==="repo"){let O=m();if(O.length===0)return;t(MY(b()-1,O.length));return}if(f()==="existing"&&H()==="baseRef"){let O=S0();if(O.length===0)return;u(MY(h0()-1,O.length));return}if(f()==="clone"&&H()==="cloneParent"){let O=C0();if(O.length===0)return;n0(MY(y0()-1,O.length));return}if(f()==="adopt"){let O=N0();if(O.length===0)return;A0(MY(Y0()-1,O.length))}}},{key:"down",cmd:()=>{if(E())return;if(f()==="existing"&&H()==="repo"){let O=m();if(O.length===0)return;t(MY(b()+1,O.length));return}if(f()==="existing"&&H()==="baseRef"){let O=S0();if(O.length===0)return;u(MY(h0()+1,O.length));return}if(f()==="clone"&&H()==="cloneParent"){let O=C0();if(O.length===0)return;n0(MY(y0()+1,O.length));return}if(f()==="adopt"){let O=N0();if(O.length===0)return;A0(MY(Y0()+1,O.length))}}},...f()==="adopt"?[{key:"ctrl+a",cmd:J1}]:[]]})),V1(()=>({enabled:H()==="confirm"&&!E(),bindings:[{key:"return",cmd:()=>L1()}]})),(()=>{var O=V("box"),P=V("box"),F0=V("text"),w0=V("text"),l0=V("box"),f1=V("box"),k1=V("text"),M1=V("text"),r0=V("text"),U0=V("box"),R1=V("text"),p1=V("text"),DJ=V("box"),AY=V("text");return W(O,P),W(O,l0),W(O,DJ),z(O,"paddingLeft",2),z(O,"paddingRight",2),z(O,"gap",0),W(P,F0),W(P,w0),z(P,"flexDirection","row"),z(P,"justifyContent","space-between"),W(F0,T("New task")),z(w0,"onMouseUp",()=>L1()),F(w0,(()=>{var h=o0(()=>!!E());return()=>h()?"[ Cloning\u2026 ]":H()==="confirm"?"\u25B8 [ Create ]":"[ Create ]"})()),W(l0,f1),W(l0,U0),z(l0,"gap",1),z(l0,"paddingTop",1),z(l0,"paddingBottom",1),W(f1,k1),W(f1,M1),W(f1,r0),z(f1,"flexDirection","row"),z(f1,"gap",2),z(k1,"onMouseUp",()=>I0("existing")),F(k1,()=>f()==="existing"?"\u25B8 For Existing":" For Existing"),z(M1,"onMouseUp",()=>I0("clone")),F(M1,()=>f()==="clone"?"\u25B8 For New Repo":" For New Repo"),z(r0,"onMouseUp",()=>I0("adopt")),F(r0,()=>f()==="adopt"?"\u25B8 Adopt Worktree":" Adopt Worktree"),W(U0,R1),W(U0,p1),z(U0,"flexDirection","row"),z(U0,"gap",2),W(R1,T("engine")),F(U0,I(e0,{get each(){return X()},children:(h)=>(()=>{var c=V("text");return z(c,"onMouseUp",()=>B(h)),F(c,h),x((i)=>{var v=q()===h?Z.primary:Z.textMuted,R0=q()===h?FY.BOLD:void 0;return v!==i.e&&(i.e=z(c,"fg",v,i.e)),R0!==i.t&&(i.t=z(c,"attributes",R0,i.t)),i},{e:void 0,t:void 0}),c})()}),p1),W(p1,T("ctrl+e")),F(l0,I(X0,{get when(){return f()==="existing"},get children(){return[(()=>{var h=V("box"),c=V("text"),i=V("input");return W(h,c),W(h,i),z(h,"gap",0),W(c,T("repo")),z(i,"onInput",(v)=>U(LJ(v))),z(i,"onSubmit",()=>{if(!j().trim())return;x0()}),x((v)=>{var R0=H()==="repo"?Z.accent:Z.textMuted,v0=j(),$0=J.defaultRepo,F1=H()==="repo";return R0!==v.e&&(v.e=z(c,"fg",R0,v.e)),v0!==v.t&&(v.t=z(i,"value",v0,v.t)),$0!==v.a&&(v.a=z(i,"placeholder",$0,v.a)),F1!==v.o&&(v.o=z(i,"focused",F1,v.o)),v},{e:void 0,t:void 0,a:void 0,o:void 0}),h})(),I(X0,{get when(){return o0(()=>H()==="repo")()&&m().length>0},get children(){var h=V("box");return z(h,"gap",0),z(h,"paddingLeft",2),F(h,I(X0,{get when(){return q0().start>0},get children(){var c=V("text"),i=T("\u2191 "),v=T(" more");return W(c,i),W(c,v),z(c,"wrapMode","none"),F(c,()=>q0().start,v),x((R0)=>z(c,"fg",Z.textMuted,R0)),c}}),null),F(h,I(e0,{get each(){return q0().items},children:(c,i)=>{let v=()=>q0().start+i(),R0=()=>v()===b(),v0=()=>p()==="saved"&&c===J.defaultRepo,$0=()=>p()==="saved"&&j().trim()===c,F1=()=>p()==="browse"?"/":"",u1=()=>v0()?" (current dir)":"";return(()=>{var U1=V("text");return z(U1,"wrapMode","none"),z(U1,"onMouseUp",()=>z1(v())),F(U1,()=>R0()?"\u25B8 ":" ",null),F(U1,c,null),F(U1,F1,null),F(U1,u1,null),x((MJ)=>{var $Y=R0()?Z.primary:$0()?Z.accent:Z.textMuted,UG=R0()?FY.BOLD:void 0;return $Y!==MJ.e&&(MJ.e=z(U1,"fg",$Y,MJ.e)),UG!==MJ.t&&(MJ.t=z(U1,"attributes",UG,MJ.t)),MJ},{e:void 0,t:void 0}),U1})()}}),null),F(h,I(X0,{get when(){return q0().start+q0().items.length<q0().total},get children(){var c=V("text"),i=T("\u2193 "),v=T(" more");return W(c,i),W(c,v),z(c,"wrapMode","none"),F(c,()=>q0().total-q0().start-q0().items.length,v),x((R0)=>z(c,"fg",Z.textMuted,R0)),c}}),null),h}}),(()=>{var h=V("box"),c=V("text"),i=V("input");return W(h,c),W(h,i),z(h,"gap",0),W(c,T("from branch")),z(i,"placeholder",JY),z(i,"onInput",(v)=>{A(!0),M(LJ(v))}),z(i,"onSubmit",()=>{M(TK(L(),S0(),h0())),A(!0),K("confirm")}),x((v)=>{var R0=H()==="baseRef"?Z.accent:Z.textMuted,v0=L(),$0=H()==="baseRef";return R0!==v.e&&(v.e=z(c,"fg",R0,v.e)),v0!==v.t&&(v.t=z(i,"value",v0,v.t)),$0!==v.a&&(v.a=z(i,"focused",$0,v.a)),v},{e:void 0,t:void 0,a:void 0}),h})(),I(X0,{get when(){return o0(()=>H()==="baseRef"&&S0().length===0)()&&H0()==null},get children(){var h=V("box"),c=V("text");return W(h,c),z(h,"gap",0),z(h,"paddingLeft",2),z(h,"paddingBottom",1),z(c,"wrapMode","none"),F(c,()=>M0().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)=>z(c,"fg",Z.textMuted,i)),h}}),I(X0,{get when(){return o0(()=>H()==="baseRef")()&&S0().length>0},get children(){var h=V("box");return z(h,"gap",0),z(h,"paddingLeft",2),z(h,"paddingBottom",1),F(h,I(X0,{get when(){return D0().start>0},get children(){var c=V("text"),i=T("\u2191 "),v=T(" more");return W(c,i),W(c,v),z(c,"wrapMode","none"),F(c,()=>D0().start,v),x((R0)=>z(c,"fg",Z.textMuted,R0)),c}}),null),F(h,I(e0,{get each(){return D0().items},children:(c,i)=>{let v=()=>D0().start+i(),R0=()=>v()===h0(),v0=()=>L().trim()===c;return(()=>{var $0=V("text");return z($0,"wrapMode","none"),z($0,"onMouseUp",()=>{M(c),A(!0),u(v()),K("confirm")}),F($0,()=>R0()?"\u25B8 ":" ",null),F($0,c,null),x((F1)=>{var u1=R0()?Z.primary:v0()?Z.accent:Z.textMuted,U1=R0()?FY.BOLD:void 0;return u1!==F1.e&&(F1.e=z($0,"fg",u1,F1.e)),U1!==F1.t&&(F1.t=z($0,"attributes",U1,F1.t)),F1},{e:void 0,t:void 0}),$0})()}}),null),F(h,I(X0,{get when(){return D0().start+D0().items.length<D0().total},get children(){var c=V("text"),i=T("\u2193 "),v=T(" more");return W(c,i),W(c,v),z(c,"wrapMode","none"),F(c,()=>D0().total-D0().start-D0().items.length,v),x((R0)=>z(c,"fg",Z.textMuted,R0)),c}}),null),h}})]}}),null),F(l0,I(X0,{get when(){return f()==="clone"},get children(){return[(()=>{var h=V("box"),c=V("text"),i=V("input");return W(h,c),W(h,i),z(h,"gap",0),W(c,T("git url")),z(i,"placeholder","https://github.com/user/repo.git"),z(i,"onInput",(v)=>l(LJ(v))),z(i,"onSubmit",()=>{if(!R().trim())return;K("cloneParent")}),x((v)=>{var R0=H()==="cloneUrl"?Z.accent:Z.textMuted,v0=R(),$0=H()==="cloneUrl";return R0!==v.e&&(v.e=z(c,"fg",R0,v.e)),v0!==v.t&&(v.t=z(i,"value",v0,v.t)),$0!==v.a&&(v.a=z(i,"focused",$0,v.a)),v},{e:void 0,t:void 0,a:void 0}),h})(),(()=>{var h=V("box"),c=V("text"),i=V("input");return W(h,c),W(h,i),z(h,"gap",0),W(c,T("parent dir")),z(i,"placeholder","~/"),z(i,"onInput",(v)=>S(LJ(v))),z(i,"onSubmit",()=>B1()),x((v)=>{var R0=H()==="cloneParent"?Z.accent:Z.textMuted,v0=g(),$0=H()==="cloneParent";return R0!==v.e&&(v.e=z(c,"fg",R0,v.e)),v0!==v.t&&(v.t=z(i,"value",v0,v.t)),$0!==v.a&&(v.a=z(i,"focused",$0,v.a)),v},{e:void 0,t:void 0,a:void 0}),h})(),I(X0,{get when(){return H()==="cloneParent"},get children(){var h=V("box"),c=V("text");return W(h,c),z(h,"paddingLeft",2),W(c,T("(remembered \u2014 next clone defaults to this dir)")),z(c,"wrapMode","none"),x((i)=>z(c,"fg",Z.textMuted,i)),h}}),I(X0,{get when(){return o0(()=>H()==="cloneParent")()&&C0().length>0},get children(){var h=V("box");return z(h,"gap",0),z(h,"paddingLeft",2),F(h,I(X0,{get when(){return P0().start>0},get children(){var c=V("text"),i=T("\u2191 "),v=T(" more");return W(c,i),W(c,v),z(c,"wrapMode","none"),F(c,()=>P0().start,v),x((R0)=>z(c,"fg",Z.textMuted,R0)),c}}),null),F(h,I(e0,{get each(){return P0().items},children:(c,i)=>{let v=()=>P0().start+i(),R0=()=>v()===y0();return(()=>{var v0=V("text"),$0=T("/");return W(v0,$0),z(v0,"wrapMode","none"),z(v0,"onMouseUp",()=>Q1(v())),F(v0,()=>R0()?"\u25B8 ":" ",$0),F(v0,c,$0),x((F1)=>{var u1=R0()?Z.primary:Z.textMuted,U1=R0()?FY.BOLD:void 0;return u1!==F1.e&&(F1.e=z(v0,"fg",u1,F1.e)),U1!==F1.t&&(F1.t=z(v0,"attributes",U1,F1.t)),F1},{e:void 0,t:void 0}),v0})()}}),null),F(h,I(X0,{get when(){return P0().start+P0().items.length<P0().total},get children(){var c=V("text"),i=T("\u2193 "),v=T(" more");return W(c,i),W(c,v),z(c,"wrapMode","none"),F(c,()=>P0().total-P0().start-P0().items.length,v),x((R0)=>z(c,"fg",Z.textMuted,R0)),c}}),null),h}}),(()=>{var h=V("box"),c=V("text"),i=V("input");return W(h,c),W(h,i),z(h,"gap",0),W(c,T("folder name")),z(i,"placeholder","auto from url"),z(i,"onInput",(v)=>{G0(!0),k(LJ(v))}),z(i,"onSubmit",()=>K("cloneBaseRef")),x((v)=>{var R0=H()==="cloneFolder"?Z.accent:Z.textMuted,v0=C(),$0=H()==="cloneFolder";return R0!==v.e&&(v.e=z(c,"fg",R0,v.e)),v0!==v.t&&(v.t=z(i,"value",v0,v.t)),$0!==v.a&&(v.a=z(i,"focused",$0,v.a)),v},{e:void 0,t:void 0,a:void 0}),h})(),(()=>{var h=V("box"),c=V("text"),i=V("input");return W(h,c),W(h,i),z(h,"gap",0),W(c,T("base branch")),z(i,"placeholder",JY),z(i,"onInput",(v)=>J0(LJ(v))),z(i,"onSubmit",()=>K("confirm")),x((v)=>{var R0=H()==="cloneBaseRef"?Z.accent:Z.textMuted,v0=s(),$0=H()==="cloneBaseRef";return R0!==v.e&&(v.e=z(c,"fg",R0,v.e)),v0!==v.t&&(v.t=z(i,"value",v0,v.t)),$0!==v.a&&(v.a=z(i,"focused",$0,v.a)),v},{e:void 0,t:void 0,a:void 0}),h})(),I(X0,{get when(){return E()},get children(){var h=V("box"),c=V("text");return W(h,c),z(h,"gap",0),z(h,"paddingLeft",2),z(c,"wrapMode","none"),F(c,()=>e()||"Cloning\u2026"),x((i)=>z(c,"fg",Z.textMuted,i)),h}})]}}),null),F(l0,I(X0,{get when(){return f()==="adopt"},get children(){return[(()=>{var h=V("box"),c=V("text"),i=V("input");return W(h,c),W(h,i),z(h,"gap",0),W(c,T("filter (path glob)")),z(i,"placeholder","* \u2014 type e.g. feature-* to narrow"),z(i,"onInput",(v)=>d(LJ(v))),z(i,"onSubmit",()=>Z0()),x((v)=>{var R0=H()==="adoptFilter"?Z.accent:Z.textMuted,v0=O0(),$0=H()==="adoptFilter";return R0!==v.e&&(v.e=z(c,"fg",R0,v.e)),v0!==v.t&&(v.t=z(i,"value",v0,v.t)),$0!==v.a&&(v.a=z(i,"focused",$0,v.a)),v},{e:void 0,t:void 0,a:void 0}),h})(),(()=>{var h=V("box"),c=V("text"),i=T("repo: ");return W(h,c),z(h,"paddingLeft",2),W(c,i),z(c,"wrapMode","none"),F(c,()=>t1(j().trim())||"(none)",null),x((v)=>z(c,"fg",Z.textMuted,v)),h})(),I(X0,{get when(){return k0.loading},get children(){var h=V("box"),c=V("text");return W(h,c),z(h,"paddingLeft",2),W(c,T("scanning worktrees\u2026")),z(c,"wrapMode","none"),x((i)=>z(c,"fg",Z.textMuted,i)),h}}),I(X0,{get when(){return o0(()=>!k0.loading)()&&N0().length===0},get children(){var h=V("box"),c=V("text");return W(h,c),z(h,"paddingLeft",2),z(c,"wrapMode","none"),F(c,()=>(k0()??[]).length===0?"no unlinked worktrees \u2014 every git worktree here is already a task":"no worktrees match the filter"),x((i)=>z(c,"fg",Z.textMuted,i)),h}}),I(X0,{get when(){return N0().length>0},get children(){var h=V("box"),c=V("text");return W(h,c),z(h,"gap",0),z(h,"paddingLeft",2),F(h,I(X0,{get when(){return b0().start>0},get children(){var i=V("text"),v=T("\u2191 "),R0=T(" more");return W(i,v),W(i,R0),z(i,"wrapMode","none"),F(i,()=>b0().start,R0),x((v0)=>z(i,"fg",Z.textMuted,v0)),i}}),c),F(h,I(e0,{get each(){return _0()},children:(i,v)=>{let R0=()=>b0().start+v(),v0=()=>R0()===Y0(),$0=()=>N().has(i.path),F1=()=>[i.dirty?"dirty":"",i.kobeManaged?"":"external"].filter(Boolean).join(",");return(()=>{var u1=V("text");return z(u1,"wrapMode","none"),z(u1,"onMouseUp",()=>{A0(R0()),n(i.path)}),F(u1,()=>v0()?"\u25B8 ":" ",null),F(u1,()=>$0()?"[x] ":"[ ] ",null),F(u1,()=>i.branch,null),F(u1,(()=>{var U1=o0(()=>!!F1());return()=>U1()?` (${F1()})`:""})(),null),x((U1)=>{var MJ=v0()?Z.primary:$0()?Z.accent:Z.textMuted,$Y=v0()?FY.BOLD:void 0;return MJ!==U1.e&&(U1.e=z(u1,"fg",MJ,U1.e)),$Y!==U1.t&&(U1.t=z(u1,"attributes",$Y,U1.t)),U1},{e:void 0,t:void 0}),u1})()}}),c),F(h,I(X0,{get when(){return b0().start+b0().items.length<b0().total},get children(){var i=V("text"),v=T("\u2193 "),R0=T(" more");return W(i,v),W(i,R0),z(i,"wrapMode","none"),F(i,()=>b0().total-b0().start-b0().items.length,R0),x((v0)=>z(i,"fg",Z.textMuted,v0)),i}}),c),z(c,"wrapMode","none"),F(c,(()=>{var i=o0(()=>N().size>0);return()=>i()?`${N().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)=>z(c,"fg",Z.textMuted,i)),h}})]}}),null),F(l0,I(X0,{get when(){return H0()},get children(){var h=V("text"),c=T("\u203B ");return W(h,c),z(h,"wrapMode","word"),F(h,H0,null),x((i)=>z(h,"fg",Z.error,i)),h}}),null),W(DJ,AY),z(DJ,"paddingTop",1),z(DJ,"paddingBottom",1),W(AY,T("\u2191\u2193 pick \xB7 enter select \xB7 tab next field \xB7 ctrl+[/] switch \xB7 esc cancel")),x((h)=>{var c=FY.BOLD,i=Z.text,v=H()==="confirm"?Z.primary:Z.text,R0=H()==="confirm"?FY.BOLD:void 0,v0=f()==="existing"?Z.primary:Z.textMuted,$0=f()==="existing"?FY.BOLD:void 0,F1=f()==="clone"?Z.primary:Z.textMuted,u1=f()==="clone"?FY.BOLD:void 0,U1=f()==="adopt"?Z.primary:Z.textMuted,MJ=f()==="adopt"?FY.BOLD:void 0,$Y=Z.textMuted,UG=Z.textMuted,H9=Z.textMuted;return c!==h.e&&(h.e=z(F0,"attributes",c,h.e)),i!==h.t&&(h.t=z(F0,"fg",i,h.t)),v!==h.a&&(h.a=z(w0,"fg",v,h.a)),R0!==h.o&&(h.o=z(w0,"attributes",R0,h.o)),v0!==h.i&&(h.i=z(k1,"fg",v0,h.i)),$0!==h.n&&(h.n=z(k1,"attributes",$0,h.n)),F1!==h.s&&(h.s=z(M1,"fg",F1,h.s)),u1!==h.h&&(h.h=z(M1,"attributes",u1,h.h)),U1!==h.r&&(h.r=z(r0,"fg",U1,h.r)),MJ!==h.d&&(h.d=z(r0,"attributes",MJ,h.d)),$Y!==h.l&&(h.l=z(R1,"fg",$Y,h.l)),UG!==h.u&&(h.u=z(p1,"fg",UG,h.u)),H9!==h.c&&(h.c=z(AY,"fg",H9,h.c)),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,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0}),O})()}var uK=y(()=>{w();w();w();w();w();w();w();w();QJ();G1();S1();lQ();UJ();aQ();yJ();gK();gj()});function $C(J,Y,Z,f){return new Promise((G)=>{J.replace(()=>I(EK,{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:(X)=>G(X),onCancel:()=>G(void 0)}),()=>G(void 0)),J.setSize("medium")})}var pQ;var UX=y(()=>{w();uK();gj();pQ={show:$C}});function xK(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 wK}from"@opentui/core";function aC(J){let Y=N1(),{theme:Z}=u0(),[f,G]=r("prompt"),[X,Q]=r(""),[q,B]=r(J.defaultVendor),[H,K]=r(J.defaultBaseRef);function j(D){let A=_Q.indexOf(f());G(_Q[(A+D+_Q.length)%_Q.length]??"prompt")}function U(D){let A=J.engines;if(A.length===0)return;if(D>0){B((l)=>CZ(A,l));return}let R=Math.max(0,A.indexOf(q()));B(A[(R-1+A.length)%A.length]??q())}function L(){let D=X().trim();if(!D){G("prompt");return}J.onSubmit({prompt:D,vendor:q(),baseRef:H().trim()||J.defaultBaseRef}),Y.clear()}V1(()=>({enabled:!0,bindings:xK(f(),{cycleField:j,stepEngine:U,commit:L})}));let M=(D)=>f()===D?Z.accent:Z.textMuted;return(()=>{var D=V("box"),A=V("box"),R=V("text"),l=V("text"),g=V("box"),S=V("text"),C=V("input"),k=V("box"),$=V("text"),G0=V("box"),s=V("text"),J0=V("input"),E=V("box"),Q0=V("text");return W(D,A),W(D,g),W(D,k),W(D,G0),W(D,E),z(D,"paddingLeft",2),z(D,"paddingRight",2),z(D,"gap",1),W(A,R),W(A,l),z(A,"flexDirection","row"),z(A,"justifyContent","space-between"),F(R,()=>`Quick task \xB7 ${J.repoLabel}`),W(l,T("esc")),z(l,"onMouseUp",()=>J.onCancel()),W(g,S),W(g,C),z(g,"gap",0),W(S,T("prompt")),z(C,"placeholder","what should this task do?"),z(C,"onInput",(e)=>Q(LJ(e))),z(C,"onSubmit",()=>L()),W(k,$),z(k,"flexDirection","row"),z(k,"gap",2),W($,T("engine")),F(k,I(e0,{get each(){return J.engines},children:(e)=>(()=>{var j0=V("text");return z(j0,"onMouseUp",()=>{B(e),G("engine")}),F(j0,()=>J.engineLabel(e)),x((o)=>{var p=q()===e?Z.primary:Z.textMuted,_=q()===e?wK.BOLD:void 0;return p!==o.e&&(o.e=z(j0,"fg",p,o.e)),_!==o.t&&(o.t=z(j0,"attributes",_,o.t)),o},{e:void 0,t:void 0}),j0})()}),null),W(G0,s),W(G0,J0),z(G0,"gap",0),W(s,T("branch")),z(J0,"onInput",(e)=>K(LJ(e))),z(J0,"onSubmit",()=>L()),W(E,Q0),z(E,"paddingBottom",1),W(Q0,T("enter create \xB7 tab field \xB7 ctrl+e engine \xB7 esc cancel")),x((e)=>{var j0=wK.BOLD,o=Z.text,p=Z.textMuted,_=M("prompt"),f0=X(),a=f()==="prompt",L0=M("engine"),m=M("branch"),b=H(),t=J.defaultBaseRef,q0=f()==="branch",M0=Z.textMuted;return j0!==e.e&&(e.e=z(R,"attributes",j0,e.e)),o!==e.t&&(e.t=z(R,"fg",o,e.t)),p!==e.a&&(e.a=z(l,"fg",p,e.a)),_!==e.o&&(e.o=z(S,"fg",_,e.o)),f0!==e.i&&(e.i=z(C,"value",f0,e.i)),a!==e.n&&(e.n=z(C,"focused",a,e.n)),L0!==e.s&&(e.s=z($,"fg",L0,e.s)),m!==e.h&&(e.h=z(s,"fg",m,e.h)),b!==e.r&&(e.r=z(J0,"value",b,e.r)),t!==e.d&&(e.d=z(J0,"placeholder",t,e.d)),q0!==e.l&&(e.l=z(J0,"focused",q0,e.l)),M0!==e.u&&(e.u=z(Q0,"fg",M0,e.u)),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}),D})()}function pC(J,Y){return new Promise((Z)=>{J.replace(()=>I(aC,o6(Y,{onSubmit:(f)=>Z(f),onCancel:()=>Z(void 0)})),()=>Z(void 0)),J.setSize("medium")})}var _Q,hK;var PK=y(()=>{w();w();w();w();w();w();w();w();G1();QJ();S1();UJ();yJ();UX();_Q=["prompt","engine","branch"];hK={show:pC}});async function vK(J={}){let Y=J.logTag??"orch-connect",Z=J.connect??PJ,f=null;try{let G=await Z();if(!G)return IY(Y,"no daemon running \u2014 caller degrades"),null;return f=new GJ(G,{...J.orchestratorOptions,channels:J.channels}),await f.init(),f}catch(G){return sY(Y,G),f?.dispose(),null}}var mK=y(()=>{uZ();KJ();DZ()});function cK(J){let[Y,Z]=r(J.initial??"sidebar"),[f,G]=r(0),X=o1();function Q(j){if(G((L)=>L+1),Y()===j)return;let U=X?.currentFocusedRenderable;if(U&&!U.isDestroyed)try{U.blur()}catch{}Z(j)}function q(j){let L=(rQ.indexOf(Y())+j+rQ.length)%rQ.length;Q(rQ[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 I(_C.Provider,{value:K,get children(){return J.children}})}var rQ,_C;var dK=y(()=>{w();w();G1();rQ=["sidebar","workspace","files","terminal"],_C=XY(null)});function nK(){for(let J of FZ){let Y=rC.get(J.id);if(!Y)continue;let Z=J;Z.keys=[...Y.keys],Z.hint=Y.hint?{...Y.hint}:void 0}}function iK(){oC((J)=>J+1)}function Sj(J){return sC.get(J)}function tC(J){return Sj(J)?.keys??[]}function OZ(J){let Y=[];for(let Z in J){let f=J[Z];if(!f)continue;let G=tC(Z);if(G.length===0){console.warn(`[kobe/keybindings] bindByIds: id="${Z}" has no chords (or doesn't exist in KobeKeymap)`);continue}G.forEach((X,Q)=>Y.push({key:X,cmd:f,slot:Q}))}return Y}var FZ,rC,Cj,oC,sC;var BG=y(()=>{G1();FZ=[{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"}}],rC=new Map(FZ.map((J)=>[J.id,{keys:[...J.keys],hint:J.hint?{...J.hint}:void 0}]));[Cj,oC]=r(0);sC=new Map(FZ.map((J)=>[J.id,J]))});function oQ(){if(AZ)return AZ;let J=az();if(!J.exists)return AZ={path:J.path,exists:!1,applied:[],warnings:[]},AZ;let Y=[...J.warnings],Z=_z(J.doc,process.platform,{chordOptsFor:QH});Y.push(...Z.warnings);let f=Z.entries.filter((q)=>q.id.startsWith("tmux.")),G=Z.entries.filter((q)=>!q.id.startsWith("tmux.")),X=_5(FZ,G);Y.push(...X.warnings);let Q=[...X.applied];if(f.length>0){let q=zH(f);Y.push(...q.warnings);for(let B of q.overridden){if(B===KY){Q.push({id:B,keys:q.focus.map((j)=>j?.chord??"").filter((j)=>j!==""),defaultKeys:BZ});continue}let H=q.binds[B];Q.push({id:B,keys:H?[H.chord]:[],defaultKeys:[eZ[B]]});let K=FZ.find((j)=>j.id===B);if(K?.hint)K.hint.keys=H?`${$f(B)?"prefix ":""}${H.chord}`:"\u2014"}}for(let q of Y)console.warn(`[kobe/keybindings] ${q}`);return AZ={path:J.path,exists:!0,applied:Q,warnings:Y},AZ}function lK(){return AZ??oQ()}function $K(){AZ=null,p5(),t5(),nK();let J=oQ();return iK(),J}var AZ=null;var yj=y(()=>{GH();sz();rz();BG()});var eC=250,HG,aK;var LX=y(()=>{HX();Kf();Wj();({use:HG,provider:aK}=nQ({name:"KV",init:()=>{let[J,Y]=MZ(i1()),Z=new Set,f=null;function G(q){if(Z.size===0)return!0;try{let B={};for(let H of Z)B[H]=J[H];return IZ(B),Z.clear(),!0}catch(B){return console.error(`[kobe] kv ${q} failed:`,B),!1}}function X(){if(f)clearTimeout(f);f=setTimeout(()=>{f=null,G("write")},eC)}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),X()},flush(){if(f)clearTimeout(f),f=null;return G("flush")},clear(){for(let q of Object.keys(J))Y(q,void 0);if(f)clearTimeout(f),f=null;Z.clear();try{k9({})}catch(q){console.error("[kobe] kv clear write failed:",q)}}};return Q}}))});var sQ="../pulse-n3cq1btw.wav";var pK=()=>{};import{existsSync as YS,mkdirSync as ZS}from"fs";import{tmpdir as fS}from"os";import{basename as GS,isAbsolute as XS,join as kj,resolve as zS}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 BS(){if(tQ!==void 0)return tQ;let Y=(process.env.PATH??"").split(":").filter(Boolean);return tQ=QS.find((Z)=>Y.some((f)=>YS(kj(f,Z))))??null,tQ}async function HS(){return oK??=(async()=>{ZS(rK,{recursive:!0});let J=kj(rK,GS(_K)),Y=Bun.file(J);if(await Y.exists())return J;return await Bun.write(Y,Bun.file(_K)),J})(),oK}function sK(J=0.4){let Y=BS();if(!Y)return;HS().then((Z)=>{try{Bun.spawn(qS(Y,Z,J),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var _K,rK,QS,tQ,oK;var tK=y(()=>{pK();_K=XS(sQ)?sQ:zS(import.meta.dir,sQ),rK=kj(fS(),"kobe-sfx"),QS=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function eK(J,Y){return`${J}:${Y}`}function Y4(J){let Y=HG(),[Z,f]=r([]),[G,X]=r(new Map),Q=0;function q(j){if(X((U)=>{let L=new Map(U),M=eK(j.taskId,j.tabId),D=U.get(M);if(D==="needs_input"||D==="error")return U;return L.set(M,j.kind),L}),Y.get("notifications.sound.enabled",!0)!==!1){try{process.stdout.write("\x07")}catch{}sK()}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((M)=>[...M,L]),setTimeout(()=>B(U),jS)}}function B(j){f((U)=>U.filter((L)=>L.id!==j))}function H(j,U){X((L)=>{let M=eK(j,U);if(!L.has(M))return L;let D=new Map(L);return D.delete(M),D})}let K={toasts:Z,unread:G,notify:q,dismiss:B,markRead:H};return I(J4.Provider,{value:K,get children(){return J.children}})}function eQ(){let J=AJ(J4);if(!J)throw Error("useNotifications must be used within a NotificationsProvider");return J}var jS=4500,J4;var Jq=y(()=>{w();G1();tK();LX();J4=XY()});function Ij(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 WS.includes(J)?J:null}var WS;var Z4=y(()=>{WS=["primary","success","info"]});import{readFileSync as KS}from"fs";function f4(J){try{let Y=JSON.parse(KS(kJ(),"utf8")),Z=typeof Y.activeTheme==="string"&&jX(Y.activeTheme)?Y.activeTheme:J,f=Y.transparentBackground===!0,G=typeof Y.focusAccent==="string"&&qf.includes(Y.focusAccent)?Y.focusAccent:null;return{theme:Z,transparent:f,focusAccent:G}}catch{return{theme:J,transparent:!1,focusAccent:null}}}var G4=y(()=>{v1();S1()});function LS(J){if(J)Jz(J);oQ();for(let{name:Y,theme:Z}of pG())Kj(Y,Z)}function DS(J){let Y={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return J?{...Y,onDestroy:J}:Y}function MS(J){let Y=()=>J.children,Z=()=>J.notifications?I(Y4,{get children(){return Y()}}):Y(),f=()=>I(VK,{get children(){return Z()}}),G=()=>J.focus?I(cK,{initial:"sidebar",get children(){return f()}}):f(),X=()=>J.kv?I(aK,{get children(){return G()}}):G();return I(BK,{mode:"dark",get theme(){return J.theme},get children(){return X()}})}function FS(J){let Y=u0(),Z={selectedTheme:()=>Y.selected,hasTheme:(q)=>Y.has(q),setTheme:(q)=>Y.set(q),reloadUserThemes:()=>{for(let{name:q,theme:B}of pG())Kj(q,B)},transparentBackground:()=>Y.transparentBackground,setTransparentBackground:(q)=>Y.setTransparentBackground(q),focusAccent:()=>Y.focusAccent,setFocusAccent:(q)=>Y.setFocusAccent(q)};Ij(Z,{theme:J.boot.theme,transparentBackground:J.boot.transparent,focusAccent:J.boot.focusAccent});let[f,G]=r(null),X=!1;r1(()=>{(async()=>{let q=await vK({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!q)return;if(X){q.dispose();return}G(q)})()}),a0(()=>{let q=f()?.uiPrefsSignal()();if(q)Ij(Z,q)});let Q=null;return a0(()=>{let q=f()?.keybindingsRevSignal()();if(q==null)return;if(Q===null||q===Q){Q=q;return}Q=q,$K()}),d1(()=>{X=!0,f()?.dispose()}),null}async function zJ(J){LS(J.logContext);let Y=f4(US),Z=await J.setup(Y),f=J.providers?.kv??!0,G=J.providers?.focus??!0,X=J.providers?.notifications??!1;await fK(()=>I(MS,{get theme(){return Y.theme},kv:f,focus:G,notifications:X,get children(){return[I(FS,{boot:Y}),o0(()=>Z.root())]}}),DS(Z.onDestroy))}var US="claude";var RZ=y(()=>{w();w();w();uZ();G1();mK();dK();yj();LX();Jq();S1();YQ();yJ();Z4();G4()});async function bj(J,Y,Z,f,G={}){let X=W1(Y.id);if(await Z1(X))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(),sJ)),{resolveEngineLaunchInit:B}=await Promise.resolve().then(() => (nf(),fH)),H=B(Z,Q,{kind:G.includeInitPrompt?"repo-init":"none"});if(!await q({name:X,cwd:Q,command:VJ(f),taskId:Y.id,vendor:f,repo:Z,launchInit:H}))throw Error(`failed to start tmux session for ${Y.id}`);return!1}async function Yq(J,Y,Z,f,G={}){await bj(J,Y,Z,f,G),await J.setActiveTask(Y.id).catch(()=>{});let{prepareWindowForSwitch:X}=await Promise.resolve().then(() => (ZJ(),sJ));await X(W1(Y.id)),await E0(["switch-client","-t",`=${W1(Y.id)}`])}var Nj=y(()=>{gJ();E1()});var X4={};q1(X4,{startNewTaskHost:()=>OS,NewTaskPage:()=>Zq});function Zq(J){let{theme:Y}=u0(),Z=N1();r1(()=>{f()});async function f(){let G=IJ(),X=J.defaultRepo||G[0]||process.cwd(),Q=O1("lastSelectedVendor")??I1,q=await bY(),B=J.orchestrator,H=await pQ.show(Z,X,G,{defaultVendor:Q,availableVendors:q,discoverAdoptable:B?(j)=>B.discoverAdoptableWorktrees(j):void 0});if(!H)process.exit(0);if(m1("lastSelectedVendor",H.vendor),CY(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 Yq(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 G=V("box");return z(G,"flexDirection","column"),z(G,"flexGrow",1),x((X)=>z(G,"backgroundColor",Y.background,X)),G})()}async function OS(J){await zJ({setup:async()=>{let Y=null;try{let Z=await tJ(),f=new GJ(Z);await f.init(),Y=f}catch(Z){console.error("[kobe new-task] daemon unavailable; cannot create task:",Z)}return{root:()=>I(Zq,{get defaultRepo(){return J.defaultRepo},orchestrator:Y}),onDestroy:()=>{Y?.dispose()}}}})}var Tj=y(()=>{w();w();w();w();KJ();G1();DZ();xZ();D1();NJ();UX();S1();RZ();Nj();yJ()});function fq(J,Y,Z,f,G={}){if(J.length===0)return Y;let X=new Map;for(let B of J)X.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=X.get(Z(H));if(K&&f(K,H)&&(!G.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 z4(J,Y){if(!J)return!0;let Z=J.toLowerCase(),f=Y.toLowerCase(),G=0;for(let X=0;X<f.length&&G<Z.length;X++)if(f.charCodeAt(X)===Z.charCodeAt(G))G++;return G===Z.length}function AS(J,Y){let Z=Y==="archived";return J.filter((f)=>f.archived===Z)}function Ej(J,Y,Z,f="default",G){let X=AS(J,Y),Q=Z?.trim()??"",q=G?vJ(G):null,B=Q?X.filter((D)=>z4(Q,`${D.title} ${YY(D.repo)}`)):X,H=[],K=[],j=[],U=new Set;for(let D of B){if(D.kind==="main"){let A=vJ(D.repo);if(U.has(A))continue;U.add(A),H.push(D);continue}if(q&&vJ(D.repo)!==q)continue;if(D.pinned===!0)K.push(D);else j.push(D)}if(H.sort((D,A)=>YY(D.repo).localeCompare(YY(A.repo))),f==="recent")K.sort(Q4),j.sort(Q4);let L=[],M=0;for(let D of H)L.push({kind:"task",task:D,flatIndex:M}),M++;for(let D of K)L.push({kind:"task",task:D,flatIndex:M}),M++;for(let D of j)L.push({kind:"task",task:D,flatIndex:M}),M++;return L}function Q4(J,Y){let Z=q4(Y)-q4(J);if(Z!==0)return Z;return String(Y.id).localeCompare(String(J.id))}function q4(J){let Y=Date.parse(J.updatedAt||J.createdAt);return Number.isFinite(Y)?Y:0}function YY(J){let Y=J.split("/").filter(Boolean);return Y[Y.length-1]??J}function vJ(J){return J.trim().replace(/[\\/]+$/,"")||J}function RS(J,Y){let Z=YY(J);if(!Y.some((G)=>G!==J&&YY(G)===Z))return Z;return J.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function B4(J,Y){let Z=Y==="archived",f=new Map;for(let X of J){let Q=vJ(X.repo),q=f.get(Q)??{repo:X.repo,count:0};if(X.kind==="main")q.repo=X.repo;else if(X.archived===Z)q.count+=1;f.set(Q,q)}let G=[...f.values()].map((X)=>X.repo);return[...f.values()].map((X)=>({repo:X.repo,label:RS(X.repo,G),count:X.count})).sort((X,Q)=>X.label.localeCompare(Q.label))}function H4(J,Y){if(J.length===0)return-1;if(!Y)return J[0]?.flatIndex??-1;let Z=vJ(Y),f=J.find((X)=>X.task.kind!=="main"&&vJ(X.task.repo)===Z);if(f)return f.flatIndex;return J.find((X)=>X.task.kind==="main"&&vJ(X.task.repo)===Z)?.flatIndex??J[0]?.flatIndex??-1}function uj(J){return J.map((Y)=>Y.task.id)}function j4(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 gS(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 W4(J,Y){return fq(J,Y,(Z)=>Z.task.id,(Z,f)=>Z.flatIndex===f.flatIndex&&gS(Z.task,f.task),{samePosition:!0})}var Gq=()=>{};var V4={};q1(V4,{startQuickTaskHost:()=>kS});async function CS(J,Y){let Z,f;if(Y){let j=await jJ(Y,["@kobe_task","@kobe_worktree"]);Z=j["@kobe_task"]||void 0,f=j["@kobe_worktree"]||void 0}let G=(Z?J?.getTask(Z)?.repo:void 0)??IJ()[0],X=G??f??process.cwd();if(!G)return{ctx:null,fallbackRepo:X};let Q=await bY(),q=O1("lastSelectedVendor")??I1,B=Q.length===0||Q.includes(q)?q:Q[0]??q,H=WX(t1(G))??JY,K=Q.length>0?Q:[B];return{ctx:{repo:G,vendor:B,baseRef:H,engines:K},fallbackRepo:X}}async function SS(J,Y,Z,f,G){let X=await bj(J,Y,Z,f),Q=W1(Y.id),{pane:q}=await $G(Q,!X);if(q)await aG(q,G)}function yS(J){let{theme:Y}=u0(),Z=N1();r1(()=>{f()});async function f(){let G=J.ctx,X=await hK.show(Z,{repoLabel:YY(G.repo),engines:G.engines,defaultVendor:G.vendor,defaultBaseRef:G.baseRef,engineLabel:aZ});if(X===void 0)process.exit(0);m1("lastSelectedVendor",X.vendor),CY(G.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:G.repo,baseRef:X.baseRef,vendor:X.vendor});await SS(Q,q,G.repo,X.vendor,X.prompt),await Yq(Q,q,G.repo,X.vendor)}catch(q){console.error("[kobe quick-task] task.create/deliver failed:",q),process.exit(1)}process.exit(0)}return(()=>{var G=V("box");return z(G,"flexDirection","column"),z(G,"flexGrow",1),x((X)=>z(G,"backgroundColor",Y.background,X)),G})()}async function kS(J){await zJ({setup:async()=>{let Y=null;try{let G=await tJ(),X=new GJ(G);await X.init(),Y=X}catch(G){console.error("[kobe quick-task] daemon unavailable; cannot create task:",G)}let{ctx:Z,fallbackRepo:f}=await CS(Y,J.session);return{root:()=>Z?I(yS,{ctx:Z,orchestrator:Y}):I(Zq,{defaultRepo:f,orchestrator:Y}),onDestroy:()=>{Y?.dispose()}}}})}var K4=y(()=>{w();w();w();w();KJ();G1();DZ();xZ();gJ();D1();E1();tz();NJ();PK();S1();lQ();RZ();aQ();Nj();Tj();Gq();yJ()});function zq(J){let Y=J.trim().split(/\s+/).pop()??"",Z=/^([CM])-(.+)$/.exec(Y);if(!Z)return null;let f=Z[1]==="C"?"\u2303":"\u2325",G=Z[2]??"";return`${f}${G.length===1?G.toUpperCase():G}`}function Xq(J,Y){if(J.includes("/"))return J.split("/").map((G)=>Xq(G,Y)).join("/");let Z=J.toLowerCase();if(Z==="tab")return"tab";let f=bS[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,(G)=>G.toUpperCase())}function jG(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("+")?jG(q,Y):Xq(q,!0)}`}let G=Z.split("+");if(G.length===1)return Xq(G[0]??"",!1);let X=G[G.length-1]??"";return`${G.slice(0,-1).map((q)=>IS[q.toLowerCase().trim()]??q).join("")} ${Xq(X,!0)}`}var IS,bS;var xj=y(()=>{IS={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},bS={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 NS(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 WG(J={}){let Y=N1(),{theme:Z}=u0(),f=()=>NS(FZ),G=()=>J.onClose?J.onClose():Y.clear(),[X,Q]=r("\u2303B");return r1(()=>{c0(["show-options","-g","prefix"]).then(({code:q,stdout:B})=>{if(q!==0)return;let H=zq(B);if(H)Q(H)})}),V1(()=>({bindings:[{key:"?",cmd:G}]})),(()=>{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",G),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),F(U,I(e0,{get each(){return f()},children:(L)=>(()=>{var M=V("box"),D=V("text");return W(M,D),z(M,"gap",0),F(D,()=>L.category),F(M,I(e0,{get each(){return L.rows},children:(A)=>{let R=A.hint?.keys??A.keys[0]??"\u2014",l=()=>R==="\u2014"?"\u2014":jG(R,X()),g=()=>(A.hint?A.keys:A.keys.slice(1)).map((S)=>jG(S,X()));return(()=>{var S=V("box"),C=V("box"),k=V("text"),$=V("box"),G0=V("text");return W(S,C),W(S,$),z(S,"flexDirection","row"),z(S,"gap",2),z(S,"paddingLeft",1),W(C,k),z(C,"width",14),F(k,l),W($,G0),z($,"flexGrow",1),F(G0,()=>A.description),F(S,(()=>{var s=o0(()=>g().length>0);return()=>s()?(()=>{var J0=V("box"),E=V("text");return W(J0,E),F(E,()=>`(${g().join(", ")})`),x((Q0)=>z(E,"fg",Z.textMuted,Q0)),J0})():null})(),null),x((s)=>{var{primary:J0,text:E}=Z;return J0!==s.e&&(s.e=z(k,"fg",J0,s.e)),E!==s.t&&(s.t=z(G0,"fg",E,s.t)),s},{e:void 0,t:void 0}),S})()}}),null),x((A)=>{var R=Z.accent,l=U4.BOLD;return R!==A.e&&(A.e=z(D,"fg",R,A.e)),l!==A.t&&(A.t=z(D,"attributes",l,A.t)),A},{e:void 0,t:void 0}),M})()})),x((L)=>{var M=U4.BOLD,D=Z.text,A=Z.textMuted,R={trackOptions:{backgroundColor:Z.backgroundDialog,foregroundColor:Z.borderActive}};return M!==L.e&&(L.e=z(H,"attributes",M,L.e)),D!==L.t&&(L.t=z(H,"fg",D,L.t)),A!==L.a&&(L.a=z(K,"fg",A,L.a)),R!==L.o&&(L.o=z(j,"verticalScrollbarOptions",R,L.o)),L},{e:void 0,t:void 0,a:void 0,o:void 0}),q})()}var wj=y(()=>{w();w();w();w();w();w();w();w();G1();E1();BG();S1();xj();UJ();yJ();WG.show=(J)=>{J.replace(()=>I(WG,{}))}});import{TextAttributes as TS}from"@opentui/core";function L4(J){let Y=N1(),{theme:Z}=u0(),[f,G]=r(J.currentTitle);function X(){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"),M=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"),F(B,()=>J.dialogTitle??"Rename task"),W(H,T("esc")),z(H,"onMouseUp",()=>J.onCancel()),W(K,j),W(K,U),z(K,"gap",0),F(j,()=>J.fieldLabel??"title"),z(U,"focused",!0),z(U,"onInput",(D)=>G(LJ(D))),z(U,"onSubmit",()=>X()),W(L,M),z(L,"paddingBottom",1),F(M,()=>`enter ${J.submitLabel??"rename"} \xB7 esc cancel`),x((D)=>{var A=TS.BOLD,R=Z.text,l=Z.textMuted,g=Z.accent,S=f(),C=J.placeholder??J.currentTitle,k=Z.textMuted;return A!==D.e&&(D.e=z(B,"attributes",A,D.e)),R!==D.t&&(D.t=z(B,"fg",R,D.t)),l!==D.a&&(D.a=z(H,"fg",l,D.a)),g!==D.o&&(D.o=z(j,"fg",g,D.o)),S!==D.i&&(D.i=z(U,"value",S,D.i)),C!==D.n&&(D.n=z(U,"placeholder",C,D.n)),k!==D.s&&(D.s=z(M,"fg",k,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 D4=y(()=>{w();w();w();w();w();w();w();G1();S1();yJ();UX()});function ES(J,Y,Z={}){return new Promise((f)=>{J.replace(()=>I(L4,{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)=>f(G),onCancel:()=>f(void 0)}),()=>f(void 0))})}var ZY;var hj=y(()=>{w();D4();ZY={show:ES}});import{TextAttributes as uS}from"@opentui/core";function xS(J){if(!J)return J;return J.charAt(0).toUpperCase()+J.slice(1)}function lY(J){let Y=N1(),{theme:Z}=u0(),[f,G]=MZ({active:J.initialActive??"confirm"});return V1(()=>({bindings:[{key:"return",cmd:()=>{if(f.active==="confirm")J.onConfirm?.();if(f.active==="cancel")J.onCancel?.();Y.clear()}},{key:"left",cmd:()=>G("active",f.active==="confirm"?"cancel":"confirm")},{key:"right",cmd:()=>G("active",f.active==="confirm"?"cancel":"confirm")}]})),(()=>{var X=V("box"),Q=V("box"),q=V("text"),B=V("text"),H=V("text"),K=V("box");return W(X,Q),W(X,H),W(X,K),z(X,"paddingLeft",2),z(X,"paddingRight",2),z(X,"paddingBottom",1),z(X,"gap",0),W(Q,q),W(Q,B),z(Q,"flexDirection","row"),z(Q,"justifyContent","space-between"),F(q,()=>J.title),W(B,T("esc")),z(B,"onMouseUp",()=>Y.clear()),F(H,()=>J.message),z(K,"flexDirection","row"),z(K,"justifyContent","flex-end"),z(K,"paddingTop",1),F(K,I(e0,{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()}),F(L,()=>xS(j==="cancel"?J.label??j:J.confirmLabel??j)),x((M)=>{var D=j===f.active?Z.primary:void 0,A=j===f.active?Z.selectedListItemText:Z.textMuted;return D!==M.e&&(M.e=z(U,"backgroundColor",D,M.e)),A!==M.t&&(M.t=z(L,"fg",A,M.t)),M},{e:void 0,t:void 0}),U})()})),x((j)=>{var U=uS.BOLD,L=Z.text,M=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)),M!==j.a&&(j.a=z(B,"fg",M,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}),X})()}var Pj=y(()=>{w();w();w();w();w();w();w();G1();HX();S1();UJ();yJ();lY.show=(J,Y,Z,f,G,X)=>{return new Promise((Q)=>{J.replace(()=>I(lY,{title:Y,message:Z,onConfirm:()=>Q(!0),onCancel:()=>Q(!1),label:f,confirmLabel:G,get initialActive(){return X?.initialActive}}),()=>Q(void 0)),J.setSize("small")})}});import{unlinkSync as wS}from"fs";import{join as hS}from"path";function M4(J){return J instanceof GJ}function F4(J,Y){try{J?.destroy()}catch(Z){console.error(`kobe: renderer.destroy() failed during ${Y}:`,Z)}}async function vj(J,Y,Z){if(await lY.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{wS(hS(fY(),".kobe","tasks.json"))}catch(G){if(G.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",G)}F4(Z,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
214
- `),process.exit(0)}async function mj(J,Y,Z){if(!(Y instanceof GJ))return;if(await lY.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;F4(Z,"daemon restart"),process.stderr.write(`kobe: window closed. Relaunch kobe to start fresh.
215
- `),process.exit(0)}var O4=y(()=>{DZ();v1();Pj()});function PS(J){return`theme:${J}`}function cj(J){return`accent:${J}`}function vS(J){return`engine:${J}`}function DX(J){return`surface:${J}`}function dj(J){return[...J.themeNames.map((Y)=>({id:PS(Y),kind:"theme",name:Y})),{id:"transparent",kind:"transparent"},...J.focusAccentSlots.map((Y)=>({id:cj(Y),kind:"focusAccent",slot:Y})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:DX("chattab"),kind:"surface",surface:"chattab"},{id:DX("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function mS(J){return[...J.map((Y)=>({id:vS(Y),kind:"engine",vendor:Y})),{id:"add-engine",kind:"engineAdd"}]}function cS(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function MX(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 R4(J,Y){switch(J){case"general":return dj(Y);case"engines":return mS(Y.engineList);case"accounts":case"keys":return[];case"feedback":return cS();case"dev":return MX(Y.hasDaemon)}}function FX(J,Y){return J.findIndex((Z)=>Z.id===Y)}function Qq(J,Y){return J[Y]}var Hf,A4;var nj=y(()=>{Hf=[{id:"general",label:"General"},{id:"engines",label:"Engines"},{id:"accounts",label:"Accounts"},{id:"keys",label:"Keybindings"},{id:"feedback",label:"Feedback"},{id:"dev",label:"Dev"}],A4={primary:"Primary (brand accent)",success:"Success (legacy green)",info:"Info (cool blue)"}});import{TextAttributes as p0}from"@opentui/core";function g4(J){let{theme:Y}=u0();return(()=>{var Z=V("box");return z(Z,"flexDirection","column"),z(Z,"flexShrink",0),z(Z,"width",14),z(Z,"gap",0),F(Z,I(e0,{each:Hf,children:(f,G)=>{let X=()=>G()===J.cursor(),Q=()=>X()&&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"),F(B,()=>f.label),x((H)=>{var K=Q()?Y.primary:void 0,j=Q()?Y.selectedListItemText:X()?Y.accent:Y.textMuted,U=X()?p0.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 C4(J){let Y=u0(),{theme:Z}=Y,f=()=>dj({themeNames:J.themeNames(),focusAccentSlots:qf}),G=(g)=>FX(f(),g),X=()=>G("transparent"),Q=()=>G("toast"),q=()=>G("sound"),B=()=>G(DX("chattab")),H=()=>G(DX("taskpanel")),K=()=>G("editor-kind"),j=()=>G("editor-custom"),U=()=>J.bodyRow()===X(),L=()=>J.bodyRow()===Q(),M=()=>J.bodyRow()===q(),D=()=>J.bodyRow()===B(),A=()=>J.bodyRow()===H(),R=()=>J.bodyRow()===K(),l=()=>J.bodyRow()===j();return(()=>{var g=V("box"),S=V("text"),C=V("text"),k=V("box"),$=V("box"),G0=V("text"),s=V("text"),J0=V("box"),E=V("text"),Q0=V("box"),e=V("text"),j0=V("text"),o=V("box"),p=V("text"),_=V("text"),f0=V("box"),a=V("text"),L0=T(" Toast"),m=V("box"),b=V("text"),t=T(" Sound"),q0=V("box"),M0=V("text"),S0=V("text"),h0=V("box"),u=V("text"),D0=T(" ChatTab (separate page)"),z0=V("box"),g0=V("text"),C0=T(" Task panel (in-pane overlay)"),y0=V("box"),n0=V("text"),P0=V("text"),O0=V("box"),d=V("text"),Y0=V("box"),A0=V("text");return W(g,S),W(g,C),W(g,k),W(g,$),W(g,Q0),W(g,o),W(g,q0),W(g,y0),z(g,"flexDirection","column"),z(g,"gap",1),W(S,T("Theme")),W(C,T("l to enter list \xB7 j/k to highlight \xB7 enter to apply")),z(k,"flexDirection","column"),z(k,"gap",0),F(k,I(e0,{get each(){return J.themeNames()},children:(N,i0)=>{let k0=()=>J.level()==="body"&&J.bodyRow()===i0(),N0=()=>N===Y.selected;return(()=>{var b0=V("box"),_0=V("text");return W(b0,_0),z(b0,"flexDirection","row"),z(b0,"gap",1),z(b0,"paddingLeft",1),z(b0,"paddingRight",1),z(b0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(i0()),J.setThemeCursor(i0()),J.selectTheme(N)}),z(_0,"wrapMode","none"),F(_0,()=>N0()?"\u25CF ":" ",null),F(_0,N,null),x((n)=>{var Z0=k0()?Z.primary:void 0,H0=k0()?Z.selectedListItemText:N0()?Z.accent:Z.text,V0=k0()||N0()?p0.BOLD:void 0;return Z0!==n.e&&(n.e=z(b0,"backgroundColor",Z0,n.e)),H0!==n.t&&(n.t=z(_0,"fg",H0,n.t)),V0!==n.a&&(n.a=z(_0,"attributes",V0,n.a)),n},{e:void 0,t:void 0,a:void 0}),b0})()}})),W($,G0),W($,s),W($,J0),z($,"flexDirection","column"),z($,"gap",0),z($,"paddingTop",1),W(G0,T("Transparent background")),W(s,T("Drops the renderer's bg fill so the host terminal shows through. `t` toggles.")),z(s,"wrapMode","word"),W(J0,E),z(J0,"flexDirection","row"),z(J0,"paddingLeft",1),z(J0,"paddingRight",1),z(J0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(X()),J.toggleTransparent()}),z(E,"wrapMode","none"),F(E,()=>Y.transparentBackground?"[x] on":"[ ] off"),W(Q0,e),W(Q0,j0),z(Q0,"flexDirection","column"),z(Q0,"gap",0),z(Q0,"paddingTop",1),W(e,T("Focus accent")),W(j0,T("Color of focused pane title, \u258C marker, and split borders.")),z(j0,"wrapMode","word"),F(Q0,I(e0,{each:qf,children:(N)=>{let i0=()=>G(cj(N)),k0=()=>J.level()==="body"&&J.bodyRow()===i0(),N0=()=>Y.focusAccent===N;return(()=>{var b0=V("box"),_0=V("text");return W(b0,_0),z(b0,"flexDirection","row"),z(b0,"gap",1),z(b0,"paddingLeft",1),z(b0,"paddingRight",1),z(b0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(i0()),J.selectFocusAccent(N)}),z(_0,"wrapMode","none"),F(_0,()=>N0()?"\u25CF ":" ",null),F(_0,()=>A4[N],null),x((n)=>{var Z0=k0()?Z.primary:void 0,H0=k0()?Z.selectedListItemText:N0()?Z.focusAccent:Z.text,V0=k0()||N0()?p0.BOLD:void 0;return Z0!==n.e&&(n.e=z(b0,"backgroundColor",Z0,n.e)),H0!==n.t&&(n.t=z(_0,"fg",H0,n.t)),V0!==n.a&&(n.a=z(_0,"attributes",V0,n.a)),n},{e:void 0,t:void 0,a:void 0}),b0})()}}),null),W(o,p),W(o,_),W(o,f0),W(o,m),z(o,"flexDirection","column"),z(o,"gap",0),z(o,"paddingTop",1),W(p,T("Notifications")),W(_,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(_,"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,L0),z(a,"wrapMode","none"),F(a,()=>J.toastEnabled()?"[x]":"[ ]",L0),W(m,b),z(m,"flexDirection","row"),z(m,"gap",1),z(m,"paddingLeft",1),z(m,"paddingRight",1),z(m,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(q()),J.toggleSound()}),W(b,t),z(b,"wrapMode","none"),F(b,()=>J.soundEnabled()?"[x]":"[ ]",t),W(q0,M0),W(q0,S0),W(q0,h0),W(q0,z0),z(q0,"flexDirection","column"),z(q0,"gap",0),z(q0,"paddingTop",1),W(M0,T("Settings page")),W(S0,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(S0,"wrapMode","word"),W(h0,u),z(h0,"flexDirection","row"),z(h0,"gap",1),z(h0,"paddingLeft",1),z(h0,"paddingRight",1),z(h0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(B()),J.selectSurface("chattab")}),W(u,D0),z(u,"wrapMode","none"),F(u,()=>J.settingsSurface()==="chattab"?"[x]":"[ ]",D0),W(z0,g0),z(z0,"flexDirection","row"),z(z0,"gap",1),z(z0,"paddingLeft",1),z(z0,"paddingRight",1),z(z0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(H()),J.selectSurface("taskpanel")}),W(g0,C0),z(g0,"wrapMode","none"),F(g0,()=>J.settingsSurface()==="taskpanel"?"[x]":"[ ]",C0),W(y0,n0),W(y0,P0),W(y0,O0),W(y0,Y0),z(y0,"flexDirection","column"),z(y0,"gap",0),z(y0,"paddingTop",1),W(n0,T("Editor")),W(P0,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(P0,"wrapMode","word"),W(O0,d),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(d,"wrapMode","none"),F(d,()=>`editor: < ${J.editorKind()} > (enter to change)`),W(Y0,A0),z(Y0,"flexDirection","row"),z(Y0,"gap",1),z(Y0,"paddingLeft",1),z(Y0,"paddingRight",1),z(Y0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(j()),J.editEditorCustom()}),z(A0,"wrapMode","none"),F(A0,()=>`custom: ${J.editorCustomCommand().trim()||"(unset \u2014 enter to edit)"}`),x((N)=>{var i0=Z.text,k0=p0.BOLD,N0=Z.textMuted,b0=Z.text,_0=p0.BOLD,n=Z.textMuted,Z0=U()?Z.primary:void 0,H0=U()?Z.selectedListItemText:Y.transparentBackground?Z.accent:Z.textMuted,V0=p0.BOLD,K0=Z.text,s0=p0.BOLD,T0=Z.textMuted,L1=Z.text,I0=p0.BOLD,x0=Z.textMuted,z1=L()?Z.primary:void 0,B1=L()?Z.selectedListItemText:J.toastEnabled()?Z.accent:Z.textMuted,Q1=p0.BOLD,J1=M()?Z.primary:void 0,O=M()?Z.selectedListItemText:J.soundEnabled()?Z.accent:Z.textMuted,P=p0.BOLD,F0=Z.text,w0=p0.BOLD,l0=Z.textMuted,f1=D()?Z.primary:void 0,k1=D()?Z.selectedListItemText:J.settingsSurface()==="chattab"?Z.accent:Z.textMuted,M1=p0.BOLD,r0=A()?Z.primary:void 0,U0=A()?Z.selectedListItemText:J.settingsSurface()==="taskpanel"?Z.accent:Z.textMuted,R1=p0.BOLD,p1=Z.text,DJ=p0.BOLD,AY=Z.textMuted,h=R()?Z.primary:void 0,c=R()?Z.selectedListItemText:Z.accent,i=p0.BOLD,v=l()?Z.primary:void 0,R0=l()?Z.selectedListItemText:J.editorKind()==="custom"?Z.text:Z.textMuted;return i0!==N.e&&(N.e=z(S,"fg",i0,N.e)),k0!==N.t&&(N.t=z(S,"attributes",k0,N.t)),N0!==N.a&&(N.a=z(C,"fg",N0,N.a)),b0!==N.o&&(N.o=z(G0,"fg",b0,N.o)),_0!==N.i&&(N.i=z(G0,"attributes",_0,N.i)),n!==N.n&&(N.n=z(s,"fg",n,N.n)),Z0!==N.s&&(N.s=z(J0,"backgroundColor",Z0,N.s)),H0!==N.h&&(N.h=z(E,"fg",H0,N.h)),V0!==N.r&&(N.r=z(E,"attributes",V0,N.r)),K0!==N.d&&(N.d=z(e,"fg",K0,N.d)),s0!==N.l&&(N.l=z(e,"attributes",s0,N.l)),T0!==N.u&&(N.u=z(j0,"fg",T0,N.u)),L1!==N.c&&(N.c=z(p,"fg",L1,N.c)),I0!==N.w&&(N.w=z(p,"attributes",I0,N.w)),x0!==N.m&&(N.m=z(_,"fg",x0,N.m)),z1!==N.f&&(N.f=z(f0,"backgroundColor",z1,N.f)),B1!==N.y&&(N.y=z(a,"fg",B1,N.y)),Q1!==N.g&&(N.g=z(a,"attributes",Q1,N.g)),J1!==N.p&&(N.p=z(m,"backgroundColor",J1,N.p)),O!==N.b&&(N.b=z(b,"fg",O,N.b)),P!==N.T&&(N.T=z(b,"attributes",P,N.T)),F0!==N.A&&(N.A=z(M0,"fg",F0,N.A)),w0!==N.O&&(N.O=z(M0,"attributes",w0,N.O)),l0!==N.I&&(N.I=z(S0,"fg",l0,N.I)),f1!==N.S&&(N.S=z(h0,"backgroundColor",f1,N.S)),k1!==N.W&&(N.W=z(u,"fg",k1,N.W)),M1!==N.C&&(N.C=z(u,"attributes",M1,N.C)),r0!==N.B&&(N.B=z(z0,"backgroundColor",r0,N.B)),U0!==N.v&&(N.v=z(g0,"fg",U0,N.v)),R1!==N.k&&(N.k=z(g0,"attributes",R1,N.k)),p1!==N.x&&(N.x=z(n0,"fg",p1,N.x)),DJ!==N.j&&(N.j=z(n0,"attributes",DJ,N.j)),AY!==N.q&&(N.q=z(P0,"fg",AY,N.q)),h!==N.z&&(N.z=z(O0,"backgroundColor",h,N.z)),c!==N.P&&(N.P=z(d,"fg",c,N.P)),i!==N.H&&(N.H=z(d,"attributes",i,N.H)),v!==N.F&&(N.F=z(Y0,"backgroundColor",v,N.F)),R0!==N.M&&(N.M=z(A0,"fg",R0,N.M)),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,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}),g})()}function S4(J){let{theme:Y}=u0(),Z=()=>J.vendors.length;return(()=>{var f=V("box"),G=V("text"),X=V("text"),Q=V("box"),q=V("box"),B=V("text");return W(f,G),W(f,X),W(f,Q),z(f,"flexDirection","column"),z(f,"gap",1),W(G,T("Launch command")),W(X,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(X,"wrapMode","word"),W(Q,q),z(Q,"flexDirection","column"),z(Q,"gap",0),F(Q,I(e0,{get each(){return J.vendors},children:(H,K)=>{let j=()=>J.level()==="body"&&J.bodyRow()===K();return(()=>{var U=V("box"),L=V("text"),M=V("text"),D=V("text");return W(U,L),W(U,M),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"),F(L,()=>J.isDefaultEngine(H)?"\u25CF":" "),z(M,"wrapMode","none"),F(M,()=>J.displayName(H)),z(D,"wrapMode","none"),F(D,()=>J.commandText(H),null),F(D,(()=>{var A=o0(()=>!!J.isDefault(H));return()=>A()?" (default)":J.isCustom(H)?" (custom)":""})(),null),x((A)=>{var R=j()?Y.primary:void 0,l=j()?Y.selectedListItemText:Y.accent,g=p0.BOLD,S=j()?Y.selectedListItemText:Y.text,C=p0.BOLD,k=j()?Y.selectedListItemText:J.isDefault(H)?Y.textMuted:Y.accent;return R!==A.e&&(A.e=z(U,"backgroundColor",R,A.e)),l!==A.t&&(A.t=z(L,"fg",l,A.t)),g!==A.a&&(A.a=z(L,"attributes",g,A.a)),S!==A.o&&(A.o=z(M,"fg",S,A.o)),C!==A.i&&(A.i=z(M,"attributes",C,A.i)),k!==A.n&&(A.n=z(D,"fg",k,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),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"),x((H)=>{var K=Y.text,j=p0.BOLD,U=Y.textMuted,L=J.level()==="body"&&J.bodyRow()===Z()?Y.primary:void 0,M=J.level()==="body"&&J.bodyRow()===Z()?Y.selectedListItemText:Y.primary;return K!==H.e&&(H.e=z(G,"fg",K,H.e)),j!==H.t&&(H.t=z(G,"attributes",j,H.t)),U!==H.a&&(H.a=z(X,"fg",U,H.a)),L!==H.o&&(H.o=z(q,"backgroundColor",L,H.o)),M!==H.i&&(H.i=z(B,"fg",M,H.i)),H},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),f})()}function y4(J){let{theme:Y}=u0(),Z=(f)=>f.binary.found?`Binary: ${f.binary.path}`:`Binary: ${f.binary.error}`;return(()=>{var f=V("box"),G=V("text"),X=V("text"),Q=V("box"),q=V("text"),B=V("box"),H=V("text"),K=V("box"),j=V("text");return W(f,G),W(f,X),W(f,Q),W(f,B),W(f,K),z(f,"flexDirection","column"),z(f,"gap",1),W(G,T("Accounts")),W(X,T("Read-only view of locally-detected engine accounts. Login flows land here later.")),z(X,"wrapMode","word"),W(Q,q),z(Q,"flexDirection","column"),z(Q,"gap",0),W(q,T("claude-code")),F(Q,I(X0,{get when(){return J.claudeStatus()===null},get children(){var U=V("text");return W(U,T("Checking\u2026")),x((L)=>z(U,"fg",Y.textMuted,L)),U}}),null),F(Q,I(X0,{get when(){return J.claudeStatus()},children:(U)=>(()=>{var L=V("box"),M=V("text");return W(L,M),z(L,"flexDirection","column"),z(L,"gap",0),z(M,"wrapMode","word"),F(M,()=>Z(U())),F(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 z(R,"wrapMode","word"),F(R,()=>`\u25CF Logged in: ${D.email}${A?` (${A})`:""}`),x((l)=>z(R,"fg",Y.success,l)),R})()}return(()=>{var A=V("text");return W(A,T("\u25CB Not logged in")),x((R)=>z(A,"fg",Y.textMuted,R)),A})()},null),F(L,I(X0,{get when(){return U().accountError},children:(D)=>(()=>{var A=V("text");return z(A,"wrapMode","word"),F(A,()=>`! ${D()}`),x((R)=>z(A,"fg",Y.warning,R)),A})()}),null),x((D)=>z(M,"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")),F(B,I(X0,{get when(){return J.codexStatus()===null},get children(){var U=V("text");return W(U,T("Checking\u2026")),x((L)=>z(U,"fg",Y.textMuted,L)),U}}),null),F(B,I(X0,{get when(){return J.codexStatus()},children:(U)=>(()=>{var L=V("box"),M=V("text");return W(L,M),z(L,"flexDirection","column"),z(L,"gap",0),z(M,"wrapMode","word"),F(M,()=>Z(U())),F(L,()=>{let D=U().account;if(D.kind==="chatgpt")return(()=>{var A=V("text");return z(A,"wrapMode","word"),F(A,()=>`\u25CF ChatGPT login: ${D.email}${D.plan?` (${D.plan})`:""}`),x((R)=>z(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)=>z(A,"fg",Y.success,R)),A})();return(()=>{var A=V("text");return W(A,T("\u25CB Not logged in")),x((R)=>z(A,"fg",Y.textMuted,R)),A})()},null),F(L,I(X0,{get when(){return U().accountError},children:(D)=>(()=>{var A=V("text");return z(A,"wrapMode","word"),F(A,()=>`! ${D()}`),x((R)=>z(A,"fg",Y.warning,R)),A})()}),null),x((D)=>z(M,"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")),F(K,I(X0,{get when(){return J.copilotStatus()===null},get children(){var U=V("text");return W(U,T("Checking\u2026")),x((L)=>z(U,"fg",Y.textMuted,L)),U}}),null),F(K,I(X0,{get when(){return J.copilotStatus()},children:(U)=>(()=>{var L=V("box"),M=V("text");return W(L,M),z(L,"flexDirection","column"),z(L,"gap",0),z(M,"wrapMode","word"),F(M,()=>Z(U())),F(L,()=>{let D=U().account;if(D.kind==="token")return(()=>{var A=V("text");return F(A,()=>`\u25CF Token configured (${D.source})`),x((R)=>z(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)=>z(A,"fg",Y.success,R)),A})();return(()=>{var A=V("text");return W(A,T("\u25CB Not logged in")),x((R)=>z(A,"fg",Y.textMuted,R)),A})()},null),F(L,I(X0,{get when(){return U().accountError},children:(D)=>(()=>{var A=V("text");return z(A,"wrapMode","word"),F(A,()=>`! ${D()}`),x((R)=>z(A,"fg",Y.warning,R)),A})()}),null),x((D)=>z(M,"fg",U().binary.found?Y.textMuted:Y.warning,D)),L})()}),null),x((U)=>{var L=Y.text,M=p0.BOLD,D=Y.textMuted,A=Y.text,R=p0.BOLD,l=Y.text,g=p0.BOLD,S=Y.text,C=p0.BOLD;return L!==U.e&&(U.e=z(G,"fg",L,U.e)),M!==U.t&&(U.t=z(G,"attributes",M,U.t)),D!==U.a&&(U.a=z(X,"fg",D,U.a)),A!==U.o&&(U.o=z(q,"fg",A,U.o)),R!==U.i&&(U.i=z(q,"attributes",R,U.i)),l!==U.n&&(U.n=z(H,"fg",l,U.n)),g!==U.s&&(U.s=z(H,"attributes",g,U.s)),S!==U.h&&(U.h=z(j,"fg",S,U.h)),C!==U.r&&(U.r=z(j,"attributes",C,U.r)),U},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),f})()}function k4(J){let{theme:Y}=u0(),Z=()=>J.level()==="body"&&J.bodyRow()===0,f=()=>J.level()==="body"&&J.bodyRow()===1,G=()=>J.level()==="body"&&J.bodyRow()===2;return(()=>{var X=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"),M=V("text"),D=V("box"),A=V("text");return W(X,Q),W(X,q),W(X,B),z(X,"flexDirection","column"),z(X,"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"),F(j,()=>J.title().trim()||"(enter to edit)"),W(U,L),W(U,M),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(M,"wrapMode","none"),F(M,()=>J.body().trim()||"(enter to edit)"),W(D,A),z(D,"flexDirection","row"),z(D,"paddingLeft",1),z(D,"paddingRight",1),z(D,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(2),J.submit()}),W(A,T("[enter] Send to GitHub Discussions")),F(X,I(X0,{get when(){return J.status()},get children(){var R=V("text");return z(R,"wrapMode","word"),F(R,()=>J.status()),x((l)=>z(R,"fg",J.status().startsWith("error:")?Y.warning:Y.success,l)),R}}),null),x((R)=>{var l=Y.text,g=p0.BOLD,S=Y.textMuted,C=Z()?Y.primary:void 0,k=Z()?Y.selectedListItemText:Y.text,$=p0.BOLD,G0=Z()?Y.selectedListItemText:Y.textMuted,s=f()?Y.primary:void 0,J0=f()?Y.selectedListItemText:Y.text,E=p0.BOLD,Q0=f()?Y.selectedListItemText:Y.textMuted,e=G()?Y.primary:Y.backgroundElement,j0=G()?Y.selectedListItemText:Y.accent,o=p0.BOLD;return l!==R.e&&(R.e=z(Q,"fg",l,R.e)),g!==R.t&&(R.t=z(Q,"attributes",g,R.t)),S!==R.a&&(R.a=z(q,"fg",S,R.a)),C!==R.o&&(R.o=z(H,"backgroundColor",C,R.o)),k!==R.i&&(R.i=z(K,"fg",k,R.i)),$!==R.n&&(R.n=z(K,"attributes",$,R.n)),G0!==R.s&&(R.s=z(j,"fg",G0,R.s)),s!==R.h&&(R.h=z(U,"backgroundColor",s,R.h)),J0!==R.r&&(R.r=z(L,"fg",J0,R.r)),E!==R.d&&(R.d=z(L,"attributes",E,R.d)),Q0!==R.l&&(R.l=z(M,"fg",Q0,R.l)),e!==R.u&&(R.u=z(D,"backgroundColor",e,R.u)),j0!==R.c&&(R.c=z(A,"fg",j0,R.c)),o!==R.w&&(R.w=z(A,"attributes",o,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}),X})()}function I4(J){let{theme:Y}=u0(),Z=()=>J.level()==="body"&&J.bodyRow()===0,f=()=>J.level()==="body"&&J.bodyRow()===1,G=()=>FX(MX(J.hasDaemon),"remote-projects"),X=()=>J.level()==="body"&&J.bodyRow()===G(),Q=()=>FX(MX(J.hasDaemon),"auto-status"),q=()=>J.level()==="body"&&J.bodyRow()===Q(),B=()=>FX(MX(J.hasDaemon),"dispatcher"),H=()=>J.level()==="body"&&J.bodyRow()===B();return(()=>{var K=V("box"),j=V("text"),U=V("text"),L=V("box"),M=V("text"),D=V("text"),A=V("box"),R=V("text"),l=V("text"),g=V("box"),S=V("text"),C=V("text"),k=V("box"),$=V("text"),G0=V("text"),s=V("box"),J0=V("text");return W(K,j),W(K,U),W(K,L),W(K,D),W(K,A),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,M),z(L,"flexDirection","row"),z(L,"paddingLeft",1),z(L,"paddingRight",1),z(L,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(0),J.confirmReset()}),W(M,T("[enter] Reset")),F(K,I(X0,{get when(){return J.hasDaemon},get children(){var E=V("box"),Q0=V("text"),e=V("text"),j0=V("box"),o=V("text");return W(E,Q0),W(E,e),W(E,j0),z(E,"flexDirection","column"),z(E,"gap",0),z(E,"paddingTop",1),W(Q0,T("Restart backend")),W(e,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(e,"wrapMode","word"),W(j0,o),z(j0,"flexDirection","row"),z(j0,"paddingLeft",1),z(j0,"paddingRight",1),z(j0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(1),J.confirmRestartDaemon()}),W(o,T("[enter] Restart")),x((p)=>{var _=Y.text,f0=p0.BOLD,a=Y.textMuted,L0=f()?Y.primary:Y.backgroundElement,m=f()?Y.selectedListItemText:Y.accent,b=p0.BOLD;return _!==p.e&&(p.e=z(Q0,"fg",_,p.e)),f0!==p.t&&(p.t=z(Q0,"attributes",f0,p.t)),a!==p.a&&(p.a=z(e,"fg",a,p.a)),L0!==p.o&&(p.o=z(j0,"backgroundColor",L0,p.o)),m!==p.i&&(p.i=z(o,"fg",m,p.i)),b!==p.n&&(p.n=z(o,"attributes",b,p.n)),p},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),E}}),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(A,R),W(A,l),W(A,g),W(A,C),W(A,k),W(A,G0),W(A,s),z(A,"flexDirection","column"),z(A,"gap",0),z(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`.")),z(l,"wrapMode","word"),W(g,S),z(g,"flexDirection","row"),z(g,"paddingLeft",1),z(g,"paddingRight",1),z(g,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(G()),J.toggleRemoteProjects()}),F(S,()=>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.")),z(C,"wrapMode","word"),W(k,$),z(k,"flexDirection","row"),z(k,"paddingLeft",1),z(k,"paddingRight",1),z(k,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(Q()),J.toggleAutoStatus()}),F($,()=>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(s,J0),z(s,"flexDirection","row"),z(s,"paddingLeft",1),z(s,"paddingRight",1),z(s,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(B()),J.toggleDispatcher()}),F(J0,()=>J.dispatcherEnabled()?"[x] Field-notes dispatcher (on)":"[ ] Field-notes dispatcher (off)"),x((E)=>{var Q0=Y.text,e=p0.BOLD,j0=Y.textMuted,o=Z()?Y.primary:Y.backgroundElement,p=Z()?Y.selectedListItemText:Y.warning,_=p0.BOLD,f0=Y.textMuted,a=Y.text,L0=p0.BOLD,m=Y.textMuted,b=X()?Y.primary:Y.backgroundElement,t=X()?Y.selectedListItemText:Y.text,q0=J.remoteProjectsEnabled()?p0.BOLD:void 0,M0=Y.textMuted,S0=q()?Y.primary:Y.backgroundElement,h0=q()?Y.selectedListItemText:Y.text,u=J.autoStatusEnabled()?p0.BOLD:void 0,D0=Y.textMuted,z0=H()?Y.primary:Y.backgroundElement,g0=H()?Y.selectedListItemText:Y.text,C0=J.dispatcherEnabled()?p0.BOLD:void 0;return Q0!==E.e&&(E.e=z(j,"fg",Q0,E.e)),e!==E.t&&(E.t=z(j,"attributes",e,E.t)),j0!==E.a&&(E.a=z(U,"fg",j0,E.a)),o!==E.o&&(E.o=z(L,"backgroundColor",o,E.o)),p!==E.i&&(E.i=z(M,"fg",p,E.i)),_!==E.n&&(E.n=z(M,"attributes",_,E.n)),f0!==E.s&&(E.s=z(D,"fg",f0,E.s)),a!==E.h&&(E.h=z(R,"fg",a,E.h)),L0!==E.r&&(E.r=z(R,"attributes",L0,E.r)),m!==E.d&&(E.d=z(l,"fg",m,E.d)),b!==E.l&&(E.l=z(g,"backgroundColor",b,E.l)),t!==E.u&&(E.u=z(S,"fg",t,E.u)),q0!==E.c&&(E.c=z(S,"attributes",q0,E.c)),M0!==E.w&&(E.w=z(C,"fg",M0,E.w)),S0!==E.m&&(E.m=z(k,"backgroundColor",S0,E.m)),h0!==E.f&&(E.f=z($,"fg",h0,E.f)),u!==E.y&&(E.y=z($,"attributes",u,E.y)),D0!==E.g&&(E.g=z(G0,"fg",D0,E.g)),z0!==E.p&&(E.p=z(s,"backgroundColor",z0,E.p)),g0!==E.b&&(E.b=z(J0,"fg",g0,E.b)),C0!==E.T&&(E.T=z(J0,"attributes",C0,E.T)),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}),K})()}function b4(){let{theme:J}=u0(),Y=lK(),Z=Object.keys(XH).sort();return(()=>{var f=V("box"),G=V("text"),X=V("text"),Q=V("box"),q=V("text"),B=V("text"),H=V("text"),K=V("text");return W(f,G),W(f,X),W(f,Q),W(f,H),W(f,K),z(f,"flexDirection","column"),z(f,"gap",1),W(G,T("Keybindings")),W(X,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(X,"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"),F(B,()=>Y.path,null),F(B,()=>Y.exists?"":" (not created yet)",null),F(f,I(X0,{get when(){return!Y.exists},get children(){var j=V("box"),U=V("text"),L=V("text"),M=V("text"),D=V("text"),A=V("text"),R=V("text"),l=V("text"),g=V("text"),S=V("text"),C=V("text");return W(j,U),W(j,L),W(j,M),W(j,D),W(j,A),W(j,R),W(j,l),W(j,g),W(j,S),W(j,C),z(j,"flexDirection","column"),z(j,"gap",0),W(U,T("Example")),W(L,T("bindings:")),W(M,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(S,T(" bindings:")),W(C,T(" palette.open: [cmd+p, ctrl+p]")),x((k)=>{var $=J.text,G0=p0.BOLD,s=J.textMuted,J0=J.textMuted,E=J.textMuted,Q0=J.textMuted,e=J.textMuted,j0=J.textMuted,o=J.textMuted,p=J.textMuted,_=J.textMuted;return $!==k.e&&(k.e=z(U,"fg",$,k.e)),G0!==k.t&&(k.t=z(U,"attributes",G0,k.t)),s!==k.a&&(k.a=z(L,"fg",s,k.a)),J0!==k.o&&(k.o=z(M,"fg",J0,k.o)),E!==k.i&&(k.i=z(D,"fg",E,k.i)),Q0!==k.n&&(k.n=z(A,"fg",Q0,k.n)),e!==k.s&&(k.s=z(R,"fg",e,k.s)),j0!==k.h&&(k.h=z(l,"fg",j0,k.h)),o!==k.r&&(k.r=z(g,"fg",o,k.r)),p!==k.d&&(k.d=z(S,"fg",p,k.d)),_!==k.l&&(k.l=z(C,"fg",_,k.l)),k},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0}),j}}),H),F(f,I(X0,{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")),F(j,I(X0,{get when(){return Y.applied.length===0},get children(){var L=V("text");return W(L,T("none")),x((M)=>z(L,"fg",J.textMuted,M)),L}}),null),F(j,I(e0,{get each(){return Y.applied},children:(L)=>(()=>{var M=V("text");return z(M,"wrapMode","word"),F(M,()=>`${L.id} \u2192 ${L.keys.length>0?L.keys.join(" / "):"(unbound)"} (default: ${L.defaultKeys.join(" / ")})`),x((D)=>z(M,"fg",J.text,D)),M})()}),null),x((L)=>{var M=J.text,D=p0.BOLD;return M!==L.e&&(L.e=z(U,"fg",M,L.e)),D!==L.t&&(L.t=z(U,"attributes",D,L.t)),L},{e:void 0,t:void 0}),j}}),H),F(f,I(X0,{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")),F(j,I(e0,{get each(){return Y.warnings},children:(L)=>(()=>{var M=V("text");return z(M,"wrapMode","word"),F(M,`! ${L}`),x((D)=>z(M,"fg",J.warning,D)),M})()}),null),x((L)=>{var M=J.warning,D=p0.BOLD;return M!==L.e&&(L.e=z(U,"fg",M,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"),F(K,()=>`Fixed (not rebindable): ${Z.join(", ")}.`),x((j)=>{var U=J.text,L=p0.BOLD,M=J.textMuted,D=J.text,A=p0.BOLD,R=J.textMuted,l=J.textMuted,g=J.textMuted;return U!==j.e&&(j.e=z(G,"fg",U,j.e)),L!==j.t&&(j.t=z(G,"attributes",L,j.t)),M!==j.a&&(j.a=z(X,"fg",M,j.a)),D!==j.o&&(j.o=z(q,"fg",D,j.o)),A!==j.i&&(j.i=z(q,"attributes",A,j.i)),R!==j.n&&(j.n=z(B,"fg",R,j.n)),l!==j.s&&(j.s=z(H,"fg",l,j.s)),g!==j.h&&(j.h=z(K,"fg",g,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 N4=y(()=>{w();w();w();w();w();w();w();w();G1();yj();S1();rz();nj()});import{TextAttributes as dS}from"@opentui/core";function nS(J){return J.split(/[-_]+/).filter((Y)=>Y.length>0).map((Y)=>Y.charAt(0).toUpperCase()+Y.slice(1)).join(" ")}function jf(J){let Y=N1(),Z=u0(),f=o1(),{theme:G}=Z,[X,Q]=r("sidebar"),[q,B]=r("general"),[H,K]=r(0),[j,U]=r(0),[L,M]=r(""),[D,A]=r(""),[R,l]=r(""),g=W0(()=>Z.all().slice().sort()),[,S]=r(Math.max(0,g().findIndex((O)=>O===Z.selected))),C=M4(J.orchestrator),[k,$]=r(null),[G0,s]=r(null),[J0,E]=r(null),Q0=!1;a0(()=>{if(q()!=="accounts"||Q0)return;Q0=!0,qz().then($),Bz().then(s),Hz().then(E)});function e(){return R4(q(),{themeNames:g(),focusAccentSlots:qf,engineList:C0(),hasDaemon:C})}function j0(){return e().length}function o(){return oZ(J.kv.get(PY,rZ))}function p(O){if(Z.selected===O)return;if(!Z.set(O))return;J.kv.set("activeTheme",O),J.onVisualPrefsChange?.()}function _(O){if(Z.transparentBackground===O)return;Z.setTransparentBackground(O),J.kv.set("transparentBackground",O),J.onVisualPrefsChange?.()}function f0(){_(!Z.transparentBackground)}function a(O){if(Z.focusAccent===O)return;Z.setFocusAccent(O),J.kv.set("focusAccent",O),J.onVisualPrefsChange?.()}function L0(O){J.kv.set(PY,O)}function m(){return J.kv.get("notifications.toast.enabled",!0)!==!1}function b(){return J.kv.get("notifications.sound.enabled",!0)!==!1}function t(){J.kv.set("notifications.toast.enabled",!m())}function q0(){J.kv.set("notifications.sound.enabled",!b())}function M0(){return J.kv.get("experimental.remoteProjects",!1)===!0}function S0(){J.kv.set("experimental.remoteProjects",!M0())}function h0(){return J.kv.get(lZ,!1)===!0}function u(){J.kv.set(lZ,!h0())}function D0(){return J.kv.get($Z,!1)===!0}function z0(){J.kv.set($Z,!D0())}function g0(){let O=J.kv.get("customEngineIds",[]);return Array.isArray(O)?O.filter((P)=>typeof P==="string"&&P.trim().length>0):[]}function C0(){return[...x1,...g0()]}function y0(O){let P=J.kv.get(pJ(O),"");return typeof P==="string"?P.trim():""}function n0(O){return y0(O)||nG(O).join(" ")}function P0(O){return e1(O)&&y0(O).length===0&&!d(O)}function O0(O){let P=J.kv.get(_J(O),"");return typeof P==="string"?P.trim():""}function d(O){return O0(O).length>0}function Y0(O){return O0(O)||tB[O]||O}let[A0,N]=r(O1("lastSelectedVendor")??I1);function i0(O){return A0()===O}function k0(O){m1("lastSelectedVendor",O),J.kv.set("lastSelectedVendor",O),N(O)}async function N0(O){let P=await ZY.show(Y,n0(O),{dialogTitle:`${Y0(O)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(P===void 0)return;J.kv.set(pJ(O),P.trim())}async function b0(O){let P=await ZY.show(Y,Y0(O),{dialogTitle:`${Y0(O)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(P===void 0)return;J.kv.set(_J(O),P.trim())}function _0(O){if(J.kv.set(pJ(O),""),J.kv.set(_J(O),""),!e1(O))J.kv.set("customEngineIds",g0().filter((P)=>P!==O)),U((P)=>Math.max(0,Math.min(P,C0().length)))}async function n(){let O=await ZY.show(Y,"",{dialogTitle:"Add engine",fieldLabel:"id",submitLabel:"next",placeholder:"lowercase slug, e.g. aider"});if(O===void 0)return;let P=O.trim().toLowerCase();if(!P||e1(P)||g0().includes(P))return;let F0=await ZY.show(Y,"",{dialogTitle:`Add engine \xB7 ${P}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(F0===void 0)return;let w0=await ZY.show(Y,P,{dialogTitle:`Add engine \xB7 ${P}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(J.kv.set("customEngineIds",[...g0(),P]),F0.trim())J.kv.set(pJ(P),F0.trim());let l0=w0?.trim()??"";J.kv.set(_J(P),l0&&l0!==P?l0:nS(P))}function Z0(){if(q()!=="engines"||X()!=="body")return null;let O=Qq(e(),j());return O?.kind==="engine"?O.vendor:null}function H0(){return uf(J.kv.get(hY,xz))}function V0(){let O=_Z.indexOf(H0()),P=_Z[(O+1)%_Z.length];if(P)J.kv.set(hY,P)}function K0(){let O=J.kv.get(QZ,"");return typeof O==="string"?O:""}async function s0(){let O=await ZY.show(Y,K0(),{dialogTitle:"Custom editor command (use {file} for the path)",fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(O===void 0)return;let P=O.trim();if(J.kv.set(QZ,P),P)J.kv.set(hY,"custom")}async function T0(){let O=await ZY.show(Y,L(),{dialogTitle:"Feedback title",fieldLabel:"title",submitLabel:"save"});if(O===void 0)return;M(O),l("")}async function L1(){let O=await ZY.show(Y,D(),{dialogTitle:"Feedback body",fieldLabel:"body",submitLabel:"save",allowEmpty:!0});if(O===void 0)return;A(O),l("")}async function I0(){l("submitting...");try{let O=ZG({title:L(),body:D()});l(`sent: ${O.url}`),M(""),A("")}catch(O){l(`error: ${O instanceof Error?O.message:String(O)}`)}}function x0(){if(X()!=="sidebar"||j0()===0)return;if(Q("body"),U(0),q()==="general")S(0)}function z1(O){if(X()==="sidebar"){let w0=(H()+O+Hf.length)%Hf.length;K(w0);let l0=Hf[w0];if(l0)B(l0.id),U(0);return}let P=j0();if(P===0)return;let F0=(j()+O+P)%P;if(U(F0),Qq(e(),F0)?.kind==="theme")S(F0)}function B1(O){B(O),K(Hf.findIndex((P)=>P.id===O)),U(0),Q("sidebar")}let Q1={theme:(O)=>p(O.name),transparent:()=>f0(),focusAccent:(O)=>a(O.slot),toast:()=>t(),sound:()=>q0(),surface:(O)=>L0(O.surface),editorKind:()=>V0(),editorCustom:()=>void s0(),engine:(O)=>void N0(O.vendor),engineAdd:()=>void n(),feedbackTitle:()=>void T0(),feedbackBody:()=>void L1(),feedbackSend:()=>void I0(),devReset:()=>void vj(Y,J.kv,f),devRestartDaemon:()=>void mj(Y,J.orchestrator,f),devRemoteProjects:()=>S0(),devAutoStatus:()=>u(),devDispatcher:()=>z0()};function J1(){let O=Qq(e(),j());if(!O)return;Q1[O.kind](O)}return V1(()=>({enabled:!J.standalone||Y.stack.length===0,bindings:[{key:"down",cmd:()=>z1(1)},{key:"up",cmd:()=>z1(-1)},{key:"j",cmd:()=>z1(1)},{key:"k",cmd:()=>z1(-1)},{key:"tab",cmd:()=>z1(1)},{key:"right",cmd:x0},{key:"l",cmd:x0},{key:"left",cmd:()=>Q("sidebar")},{key:"h",cmd:()=>Q("sidebar")},{key:"return",cmd:()=>{if(X()==="sidebar"){x0();return}J1()}},{key:"t",cmd:f0},{key:"r",cmd:()=>{let O=Z0();if(O)b0(O)}},{key:"x",cmd:()=>{let O=Z0();if(O)_0(O)}},{key:"d",cmd:()=>{let O=Z0();if(O)k0(O)}}]})),(()=>{var O=V("box"),P=V("box"),F0=V("text"),w0=V("text"),l0=V("box"),f1=V("box"),k1=V("box"),M1=V("text");return W(O,P),W(O,l0),W(O,k1),z(O,"paddingLeft",2),z(O,"paddingRight",2),z(O,"paddingBottom",1),z(O,"gap",1),W(P,F0),W(P,w0),z(P,"flexDirection","row"),z(P,"justifyContent","space-between"),W(F0,T("Settings")),W(w0,T("esc")),z(w0,"onMouseUp",()=>J.onClose()),W(l0,f1),z(l0,"flexDirection","row"),z(l0,"gap",2),F(l0,I(g4,{level:X,cursor:H,switchSection:B1}),f1),z(f1,"flexGrow",1),z(f1,"flexShrink",1),z(f1,"flexDirection","column"),z(f1,"gap",1),F(f1,I(X0,{get when(){return q()==="general"},get children(){return I(C4,{level:X,bodyRow:j,setLevel:Q,setBodyRow:U,themeNames:g,setThemeCursor:S,selectTheme:p,toggleTransparent:f0,selectFocusAccent:a,toastEnabled:m,soundEnabled:b,toggleToast:t,toggleSound:q0,settingsSurface:o,selectSurface:L0,editorKind:H0,cycleEditorKind:V0,editorCustomCommand:K0,editEditorCustom:()=>void s0()})}}),null),F(f1,I(X0,{get when(){return q()==="engines"},get children(){return I(S4,{level:X,bodyRow:j,setLevel:Q,setBodyRow:U,get vendors(){return C0()},isCustom:(r0)=>!e1(r0),displayName:Y0,commandText:n0,isDefault:P0,isDefaultEngine:i0,editEngine:(r0)=>void N0(r0),renameEngine:(r0)=>void b0(r0),resetEngine:_0,onAddEngine:()=>void n()})}}),null),F(f1,I(X0,{get when(){return q()==="accounts"},get children(){return I(y4,{claudeStatus:k,codexStatus:G0,copilotStatus:J0})}}),null),F(f1,I(X0,{get when(){return q()==="keys"},get children(){return I(b4,{})}}),null),F(f1,I(X0,{get when(){return q()==="feedback"},get children(){return I(k4,{level:X,bodyRow:j,setLevel:Q,setBodyRow:U,title:L,body:D,status:R,editTitle:()=>void T0(),editBody:()=>void L1(),submit:()=>void I0()})}}),null),F(f1,I(X0,{get when(){return q()==="dev"},get children(){return I(I4,{level:X,bodyRow:j,setLevel:Q,setBodyRow:U,hasDaemon:C,confirmReset:()=>void vj(Y,J.kv,f),confirmRestartDaemon:()=>void mj(Y,J.orchestrator,f),remoteProjectsEnabled:M0,toggleRemoteProjects:S0,autoStatusEnabled:h0,toggleAutoStatus:u,dispatcherEnabled:D0,toggleDispatcher:z0})}}),null),W(k1,M1),z(k1,"paddingTop",0),W(M1,T("j/k pick \xB7 h/l switch level \xB7 enter activate \xB7 esc close")),x((r0)=>{var U0=dS.BOLD,R1=G.text,p1=G.textMuted,DJ=G.textMuted;return U0!==r0.e&&(r0.e=z(F0,"attributes",U0,r0.e)),R1!==r0.t&&(r0.t=z(F0,"fg",R1,r0.t)),p1!==r0.a&&(r0.a=z(w0,"fg",p1,r0.a)),DJ!==r0.o&&(r0.o=z(M1,"fg",DJ,r0.o)),r0},{e:void 0,t:void 0,a:void 0,o:void 0}),O})()}var ij=y(()=>{w();w();w();w();w();w();w();w();G1();xZ();gJ();IQ();mG();Tz();D1();NJ();QJ();S1();wz();UJ();yJ();hj();O4();nj();N4();jf.show=(J,Y,Z)=>{let f=!1;return new Promise((G)=>{J.replace(()=>I(jf,{kv:Y,orchestrator:Z,onVisualPrefsChange:()=>{f=!0},onClose:()=>G({visualPrefsChanged:f})}),()=>G({visualPrefsChanged:f}))})}});import{TextAttributes as iS}from"@opentui/core";function E4(){let{theme:J}=u0(),Y=DY(),Z=eQ(),f=()=>Z.toasts().slice(-T4),G=()=>Math.max(0,Y().width-lS-$S),X=()=>Math.max(0,Y().height-aS-T4-1);return I(X0,{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),F(Q,I(e0,{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"),F(U,K),z(L,"wrapMode","none"),F(L,()=>q.title),x((M)=>{var D=B(),A=H(),R=iS.BOLD,l=H();return D!==M.e&&(M.e=z(j,"backgroundColor",D,M.e)),A!==M.t&&(M.t=z(U,"fg",A,M.t)),R!==M.a&&(M.a=z(U,"attributes",R,M.a)),l!==M.o&&(M.o=z(L,"fg",l,M.o)),M},{e:void 0,t:void 0,a:void 0,o:void 0}),j})()}})),x((q)=>{var B=G(),H=X();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 T4=4,lS=40,$S=2,aS=2;var u4=y(()=>{w();w();w();w();w();w();w();G1();Jq();S1()});import{TextAttributes as pS}from"@opentui/core";function _S(J,Y){return`daemon is ${J?`v${J}`:"an older build"} \u2014 you launched v${Y}. Run \`kobe daemon restart\` then \`kobe reload\``}function x4(J){let{theme:Y}=u0(),Z=()=>Math.max(4,J.width()-2);return I(X0,{get when(){return J.stale()},get children(){var f=V("box"),G=V("text"),X=V("box"),Q=V("text"),q=V("box"),B=V("text");return W(f,G),W(f,X),W(f,q),z(f,"flexDirection","column"),z(f,"flexShrink",0),z(f,"paddingLeft",1),z(f,"paddingRight",1),z(f,"paddingBottom",1),z(G,"wrapMode","none"),F(G,()=>"\u2594".repeat(Z())),W(X,Q),z(X,"flexDirection","row"),z(X,"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"),F(B,()=>_S(J.daemonVersion(),J.clientVersion)),x((H)=>{var{warning:K,warning:j}=Y,U=pS.BOLD,L=Y.text;return K!==H.e&&(H.e=z(G,"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 w4=y(()=>{w();w();w();w();w();w();w();G1();S1()});function h4(J,Y){return J.find((Z)=>Z.id!==Y&&!Z.archived)}async function rS(J){let Y=J.tasks.find((X)=>X.id===J.taskId);if(!Y)return null;let Z=!Y.archived;try{await J.orch.setArchived(J.taskId,Z)}catch(X){return J.logger.error(`${J.logPrefix} archive failed:`,X),null}if(!Z)return{archived:Z};let f=W1(J.taskId),G=h4(J.tasks,J.taskId);if(await VY(f,G?W1(G.id):void 0).catch((X)=>{J.logger.error(`${J.logPrefix} switch-client failed:`,X)}),J.updateActiveTask)await J.orch.setActiveTask(G?.id??null).catch(()=>{});return await xJ(f).catch((X)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,X)}),{archived:Z,nextTask:G}}async function oS(J){let Y=h4(J.tasks,J.taskId),Z=W1(J.taskId);if(J.switchBeforeKill)await VY(Z,Y?W1(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 xJ(Z).catch((f)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,f)}),{nextTask:Y}}async function P4(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 rS({orch:J.orch,tasks:J.tasks(),taskId:Y,logger:J.logger,logPrefix:J.logPrefix,updateActiveTask:J.updateActiveTask}))return;await J.reload?.()}async function v4(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 G=!1;try{await J.orch.deleteTask(Y),G=!0}catch(Q){if((Q instanceof Error?Q.message:String(Q)).includes(nq)){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(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(!G)return;let{nextTask:X}=await oS({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,X)}async function m4(J,Y){let Z=J.tasks().find((G)=>G.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(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 c4(J,Y){let Z=J.tasks().find((G)=>G.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(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 d4(J,Y){let Z=J.tasks().find((X)=>X.id===Y);if(!Z||!J.orch)return;let f=await bY(),G=CZ(f,Z.vendor??I1);try{await J.orch.setVendor(Y,G)}catch(X){J.logger.error(`${J.logPrefix} task.setVendor failed:`,X),J.notifyError?.(`Couldn't switch engine: ${X instanceof Error?X.message:String(X)}`);return}J.notifyInfo?.(`Engine \u2192 ${aZ(G)} (applies on reopen)`),await J.reload?.()}async function n4(J){let Y=IJ(),Z=J.cursorRepo()??Y[0]??process.cwd();if(J.openCreateSurface&&await J.openCreateSurface(Z))return;let f=J.lastVendor()??I1,G=await bY();if(G.length===0)J.notifyInfo?.("No engine CLI detected \u2014 install claude or codex, or add one in Settings \u2192 Engines");let X=J.orch,Q=await J.promptNewTask(Z,Y,{defaultVendor:f,availableVendors:G,discoverAdoptable:X?(B)=>X.discoverAdoptableWorktrees(B):void 0});if(!Q)return;if(J.rememberVendor(Q.vendor),CY(Q.repo),J.onRepoSaved?.(),!X){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 X.adoptWorktree({repo:Q.repo,worktreePath:B.worktreePath,branch:B.branch,vendor:Q.vendor})).id;else q=(await X.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 i4=y(()=>{xZ();gJ();$q();D1();NJ();QJ();ZJ()});import{spawn as sS}from"child_process";import{existsSync as tS}from"fs";import{basename as eS,delimiter as Jy,isAbsolute as Yy,join as Zy}from"path";function lj(J,Y,Z){if(Yy(J))return Z(J);let f=Y.PATH??"";for(let G of f.split(Jy)){if(!G)continue;if(Z(Zy(G,J)))return!0}return!1}function Xy(J){let Y=eS(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 l4(J={}){let Y=J.env??process.env,Z=J.platform??process.platform,f=J.exists??tS,G=Y.KOBE_OPEN_EDITOR?.trim();if(G)return{id:"env",label:Xy(G),command:G,args:[]};for(let X of fy)if(lj(X.command,Y,f))return{id:X.id,label:X.label,command:X.command,args:[]};if(Z==="darwin"&&lj("open",Y,f)){for(let X of Gy)if(X.paths.some((Q)=>f(Q)))return{id:X.id,label:X.label,command:"open",args:["-a",X.appName]};return{id:"mac-open",label:"Finder",command:"open",args:[]}}if(Z==="linux"&&lj("xdg-open",Y,f))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function zy(J,Y){return[Y.command,[...Y.args,J]]}function $4(J,Y,Z={}){if(!J)return!1;let f=Z.spawn??sS,[G,X]=zy(J,Y);try{let Q=f(G,X,{detached:!0,stdio:"ignore"});if(Q.pid===void 0)return!1;return Q.unref(),!0}catch{return!1}}var fy,Gy;var a4=y(()=>{fy=[{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"}],Gy=[{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 qq(J){let Y=new Map;function Z(f){let G=Y.get(f);if(!G){let[X,Q]=r(J.initial,J.equals?{equals:J.equals}:void 0);G={read:X,write:(q)=>Q(()=>q),inFlight:!1,nextAllowedAt:0},Y.set(f,G)}return G}return{read(f){if(!f)return J.initial;return Z(f).read()},poll(f){if(!f)return;let G=Z(f);OQ(G,J,(X)=>J.run(f,X),(X)=>G.write(X))},reset(){Y.clear()}}}var OX=y(()=>{G1();AQ();AQ()});import{stat as Qy}from"fs/promises";import{join as qy}from"path";async function Wy(J){try{let Y=await Qy(qy(J,".git","HEAD"));return`${Y.mtimeMs}:${Y.size}`}catch{return null}}async function Vy(J,Y,Z=mY){let f=await Wy(J);if(f!==null){let q=p4.get(J);if(q&&q.fingerprint===f)return q.value}let G="",X=await Z("git",["symbolic-ref","--short","HEAD"],{cwd:J,env:CJ(),signal:Y}),Q=X.status===0?X.stdout.trim():"";if(Q&&Q!=="HEAD")G=Q;else if((await Z("git",["rev-parse","--verify","HEAD"],{cwd:J,env:CJ(),signal:Y})).status===0)G="(detached)";if(f!==null)p4.set(J,{fingerprint:f,value:G});return G}function r4(J){return _4.read(J)}function o4(J){_4.poll(J)}var By=2000,Hy=30000,jy=1500,p4,_4;var s4=y(()=>{qZ();OX();p4=new Map;_4=qq({initial:"",timeoutMs:By,slowRetryMs:Hy,minIntervalMs:jy,run:(J,Y)=>Vy(J,Y)})});function $j(J){let Y=J.scheduleTimeout??((B,H)=>{let K=setTimeout(B,H);return()=>clearTimeout(K)}),Z=!1,f=null,G=()=>{Z=!0,f?.(),f=Y(()=>{Z=!1,f=null},700)},X=()=>{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(){X(),Q(1)},moveUp(){X(),Q(-1)},selectCurrent(){X();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)X(),q(0);else G()},pressShiftG(){X(),q(J.getFlatIds().length-1)},isChordArmed(){return Z},disarmChord(){X()}}}function t4(J){let Y=$j({getCursor:()=>J.cursorIndex(),setCursor:(X)=>J.setCursorIndex(X),getFlatIds:()=>J.flatTaskIds(),onSelect:(X)=>J.onSelect(X)}),Z=()=>{let X=J.flatTaskIds(),Q=J.cursorIndex();if(Q<0||Q>=X.length)return;return X[Q]},f=()=>J.searchMode?.()??!1,G=()=>J.moveMode?.()??!1;V1(()=>({enabled:J.focused()&&!f(),bindings:OZ({"sidebar.nav":(X,Q)=>{let q=(Q??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":(X)=>{if(G())return;if(X.shift)Y.pressShiftG();else Y.pressG()},"sidebar.delete":()=>{if(G())return;let X=Z();if(X!==void 0)J.onDeleteRequest?.(X)},"sidebar.archive":()=>{if(G())return;let X=Z();if(X!==void 0)J.onArchiveRequest?.(X)},"sidebar.localMerge":(X)=>{if(!X.shift)return;let Q=Z();if(Q!==void 0)J.onLocalMergeRequest?.(Q)},"sidebar.rename":()=>{if(G())return;let X=Z();if(X!==void 0)J.onRenameRequest?.(X)},"sidebar.pin":(X)=>{if(G())return;if(!X.shift)return;let Q=Z();if(Q!==void 0)J.onPinRequest?.(Q)},"sidebar.search.enter":()=>{if(G())return;J.onSearchEnter?.()},"sidebar.sort":()=>{if(G())return;J.onSortModeToggle?.()},"sidebar.projectFilter":()=>{if(G())return;J.onProjectFilterToggle?.()}})})),V1(()=>({enabled:J.focused()&&G(),bindings:[{key:"escape",cmd:()=>J.onMoveModeExit?.()}]})),V1(()=>({enabled:J.focused(),bindings:OZ({"sidebar.view":(X,Q)=>{J.onViewSwitch?.((Q??0)%2===0?-1:1)}})})),V1(()=>({enabled:J.focused()&&f(),bindings:OZ({"sidebar.search.nav":(X,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 e4=y(()=>{BG();UJ()});function aj(J,Y){if(Y<=0)return"";if(J.length<=Y)return J;return`${J.slice(0,Math.max(0,Y-1))}\u2026`}function pj(J,Y){return` ${aj(J,Math.max(0,Y))}`}function Ly(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 Fy(J){if(J.kind==="main")return!1;return J.vendor!==void 0&&!e1(J.vendor)}function _j(J){let{task:Y}=J,Z=Y.kind==="main",f=Z?J.mainBranch??"":Y.branch,G=Ky[Y.status],X=J.activity?.state,Q=X!==void 0,q=Oy(X),B=Ly(X),H=Fy(Y)&&!Q,K=J.job!==void 0,j=K||!H&&(X==="running"||J.live||!Q&&!Z&&Y.status==="in_progress"),U=VG[J.spinnerFrame]??VG[0],L=K?"primary":H?"textMuted":B?.tone??(j?"primary":q?.tone??G.tone),M=H?Dy:Uy[Y.status],D=K?J.truncateBranch(My,J.subtitleBudget):B?J.truncateBranch(B.text,J.subtitleBudget):f.length>0?J.truncateBranch(f,J.subtitleBudget):J.truncateBranch(M,J.subtitleBudget),A=H?JU:q?.glyph??G.glyph,R=H?JU:q?.glyph??"\u2605";return{isMain:Z,titleText:Z?YY(Y.repo):Y.title,subtitleText:D,loading:j,stateGlyph:j?U:A,projectGlyph:j?U:R,tone:L}}function rj(J,Y){if(!J.loading)return J;let Z=VG[Y()%VG.length]??"\u280B";if(Z===J.stateGlyph&&Z===J.projectGlyph)return J;return{...J,stateGlyph:Z,projectGlyph:Z}}function Oy(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 Ky,Uy,VG,YU=100,JU="\xB7",Dy="no activity tracking",My="materializing";var ZU=y(()=>{QJ();Gq();Ky={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"}},Uy={done:"done",in_review:"in review",in_progress:"working",backlog:"\u2014",canceled:"canceled",error:"error"};VG=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function oj(J){return fU.read(J)}function sj(J){fU.poll(J)}var Ay=4000,Ry=60000,gy=1500,Cy,fU;var GU=y(()=>{qZ();OX();sf();OX();Cy={added:0,deleted:0},fU=qq({initial:Cy,equals:LY,timeoutMs:Ay,slowRetryMs:Ry,minIntervalMs:gy,run:async(J,Y)=>{let Z=await mY("git",["status","--porcelain=v1"],{cwd:J,env:CJ(),signal:Y});if(Z.status!==0)throw Error("git status failed");return of(Z.stdout)}})});import{TextAttributes as y1}from"@opentui/core";function zU(J,Y=yy){if(J.length<=Y)return J;return`${J.slice(0,Math.max(0,Y-1))}\u2026`}function ky(J){let Y=0;for(let Z of J)Y+=(Z.codePointAt(0)??0)>=4352?2:1;return Y}function Iy(J,Y){if(Y<=0||J.length<=Y)return J;return`\u2026${J.slice(J.length-Math.max(0,Y-1))}`}function QU(J){let{theme:Y}=u0(),Z=()=>J.focused?J.focused():!0,[f,G]=r("active"),[X,Q]=r(!1),[q,B]=r(""),[H,K]=r(null),j=()=>J.projectFilter?.()??H(),U=(d)=>{if(J.onProjectFilterChange)J.onProjectFilterChange(d);else K(d)};function L(){B(""),Q(!0),J.onSearchActiveChange?.(!0)}function M(d){Q(!1),B(""),J.onSearchActiveChange?.(!1)}a0(()=>{if(!X())return;let d=o1();if(!d)return;let Y0=(A0)=>{if(A0.defaultPrevented)return;if(!Z())return;if(A0.ctrl||A0.meta||A0.option)return;if(A0.name==="backspace"){B((k0)=>k0.slice(0,-1));return}let N=A0.sequence;if(!N||N.length!==1)return;let i0=N.charCodeAt(0);if(i0<32||i0===127)return;B((k0)=>k0+N)};d.keyInput.on("keypress",Y0),d1(()=>d.keyInput.off("keypress",Y0))});let[D,A]=r(0),R=setInterval(()=>A((d)=>d+1),Sy);d1(()=>clearInterval(R));let[l,g]=r(0),S=setInterval(()=>g((d)=>(d+1)%VG.length),YU);d1(()=>clearInterval(S));let C=()=>J.sortMode?.()??"default",k=W0(()=>B4(J.tasks(),f())),$=W0(()=>{let d=j();if(!d)return null;let Y0=vJ(d);return k().find((A0)=>vJ(A0.repo)===Y0)??null}),G0=W0(()=>$()?.repo??null),s=W0(()=>$()?.label??"all"),J0=W0(()=>{let d=$();return d?d.count:k().reduce((Y0,A0)=>Y0+A0.count,0)}),E=W0((d)=>W4(d,Ej(J.tasks(),f(),X()?q():"",C(),G0())),[]),Q0=W0(()=>uj(E())),e=W0(()=>j4(E())),j0=W0(()=>e().projectRows),o=W0(()=>e().taskRows),p=W0(()=>{let d=new Map;for(let Y0 of E())d.set(Y0.flatIndex,Y0);return d}),_=W0(()=>uj(Ej(J.tasks(),f(),"",C(),G0())).length),f0=W0(()=>o().length>0);a0(()=>{let d=j(),Y0=k();if(d!==null&&Y0.length>0&&(Y0.length<=1||$()===null))U(null)});function a(){let d=k();if(d.length<=1){U(null);return}let Y0=G0(),A0=Y0?vJ(Y0):null,N=A0===null?-1:d.findIndex((k0)=>vJ(k0.repo)===A0),i0=d[N+1];U(i0?.repo??null)}let L0=()=>J.width?J.width():XU,m=W0(()=>Math.max(6,L0()-9)),b=W0(()=>Math.max(6,L0()-16)),t=DY(),q0=W0(()=>Math.max(2,Math.min(10,Math.floor(t().height*0.25)))),[M0,S0]=r(null),[h0,u]=r(-1),D0,z0,g0,C0=new Map;a0(()=>{let d=J.width?J.width():XU,Y0=g0;if(!Y0)return;Y0.width=d,Y0.flexShrink=1,Y0.minHeight=0}),a0(BJ([h0,E],([d])=>{let Y0=p().get(d);if(!Y0)return;let A0=Y0.task.kind==="main"?D0:z0;if(!A0)return;if(A0.viewport.height<=0)return;let N=C0.get(d);if(!N)return;A0.scrollChildIntoView(N.id)})),a0(BJ(()=>[J.selectedId(),Q0()],([d,Y0])=>{let A0=c1(h0);if(d===null){if(A0===-1&&Y0.length>0)u(0);else if(A0>=Y0.length)u(Math.max(0,Y0.length-1));else if(Y0.length===0)u(-1);return}let N=Y0.indexOf(d);if(N>=0){if(N!==A0)u(N)}else if(Y0.length===0)u(-1);else if(A0<0||A0>=Y0.length)u(Y0.length-1)})),a0(BJ(f,()=>{let d=Q0();u(d.length>0?0:-1)},{defer:!0})),a0(BJ(G0,(d)=>u(H4(E(),d)),{defer:!0})),a0(BJ([X,q],()=>{if(!X())return;let d=Q0();u(d.length>0?0:-1)}));function y0(d){let Y0=f(),A0=AX.findIndex((k0)=>k0.view===Y0);if(A0<0)return;let N=(A0+d+AX.length)%AX.length,i0=AX[N];if(i0)G(i0.view)}t4({focused:Z,cursorIndex:h0,setCursorIndex:u,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,Y0)=>J.onMoveRequest?.(d,Y0),onMoveModeExit:()=>J.onMoveModeExit?.(),onRenameRequest:(d)=>J.onRenameRequest?.(d),onPinRequest:(d)=>J.onPinRequest?.(d),onViewSwitch:(d)=>y0(d),onSortModeToggle:()=>J.onSortModeToggle?.(),onProjectFilterToggle:()=>a(),searchMode:X,onSearchEnter:()=>L(),onSearchExit:(d)=>M(d)});let n0=(d)=>(()=>{var Y0=V("box"),A0=V("box"),N=V("text"),i0=V("text");return W(Y0,A0),z(Y0,"flexDirection","column"),z(Y0,"flexShrink",0),F(Y0,I(X0,{get when(){return d.topPad},get children(){var k0=V("box"),N0=V("text");return W(k0,N0),z(k0,"flexShrink",0),W(N0,T(" ")),z(N0,"wrapMode","none"),k0}}),A0),W(A0,N),W(A0,i0),z(A0,"flexDirection","row"),z(A0,"flexShrink",0),z(A0,"gap",1),z(A0,"paddingLeft",1),z(A0,"paddingRight",1),z(N,"wrapMode","none"),F(N,()=>d.label),z(i0,"wrapMode","none"),F(i0,()=>"\u2500".repeat(Math.max(2,L0()-10-d.label.length-(d.suffix?.length??0)))),F(A0,I(X0,{get when(){return d.suffix},get children(){var k0=V("text");return z(k0,"wrapMode","none"),F(k0,()=>d.suffix),x((N0)=>{var b0=Y.info,_0=y1.BOLD;return b0!==N0.e&&(N0.e=z(k0,"fg",b0,N0.e)),_0!==N0.t&&(N0.t=z(k0,"attributes",_0,N0.t)),N0},{e:void 0,t:void 0}),k0}}),null),x((k0)=>{var N0=Y.textMuted,b0=y1.BOLD,_0=Y.border;return N0!==k0.e&&(k0.e=z(N,"fg",N0,k0.e)),b0!==k0.t&&(k0.t=z(N,"attributes",b0,k0.t)),_0!==k0.a&&(k0.a=z(i0,"fg",_0,k0.a)),k0},{e:void 0,t:void 0,a:void 0}),Y0})(),P0=(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}},O0=(d)=>{let Y0=d.row.task,A0=d.row.flatIndex,N=()=>A0===h0(),i0=()=>Y0.id===J.selectedId(),k0=W0(()=>{let K0=J.chatRunState?.();if(!K0)return!1;let s0=`${Y0.id}:`;for(let[T0,L1]of K0)if(L1==="running"&&T0.startsWith(s0))return!0;return!1}),N0=W0(()=>{let K0=gQ(J.worktreeChanges?.(),Y0.worktreePath);if(K0)return K0;if(D(),!Y0.archived)sj(Y0.worktreePath);return oj(Y0.worktreePath)},void 0,{equals:LY}),b0=W0(()=>{return D(),o4(Y0.repo),r4(Y0.repo)}),_0=W0(()=>_j({task:Y0,activity:J.engineState?.().get(Y0.id),job:J.taskJobs?.().get(Y0.id),live:k0(),spinnerFrame:0,subtitleBudget:b(),truncateBranch:zU,mainBranch:b0()})),n=W0(()=>rj(_0(),l)),Z0=()=>!n().loading?Y.primary:P0(n().tone),H0=()=>N()?Y.focusAccent:i0()?Y.primary:void 0,V0=()=>N()||i0()?"\u258C":" ";return(()=>{var K0=V("box"),s0=V("box"),T0=V("box"),L1=V("text"),I0=V("box"),x0=V("text"),z1=V("text"),B1=V("box"),Q1=V("text"),J1=V("box"),O=V("text");return W(K0,s0),z(K0,"flexDirection","column"),z(K0,"gap",0),z(K0,"paddingBottom",0),W(s0,T0),W(s0,B1),LZ((P)=>{C0.set(A0,P),d1(()=>{if(C0.get(A0)===P)C0.delete(A0)})},s0),z(s0,"flexDirection","column"),z(s0,"gap",0),z(s0,"onMouseUp",()=>{if(J.onSelect(Y0.id),J.activateOnClick)J.onActivate?.(Y0.id)}),z(s0,"onMouseOver",(P)=>S0({task:Y0,x:P.x,y:P.y})),z(s0,"onMouseOut",()=>S0((P)=>P?.task.id===Y0.id?null:P)),W(T0,L1),W(T0,I0),z(T0,"flexDirection","row"),z(T0,"gap",0),z(L1,"wrapMode","none"),F(L1,V0),W(I0,x0),W(I0,z1),z(I0,"flexDirection","row"),z(I0,"flexGrow",1),z(I0,"paddingRight",1),z(I0,"gap",0),z(x0,"wrapMode","none"),F(x0,()=>n().projectGlyph),z(z1,"wrapMode","none"),z(z1,"flexGrow",1),F(z1,()=>pj(n().titleText,m())),W(B1,Q1),W(B1,J1),z(B1,"flexDirection","row"),z(B1,"gap",0),z(Q1,"wrapMode","none"),F(Q1,V0),W(J1,O),z(J1,"flexDirection","row"),z(J1,"flexGrow",1),z(J1,"paddingLeft",2),z(J1,"paddingRight",1),z(J1,"gap",1),z(O,"wrapMode","none"),z(O,"flexGrow",1),F(O,()=>n().subtitleText),F(J1,I(X0,{get when(){return N0().added>0},get children(){var P=V("text"),F0=T("+");return W(P,F0),z(P,"wrapMode","none"),F(P,()=>N0().added,null),x((w0)=>z(P,"fg",Y.success,w0)),P}}),null),F(J1,I(X0,{get when(){return N0().deleted>0},get children(){var P=V("text"),F0=T("\u2212");return W(P,F0),z(P,"wrapMode","none"),F(P,()=>N0().deleted,null),x((w0)=>z(P,"fg",Y.error,w0)),P}}),null),x((P)=>{var F0=N()?Y.backgroundElement:void 0,w0=H0(),l0=Z0(),f1=y1.BOLD,k1=Y.text,M1=y1.BOLD,r0=H0(),U0=Y.textMuted,R1=y1.DIM;return F0!==P.e&&(P.e=z(s0,"backgroundColor",F0,P.e)),w0!==P.t&&(P.t=z(L1,"fg",w0,P.t)),l0!==P.a&&(P.a=z(x0,"fg",l0,P.a)),f1!==P.o&&(P.o=z(x0,"attributes",f1,P.o)),k1!==P.i&&(P.i=z(z1,"fg",k1,P.i)),M1!==P.n&&(P.n=z(z1,"attributes",M1,P.n)),r0!==P.s&&(P.s=z(Q1,"fg",r0,P.s)),U0!==P.h&&(P.h=z(O,"fg",U0,P.h)),R1!==P.r&&(P.r=z(O,"attributes",R1,P.r)),P},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),K0})()};return(()=>{var d=V("box"),Y0=V("box"),A0=V("box"),N=V("text"),i0=V("box"),k0=V("box"),N0=V("text"),b0=V("scrollbox"),_0=V("box");return W(d,Y0),W(d,i0),W(d,b0),LZ((n)=>{g0=n},d),z(d,"flexGrow",1),z(d,"minHeight",0),z(d,"flexDirection","column"),z(d,"paddingTop",1),z(d,"paddingBottom",1),z(d,"paddingLeft",0),z(d,"paddingRight",0),W(Y0,A0),z(Y0,"flexDirection","row"),z(Y0,"justifyContent","space-between"),z(Y0,"gap",1),z(Y0,"paddingBottom",1),z(Y0,"paddingLeft",1),z(Y0,"paddingRight",1),W(A0,N),z(A0,"flexDirection","row"),z(A0,"gap",1),W(N,T("KOBE")),z(N,"wrapMode","none"),F(A0,I(X0,{get when(){return J.headerStatus?.()},children:(n)=>(()=>{var Z0=V("text");return z(Z0,"wrapMode","none"),z(Z0,"onMouseUp",()=>J.onHeaderStatusClick?.()),F(Z0,()=>n().label),x((H0)=>{var V0=n().emphasize?Y.warning:Y.textMuted,K0=n().emphasize?y1.BOLD:y1.DIM;return V0!==H0.e&&(H0.e=z(Z0,"fg",V0,H0.e)),K0!==H0.t&&(H0.t=z(Z0,"attributes",K0,H0.t)),H0},{e:void 0,t:void 0}),Z0})()}),null),F(Y0,I(X0,{get when(){return J.onAddTask},get children(){var n=V("text");return W(n,T("[+]")),z(n,"wrapMode","none"),z(n,"onMouseUp",()=>J.onAddTask?.()),x((Z0)=>{var H0=Y.primary,V0=y1.BOLD;return H0!==Z0.e&&(Z0.e=z(n,"fg",H0,Z0.e)),V0!==Z0.t&&(Z0.t=z(n,"attributes",V0,Z0.t)),Z0},{e:void 0,t:void 0}),n}}),null),F(d,I(X0,{get when(){return X()},get children(){var n=V("box"),Z0=V("text"),H0=V("text"),V0=V("text");return W(n,Z0),W(n,H0),W(n,V0),z(n,"flexDirection","row"),z(n,"gap",0),z(n,"paddingBottom",1),z(n,"paddingLeft",1),W(Z0,T("/")),z(Z0,"wrapMode","none"),z(H0,"wrapMode","none"),F(H0,q),W(V0,T("\u2588")),z(V0,"wrapMode","none"),F(n,I(X0,{get when(){return q().length===0},get children(){var K0=V("text"),s0=T(" fuzzy filter");return W(K0,s0),z(K0,"wrapMode","none"),x((T0)=>z(K0,"fg",Y.textMuted,T0)),K0}}),null),F(n,I(X0,{get when(){return q().length>0},get children(){var K0=V("text"),s0=T(" "),T0=T("/");return W(K0,s0),W(K0,T0),z(K0,"wrapMode","none"),F(K0,()=>Q0().length,T0),F(K0,_,null),x((L1)=>z(K0,"fg",Y.textMuted,L1)),K0}}),null),x((K0)=>{var{info:s0,text:T0,info:L1}=Y,I0=y1.BLINK;return s0!==K0.e&&(K0.e=z(Z0,"fg",s0,K0.e)),T0!==K0.t&&(K0.t=z(H0,"fg",T0,K0.t)),L1!==K0.a&&(K0.a=z(V0,"fg",L1,K0.a)),I0!==K0.o&&(K0.o=z(V0,"attributes",I0,K0.o)),K0},{e:void 0,t:void 0,a:void 0,o:void 0}),n}}),i0),W(i0,k0),z(i0,"flexDirection","row"),z(i0,"justifyContent","space-between"),z(i0,"gap",1),z(i0,"paddingBottom",1),z(i0,"paddingLeft",1),z(i0,"paddingRight",1),W(k0,N0),z(k0,"flexDirection","row"),z(k0,"gap",2),F(k0,I(e0,{each:AX,children:(n)=>{let Z0=()=>f()===n.view;return(()=>{var H0=V("text");return z(H0,"wrapMode","none"),z(H0,"onMouseUp",()=>G(n.view)),F(H0,()=>n.label),x((V0)=>{var K0=Z0()?Y.primary:Y.textMuted,s0=Z0()?y1.BOLD:void 0;return K0!==V0.e&&(V0.e=z(H0,"fg",K0,V0.e)),s0!==V0.t&&(V0.t=z(H0,"attributes",s0,V0.t)),V0},{e:void 0,t:void 0}),H0})()}}),N0),W(N0,T("[/]")),z(N0,"wrapMode","none"),F(i0,I(X0,{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?.()),x((Z0)=>{var H0=Y.textMuted,V0=y1.DIM;return H0!==Z0.e&&(Z0.e=z(n,"fg",H0,Z0.e)),V0!==Z0.t&&(Z0.t=z(n,"attributes",V0,Z0.t)),Z0},{e:void 0,t:void 0}),n}}),null),F(d,I(X0,{get when(){return k().length>1},get children(){var n=V("box"),Z0=V("box"),H0=V("text"),V0=V("text"),K0=V("text"),s0=T(" ");return W(n,Z0),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(Z0,H0),W(Z0,V0),z(Z0,"flexDirection","row"),z(Z0,"gap",1),W(H0,T("Project")),z(H0,"wrapMode","none"),z(V0,"wrapMode","none"),F(V0,s),W(K0,s0),z(K0,"wrapMode","none"),F(K0,J0,s0),F(K0,()=>J0()===1?"task":"tasks",null),x((T0)=>{var L1=Y.textMuted,I0=y1.BOLD,x0=G0()?Y.primary:Y.textMuted,z1=G0()?y1.BOLD:void 0,B1=Y.textMuted,Q1=y1.DIM;return L1!==T0.e&&(T0.e=z(H0,"fg",L1,T0.e)),I0!==T0.t&&(T0.t=z(H0,"attributes",I0,T0.t)),x0!==T0.a&&(T0.a=z(V0,"fg",x0,T0.a)),z1!==T0.o&&(T0.o=z(V0,"attributes",z1,T0.o)),B1!==T0.i&&(T0.i=z(K0,"fg",B1,T0.i)),Q1!==T0.n&&(T0.n=z(K0,"attributes",Q1,T0.n)),T0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),n}}),b0),F(d,I(X0,{get when(){return j0().length>0},get children(){var n=V("box"),Z0=V("scrollbox"),H0=V("box");return W(n,Z0),z(n,"flexDirection","column"),z(n,"flexShrink",0),F(n,I(n0,{label:"PROJECTS"}),Z0),W(Z0,H0),LZ((V0)=>{D0=V0},Z0),z(Z0,"flexShrink",0),z(Z0,"flexGrow",0),z(Z0,"minHeight",0),z(Z0,"stickyScroll",!1),z(Z0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),z(H0,"flexShrink",0),z(H0,"gap",0),z(H0,"paddingRight",1),F(H0,I(e0,{get each(){return j0()},children:(V0)=>I(O0,{row:V0})})),x((V0)=>z(Z0,"maxHeight",q0(),V0)),n}}),b0),F(d,I(n0,{label:"TASKS",get suffix(){return o0(()=>C()==="default")()?void 0:C()},get topPad(){return j0().length>0}}),b0),W(b0,_0),LZ((n)=>{z0=n},b0),z(b0,"flexGrow",1),z(b0,"minHeight",0),z(b0,"stickyScroll",!1),z(b0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),z(_0,"flexShrink",0),z(_0,"gap",0),z(_0,"paddingRight",1),F(_0,I(e0,{get each(){return o()},children:(n)=>{let{task:Z0,flatIndex:H0}=n,V0=()=>H0===h0(),K0=()=>Z0.id===J.selectedId(),s0=W0(()=>{let Q1=J.chatRunState?.();if(!Q1)return!1;let J1=`${Z0.id}:`;for(let[O,P]of Q1)if(P==="running"&&O.startsWith(J1))return!0;return!1}),T0=W0(()=>{let Q1=gQ(J.worktreeChanges?.(),Z0.worktreePath);if(Q1)return Q1;if(D(),!Z0.archived)sj(Z0.worktreePath);return oj(Z0.worktreePath)},void 0,{equals:LY}),L1=W0(()=>_j({task:Z0,activity:J.engineState?.().get(Z0.id),job:J.taskJobs?.().get(Z0.id),live:s0(),spinnerFrame:0,subtitleBudget:b(),truncateBranch:zU,mainBranch:""})),I0=W0(()=>rj(L1(),l)),x0=()=>P0(I0().tone),z1=()=>V0()?Y.focusAccent:K0()?Y.primary:void 0,B1=()=>V0()||K0()?"\u258C":" ";return(()=>{var Q1=V("box"),J1=V("box"),O=V("box"),P=V("text"),F0=V("box"),w0=V("text"),l0=V("text"),f1=V("box"),k1=V("text"),M1=V("box"),r0=V("text");return W(Q1,J1),z(Q1,"flexDirection","column"),z(Q1,"gap",0),z(Q1,"paddingBottom",1),W(J1,O),W(J1,f1),LZ((U0)=>{C0.set(H0,U0),d1(()=>{if(C0.get(H0)===U0)C0.delete(H0)})},J1),z(J1,"flexDirection","column"),z(J1,"gap",0),z(J1,"onMouseUp",()=>{if(J.onSelect(Z0.id),J.activateOnClick)J.onActivate?.(Z0.id)}),z(J1,"onMouseOver",(U0)=>S0({task:Z0,x:U0.x,y:U0.y})),z(J1,"onMouseOut",()=>S0((U0)=>U0?.task.id===Z0.id?null:U0)),W(O,P),W(O,F0),z(O,"flexDirection","row"),z(O,"gap",0),z(P,"wrapMode","none"),F(P,B1),W(F0,w0),W(F0,l0),z(F0,"flexDirection","row"),z(F0,"flexGrow",1),z(F0,"paddingRight",1),z(F0,"gap",0),z(w0,"wrapMode","none"),F(w0,()=>I0().stateGlyph),z(l0,"wrapMode","none"),z(l0,"flexGrow",1),F(l0,()=>pj(I0().titleText,m())),F(F0,I(X0,{get when(){return o0(()=>!!J.moveMode?.())()&&V0()},get children(){var U0=V("text");return W(U0,T(" move")),z(U0,"wrapMode","none"),x((R1)=>z(U0,"fg",Y.warning,R1)),U0}}),null),W(f1,k1),W(f1,M1),z(f1,"flexDirection","row"),z(f1,"gap",0),z(k1,"wrapMode","none"),F(k1,B1),W(M1,r0),z(M1,"flexDirection","row"),z(M1,"flexGrow",1),z(M1,"paddingLeft",2),z(M1,"paddingRight",1),z(M1,"gap",1),z(r0,"wrapMode","none"),z(r0,"flexGrow",1),F(r0,()=>I0().subtitleText),F(M1,I(X0,{get when(){return Z0.pinned===!0},get children(){var U0=V("text");return W(U0,T("\u25B4")),z(U0,"wrapMode","none"),x((R1)=>z(U0,"fg",Y.warning,R1)),U0}}),null),F(M1,I(X0,{get when(){return T0().added>0},get children(){var U0=V("text"),R1=T("+");return W(U0,R1),z(U0,"wrapMode","none"),F(U0,()=>T0().added,null),x((p1)=>z(U0,"fg",Y.success,p1)),U0}}),null),F(M1,I(X0,{get when(){return T0().deleted>0},get children(){var U0=V("text"),R1=T("\u2212");return W(U0,R1),z(U0,"wrapMode","none"),F(U0,()=>T0().deleted,null),x((p1)=>z(U0,"fg",Y.error,p1)),U0}}),null),x((U0)=>{var R1=V0()?Y.backgroundElement:void 0,p1=z1(),DJ=x0(),AY=y1.BOLD,h=Y.text,c=K0()||V0()?y1.BOLD:void 0,i=z1(),v=Y.textMuted,R0=y1.DIM;return R1!==U0.e&&(U0.e=z(J1,"backgroundColor",R1,U0.e)),p1!==U0.t&&(U0.t=z(P,"fg",p1,U0.t)),DJ!==U0.a&&(U0.a=z(w0,"fg",DJ,U0.a)),AY!==U0.o&&(U0.o=z(w0,"attributes",AY,U0.o)),h!==U0.i&&(U0.i=z(l0,"fg",h,U0.i)),c!==U0.n&&(U0.n=z(l0,"attributes",c,U0.n)),i!==U0.s&&(U0.s=z(k1,"fg",i,U0.s)),v!==U0.h&&(U0.h=z(r0,"fg",v,U0.h)),R0!==U0.r&&(U0.r=z(r0,"attributes",R0,U0.r)),U0},{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}),Q1})()}}),null),F(_0,I(X0,{get when(){return Q0().length===0},get children(){var n=V("box"),Z0=V("text");return W(n,Z0),z(n,"paddingTop",1),z(n,"paddingLeft",1),F(Z0,(()=>{var H0=o0(()=>!!(X()&&q().trim().length>0));return()=>H0()?"No matching tasks \u2014 esc to clear.":o0(()=>!!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."})()),x((H0)=>z(Z0,"fg",Y.textMuted,H0)),n}}),null),F(_0,I(X0,{get when(){return o0(()=>!!(G0()&&Q0().length>0&&!f0()))()&&!(X()&&q().trim().length>0)},get children(){var n=V("box"),Z0=V("text");return W(n,Z0),z(n,"paddingTop",1),z(n,"paddingLeft",1),z(Z0,"wrapMode","none"),F(Z0,()=>f()==="active"?"No active tasks for this project.":"No archived tasks for this project."),x((H0)=>{var V0=Y.textMuted,K0=y1.DIM;return V0!==H0.e&&(H0.e=z(Z0,"fg",V0,H0.e)),K0!==H0.t&&(H0.t=z(Z0,"attributes",K0,H0.t)),H0},{e:void 0,t:void 0}),n}}),null),F(_0,I(X0,{get when(){return o0(()=>f()==="archived")()&&Q0().length>0},get children(){var n=V("box"),Z0=V("text");return W(n,Z0),z(n,"paddingTop",1),z(n,"paddingLeft",1),W(Z0,T("a to unarchive")),z(Z0,"wrapMode","none"),x((H0)=>{var V0=Y.textMuted,K0=y1.DIM;return V0!==H0.e&&(H0.e=z(Z0,"fg",V0,H0.e)),K0!==H0.t&&(H0.t=z(Z0,"attributes",K0,H0.t)),H0},{e:void 0,t:void 0}),n}}),null),F(d,I(X0,{get when(){return M0()},children:(n)=>{let Z0=W0(()=>{let I0=n().task,x0=[];if(x0.push({text:I0.kind==="main"?YY(I0.repo):I0.title,bold:!0}),I0.branch.length>0)x0.push({text:`\u2387 ${I0.branch}`});if(I0.worktreePath.length>0)x0.push({text:I0.worktreePath,dim:!0});return x0}),H0=72,V0=W0(()=>Math.min(68,Math.max(...Z0().map((I0)=>ky(I0.text))))),K0=W0(()=>V0()+4),s0=W0(()=>Z0().length+2),T0=W0(()=>Math.max(0,Math.min(n().x+2,t().width-K0()-1))),L1=W0(()=>Math.max(0,Math.min(n().y+1,t().height-s0()-1)));return(()=>{var I0=V("box");return z(I0,"position","absolute"),z(I0,"zIndex",2600),z(I0,"flexDirection","column"),z(I0,"border",!0),z(I0,"paddingLeft",1),z(I0,"paddingRight",1),F(I0,I(e0,{get each(){return Z0()},children:(x0)=>(()=>{var z1=V("text");return z(z1,"wrapMode","none"),F(z1,(()=>{var B1=o0(()=>!!x0.dim);return()=>B1()?Iy(x0.text,V0()):aj(x0.text,V0())})()),x((B1)=>{var Q1=x0.dim?Y.textMuted:Y.text,J1=x0.bold?y1.BOLD:x0.dim?y1.DIM:void 0;return Q1!==B1.e&&(B1.e=z(z1,"fg",Q1,B1.e)),J1!==B1.t&&(B1.t=z(z1,"attributes",J1,B1.t)),B1},{e:void 0,t:void 0}),z1})()})),x((x0)=>{var z1=T0(),B1=L1(),Q1=K0(),J1=Y.focusAccent,O=Y.backgroundElement;return z1!==x0.e&&(x0.e=z(I0,"left",z1,x0.e)),B1!==x0.t&&(x0.t=z(I0,"top",B1,x0.t)),Q1!==x0.a&&(x0.a=z(I0,"width",Q1,x0.a)),J1!==x0.o&&(x0.o=z(I0,"borderColor",J1,x0.o)),O!==x0.i&&(x0.i=z(I0,"backgroundColor",O,x0.i)),x0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),I0})()}}),null),x((n)=>{var Z0=Z()?Y.focusAccent:Y.textMuted,H0=y1.BOLD,V0=Y.textMuted,K0=y1.DIM;return Z0!==n.e&&(n.e=z(N,"fg",Z0,n.e)),H0!==n.t&&(n.t=z(N,"attributes",H0,n.t)),V0!==n.a&&(n.a=z(N0,"fg",V0,n.a)),K0!==n.o&&(n.o=z(N0,"attributes",K0,n.o)),n},{e:void 0,t:void 0,a:void 0,o:void 0}),d})()}var XU=32,AX,Sy=2000,yy=16;var qU=y(()=>{w();w();w();w();w();w();w();w();w();w();G1();S1();S1();s4();Gq();e4();ZU();sf();GU();AX=[{view:"active",label:"Working session"},{view:"archived",label:"Archives"}]});var WU={};q1(WU,{startTasksPane:()=>uy,legendRowCap:()=>jU,legendCap:()=>HU});import{existsSync as BU}from"fs";import{stat as by}from"fs/promises";import{TextAttributes as Bq}from"@opentui/core";function tj(J){return!!J&&wX(J)}function Ty(J){let{theme:Y}=u0(),Z=N1(),f=HG(),G=eQ(),[X,Q]=r(J.tasks().some((u)=>u.id===J.initialTaskId)?J.initialTaskId:J.tasks()[0]?.id??null);function q(u){G.notify({kind:"error",taskId:X()??"",tabId:"",title:u})}function B(u){G.notify({kind:"done",taskId:X()??"",tabId:"",title:u})}let[H,K]=r(!1),[j,U]=r(f.get("activeSortMode")==="recent"?"recent":"default"),L=f.get("tasksPane.projectFilter"),[M,D]=r(typeof L==="string"&&L.length>0?L:null),A=(u)=>{D(u),f.set("tasksPane.projectFilter",u)},[R,l]=r(null),g=DY(),S=!J.initialTaskId;a0(()=>{let u=J.orch?.activeTaskSignal()();if(!u)return;if(!S){if(u!==J.initialTaskId)return;S=!0}Q(u)}),a0(BJ(()=>J.orch?.uiPrefsSignal()(),(u)=>{if(u&&u.sortMode!==c1(j))U(u.sortMode);if(u&&u.projectFilter!==c1(M))D(u.projectFilter)})),a0(()=>{let u=J.orch?.updateSignal()();if(u)l(u)});let C={orch:J.orch,tasks:()=>J.tasks(),confirm:async(u)=>await lY.show(Z,u.title,u.body,u.cancelLabel,u.confirmLabel)===!0,promptText:(u,D0)=>ZY.show(Z,u,D0),logger:console,logPrefix:"[kobe tasks]",notifyError:q,notifyInfo:B,reload:()=>J.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(u,D0)=>{if(X()!==u)return;let z0=J.tasks();Q(D0?.id??(z0.find((g0)=>!g0.archived)??z0[0])?.id??null)},promptNewTask:(u,D0,z0)=>pQ.show(Z,u,D0,z0),cursorRepo:()=>{let u=J.tasks();return(u.find((D0)=>D0.id===X())??u[0])?.repo},lastVendor:()=>O1("lastSelectedVendor"),rememberVendor:(u)=>m1("lastSelectedVendor",u),openCreateSurface:async(u)=>{if(oZ(f.get(PY,rZ))!=="chattab")return!1;let z0=await WJ();if(!z0)return!1;return await WQ(z0,u),!0},selectTask:(u)=>Q(u),enterTask:(u)=>t(u)};async function k(){await n4(C)}async function $(){if(oZ(f.get(PY,rZ))==="chattab"){let z0=await WJ();if(z0){await HQ(z0);return}}if(!(await jf.show(Z,f,J.orch??void 0)).visualPrefsChanged)return;if(!f.flush())return;try{let z0=await WJ();if(z0)await _f(z0)}catch(z0){console.error("[kobe tasks] failed to refresh workspace panes:",z0)}}async function G0(){let u=await WJ();if(u){await jQ(u);return}WG.show(Z)}async function s(){if(!R()?.hasUpdate){B(`Already on the latest version (v${m0})`);return}let D0=await WJ();if(!D0)return;await VQ(D0)}async function J0(u){await P4(C,u)}async function E(u){await v4(C,u)}async function Q0(u){await m4(C,u)}async function e(u){await c4(C,u)}async function j0(u){await d4(C,u)}async function o(u){let z0=J.tasks().find((C0)=>C0.id===u)?.worktreePath;if(!z0||!BU(z0)){if(!J.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),q("No daemon running \u2014 can't create the worktree");return}try{z0=await J.orch.ensureWorktree(u)}catch(C0){console.error("[kobe tasks] task.ensureWorktree failed:",C0),q(`Couldn't create worktree: ${C0 instanceof Error?C0.message:String(C0)}`);return}await J.reload()}if(!z0||!BU(z0))return;let g0=l4();if(!g0){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(!$4(z0,g0))console.error(`[kobe tasks] failed to open worktree with ${g0.label}`),q(`Couldn't open worktree with ${g0.label}`)}async function p(){if(!process.env.TMUX_PANE)return;let u=await WJ();if(!u)return;let D0=await Nf(u);if(!D0)return;await E0(["select-pane","-t",D0])}async function _(u,D0){let z0=J.tasks().find((g0)=>g0.id===u);if(!z0||z0.kind==="main"||!J.orch)return;try{await J.orch.moveTask(u,D0)}catch(g0){console.error("[kobe tasks] task.move failed:",g0),q(`Couldn't move task: ${g0 instanceof Error?g0.message:String(g0)}`);return}Q(u),await J.reload()}let[f0,a]=r(f.get("tasksPane.keysCollapsed",!1)===!0),L0=(u)=>{a(u),f.set("tasksPane.keysCollapsed",u)};a0(BJ(()=>J.orch?.uiPrefsSignal()(),(u)=>{if(u&&u.keysCollapsed!==c1(f0))a(u.keysCollapsed)}));let[m,b]=r(!1);V1(()=>({enabled:Z.stack.length===0&&!m(),bindings:OZ({"help.open":()=>void G0(),"task.new":()=>void k(),"settings.open.sidebar":()=>void $(),"tasks.update":()=>void s(),"tasks.openWorktree":()=>{let u=X();if(u)o(u)},"tasks.renameBranch":()=>{let u=X();if(u)e(u)},"tasks.cycleEngine":()=>{let u=X();if(u)j0(u)},"tasks.toggleKeys":()=>L0(!f0()),"tasks.focusEngine":()=>void p().catch((u)=>console.error("[kobe tasks] focus engine pane failed:",u))})}));async function t(u){let D0=W1(u),z0=J.tasks().find((O0)=>O0.id===u),g0=await WJ();if(g0&&g0!==D0)await rG(g0);if(await Z1(D0)){let O0=await Az(D0,"@kobe_worktree")||z0?.worktreePath||"";if(tj(O0)){let d=z0?.repo?vY(z0.repo,O0,{kind:"repo-init"}):void 0;await jZ({name:D0,cwd:O0,command:VJ(z0?.vendor),taskId:u,vendor:z0?.vendor,repo:z0?.repo,launchInit:d})}await MQ(D0),await E0(["switch-client","-t",`=${D0}`]),J.orch?.setActiveTask(u).catch(()=>{});return}let y0=z0?.worktreePath;if(!tj(y0)){if(!J.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),q("No daemon running \u2014 can't open this task");return}try{y0=await J.orch.ensureWorktree(u)}catch(O0){console.error("[kobe tasks] task.ensureWorktree failed:",O0),q(`Couldn't create worktree: ${O0 instanceof Error?O0.message:String(O0)}`);return}await J.reload()}if(!tj(y0))return;let n0=z0?.repo?vY(z0.repo,y0,{kind:"repo-init"}):void 0;if(!await jZ({name:D0,cwd:y0,command:VJ(z0?.vendor),taskId:u,vendor:z0?.vendor,repo:z0?.repo,launchInit:n0})){console.error(`[kobe tasks] failed to start session ${D0}`),q("Couldn't start this task's session");return}await MQ(D0),await E0(["switch-client","-t",`=${D0}`]),J.orch?.setActiveTask(u).catch(()=>{})}let q0=W0(()=>{let u=R();if(u?.hasUpdate)return{label:`v${u.latest} \u2191`,emphasize:!0};return{label:`v${m0}`,emphasize:!1}}),M0=()=>J.orch?.daemonStaleSignal()()??!1,S0=()=>J.orch?.daemonVersionSignal()()??null,h0=W0(()=>J.tasks().find((u)=>u.id===X())?.kind==="main");return(()=>{var u=V("box"),D0=V("box");return W(u,D0),z(u,"flexDirection","column"),z(u,"flexGrow",1),F(u,I(x4,{stale:M0,daemonVersion:S0,clientVersion:m0,width:()=>g().width}),D0),z(D0,"flexGrow",1),z(D0,"flexShrink",1),F(D0,I(QU,{get tasks(){return J.tasks},selectedId:X,onSelect:Q,onActivate:(z0)=>void t(z0),activateOnClick:!0,headerStatus:q0,onHeaderStatusClick:()=>void s(),onAddTask:()=>void k(),width:()=>g().width,get engineState(){return o0(()=>!!J.orch)()?J.orch.engineStateSignal():void 0},get taskJobs(){return o0(()=>!!J.orch)()?J.orch.taskJobsSignal():void 0},get worktreeChanges(){return J.orch?()=>{let z0=J.orch;if(!z0||z0.connectionStateSignal()()!=="online")return null;return z0.worktreeChangesSignal()()}:void 0},onRenameRequest:(z0)=>void Q0(z0),onDeleteRequest:(z0)=>void E(z0),onArchiveRequest:(z0)=>void J0(z0),onLocalMergeRequest:(z0)=>{let g0=J.tasks().find((C0)=>C0.id===z0);if(!g0||g0.kind==="main")return;Q(z0),K((C0)=>!C0)},moveMode:H,onMoveRequest:(z0,g0)=>void _(z0,g0),onMoveModeExit:()=>K(!1),sortMode:j,projectFilter:M,onProjectFilterChange:A,onSortModeToggle:()=>{let z0=j()==="default"?"recent":"default";U(z0),f.set("activeSortMode",z0)},focused:()=>Z.stack.length===0,onSearchActiveChange:b})),F(u,I(Ey,{moveMode:H,selectedIsMain:h0,collapsed:f0,onToggleCollapsed:()=>L0(!f0())}),null),x((z0)=>z(u,"backgroundColor",Y.background,z0)),u})()}function HU(J){let Y=Sj(J);if(!Y)return null;let Z=Y.hint?.keys??Y.keys[0];return Z&&Z.length>0?Z:null}function jU(J){let Y=J.map(HU).filter((Z)=>Z!==null);return Y.length>0?Y.join("/"):null}function Ey(J){let{theme:Y}=u0(),[Z,f]=r("Prefix");r1(()=>{c0(["show-options","-g","prefix"]).then(({code:U,stdout:L})=>{if(U!==0)return;let M=zq(L);if(M)f(M)})});let G=()=>{Cj();let U=oz(),L=U.binds,M=[],D=U.focus.filter((R)=>R!==null).map((R)=>R.chord);if(D.length===4&&D.every((R,l)=>R===BZ[l]))M.push({k:"ctrl+hjkl",label:"move panes"});else if(D.length>0)M.push({k:D[0],label:"move panes"});let A=(R,l)=>{let g=l.map((S)=>L[S]?.chord).filter((S)=>!!S);if(g.length>0)M.push({k:`prefix ${g.join("/")}`,label:R})};if(L["tmux.detach"])M.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"]),M},X=()=>{Cj();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 M of U){let D=jU(M.ids);if(D===null)continue;L.push({k:D,label:M.label,dimWhenMain:M.dimWhenMain})}return L.push(...G()),L},Q=[{k:"j/k",label:"reorder"},{k:"enter/esc",label:"done"}],q=()=>J.moveMode?.()?Q:X(),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?.()),F(L,()=>j()?"\u2500\u2500 keys ?\u25B8 \u2500\u2500":"\u2500\u2500 keys ?\u25BE \u2500\u2500"),F(U,I(X0,{get when(){return!j()},get children(){return I(e0,{get each(){return q()},children:(M)=>{let D=()=>M.dimWhenMain===!0&&(J.selectedIsMain?.()??!1);return(()=>{var A=V("box"),R=V("box"),l=V("text"),g=T("["),S=T("]"),C=V("box"),k=V("text");return W(A,R),W(A,C),z(A,"flexDirection","row"),z(A,"gap",1),z(A,"justifyContent","space-between"),W(R,l),z(R,"width",10),z(R,"flexShrink",0),W(l,g),W(l,S),z(l,"wrapMode","none"),F(l,()=>jG(M.k,Z()),S),W(C,k),z(C,"flexShrink",0),z(k,"wrapMode","none"),F(k,()=>K(M.label)),x(($)=>{var G0=D()?Y.textMuted:Y.accent,s=D()?Bq.DIM:Bq.BOLD,J0=H(),E=Y.textMuted,Q0=D()?Bq.DIM:void 0;return G0!==$.e&&($.e=z(l,"fg",G0,$.e)),s!==$.t&&($.t=z(l,"attributes",s,$.t)),J0!==$.a&&($.a=z(C,"width",J0,$.a)),E!==$.o&&($.o=z(k,"fg",E,$.o)),Q0!==$.i&&($.i=z(k,"attributes",Q0,$.i)),$},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),A})()}})}}),null),x((M)=>{var D=Y.textMuted,A=Bq.DIM;return D!==M.e&&(M.e=z(L,"fg",D,M.e)),A!==M.t&&(M.t=z(L,"attributes",A,M.t)),M},{e:void 0,t:void 0}),U})()}async function uy(J={}){await zJ({logContext:"tasks",providers:{notifications:!0},setup:()=>xy(J)})}async function xy(J){let Y=new Uf({homeDir:fY()});await Y.load();let[Z,f]=r(Y.list()),G=null;try{let H=await PJ();if(H){let K=new GJ(H);await K.init(),G=K}else IY("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(H){sY("tasks-boot",H),IY("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let X=()=>G&&G.connectionStateSignal()()==="online"?G.tasksSignal()():Z(),Q=async()=>{await Y.load(),f(Y.list())},q="",B=setInterval(()=>{if(G&&G.connectionStateSignal()()==="online")return;(async()=>{let H="missing";try{let K=await by(Y.filePath);H=`${K.mtimeMs}:${K.size}`}catch{}if(H===q)return;q=H,await Q()})().catch(()=>{})},Ny);return{root:()=>[I(Ty,{tasks:X,get initialTaskId(){return J.initialTaskId},orch:G,reload:Q}),I(E4,{})],onDestroy:()=>{if(B)clearInterval(B);G?.dispose()}}}var Ny=1500;var VU=y(()=>{w();w();w();w();w();w();w();w();E1();w();uZ();KJ();G1();DZ();gJ();v1();cJ();xX();nf();D1();sz();XJ();wj();UX();hj();ij();u4();w4();BG();LX();Jq();S1();xj();RZ();UJ();i4();a4();qU();ZJ();yJ();Pj()});var KU={};q1(KU,{startSettingsHost:()=>hy});function wy(J){let Y=HG(),Z=N1(),{theme:f}=u0(),G=!1,X=!1;async function Q(){if(X)return;X=!0;try{if(Y.flush()&&G){let B=await WJ();if(B)await _f(B)}}catch(q){console.error("[kobe settings] failed to refresh workspace panes:",q)}finally{process.exit(0)}}return V1(()=>({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"}}),F(q,I(jf,{kv:Y,get orchestrator(){return J.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{G=!0},onClose:Q})),x((B)=>z(q,"backgroundColor",f.background,B)),q})()}async function hy(){await zJ({setup:async()=>{let J=null;try{let Y=await PJ();if(Y){let Z=new GJ(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(wy,{orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var UU=y(()=>{w();w();w();w();w();w();KJ();DZ();ij();LX();S1();RZ();UJ();ZJ();yJ()});var LU={};q1(LU,{startHelpHost:()=>vy});function Py(){let J=N1(),{theme:Y}=u0();function Z(){process.exit(0)}return V1(()=>({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),F(f,I(WG,{onClose:Z})),x((G)=>z(f,"backgroundColor",Y.background,G)),f})()}async function vy(){await zJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>I(Py,{})})})}var DU=y(()=>{w();w();w();w();w();wj();S1();RZ();UJ();yJ()});var MU={};q1(MU,{startUpdateHost:()=>$y});import{spawn as my,spawnSync as cy}from"child_process";import{TextAttributes as KG}from"@opentui/core";function dy(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 my(Z,f,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function ny(J){return J.replace(/\r\n/g,`
210
+ `)}var Tg;var N6=S(()=>{mQ();Tg=["install","status","command"]});var Gj={};j1(Gj,{runHookSubcommand:()=>cg,readTextWithTimeout:()=>u6,parseWorktreeAddPath:()=>w6,ensureGlobalKobeHooks:()=>ig});import{homedir as ug}from"os";import{join as T6,resolve as E6}from"path";async function u6(J,Y=xg){let Z;try{return await Promise.race([J(),new Promise((X)=>{Z=setTimeout(()=>X(""),Y)})])}finally{if(Z!==void 0)clearTimeout(Z)}}async function x6(){try{let J=await u6(()=>Bun.stdin.text());if(!J.trim())return{};let Y=JSON.parse(J);return Y&&typeof Y==="object"&&!Array.isArray(Y)?Y:{}}catch{return{}}}function wg(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 Pg(J){return!!J&&typeof J==="object"&&!Array.isArray(J)}function vg(J){let Y=[],Z=/"([^"]*)"|'([^']*)'|(\S+)/g,X;while((X=Z.exec(J))!==null)Y.push(X[1]??X[2]??X[3]??"");return Y}function w6(J){let Y=vg(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 f=Y[G];if(f==="&&"||f==="||"||f===";"||f==="|"||f===">"||f===">>")break;if(f.startsWith("-")){G+=Z.has(f)?2:1;continue}return f}}return}async function mg(){let J=await x6(),Y=Pg(J.tool_input)?J.tool_input:{},Z=typeof Y.command==="string"?Y.command:"";if(!Z.includes("worktree"))return;let X=w6(Z);if(!X)return;let G=typeof J.cwd==="string"&&J.cwd?J.cwd:process.cwd(),f=E6(G,X),Q=await dJ();if(!Q)return;try{await Q.request("worktree.reconcile",{cwd:G,worktreePath:f})}finally{Q.close()}}async function cg(J){let[Y,...Z]=J;if(Y==="setup"){await lg(Z);return}if(Y===hg){try{await mg()}catch{}return}try{if(!Y||!Qz(Y))return;let X=await x6(),G=wg(Z,"--task-id"),f=typeof X.cwd==="string"&&X.cwd?X.cwd:process.cwd(),Q;for(let B of h6())if(Q=B.activityDetailFromPayload(Y,X),Q)break;let q=await dJ();if(!q)return;try{await q.request("engine.reportEvent",{...G?{taskId:G}:{cwd:f},kind:Y,...Q?{detail:Q}:{}})}finally{q.close()}}catch{}}function dg(){return h1.map((J)=>kB(J)).filter((J)=>J.supportsWorktreeSync())}function h6(){return h1.map((J)=>kB(J)).filter((J)=>J.supportsHooks())}function Xj(){return T6(ug(),".claude","settings.json")}function ng(J){if(!J||J==="off")return;if(J==="global")return Xj();if(J.startsWith("repo:"))return T6(E6(J.slice(5)),".claude","settings.json");return J}async function ig(){try{let J=Xj();for(let Y of h6())await Y.installActivityHooks(J),await Y.installWorktreeWatchHook(J);await P6()}catch{}}async function P6(){let J=dg();if(J.length===0)return;let Y=C1(b6),Z=new Set([Xj()]),X=ng(Y);if(X)Z.add(X);for(let G of J)for(let f of Z)await G.removeWorktreeSyncHook(f);if(Y!=="off")d1(b6,"off")}async function lg(J){await P6(),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(`
211
+ `))}var xg=500,hg="worktree-created",b6="externalWorktreeSync";var fj=S(()=>{DJ();IB();qz();A1();HJ()});function m6(J){var Y;if(J>=55296&&J<=57343||J>1114111)return 65533;return(Y=$g.get(J))!==null&&Y!==void 0?Y:J}var zj,$g,v6;var c6=S(()=>{$g=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]]),v6=(zj=String.fromCodePoint)!==null&&zj!==void 0?zj:(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 d6(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,f=0;G<Z;G+=2){let Q=Y.charCodeAt(G),q=Y.charCodeAt(G+1);X[f++]=Q|q<<8}return X}var n6;var i6=S(()=>{n6=d6("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/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 XJ;var l6=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"})(XJ||(XJ={}))});function Qj(J){return J>=I1.ZERO&&J<=I1.NINE}function ag(J){return J>=I1.UPPER_A&&J<=I1.UPPER_F||J>=I1.LOWER_A&&J<=I1.LOWER_F}function pg(J){return J>=I1.UPPER_A&&J<=I1.UPPER_Z||J>=I1.LOWER_A&&J<=I1.LOWER_Z||Qj(J)}function _g(J){return J===I1.EQUALS||pg(J)}class qj{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)===I1.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)|$6)===I1.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(Qj(Z)||ag(Z)){let X=Z<=I1.NINE?Z-I1.ZERO:(Z|$6)-I1.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(Qj(Z))this.result=this.result*10+(Z-I1.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===I1.SEMI)this.consumed+=1;else if(this.decodeMode===pY.Strict)return 0;if(this.emitCodePoint(m6(this.result),this.consumed),this.errors){if(J!==I1.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&XJ.VALUE_LENGTH)>>14;while(Y<J.length){if(G===0&&(X&XJ.FLAG13)!==0){let Q=(X&XJ.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let q=X&XJ.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),X=Z[this.treeIndex],G=(X&XJ.VALUE_LENGTH)>>14}if(Y>=J.length)break;let f=J.charCodeAt(Y);if(f===I1.SEMI&&G!==0&&(X&XJ.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.treeIndex=og(Z,X,this.treeIndex+Math.max(1,G),f),this.treeIndex<0)return this.result===0||this.decodeMode===pY.Attribute&&(G===0||_g(f))?0:this.emitNotTerminatedNamedEntity();if(X=Z[this.treeIndex],G=(X&XJ.VALUE_LENGTH)>>14,G!==0){if(f===I1.SEMI)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.decodeMode!==pY.Strict&&(X&XJ.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]&XJ.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]&~(XJ.VALUE_LENGTH|XJ.FLAG13):X[J+1],Z),Y===3)this.emitCodePoint(X[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 rg(J){let Y="",Z=new qj(J,(X)=>Y+=v6(X));return function(G,f){let Q=0,q=0;while((q=G.indexOf("&",q))>=0){Y+=G.slice(Q,q),Z.startEntity(f);let H=Z.write(G,q+1);if(H<0){Q=q+Z.end();break}Q=q+H,q=H===0?Q+1:Q}let B=Y+G.slice(Q);return Y="",B}}function og(J,Y,Z,X){let G=(Y&XJ.BRANCH_LENGTH)>>7,f=Y&XJ.JUMP_TABLE;if(G===0)return f!==0&&X===f?Z:-1;if(f){let H=X-f;return H<0||H>=G?-1:J[Z+H]-1}let Q=G+1>>1,q=0,B=G-1;while(q<=B){let H=q+B>>>1,K=H>>1,U=J[Z+K]>>(H&1)*8&255;if(U<X)q=H+1;else if(U>X)B=H-1;else return J[Z+Q+H]}return-1}function HX(J,Y=pY.Legacy){return sg(J,Y)}var I1,$6=32,p1,pY,sg;var a6=S(()=>{c6();i6();l6();(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"})(I1||(I1={}));(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={}));sg=rg(n6)});var p6,_6;var o6=S(()=>{a6();(function(J){J[J.XML=0]="XML",J[J.HTML=1]="HTML"})(p6||(p6={}));(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"})(_6||(_6={}))});import{CliRenderer as eg,createCliRenderer as JC,engine as YC}from"@opentui/core";import{createTestRenderer as TP}from"@opentui/core/testing";import{ASCIIFontRenderable as ZC,BoxRenderable as XC,CodeRenderable as GC,DiffRenderable as fC,InputRenderable as zC,LineNumberRenderable as QC,MarkdownRenderable as qC,ScrollBoxRenderable as BC,SelectRenderable as HC,TabSelectRenderable as jC,TextareaRenderable as WC,TextAttributes as Bj,TextNodeRenderable as VC,TextRenderable as KC}from"@opentui/core";import{engine as xP,Timeline as wP}from"@opentui/core";import{BaseRenderable as ZK,createTextAttributes as LC,InputRenderable as Hj,InputRenderableEvents as Qf,isTextNodeRenderable as Vj,parseColor as s6,Renderable as DC,RootTextNodeRenderable as MC,ScrollBoxRenderable as FC,SelectRenderable as t6,SelectRenderableEvents as jj,TabSelectRenderable as e6,TabSelectRenderableEvents as Wj,TextNodeRenderable as OC,TextRenderable as XK}from"@opentui/core";import{BaseRenderable as NC,isTextNodeRenderable as bC,TextNodeRenderable as TC,TextRenderable as EC,Yoga as YK}from"@opentui/core";import{BoxRenderable as $P,RootRenderable as aP}from"@opentui/core";import{TimeToFirstDrawRenderable as hC}from"@opentui/core";import{createSlotRegistry as rP}from"@opentui/core";function RC({createElement:J,createTextNode:Y,createSlotNode:Z,isTextNode:X,replaceText:G,insertNode:f,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 f0=typeof C,t=y!==void 0;if(f0==="string"||f0==="number"){if(f0==="number")C=C.toString();if(t){let Z0=g[0];if(Z0&&X(Z0))G(Z0,C);else Z0=Y(C);g=D(R,g,y,Z0)}else if(g!==""&&typeof g==="string")G(H(R),g=C);else D(R,g,y,Y(C)),g=C}else if(C==null||f0==="boolean")g=D(R,g,y);else if(f0==="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 M(R,g,Z0);else if(g==null||g==="")O(R,Z0);else M(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))f(R,C);else A(R,C,H(R));g=C}return g}function L(R,C,g){let y=!1;for(let $=0,f0=C.length;$<f0;$++){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 M(R,C,g){let y=g.length,$=C.length,f0=y,t=0,Z0=0,u=K(C[$-1]),B0=null;while(t<$||Z0<f0){if(C[t]===g[Z0]){t++,Z0++;continue}while(C[$-1]===g[f0-1])$--,f0--;if($===t){let Y0=f0<y?Z0?K(g[Z0-1]):g[f0-Z0]:u;while(Z0<f0)f(R,g[Z0++],Y0)}else if(f0===Z0)while(t<$){if(!B0||!B0.has(C[t]))Q(R,C[t]);t++}else if(C[t]===g[f0-1]&&g[Z0]===C[$-1]){let Y0=K(C[--$]);f(R,g[Z0++],K(C[t++])),f(R,g[--f0],Y0),C[$]=g[f0]}else{if(!B0){B0=new Map;let W0=Z0;while(W0<f0)B0.set(g[W0],W0++)}let Y0=B0.get(C[t]);if(Y0!=null)if(Z0<Y0&&Y0<f0){let W0=t,o=1,_;while(++W0<$&&W0<f0){if((_=B0.get(C[W0]))==null||_!==Y0+o)break;o++}if(o>Y0-Z0){let r=C[t];while(Z0<Y0)f(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 f0;while(f0=H(R))Q(R,f0);return y&&f(R,y),y??""}let $=y||Z();if(C.length){let f0=!1;for(let t=C.length-1;t>=0;t--){let Z0=C[t];if($!==Z0){let u=B(Z0)===R;if(!f0&&!t)u?A(R,$,Z0):f(R,$,g);else u&&Q(R,Z0)}else f0=!0}}else f(R,$,g);return[$]}function O(R,C,g){for(let y=0,$=C.length;y<$;y++)f(R,C[y],g)}function A(R,C,g){f(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 f0=C[$];if(f0===g[$])continue;q(R,$,f0,g[$]),g[$]=f0}}),g}return{render(R,C){let g;return xZ((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:f,setProp(R,C,g,y){return q(R,C,g,y),g},mergeProps:Jz,effect:BY,memo:AC,createComponent:N9,use(R,C,g){return n1(()=>R(C,g))}}}function gC(J){let Y=RC(J);return Y.mergeProps=Jz,Y}function Mj(J){if(!iQ.has(J))iQ.set(J,0);let Y=iQ.get(J)+1;return iQ.set(J,Y),`${J}-${Y}`}function CC(J,Y,Z){if(_1("Inserting node:",l1(Y),"into parent:",l1(J),"with anchor:",l1(Z),Y instanceof HG),Y instanceof qf)Y.parent=J,Y=Y.getSlotChild(J);if(Z&&Z instanceof qf)Z=Z.getSlotChild(J);if(Vj(Y)){if(!(J instanceof XK)&&!Vj(J))throw Error(`Orphan text error: "${Y.toChunks().map((f)=>f.text).join("")}" must have a <text> as a parent: ${J.id} above ${Y.id}`)}if(!(J instanceof ZK))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=Kj(J),G=X.findIndex((f)=>f.id===Z.id);if(G===-1)_1("[INSERT]","Could not find anchor",l1(J),l1(Z),"[children]",...X.map((f)=>f.id));J.add(Y,G)}function SC(J,Y){if(_1("Removing node:",l1(Y),"from parent:",l1(J)),Y instanceof qf)Y.parent=null,Y=Y.getSlotChild(J);J.remove(Y.id),process.nextTick(()=>{if(Y instanceof ZK&&!Y.parent){Y.destroyRecursively();return}})}function yC(J){_1("Creating text node:",J);let Y=Mj("text-node");if(typeof J==="number")J=J.toString();return HG.fromString(HX(J),{id:Y})}function kC(){let J=Mj("slot-node");return _1("Creating slot node",J),new qf(J)}function JK(J){_1("Getting parent of node:",l1(J));let Y=J.parent??void 0;if(Y instanceof MC)Y=Y.textParent??void 0;let Z=Y?.parent?.parent?.parent;if(Z instanceof FC&&Z.content===Y)Y=Z;return Y}function xC(J){Object.assign(HK,J)}function wC(){return HK}var Dj,s1=()=>{let J=CJ(Dj);if(!J)throw Error("No renderer found");return J},UC=(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 UC((G,f)=>{Z({width:G,height:f})}),Y},AC=(J)=>V0(()=>J()),iQ,_1=(...J)=>{if(process.env.DEBUG)console.log("[Reconciler]",...J)},HG,l1=(J)=>{if(!J)return;return J.id},Kj=(J)=>{let Y;if(J instanceof XK)Y=J.getTextChildren();else Y=J.getChildren();return Y},IC,w,r0,k,V,T,W,F,nP,z,GK,RZ,Fj,fK,zK,qf,Bf,lQ,Uj,Lj,QK,qK,BK,uC,HK,PC=(J,Y)=>{let Z,X=!1,G=!1,f=!0,Q=!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(f){Q=!0;return}q()};try{Z=IC(()=>k(Dj.Provider,{get value(){return J},get children(){return k(Y,{})}}),J.root)}finally{f=!1,J.destroy=q}if(X)B();if(Q)q()},jK=async(J,Y={})=>{let Z=Y instanceof eg?Y:await JC({...Y,onDestroy:()=>{Y.onDestroy?.()}});YC.attach(Z),PC(Z,J)};var h=S(()=>{Q1();o6();Q1();Q1();Q1();Dj=HY();iQ=new Map;HG=class HG extends OC{static fromString(J,Y={}){let Z=new HG(Y);return Z.add(J),Z}};({render:IC,effect:w,memo:r0,createComponent:k,createElement:V,createTextNode:T,insertNode:W,insert:F,spread:nP,setProp:z,mergeProps:GK,use:RZ}=gC({createElement(J){_1("Creating element:",J);let Y=Mj(J),Z=CJ(Dj);if(!Z)throw Error("No renderer found");let X=wC();if(!X[J])throw Error(`[Reconciler] Unknown component type: ${J}`);let G=new X[J](Z,{id:Y});return _1("Element created with id:",Y),G},createTextNode:yC,createSlotNode:kC,replaceText(J,Y){if(_1("Replacing text:",Y,"in node:",l1(J)),!(J instanceof HG))return;J.replace(HX(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(Vj(J)){if(Y==="href"){J.link={url:Z};return}if(Y==="style"){J.attributes|=LC(Z),J.fg=Z.fg?s6(Z.fg):J.fg,J.bg=Z.bg?s6(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 DC))return;if(Z)J.focus();else J.blur();break;case"onChange":let G=void 0;if(J instanceof t6)G=jj.SELECTION_CHANGED;else if(J instanceof e6)G=Wj.SELECTION_CHANGED;else if(J instanceof Hj)G=Qf.CHANGE;if(!G)break;if(Z)J.on(G,Z);if(X)J.off(G,X);break;case"onInput":if(J instanceof Hj){if(Z)J.on(Qf.INPUT,Z);if(X)J.off(Qf.INPUT,X)}break;case"onSubmit":if(J instanceof Hj){if(Z)J.on(Qf.ENTER,Z);if(X)J.off(Qf.ENTER,X)}else J[Y]=Z;break;case"onSelect":if(J instanceof t6){if(Z)J.on(jj.ITEM_SELECTED,Z);if(X)J.off(jj.ITEM_SELECTED,X)}else if(J instanceof e6){if(Z)J.on(Wj.ITEM_SELECTED,Z);if(X)J.off(Wj.ITEM_SELECTED,X)}break;case"style":for(let f in Z){let Q=Z[f];if(X!==void 0&&Q===X[f])continue;J[f]=Q}break;case"text":case"content":{let f=typeof Z==="string"?Z:Array.isArray(Z)?Z.join(""):`${Z}`;J[Y]=HX(f);break}default:J[Y]=Z}},isTextNode(J){return J instanceof HG},insertNode:CC,removeNode:SC,getParentNode:JK,getFirstChild(J){_1("Getting first child of node:",l1(J));let Y=Kj(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=JK(J);if(!Y){_1("No parent found for node:",l1(J));return}let Z=Kj(Y),X=Z.indexOf(J);if(X===-1||X===Z.length-1){_1("No next sibling found for node:",l1(J));return}let G=Z[X+1];if(!G){_1("Next sibling is null for node:",l1(J));return}return _1("Next sibling found:",l1(G),"for node:",l1(J)),G}}));Fj=class Fj extends NC{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}};fK=class fK extends TC{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()}};zK=class zK extends Fj{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()}};qf=class qf extends Fj{layoutNode;textNode;destroyed=!1;constructor(J){super(J);this._visible=!1}getSlotChild(J){if(bC(J)||J instanceof EC){if(!this.textNode)this.textNode=new fK(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new zK(`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()}};Bf=class Bf extends VC{_ctx;constructor(J,Y){super(Y);this._ctx=J}};lQ=class lQ extends Bf{constructor(J,Y){super(null,J);if(Y==="b"||Y==="strong")this.attributes=(this.attributes||0)|Bj.BOLD;else if(Y==="i"||Y==="em")this.attributes=(this.attributes||0)|Bj.ITALIC;else if(Y==="u")this.attributes=(this.attributes||0)|Bj.UNDERLINE}};Uj=class Uj extends lQ{constructor(J){super(J,"b")}};Lj=class Lj extends lQ{constructor(J){super(J,"i")}};QK=class QK extends lQ{constructor(J){super(J,"u")}};qK=class qK extends Bf{constructor(J,Y){super(null,Y);this.add()}add(){return super.add(`
212
+ `)}};BK=class BK extends Bf{constructor(J,Y){let Z={...Y,link:{url:Y.href}};super(null,Z)}};uC={box:XC,text:KC,input:zC,select:HC,textarea:WC,ascii_font:ZC,tab_select:jC,scrollbox:BC,code:GC,diff:fC,line_number:QC,markdown:qC,span:Bf,strong:Uj,b:Uj,em:Lj,i:Lj,u:QK,br:qK,a:BK},HK={...uC};xC({time_to_first_draw:hC})});function vC(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 f=G;if(typeof f?.added!=="number"||typeof f.deleted!=="number")return null;Z.set(X,{added:f.added,deleted:f.deleted})}return Z}function mC(J,Y){if(J.size!==Y.size)return!1;for(let[Z,X]of J){let G=Y.get(Z);if(!G||!AY(X,G))return!1}return!0}class GJ{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,f]=p(null),[Q,q]=p(null),[B,H]=p(null),[K,j]=p(new Map),[U,L]=p(new Map),[M,D]=p(null),[O,A]=p(null),[l,R]=p(null),[C,g]=p("online");this.tasksAcc=Z,this.setTasks=(y)=>X(()=>y),this.activeTaskAcc=G,this.setActiveTaskSig=(y)=>f(()=>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=M,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??GG,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)XZ("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(!Xz({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(Hf));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()=>v9(this.daemonVersionAcc()??void 0,d0)}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 xZ((Z)=>{return p0(()=>{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 Hf(X.task)}async ensureMainTask(J){let Y=await this.client.request("task.ensureMain",{repo:J});return Hf(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 Hf(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(Hf)),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=vC(Y);if(!Z)return;let X=this.worktreeChangesAcc();if(X&&mC(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 Hf(J){return{id:gG(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 gZ=S(()=>{vZ();DJ();hZ();Q1();YG();xJ();zJ()});function KK(J){let Y=J[pJ];if(!Y){if(Object.defineProperty(J,pJ,{value:Y=new Proxy(J,nC)}),!Array.isArray(J)){let Z=Object.keys(J),X=Object.getOwnPropertyDescriptors(J);for(let G=0,f=Z.length;G<f;G++){let Q=Z[G];if(X[Q].get)Object.defineProperty(J,Q,{enumerable:X[Q].enumerable,get:X[Q].get.bind(Y)})}}}return Y}function $Q(J){let Y;return J!=null&&typeof J==="object"&&(J[pJ]||!(Y=Object.getPrototypeOf(J))||Y===Object.prototype||Array.isArray(J))}function Wf(J,Y=new Set){let Z,X,G,f;if(Z=J!=null&&J[Oj])return Z;if(!$Q(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(G=J[Q],(X=Wf(G,Y))!==G)J[Q]=X}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(f=Q[B],q[f].get)continue;if(G=J[f],(X=Wf(G,Y))!==G)J[f]=X}}return J}function aQ(J,Y){let Z=J[Y];if(!Z)Object.defineProperty(J,Y,{value:Z=Object.create(null)});return Z}function Vf(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 cC(J,Y){let Z=Reflect.getOwnPropertyDescriptor(J,Y);if(!Z||Z.get||!Z.configurable||Y===pJ||Y===jG)return Z;return delete Z.value,delete Z.writable,Z.get=()=>J[pJ][Y],Z}function UK(J){tf()&&Vf(aQ(J,jG),VK)()}function dC(J){return UK(J),Reflect.ownKeys(J)}function pQ(J,Y,Z,X=!1){if(!X&&J[Y]===Z)return;let G=J[Y],f=J.length;if(WK.onStoreNodeUpdate&&WK.onStoreNodeUpdate(J,Y,Z,G),Z===void 0){if(delete J[Y],J[_Y]&&J[_Y][Y]&&G!==void 0)J[_Y][Y].$()}else if(J[Y]=Z,J[_Y]&&J[_Y][Y]&&G===void 0)J[_Y][Y].$();let Q=aQ(J,jG),q;if(q=Vf(Q,Y,G))q.$(()=>Z);if(Array.isArray(J)&&J.length!==f){for(let B=J.length;B<f;B++)(q=Q[B])&&q.$();(q=Vf(Q,"length",f))&&q.$(J.length)}(q=Q[VK])&&q.$()}function LK(J,Y){let Z=Object.keys(Y);for(let X=0;X<Z.length;X+=1){let G=Z[X];pQ(J,G,Y[G])}}function iC(J,Y){if(typeof Y==="function")Y=Y(J);if(Y=Wf(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)pQ(J,Z,G)}pQ(J,"length",X)}else LK(J,Y)}function jf(J,Y,Z=[]){let X,G=J;if(Y.length>1){X=Y.shift();let Q=typeof X,q=Array.isArray(J);if(Array.isArray(X)){for(let B=0;B<X.length;B++)jf(J,[X[B]].concat(Y),Z);return}else if(q&&Q==="function"){for(let B=0;B<J.length;B++)if(X(J[B],B))jf(J,[B].concat(Y),Z);return}else if(q&&Q==="object"){let{from:B=0,to:H=J.length-1,by:K=1}=X;for(let j=B;j<=H;j+=K)jf(J,[j].concat(Y),Z);return}else if(Y.length>1){jf(J[X],Y,[X].concat(Z));return}G=J[X],Z=[X].concat(Z)}let f=Y[0];if(typeof f==="function"){if(f=f(G,Z),f===G)return}if(X===void 0&&f==null)return;if(f=Wf(f),X===void 0||$Q(G)&&$Q(f)&&!Array.isArray(f))LK(G,f);else pQ(J,X,f)}function CZ(...[J,Y]){let Z=Wf(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=KK(Z);b9.registerGraph({value:Z,name:Y&&Y.name});function f(...Q){sf(()=>{X&&Q.length===1?iC(Z,Q[0]):jf(Z,Q)})}return[G,f]}var Oj,jG,_Y,VK,WK,nC,zv;var Kf=S(()=>{Q1();Oj=Symbol("store-raw"),jG=Symbol("store-node"),_Y=Symbol("store-has"),VK=Symbol("store-self"),WK={onStoreNodeUpdate:null};nC={get(J,Y,Z){if(Y===Oj)return J;if(Y===pJ)return Z;if(Y===_f)return UK(J),Z;let X=aQ(J,jG),G=X[Y],f=G?G():J[Y];if(Y===jG||Y===_Y||Y==="__proto__")return f;if(!G){let Q=Object.getOwnPropertyDescriptor(J,Y);if(tf()&&(typeof f!=="function"||J.hasOwnProperty(Y))&&!(Q&&Q.get))f=Vf(X,Y,f)()}return $Q(f)?KK(f):f},has(J,Y){if(Y===Oj||Y===pJ||Y===_f||Y===jG||Y===_Y||Y==="__proto__")return!0;return tf()&&Vf(aQ(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:dC,getOwnPropertyDescriptor:cC};zv=Symbol("store-root")});function _Q(J){let Y=HY();return{provider:(Z)=>{let X=J.init(Z);return k(z0,{get when(){return X.ready===void 0||X.ready===!0},get children(){return k(Y.Provider,{value:X,get children(){return Z.children}})}})},use(){let Z=CJ(Y);if(!Z)throw Error(`${J.name} context must be used within a context provider`);return Z}}}var Aj=S(()=>{h();h();Q1()});import{RGBA as jX}from"@opentui/core";function $C(){return Object.keys(t1.themes)}function Uf(J){return Boolean(t1.themes[J])}function gj(J,Y){if(!J)return!1;if(!Y||typeof Y!=="object"||!Y.theme)return!1;return WX("themes",{...t1.themes,[J]:Y}),!0}function Rj(J,Y="dark"){let Z=J.defs??{};function X(B,H=[]){if(typeof B==="string"){if(B==="transparent"||B==="none")return jX.fromInts(0,0,0,0);if(B.startsWith("#"))return jX.fromHex(B);if(H.includes(B))return jX.fromInts(0,0,0);let K=Z[B]??J.theme[B];if(K===void 0)return jX.fromInts(0,0,0);return X(K,[...H,B])}return X(B[Y],H)}let G={};for(let[B,H]of Object.entries(J.theme))G[B]=X(H);let f=G.text??jX.fromHex("#ffffff"),Q=G.background??jX.fromHex("#000000");return{...{primary:G.primary??f,secondary:G.secondary??f,accent:G.accent??G.primary??f,error:G.error??f,warning:G.warning??f,success:G.success??f,info:G.info??f,text:f,textMuted:G.textMuted??f,background:Q,backgroundPanel:G.backgroundPanel??Q,backgroundElement:G.backgroundElement??Q,backgroundMenu:G.backgroundMenu??G.backgroundElement??Q,backgroundDialog:G.backgroundDialog??G.backgroundPanel??Q,border:G.border??f,borderActive:G.borderActive??G.border??f,borderSubtle:G.borderSubtle??G.border??f,diffAdded:G.diffAdded??G.success??f,diffRemoved:G.diffRemoved??G.error??f,diffContext:G.diffContext??G.textMuted??f,diffHunkHeader:G.diffHunkHeader??G.textMuted??f,diffAddedBg:G.diffAddedBg??Q,diffRemovedBg:G.diffRemovedBg??Q,selectedListItemText:G.selectedListItemText??Q},...G}}var lC,VX,t1,WX,x0,DK;var N1=S(()=>{h();Q1();Kf();Aj();iz();lz();$z();az();pz();_z();rz();lC={claude:cX,conductor:dX,nord:iX,opencode:lX,dracula:nX,tokyonight:aX,"osaka-jade":$X},VX=["primary","success","info"],[t1,WX]=CZ({themes:{...lC},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:x0,provider:DK}=_Q({name:"Theme",init:(J)=>{if(J.mode)WX("mode",J.mode);if(J.theme&&Uf(J.theme))WX("active",J.theme);let Y=s1(),Z=V0(()=>{let G=t1.themes[t1.active];if(G)return Rj(G,t1.mode);let f=t1.themes.claude??t1.themes.opencode??Object.values(t1.themes)[0];if(!f)return Rj({theme:{background:"#000000",text:"#ffffff"}},t1.mode);return Rj(f,t1.mode)}),X=V0(()=>{let G=Z(),f=G[t1.focusAccent]??G.primary,Q={...G,focusAccent:f};if(!t1.transparentBackground)return Q;let q=jX.fromInts(0,0,0,0);return{...Q,background:q,backgroundPanel:q}});return p0(()=>{Y?.setBackgroundColor(X().background)}),{theme:new Proxy({},{get(G,f){let Q=X();return Q[f]??Q.text}}),get selected(){return t1.active},get transparentBackground(){return t1.transparentBackground},get focusAccent(){return t1.focusAccent},mode(){return t1.mode},set(G){if(!Uf(G))return!1;return WX("active",G),!0},setMode(G){WX("mode",G)},setTransparentBackground(G){WX("transparentBackground",G)},setFocusAccent(G){WX("focusAccent",G)},all(){return $C()},has(G){return Uf(G)}}}}))});function aC(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((f)=>G+f)}function Cj(J,Y){if(Y.defaultPrevented)return!1;let Z=aC(Y);for(let X=J.length-1;X>=0;X--){let G=J[X];if(!G)continue;let f=G.config();if(f.enabled===!1)continue;let Q=f.bindings.find((q)=>Z.includes(q.key));if(Q)return Q.cmd(Y,Q.slot),Y.preventDefault(),!0}return!1}function _C(){if(Sj)return;let J=s1();if(!J)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");Sj=J.keyInput,MK=(Y)=>{Cj(rQ,Y)},Sj.on("keypress",MK)}function U1(J){_C();let Y=pC++,Z={config:J,id:Y};p0(()=>{J()}),rQ.push(Z),i1(()=>{let X=rQ.findIndex((G)=>G.id===Y);if(X>=0)rQ.splice(X,1)})}var pC=1,rQ,Sj=null,MK=null;var MJ=S(()=>{h();Q1();rQ=[]});import{RGBA as FK}from"@opentui/core";function sC(J){let Y=RY(),Z=x0(),{theme:X}=Z,G=s1(),f=!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",()=>{f=!!G?.getSelection()}),z(H,"onMouseUp",()=>{if(f){f=!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)=>{f=!1,j.stopPropagation()}),z(K,"flexShrink",1),z(K,"flexGrow",0),z(K,"paddingTop",1),F(K,()=>J.children),w((j)=>{var U=Y().width,L=Y().height,M=Z.transparentBackground?oC:rC,D=Q(),O=Y().width-2,A=B(),l=X.backgroundDialog;return U!==j.e&&(j.e=z(H,"width",U,j.e)),L!==j.t&&(j.t=z(H,"height",L,j.t)),M!==j.a&&(j.a=z(H,"backgroundColor",M,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 tC(){let[J,Y]=CZ({stack:[],size:"medium"}),Z=s1(),X=null;function G(){setTimeout(()=>{if(!X)return;if(X.isDestroyed)return;function f(q){for(let B of q.getChildren()){if(B===X)return!0;if(f(B))return!0}return!1}let Q=Z?.root;if(!Q)return;if(!f(Q))return;X.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)),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 f of J.stack)f.onClose?.();sf(()=>{Y("size","medium"),Y("stack",[])}),G()},replace(f,Q){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:f,onClose:Q}])},push(f,Q){if(J.stack.length===0)X=Z?.currentFocusedRenderable??null,X?.blur();Y("stack",[...J.stack,{element:f,onClose:Q}])},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(f){Y("size",f)}}}function AK(J){let Y=tC();return k(OK.Provider,{value:Y,get children(){return[r0(()=>J.children),(()=>{var Z=V("box");return z(Z,"position","absolute"),z(Z,"zIndex",3000),F(Z,k(z0,{get when(){return Y.stack.length},get children(){return k(sC,{onClose:()=>Y.clear(),get size(){return Y.size},get children(){return Y.stack.at(-1).element()}})}})),Z})()]}})}function u1(){let J=CJ(OK);if(!J)throw Error("useDialog must be used within a DialogProvider");return J}var rC,oC,OK;var NJ=S(()=>{h();h();h();h();h();h();h();h();Q1();Kf();N1();MJ();rC=FK.fromInts(0,0,0,128),oC=FK.fromInts(0,0,0,64);OK=HY()});import{spawnSync as yj}from"child_process";import*as gK from"fs";function RK(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 CK(J){let Y=J.trim();if(!Y)return"repo path is required";let Z;try{Z=gK.statSync(Y)}catch{return`path does not exist: ${Y}`}if(!Z.isDirectory())return`not a directory: ${Y}`;try{if(yj("git",["rev-parse","--git-dir"],{cwd:Y,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return RK(Y)}catch{return RK(Y)}return null}function Lf(J){if(!J)return null;try{let Y=yj("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 SK(J){if(!J)return[];try{let Y=yj("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(`
213
+ `).map((Z)=>Z.trim()).filter(Boolean).sort((Z,X)=>{let G=(q)=>q==="main"?0:q==="master"?1:q==="develop"?2:3,f=G(Z),Q=G(X);if(f!==Q)return f-Q;return Z.localeCompare(X)})}catch{return[]}}var fY="main";var oQ=()=>{};import*as yK from"fs";import*as sQ from"os";function fJ(J){if(J==="~")return sQ.homedir();if(J.startsWith("~/"))return sQ.homedir()+J.slice(1);return J}function kj(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 Ij(J){if(!J)return[];try{let Y=yK.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 Nj(J,Y){let Z=Y.toLowerCase(),G=Z.startsWith(".")?J:J.filter((f)=>!f.startsWith("."));if(!Z)return G;return G.filter((f)=>f.toLowerCase().startsWith(Z))}function Df(J,Y,Z){let X=Y+Z;if(J.startsWith("~")){let G=sQ.homedir();if(X===G)return"~";if(X.startsWith(`${G}/`))return`~${X.slice(G.length)}`}return X}var tQ=()=>{};import{spawn as eC}from"child_process";import*as KX from"fs";import*as Mf from"path";function kK(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 IK(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 NK(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),f;try{f=KX.statSync(G)}catch{return`parent directory does not exist: ${G}`}if(!f.isDirectory())return`not a directory: ${G}`;let Q=Mf.join(G,Z);if(KX.existsSync(Q))return`target already exists: ${Q}`;return null}function bK(J,Y){return Mf.join(fJ(J.trim()),Y.trim())}function TK(J,Y){let Z=Y.trim();if(!Z)return Y;let X=fJ(J.trim());if(!X)return Y;try{if(!KX.statSync(X).isDirectory())return Y}catch{return Y}if(!KX.existsSync(Mf.join(X,Z)))return Z;for(let G=2;G<1000;G++){let f=`${Z}-${G}`;if(!KX.existsSync(Mf.join(X,f)))return f}return Z}function EK(J,Y,Z){return new Promise((X)=>{let G="";try{let f=eC("git",["clone","--progress",J,Y],{stdio:["ignore","ignore","pipe"]});f.stderr?.setEncoding("utf-8"),f.stderr?.on("data",(Q)=>{if(G+=Q,Z){let q=Q.split(/[\r\n]+/).filter((H)=>H.trim().length>0),B=q[q.length-1];if(B)Z(B)}}),f.on("error",(Q)=>{X({ok:!1,error:Q.message})}),f.on("close",(Q)=>{if(Q===0){X({ok:!0,path:Y});return}let q=G.split(/[\r\n]+/).filter((B)=>B.trim().length>0).pop()??`git clone exited with ${Q}`;X({ok:!1,error:q})})}catch(f){X({ok:!1,error:f instanceof Error?f.message:String(f)})}})}var uK=S(()=>{tQ()});function eQ(J){if(J==="existing")return"clone";if(J==="clone")return"adopt";return"existing"}function xK(J){if(J==="existing")return"adopt";if(J==="clone")return"existing";return"clone"}function wK(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 bj(J,Y="existing"){if(J==="confirm")return"tabs";if(J==="tabs")return"engine";if(J==="engine")return Tj(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 Tj(J){if(J==="clone")return"cloneUrl";if(J==="adopt")return"adoptFilter";return"repo"}function hK(J,Y){let Z=Y.trim();if(!Z)return J;return J.filter((X)=>bf(Z,X.path))}function PK(J,Y){let Z=new Set,X=[];for(let G of[J,...Y]){let f=G.trim();if(!f||Z.has(f))continue;Z.add(f),X.push(f)}return X}function vK(J,Y){let Z=Y.trim().toLowerCase();if(!Z)return J;return J.filter((X)=>X.toLowerCase().includes(Z))}function mK(J,Y){let Z=Y.trim().toLowerCase();if(!Z)return J;return J.filter((X)=>X.toLowerCase().includes(Z))}function Ff(J,Y,Z=JS){let X=J.length;if(X<=Z)return{items:J,start:0,total:X};let G=Math.floor(Z/2),f=Math.max(0,Y-G);if(f+Z>X)f=X-Z;return{items:J.slice(f,f+Z),start:f,total:X}}function gY(J,Y){if(Y<=0)return 0;return Math.max(0,Math.min(Y-1,J))}function cK(J,Y,Z){let X=Y[Z];if(X)return X;return J.trim()||fY}var JS=8;var Ej=S(()=>{Oq();oQ()});import{TextAttributes as nJ}from"@opentui/core";function dK(J){let Y=u1(),{theme:Z}=x0(),[X,G]=p("existing"),f=()=>{let I=J.availableVendors;return I&&I.length>0?I:h1},Q=(()=>{let I=f(),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,M]=p(Lf(fJ(J.defaultRepo.trim()))??fY),[D,O]=p(!1),[A,l]=p(""),[R,C]=p(J.defaultCloneParent?.trim()?J.defaultCloneParent:"~/"),[g,y]=p(""),[$,f0]=p(!1),[t,Z0]=p(fY),[u,B0]=p(!1),[Y0,W0]=p(""),o=V0(()=>PK(J.defaultRepo,J.savedRepos)),_=V0(()=>wK(j(),o())),r=V0(()=>kj(j())),X0=V0(()=>Ij(r().base)),a=V0(()=>Nj(X0(),r().filter)),U0=V0(()=>vK(o(),j())),c=V0(()=>_()==="browse"?a():U0()),[N,s]=p(0),H0=V0(()=>Ff(c(),N())),[D0,y0]=p(!1),c0=V0(()=>SK(fJ(j().trim()))),x=V0(()=>mK(c0(),L())),[F0,Q0]=p(0),L0=V0(()=>Ff(x(),F0())),k0=V0(()=>kj(R())),T0=V0(()=>Ij(k0().base)),v0=V0(()=>Nj(T0(),k0().filter)),[$0,O0]=p(0),m=V0(()=>Ff(v0(),$0())),[G0,A0]=p(!1),[E,l0]=p(""),[S0,m0]=p(0),[w0,a0]=p(new Set),[n]=of(()=>X()==="adopt"?fJ(j().trim()):null,async(I)=>J.discoverAdoptable?await J.discoverAdoptable(I):[]),e=V0(()=>hK(n()??[],E())),q0=V0(()=>Ff(e().map((I)=>I.path),S0())),M0=V0(()=>{let I=q0();return e().slice(I.start,I.start+I.items.length)});p0(()=>{e(),m0((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=fJ(j().trim());if(!I)return;if(D())return;let g0=Lf(I);if(g0)M(g0)}),p0(()=>{c(),s(0)}),p0(()=>{v0(),O0(0)}),p0(()=>{let I=A(),g0=R();if($())return;let h0=kK(I);y(TK(g0,h0))});let[N0,f1]=p(null);p0(()=>{j(),A(),R(),g(),E(),f1(null)});function b0(){let I=fJ(j().trim());if(!I)return;let g0=CK(I);if(g0){f1(g0),K("repo");return}let h0=L().trim()||fY;J.onSubmit({repo:I,baseRef:h0,vendor:q()}),Y.clear()}async function E0(){if(u())return;let I=IK(A());if(I){f1(I),K("cloneUrl");return}let g0=NK(R(),g());if(g0){f1(g0),K(g().trim()?"cloneParent":"cloneFolder");return}let h0=bK(R(),g());B0(!0),W0(`Cloning into ${h0}\u2026`);let X1=await EK(A().trim(),h0,(qJ)=>{W0(qJ)});if(B0(!1),!X1.ok){f1(`git clone failed: ${X1.error}`),K("cloneUrl");return}let OJ=t().trim()||fY,bJ=fJ(R().trim());J.onSubmit({repo:X1.path,baseRef:OJ,vendor:q(),cloned:{parentDir:bJ}}),Y.clear()}function B1(){let I=e();if(I.length===0){f1("no adoptable worktrees to import");return}let g0=w0(),h0=g0.size>0?I.filter((X1)=>g0.has(X1.path)):I.slice(S0(),S0()+1);if(h0.length===0)return;J.onSubmit({mode:"adopt",repo:fJ(j().trim()),vendor:q(),adopt:h0.map((X1)=>({worktreePath:X1.path,branch:X1.branch}))}),Y.clear()}function H1(){if(X()==="clone"){E0();return}if(X()==="adopt"){B1();return}b0()}function t0(I){if(u())return;if(I===X())return;G(I),K(Tj(I)),f1(null)}function e0(I){if(u())return;let g0=I===1?eQ(X()):xK(X());if(g0===X())return;G(g0),f1(null),K("tabs")}function P(I){B((g0)=>I===1?sY(f(),g0):Aq(f(),g0))}function J0(){if(!j().trim()&&_()==="saved"){let g0=c()[0];if(g0){U(g0),K("baseRef");return}}if(_()==="browse"){let h0=a()[N()],X1=r();if(h0){U(Df(j(),X1.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 X1=r();U(Df(j(),X1.base,h0)),s(I),y0(!0),K("baseRef");return}U(h0),s(I),K("baseRef")}function F1(){let g0=v0()[$0()],h0=k0();if(g0){C(Df(R(),h0.base,g0)),O0(0),A0(!0),K("cloneFolder");return}K("cloneFolder")}function O1(I){let h0=v0()[I];if(!h0)return;let X1=k0();C(Df(R(),X1.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)=>bj(I,X()))},{key:"ctrl+]",cmd:()=>t0(eQ(X()))},{key:"ctrl+[",cmd:()=>t0(eQ(X()))},{key:"ctrl+e",cmd:()=>B((I)=>sY(f(),I))},{key:"up",cmd:()=>{if(u())return;if(X()==="existing"&&H()==="repo"){let I=c();if(I.length===0)return;s(gY(N()-1,I.length));return}if(X()==="existing"&&H()==="baseRef"){let I=x();if(I.length===0)return;Q0(gY(F0()-1,I.length));return}if(X()==="clone"&&H()==="cloneParent"){let I=v0();if(I.length===0)return;O0(gY($0()-1,I.length));return}if(X()==="adopt"){let I=e();if(I.length===0)return;m0(gY(S0()-1,I.length))}}},{key:"down",cmd:()=>{if(u())return;if(X()==="existing"&&H()==="repo"){let I=c();if(I.length===0)return;s(gY(N()+1,I.length));return}if(X()==="existing"&&H()==="baseRef"){let I=x();if(I.length===0)return;Q0(gY(F0()+1,I.length));return}if(X()==="clone"&&H()==="cloneParent"){let I=v0();if(I.length===0)return;O0(gY($0()+1,I.length));return}if(X()==="adopt"){let I=e();if(I.length===0)return;m0(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)=>bj(I,X()))}]:[],...X()==="adopt"?[{key:"ctrl+a",cmd:R1}]:[]]})),U1(()=>({enabled:H()==="confirm"&&!u(),bindings:[{key:"return",cmd:()=>H1()}]}));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"),X1=V("box"),OJ=V("box"),bJ=V("text"),qJ=V("box"),SY=V("box"),yY=V("text"),BJ=V("box"),Fq=V("text"),MG=V("text");return W(I,g0),W(I,X1),W(I,BJ),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(X1,OJ),z(X1,"gap",1),z(X1,"paddingTop",1),z(X1,"paddingBottom",1),F(X1,()=>{let d=()=>H()==="tabs",v=(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")),F(b,()=>X()==="existing"?"\u25B8 For Existing":" For Existing"),z(R0,"onMouseUp",()=>t0("clone")),F(R0,()=>X()==="clone"?"\u25B8 For New Repo":" For New Repo"),z(I0,"onMouseUp",()=>t0("adopt")),F(I0,()=>X()==="adopt"?"\u25B8 Adopt Worktree":" Adopt Worktree"),w((C0)=>{var P0=v(X()==="existing"),g1=J1(X()==="existing",d()),M1=v(X()==="clone"),AJ=J1(X()==="clone",d()),oY=v(X()==="adopt"),FG=J1(X()==="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)),FG!==C0.n&&(C0.n=z(I0,"attributes",FG,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,bJ),W(OJ,qJ),z(OJ,"gap",0),W(bJ,T("engine")),W(qJ,SY),W(qJ,yY),z(qJ,"flexDirection","row"),z(qJ,"gap",2),F(qJ,k(Y1,{get each(){return f()},children:(d)=>{let v=()=>q()===d;return(()=>{var i=V("text");return z(i,"onMouseUp",()=>B(d)),F(i,()=>v()?"\u25B8 ":" ",null),F(i,d,null),w((b)=>{var R0=v()?Z.primary:Z.textMuted,I0=v()?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")),F(X1,k(z0,{get when(){return X()==="existing"},get children(){return[(()=>{var d=V("box"),v=V("text"),i=V("input");return W(d,v),W(d,i),z(d,"gap",0),W(v,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(v,"fg",R0,b.e)),I0!==b.t&&(b.t=z(v,"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),F(d,k(z0,{get when(){return H0().start>0},get children(){var v=V("text"),i=T("\u2191 "),b=T(" more");return W(v,i),W(v,b),z(v,"wrapMode","none"),F(v,()=>H0().start,b),w((R0)=>z(v,"fg",Z.textMuted,R0)),v}}),null),F(d,k(Y1,{get each(){return H0().items},children:(v,i)=>{let b=()=>H0().start+i(),R0=()=>b()===N(),I0=()=>_()==="saved"&&v===J.defaultRepo,C0=()=>_()==="saved"&&j().trim()===v,P0=()=>_()==="browse"?"/":"",g1=()=>I0()?" (current dir)":"";return(()=>{var M1=V("text");return z(M1,"wrapMode","none"),z(M1,"onMouseUp",()=>z1(b())),F(M1,()=>R0()?"\u25B8 ":" ",null),F(M1,v,null),F(M1,P0,null),F(M1,g1,null),w((AJ)=>{var oY=R0()?Z.primary:C0()?Z.accent:Z.textMuted,FG=R0()?nJ.BOLD:void 0;return oY!==AJ.e&&(AJ.e=z(M1,"fg",oY,AJ.e)),FG!==AJ.t&&(AJ.t=z(M1,"attributes",FG,AJ.t)),AJ},{e:void 0,t:void 0}),M1})()}}),null),F(d,k(z0,{get when(){return H0().start+H0().items.length<H0().total},get children(){var v=V("text"),i=T("\u2193 "),b=T(" more");return W(v,i),W(v,b),z(v,"wrapMode","none"),F(v,()=>H0().total-H0().start-H0().items.length,b),w((R0)=>z(v,"fg",Z.textMuted,R0)),v}}),null),d}}),(()=>{var d=V("box"),v=V("text"),i=V("input");return W(d,v),W(d,i),z(d,"gap",0),W(v,T("from branch")),z(i,"placeholder",fY),z(i,"onInput",(b)=>{O(!0),M(FJ(b))}),z(i,"onSubmit",()=>{M(cK(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(v,"fg",R0,b.e)),I0!==b.t&&(b.t=z(v,"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"),v=V("text");return W(d,v),z(d,"gap",0),z(d,"paddingLeft",2),z(d,"paddingBottom",1),z(v,"wrapMode","none"),F(v,()=>c0().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(v,"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),F(d,k(z0,{get when(){return L0().start>0},get children(){var v=V("text"),i=T("\u2191 "),b=T(" more");return W(v,i),W(v,b),z(v,"wrapMode","none"),F(v,()=>L0().start,b),w((R0)=>z(v,"fg",Z.textMuted,R0)),v}}),null),F(d,k(Y1,{get each(){return L0().items},children:(v,i)=>{let b=()=>L0().start+i(),R0=()=>b()===F0(),I0=()=>L().trim()===v;return(()=>{var C0=V("text");return z(C0,"wrapMode","none"),z(C0,"onMouseUp",()=>{M(v),O(!0),Q0(b()),K("confirm")}),F(C0,()=>R0()?"\u25B8 ":" ",null),F(C0,v,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),F(d,k(z0,{get when(){return L0().start+L0().items.length<L0().total},get children(){var v=V("text"),i=T("\u2193 "),b=T(" more");return W(v,i),W(v,b),z(v,"wrapMode","none"),F(v,()=>L0().total-L0().start-L0().items.length,b),w((R0)=>z(v,"fg",Z.textMuted,R0)),v}}),null),d}})]}}),null),F(X1,k(z0,{get when(){return X()==="clone"},get children(){return[(()=>{var d=V("box"),v=V("text"),i=V("input");return W(d,v),W(d,i),z(d,"gap",0),W(v,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(v,"fg",R0,b.e)),I0!==b.t&&(b.t=z(v,"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"),v=V("text"),i=V("input");return W(d,v),W(d,i),z(d,"gap",0),W(v,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(v,"fg",R0,b.e)),I0!==b.t&&(b.t=z(v,"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"),v=V("text");return W(d,v),z(d,"paddingLeft",2),W(v,T("(remembered \u2014 next clone defaults to this dir)")),z(v,"wrapMode","none"),w((i)=>z(v,"fg",Z.textMuted,i)),d}}),k(z0,{get when(){return r0(()=>H()==="cloneParent"&&v0().length>0)()&&!G0()},get children(){var d=V("box");return z(d,"gap",0),z(d,"paddingLeft",2),F(d,k(z0,{get when(){return m().start>0},get children(){var v=V("text"),i=T("\u2191 "),b=T(" more");return W(v,i),W(v,b),z(v,"wrapMode","none"),F(v,()=>m().start,b),w((R0)=>z(v,"fg",Z.textMuted,R0)),v}}),null),F(d,k(Y1,{get each(){return m().items},children:(v,i)=>{let b=()=>m().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())),F(I0,()=>R0()?"\u25B8 ":" ",C0),F(I0,v,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),F(d,k(z0,{get when(){return m().start+m().items.length<m().total},get children(){var v=V("text"),i=T("\u2193 "),b=T(" more");return W(v,i),W(v,b),z(v,"wrapMode","none"),F(v,()=>m().total-m().start-m().items.length,b),w((R0)=>z(v,"fg",Z.textMuted,R0)),v}}),null),d}}),(()=>{var d=V("box"),v=V("text"),i=V("input");return W(d,v),W(d,i),z(d,"gap",0),W(v,T("folder name")),z(i,"placeholder","auto from url"),z(i,"onInput",(b)=>{f0(!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(v,"fg",R0,b.e)),I0!==b.t&&(b.t=z(v,"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"),v=V("text"),i=V("input");return W(d,v),W(d,i),z(d,"gap",0),W(v,T("base branch")),z(i,"placeholder",fY),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(v,"fg",R0,b.e)),I0!==b.t&&(b.t=z(v,"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"),v=V("text");return W(d,v),z(d,"gap",0),z(d,"paddingLeft",2),z(v,"wrapMode","none"),F(v,()=>Y0()||"Cloning\u2026"),w((i)=>z(v,"fg",Z.textMuted,i)),d}})]}}),null),F(X1,k(z0,{get when(){return X()==="adopt"},get children(){return[(()=>{var d=V("box"),v=V("text"),i=V("input");return W(d,v),W(d,i),z(d,"gap",0),W(v,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(v,"fg",R0,b.e)),I0!==b.t&&(b.t=z(v,"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"),v=V("text"),i=T("repo: ");return W(d,v),z(d,"paddingLeft",2),W(v,i),z(v,"wrapMode","none"),F(v,()=>fJ(j().trim())||"(none)",null),w((b)=>z(v,"fg",Z.textMuted,b)),d})(),k(z0,{get when(){return n.loading},get children(){var d=V("box"),v=V("text");return W(d,v),z(d,"paddingLeft",2),W(v,T("scanning worktrees\u2026")),z(v,"wrapMode","none"),w((i)=>z(v,"fg",Z.textMuted,i)),d}}),k(z0,{get when(){return r0(()=>!n.loading)()&&e().length===0},get children(){var d=V("box"),v=V("text");return W(d,v),z(d,"paddingLeft",2),z(v,"wrapMode","none"),F(v,()=>(n()??[]).length===0?"no unlinked worktrees \u2014 every git worktree here is already a task":"no worktrees match the filter"),w((i)=>z(v,"fg",Z.textMuted,i)),d}}),k(z0,{get when(){return e().length>0},get children(){var d=V("box"),v=V("text");return W(d,v),z(d,"gap",0),z(d,"paddingLeft",2),F(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"),F(i,()=>q0().start,R0),w((I0)=>z(i,"fg",Z.textMuted,I0)),i}}),v),F(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",()=>{m0(R0()),K0(i.path)}),F(g1,()=>I0()?"\u25B8 ":" ",null),F(g1,()=>C0()?"[x] ":"[ ] ",null),F(g1,()=>i.branch,null),F(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})()}}),v),F(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"),F(i,()=>q0().total-q0().start-q0().items.length,R0),w((I0)=>z(i,"fg",Z.textMuted,I0)),i}}),v),z(v,"wrapMode","none"),F(v,(()=>{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(v,"fg",Z.textMuted,i)),d}})]}}),null),F(X1,k(z0,{get when(){return N0()},get children(){var d=V("text"),v=T("\u203B ");return W(d,v),z(d,"wrapMode","word"),F(d,N0,null),w((i)=>z(d,"fg",Z.error,i)),d}}),null),W(BJ,Fq),W(BJ,MG),z(BJ,"flexDirection","row"),z(BJ,"justifyContent","space-between"),z(BJ,"alignItems","center"),z(BJ,"paddingTop",1),z(BJ,"paddingBottom",1),W(Fq,T("\u2191\u2193 pick \xB7 tab next field \xB7 \u2190\u2192 switch \xB7 enter done \xB7 esc cancel")),z(MG,"onMouseUp",()=>H1()),F(MG,(()=>{var d=r0(()=>!!u());return()=>d()?"[ Cloning\u2026 ]":H()==="confirm"?"\u25B8 [ Create ]":"[ Create ]"})()),w((d)=>{var v=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 v!==d.e&&(d.e=z(h0,"attributes",v,d.e)),i!==d.t&&(d.t=z(h0,"fg",i,d.t)),b!==d.a&&(d.a=z(bJ,"fg",b,d.a)),R0!==d.o&&(d.o=z(bJ,"attributes",R0,d.o)),I0!==d.i&&(d.i=z(yY,"fg",I0,d.i)),C0!==d.n&&(d.n=z(Fq,"fg",C0,d.n)),P0!==d.s&&(d.s=z(MG,"fg",P0,d.s)),g1!==d.h&&(d.h=z(MG,"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 nK=S(()=>{h();h();h();h();h();h();h();h();HJ();Q1();N1();oQ();MJ();tQ();NJ();uK();Ej()});function YS(J,Y,Z,X){return new Promise((G)=>{J.replace(()=>k(dK,{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:(f)=>G(f),onCancel:()=>G(void 0)}),()=>G(void 0)),J.setSize("medium")})}var Jq;var Of=S(()=>{h();nK();Ej();Jq={show:YS}});function iK(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 lK}from"@opentui/core";function ZS(J){let Y=u1(),{theme:Z}=x0(),[X,G]=p("prompt"),[f,Q]=p(""),[q,B]=p(J.defaultVendor),[H,K]=p(J.defaultBaseRef);function j(D){let O=Yq.indexOf(X());G(Yq[(O+D+Yq.length)%Yq.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=f().trim();if(!D){G("prompt");return}J.onSubmit({prompt:D,vendor:q(),baseRef:H().trim()||J.defaultBaseRef}),Y.clear()}U1(()=>({enabled:!0,bindings:iK(X(),{cycleField:j,stepEngine:U,commit:L})}));let M=(D)=>X()===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"),f0=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,f0),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"),F(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")),F(y,k(Y1,{get each(){return J.engines},children:(Y0)=>(()=>{var W0=V("text");return z(W0,"onMouseUp",()=>{B(Y0),G("engine")}),F(W0,()=>J.engineLabel(Y0)),w((o)=>{var _=q()===Y0?Z.primary:Z.textMuted,r=q()===Y0?lK.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(f0,t),W(f0,Z0),z(f0,"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=lK.BOLD,o=Z.text,_=Z.textMuted,r=M("prompt"),X0=f(),a=X()==="prompt",U0=M("engine"),c=M("branch"),N=H(),s=J.defaultBaseRef,H0=X()==="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)),X0!==Y0.i&&(Y0.i=z(g,"value",X0,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 XS(J,Y){return new Promise((Z)=>{J.replace(()=>k(ZS,GK(Y,{onSubmit:(X)=>Z(X),onCancel:()=>Z(void 0)})),()=>Z(void 0)),J.setSize("medium")})}var Yq,$K;var aK=S(()=>{h();h();h();h();h();h();h();h();Q1();HJ();N1();MJ();NJ();Of();Yq=["prompt","engine","branch"];$K={show:XS}});async function pK(J={}){let Y=J.logTag??"orch-connect",Z=J.connect??dJ,X=null;try{let G=await Z();if(!G)return uY(Y,"no daemon running \u2014 caller degrades"),null;return X=new GJ(G,{...J.orchestratorOptions,channels:J.channels}),await X.init(),X}catch(G){return XZ(Y,G),X?.dispose(),null}}var _K=S(()=>{vZ();DJ();gZ()});function rK(J){let[Y,Z]=p(J.initial??"sidebar"),[X,G]=p(0),f=s1();function Q(j){if(G((L)=>L+1),Y()===j)return;let U=f?.currentFocusedRenderable;if(U&&!U.isDestroyed)try{U.blur()}catch{}Z(j)}function q(j){let L=(Zq.indexOf(Y())+j+Zq.length)%Zq.length;Q(Zq[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:X};return k(GS.Provider,{value:K,get children(){return J.children}})}var Zq,GS;var oK=S(()=>{h();h();Q1();Zq=["sidebar","workspace","files","terminal"],GS=HY(null)});function sK(){for(let J of SZ){let Y=fS.get(J.id);if(!Y)continue;let Z=J;Z.keys=[...Y.keys],Z.hint=Y.hint?{...Y.hint}:void 0}}function tK(){zS((J)=>J+1)}function xj(J){return QS.get(J)}function qS(J){return xj(J)?.keys??[]}function yZ(J){let Y=[];for(let Z in J){let X=J[Z];if(!X)continue;let G=qS(Z);if(G.length===0){console.warn(`[kobe/keybindings] bindByIds: id="${Z}" has no chords (or doesn't exist in KobeKeymap)`);continue}G.forEach((f,Q)=>Y.push({key:f,cmd:X,slot:Q}))}return Y}var SZ,fS,uj,zS,QS;var WG=S(()=>{Q1();SZ=[{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"}}],fS=new Map(SZ.map((J)=>[J.id,{keys:[...J.keys],hint:J.hint?{...J.hint}:void 0}]));[uj,zS]=p(0);QS=new Map(SZ.map((J)=>[J.id,J]))});function Xq(){if(kZ)return kZ;let J=tz();if(!J.exists)return kZ={path:J.path,exists:!1,applied:[],warnings:[]},kZ;let Y=[...J.warnings],Z=JQ(J.doc,process.platform,{chordOptsFor:LH});Y.push(...Z.warnings);let X=Z.entries.filter((q)=>q.id.startsWith("tmux.")),G=Z.entries.filter((q)=>!q.id.startsWith("tmux.")),f=Z7(SZ,G);Y.push(...f.warnings);let Q=[...f.applied];if(X.length>0){let q=UH(X);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:UZ});continue}let H=q.binds[B];Q.push({id:B,keys:H?[H.chord]:[],defaultKeys:[GX[B]]});let K=SZ.find((j)=>j.id===B);if(K?.hint)K.hint.keys=H?`${rX(B)?"prefix ":""}${H.chord}`:"\u2014"}}for(let q of Y)console.warn(`[kobe/keybindings] ${q}`);return kZ={path:J.path,exists:!0,applied:Q,warnings:Y},kZ}function eK(){return kZ??Xq()}function J4(){kZ=null,Y7(),z7(),sK();let J=Xq();return tK(),J}var kZ=null;var wj=S(()=>{VH();XQ();YQ();WG()});var BS=250,VG,Y4;var Af=S(()=>{Kf();FX();Aj();({use:VG,provider:Y4}=_Q({name:"KV",init:()=>{let[J,Y]=CZ($1()),Z=new Set,X=null;function G(q){if(Z.size===0)return!0;try{let B={};for(let H of Z)B[H]=J[H];return uZ(B),Z.clear(),!0}catch(B){return console.error(`[kobe] kv ${q} failed:`,B),!1}}function f(){if(X)clearTimeout(X);X=setTimeout(()=>{X=null,G("write")},BS)}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),f()},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{wW({})}catch(q){console.error("[kobe] kv clear write failed:",q)}}};return Q}}))});var Gq="../pulse-n3cq1btw.wav";var Z4=()=>{};import{existsSync as jS,mkdirSync as WS}from"fs";import{tmpdir as VS}from"os";import{basename as KS,isAbsolute as US,join as hj,resolve as LS}from"path";function MS(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(fq!==void 0)return fq;let Y=(process.env.PATH??"").split(":").filter(Boolean);return fq=DS.find((Z)=>Y.some((X)=>jS(hj(X,Z))))??null,fq}async function OS(){return f4??=(async()=>{WS(G4,{recursive:!0});let J=hj(G4,KS(X4)),Y=Bun.file(J);if(await Y.exists())return J;return await Bun.write(Y,Bun.file(X4)),J})(),f4}function z4(J=0.4){let Y=FS();if(!Y)return;OS().then((Z)=>{try{Bun.spawn(MS(Y,Z,J),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var X4,G4,DS,fq,f4;var Q4=S(()=>{Z4();X4=US(Gq)?Gq:LS(import.meta.dir,Gq),G4=hj(VS(),"kobe-sfx"),DS=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function q4(J,Y){return`${J}:${Y}`}function H4(J){let Y=VG(),[Z,X]=p([]),[G,f]=p(new Map),Q=0;function q(j){if(f((U)=>{let L=new Map(U),M=q4(j.taskId,j.tabId),D=U.get(M);if(D==="needs_input"||D==="error")return U;return L.set(M,j.kind),L}),Y.get("notifications.sound.enabled",!0)!==!1){try{process.stdout.write("\x07")}catch{}z4()}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};X((M)=>[...M,L]),setTimeout(()=>B(U),AS)}}function B(j){X((U)=>U.filter((L)=>L.id!==j))}function H(j,U){f((L)=>{let M=q4(j,U);if(!L.has(M))return L;let D=new Map(L);return D.delete(M),D})}let K={toasts:Z,unread:G,notify:q,dismiss:B,markRead:H};return k(B4.Provider,{value:K,get children(){return J.children}})}function zq(){let J=CJ(B4);if(!J)throw Error("useNotifications must be used within a NotificationsProvider");return J}var AS=4500,B4;var Qq=S(()=>{h();Q1();Q4();Af();B4=HY()});function Pj(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=gS(Y.focusAccent);if(Z&&Z!==J.focusAccent())J.setFocusAccent(Z)}}function gS(J){if(J===null)return"primary";return RS.includes(J)?J:null}var RS;var j4=S(()=>{RS=["primary","success","info"]});import{readFileSync as CS}from"fs";function W4(J){try{let Y=JSON.parse(CS(TJ(),"utf8")),Z=typeof Y.activeTheme==="string"&&Uf(Y.activeTheme)?Y.activeTheme:J,X=Y.transparentBackground===!0,G=typeof Y.focusAccent==="string"&&VX.includes(Y.focusAccent)?Y.focusAccent:null;return{theme:Z,transparent:X,focusAccent:G}}catch{return{theme:J,transparent:!1,focusAccent:null}}}var V4=S(()=>{c1();N1()});function yS(J){if(J)zz(J);Xq();for(let{name:Y,theme:Z}of sG())gj(Y,Z)}function kS(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(H4,{get children(){return Y()}}):Y(),X=()=>k(AK,{get children(){return Z()}}),G=()=>J.focus?k(rK,{initial:"sidebar",get children(){return X()}}):X(),f=()=>J.kv?k(Y4,{get children(){return G()}}):G();return k(DK,{mode:"dark",get theme(){return J.theme},get children(){return f()}})}function NS(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 sG())gj(q,B)},transparentBackground:()=>Y.transparentBackground,setTransparentBackground:(q)=>Y.setTransparentBackground(q),focusAccent:()=>Y.focusAccent,setFocusAccent:(q)=>Y.setFocusAccent(q)};Pj(Z,{theme:J.boot.theme,transparentBackground:J.boot.transparent,focusAccent:J.boot.focusAccent});let[X,G]=p(null),f=!1;o1(()=>{(async()=>{let q=await pK({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!q)return;if(f){q.dispose();return}G(q)})()}),p0(()=>{let q=X()?.uiPrefsSignal()();if(q)Pj(Z,q)});let Q=null;return p0(()=>{let q=X()?.keybindingsRevSignal()();if(q==null)return;if(Q===null||q===Q){Q=q;return}Q=q,J4()}),i1(()=>{f=!0,X()?.dispose()}),null}async function QJ(J){yS(J.logContext);let Y=W4(SS),Z=await J.setup(Y),X=J.providers?.kv??!0,G=J.providers?.focus??!0,f=J.providers?.notifications??!1;await jK(()=>k(IS,{get theme(){return Y.theme},kv:X,focus:G,notifications:f,get children(){return[k(NS,{boot:Y}),r0(()=>Z.root())]}}),kS(Z.onDestroy))}var SS="claude";var IZ=S(()=>{h();h();h();vZ();Q1();_K();oK();wj();Af();Qq();N1();QQ();NJ();j4();V4()});async function vj(J,Y,Z,X,G={}){let f=K1(Y.id);if(await G1(f))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(() => (pX(),WH)),H=B(Z,Q,{kind:G.includeInitPrompt?"repo-init":"none"});if(!await q({name:f,cwd:Q,command:LJ(X),taskId:Y.id,vendor:X,repo:Z,launchInit:H}))throw Error(`failed to start tmux session for ${Y.id}`);return!1}async function qq(J,Y,Z,X,G={}){await vj(J,Y,Z,X,G),await J.setActiveTask(Y.id).catch(()=>{});let{prepareWindowForSwitch:f}=await Promise.resolve().then(() => (ZJ(),ZY));await f(K1(Y.id)),await u0(["switch-client","-t",`=${K1(Y.id)}`])}var mj=S(()=>{yJ();w1()});var K4={};j1(K4,{startNewTaskHost:()=>bS,NewTaskPage:()=>Bq});function Bq(J){let{theme:Y}=x0(),Z=u1();o1(()=>{X()});async function X(){let G=EJ(),f=J.defaultRepo||G[0]||process.cwd(),Q=C1("lastSelectedVendor")??T1,q=await xY(),B=J.orchestrator,H=await Jq.show(Z,f,G,{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 qq(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 G=V("box");return z(G,"flexDirection","column"),z(G,"flexGrow",1),w((f)=>z(G,"backgroundColor",Y.background,f)),G})()}async function bS(J){await QJ({setup:async()=>{let Y=null;try{let Z=await XY(),X=new GJ(Z);await X.init(),Y=X}catch(Z){console.error("[kobe new-task] daemon unavailable; cannot create task:",Z)}return{root:()=>k(Bq,{get defaultRepo(){return J.defaultRepo},orchestrator:Y}),onDestroy:()=>{Y?.dispose()}}}})}var cj=S(()=>{h();h();h();h();DJ();Q1();gZ();mZ();A1();xJ();Of();N1();IZ();mj();NJ()});function Hq(J,Y,Z,X,G={}){if(J.length===0)return Y;let f=new Map;for(let B of J)f.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=f.get(Z(H));if(K&&X(K,H)&&(!G.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 U4(J,Y){if(!J)return!0;let Z=J.toLowerCase(),X=Y.toLowerCase(),G=0;for(let f=0;f<X.length&&G<Z.length;f++)if(X.charCodeAt(f)===Z.charCodeAt(G))G++;return G===Z.length}function TS(J,Y){let Z=Y==="archived";return J.filter((X)=>X.archived===Z)}function dj(J,Y,Z,X="default",G){let f=TS(J,Y),Q=Z?.trim()??"",q=G?iJ(G):null,B=Q?f.filter((D)=>U4(Q,`${D.title} ${zY(D.repo)}`)):f,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))),X==="recent")K.sort(L4),j.sort(L4);let L=[],M=0;for(let D of H)L.push({kind:"task",task:D,flatIndex:M}),M++;for(let D of K)L.push({kind:"task",task:D,flatIndex:M}),M++;for(let D of j)L.push({kind:"task",task:D,flatIndex:M}),M++;return L}function L4(J,Y){let Z=D4(Y)-D4(J);if(Z!==0)return Z;return String(Y.id).localeCompare(String(J.id))}function D4(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 ES(J,Y){let Z=zY(J);if(!Y.some((G)=>G!==J&&zY(G)===Z))return Z;return J.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function M4(J,Y){let Z=Y==="archived",X=new Map;for(let f of J){let Q=iJ(f.repo),q=X.get(Q)??{repo:f.repo,count:0};if(f.kind==="main")q.repo=f.repo;else if(f.archived===Z)q.count+=1;X.set(Q,q)}let G=[...X.values()].map((f)=>f.repo);return[...X.values()].map((f)=>({repo:f.repo,label:ES(f.repo,G),count:f.count})).sort((f,Q)=>f.label.localeCompare(Q.label))}function F4(J,Y){if(J.length===0)return-1;if(!Y)return J[0]?.flatIndex??-1;let Z=iJ(Y),X=J.find((f)=>f.task.kind!=="main"&&iJ(f.task.repo)===Z);if(X)return X.flatIndex;return J.find((f)=>f.task.kind==="main"&&iJ(f.task.repo)===Z)?.flatIndex??J[0]?.flatIndex??-1}function nj(J){return J.map((Y)=>Y.task.id)}function O4(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 uS(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 Hq(J,Y,(Z)=>Z.task.id,(Z,X)=>Z.flatIndex===X.flatIndex&&uS(Z.task,X.task),{samePosition:!0})}var jq=()=>{};var R4={};j1(R4,{startQuickTaskHost:()=>PS});async function xS(J,Y){let Z,X;if(Y){let j=await KJ(Y,["@kobe_task","@kobe_worktree"]);Z=j["@kobe_task"]||void 0,X=j["@kobe_worktree"]||void 0}let G=(Z?J?.getTask(Z)?.repo:void 0)??EJ()[0],f=G??X??process.cwd();if(!G)return{ctx:null,fallbackRepo:f};let Q=await xY(),q=C1("lastSelectedVendor")??T1,B=Q.length===0||Q.includes(q)?q:Q[0]??q,H=Lf(fJ(G))??fY,K=Q.length>0?Q:[B];return{ctx:{repo:G,vendor:B,baseRef:H,engines:K},fallbackRepo:f}}async function wS(J,Y,Z,X,G){let f=await vj(J,Y,Z,X),Q=K1(Y.id),{pane:q}=await rG(Q,!f);if(q)await oG(q,G)}function hS(J){let{theme:Y}=x0(),Z=u1();o1(()=>{X()});async function X(){let G=J.ctx,f=await $K.show(Z,{repoLabel:zY(G.repo),engines:G.engines,defaultVendor:G.vendor,defaultBaseRef:G.baseRef,engineLabel:sZ});if(f===void 0)process.exit(0);d1("lastSelectedVendor",f.vendor),NY(G.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:G.repo,baseRef:f.baseRef,vendor:f.vendor});await wS(Q,q,G.repo,f.vendor,f.prompt),await qq(Q,q,G.repo,f.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 z(G,"flexDirection","column"),z(G,"flexGrow",1),w((f)=>z(G,"backgroundColor",Y.background,f)),G})()}async function PS(J){await QJ({setup:async()=>{let Y=null;try{let G=await XY(),f=new GJ(G);await f.init(),Y=f}catch(G){console.error("[kobe quick-task] daemon unavailable; cannot create task:",G)}let{ctx:Z,fallbackRepo:X}=await xS(Y,J.session);return{root:()=>Z?k(hS,{ctx:Z,orchestrator:Y}):k(Bq,{defaultRepo:X,orchestrator:Y}),onDestroy:()=>{Y?.dispose()}}}})}var g4=S(()=>{h();h();h();h();DJ();Q1();gZ();mZ();yJ();A1();w1();GQ();xJ();aK();N1();oQ();IZ();tQ();mj();cj();jq();NJ()});function Vq(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 Wq(J,Y){if(J.includes("/"))return J.split("/").map((G)=>Wq(G,Y)).join("/");let Z=J.toLowerCase();if(Z==="tab")return"tab";let X=mS[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 KG(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("+")?KG(q,Y):Wq(q,!0)}`}let G=Z.split("+");if(G.length===1)return Wq(G[0]??"",!1);let f=G[G.length-1]??"";return`${G.slice(0,-1).map((q)=>vS[q.toLowerCase().trim()]??q).join("")} ${Wq(f,!0)}`}var vS,mS;var ij=S(()=>{vS={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},mS={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 C4}from"@opentui/core";function cS(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 UG(J={}){let Y=u1(),{theme:Z}=x0(),X=()=>cS(SZ),G=()=>J.onClose?J.onClose():Y.clear(),[f,Q]=p("\u2303B");return o1(()=>{n0(["show-options","-g","prefix"]).then(({code:q,stdout:B})=>{if(q!==0)return;let H=Vq(B);if(H)Q(H)})}),U1(()=>({bindings:[{key:"?",cmd:G}]})),(()=>{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",G),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),F(U,k(Y1,{get each(){return X()},children:(L)=>(()=>{var M=V("box"),D=V("text");return W(M,D),z(M,"gap",0),F(D,()=>L.category),F(M,k(Y1,{get each(){return L.rows},children:(O)=>{let A=O.hint?.keys??O.keys[0]??"\u2014",l=()=>A==="\u2014"?"\u2014":KG(A,f()),R=()=>(O.hint?O.keys:O.keys.slice(1)).map((C)=>KG(C,f()));return(()=>{var C=V("box"),g=V("box"),y=V("text"),$=V("box"),f0=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),F(y,l),W($,f0),z($,"flexGrow",1),F(f0,()=>O.description),F(C,(()=>{var t=r0(()=>R().length>0);return()=>t()?(()=>{var Z0=V("box"),u=V("text");return W(Z0,u),F(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(f0,"fg",u,t.t)),t},{e:void 0,t:void 0}),C})()}}),null),w((O)=>{var A=Z.accent,l=C4.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}),M})()})),w((L)=>{var M=C4.BOLD,D=Z.text,O=Z.textMuted,A={trackOptions:{backgroundColor:Z.backgroundDialog,foregroundColor:Z.borderActive}};return M!==L.e&&(L.e=z(H,"attributes",M,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 lj=S(()=>{h();h();h();h();h();h();h();h();Q1();w1();WG();N1();ij();MJ();NJ();UG.show=(J)=>{J.replace(()=>k(UG,{}))}});import{TextAttributes as dS}from"@opentui/core";function S4(J){let Y=u1(),{theme:Z}=x0(),[X,G]=p(J.currentTitle);function f(){let Q=X().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"),M=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"),F(B,()=>J.dialogTitle??"Rename task"),W(H,T("esc")),z(H,"onMouseUp",()=>J.onCancel()),W(K,j),W(K,U),z(K,"gap",0),F(j,()=>J.fieldLabel??"title"),z(U,"focused",!0),z(U,"onInput",(D)=>G(FJ(D))),z(U,"onSubmit",()=>f()),W(L,M),z(L,"paddingBottom",1),F(M,()=>`enter ${J.submitLabel??"rename"} \xB7 esc cancel`),w((D)=>{var O=dS.BOLD,A=Z.text,l=Z.textMuted,R=Z.accent,C=X(),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(M,"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 y4=S(()=>{h();h();h();h();h();h();h();Q1();N1();NJ();Of()});function nS(J,Y,Z={}){return new Promise((X)=>{J.replace(()=>k(S4,{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 QY;var $j=S(()=>{h();y4();QY={show:nS}});import{TextAttributes as iS}from"@opentui/core";function lS(J){if(!J)return J;return J.charAt(0).toUpperCase()+J.slice(1)}function rY(J){let Y=u1(),{theme:Z}=x0(),[X,G]=CZ({active:J.initialActive??"confirm"});return U1(()=>({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 f=V("box"),Q=V("box"),q=V("text"),B=V("text"),H=V("text"),K=V("box");return W(f,Q),W(f,H),W(f,K),z(f,"paddingLeft",2),z(f,"paddingRight",2),z(f,"paddingBottom",1),z(f,"gap",0),W(Q,q),W(Q,B),z(Q,"flexDirection","row"),z(Q,"justifyContent","space-between"),F(q,()=>J.title),W(B,T("esc")),z(B,"onMouseUp",()=>Y.clear()),F(H,()=>J.message),z(K,"flexDirection","row"),z(K,"justifyContent","flex-end"),z(K,"paddingTop",1),F(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()}),F(L,()=>lS(j==="cancel"?J.label??j:J.confirmLabel??j)),w((M)=>{var D=j===X.active?Z.primary:void 0,O=j===X.active?Z.selectedListItemText:Z.textMuted;return D!==M.e&&(M.e=z(U,"backgroundColor",D,M.e)),O!==M.t&&(M.t=z(L,"fg",O,M.t)),M},{e:void 0,t:void 0}),U})()})),w((j)=>{var U=iS.BOLD,L=Z.text,M=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)),M!==j.a&&(j.a=z(B,"fg",M,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}),f})()}var aj=S(()=>{h();h();h();h();h();h();h();Q1();Kf();N1();MJ();NJ();rY.show=(J,Y,Z,X,G,f)=>{return new Promise((Q)=>{J.replace(()=>k(rY,{title:Y,message:Z,onConfirm:()=>Q(!0),onCancel:()=>Q(!1),label:X,confirmLabel:G,get initialActive(){return f?.initialActive}}),()=>Q(void 0)),J.setSize("small")})}});import{unlinkSync as $S}from"fs";import{join as aS}from"path";function k4(J){return J instanceof GJ}function I4(J,Y){try{J?.destroy()}catch(Z){console.error(`kobe: renderer.destroy() failed during ${Y}:`,Z)}}async function pj(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{$S(aS(qY(),".kobe","tasks.json"))}catch(G){if(G.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",G)}I4(Z,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
214
+ `),process.exit(0)}async function _j(J,Y,Z){if(!(Y instanceof GJ))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;I4(Z,"daemon restart"),process.stderr.write(`kobe: window closed. Relaunch kobe to start fresh.
215
+ `),process.exit(0)}var N4=S(()=>{gZ();c1();aj()});function pS(J){return`theme:${J}`}function rj(J){return`accent:${J}`}function _S(J){return`engine:${J}`}function Rf(J){return`surface:${J}`}function oj(J){return[...J.themeNames.map((Y)=>({id:pS(Y),kind:"theme",name:Y})),{id:"transparent",kind:"transparent"},...J.focusAccentSlots.map((Y)=>({id:rj(Y),kind:"focusAccent",slot:Y})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:Rf("chattab"),kind:"surface",surface:"chattab"},{id:Rf("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function rS(J){return[...J.map((Y)=>({id:_S(Y),kind:"engine",vendor:Y})),{id:"add-engine",kind:"engineAdd"}]}function oS(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function gf(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 T4(J,Y){switch(J){case"general":return oj(Y);case"engines":return rS(Y.engineList);case"accounts":case"keys":return[];case"feedback":return oS();case"dev":return gf(Y.hasDaemon)}}function Cf(J,Y){return J.findIndex((Z)=>Z.id===Y)}function Kq(J,Y){return J[Y]}var UX,b4;var sj=S(()=>{UX=[{id:"general",label:"General"},{id:"engines",label:"Engines"},{id:"accounts",label:"Accounts"},{id:"keys",label:"Keybindings"},{id:"feedback",label:"Feedback"},{id:"dev",label:"Dev"}],b4={primary:"Primary (brand accent)",success:"Success (legacy green)",info:"Info (cool blue)"}});import{TextAttributes as _0}from"@opentui/core";function E4(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),F(Z,k(Y1,{each:UX,children:(X,G)=>{let f=()=>G()===J.cursor(),Q=()=>f()&&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(X.id)),z(B,"wrapMode","none"),F(B,()=>X.label),w((H)=>{var K=Q()?Y.primary:void 0,j=Q()?Y.selectedListItemText:f()?Y.accent:Y.textMuted,U=f()?_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 u4(J){let Y=x0(),{theme:Z}=Y,X=()=>oj({themeNames:J.themeNames(),focusAccentSlots:VX}),G=(R)=>Cf(X(),R),f=()=>G("transparent"),Q=()=>G("toast"),q=()=>G("sound"),B=()=>G(Rf("chattab")),H=()=>G(Rf("taskpanel")),K=()=>G("editor-kind"),j=()=>G("editor-custom"),U=()=>J.bodyRow()===f(),L=()=>J.bodyRow()===Q(),M=()=>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"),f0=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"),X0=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"),c0=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"),v0=V("text"),$0=V("text"),O0=V("box"),m=V("text"),G0=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),F(y,k(Y1,{get each(){return J.themeNames()},children:(E,l0)=>{let S0=()=>J.level()==="body"&&J.bodyRow()===l0(),m0=()=>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"),F(a0,()=>m0()?"\u25CF ":" ",null),F(a0,E,null),w((n)=>{var e=S0()?Z.primary:void 0,q0=S0()?Z.selectedListItemText:m0()?Z.accent:Z.text,M0=S0()||m0()?_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($,f0),W($,t),W($,Z0),z($,"flexDirection","column"),z($,"gap",0),z($,"paddingTop",1),W(f0,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(f()),J.toggleTransparent()}),z(u,"wrapMode","none"),F(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"),F(B0,k(Y1,{each:VX,children:(E)=>{let l0=()=>G(rj(E)),S0=()=>J.level()==="body"&&J.bodyRow()===l0(),m0=()=>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"),F(a0,()=>m0()?"\u25CF ":" ",null),F(a0,()=>b4[E],null),w((n)=>{var e=S0()?Z.primary:void 0,q0=S0()?Z.selectedListItemText:m0()?Z.focusAccent:Z.text,M0=S0()||m0()?_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,X0),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(X0,a),z(X0,"flexDirection","row"),z(X0,"gap",1),z(X0,"paddingLeft",1),z(X0,"paddingRight",1),z(X0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(Q()),J.toggleToast()}),W(a,U0),z(a,"wrapMode","none"),F(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"),F(N,()=>J.soundEnabled()?"[x]":"[ ]",s),W(H0,D0),W(H0,y0),W(H0,c0),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(c0,x),z(c0,"flexDirection","row"),z(c0,"gap",1),z(c0,"paddingLeft",1),z(c0,"paddingRight",1),z(c0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(B()),J.selectSurface("chattab")}),W(x,F0),z(x,"wrapMode","none"),F(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"),F(L0,()=>J.settingsSurface()==="taskpanel"?"[x]":"[ ]",k0),W(T0,v0),W(T0,$0),W(T0,O0),W(T0,G0),z(T0,"flexDirection","column"),z(T0,"gap",0),z(T0,"paddingTop",1),W(v0,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,m),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(m,"wrapMode","none"),F(m,()=>`editor: < ${J.editorKind()} > (enter to change)`),W(G0,A0),z(G0,"flexDirection","row"),z(G0,"gap",1),z(G0,"paddingLeft",1),z(G0,"paddingRight",1),z(G0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(j()),J.editEditorCustom()}),z(A0,"wrapMode","none"),F(A0,()=>`custom: ${J.editorCustomCommand().trim()||"(unset \u2014 enter to edit)"}`),w((E)=>{var l0=Z.text,S0=_0.BOLD,m0=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,f1=Z.text,b0=_0.BOLD,E0=Z.textMuted,B1=L()?Z.primary:void 0,H1=L()?Z.selectedListItemText:J.toastEnabled()?Z.accent:Z.textMuted,t0=_0.BOLD,e0=M()?Z.primary:void 0,P=M()?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,X1=_0.BOLD,OJ=Z.textMuted,bJ=A()?Z.primary:void 0,qJ=A()?Z.selectedListItemText:Z.accent,SY=_0.BOLD,yY=l()?Z.primary:void 0,BJ=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)),m0!==E.a&&(E.a=z(g,"fg",m0,E.a)),w0!==E.o&&(E.o=z(f0,"fg",w0,E.o)),a0!==E.i&&(E.i=z(f0,"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)),f1!==E.c&&(E.c=z(_,"fg",f1,E.c)),b0!==E.w&&(E.w=z(_,"attributes",b0,E.w)),E0!==E.m&&(E.m=z(r,"fg",E0,E.m)),B1!==E.f&&(E.f=z(X0,"backgroundColor",B1,E.f)),H1!==E.y&&(E.y=z(a,"fg",H1,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(c0,"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(v0,"fg",h0,E.x)),X1!==E.j&&(E.j=z(v0,"attributes",X1,E.j)),OJ!==E.q&&(E.q=z($0,"fg",OJ,E.q)),bJ!==E.z&&(E.z=z(O0,"backgroundColor",bJ,E.z)),qJ!==E.P&&(E.P=z(m,"fg",qJ,E.P)),SY!==E.H&&(E.H=z(m,"attributes",SY,E.H)),yY!==E.F&&(E.F=z(G0,"backgroundColor",yY,E.F)),BJ!==E.M&&(E.M=z(A0,"fg",BJ,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 x4(J){let{theme:Y}=x0(),Z=()=>J.vendors.length;return(()=>{var X=V("box"),G=V("text"),f=V("text"),Q=V("box"),q=V("box"),B=V("text");return W(X,G),W(X,f),W(X,Q),z(X,"flexDirection","column"),z(X,"gap",1),W(G,T("Launch command")),W(f,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(f,"wrapMode","word"),W(Q,q),z(Q,"flexDirection","column"),z(Q,"gap",0),F(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"),M=V("text"),D=V("text");return W(U,L),W(U,M),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"),F(L,()=>J.isDefaultEngine(H)?"\u25CF":" "),z(M,"wrapMode","none"),F(M,()=>J.displayName(H)),z(D,"wrapMode","none"),F(D,()=>J.commandText(H),null),F(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(M,"fg",C,O.o)),g!==O.i&&(O.i=z(M,"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,M=J.level()==="body"&&J.bodyRow()===Z()?Y.selectedListItemText:Y.primary;return K!==H.e&&(H.e=z(G,"fg",K,H.e)),j!==H.t&&(H.t=z(G,"attributes",j,H.t)),U!==H.a&&(H.a=z(f,"fg",U,H.a)),L!==H.o&&(H.o=z(q,"backgroundColor",L,H.o)),M!==H.i&&(H.i=z(B,"fg",M,H.i)),H},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),X})()}function w4(J){let{theme:Y}=x0(),Z=(X)=>X.binary.found?`Binary: ${X.binary.path}`:`Binary: ${X.binary.error}`;return(()=>{var X=V("box"),G=V("text"),f=V("text"),Q=V("box"),q=V("text"),B=V("box"),H=V("text"),K=V("box"),j=V("text");return W(X,G),W(X,f),W(X,Q),W(X,B),W(X,K),z(X,"flexDirection","column"),z(X,"gap",1),W(G,T("Accounts")),W(f,T("Read-only view of locally-detected engine accounts. Login flows land here later.")),z(f,"wrapMode","word"),W(Q,q),z(Q,"flexDirection","column"),z(Q,"gap",0),W(q,T("claude-code")),F(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),F(Q,k(z0,{get when(){return J.claudeStatus()},children:(U)=>(()=>{var L=V("box"),M=V("text");return W(L,M),z(L,"flexDirection","column"),z(L,"gap",0),z(M,"wrapMode","word"),F(M,()=>Z(U())),F(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"),F(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),F(L,k(z0,{get when(){return U().accountError},children:(D)=>(()=>{var O=V("text");return z(O,"wrapMode","word"),F(O,()=>`! ${D()}`),w((A)=>z(O,"fg",Y.warning,A)),O})()}),null),w((D)=>z(M,"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")),F(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),F(B,k(z0,{get when(){return J.codexStatus()},children:(U)=>(()=>{var L=V("box"),M=V("text");return W(L,M),z(L,"flexDirection","column"),z(L,"gap",0),z(M,"wrapMode","word"),F(M,()=>Z(U())),F(L,()=>{let D=U().account;if(D.kind==="chatgpt")return(()=>{var O=V("text");return z(O,"wrapMode","word"),F(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),F(L,k(z0,{get when(){return U().accountError},children:(D)=>(()=>{var O=V("text");return z(O,"wrapMode","word"),F(O,()=>`! ${D()}`),w((A)=>z(O,"fg",Y.warning,A)),O})()}),null),w((D)=>z(M,"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")),F(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),F(K,k(z0,{get when(){return J.copilotStatus()},children:(U)=>(()=>{var L=V("box"),M=V("text");return W(L,M),z(L,"flexDirection","column"),z(L,"gap",0),z(M,"wrapMode","word"),F(M,()=>Z(U())),F(L,()=>{let D=U().account;if(D.kind==="token")return(()=>{var O=V("text");return F(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),F(L,k(z0,{get when(){return U().accountError},children:(D)=>(()=>{var O=V("text");return z(O,"wrapMode","word"),F(O,()=>`! ${D()}`),w((A)=>z(O,"fg",Y.warning,A)),O})()}),null),w((D)=>z(M,"fg",U().binary.found?Y.textMuted:Y.warning,D)),L})()}),null),w((U)=>{var L=Y.text,M=_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(G,"fg",L,U.e)),M!==U.t&&(U.t=z(G,"attributes",M,U.t)),D!==U.a&&(U.a=z(f,"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}),X})()}function h4(J){let{theme:Y}=x0(),Z=()=>J.level()==="body"&&J.bodyRow()===0,X=()=>J.level()==="body"&&J.bodyRow()===1,G=()=>J.level()==="body"&&J.bodyRow()===2;return(()=>{var f=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"),M=V("text"),D=V("box"),O=V("text");return W(f,Q),W(f,q),W(f,B),z(f,"flexDirection","column"),z(f,"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"),F(j,()=>J.title().trim()||"(enter to edit)"),W(U,L),W(U,M),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(M,"wrapMode","none"),F(M,()=>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")),F(f,k(z0,{get when(){return J.status()},get children(){var A=V("text");return z(A,"wrapMode","word"),F(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,f0=Z()?Y.selectedListItemText:Y.textMuted,t=X()?Y.primary:void 0,Z0=X()?Y.selectedListItemText:Y.text,u=_0.BOLD,B0=X()?Y.selectedListItemText:Y.textMuted,Y0=G()?Y.primary:Y.backgroundElement,W0=G()?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)),f0!==A.s&&(A.s=z(j,"fg",f0,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(M,"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}),f})()}function P4(J){let{theme:Y}=x0(),Z=()=>J.level()==="body"&&J.bodyRow()===0,X=()=>J.level()==="body"&&J.bodyRow()===1,G=()=>Cf(gf(J.hasDaemon),"remote-projects"),f=()=>J.level()==="body"&&J.bodyRow()===G(),Q=()=>Cf(gf(J.hasDaemon),"auto-status"),q=()=>J.level()==="body"&&J.bodyRow()===Q(),B=()=>Cf(gf(J.hasDaemon),"dispatcher"),H=()=>J.level()==="body"&&J.bodyRow()===B();return(()=>{var K=V("box"),j=V("text"),U=V("text"),L=V("box"),M=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"),f0=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,M),z(L,"flexDirection","row"),z(L,"paddingLeft",1),z(L,"paddingRight",1),z(L,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(0),J.confirmReset()}),W(M,T("[enter] Reset")),F(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,X0=_0.BOLD,a=Y.textMuted,U0=X()?Y.primary:Y.backgroundElement,c=X()?Y.selectedListItemText:Y.accent,N=_0.BOLD;return r!==_.e&&(_.e=z(B0,"fg",r,_.e)),X0!==_.t&&(_.t=z(B0,"attributes",X0,_.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,f0),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(G()),J.toggleRemoteProjects()}),F(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()}),F($,()=>J.autoStatusEnabled()?"[x] Auto status flow (on)":"[ ] Auto status flow (off)"),W(f0,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(f0,"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()}),F(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,X0=Y.textMuted,a=Y.text,U0=_0.BOLD,c=Y.textMuted,N=f()?Y.primary:Y.backgroundElement,s=f()?Y.selectedListItemText:Y.text,H0=J.remoteProjectsEnabled()?_0.BOLD:void 0,D0=Y.textMuted,y0=q()?Y.primary:Y.backgroundElement,c0=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(M,"fg",_,u.i)),r!==u.n&&(u.n=z(M,"attributes",r,u.n)),X0!==u.s&&(u.s=z(D,"fg",X0,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)),c0!==u.f&&(u.f=z($,"fg",c0,u.f)),x!==u.y&&(u.y=z($,"attributes",x,u.y)),F0!==u.g&&(u.g=z(f0,"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 v4(){let{theme:J}=x0(),Y=eK(),Z=Object.keys(KH).sort();return(()=>{var X=V("box"),G=V("text"),f=V("text"),Q=V("box"),q=V("text"),B=V("text"),H=V("text"),K=V("text");return W(X,G),W(X,f),W(X,Q),W(X,H),W(X,K),z(X,"flexDirection","column"),z(X,"gap",1),W(G,T("Keybindings")),W(f,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(f,"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"),F(B,()=>Y.path,null),F(B,()=>Y.exists?"":" (not created yet)",null),F(X,k(z0,{get when(){return!Y.exists},get children(){var j=V("box"),U=V("text"),L=V("text"),M=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,M),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(M,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,f0=_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)),f0!==y.t&&(y.t=z(U,"attributes",f0,y.t)),t!==y.a&&(y.a=z(L,"fg",t,y.a)),Z0!==y.o&&(y.o=z(M,"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),F(X,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")),F(j,k(z0,{get when(){return Y.applied.length===0},get children(){var L=V("text");return W(L,T("none")),w((M)=>z(L,"fg",J.textMuted,M)),L}}),null),F(j,k(Y1,{get each(){return Y.applied},children:(L)=>(()=>{var M=V("text");return z(M,"wrapMode","word"),F(M,()=>`${L.id} \u2192 ${L.keys.length>0?L.keys.join(" / "):"(unbound)"} (default: ${L.defaultKeys.join(" / ")})`),w((D)=>z(M,"fg",J.text,D)),M})()}),null),w((L)=>{var M=J.text,D=_0.BOLD;return M!==L.e&&(L.e=z(U,"fg",M,L.e)),D!==L.t&&(L.t=z(U,"attributes",D,L.t)),L},{e:void 0,t:void 0}),j}}),H),F(X,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")),F(j,k(Y1,{get each(){return Y.warnings},children:(L)=>(()=>{var M=V("text");return z(M,"wrapMode","word"),F(M,`! ${L}`),w((D)=>z(M,"fg",J.warning,D)),M})()}),null),w((L)=>{var M=J.warning,D=_0.BOLD;return M!==L.e&&(L.e=z(U,"fg",M,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"),F(K,()=>`Fixed (not rebindable): ${Z.join(", ")}.`),w((j)=>{var U=J.text,L=_0.BOLD,M=J.textMuted,D=J.text,O=_0.BOLD,A=J.textMuted,l=J.textMuted,R=J.textMuted;return U!==j.e&&(j.e=z(G,"fg",U,j.e)),L!==j.t&&(j.t=z(G,"attributes",L,j.t)),M!==j.a&&(j.a=z(f,"fg",M,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}),X})()}var m4=S(()=>{h();h();h();h();h();h();h();h();Q1();wj();N1();YQ();sj()});import{TextAttributes as sS}from"@opentui/core";function tS(J){return J.split(/[-_]+/).filter((Y)=>Y.length>0).map((Y)=>Y.charAt(0).toUpperCase()+Y.slice(1)).join(" ")}function LX(J){let Y=u1(),Z=x0(),X=s1(),{theme:G}=Z,[f,Q]=p("sidebar"),[q,B]=p("general"),[H,K]=p(0),[j,U]=p(0),[L,M]=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=k4(J.orchestrator),[y,$]=p(null),[f0,t]=p(null),[Z0,u]=p(null),B0=!1;p0(()=>{if(q()!=="accounts"||B0)return;B0=!0,Kz().then($),Uz().then(t),Lz().then(u)});function Y0(){return T4(q(),{themeNames:R(),focusAccentSlots:VX,engineList:k0(),hasDaemon:g})}function W0(){return Y0().length}function o(){return YX(J.kv.get(nY,JX))}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 X0(){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 c0(){return J.kv.get(rZ,!1)===!0}function x(){J.kv.set(rZ,!c0())}function F0(){return J.kv.get(oZ,!1)===!0}function Q0(){J.kv.set(oZ,!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 v0(P){return T0(P)||aG(P).join(" ")}function $0(P){return e1(P)&&T0(P).length===0&&!m(P)}function O0(P){let J0=J.kv.get(eJ(P),"");return typeof J0==="string"?J0.trim():""}function m(P){return O0(P).length>0}function G0(P){return O0(P)||QH[P]||P}let[A0,E]=p(C1("lastSelectedVendor")??T1);function l0(P){return A0()===P}function S0(P){d1("lastSelectedVendor",P),J.kv.set("lastSelectedVendor",P),E(P)}async function m0(P){let J0=await QY.show(Y,v0(P),{dialogTitle:`${G0(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,G0(P),{dialogTitle:`${G0(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:tS(J0))}function e(){if(q()!=="engines"||f()!=="body")return null;let P=Kq(Y0(),j());return P?.kind==="engine"?P.vendor:null}function q0(){return vX(J.kv.get(dY,cz))}function M0(){let P=eZ.indexOf(q0()),J0=eZ[(P+1)%eZ.length];if(J0)J.kv.set(dY,J0)}function K0(){let P=J.kv.get(VZ,"");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(VZ,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;M(P),l("")}async function f1(){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=zG({title:L(),body:D()});l(`sent: ${P.url}`),M(""),O("")}catch(P){l(`error: ${P instanceof Error?P.message:String(P)}`)}}function E0(){if(f()!=="sidebar"||W0()===0)return;if(Q("body"),U(0),q()==="general")C(0)}function B1(P){if(f()==="sidebar"){let F1=(H()+P+UX.length)%UX.length;K(F1);let O1=UX[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),Kq(Y0(),z1)?.kind==="theme")C(z1)}function H1(P){B(P),K(UX.findIndex((J0)=>J0.id===P)),U(0),Q("sidebar")}let t0={theme:(P)=>_(P.name),transparent:()=>X0(),focusAccent:(P)=>a(P.slot),toast:()=>s(),sound:()=>H0(),surface:(P)=>U0(P.surface),editorKind:()=>M0(),editorCustom:()=>void o0(),engine:(P)=>void m0(P.vendor),engineAdd:()=>void n(),feedbackTitle:()=>void N0(),feedbackBody:()=>void f1(),feedbackSend:()=>void b0(),devReset:()=>void pj(Y,J.kv,X),devRestartDaemon:()=>void _j(Y,J.orchestrator,X),devRemoteProjects:()=>y0(),devAutoStatus:()=>x(),devDispatcher:()=>Q0()};function e0(){let P=Kq(Y0(),j());if(!P)return;t0[P.kind](P)}return U1(()=>({enabled:!J.standalone||Y.stack.length===0,bindings:[{key:"down",cmd:()=>B1(1)},{key:"up",cmd:()=>B1(-1)},{key:"j",cmd:()=>B1(1)},{key:"k",cmd:()=>B1(-1)},{key:"tab",cmd:()=>B1(1)},{key:"right",cmd:E0},{key:"l",cmd:E0},{key:"left",cmd:()=>Q("sidebar")},{key:"h",cmd:()=>Q("sidebar")},{key:"return",cmd:()=>{if(f()==="sidebar"){E0();return}e0()}},{key:"t",cmd:X0},{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),F(O1,k(E4,{level:f,cursor:H,switchSection:H1}),R1),z(R1,"flexGrow",1),z(R1,"flexShrink",1),z(R1,"flexDirection","column"),z(R1,"gap",1),F(R1,k(z0,{get when(){return q()==="general"},get children(){return k(u4,{level:f,bodyRow:j,setLevel:Q,setBodyRow:U,themeNames:R,setThemeCursor:C,selectTheme:_,toggleTransparent:X0,selectFocusAccent:a,toastEnabled:c,soundEnabled:N,toggleToast:s,toggleSound:H0,settingsSurface:o,selectSurface:U0,editorKind:q0,cycleEditorKind:M0,editorCustomCommand:K0,editEditorCustom:()=>void o0()})}}),null),F(R1,k(z0,{get when(){return q()==="engines"},get children(){return k(x4,{level:f,bodyRow:j,setLevel:Q,setBodyRow:U,get vendors(){return k0()},isCustom:(J1)=>!e1(J1),displayName:G0,commandText:v0,isDefault:$0,isDefaultEngine:l0,editEngine:(J1)=>void m0(J1),renameEngine:(J1)=>void w0(J1),resetEngine:a0,onAddEngine:()=>void n()})}}),null),F(R1,k(z0,{get when(){return q()==="accounts"},get children(){return k(w4,{claudeStatus:y,codexStatus:f0,copilotStatus:Z0})}}),null),F(R1,k(z0,{get when(){return q()==="keys"},get children(){return k(v4,{})}}),null),F(R1,k(z0,{get when(){return q()==="feedback"},get children(){return k(h4,{level:f,bodyRow:j,setLevel:Q,setBodyRow:U,title:L,body:D,status:A,editTitle:()=>void N0(),editBody:()=>void f1(),submit:()=>void b0()})}}),null),F(R1,k(z0,{get when(){return q()==="dev"},get children(){return k(P4,{level:f,bodyRow:j,setLevel:Q,setBodyRow:U,hasDaemon:g,confirmReset:()=>void pj(Y,J.kv,X),confirmRestartDaemon:()=>void _j(Y,J.orchestrator,X),remoteProjectsEnabled:D0,toggleRemoteProjects:y0,autoStatusEnabled:c0,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=sS.BOLD,g0=G.text,h0=G.textMuted,X1=G.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)),X1!==J1.o&&(J1.o=z(L1,"fg",X1,J1.o)),J1},{e:void 0,t:void 0,a:void 0,o:void 0}),P})()}var tj=S(()=>{h();h();h();h();h();h();h();h();Q1();mZ();yJ();xQ();iG();Pz();A1();xJ();HJ();N1();dz();MJ();NJ();$j();N4();sj();m4();LX.show=(J,Y,Z)=>{let X=!1;return new Promise((G)=>{J.replace(()=>k(LX,{kv:Y,orchestrator:Z,onVisualPrefsChange:()=>{X=!0},onClose:()=>G({visualPrefsChanged:X})}),()=>G({visualPrefsChanged:X}))})}});import{TextAttributes as eS}from"@opentui/core";function d4(){let{theme:J}=x0(),Y=RY(),Z=zq(),X=()=>Z.toasts().slice(-c4),G=()=>Math.max(0,Y().width-Jy-Yy),f=()=>Math.max(0,Y().height-Zy-c4-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),F(Q,k(Y1,{get each(){return X()},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"),F(U,K),z(L,"wrapMode","none"),F(L,()=>q.title),w((M)=>{var D=B(),O=H(),A=eS.BOLD,l=H();return D!==M.e&&(M.e=z(j,"backgroundColor",D,M.e)),O!==M.t&&(M.t=z(U,"fg",O,M.t)),A!==M.a&&(M.a=z(U,"attributes",A,M.a)),l!==M.o&&(M.o=z(L,"fg",l,M.o)),M},{e:void 0,t:void 0,a:void 0,o:void 0}),j})()}})),w((q)=>{var B=G(),H=f();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 c4=4,Jy=40,Yy=2,Zy=2;var n4=S(()=>{h();h();h();h();h();h();h();Q1();Qq();N1()});import{TextAttributes as Xy}from"@opentui/core";function Gy(J,Y){return`daemon is ${J?`v${J}`:"an older build"} \u2014 you launched v${Y}. Run \`kobe daemon restart\` then \`kobe reload\``}function i4(J){let{theme:Y}=x0(),Z=()=>Math.max(4,J.width()-2);return k(z0,{get when(){return J.stale()},get children(){var X=V("box"),G=V("text"),f=V("box"),Q=V("text"),q=V("box"),B=V("text");return W(X,G),W(X,f),W(X,q),z(X,"flexDirection","column"),z(X,"flexShrink",0),z(X,"paddingLeft",1),z(X,"paddingRight",1),z(X,"paddingBottom",1),z(G,"wrapMode","none"),F(G,()=>"\u2594".repeat(Z())),W(f,Q),z(f,"flexDirection","row"),z(f,"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"),F(B,()=>Gy(J.daemonVersion(),J.clientVersion)),w((H)=>{var{warning:K,warning:j}=Y,U=Xy.BOLD,L=Y.text;return K!==H.e&&(H.e=z(G,"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}),X}})}var l4=S(()=>{h();h();h();h();h();h();h();Q1();N1()});function $4(J,Y){return J.find((Z)=>Z.id!==Y&&!Z.archived)}async function fy(J){let Y=J.tasks.find((f)=>f.id===J.taskId);if(!Y)return null;let Z=!Y.archived;try{await J.orch.setArchived(J.taskId,Z)}catch(f){return J.logger.error(`${J.logPrefix} archive failed:`,f),null}if(!Z)return{archived:Z};let X=K1(J.taskId),G=$4(J.tasks,J.taskId);if(await MY(X,G?K1(G.id):void 0).catch((f)=>{J.logger.error(`${J.logPrefix} switch-client failed:`,f)}),J.updateActiveTask)await J.orch.setActiveTask(G?.id??null).catch(()=>{});return await vJ(X).catch((f)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,f)}),{archived:Z,nextTask:G}}async function zy(J){let Y=$4(J.tasks,J.taskId),Z=K1(J.taskId);if(J.switchBeforeKill)await MY(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 vJ(Z).catch((X)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,X)}),{nextTask:Y}}async function a4(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 fy({orch:J.orch,tasks:J.tasks(),taskId:Y,logger:J.logger,logPrefix:J.logPrefix,updateActiveTask:J.updateActiveTask}))return;await J.reload?.()}async function p4(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 G=!1;try{await J.orch.deleteTask(Y),G=!0}catch(Q){if((Q instanceof Error?Q.message:String(Q)).includes(sq)){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(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(!G)return;let{nextTask:f}=await zy({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,f)}async function _4(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 r4(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 o4(J,Y){let Z=J.tasks().find((f)=>f.id===Y);if(!Z||!J.orch)return;let X=await xY(),G=sY(X,Z.vendor??T1);try{await J.orch.setVendor(Y,G)}catch(f){J.logger.error(`${J.logPrefix} task.setVendor failed:`,f),J.notifyError?.(`Couldn't switch engine: ${f instanceof Error?f.message:String(f)}`);return}J.notifyInfo?.(`Engine \u2192 ${sZ(G)} (applies on reopen)`),await J.reload?.()}async function s4(J){let Y=EJ(),Z=J.cursorRepo()??Y[0]??process.cwd();if(J.openCreateSurface&&await J.openCreateSurface(Z))return;let X=J.lastVendor()??T1,G=await xY();if(G.length===0)J.notifyInfo?.("No engine CLI detected \u2014 install claude or codex, or add one in Settings \u2192 Engines");let f=J.orch,Q=await J.promptNewTask(Z,Y,{defaultVendor:X,availableVendors:G,discoverAdoptable:f?(B)=>f.discoverAdoptableWorktrees(B):void 0});if(!Q)return;if(J.rememberVendor(Q.vendor),NY(Q.repo),J.onRepoSaved?.(),!f){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 f.adoptWorktree({repo:Q.repo,worktreePath:B.worktreePath,branch:B.branch,vendor:Q.vendor})).id;else q=(await f.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 t4=S(()=>{mZ();yJ();JB();A1();xJ();HJ();ZJ()});import{spawn as Qy}from"child_process";import{existsSync as qy}from"fs";import{basename as By,delimiter as Hy,isAbsolute as jy,join as Wy}from"path";function ej(J,Y,Z){if(jy(J))return Z(J);let X=Y.PATH??"";for(let G of X.split(Hy)){if(!G)continue;if(Z(Wy(G,J)))return!0}return!1}function Uy(J){let Y=By(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 e4(J={}){let Y=J.env??process.env,Z=J.platform??process.platform,X=J.exists??qy,G=Y.KOBE_OPEN_EDITOR?.trim();if(G)return{id:"env",label:Uy(G),command:G,args:[]};for(let f of Vy)if(ej(f.command,Y,X))return{id:f.id,label:f.label,command:f.command,args:[]};if(Z==="darwin"&&ej("open",Y,X)){for(let f of Ky)if(f.paths.some((Q)=>X(Q)))return{id:f.id,label:f.label,command:"open",args:["-a",f.appName]};return{id:"mac-open",label:"Finder",command:"open",args:[]}}if(Z==="linux"&&ej("xdg-open",Y,X))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function Ly(J,Y){return[Y.command,[...Y.args,J]]}function JU(J,Y,Z={}){if(!J)return!1;let X=Z.spawn??Qy,[G,f]=Ly(J,Y);try{let Q=X(G,f,{detached:!0,stdio:"ignore"});if(Q.pid===void 0)return!1;return Q.unref(),!0}catch{return!1}}var Vy,Ky;var YU=S(()=>{Vy=[{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"}],Ky=[{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 Uq(J){let Y=new Map;function Z(X){let G=Y.get(X);if(!G){let[f,Q]=p(J.initial,J.equals?{equals:J.equals}:void 0);G={read:f,write:(q)=>Q(()=>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);yQ(G,J,(f)=>J.run(X,f),(f)=>G.write(f))},reset(){Y.clear()}}}var Sf=S(()=>{Q1();kQ();kQ()});import{stat as Dy}from"fs/promises";import{join as My}from"path";async function Ry(J){try{let Y=await Dy(My(J,".git","HEAD"));return`${Y.mtimeMs}:${Y.size}`}catch{return null}}async function gy(J,Y,Z=lY){let X=await Ry(J);if(X!==null){let q=ZU.get(J);if(q&&q.fingerprint===X)return q.value}let G="",f=await Z("git",["symbolic-ref","--short","HEAD"],{cwd:J,env:kJ(),signal:Y}),Q=f.status===0?f.stdout.trim():"";if(Q&&Q!=="HEAD")G=Q;else if((await Z("git",["rev-parse","--verify","HEAD"],{cwd:J,env:kJ(),signal:Y})).status===0)G="(detached)";if(X!==null)ZU.set(J,{fingerprint:X,value:G});return G}function GU(J){return XU.read(J)}function fU(J){XU.poll(J)}var Fy=2000,Oy=30000,Ay=1500,ZU,XU;var zU=S(()=>{KZ();Sf();ZU=new Map;XU=Uq({initial:"",timeoutMs:Fy,slowRetryMs:Oy,minIntervalMs:Ay,run:(J,Y)=>gy(J,Y)})});function JW(J){let Y=J.scheduleTimeout??((B,H)=>{let K=setTimeout(B,H);return()=>clearTimeout(K)}),Z=!1,X=null,G=()=>{Z=!0,X?.(),X=Y(()=>{Z=!1,X=null},700)},f=()=>{Z=!1,X?.(),X=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(){f(),Q(1)},moveUp(){f(),Q(-1)},selectCurrent(){f();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)f(),q(0);else G()},pressShiftG(){f(),q(J.getFlatIds().length-1)},isChordArmed(){return Z},disarmChord(){f()}}}function QU(J){let Y=JW({getCursor:()=>J.cursorIndex(),setCursor:(f)=>J.setCursorIndex(f),getFlatIds:()=>J.flatTaskIds(),onSelect:(f)=>J.onSelect(f)}),Z=()=>{let f=J.flatTaskIds(),Q=J.cursorIndex();if(Q<0||Q>=f.length)return;return f[Q]},X=()=>J.searchMode?.()??!1,G=()=>J.moveMode?.()??!1;U1(()=>({enabled:J.focused()&&!X(),bindings:yZ({"sidebar.nav":(f,Q)=>{let q=(Q??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":(f)=>{if(G())return;if(f.shift)Y.pressShiftG();else Y.pressG()},"sidebar.delete":()=>{if(G())return;let f=Z();if(f!==void 0)J.onDeleteRequest?.(f)},"sidebar.archive":()=>{if(G())return;let f=Z();if(f!==void 0)J.onArchiveRequest?.(f)},"sidebar.localMerge":(f)=>{if(!f.shift)return;let Q=Z();if(Q!==void 0)J.onLocalMergeRequest?.(Q)},"sidebar.rename":()=>{if(G())return;let f=Z();if(f!==void 0)J.onRenameRequest?.(f)},"sidebar.pin":(f)=>{if(G())return;if(!f.shift)return;let Q=Z();if(Q!==void 0)J.onPinRequest?.(Q)},"sidebar.search.enter":()=>{if(G())return;J.onSearchEnter?.()},"sidebar.sort":()=>{if(G())return;J.onSortModeToggle?.()},"sidebar.projectFilter":()=>{if(G())return;J.onProjectFilterToggle?.()}})})),U1(()=>({enabled:J.focused()&&G(),bindings:[{key:"escape",cmd:()=>J.onMoveModeExit?.()}]})),U1(()=>({enabled:J.focused(),bindings:yZ({"sidebar.view":(f,Q)=>{J.onViewSwitch?.((Q??0)%2===0?-1:1)}})})),U1(()=>({enabled:J.focused()&&X(),bindings:yZ({"sidebar.search.nav":(f,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 qU=S(()=>{WG();MJ()});function YW(J,Y){if(Y<=0)return"";if(J.length<=Y)return J;return`${J.slice(0,Math.max(0,Y-1))}\u2026`}function ZW(J,Y){return` ${YW(J,Math.max(0,Y))}`}function yy(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 Ny(J){if(J.kind==="main")return!1;return J.vendor!==void 0&&!e1(J.vendor)}function XW(J){let{task:Y}=J,Z=Y.kind==="main",X=Z?J.mainBranch??"":Y.branch,G=Cy[Y.status],f=J.activity?.state,Q=f!==void 0,q=by(f),B=yy(f),H=Ny(Y)&&!Q,K=J.job!==void 0,j=K||!H&&(f==="running"||J.live||!Q&&!Z&&Y.status==="in_progress"),U=LG[J.spinnerFrame]??LG[0],L=K?"primary":H?"textMuted":B?.tone??(j?"primary":q?.tone??G.tone),M=H?ky:Sy[Y.status],D=K?J.truncateBranch(Iy,J.subtitleBudget):B?J.truncateBranch(B.text,J.subtitleBudget):X.length>0?J.truncateBranch(X,J.subtitleBudget):J.truncateBranch(M,J.subtitleBudget),O=H?BU:q?.glyph??G.glyph,A=H?BU: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 GW(J,Y){if(!J.loading)return J;let Z=LG[Y()%LG.length]??"\u280B";if(Z===J.stateGlyph&&Z===J.projectGlyph)return J;return{...J,stateGlyph:Z,projectGlyph:Z}}function by(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 Cy,Sy,LG,HU=100,BU="\xB7",ky="no activity tracking",Iy="materializing";var jU=S(()=>{HJ();jq();Cy={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"}},Sy={done:"done",in_review:"in review",in_progress:"working",backlog:"\u2014",canceled:"canceled",error:"error"};LG=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function fW(J){return WU.read(J)}function zW(J){WU.poll(J)}var Ty=4000,Ey=60000,uy=1500,xy,WU;var VU=S(()=>{KZ();Sf();YG();Sf();xy={added:0,deleted:0},WU=Uq({initial:xy,equals:AY,timeoutMs:Ty,slowRetryMs:Ey,minIntervalMs:uy,run:async(J,Y)=>{let Z=await lY("git",["status","--porcelain=v1"],{cwd:J,env:kJ(),signal:Y});if(Z.status!==0)throw Error("git status failed");return JG(Z.stdout)}})});import{TextAttributes as b1}from"@opentui/core";function UU(J,Y=hy){if(J.length<=Y)return J;return`${J.slice(0,Math.max(0,Y-1))}\u2026`}function Py(J){let Y=0;for(let Z of J)Y+=(Z.codePointAt(0)??0)>=4352?2:1;return Y}function vy(J,Y){if(Y<=0||J.length<=Y)return J;return`\u2026${J.slice(J.length-Math.max(0,Y-1))}`}function LU(J){let{theme:Y}=x0(),Z=()=>J.focused?J.focused():!0,[X,G]=p("active"),[f,Q]=p(!1),[q,B]=p(""),[H,K]=p(null),j=()=>J.projectFilter?.()??H(),U=(m)=>{if(J.onProjectFilterChange)J.onProjectFilterChange(m);else K(m)};function L(){B(""),Q(!0),J.onSearchActiveChange?.(!0)}function M(m){Q(!1),B(""),J.onSearchActiveChange?.(!1)}p0(()=>{if(!f())return;let m=s1();if(!m)return;let G0=(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)};m.keyInput.on("keypress",G0),i1(()=>m.keyInput.off("keypress",G0))});let[D,O]=p(0),A=setInterval(()=>O((m)=>m+1),wy);i1(()=>clearInterval(A));let[l,R]=p(0),C=setInterval(()=>R((m)=>(m+1)%LG.length),HU);i1(()=>clearInterval(C));let g=()=>J.sortMode?.()??"default",y=V0(()=>M4(J.tasks(),X())),$=V0(()=>{let m=j();if(!m)return null;let G0=iJ(m);return y().find((A0)=>iJ(A0.repo)===G0)??null}),f0=V0(()=>$()?.repo??null),t=V0(()=>$()?.label??"all"),Z0=V0(()=>{let m=$();return m?m.count:y().reduce((G0,A0)=>G0+A0.count,0)}),u=V0((m)=>A4(m,dj(J.tasks(),X(),f()?q():"",g(),f0())),[]),B0=V0(()=>nj(u())),Y0=V0(()=>O4(u())),W0=V0(()=>Y0().projectRows),o=V0(()=>Y0().taskRows),_=V0(()=>{let m=new Map;for(let G0 of u())m.set(G0.flatIndex,G0);return m}),r=V0(()=>nj(dj(J.tasks(),X(),"",g(),f0())).length),X0=V0(()=>o().length>0);p0(()=>{let m=j(),G0=y();if(m!==null&&G0.length>0&&(G0.length<=1||$()===null))U(null)});function a(){let m=y();if(m.length<=1){U(null);return}let G0=f0(),A0=G0?iJ(G0):null,E=A0===null?-1:m.findIndex((S0)=>iJ(S0.repo)===A0),l0=m[E+1];U(l0?.repo??null)}let U0=()=>J.width?J.width():KU,c=V0(()=>Math.max(6,U0()-9)),N=V0(()=>Math.max(6,U0()-16)),s=RY(),H0=V0(()=>Math.max(2,Math.min(10,Math.floor(s().height*0.25)))),[D0,y0]=p(null),[c0,x]=p(-1),F0,Q0,L0,k0=new Map;p0(()=>{let m=J.width?J.width():KU,G0=L0;if(!G0)return;G0.width=m,G0.flexShrink=1,G0.minHeight=0}),p0(WJ([c0,u],([m])=>{let G0=_().get(m);if(!G0)return;let A0=G0.task.kind==="main"?F0:Q0;if(!A0)return;if(A0.viewport.height<=0)return;let E=k0.get(m);if(!E)return;A0.scrollChildIntoView(E.id)})),p0(WJ(()=>[J.selectedId(),B0()],([m,G0])=>{let A0=n1(c0);if(m===null){if(A0===-1&&G0.length>0)x(0);else if(A0>=G0.length)x(Math.max(0,G0.length-1));else if(G0.length===0)x(-1);return}let E=G0.indexOf(m);if(E>=0){if(E!==A0)x(E)}else if(G0.length===0)x(-1);else if(A0<0||A0>=G0.length)x(G0.length-1)})),p0(WJ(X,()=>{let m=B0();x(m.length>0?0:-1)},{defer:!0})),p0(WJ(f0,(m)=>x(F4(u(),m)),{defer:!0})),p0(WJ([f,q],()=>{if(!f())return;let m=B0();x(m.length>0?0:-1)}));function T0(m){let G0=X(),A0=yf.findIndex((S0)=>S0.view===G0);if(A0<0)return;let E=(A0+m+yf.length)%yf.length,l0=yf[E];if(l0)G(l0.view)}QU({focused:Z,cursorIndex:c0,setCursorIndex:x,flatTaskIds:B0,onSelect:(m)=>{J.onSelect(m),J.onActivate?.(m)},onDeleteRequest:(m)=>J.onDeleteRequest?.(m),onArchiveRequest:(m)=>J.onArchiveRequest?.(m),onLocalMergeRequest:(m)=>J.onLocalMergeRequest?.(m),moveMode:J.moveMode,onMoveRequest:(m,G0)=>J.onMoveRequest?.(m,G0),onMoveModeExit:()=>J.onMoveModeExit?.(),onRenameRequest:(m)=>J.onRenameRequest?.(m),onPinRequest:(m)=>J.onPinRequest?.(m),onViewSwitch:(m)=>T0(m),onSortModeToggle:()=>J.onSortModeToggle?.(),onProjectFilterToggle:()=>a(),searchMode:f,onSearchEnter:()=>L(),onSearchExit:(m)=>M(m)});let v0=(m)=>(()=>{var G0=V("box"),A0=V("box"),E=V("text"),l0=V("text");return W(G0,A0),z(G0,"flexDirection","column"),z(G0,"flexShrink",0),F(G0,k(z0,{get when(){return m.topPad},get children(){var S0=V("box"),m0=V("text");return W(S0,m0),z(S0,"flexShrink",0),W(m0,T(" ")),z(m0,"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"),F(E,()=>m.label),z(l0,"wrapMode","none"),F(l0,()=>"\u2500".repeat(Math.max(2,U0()-10-m.label.length-(m.suffix?.length??0)))),F(A0,k(z0,{get when(){return m.suffix},get children(){var S0=V("text");return z(S0,"wrapMode","none"),F(S0,()=>m.suffix),w((m0)=>{var w0=Y.info,a0=b1.BOLD;return w0!==m0.e&&(m0.e=z(S0,"fg",w0,m0.e)),a0!==m0.t&&(m0.t=z(S0,"attributes",a0,m0.t)),m0},{e:void 0,t:void 0}),S0}}),null),w((S0)=>{var m0=Y.textMuted,w0=b1.BOLD,a0=Y.border;return m0!==S0.e&&(S0.e=z(E,"fg",m0,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}),G0})(),$0=(m)=>{switch(m){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=(m)=>{let G0=m.row.task,A0=m.row.flatIndex,E=()=>A0===c0(),l0=()=>G0.id===J.selectedId(),S0=V0(()=>{let K0=J.chatRunState?.();if(!K0)return!1;let o0=`${G0.id}:`;for(let[N0,f1]of K0)if(f1==="running"&&N0.startsWith(o0))return!0;return!1}),m0=V0(()=>{let K0=NQ(J.worktreeChanges?.(),G0.worktreePath);if(K0)return K0;if(D(),!G0.archived)zW(G0.worktreePath);return fW(G0.worktreePath)},void 0,{equals:AY}),w0=V0(()=>{return D(),fU(G0.repo),GU(G0.repo)}),a0=V0(()=>XW({task:G0,activity:J.engineState?.().get(G0.id),job:J.taskJobs?.().get(G0.id),live:S0(),spinnerFrame:0,subtitleBudget:N(),truncateBranch:UU,mainBranch:w0()})),n=V0(()=>GW(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"),f1=V("text"),b0=V("box"),E0=V("text"),B1=V("text"),H1=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,H1),RZ((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(G0.id),J.activateOnClick)J.onActivate?.(G0.id)}),z(o0,"onMouseOver",(J0)=>y0({task:G0,x:J0.x,y:J0.y})),z(o0,"onMouseOut",()=>y0((J0)=>J0?.task.id===G0.id?null:J0)),W(N0,f1),W(N0,b0),z(N0,"flexDirection","row"),z(N0,"gap",0),z(f1,"wrapMode","none"),F(f1,M0),W(b0,E0),W(b0,B1),z(b0,"flexDirection","row"),z(b0,"flexGrow",1),z(b0,"paddingRight",1),z(b0,"gap",0),z(E0,"wrapMode","none"),F(E0,()=>n().projectGlyph),z(B1,"wrapMode","none"),z(B1,"flexGrow",1),F(B1,()=>ZW(n().titleText,c())),W(H1,t0),W(H1,e0),z(H1,"flexDirection","row"),z(H1,"gap",0),z(t0,"wrapMode","none"),F(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),F(P,()=>n().subtitleText),F(e0,k(z0,{get when(){return m0().added>0},get children(){var J0=V("text"),z1=T("+");return W(J0,z1),z(J0,"wrapMode","none"),F(J0,()=>m0().added,null),w((F1)=>z(J0,"fg",Y.success,F1)),J0}}),null),F(e0,k(z0,{get when(){return m0().deleted>0},get children(){var J0=V("text"),z1=T("\u2212");return W(J0,z1),z(J0,"wrapMode","none"),F(J0,()=>m0().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=b1.BOLD,y1=Y.text,L1=b1.BOLD,J1=q0(),I=Y.textMuted,g0=b1.DIM;return z1!==J0.e&&(J0.e=z(o0,"backgroundColor",z1,J0.e)),F1!==J0.t&&(J0.t=z(f1,"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(B1,"fg",y1,J0.i)),L1!==J0.n&&(J0.n=z(B1,"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 m=V("box"),G0=V("box"),A0=V("box"),E=V("text"),l0=V("box"),S0=V("box"),m0=V("text"),w0=V("scrollbox"),a0=V("box");return W(m,G0),W(m,l0),W(m,w0),RZ((n)=>{L0=n},m),z(m,"flexGrow",1),z(m,"minHeight",0),z(m,"flexDirection","column"),z(m,"paddingTop",1),z(m,"paddingBottom",1),z(m,"paddingLeft",0),z(m,"paddingRight",0),W(G0,A0),z(G0,"flexDirection","row"),z(G0,"justifyContent","space-between"),z(G0,"gap",1),z(G0,"paddingBottom",1),z(G0,"paddingLeft",1),z(G0,"paddingRight",1),W(A0,E),z(A0,"flexDirection","row"),z(A0,"gap",1),W(E,T("KOBE")),z(E,"wrapMode","none"),F(A0,k(z0,{get when(){return J.headerStatus?.()},children:(n)=>(()=>{var e=V("text");return z(e,"wrapMode","none"),z(e,"onMouseUp",()=>J.onHeaderStatusClick?.()),F(e,()=>n().label),w((q0)=>{var M0=n().emphasize?Y.warning:Y.textMuted,K0=n().emphasize?b1.BOLD:b1.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),F(G0,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=b1.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),F(m,k(z0,{get when(){return f()},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"),F(q0,q),W(M0,T("\u2588")),z(M0,"wrapMode","none"),F(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),F(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"),F(K0,()=>B0().length,N0),F(K0,r,null),w((f1)=>z(K0,"fg",Y.textMuted,f1)),K0}}),null),w((K0)=>{var{info:o0,text:N0,info:f1}=Y,b0=b1.BLINK;return o0!==K0.e&&(K0.e=z(e,"fg",o0,K0.e)),N0!==K0.t&&(K0.t=z(q0,"fg",N0,K0.t)),f1!==K0.a&&(K0.a=z(M0,"fg",f1,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,m0),z(S0,"flexDirection","row"),z(S0,"gap",2),F(S0,k(Y1,{each:yf,children:(n)=>{let e=()=>X()===n.view;return(()=>{var q0=V("text");return z(q0,"wrapMode","none"),z(q0,"onMouseUp",()=>G(n.view)),F(q0,()=>n.label),w((M0)=>{var K0=e()?Y.primary:Y.textMuted,o0=e()?b1.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})()}}),m0),W(m0,T("[/]")),z(m0,"wrapMode","none"),F(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=b1.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),F(m,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"),F(M0,t),W(K0,o0),z(K0,"wrapMode","none"),F(K0,Z0,o0),F(K0,()=>Z0()===1?"task":"tasks",null),w((N0)=>{var f1=Y.textMuted,b0=b1.BOLD,E0=f0()?Y.primary:Y.textMuted,B1=f0()?b1.BOLD:void 0,H1=Y.textMuted,t0=b1.DIM;return f1!==N0.e&&(N0.e=z(q0,"fg",f1,N0.e)),b0!==N0.t&&(N0.t=z(q0,"attributes",b0,N0.t)),E0!==N0.a&&(N0.a=z(M0,"fg",E0,N0.a)),B1!==N0.o&&(N0.o=z(M0,"attributes",B1,N0.o)),H1!==N0.i&&(N0.i=z(K0,"fg",H1,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),F(m,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),F(n,k(v0,{label:"PROJECTS"}),e),W(e,q0),RZ((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),F(q0,k(Y1,{get each(){return W0()},children:(M0)=>k(O0,{row:M0})})),w((M0)=>z(e,"maxHeight",H0(),M0)),n}}),w0),F(m,k(v0,{label:"TASKS",get suffix(){return r0(()=>g()==="default")()?void 0:g()},get topPad(){return W0().length>0}}),w0),W(w0,a0),RZ((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),F(a0,k(Y1,{get each(){return o()},children:(n)=>{let{task:e,flatIndex:q0}=n,M0=()=>q0===c0(),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=NQ(J.worktreeChanges?.(),e.worktreePath);if(t0)return t0;if(D(),!e.archived)zW(e.worktreePath);return fW(e.worktreePath)},void 0,{equals:AY}),f1=V0(()=>XW({task:e,activity:J.engineState?.().get(e.id),job:J.taskJobs?.().get(e.id),live:o0(),spinnerFrame:0,subtitleBudget:N(),truncateBranch:UU,mainBranch:""})),b0=V0(()=>GW(f1(),l)),E0=()=>$0(b0().tone),B1=()=>M0()?Y.focusAccent:K0()?Y.primary:void 0,H1=()=>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),RZ((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"),F(J0,H1),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"),F(F1,()=>b0().stateGlyph),z(O1,"wrapMode","none"),z(O1,"flexGrow",1),F(O1,()=>ZW(b0().titleText,c())),F(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"),F(y1,H1),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),F(J1,()=>b0().subtitleText),F(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),F(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"),F(I,()=>N0().added,null),w((h0)=>z(I,"fg",Y.success,h0)),I}}),null),F(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"),F(I,()=>N0().deleted,null),w((h0)=>z(I,"fg",Y.error,h0)),I}}),null),w((I)=>{var g0=M0()?Y.backgroundElement:void 0,h0=B1(),X1=E0(),OJ=b1.BOLD,bJ=Y.text,qJ=K0()||M0()?b1.BOLD:void 0,SY=B1(),yY=Y.textMuted,BJ=b1.DIM;return g0!==I.e&&(I.e=z(e0,"backgroundColor",g0,I.e)),h0!==I.t&&(I.t=z(J0,"fg",h0,I.t)),X1!==I.a&&(I.a=z(F1,"fg",X1,I.a)),OJ!==I.o&&(I.o=z(F1,"attributes",OJ,I.o)),bJ!==I.i&&(I.i=z(O1,"fg",bJ,I.i)),qJ!==I.n&&(I.n=z(O1,"attributes",qJ,I.n)),SY!==I.s&&(I.s=z(y1,"fg",SY,I.s)),yY!==I.h&&(I.h=z(J1,"fg",yY,I.h)),BJ!==I.r&&(I.r=z(J1,"attributes",BJ,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),F(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),F(e,(()=>{var q0=r0(()=>!!(f()&&q().trim().length>0));return()=>q0()?"No matching tasks \u2014 esc to clear.":r0(()=>!!f0())()?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."})()),w((q0)=>z(e,"fg",Y.textMuted,q0)),n}}),null),F(a0,k(z0,{get when(){return r0(()=>!!(f0()&&B0().length>0&&!X0()))()&&!(f()&&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"),F(e,()=>X()==="active"?"No active tasks for this project.":"No archived tasks for this project."),w((q0)=>{var M0=Y.textMuted,K0=b1.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),F(a0,k(z0,{get when(){return r0(()=>X()==="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=b1.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),F(m,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)=>Py(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))),f1=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),F(b0,k(Y1,{get each(){return e()},children:(E0)=>(()=>{var B1=V("text");return z(B1,"wrapMode","none"),F(B1,(()=>{var H1=r0(()=>!!E0.dim);return()=>H1()?vy(E0.text,M0()):YW(E0.text,M0())})()),w((H1)=>{var t0=E0.dim?Y.textMuted:Y.text,e0=E0.bold?b1.BOLD:E0.dim?b1.DIM:void 0;return t0!==H1.e&&(H1.e=z(B1,"fg",t0,H1.e)),e0!==H1.t&&(H1.t=z(B1,"attributes",e0,H1.t)),H1},{e:void 0,t:void 0}),B1})()})),w((E0)=>{var B1=N0(),H1=f1(),t0=K0(),e0=Y.focusAccent,P=Y.backgroundElement;return B1!==E0.e&&(E0.e=z(b0,"left",B1,E0.e)),H1!==E0.t&&(E0.t=z(b0,"top",H1,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=b1.BOLD,M0=Y.textMuted,K0=b1.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(m0,"fg",M0,n.a)),K0!==n.o&&(n.o=z(m0,"attributes",K0,n.o)),n},{e:void 0,t:void 0,a:void 0,o:void 0}),m})()}var KU=32,yf,wy=2000,hy=16;var DU=S(()=>{h();h();h();h();h();h();h();h();h();h();Q1();N1();N1();zU();jq();qU();jU();YG();VU();yf=[{view:"active",label:"Working session"},{view:"archived",label:"Archives"}]});var RU={};j1(RU,{startTasksPane:()=>iy,legendRowCap:()=>AU,legendCap:()=>OU});import{existsSync as MU}from"fs";import{stat as my}from"fs/promises";import{TextAttributes as Lq}from"@opentui/core";function QW(J){return!!J&&cf(J)}function FU(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 dy(J){let{theme:Y}=x0(),Z=u1(),X=VG(),G=zq(),[f,Q]=p(J.tasks().some((x)=>x.id===J.initialTaskId)?J.initialTaskId:J.tasks()[0]?.id??null);function q(x){G.notify({kind:"error",taskId:f()??"",tabId:"",title:x})}function B(x){G.notify({kind:"done",taskId:f()??"",tabId:"",title:x})}let[H,K]=p(!1),[j,U]=p(X.get("activeSortMode")==="recent"?"recent":"default"),L=X.get("tasksPane.projectFilter"),[M,D]=p(typeof L==="string"&&L.length>0?L:null),O=(x)=>{D(x),X.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(M))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(f()!==x)return;let Q0=J.tasks();Q(F0?.id??(Q0.find((L0)=>!L0.archived)??Q0[0])?.id??null)},promptNewTask:(x,F0,Q0)=>Jq.show(Z,x,F0,Q0),cursorRepo:()=>{let x=J.tasks();return(x.find((F0)=>F0.id===f())??x[0])?.repo},lastVendor:()=>C1("lastSelectedVendor"),rememberVendor:(x)=>d1("lastSelectedVendor",x),openCreateSurface:async(x)=>{if(YX(X.get(nY,JX))!=="chattab")return!1;let Q0=await UJ();if(!Q0)return!1;return await MQ(Q0,x),!0},selectTask:(x)=>Q(x),enterTask:(x)=>s(x)};async function y(){await s4(g)}async function $(){if(YX(X.get(nY,JX))==="chattab"){let Q0=await UJ();if(Q0){await LQ(Q0);return}}if(!(await LX.show(Z,X,J.orch??void 0)).visualPrefsChanged)return;if(!X.flush())return;try{let Q0=await UJ();if(Q0)await tX(Q0)}catch(Q0){console.error("[kobe tasks] failed to refresh workspace panes:",Q0)}}async function f0(){let x=await UJ();if(x){await DQ(x);return}UG.show(Z)}async function t(){if(!A()?.hasUpdate){B(`Already on the latest version (v${d0})`);return}let F0=await UJ();if(!F0)return;await FQ(F0)}async function Z0(x){await a4(g,x)}async function u(x){await p4(g,x)}async function B0(x){await _4(g,x)}async function Y0(x){await r4(g,x)}async function W0(x){await o4(g,x)}async function o(x){let Q0=J.tasks().find((k0)=>k0.id===x)?.worktreePath;if(!Q0||!MU(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(FU(k0));return}await J.reload()}if(!Q0||!MU(Q0))return;let L0=e4();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(!JU(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 wX(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[X0,a]=p(X.get("tasksPane.keysCollapsed",!1)===!0),U0=(x)=>{a(x),X.set("tasksPane.keysCollapsed",x)};p0(WJ(()=>J.orch?.uiPrefsSignal()(),(x)=>{if(x&&x.keysCollapsed!==n1(X0))a(x.keysCollapsed)}));let[c,N]=p(!1);U1(()=>({enabled:Z.stack.length===0&&!c(),bindings:yZ({"help.open":()=>void f0(),"task.new":()=>void y(),"settings.open.sidebar":()=>void $(),"tasks.update":()=>void t(),"tasks.openWorktree":()=>{let x=f();if(x)o(x)},"tasks.renameBranch":()=>{let x=f();if(x)Y0(x)},"tasks.cycleEngine":()=>{let x=f();if(x)W0(x)},"tasks.toggleKeys":()=>U0(!X0()),"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 eG(L0);if(await G1(F0)){let O0=await kz(F0,"@kobe_worktree")||Q0?.worktreePath||"";if(QW(O0)){let m=Q0?.repo?iY(Q0.repo,O0,{kind:"repo-init"}):void 0;await DZ({name:F0,cwd:O0,command:LJ(Q0?.vendor),taskId:x,vendor:Q0?.vendor,repo:Q0?.repo,launchInit:m})}await CQ(F0),await u0(["switch-client","-t",`=${F0}`]),J.orch?.setActiveTask(x).catch(()=>{});return}let T0=Q0?.worktreePath;if(!QW(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(FU(O0));return}await J.reload()}if(!QW(T0))return;let v0=Q0?.repo?iY(Q0.repo,T0,{kind:"repo-init"}):void 0;if(!await DZ({name:F0,cwd:T0,command:LJ(Q0?.vendor),taskId:x,vendor:Q0?.vendor,repo:Q0?.repo,launchInit:v0})){console.error(`[kobe tasks] failed to start session ${F0}`),q("Couldn't start this task's session");return}await CQ(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${d0}`,emphasize:!1}}),D0=()=>J.orch?.daemonStaleSignal()()??!1,y0=()=>J.orch?.daemonVersionSignal()()??null,c0=V0(()=>J.tasks().find((x)=>x.id===f())?.kind==="main");return(()=>{var x=V("box"),F0=V("box");return W(x,F0),z(x,"flexDirection","column"),z(x,"flexGrow",1),F(x,k(i4,{stale:D0,daemonVersion:y0,clientVersion:d0,width:()=>R().width}),F0),z(F0,"flexGrow",1),z(F0,"flexShrink",1),F(F0,k(LU,{get tasks(){return J.tasks},selectedId:f,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:M,onProjectFilterChange:O,onSortModeToggle:()=>{let Q0=j()==="default"?"recent":"default";U(Q0),X.set("activeSortMode",Q0)},focused:()=>Z.stack.length===0,onSearchActiveChange:N})),F(x,k(ny,{moveMode:H,selectedIsMain:c0,collapsed:X0,onToggleCollapsed:()=>U0(!X0())}),null),w((Q0)=>z(x,"backgroundColor",Y.background,Q0)),x})()}function OU(J){let Y=xj(J);if(!Y)return null;let Z=Y.hint?.keys??Y.keys[0];return Z&&Z.length>0?Z:null}function AU(J){let Y=J.map(OU).filter((Z)=>Z!==null);return Y.length>0?Y.join("/"):null}function ny(J){let{theme:Y}=x0(),[Z,X]=p("Prefix");o1(()=>{n0(["show-options","-g","prefix"]).then(({code:U,stdout:L})=>{if(U!==0)return;let M=Vq(L);if(M)X(M)})});let G=()=>{uj();let U=ZQ(),L=U.binds,M=[],D=U.focus.filter((A)=>A!==null).map((A)=>A.chord);if(D.length===4&&D.every((A,l)=>A===UZ[l]))M.push({k:"ctrl+hjkl",label:"move panes"});else if(D.length>0)M.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)M.push({k:`prefix ${R.join("/")}`,label:A})};if(L["tmux.detach"])M.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"]),M},f=()=>{uj();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 M of U){let D=AU(M.ids);if(D===null)continue;L.push({k:D,label:M.label,dimWhenMain:M.dimWhenMain})}return L.push(...G()),L},Q=[{k:"j/k",label:"reorder"},{k:"enter/esc",label:"done"}],q=()=>J.moveMode?.()?Q:f(),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?.()),F(L,()=>j()?"\u2500\u2500 keys ?\u25B8 \u2500\u2500":"\u2500\u2500 keys ?\u25BE \u2500\u2500"),F(U,k(z0,{get when(){return!j()},get children(){return k(Y1,{get each(){return q()},children:(M)=>{let D=()=>M.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"),F(l,()=>KG(M.k,Z()),C),W(g,y),z(g,"flexShrink",0),z(y,"wrapMode","none"),F(y,()=>K(M.label)),w(($)=>{var f0=D()?Y.textMuted:Y.accent,t=D()?Lq.DIM:Lq.BOLD,Z0=H(),u=Y.textMuted,B0=D()?Lq.DIM:void 0;return f0!==$.e&&($.e=z(l,"fg",f0,$.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((M)=>{var D=Y.textMuted,O=Lq.DIM;return D!==M.e&&(M.e=z(L,"fg",D,M.e)),O!==M.t&&(M.t=z(L,"attributes",O,M.t)),M},{e:void 0,t:void 0}),U})()}async function iy(J={}){await QJ({logContext:"tasks",providers:{notifications:!0},setup:()=>ly(J)})}async function ly(J){let Y=new OX({homeDir:qY()});await Y.load();let[Z,X]=p(Y.list()),G=null;try{let H=await dJ();if(H){let K=new GJ(H);await K.init(),G=K}else uY("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(H){XZ("tasks-boot",H),uY("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let f=()=>G&&G.connectionStateSignal()()==="online"?G.tasksSignal()():Z(),Q=async()=>{await Y.load(),X(Y.list())},q="",B=setInterval(()=>{if(G&&G.connectionStateSignal()()==="online")return;(async()=>{let H="missing";try{let K=await my(Y.filePath);H=`${K.mtimeMs}:${K.size}`}catch{}if(H===q)return;q=H,await Q()})().catch(()=>{})},cy);return{root:()=>[k(dy,{tasks:f,get initialTaskId(){return J.initialTaskId},orch:G,reload:Q}),k(d4,{})],onDestroy:()=>{if(B)clearInterval(B);G?.dispose()}}}var cy=1500;var gU=S(()=>{h();h();h();h();h();h();h();h();w1();h();vZ();DJ();Q1();gZ();yJ();c1();$J();mf();pX();A1();XQ();zJ();lj();Of();$j();tj();n4();l4();WG();Af();Qq();N1();ij();IZ();MJ();t4();YU();DU();ZJ();NJ();aj()});var CU={};j1(CU,{startSettingsHost:()=>ay});function $y(J){let Y=VG(),Z=u1(),{theme:X}=x0(),G=!1,f=!1;async function Q(){if(f)return;f=!0;try{if(Y.flush()&&G){let B=await UJ();if(B)await tX(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"}}),F(q,k(LX,{kv:Y,get orchestrator(){return J.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{G=!0},onClose:Q})),w((B)=>z(q,"backgroundColor",X.background,B)),q})()}async function ay(){await QJ({setup:async()=>{let J=null;try{let Y=await dJ();if(Y){let Z=new GJ(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($y,{orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var SU=S(()=>{h();h();h();h();h();h();DJ();gZ();tj();Af();N1();IZ();MJ();ZJ();NJ()});var yU={};j1(yU,{startHelpHost:()=>_y});function py(){let J=u1(),{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 X=V("box");return z(X,"flexGrow",1),z(X,"paddingTop",1),F(X,k(UG,{onClose:Z})),w((G)=>z(X,"backgroundColor",Y.background,G)),X})()}async function _y(){await QJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>k(py,{})})})}var kU=S(()=>{h();h();h();h();h();lj();N1();IZ();MJ();NJ()});var IU={};j1(IU,{startUpdateHost:()=>Yk});import{spawn as ry,spawnSync as oy}from"child_process";import{TextAttributes as DG}from"@opentui/core";function sy(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 ry(Z,X,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function ty(J){return J.replace(/\r\n/g,`
216
216
  `).split(`
217
- `).map((Y)=>Y.trim()).filter(Boolean)}function iy(){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 ly(){let{theme:J}=u0(),Y=o1(),[Z,f]=r(null),[G,X]=r([]),[Q,q]=r(!0),[B,H]=r("update"),[K,j]=r(null),U=W0(()=>Z()?.latest??m0),L=W0(()=>G()[0]?.url??Mq(U())),M=W0(()=>[{id:"update",key:"U",label:"Update now",detail:RY},{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"}]);r1(()=>{D()});async function D(){let g=await DG({force:!0});f(g);let S=g?.latest??m0,C=await Dq({current:m0,latest:S});X(C),q(!1)}function A(g){let S=M().map(($)=>$.id),k=(S.indexOf(B())+g+S.length)%S.length;H(S[k]??"update")}function R(g=B()){if(g==="close")process.exit(0);if(g==="release"){j(dy(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((C)=>setTimeout(C,30)),Y?.destroy(),process.stdout.write(`
218
- kobe ${m0} -> latest
219
- `),process.stdout.write(`running: ${RY}
217
+ `).map((Y)=>Y.trim()).filter(Boolean)}function ey(){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 Jk(){let{theme:J}=x0(),Y=s1(),[Z,X]=p(null),[G,f]=p([]),[Q,q]=p(!0),[B,H]=p("update"),[K,j]=p(null),U=V0(()=>Z()?.latest??d0),L=V0(()=>G()[0]?.url??kq(U())),M=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 AG({force:!0});X(R);let C=R?.latest??d0,g=await yq({current:d0,latest:C});f(g),q(!1)}function O(R){let C=M().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(sy(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(`
218
+ kobe ${d0} -> latest
219
+ `),process.stdout.write(`running: ${kY}
220
220
 
221
- `);let g=cy("sh",["-c",RY],{stdio:"inherit"}),S=g.status??(g.error?1:0);if(g.error)process.stderr.write(`
222
- kobe update: failed to start updater: ${g.error.message}
223
- `);process.stdout.write(S===0?`
221
+ `);let R=oy("sh",["-c",kY],{stdio:"inherit"}),C=R.status??(R.error?1:0);if(R.error)process.stderr.write(`
222
+ kobe update: failed to start updater: ${R.error.message}
223
+ `);process.stdout.write(C===0?`
224
224
  kobe update complete. Relaunch kobe to use the new version.
225
225
  `:`
226
- kobe update failed with exit code ${S}.
227
- `),process.stdout.write("Press any key to close this update window."),await iy(),process.exit(S)}return V1(()=>({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"),S=V("box"),C=V("text"),k=V("text"),$=V("box"),G0=V("text"),s=V("text"),J0=T("v"),E=V("text"),Q0=V("text"),e=T("v"),j0=V("box"),o=V("box"),p=V("text"),_=T("\u2500\u2500 changes from v"),f0=T(" to v"),a=T(" \u2500\u2500"),L0=V("scrollbox"),m=V("box");return W(g,S),W(g,$),W(g,j0),W(g,o),W(g,L0),z(g,"flexDirection","column"),z(g,"flexGrow",1),z(g,"paddingTop",1),z(g,"paddingLeft",2),z(g,"paddingRight",2),W(S,C),W(S,k),z(S,"flexDirection","row"),z(S,"justifyContent","space-between"),z(S,"flexShrink",0),W(C,T("KOBE UPDATE")),z(C,"wrapMode","none"),W(k,T("q / esc")),z(k,"wrapMode","none"),z(k,"onMouseUp",()=>R("close")),W($,G0),W($,s),W($,E),W($,Q0),z($,"flexDirection","row"),z($,"gap",2),z($,"flexShrink",0),z($,"paddingTop",1),W(G0,T("current")),z(G0,"wrapMode","none"),W(s,J0),z(s,"wrapMode","none"),F(s,m0,null),W(E,T("latest")),z(E,"wrapMode","none"),W(Q0,e),z(Q0,"wrapMode","none"),F(Q0,U,null),z(j0,"flexDirection","column"),z(j0,"flexShrink",0),z(j0,"paddingTop",1),z(j0,"gap",0),F(j0,I(e0,{get each(){return M()},children:(b)=>(()=>{var t=V("box"),q0=V("box"),M0=V("text"),S0=T("["),h0=T("]"),u=V("box"),D0=V("text"),z0=V("text");return W(t,q0),W(t,u),W(t,z0),z(t,"flexDirection","row"),z(t,"gap",1),z(t,"paddingLeft",1),z(t,"paddingRight",1),z(t,"onMouseUp",()=>R(b.id)),W(q0,M0),z(q0,"width",4),z(q0,"flexShrink",0),W(M0,S0),W(M0,h0),z(M0,"wrapMode","none"),F(M0,()=>b.key,h0),W(u,D0),z(u,"width",14),z(u,"flexShrink",0),z(D0,"wrapMode","none"),F(D0,()=>b.label),z(z0,"wrapMode","word"),F(z0,()=>b.detail),x((g0)=>{var C0=B()===b.id?J.primary:void 0,y0=B()===b.id?J.selectedListItemText:J.accent,n0=KG.BOLD,P0=B()===b.id?J.selectedListItemText:J.text,O0=B()===b.id?J.selectedListItemText:J.textMuted;return C0!==g0.e&&(g0.e=z(t,"backgroundColor",C0,g0.e)),y0!==g0.t&&(g0.t=z(M0,"fg",y0,g0.t)),n0!==g0.a&&(g0.a=z(M0,"attributes",n0,g0.a)),P0!==g0.o&&(g0.o=z(D0,"fg",P0,g0.o)),O0!==g0.i&&(g0.i=z(z0,"fg",O0,g0.i)),g0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),t})()})),F(g,I(X0,{get when(){return K()},get children(){var b=V("text");return z(b,"wrapMode","word"),F(b,K),x((t)=>z(b,"fg",J.info,t)),b}}),o),W(o,p),z(o,"flexShrink",0),z(o,"paddingTop",1),W(p,_),W(p,f0),W(p,a),z(p,"wrapMode","none"),F(p,m0,f0),F(p,U,a),W(L0,m),z(L0,"flexGrow",1),z(L0,"flexShrink",1),z(L0,"stickyScroll",!1),z(m,"flexDirection","column"),z(m,"paddingRight",1),z(m,"paddingBottom",1),z(m,"gap",0),F(m,I(X0,{get when(){return Q()},get children(){var b=V("text");return W(b,T("Loading release notes...")),x((t)=>z(b,"fg",J.textMuted,t)),b}}),null),F(m,I(X0,{get when(){return o0(()=>!Q())()&&G().length===0},get children(){var b=V("text");return W(b,T("Release notes are unavailable. Use Open release to view the GitHub release page.")),z(b,"wrapMode","word"),x((t)=>z(b,"fg",J.textMuted,t)),b}}),null),F(m,I(e0,{get each(){return G()},children:(b)=>(()=>{var t=V("box"),q0=V("text"),M0=T("v");return W(t,q0),z(t,"flexDirection","column"),z(t,"paddingBottom",1),z(t,"gap",0),W(q0,M0),z(q0,"wrapMode","none"),F(q0,()=>b.version,null),F(t,I(e0,{get each(){return ny(b.body)},children:(S0)=>(()=>{var h0=V("text");return z(h0,"wrapMode","word"),F(h0,S0),x((u)=>z(h0,"fg",J.textMuted,u)),h0})()}),null),x((S0)=>{var h0=J.text,u=KG.BOLD;return h0!==S0.e&&(S0.e=z(q0,"fg",h0,S0.e)),u!==S0.t&&(S0.t=z(q0,"attributes",u,S0.t)),S0},{e:void 0,t:void 0}),t})()}),null),x((b)=>{var{background:t,text:q0}=J,M0=KG.BOLD,S0=J.textMuted,h0=J.textMuted,u=J.text,D0=KG.BOLD,z0=J.textMuted,g0=Z()?.hasUpdate?J.warning:J.success,C0=KG.BOLD,y0=J.textMuted,n0=KG.DIM,P0={trackOptions:{backgroundColor:J.background,foregroundColor:J.borderActive}};return t!==b.e&&(b.e=z(g,"backgroundColor",t,b.e)),q0!==b.t&&(b.t=z(C,"fg",q0,b.t)),M0!==b.a&&(b.a=z(C,"attributes",M0,b.a)),S0!==b.o&&(b.o=z(k,"fg",S0,b.o)),h0!==b.i&&(b.i=z(G0,"fg",h0,b.i)),u!==b.n&&(b.n=z(s,"fg",u,b.n)),D0!==b.s&&(b.s=z(s,"attributes",D0,b.s)),z0!==b.h&&(b.h=z(E,"fg",z0,b.h)),g0!==b.r&&(b.r=z(Q0,"fg",g0,b.r)),C0!==b.d&&(b.d=z(Q0,"attributes",C0,b.d)),y0!==b.l&&(b.l=z(p,"fg",y0,b.l)),n0!==b.u&&(b.u=z(p,"attributes",n0,b.u)),P0!==b.c&&(b.c=z(L0,"verticalScrollbarOptions",P0,b.c)),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,d:void 0,l:void 0,u:void 0,c:void 0}),g})()}async function $y(){await zJ({setup:()=>({root:()=>I(ly,{})})})}var FU=y(()=>{w();w();w();w();w();w();w();w();w();G1();XJ();S1();RZ();UJ()});async function OU(J,Y){if(!Y)return 0;return l1(J).history.latestTranscriptMtimeForWorktree(Y)}var AU=y(()=>{ZZ()});function ay(J){return J.trim().split(/\s+/)[0]??""}function gU(J,Y,Z,f){let G=Y1(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 X=(Y.trim()||(f??"").trim()).trim();if(!X)return null;let Q=ay(X);if(!Q)return null;let q=X.includes(RU)?X.split(RU).join(G):`${X} ${G}`;return{bin:Q,command:q}}function py(J,Y,Z){let f=Y1(Y);return["f=$(mktemp 2>/dev/null)",`if [ -n "$f" ] && git show ${Y1(`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(`
228
- `)}function _y(J,Y){let Z=J.endsWith("/")?J:`${J}/`;return Y.startsWith(Z)?Y.slice(Z.length):null}async function ry(J){let Y=uf(O1(hY)),Z=O1(QZ)??"",f=(process.env.VISUAL??process.env.EDITOR??"").trim();if(Y!=="auto")return gU(Y,Z,J,f);if(f)return gU("custom","",J,f);let G=Y1(J);for(let X of V5)if(await CU(X))return{bin:X,command:`${X} ${G}`};return null}async function CU(J){try{return await Bun.spawn(["sh","-c",`command -v ${Y1(J)} >/dev/null 2>&1`],{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function oy(J,Y){try{return await Bun.spawn(["git","diff","--quiet","HEAD","--",Y],{cwd:J,stdin:"ignore",stdout:"ignore",stderr:"ignore",env:CJ()}).exited===1}catch{return!1}}async function SU(J,Y,Z){let f=await ry(Z);if(!f)return!1;if(!await CU(f.bin))return!1;let G=await sy(f,Y,Z);return await aJ(J,{cwd:Y,command:G,name:ty(Z)}),!0}async function sy(J,Y,Z){let{bin:f,command:G}=J;if(f!=="nvim"&&f!=="vim")return G;if(G!==`${f} ${Y1(Z)}`)return G;let X=_y(Y,Z);if(!X)return G;if(!await oy(Y,X))return G;return py(f,Z,X)}function ty(J){let Y=J.slice(J.lastIndexOf("/")+1).trim();return Y.length>0?Y:"edit"}var RU="{file}";var yU=y(()=>{qZ();D1();wz();E1();BY()});async function ej(J,Y){if(!Y)throw Error("git(): cwd is required");let Z=await xf(Y,J),f=Z.status??-1;if(f!==0){let G=(Z.stderr??"").trim(),X=(Z.stdout??"").trim();throw Error(`git ${J.join(" ")} (cwd=${Y}) exited with code ${f}: ${G||X||"(no output)"}`)}return Z.stdout??""}async function J9(J){let Z=(await ej(["ls-files","--cached","--others","--exclude-standard","--full-name"],J)).split(`
229
- `).map((G)=>G.replace(/\r$/,"")),f=new Set;for(let G of Z)if(G.length>0)f.add(G);return Array.from(f).sort()}async function Y9(J){let Y=await ej(["status","--porcelain"],J),Z=bU(Y),f=null;try{let G=await ej(["diff","--no-color","--numstat","HEAD"],J);f=new Map(ey(G).map((X)=>[X.path,{added:X.added,deleted:X.deleted}]))}catch{f=new Map}return Z.map((G)=>{let X=f?.get(G.path);if(X)return{...G,added:X.added,deleted:X.deleted};return G})}function ey(J){let Y=J.split(`
230
- `).map((f)=>f.replace(/\r$/,"")),Z=[];for(let f of Y){if(f.length===0)continue;let G=f.indexOf("\t");if(G<0)continue;let X=f.indexOf("\t",G+1);if(X<0)continue;let Q=f.slice(0,G),q=f.slice(G+1,X),B=f.slice(X+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 kU(J){let Y={name:"",path:"",isDir:!0,children:[]};for(let Z of J){if(!Z)continue;let f=Z.split("/").filter((X)=>X.length>0);if(f.length===0)continue;let G=Y;for(let X=0;X<f.length;X++){let Q=f[X],B=X!==f.length-1,H=G.children.find((K)=>K.name===Q&&K.isDir===B);if(!H)H={name:Q,path:f.slice(0,X+1).join("/"),isDir:B,children:[]},G.children.push(H);G=H}}return IU(Y),Y}function IU(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)IU(Y)}function bU(J){let Y=J.split(`
231
- `).map((f)=>f.replace(/\r$/,"")),Z=[];for(let f of Y){if(f.length<4)continue;let G=f[0],X=f[1],Q=f[2];if(G===void 0||X===void 0||Q!==" ")continue;let q=f.slice(3),B;if(G==="?"&&X==="?")B="?";else{let H=X!==" "?X:G;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 Z9=y(()=>{hz()});function f9(J){V1(()=>({enabled:J.focused(),bindings:OZ({"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(),G=RX.indexOf(f);if(G<0)return;let X=(Z??0)%2===0?-1:1,Q=RX[(G+X+RX.length)%RX.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 RX;var G9=y(()=>{BG();UJ();RX=["all","changes"]});import{spawn as NU}from"child_process";import{existsSync as Jk}from"fs";import{platform as Yk}from"os";function TU(J){if(!J)return;let Y=Yk();if(Y==="linux"){if(Jk("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){gX("wslview",[J],()=>{let Z=NU("wslpath",["-w",J],{stdio:["ignore","pipe","ignore"]}),f="";Z.stdout?.on("data",(G)=>{f+=G.toString()}),Z.on("close",(G)=>{if(G===0)gX("explorer.exe",[f.trim()])})});return}gX("xdg-open",[J]);return}if(Y==="darwin"){gX("open",[J]);return}if(Y==="win32"){gX("cmd.exe",["/c","start","",J]);return}}function gX(J,Y,Z){try{let f=NU(J,Y,{stdio:"ignore",detached:!0});f.on("error",()=>Z?.()),f.unref()}catch{Z?.()}}var EU=()=>{};function X9(J,Y,Z,f){for(let G of J.children)if(G.isDir){let X=Y.has(G.path);if(f.push({kind:"dir",path:G.path,name:G.name,depth:Z,expanded:X,hasChildren:G.children.length>0}),X)X9(G,Y,Z+1,f)}else f.push({kind:"file",path:G.path,name:G.name,depth:Z})}function uU(J){return J.map((Y)=>({kind:"status",path:Y.path,status:Y.status,added:Y.added,deleted:Y.deleted}))}function Zk(J){return`${J.kind}\x00${J.path}`}function fk(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 xU(J,Y){return fq(J,Y,Zk,fk)}function wU(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 hU(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],G=Y[Z];if(f.path!==G.path||f.status!==G.status||f.added!==G.added||f.deleted!==G.deleted)return!1}return!0}var PU=()=>{};import{watch as Gk}from"fs";import{TextAttributes as Hq}from"@opentui/core";function Xk(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 Qk(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 Bk(J,Y){if(Y<=0||J.length<=Y)return J;return`\u2026${J.slice(J.length-Math.max(0,Y-1))}`}function z9(J){let{theme:Y}=u0(),Z=DY(),f=()=>J.focused?J.focused():!0,[G,X]=r("all"),[Q,q]=r(0),[B,H]=r(0),[K,j]=r(null,{equals:wU}),[U,L]=r(null,{equals:hU}),[M,D]=r(null),[A,R]=r(new Set),l=0;async function g(_,f0){let a=++l;if(f0==null){j(null),L(null),D(null);return}D(null);try{if(_==="all"){let L0=await J9(f0);if(a!==l||J.worktreePath()!==f0)return;j(L0)}else if(_==="changes"){let L0=await Y9(f0);if(a!==l||J.worktreePath()!==f0)return;L(L0)}}catch(L0){let m=L0 instanceof Error?L0.message:String(L0);if(a===l&&J.worktreePath()===f0)D(m)}}a0(BJ(J.worktreePath,async(_)=>{j(null),L(null),D(null),q(0),R(new Set),await g(G(),_)})),a0(BJ(J.worktreePath,(_)=>{if(_==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let f0=null,a=null;try{a=Gk(_,{recursive:!0},(L0,m)=>{if(m==null)return;let b=m.toString();if(b===".git"||b.startsWith(".git/")||b.startsWith(".git\\"))return;if(b.startsWith("node_modules/")||b.startsWith("node_modules\\"))return;if(f0!=null)clearTimeout(f0);f0=setTimeout(()=>{f0=null,H((t)=>t+1)},500)}),a.on("error",()=>{})}catch{}d1(()=>{if(f0!=null)clearTimeout(f0);if(a!=null)a.close()})})),a0(BJ([G,B],async([_,f0])=>{let a=J.worktreePath();if(a==null)return;q(0);let m=B()>0;if(_==="all"){if(K()==null||m)await g("all",a)}else if(_==="changes"){if(U()==null||m)await g("changes",a)}}));let S=W0(()=>{let _=K();if(_==null)return null;return kU(_)}),C=W0((_)=>{let f0=[];if(G()==="all"){let a=S();if(a!=null)X9(a,A(),0,f0)}else if(G()==="changes"){let a=U();if(a!=null)f0.push(...uU(a))}return xU(_??[],f0)},[]),k=W0(()=>{let _=0,f0=0;for(let a of C()){if(a.kind!=="status")continue;if(a.added!=null)_=Math.max(_,String(a.added).length+1);if(a.deleted!=null)f0=Math.max(f0,String(a.deleted).length+1)}return{added:_,deleted:f0}}),$=W0(()=>{let _=k(),f0=(_.added>0?_.added+1:0)+(_.deleted>0?_.deleted+1:0);return Math.max(8,Z().width-6-f0)});function G0(){let _=C();if(_.length===0)return;q(Math.min(Q()+1,_.length-1))}function s(){if(C().length===0)return;q(Math.max(Q()-1,0))}function J0(){let _=C(),f0=Q(),a=_[f0];if(!a)return;if(a.kind!=="dir")return;if(!a.expanded&&a.hasChildren)R((L0)=>{let m=new Set(L0);return m.add(a.path),m});else if(a.expanded){if(f0+1<_.length)q(f0+1)}}function E(){if(G()!=="all")return;let _=C(),f0=Q(),a=_[f0];if(!a)return;if(a.kind==="dir"&&a.expanded){R((m)=>{let b=new Set(m);return b.delete(a.path),b});return}if(a.kind!=="dir"&&a.kind!=="file")return;let L0=a.depth-1;if(L0<0)return;for(let m=f0-1;m>=0;m--){let b=_[m];if(!b)continue;if(b.kind==="dir"&&b.depth===L0){q(m);return}}}function Q0(){let _=C(),f0=Q();if(f0<0||f0>=_.length)return;let a=_[f0];if(!a)return;if(a.kind==="dir"){R((L0)=>{let m=new Set(L0);if(m.has(a.path))m.delete(a.path);else m.add(a.path);return m});return}J.onOpenFile(a.path)}function e(){let _=C(),f0=Q();if(f0<0||f0>=_.length)return;let a=_[f0];if(!a||a.kind==="dir")return;J.onMention?.(a.path)}function j0(){H((_)=>_+1),J.onRefresh?.()}function o(){let _=C(),f0=Q();if(f0<0||f0>=_.length)return;let a=_[f0];if(!a||a.kind==="dir")return;let L0=J.worktreePath();if(!L0)return;let m=`${L0}/${a.path}`;TU(m)}f9({focused:f,moveDown:G0,moveUp:s,setTab:(_)=>X(_),currentTab:G,openCurrent:Q0,mentionCurrent:e,createPR:J.onCreatePR,openExternal:o,refresh:j0,expandOrDescend:J0,collapseOrParent:E});let p;return a0(BJ([Q,C],([_,f0])=>{if(!p)return;if(f0.length===0)return;let a=p.scrollTop,L0=p.viewport.height;if(L0<=0)return;if(_<a)p.scrollTo({x:0,y:_});else if(_>=a+L0)p.scrollTo({x:0,y:_-L0+1})})),(()=>{var _=V("box"),f0=V("box"),a=V("box"),L0=V("scrollbox");return W(_,f0),W(_,L0),z(_,"flexDirection","column"),z(_,"flexGrow",1),z(_,"paddingTop",1),z(_,"paddingBottom",1),z(_,"paddingLeft",0),z(_,"paddingRight",0),F(_,I(X0,{get when(){return J.onCreatePR},get children(){var m=V("box"),b=V("box"),t=V("text"),q0=V("text");return W(m,b),z(m,"flexDirection","row"),z(m,"justifyContent","flex-end"),z(m,"paddingBottom",1),z(m,"flexShrink",0),W(b,t),W(b,q0),z(b,"flexDirection","row"),z(b,"gap",1),z(b,"onMouseUp",()=>J.onCreatePR?.()),W(t,T("[P]")),z(t,"wrapMode","none"),W(q0,T("create PR")),z(q0,"wrapMode","none"),x((M0)=>{var S0=Y.accent,h0=Hq.BOLD,u=Y.text;return S0!==M0.e&&(M0.e=z(t,"fg",S0,M0.e)),h0!==M0.t&&(M0.t=z(t,"attributes",h0,M0.t)),u!==M0.a&&(M0.a=z(q0,"fg",u,M0.a)),M0},{e:void 0,t:void 0,a:void 0}),m}}),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),F(a,I(e0,{each:zk,children:(m)=>{let b=()=>G()===m;return(()=>{var t=V("text");return z(t,"wrapMode","none"),z(t,"onMouseUp",()=>X(m)),F(t,()=>qk[m]),x((q0)=>{var M0=b()?Y.primary:Y.textMuted,S0=b()?Hq.BOLD:void 0;return M0!==q0.e&&(q0.e=z(t,"fg",M0,q0.e)),S0!==q0.t&&(q0.t=z(t,"attributes",S0,q0.t)),q0},{e:void 0,t:void 0}),t})()}})),F(f0,I(X0,{get when(){return J.cornerBadge?.()},children:(m)=>(()=>{var b=V("text");return z(b,"wrapMode","none"),F(b,()=>m().text),x((t)=>{var q0=m().active?Y.accent:Y.textMuted,M0=m().active?Hq.BOLD:void 0;return q0!==t.e&&(t.e=z(b,"fg",q0,t.e)),M0!==t.t&&(t.t=z(b,"attributes",M0,t.t)),t},{e:void 0,t:void 0}),b})()}),null),F(_,I(X0,{get when(){return G()==="changes"},get children(){var m=V("box"),b=V("text");return W(m,b),z(m,"flexDirection","column"),z(m,"paddingBottom",1),z(m,"flexShrink",0),z(m,"gap",0),W(b,T("M modified \xB7 A added \xB7 D deleted \xB7 ? untracked")),z(b,"wrapMode","none"),x((t)=>z(b,"fg",Y.textMuted,t)),m}}),L0),F(_,I(X0,{get when(){return G()!=="changes"},get children(){var m=V("box");return z(m,"flexDirection","row"),z(m,"paddingBottom",1),z(m,"flexShrink",0),m}}),L0),LZ((m)=>{p=m},L0),z(L0,"flexGrow",1),z(L0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),F(L0,I(X0,{get when(){return J.worktreePath()==null},get children(){var m=V("box"),b=V("text");return W(m,b),z(m,"paddingTop",1),z(m,"paddingLeft",1),W(b,T("(no task \u2014 press n to create)")),x((t)=>z(b,"fg",Y.textMuted,t)),m}}),null),F(L0,I(X0,{get when(){return o0(()=>J.worktreePath()!=null)()&&M()!=null},get children(){var m=V("box"),b=V("text"),t=V("text");return W(m,b),W(m,t),z(m,"paddingTop",1),z(m,"paddingLeft",1),z(m,"flexDirection","column"),z(m,"gap",0),z(b,"wrapMode","word"),F(b,()=>Qk(M()??"")),W(t,T("press r to retry")),z(t,"wrapMode","word"),x((q0)=>{var{error:M0,textMuted:S0}=Y;return M0!==q0.e&&(q0.e=z(b,"fg",M0,q0.e)),S0!==q0.t&&(q0.t=z(t,"fg",S0,q0.t)),q0},{e:void 0,t:void 0}),m}}),null),F(L0,I(X0,{get when(){return o0(()=>J.worktreePath()!=null&&M()==null&&C().length===0)()&&(G()==="all"&&K()!=null||G()==="changes"&&U()!=null)},get children(){var m=V("box"),b=V("text");return W(m,b),z(m,"paddingTop",1),z(m,"paddingLeft",1),F(b,()=>G()==="all"?"(empty worktree)":"(no changes \u2014 clean worktree)"),x((t)=>z(b,"fg",Y.textMuted,t)),m}}),null),F(L0,I(X0,{get when(){return o0(()=>J.worktreePath()!=null&&M()==null)()&&C().length>0},get children(){var m=V("box");return z(m,"flexShrink",0),z(m,"gap",0),z(m,"paddingRight",1),F(m,I(e0,{get each(){return C()},children:(b,t)=>{let q0=()=>t()===Q(),M0=(()=>{var C0=V("text");return z(C0,"wrapMode","none"),F(C0,()=>q0()?"\u258C":" "),x((y0)=>z(C0,"fg",q0()?Y.focusAccent:void 0,y0)),C0})(),S0=()=>q0()?Y.backgroundElement:void 0;if(b.kind==="dir"){let C0=" ".repeat(b.depth),y0=b.expanded?"\u25BE":"\u25B8";return(()=>{var n0=V("box"),P0=V("box"),O0=V("text");return W(n0,P0),z(n0,"flexDirection","row"),z(n0,"gap",0),z(n0,"onMouseUp",()=>{q(t()),R((d)=>{let Y0=new Set(d);if(Y0.has(b.path))Y0.delete(b.path);else Y0.add(b.path);return Y0})}),F(n0,M0,P0),W(P0,O0),z(P0,"flexGrow",1),z(P0,"paddingRight",1),z(O0,"wrapMode","none"),F(O0,()=>`${C0}${y0} ${b.name}/`),x((d)=>{var Y0=S0(),A0=Y.textMuted,N=Hq.BOLD;return Y0!==d.e&&(d.e=z(n0,"backgroundColor",Y0,d.e)),A0!==d.t&&(d.t=z(O0,"fg",A0,d.t)),N!==d.a&&(d.a=z(O0,"attributes",N,d.a)),d},{e:void 0,t:void 0,a:void 0}),n0})()}if(b.kind==="file"){let C0=" ".repeat(b.depth);return(()=>{var y0=V("box"),n0=V("box"),P0=V("text");return W(y0,n0),z(y0,"flexDirection","row"),z(y0,"gap",0),z(y0,"onMouseUp",()=>{q(t()),J.onOpenFile(b.path)}),F(y0,M0,n0),W(n0,P0),z(n0,"flexGrow",1),z(n0,"paddingRight",1),z(P0,"wrapMode","none"),F(P0,()=>`${C0} ${b.name}`),x((O0)=>{var d=S0(),Y0=Y.text;return d!==O0.e&&(O0.e=z(y0,"backgroundColor",d,O0.e)),Y0!==O0.t&&(O0.t=z(P0,"fg",Y0,O0.t)),O0},{e:void 0,t:void 0}),y0})()}let h0=Xk(b.status),u=()=>{switch(h0){case"success":return Y.success;case"warning":return Y.warning;case"error":return Y.error;case"info":return Y.info;default:return Y.textMuted}},D0=k(),z0=b.added==null?" ".repeat(D0.added):`+${b.added}`.padStart(D0.added),g0=b.deleted==null?" ".repeat(D0.deleted):`-${b.deleted}`.padStart(D0.deleted);return(()=>{var C0=V("box"),y0=V("box"),n0=V("text"),P0=V("text");return W(C0,y0),z(C0,"flexDirection","row"),z(C0,"gap",0),z(C0,"onMouseUp",()=>{q(t()),J.onOpenFile(b.path)}),F(C0,M0,y0),W(y0,n0),W(y0,P0),z(y0,"flexDirection","row"),z(y0,"flexGrow",1),z(y0,"gap",1),z(y0,"paddingRight",1),z(n0,"wrapMode","none"),F(n0,()=>b.status),z(P0,"wrapMode","none"),z(P0,"flexGrow",1),F(P0,()=>Bk(b.path,$())),F(y0,I(X0,{get when(){return D0.added>0},get children(){var O0=V("text");return z(O0,"wrapMode","none"),F(O0,z0),x((d)=>z(O0,"fg",Y.success,d)),O0}}),null),F(y0,I(X0,{get when(){return D0.deleted>0},get children(){var O0=V("text");return z(O0,"wrapMode","none"),F(O0,g0),x((d)=>z(O0,"fg",Y.error,d)),O0}}),null),x((O0)=>{var d=S0(),Y0=u(),A0=Y.text;return d!==O0.e&&(O0.e=z(C0,"backgroundColor",d,O0.e)),Y0!==O0.t&&(O0.t=z(n0,"fg",Y0,O0.t)),A0!==O0.a&&(O0.a=z(P0,"fg",A0,O0.a)),O0},{e:void 0,t:void 0,a:void 0}),C0})()}})),m}}),null),F(_,I(X0,{get when(){return J.worktreePath()!=null},get children(){var m=V("box"),b=V("text");return W(m,b),z(m,"flexDirection","row"),z(m,"paddingTop",1),z(m,"flexShrink",0),W(b,T("\u21B5 open")),z(b,"wrapMode","none"),x((t)=>z(b,"fg",Y.textMuted,t)),m}}),null),_})()}var zk,qk;var vU=y(()=>{w();w();w();w();w();w();w();w();w();w();G1();S1();Z9();G9();EU();PU();zk=["all","changes"];qk={all:"All",changes:"Changes"}});var mU=y(()=>{vU();Z9();G9()});import{promises as Hk}from"fs";import jk from"path";async function jq(J,Y){let Z=new AbortController,f=setTimeout(()=>Z.abort(),Wk);try{let G=await mY("git",Y,{cwd:J,env:CJ(),signal:Z.signal});if(Z.signal.aborted)return null;if(G.status!==0)return null;return G.stdout.trim()}finally{clearTimeout(f)}}async function Vk(J){return await jq(J,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function Kk(J){let Y=await jq(J,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!Y)return"main";return Y.startsWith("origin/")?Y.slice(7):Y}async function Uk(J){let Y=await jq(J,["rev-parse","--abbrev-ref","@{u}"]);return Y!==null&&Y.length>0}async function Lk(J){let Y=await jq(J,["status","--porcelain"]);if(!Y)return 0;return Y.split(`
232
- `).filter((Z)=>Z.length>0).length}async function Dk(J){let[Y,Z,f,G]=await Promise.all([Vk(J),Kk(J),Uk(J),Lk(J)]);return{branch:Y,targetBranch:Z,hasUpstream:f,dirtyCount:G}}function Mk(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 Fk(J){return J?"The current branch tracks an upstream.":"There is no upstream branch yet."}function Ok(J,Y){let Z={branch:Y.branch,targetBranch:Y.targetBranch,dirtyCountSentence:Mk(Y.dirtyCount),upstreamSentence:Fk(Y.hasUpstream)};return J.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(f,G)=>Object.hasOwn(Z,G)?Z[G]:f)}async function Ak(J){let Y=jk.join(J,".kobe","pr-instructions.md");try{let Z=await Hk.readFile(Y,"utf8");return Z.length>0?Z:cU}catch{return cU}}async function dU(J){let[Y,Z]=await Promise.all([Ak(J),Dk(J)]);return Ok(Y,Z)}var Wk=5000,cU=`The user likes the current state of the code.
226
+ kobe update failed with exit code ${C}.
227
+ `),process.stdout.write("Press any key to close this update window."),await ey(),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"),f0=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"),X0=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($,f0),W($,t),W($,u),W($,B0),z($,"flexDirection","row"),z($,"gap",2),z($,"flexShrink",0),z($,"paddingTop",1),W(f0,T("current")),z(f0,"wrapMode","none"),W(t,Z0),z(t,"wrapMode","none"),F(t,d0,null),W(u,T("latest")),z(u,"wrapMode","none"),W(B0,Y0),z(B0,"wrapMode","none"),F(B0,U,null),z(W0,"flexDirection","column"),z(W0,"flexShrink",0),z(W0,"paddingTop",1),z(W0,"gap",0),F(W0,k(Y1,{get each(){return M()},children:(N)=>(()=>{var s=V("box"),H0=V("box"),D0=V("text"),y0=T("["),c0=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,c0),z(D0,"wrapMode","none"),F(D0,()=>N.key,c0),W(x,F0),z(x,"width",14),z(x,"flexShrink",0),z(F0,"wrapMode","none"),F(F0,()=>N.label),z(Q0,"wrapMode","word"),F(Q0,()=>N.detail),w((L0)=>{var k0=B()===N.id?J.primary:void 0,T0=B()===N.id?J.selectedListItemText:J.accent,v0=DG.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)),v0!==L0.a&&(L0.a=z(D0,"attributes",v0,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})()})),F(R,k(z0,{get when(){return K()},get children(){var N=V("text");return z(N,"wrapMode","word"),F(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(_,X0),W(_,a),z(_,"wrapMode","none"),F(_,d0,X0),F(_,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),F(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),F(c,k(z0,{get when(){return r0(()=>!Q())()&&G().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),F(c,k(Y1,{get each(){return G()},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"),F(H0,()=>N.version,null),F(s,k(Y1,{get each(){return ty(N.body)},children:(y0)=>(()=>{var c0=V("text");return z(c0,"wrapMode","word"),F(c0,y0),w((x)=>z(c0,"fg",J.textMuted,x)),c0})()}),null),w((y0)=>{var c0=J.text,x=DG.BOLD;return c0!==y0.e&&(y0.e=z(H0,"fg",c0,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=DG.BOLD,y0=J.textMuted,c0=J.textMuted,x=J.text,F0=DG.BOLD,Q0=J.textMuted,L0=Z()?.hasUpdate?J.warning:J.success,k0=DG.BOLD,T0=J.textMuted,v0=DG.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)),c0!==N.i&&(N.i=z(f0,"fg",c0,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)),v0!==N.u&&(N.u=z(_,"attributes",v0,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 Yk(){await QJ({setup:()=>({root:()=>k(Jk,{})})})}var NU=S(()=>{h();h();h();h();h();h();h();h();h();Q1();zJ();N1();IZ();MJ()});async function bU(J,Y){if(!Y)return 0;return a1(J).history.latestTranscriptMtimeForWorktree(Y)}var TU=S(()=>{qZ()});function Zk(J){return J.trim().split(/\s+/)[0]??""}function uU(J,Y,Z,X){let G=Z1(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 f=(Y.trim()||(X??"").trim()).trim();if(!f)return null;let Q=Zk(f);if(!Q)return null;let q=f.includes(EU)?f.split(EU).join(G):`${f} ${G}`;return{bin:Q,command:q}}function Xk(J,Y,Z){let X=Z1(Y);return["f=$(mktemp 2>/dev/null)",`if [ -n "$f" ] && git show ${Z1(`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(`
228
+ `)}function Gk(J,Y){let Z=J.endsWith("/")?J:`${J}/`;return Y.startsWith(Z)?Y.slice(Z.length):null}async function fk(J){let Y=vX(C1(dY)),Z=C1(VZ)??"",X=(process.env.VISUAL??process.env.EDITOR??"").trim();if(Y!=="auto")return uU(Y,Z,J,X);if(X)return uU("custom","",J,X);let G=Z1(J);for(let f of A5)if(await xU(f))return{bin:f,command:`${f} ${G}`};return null}async function xU(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 zk(J,Y){try{return await Bun.spawn(["git","diff","--quiet","HEAD","--",Y],{cwd:J,stdin:"ignore",stdout:"ignore",stderr:"ignore",env:kJ()}).exited===1}catch{return!1}}async function wU(J,Y,Z){let X=await fk(Z);if(!X)return!1;if(!await xU(X.bin))return!1;let G=await Qk(X,Y,Z);return await sJ(J,{cwd:Y,command:G,name:qk(Z)}),!0}async function Qk(J,Y,Z){let{bin:X,command:G}=J;if(X!=="nvim"&&X!=="vim")return G;if(G!==`${X} ${Z1(Z)}`)return G;let f=Gk(Y,Z);if(!f)return G;if(!await zk(Y,f))return G;return Xk(X,Z,f)}function qk(J){let Y=J.slice(J.lastIndexOf("/")+1).trim();return Y.length>0?Y:"edit"}var EU="{file}";var hU=S(()=>{KZ();A1();dz();w1();KY()});async function qW(J,Y){if(!Y)throw Error("git(): cwd is required");let Z=await mX(Y,J),X=Z.status??-1;if(X!==0){let G=(Z.stderr??"").trim(),f=(Z.stdout??"").trim();throw Error(`git ${J.join(" ")} (cwd=${Y}) exited with code ${X}: ${G||f||"(no output)"}`)}return Z.stdout??""}async function BW(J){let Z=(await qW(["ls-files","--cached","--others","--exclude-standard","--full-name"],J)).split(`
229
+ `).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 HW(J){let Y=await qW(["status","--porcelain"],J),Z=mU(Y),X=null;try{let G=await qW(["diff","--no-color","--numstat","HEAD"],J);X=new Map(Bk(G).map((f)=>[f.path,{added:f.added,deleted:f.deleted}]))}catch{X=new Map}return Z.map((G)=>{let f=X?.get(G.path);if(f)return{...G,added:f.added,deleted:f.deleted};return G})}function Bk(J){let Y=J.split(`
230
+ `).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 f=X.indexOf("\t",G+1);if(f<0)continue;let Q=X.slice(0,G),q=X.slice(G+1,f),B=X.slice(f+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 PU(J){let Y={name:"",path:"",isDir:!0,children:[]};for(let Z of J){if(!Z)continue;let X=Z.split("/").filter((f)=>f.length>0);if(X.length===0)continue;let G=Y;for(let f=0;f<X.length;f++){let Q=X[f],B=f!==X.length-1,H=G.children.find((K)=>K.name===Q&&K.isDir===B);if(!H)H={name:Q,path:X.slice(0,f+1).join("/"),isDir:B,children:[]},G.children.push(H);G=H}}return vU(Y),Y}function vU(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)vU(Y)}function mU(J){let Y=J.split(`
231
+ `).map((X)=>X.replace(/\r$/,"")),Z=[];for(let X of Y){if(X.length<4)continue;let G=X[0],f=X[1],Q=X[2];if(G===void 0||f===void 0||Q!==" ")continue;let q=X.slice(3),B;if(G==="?"&&f==="?")B="?";else{let H=f!==" "?f:G;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 jW=S(()=>{nz()});function WW(J){U1(()=>({enabled:J.focused(),bindings:yZ({"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=kf.indexOf(X);if(G<0)return;let f=(Z??0)%2===0?-1:1,Q=kf[(G+f+kf.length)%kf.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 kf;var VW=S(()=>{WG();MJ();kf=["all","changes"]});import{spawn as cU}from"child_process";import{existsSync as Hk}from"fs";import{platform as jk}from"os";function dU(J){if(!J)return;let Y=jk();if(Y==="linux"){if(Hk("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){If("wslview",[J],()=>{let Z=cU("wslpath",["-w",J],{stdio:["ignore","pipe","ignore"]}),X="";Z.stdout?.on("data",(G)=>{X+=G.toString()}),Z.on("close",(G)=>{if(G===0)If("explorer.exe",[X.trim()])})});return}If("xdg-open",[J]);return}if(Y==="darwin"){If("open",[J]);return}if(Y==="win32"){If("cmd.exe",["/c","start","",J]);return}}function If(J,Y,Z){try{let X=cU(J,Y,{stdio:"ignore",detached:!0});X.on("error",()=>Z?.()),X.unref()}catch{Z?.()}}var nU=()=>{};function KW(J,Y,Z,X){for(let G of J.children)if(G.isDir){let f=Y.has(G.path);if(X.push({kind:"dir",path:G.path,name:G.name,depth:Z,expanded:f,hasChildren:G.children.length>0}),f)KW(G,Y,Z+1,X)}else X.push({kind:"file",path:G.path,name:G.name,depth:Z})}function iU(J){return J.map((Y)=>({kind:"status",path:Y.path,status:Y.status,added:Y.added,deleted:Y.deleted}))}function Wk(J){return`${J.kind}\x00${J.path}`}function Vk(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 lU(J,Y){return Hq(J,Y,Wk,Vk)}function $U(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 aU(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 pU=()=>{};import{watch as Kk}from"fs";import{TextAttributes as Dq}from"@opentui/core";function Uk(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 Dk(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 Fk(J,Y){if(Y<=0||J.length<=Y)return J;return`\u2026${J.slice(J.length-Math.max(0,Y-1))}`}function UW(J){let{theme:Y}=x0(),Z=RY(),X=()=>J.focused?J.focused():!0,[G,f]=p("all"),[Q,q]=p(0),[B,H]=p(0),[K,j]=p(null,{equals:$U}),[U,L]=p(null,{equals:aU}),[M,D]=p(null),[O,A]=p(new Set),l=0;async function R(r,X0){let a=++l;if(X0==null){j(null),L(null),D(null);return}D(null);try{if(r==="all"){let U0=await BW(X0);if(a!==l||J.worktreePath()!==X0)return;j(U0)}else if(r==="changes"){let U0=await HW(X0);if(a!==l||J.worktreePath()!==X0)return;L(U0)}}catch(U0){let c=U0 instanceof Error?U0.message:String(U0);if(a===l&&J.worktreePath()===X0)D(c)}}p0(WJ(J.worktreePath,async(r)=>{j(null),L(null),D(null),q(0),A(new Set),await R(G(),r)})),p0(WJ(J.worktreePath,(r)=>{if(r==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let X0=null,a=null;try{a=Kk(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(X0!=null)clearTimeout(X0);X0=setTimeout(()=>{X0=null,H((s)=>s+1)},500)}),a.on("error",()=>{})}catch{}i1(()=>{if(X0!=null)clearTimeout(X0);if(a!=null)a.close()})})),p0(WJ([G,B],async([r,X0])=>{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 PU(r)}),g=V0((r)=>{let X0=[];if(G()==="all"){let a=C();if(a!=null)KW(a,O(),0,X0)}else if(G()==="changes"){let a=U();if(a!=null)X0.push(...iU(a))}return lU(r??[],X0)},[]),y=V0(()=>{let r=0,X0=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)X0=Math.max(X0,String(a.deleted).length+1)}return{added:r,deleted:X0}}),$=V0(()=>{let r=y(),X0=(r.added>0?r.added+1:0)+(r.deleted>0?r.deleted+1:0);return Math.max(8,Z().width-6-X0)});function f0(){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(),X0=Q(),a=r[X0];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(X0+1<r.length)q(X0+1)}}function u(){if(G()!=="all")return;let r=g(),X0=Q(),a=r[X0];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=X0-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(),X0=Q();if(X0<0||X0>=r.length)return;let a=r[X0];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(),X0=Q();if(X0<0||X0>=r.length)return;let a=r[X0];if(!a||a.kind==="dir")return;J.onMention?.(a.path)}function W0(){H((r)=>r+1),J.onRefresh?.()}function o(){let r=g(),X0=Q();if(X0<0||X0>=r.length)return;let a=r[X0];if(!a||a.kind==="dir")return;let U0=J.worktreePath();if(!U0)return;let c=`${U0}/${a.path}`;dU(c)}WW({focused:X,moveDown:f0,moveUp:t,setTab:(r)=>f(r),currentTab:G,openCurrent:B0,mentionCurrent:Y0,createPR:J.onCreatePR,openExternal:o,refresh:W0,expandOrDescend:Z0,collapseOrParent:u});let _;return p0(WJ([Q,g],([r,X0])=>{if(!_)return;if(X0.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"),X0=V("box"),a=V("box"),U0=V("scrollbox");return W(r,X0),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),F(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,c0=Dq.BOLD,x=Y.text;return y0!==D0.e&&(D0.e=z(s,"fg",y0,D0.e)),c0!==D0.t&&(D0.t=z(s,"attributes",c0,D0.t)),x!==D0.a&&(D0.a=z(H0,"fg",x,D0.a)),D0},{e:void 0,t:void 0,a:void 0}),c}}),X0),W(X0,a),z(X0,"flexDirection","row"),z(X0,"justifyContent","space-between"),z(X0,"paddingBottom",0),z(X0,"flexShrink",0),z(a,"flexDirection","row"),z(a,"gap",2),F(a,k(Y1,{each:Lk,children:(c)=>{let N=()=>G()===c;return(()=>{var s=V("text");return z(s,"wrapMode","none"),z(s,"onMouseUp",()=>f(c)),F(s,()=>Mk[c]),w((H0)=>{var D0=N()?Y.primary:Y.textMuted,y0=N()?Dq.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})()}})),F(X0,k(z0,{get when(){return J.cornerBadge?.()},children:(c)=>(()=>{var N=V("text");return z(N,"wrapMode","none"),F(N,()=>c().text),w((s)=>{var H0=c().active?Y.accent:Y.textMuted,D0=c().active?Dq.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),F(r,k(z0,{get when(){return G()==="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),F(r,k(z0,{get when(){return G()!=="changes"},get children(){var c=V("box");return z(c,"flexDirection","row"),z(c,"paddingBottom",1),z(c,"flexShrink",0),c}}),U0),RZ((c)=>{_=c},U0),z(U0,"flexGrow",1),z(U0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),F(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),F(U0,k(z0,{get when(){return r0(()=>J.worktreePath()!=null)()&&M()!=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"),F(N,()=>Dk(M()??"")),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),F(U0,k(z0,{get when(){return r0(()=>J.worktreePath()!=null&&M()==null&&g().length===0)()&&(G()==="all"&&K()!=null||G()==="changes"&&U()!=null)},get children(){var c=V("box"),N=V("text");return W(c,N),z(c,"paddingTop",1),z(c,"paddingLeft",1),F(N,()=>G()==="all"?"(empty worktree)":"(no changes \u2014 clean worktree)"),w((s)=>z(N,"fg",Y.textMuted,s)),c}}),null),F(U0,k(z0,{get when(){return r0(()=>J.worktreePath()!=null&&M()==null)()&&g().length>0},get children(){var c=V("box");return z(c,"flexShrink",0),z(c,"gap",0),z(c,"paddingRight",1),F(c,k(Y1,{get each(){return g()},children:(N,s)=>{let H0=()=>s()===Q(),D0=(()=>{var k0=V("text");return z(k0,"wrapMode","none"),F(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 v0=V("box"),$0=V("box"),O0=V("text");return W(v0,$0),z(v0,"flexDirection","row"),z(v0,"gap",0),z(v0,"onMouseUp",()=>{q(s()),A((m)=>{let G0=new Set(m);if(G0.has(N.path))G0.delete(N.path);else G0.add(N.path);return G0})}),F(v0,D0,$0),W($0,O0),z($0,"flexGrow",1),z($0,"paddingRight",1),z(O0,"wrapMode","none"),F(O0,()=>`${k0}${T0} ${N.name}/`),w((m)=>{var G0=y0(),A0=Y.textMuted,E=Dq.BOLD;return G0!==m.e&&(m.e=z(v0,"backgroundColor",G0,m.e)),A0!==m.t&&(m.t=z(O0,"fg",A0,m.t)),E!==m.a&&(m.a=z(O0,"attributes",E,m.a)),m},{e:void 0,t:void 0,a:void 0}),v0})()}if(N.kind==="file"){let k0=" ".repeat(N.depth);return(()=>{var T0=V("box"),v0=V("box"),$0=V("text");return W(T0,v0),z(T0,"flexDirection","row"),z(T0,"gap",0),z(T0,"onMouseUp",()=>{q(s()),J.onOpenFile(N.path)}),F(T0,D0,v0),W(v0,$0),z(v0,"flexGrow",1),z(v0,"paddingRight",1),z($0,"wrapMode","none"),F($0,()=>`${k0} ${N.name}`),w((O0)=>{var m=y0(),G0=Y.text;return m!==O0.e&&(O0.e=z(T0,"backgroundColor",m,O0.e)),G0!==O0.t&&(O0.t=z($0,"fg",G0,O0.t)),O0},{e:void 0,t:void 0}),T0})()}let c0=Uk(N.status),x=()=>{switch(c0){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"),v0=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)}),F(k0,D0,T0),W(T0,v0),W(T0,$0),z(T0,"flexDirection","row"),z(T0,"flexGrow",1),z(T0,"gap",1),z(T0,"paddingRight",1),z(v0,"wrapMode","none"),F(v0,()=>N.status),z($0,"wrapMode","none"),z($0,"flexGrow",1),F($0,()=>Fk(N.path,$())),F(T0,k(z0,{get when(){return F0.added>0},get children(){var O0=V("text");return z(O0,"wrapMode","none"),F(O0,Q0),w((m)=>z(O0,"fg",Y.success,m)),O0}}),null),F(T0,k(z0,{get when(){return F0.deleted>0},get children(){var O0=V("text");return z(O0,"wrapMode","none"),F(O0,L0),w((m)=>z(O0,"fg",Y.error,m)),O0}}),null),w((O0)=>{var m=y0(),G0=x(),A0=Y.text;return m!==O0.e&&(O0.e=z(k0,"backgroundColor",m,O0.e)),G0!==O0.t&&(O0.t=z(v0,"fg",G0,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),F(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 Lk,Mk;var _U=S(()=>{h();h();h();h();h();h();h();h();h();h();Q1();N1();jW();VW();nU();pU();Lk=["all","changes"];Mk={all:"All",changes:"Changes"}});var rU=S(()=>{_U();jW();VW()});import{promises as Ok}from"fs";import Ak from"path";async function Mq(J,Y){let Z=new AbortController,X=setTimeout(()=>Z.abort(),Rk);try{let G=await lY("git",Y,{cwd:J,env:kJ(),signal:Z.signal});if(Z.signal.aborted)return null;if(G.status!==0)return null;return G.stdout.trim()}finally{clearTimeout(X)}}async function gk(J){return await Mq(J,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function Ck(J){let Y=await Mq(J,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!Y)return"main";return Y.startsWith("origin/")?Y.slice(7):Y}async function Sk(J){let Y=await Mq(J,["rev-parse","--abbrev-ref","@{u}"]);return Y!==null&&Y.length>0}async function yk(J){let Y=await Mq(J,["status","--porcelain"]);if(!Y)return 0;return Y.split(`
232
+ `).filter((Z)=>Z.length>0).length}async function kk(J){let[Y,Z,X,G]=await Promise.all([gk(J),Ck(J),Sk(J),yk(J)]);return{branch:Y,targetBranch:Z,hasUpstream:X,dirtyCount:G}}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 Nk(J){return J?"The current branch tracks an upstream.":"There is no upstream branch yet."}function bk(J,Y){let Z={branch:Y.branch,targetBranch:Y.targetBranch,dirtyCountSentence:Ik(Y.dirtyCount),upstreamSentence:Nk(Y.hasUpstream)};return J.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(X,G)=>Object.hasOwn(Z,G)?Z[G]:X)}async function Tk(J){let Y=Ak.join(J,".kobe","pr-instructions.md");try{let Z=await Ok.readFile(Y,"utf8");return Z.length>0?Z:oU}catch{return oU}}async function sU(J){let[Y,Z]=await Promise.all([Tk(J),kk(J)]);return bk(Y,Z)}var Rk=5000,oU=`The user likes the current state of the code.
233
233
 
234
234
  {{dirtyCountSentence}}
235
235
  The current branch is {{branch}}.
@@ -246,21 +246,21 @@ Follow these steps to create a PR:
246
246
  - Push to origin.
247
247
  - 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.
248
248
 
249
- If any of these steps fail, ask the user for help.`;var nU=y(()=>{qZ();OX()});var Q9={};q1(Q9,{startOpsPreview:()=>Pk,startOpsHost:()=>Tk,nextActivityPollDelay:()=>$U});import{createHash as Rk}from"crypto";import{SyntaxStyle as gk}from"@opentui/core";function $U(J,Y){if(Y<Sk)return lU;return Math.min(J*2,Ck)}function bk(J){let{theme:Y}=u0(),[Z,f]=r(0),[G,X]=r(0),Q=!1;r1(()=>{let M=!1,D,A=lU,R=0,l=0;async function g(){try{let S=await OU(J.vendor,J.worktree);if(M)return;if(!Q)Q=!0,f(S),l=S;if(S>l)l=S,R=0;else R++;X(S)}catch{R++}finally{if(!M)A=$U(A,R),D=setTimeout(()=>void g(),A)}}g(),d1(()=>{if(M=!0,D)clearTimeout(D)})});let q=()=>Q&&G()>Z(),B=()=>q()?{text:"\u25CF new",active:!0}:null;function H(){f(G())}r1(()=>{if(!J.targetPane)return;let M=u8(J.vendor),D=!1,A=null,R="",l=!1,g=0,S=null;async function C(s){if(s===S)return;S=s,await iZ(J.targetPane,Ik,s)}async function k(){try{R=iU(await Tf(J.targetPane,80)),A=(await M.latestCompletion(J.worktree))?.id??null,await C(M.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function $(){try{let s=iU(await Tf(J.targetPane,80));if(D)return;if(s!==R)R=s,l=!0,g=0,await C(M.supportsCompletionMarkers()?"running":"unknown");else if(l)g++;if(!M.supportsCompletionMarkers()||!l||g<kk)return;let J0=await M.latestCompletion(J.worktree);if(D||!J0||J0.id===A)return;A=J0.id,l=!1,g=0,await C("done")}catch{}}k();let G0=setInterval(()=>void $(),yk);d1(()=>{D=!0,clearInterval(G0)})});function K(M){if(!J.taskId)return;aJ(W1(J.taskId),{cwd:J.worktree,command:B8({worktree:J.worktree,relPath:M,cliInvocation:A1()}),name:Nk(M)})}function j(M){if(!J.taskId){K(M);return}let D=`${J.worktree}/${M}`;SU(W1(J.taskId),J.worktree,D).then((A)=>{if(!A)K(M)})}function U(M){if(!J.targetPane)return;gz(J.targetPane,`@${M} `)}async function L(){if(!J.targetPane)return;let M=await dU(J.worktree);await gz(J.targetPane,M),await vG(J.targetPane,"Enter")}return(()=>{var M=V("box");return z(M,"flexDirection","column"),z(M,"flexGrow",1),F(M,I(z9,{worktreePath:()=>J.worktree,focused:()=>!0,onOpenFile:j,onMention:U,onCreatePR:()=>void L(),cornerBadge:B,onRefresh:H})),x((D)=>z(M,"backgroundColor",Y.background,D)),M})()}function Nk(J){let Y=J.lastIndexOf("/");return Y>=0?J.slice(Y+1):J}function iU(J){return Rk("sha1").update(J).digest("hex")}async function Tk(J){await zJ({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>I(bk,J)})})}function Ek(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 uk(J,Y){let Z=await xf(J,["diff","HEAD","--",Y]);return Z.status===0?Z.stdout:""}async function xk(J,Y){return await K5(J,Y)??""}function wk(J){let Y={fg:J.primary},Z={fg:J.success},f={fg:J.info},G={fg:J.warning},X={fg:J.accent},Q={fg:J.textMuted,italic:!0},q={fg:J.textMuted},B={fg:J.text};return gk.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:G,"type.builtin":G,constant:X,"constant.builtin":X,boolean:X,number:X,operator:q,"punctuation.bracket":q,"punctuation.delimiter":q,"punctuation.special":q,variable:B,"variable.member":B,"variable.parameter":B,"variable.builtin":X,property:B,attribute:G,label:B,module:B})}function hk(J){let{theme:Y}=u0(),Z=wk(Y),f=Ek(J.relPath),[G]=lX(()=>J.relPath,async(X)=>{let Q=await uk(J.worktree,X);if(Q.trim().length>0)return{kind:"diff",text:Q};return{kind:"code",text:await xk(J.worktree,X)}});return V1(()=>({bindings:[{key:"q",cmd:()=>process.exit(0)},{key:"escape",cmd:()=>process.exit(0)},{key:"ctrl+c",cmd:()=>process.exit(0)}]})),(()=>{var X=V("box"),Q=V("box"),q=V("text"),B=V("text"),H=V("text"),K=V("box");return W(X,Q),W(X,K),z(X,"flexDirection","column"),z(X,"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),F(q,()=>J.relPath),F(B,()=>G()?.kind==="diff"?"diff vs HEAD":"file"),W(H,T("\xB7 q to close")),z(K,"flexGrow",1),F(K,I(X0,{get when(){return G()},get fallback(){return(()=>{var j=V("text");return W(j,T("loading\u2026")),x((U)=>z(j,"fg",Y.textMuted,U)),j})()},children:(j)=>I(X0,{get when(){return j().kind==="diff"},get fallback(){return(()=>{var U=V("code");return z(U,"filetype",f),z(U,"syntaxStyle",Z),x((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),x((L)=>z(U,"diff",j().text,L)),U}})})),x((j)=>{var{background:U,accent:L,textMuted:M,textMuted:D}=Y;return U!==j.e&&(j.e=z(X,"backgroundColor",U,j.e)),L!==j.t&&(j.t=z(q,"fg",L,j.t)),M!==j.a&&(j.a=z(B,"fg",M,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}),X})()}async function Pk(J){await zJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>I(hk,J)})})}var lU=2500,Ck=20000,Sk=3,yk=1500,kk=2,Ik="@kobe_tab_state";var q9=y(()=>{w();w();w();w();w();w();w();w();NY();RB();AU();E1();yU();BY();hz();G1();S1();RZ();UJ();mU();nU()});var rU={};q1(rU,{startDirectTmux:()=>mk,chooseInitialTask:()=>_U});import{resolve as aU}from"path";function _U(J,Y={}){let Z=(Q)=>Q?J.find((q)=>q.id===Q):void 0,f=Z(Y.activeTaskId);if(f)return f;let G=Z(Y.persistedTaskId);if(G)return G;if(Y.cwdRepo){let Q=J.find((q)=>q.kind==="main"&&q.repo===Y.cwdRepo);if(Q)return Q}let X=J.filter((Q)=>!Q.archived);return X.find((Q)=>Q.pinned)??X[0]??J[0]}async function pU(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 vk(J){Cq();let Y=[...IJ()];if(Y.length===0)Y=[CY(aU(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]??aU(process.cwd())}async function mk(){if(Jz("gui"),Promise.resolve().then(() => (oH(),rH)).then((Z)=>Z.ensureGlobalKobeHooks()),!await jY()){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 tJ(),Y=new GJ(J,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=J.socketPath,await Y.init();let Z=await vk(Y),f=_U(Y.listTasks(),{activeTaskId:Y.activeTaskSignal()(),persistedTaskId:O1("lastSelectedTaskId"),cwdRepo:Z});if(!f){let K=await Cz();if(await Yf(),await DQ(K),await pU(If(K))===null)console.error("kobe: failed to attach to the kobe-home session"),process.exitCode=1;return}let G=f.worktreePath||await Y.ensureWorktree(f.id),X=W1(f.id);await Y.setActiveTask(f.id).catch(()=>{}),m1("lastSelectedTaskId",f.id);let Q=vY(f.repo,G,{kind:"repo-init"});if(!await jZ({name:X,cwd:G,command:VJ(f.vendor),taskId:f.id,vendor:f.vendor,repo:f.repo,launchInit:Q})){console.error(`kobe: tmux session ${X} failed to start (check the daemon log)`),process.exitCode=1;return}await Yf(),await DQ(X);let B=await pU(If(X));if(B===null){console.error(`kobe: failed to attach to tmux session ${X}`),process.exitCode=1;return}if(B!==0&&!await Z1(X)){console.error(`kobe: tmux session ${X} ended unexpectedly (attach exited ${B})`),process.exitCode=B;return}let H=Y.getTask(f.id);if(H&&H.title===zY&&H.worktreePath)try{let K=await Cf(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 oU=y(()=>{uZ();KJ();DZ();gJ();Oz();SG();nf();D1();E1();ZQ();ZJ()});var sU={};q1(sU,{startTui:()=>ck});async function ck(){X6();let{startDirectTmux:J}=await Promise.resolve().then(() => (oU(),rU));await J()}var tU=y(()=>{uQ()});Wq();QJ();import{resolve as YL}from"path";XJ();function F9(){return[`kobe ${m0}`,"","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"," 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(`
250
- `)}var eU=`Usage: kobe add [path]
249
+ If any of these steps fail, ask the user for help.`;var tU=S(()=>{KZ();Sf()});var LW={};j1(LW,{startOpsPreview:()=>pk,startOpsHost:()=>dk,nextActivityPollDelay:()=>YL});import{createHash as Ek}from"crypto";import{SyntaxStyle as uk}from"@opentui/core";function YL(J,Y){if(Y<wk)return JL;return Math.min(J*2,xk)}function mk(J){let{theme:Y}=x0(),[Z,X]=p(0),[G,f]=p(0),Q=!1;o1(()=>{let M=!1,D,O=JL,A=0,l=0;async function R(){try{let C=await bU(J.vendor,J.worktree);if(M)return;if(!Q)Q=!0,X(C),l=C;if(C>l)l=C,A=0;else A++;f(C)}catch{A++}finally{if(!M)O=YL(O,A),D=setTimeout(()=>void R(),O)}}R(),i1(()=>{if(M=!0,D)clearTimeout(D)})});let q=()=>Q&&G()>Z(),B=()=>q()?{text:"\u25CF new",active:!0}:null;function H(){X(G())}o1(()=>{if(!J.targetPane)return;let M=d8(J.vendor),D=!1,O=null,A="",l=!1,R=0,C=null;async function g(t){if(t===C)return;C=t,await _Z(J.targetPane,vk,t)}async function y(){try{A=eU(await hX(J.targetPane,80)),O=(await M.latestCompletion(J.worktree))?.id??null,await g(M.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function $(){try{let t=eU(await hX(J.targetPane,80));if(D)return;if(t!==A)A=t,l=!0,R=0,await g(M.supportsCompletionMarkers()?"running":"unknown");else if(l)R++;if(!M.supportsCompletionMarkers()||!l||R<Pk)return;let Z0=await M.latestCompletion(J.worktree);if(D||!Z0||Z0.id===O)return;O=Z0.id,l=!1,R=0,await g("done")}catch{}}y();let f0=setInterval(()=>void $(),hk);i1(()=>{D=!0,clearInterval(f0)})});function K(M){if(!J.taskId)return;sJ(K1(J.taskId),{cwd:J.worktree,command:D8({worktree:J.worktree,relPath:M,cliInvocation:S1()}),name:ck(M)})}function j(M){if(!J.taskId){K(M);return}let D=`${J.worktree}/${M}`;wU(K1(J.taskId),J.worktree,D).then((O)=>{if(!O)K(M)})}function U(M){if(!J.targetPane)return;Nz(J.targetPane,`@${M} `)}async function L(){if(!J.targetPane)return;let M=await sU(J.worktree);await Nz(J.targetPane,M),await nG(J.targetPane,"Enter")}return(()=>{var M=V("box");return z(M,"flexDirection","column"),z(M,"flexGrow",1),F(M,k(UW,{worktreePath:()=>J.worktree,focused:()=>!0,onOpenFile:j,onMention:U,onCreatePR:()=>void L(),cornerBadge:B,onRefresh:H})),w((D)=>z(M,"backgroundColor",Y.background,D)),M})()}function ck(J){let Y=J.lastIndexOf("/");return Y>=0?J.slice(Y+1):J}function eU(J){return Ek("sha1").update(J).digest("hex")}async function dk(J){await QJ({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>k(mk,J)})})}function nk(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 ik(J,Y){let Z=await mX(J,["diff","HEAD","--",Y]);return Z.status===0?Z.stdout:""}async function lk(J,Y){return await R5(J,Y)??""}function $k(J){let Y={fg:J.primary},Z={fg:J.success},X={fg:J.info},G={fg:J.warning},f={fg:J.accent},Q={fg:J.textMuted,italic:!0},q={fg:J.textMuted},B={fg:J.text};return uk.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:X,"function.call":X,"function.method":X,"function.builtin":X,constructor:X,type:G,"type.builtin":G,constant:f,"constant.builtin":f,boolean:f,number:f,operator:q,"punctuation.bracket":q,"punctuation.delimiter":q,"punctuation.special":q,variable:B,"variable.member":B,"variable.parameter":B,"variable.builtin":f,property:B,attribute:G,label:B,module:B})}function ak(J){let{theme:Y}=x0(),Z=$k(Y),X=nk(J.relPath),[G]=of(()=>J.relPath,async(f)=>{let Q=await ik(J.worktree,f);if(Q.trim().length>0)return{kind:"diff",text:Q};return{kind:"code",text:await lk(J.worktree,f)}});return U1(()=>({bindings:[{key:"q",cmd:()=>process.exit(0)},{key:"escape",cmd:()=>process.exit(0)},{key:"ctrl+c",cmd:()=>process.exit(0)}]})),(()=>{var f=V("box"),Q=V("box"),q=V("text"),B=V("text"),H=V("text"),K=V("box");return W(f,Q),W(f,K),z(f,"flexDirection","column"),z(f,"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),F(q,()=>J.relPath),F(B,()=>G()?.kind==="diff"?"diff vs HEAD":"file"),W(H,T("\xB7 q to close")),z(K,"flexGrow",1),F(K,k(z0,{get when(){return G()},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",X),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",X),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:M,textMuted:D}=Y;return U!==j.e&&(j.e=z(f,"backgroundColor",U,j.e)),L!==j.t&&(j.t=z(q,"fg",L,j.t)),M!==j.a&&(j.a=z(B,"fg",M,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}),f})()}async function pk(J){await QJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>k(ak,J)})})}var JL=2500,xk=20000,wk=3,hk=1500,Pk=2,vk="@kobe_tab_state";var DW=S(()=>{h();h();h();h();h();h();h();h();wY();TB();TU();w1();hU();KY();nz();Q1();N1();IZ();MJ();rU();tU()});var fL={};j1(fL,{startDirectTmux:()=>rk,chooseInitialTask:()=>GL});import{resolve as ZL}from"path";function GL(J,Y={}){let Z=(Q)=>Q?J.find((q)=>q.id===Q):void 0,X=Z(Y.activeTaskId);if(X)return X;let G=Z(Y.persistedTaskId);if(G)return G;if(Y.cwdRepo){let Q=J.find((q)=>q.kind==="main"&&q.repo===Y.cwdRepo);if(Q)return Q}let f=J.filter((Q)=>!Q.archived);return f.find((Q)=>Q.pinned)??f[0]??J[0]}async function XL(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 _k(J){uq();let Y=[...EJ()];if(Y.length===0)Y=[NY(ZL(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]??ZL(process.cwd())}async function rk(){if(zz("gui"),Promise.resolve().then(() => (fj(),Gj)).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 XY(),Y=new GJ(J,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=J.socketPath,await Y.init();let Z=await _k(Y),X=GL(Y.listTasks(),{activeTaskId:Y.activeTaskSignal()(),persistedTaskId:C1("lastSelectedTaskId"),cwdRepo:Z});if(!X){let K=await bz();if(await zX(),await gQ(K),await XL(uX(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),f=K1(X.id);await Y.setActiveTask(X.id).catch(()=>{}),d1("lastSelectedTaskId",X.id);let Q=iY(X.repo,G,{kind:"repo-init"});if(!await DZ({name:f,cwd:G,command:LJ(X.vendor),taskId:X.id,vendor:X.vendor,repo:X.repo,launchInit:Q})){console.error(`kobe: tmux session ${f} failed to start (check the daemon log)`),process.exitCode=1;return}await zX(),await gQ(f);let B=await XL(uX(f));if(B===null){console.error(`kobe: failed to attach to tmux session ${f}`),process.exitCode=1;return}if(B!==0&&!await G1(f)){console.error(`kobe: tmux session ${f} ended unexpectedly (attach exited ${B})`),process.exitCode=B;return}let H=Y.getTask(X.id);if(H&&H.title===jY&&H.worktreePath)try{let K=await NX(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 zL=S(()=>{vZ();DJ();gZ();yJ();yz();NG();pX();A1();w1();qQ();ZJ()});var QL={};j1(QL,{startTui:()=>ok});async function ok(){V6();let{startDirectTmux:J}=await Promise.resolve().then(() => (zL(),fL));await J()}var qL=S(()=>{mQ()});Oq();HJ();import{resolve as jL}from"path";zJ();function kW(){return[`kobe ${d0}`,"","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"," 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(`
250
+ `)}var BL=`Usage: kobe add [path]
251
251
  kobe add --remote --host <host> --user <user> --path <basePath> [--port N] [--key <path> | --password]
252
252
 
253
253
  Save a repo for the new-task picker. With --remote, register an SSH-backed
254
254
  project whose worktrees + engine run on <host> under <basePath>.
255
- `;async function dk(J){let Y=J[0];if(Y==="--help"||Y==="-h"||Y==="help"){process.stdout.write(eU);return}if(Y==="--remote"){let{runAddRemote:X}=await Promise.resolve().then(() => (h9(),w9));await X(J.slice(1));return}if(Y?.startsWith("-"))process.stderr.write(`kobe add: unknown flag "${Y}"
255
+ `;async function sk(J){let Y=J[0];if(Y==="--help"||Y==="-h"||Y==="help"){process.stdout.write(BL);return}if(Y==="--remote"){let{runAddRemote:f}=await Promise.resolve().then(() => (lW(),iW));await f(J.slice(1));return}if(Y?.startsWith("-"))process.stderr.write(`kobe add: unknown flag "${Y}"
256
256
 
257
- ${eU}`),process.exit(2);let Z=YL(process.cwd(),Y&&Y.length>0?Y:"."),{addSavedRepo:f}=await Promise.resolve().then(() => (D1(),aY)),G=f(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 nk(G.path)}async function nk(J){let Y=await ZL(),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 fL(Y,J,Z,LG(void 0))}async function ZL(){let{TaskIndexStore:J}=await Promise.resolve().then(() => (xX(),$9)),{GitWorktreeManager:Y}=await Promise.resolve().then(() => (uq(),zW)),{Orchestrator:Z}=await Promise.resolve().then(() => (SG(),bW)),f=new J;return await f.load(),new Z({store:f,worktrees:new Y})}async function fL(J,Y,Z,f){let{connectIfRunning:G}=await Promise.resolve().then(() => (KJ(),DH)),X=await G();try{for(let Q of Z){let q=X?(await X.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{X?.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(`
258
- `);function B9(J){process.stderr.write(`kobe adopt: ${J}
257
+ ${BL}`),process.exit(2);let Z=jL(process.cwd(),Y&&Y.length>0?Y:"."),{addSavedRepo:X}=await Promise.resolve().then(() => (A1(),tY)),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 tk(G.path)}async function tk(J){let Y=await WL(),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 VL(Y,J,Z,OG(void 0))}async function WL(){let{TaskIndexStore:J}=await Promise.resolve().then(() => (mf(),eW)),{GitWorktreeManager:Y}=await Promise.resolve().then(() => (nq(),K9)),{Orchestrator:Z}=await Promise.resolve().then(() => (NG(),P9)),X=new J;return await X.load(),new Z({store:X,worktrees:new Y})}async function VL(J,Y,Z,X){let{connectIfRunning:G}=await Promise.resolve().then(() => (DJ(),yH)),f=await G();try{for(let Q of Z){let q=f?(await f.request("worktree.adopt",{repo:Y,worktreePath:Q.path,branch:Q.branch,vendor:X})).task:await J.adoptWorktree({repo:Y,worktreePath:Q.path,branch:Q.branch,vendor:X});console.log(` adopted ${Q.branch} \u2192 task ${q.id} (${q.title})`)}}finally{f?.close()}}var KL=["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(`
258
+ `);function MW(J){process.stderr.write(`kobe adopt: ${J}
259
259
 
260
- ${GL}
261
- `),process.exit(2)}async function ik(J){let Y,Z,f,G=!1;for(let U=0;U<J.length;U++){let L=J[U];if(L==="--help"||L==="-h"||L==="help"){process.stdout.write(`${GL}
262
- `);return}if(L==="--repo"){if(Z=J[++U],Z===void 0)B9("--repo requires a value")}else if(L==="--vendor"){if(f=J[++U],f===void 0)B9("--vendor requires a value")}else if(L==="--yes"||L==="-y")G=!0;else if(L&&!L.startsWith("-")&&Y===void 0)Y=L;else B9(`unexpected argument "${L}"`)}let{resolveRepoRoot:X}=await Promise.resolve().then(() => (D1(),aY)),Q=X(YL(process.cwd(),Z&&Z.length>0?Z:".")),q=LG(f),B=await ZL(),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||SX(Y,U.path);console.log(`adoptable worktrees in ${Q}:`);for(let U of H){let L=Y?K(U)?"*":" ":"-",M=[U.dirty?"dirty":"",U.kobeManaged?"":"external"].filter(Boolean).join(",");console.log(` ${L} ${U.branch} ${U.path}${M?` (${M})`:""}`)}if(!Y){console.log(`
260
+ ${KL}
261
+ `),process.exit(2)}async function ek(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(`${KL}
262
+ `);return}if(L==="--repo"){if(Z=J[++U],Z===void 0)MW("--repo requires a value")}else if(L==="--vendor"){if(X=J[++U],X===void 0)MW("--vendor requires a value")}else if(L==="--yes"||L==="-y")G=!0;else if(L&&!L.startsWith("-")&&Y===void 0)Y=L;else MW(`unexpected argument "${L}"`)}let{resolveRepoRoot:f}=await Promise.resolve().then(() => (A1(),tY)),Q=f(jL(process.cwd(),Z&&Z.length>0?Z:".")),q=OG(X),B=await WL(),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||bf(Y,U.path);console.log(`adoptable worktrees in ${Q}:`);for(let U of H){let L=Y?K(U)?"*":" ":"-",M=[U.dirty?"dirty":"",U.kobeManaged?"":"external"].filter(Boolean).join(",");console.log(` ${L} ${U.branch} ${U.path}${M?` (${M})`:""}`)}if(!Y){console.log(`
263
263
  pass a path glob to adopt, e.g. kobe adopt '${Q}/*' --yes`);return}let j=H.filter(K);if(j.length===0){console.log(`
264
264
  no worktrees match glob ${JSON.stringify(Y)}`);return}if(!G){console.log(`
265
- ${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await fL(B,Q,j,q),console.log(`done \u2014 adopted ${j.length} worktree(s)`)}function JL(J){J.write(`${F9()}
266
- `)}function OY(J){let Y={};for(let Z=0;Z<J.length;Z++){let f=J[Z],G=J[Z+1];if(G===void 0)continue;if(f==="--task-id")Y.taskId=G,Z++;else if(f==="--worktree")Y.worktree=G,Z++;else if(f==="--target-pane")Y.targetPane=G,Z++;else if(f==="--vendor")Y.vendor=G,Z++;else if(f==="--preview")Y.preview=G,Z++;else if(f==="--session")Y.session=G,Z++;else if(f==="--repo")Y.repo=G,Z++;else if(f==="--initial-task-id")Y.initialTaskId=G,Z++;else if(f==="--action")Y.action=G,Z++;else if(f==="--window")Y.windowId=G,Z++}return Y}async function lk(){let[,,...J]=process.argv,[Y,...Z]=J;if(Y==="--version"||Y==="-v"||Y==="version"){let{CURRENT_VERSION:G}=await Promise.resolve().then(() => (XJ(),M9));console.log(`kobe ${G}`);return}if(Y==="--help"||Y==="-h"||Y==="help"){JL(process.stdout);return}if(Y==="add"){await dk(Z);return}if(Y==="adopt"){await ik(Z);return}if(Y==="repo"){let{runRepoSubcommand:G}=await Promise.resolve().then(() => (FV(),MV));await G(Z);return}if(Y==="api"){let{runApiSubcommand:G}=await Promise.resolve().then(() => (hV(),wV));await G(Z);return}if(Y==="update"){let{runUpdateSubcommand:G}=await Promise.resolve().then(() => (dV(),cV));await G(Z);return}if(Y==="theme"){let{runThemeSubcommand:G}=await Promise.resolve().then(() => (aV(),$V));await G(Z);return}if(Y==="feedback"){let{runFeedbackSubcommand:G}=await Promise.resolve().then(() => (sV(),oV));await G(Z);return}if(Y==="daemon"){let{runDaemonSubcommand:G}=await Promise.resolve().then(() => (Z6(),Y6));await G(Z);return}if(Y==="doctor"){let{runDoctorSubcommand:G}=await Promise.resolve().then(() => (wQ(),xQ));await G(Z);return}if(Y==="web"){let{runWebSubcommand:G}=await Promise.resolve().then(() => (M6(),D6));await G(Z);return}if(Y==="reset"){let{runResetSubcommand:G}=await Promise.resolve().then(() => (wQ(),xQ));await G(Z);return}if(Y==="reload"){let{runReloadSubcommand:G}=await Promise.resolve().then(() => (wQ(),xQ));await G(Z);return}if(Y==="skill"){let{runSkillSubcommand:G}=await Promise.resolve().then(() => (A6(),O6));await G(Z);return}if(Y==="hook"){let{runHookSubcommand:G}=await Promise.resolve().then(() => (oH(),rH));await G(Z);return}if(Y==="new-chattab"){let G=OY(Z),X=G.session;if(!X)console.error("kobe new-chattab: --session <name> is required"),process.exit(2);let Q;if(G.vendor!==void 0){let B=G.vendor.trim(),{getCustomEngineIds:H}=await Promise.resolve().then(() => (D1(),aY)),{isBuiltinVendor:K}=await Promise.resolve().then(() => (QJ(),j9));if(!(K(B)||H().includes(B))){let L=[...x1,...H()].join(", "),M=`kobe: unknown engine '${B}' (known: ${L})`,{runTmux:D}=await Promise.resolve().then(() => (E1(),IB));await D(["display-message","-t",X,M]),console.error(M),process.exit(2)}Q=B;let{setPersistedString:U}=await Promise.resolve().then(() => (D1(),aY));U("lastSelectedVendor",Q)}let{newChatTab:q}=await Promise.resolve().then(() => (ZJ(),sJ));await q(X,Q);return}if(Y==="kill-sessions"){let{runTmux:G,KOBE_TMUX_SOCKET:X}=await Promise.resolve().then(() => (E1(),IB)),Q=await G(["kill-server"]);console.log(Q===0?`kobe: killed all tmux sessions on the \`${X}\` socket`:`kobe: no tmux sessions to kill on the \`${X}\` socket`);return}if(Y==="quick-create"){let X=OY(Z).session;if(!X)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:Q}=await Promise.resolve().then(() => (ZJ(),sJ));await Q(X);return}if(Y==="focus-tasks"){let G=OY(Z),X=G.session;if(!X)console.error("kobe focus-tasks: --session <name> is required"),process.exit(2);let{selectTasksPane:Q}=await Promise.resolve().then(() => (ZJ(),sJ));await Q(X,{windowId:G.windowId});return}if(Y==="heal-layout"){let X=OY(Z).session;if(!X)console.error("kobe heal-layout: --session <name> is required"),process.exit(2);let{healSessionLayout:Q}=await Promise.resolve().then(() => (ZJ(),sJ)),{coalesceLayoutWork:q}=await Promise.resolve().then(() => (_G(),jH));await q(X,"heal",()=>Q(X));return}if(Y==="capture-layout"){let X=OY(Z).session;if(!X)console.error("kobe capture-layout: --session <name> is required"),process.exit(2);let{captureGlobalLayoutOnDrag:Q}=await Promise.resolve().then(() => (ZJ(),sJ)),{coalesceLayoutWork:q,genAgeMs:B,RESIZE_GUARD_MS:H}=await Promise.resolve().then(() => (_G(),jH));await q(X,"capture",async()=>{if(B(X,"resize")<H)return;await Q(X)});return}if(Y==="layout"){let G=OY(Z),X=G.session;if(!X)console.error("kobe layout: --session <name> is required"),process.exit(2);let Q=G.action;if(!Q||!new Set(["workspace-split","workspace-close","workspace-reset","tasks-toggle","tasks-restore","ops-toggle","terminal-toggle","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(),sJ));await B(X,Q,{windowId:G.windowId});return}if(Y==="quick-task"){let G=OY(Z),{startQuickTaskHost:X}=await Promise.resolve().then(() => (K4(),V4));await X({session:G.session});return}if(Y==="tasks"){let G=OY(Z),{startTasksPane:X}=await Promise.resolve().then(() => (VU(),WU));await X({initialTaskId:G.initialTaskId});return}if(Y==="settings"){let{startSettingsHost:G}=await Promise.resolve().then(() => (UU(),KU));await G();return}if(Y==="help-page"){let{startHelpHost:G}=await Promise.resolve().then(() => (DU(),LU));await G();return}if(Y==="new-task"){let G=OY(Z),{startNewTaskHost:X}=await Promise.resolve().then(() => (Tj(),X4));await X({defaultRepo:G.repo});return}if(Y==="update-page"){let{startUpdateHost:G}=await Promise.resolve().then(() => (FU(),MU));await G();return}if(Y==="ops"){let G=OY(Z);if(!G.worktree)console.error("kobe ops: --worktree <path> is required"),process.exit(2);if(G.preview){let{startOpsPreview:Q}=await Promise.resolve().then(() => (q9(),Q9));await Q({worktree:G.worktree,relPath:G.preview});return}let{startOpsHost:X}=await Promise.resolve().then(() => (q9(),Q9));await X({taskId:G.taskId??"",worktree:G.worktree,targetPane:G.targetPane??null,vendor:LG(G.vendor)});return}if(Y!==void 0)console.error(`kobe: unknown command '${Y}'`),JL(process.stderr),process.exit(2);let{startTui:f}=await Promise.resolve().then(() => (tU(),sU));await f()}lk().catch((J)=>{console.error("kobe failed to start:",J),process.exit(1)});
265
+ ${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await VL(B,Q,j,q),console.log(`done \u2014 adopted ${j.length} worktree(s)`)}function HL(J){J.write(`${kW()}
266
+ `)}function CY(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++}return Y}async function JI(){let[,,...J]=process.argv,[Y,...Z]=J;if(Y==="--version"||Y==="-v"||Y==="version"){let{CURRENT_VERSION:G}=await Promise.resolve().then(() => (zJ(),yW));console.log(`kobe ${G}`);return}if(Y==="--help"||Y==="-h"||Y==="help"){HL(process.stdout);return}if(Y==="add"){await sk(Z);return}if(Y==="adopt"){await ek(Z);return}if(Y==="repo"){let{runRepoSubcommand:G}=await Promise.resolve().then(() => (kV(),yV));await G(Z);return}if(Y==="api"){let{runApiSubcommand:G}=await Promise.resolve().then(() => (lV(),iV));await G(Z);return}if(Y==="update"){let{runUpdateSubcommand:G}=await Promise.resolve().then(() => (rV(),_V));await G(Z);return}if(Y==="theme"){let{runThemeSubcommand:G}=await Promise.resolve().then(() => (J6(),eV));await G(Z);return}if(Y==="feedback"){let{runFeedbackSubcommand:G}=await Promise.resolve().then(() => (f6(),G6));await G(Z);return}if(Y==="daemon"){let{runDaemonSubcommand:G}=await Promise.resolve().then(() => (H6(),B6));await G(Z);return}if(Y==="doctor"){let{runDoctorSubcommand:G}=await Promise.resolve().then(() => (dQ(),cQ));await G(Z);return}if(Y==="web"){let{runWebSubcommand:G}=await Promise.resolve().then(() => (y6(),S6));await G(Z);return}if(Y==="reset"){let{runResetSubcommand:G}=await Promise.resolve().then(() => (dQ(),cQ));await G(Z);return}if(Y==="reload"){let{runReloadSubcommand:G}=await Promise.resolve().then(() => (dQ(),cQ));await G(Z);return}if(Y==="skill"){let{runSkillSubcommand:G}=await Promise.resolve().then(() => (N6(),I6));await G(Z);return}if(Y==="hook"){let{runHookSubcommand:G}=await Promise.resolve().then(() => (fj(),Gj));await G(Z);return}if(Y==="new-chattab"){let G=CY(Z),f=G.session;if(!f)console.error("kobe new-chattab: --session <name> is required"),process.exit(2);let Q;if(G.vendor!==void 0){let B=G.vendor.trim(),{getCustomEngineIds:H}=await Promise.resolve().then(() => (A1(),tY)),{isBuiltinVendor:K}=await Promise.resolve().then(() => (HJ(),FW));if(!(K(B)||H().includes(B))){let L=[...h1,...H()].join(", "),M=`kobe: unknown engine '${B}' (known: ${L})`,{runTmux:D}=await Promise.resolve().then(() => (w1(),PB));await D(["display-message","-t",f,M]),console.error(M),process.exit(2)}Q=B;let{setPersistedString:U}=await Promise.resolve().then(() => (A1(),tY));U("lastSelectedVendor",Q)}let{newChatTab:q}=await Promise.resolve().then(() => (ZJ(),ZY));await q(f,Q);return}if(Y==="kill-sessions"){let{runTmux:G,KOBE_TMUX_SOCKET:f}=await Promise.resolve().then(() => (w1(),PB)),Q=await G(["kill-server"]);console.log(Q===0?`kobe: killed all tmux sessions on the \`${f}\` socket`:`kobe: no tmux sessions to kill on the \`${f}\` socket`);return}if(Y==="quick-create"){let f=CY(Z).session;if(!f)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:Q}=await Promise.resolve().then(() => (ZJ(),ZY));await Q(f);return}if(Y==="focus-tasks"){let G=CY(Z),f=G.session;if(!f)console.error("kobe focus-tasks: --session <name> is required"),process.exit(2);let{selectTasksPane:Q}=await Promise.resolve().then(() => (ZJ(),ZY));await Q(f,{windowId:G.windowId});return}if(Y==="heal-layout"){let f=CY(Z).session;if(!f)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(() => (tG(),OH));await q(f,"heal",()=>Q(f));return}if(Y==="capture-layout"){let f=CY(Z).session;if(!f)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(() => (tG(),OH));await q(f,"capture",async()=>{if(B(f,"resize")<H)return;await Q(f)});return}if(Y==="layout"){let G=CY(Z),f=G.session;if(!f)console.error("kobe layout: --session <name> is required"),process.exit(2);let Q=G.action;if(!Q||!new Set(["workspace-split","workspace-close","workspace-reset","tasks-toggle","tasks-restore","ops-toggle","terminal-toggle","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(f,Q,{windowId:G.windowId});return}if(Y==="quick-task"){let G=CY(Z),{startQuickTaskHost:f}=await Promise.resolve().then(() => (g4(),R4));await f({session:G.session});return}if(Y==="tasks"){let G=CY(Z),{startTasksPane:f}=await Promise.resolve().then(() => (gU(),RU));await f({initialTaskId:G.initialTaskId});return}if(Y==="settings"){let{startSettingsHost:G}=await Promise.resolve().then(() => (SU(),CU));await G();return}if(Y==="help-page"){let{startHelpHost:G}=await Promise.resolve().then(() => (kU(),yU));await G();return}if(Y==="new-task"){let G=CY(Z),{startNewTaskHost:f}=await Promise.resolve().then(() => (cj(),K4));await f({defaultRepo:G.repo});return}if(Y==="update-page"){let{startUpdateHost:G}=await Promise.resolve().then(() => (NU(),IU));await G();return}if(Y==="ops"){let G=CY(Z);if(!G.worktree)console.error("kobe ops: --worktree <path> is required"),process.exit(2);if(G.preview){let{startOpsPreview:Q}=await Promise.resolve().then(() => (DW(),LW));await Q({worktree:G.worktree,relPath:G.preview});return}let{startOpsHost:f}=await Promise.resolve().then(() => (DW(),LW));await f({taskId:G.taskId??"",worktree:G.worktree,targetPane:G.targetPane??null,vendor:OG(G.vendor)});return}if(Y!==void 0)console.error(`kobe: unknown command '${Y}'`),HL(process.stderr),process.exit(2);let{startTui:X}=await Promise.resolve().then(() => (qL(),QL));await X()}JI().catch((J)=>{console.error("kobe failed to start:",J),process.exit(1)});