@sma1lboy/kobe 0.7.100 → 0.7.101

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.
package/dist/cli/index.js CHANGED
@@ -10,7 +10,7 @@ var eo=Object.create;var{getPrototypeOf:$r,defineProperty:AD,getOwnPropertyNames
10
10
  `)){let[H,U]=W.split("\t");if(!H)continue;if(!q)q=H.trim();if(U?.trim()===J)return H.trim()}return X?q:""}async function fE($){return LL($,yD,!0)}async function Lq($){return LL($,yD,!1)}var Fz="@kobe_role",EE,yD="claude",E$="@kobe_session_id";var jL=r(()=>{Wq();V8();EE=Fz});import{execSync as _r}from"child_process";function Rr(){if(eB!==void 0)return eB;try{let $=Number.parseInt(_r(`ps -o pgid= -p ${process.pid}`).toString().trim(),10);eB=Number.isFinite($)&&$>1?$:null}catch{eB=null}return eB}async function mD($){let{code:J,stdout:X}=await h0(["list-panes",...$,"-F","#{pane_pid}"]);if(J!==0)return;for(let z of X.split(`
11
11
  `)){let Y=Number.parseInt(z.trim(),10);if(!Number.isFinite(Y)||Y<=1)continue;if(Y===Rr())continue;try{process.kill(-Y,"SIGTERM")}catch{}}}async function gE($){await mD(["-s","-t",`=${$}`])}async function NL($){await mD(["-t",$])}async function VL(){await mD(["-a"])}async function h7($){if(!$.startsWith("kobe-hidden-")){let J=sB($);if(await y2(J))await gE(J),await o0(["kill-session","-t",`=${J}`])}if(await y2($))await gE($),await o0(["kill-session","-t",`=${$}`])}var eB;var wE=r(()=>{Wq();V8()});import{fileURLToPath as Ir}from"url";function j4(){if(import.meta.url.endsWith(".js"))return["kobe"];let J=Ir(new URL("./index.ts",import.meta.url));return[process.execPath,"--conditions=browser",J]}function $U(){if(import.meta.url.endsWith(".js"))return["kobe"];if(Bun.which("kobe"))return["kobe"];return j4()}var dJ=()=>{};import{mkdirSync as Pr,readFileSync as Tr,renameSync as bE,writeFileSync as Sr}from"fs";import{dirname as Er}from"path";function c4(){let $=P6(),J;try{J=Tr($,"utf8")}catch{return{}}try{let X=JSON.parse(J);if(X&&typeof X==="object"&&!Array.isArray(X))return X}catch{}try{if(bE($,`${$}.corrupt-${Date.now()}`),!xE)xE=!0,console.error(`[kobe] ${$} is corrupted; backed up and starting fresh.`)}catch{}return{}}function yE($){let J=P6();Pr(Er(J),{recursive:!0});let X=Math.random().toString(36).slice(2),z=`${J}.${process.pid}.${X}.tmp`;Sr(z,JSON.stringify($,null,2),"utf8"),bE(z,J)}function jq($){let J=c4();if($(J)!==!1)yE(J);return J}function g9($){return jq((J)=>{for(let[X,z]of Object.entries($))if(z===void 0)delete J[X];else J[X]=z;return})}function p3($,J){let X=c4()[$];return typeof X==="boolean"?X:J}function OL($,J){g9({[$]:J})}function vE($){yE($)}var xE=!1;var n3=r(()=>{F4()});var NZ={};K2(NZ,{statePath:()=>kr,setRepoInitOverride:()=>fr,setPersistedString:()=>i3,resolveRepoRoot:()=>lJ,resolveMainRepoRoot:()=>JU,removeSavedRepo:()=>lD,remoteRepoKey:()=>cE,normalizeSavedRepos:()=>cD,isRemoteRepoKey:()=>f$,isRemoteProjectsEnabled:()=>pD,isGitRepo:()=>uD,getSavedRepos:()=>K7,getRepoInitOverride:()=>dD,getRemoteRepos:()=>nD,getRemoteRepoConfig:()=>g$,getPersistedString:()=>z8,getCustomEngineIds:()=>Nq,addSavedRepo:()=>k$,addRemoteRepo:()=>iD});import{spawnSync as hD}from"child_process";import{realpathSync as mE}from"fs";function lJ($){if(f$($))return $;let J=hD("git",["rev-parse","--show-toplevel"],{cwd:$,encoding:"utf8",shell:!1});if(J.status!==0)return $;let X=(J.stdout??"").trim();if(!X)return $;try{if(mE($)===mE(X))return $}catch{}return X}function uD($){if(f$($))return!1;let J=hD("git",["rev-parse","--is-inside-work-tree"],{cwd:$,encoding:"utf8",shell:!1});return J.status===0&&(J.stdout??"").trim()==="true"}function JU($){if(f$($))return $;let J=hD("git",["worktree","list","--porcelain"],{cwd:$,encoding:"utf8",shell:!1});if(J.status!==0)return lJ($);return(J.stdout??"").split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim()||lJ($)}function kr(){return P6()}function CL($){let J=$.savedRepos;if(!Array.isArray(J))return[];return J.filter((X)=>typeof X==="string")}function K7(){return CL(c4())}function z8($){let J=c4()[$];return typeof J==="string"?J:void 0}function i3($,J){g9({[$]:J})}function Nq(){let $=c4().customEngineIds;if(!Array.isArray($))return[];return $.filter((J)=>typeof J==="string"&&J.trim().length>0)}function k$($){let J=lJ($),X={added:!1,path:J,total:0};return jq((z)=>{let Y=CL(z);if(Y.includes(J))return X={added:!1,path:J,total:Y.length},!1;z.savedRepos=[...Y,J],X={added:!0,path:J,total:Y.length+1};return}),X}function cD(){let $=K7(),J=new Set,X=[],z=!1;for(let Y of $){let q=lJ(Y);if(q!==Y)z=!0;if(J.has(q)){z=!0;continue}J.add(q),X.push(q)}if(!z)return;g9({savedRepos:X})}function hE($){let J=$.repoConfigs;if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function uE($){if(!$||typeof $!=="object")return{};let J=$;return{initScript:typeof J.initScript==="string"&&J.initScript.length>0?J.initScript:void 0,initPrompt:typeof J.initPrompt==="string"&&J.initPrompt.length>0?J.initPrompt:void 0}}function dD($){return uE(hE(c4())[lJ($)])}function fr($,J){let X=lJ($),z={};return jq((Y)=>{let q={...hE(Y)},W=uE(q[X]),H=J.initScript===void 0?W.initScript:J.initScript||void 0,U=J.initPrompt===void 0?W.initPrompt:J.initPrompt||void 0;if(z={...H?{initScript:H}:{},...U?{initPrompt:U}:{}},!z.initScript&&!z.initPrompt){let{[X]:M,...V}=q;Y.repoConfigs=V}else q[X]=z,Y.repoConfigs=q;return}),z}function lD($){let J={removed:!1,path:$,total:0};return jq((X)=>{let z=CL(X);if(!z.includes($))return J={removed:!1,path:$,total:z.length},!1;if(X.savedRepos=z.filter((Y)=>Y!==$),f$($)){let Y=DL(X);if($ in Y){let q={...Y};delete q[$],X.remoteRepos=q}}J={removed:!0,path:$,total:z.length-1};return}),J}function f$($){return $.startsWith("ssh://")}function pD(){return p3("experimental.remoteProjects",!1)}function cE($,J,X){return X?`ssh://${J}@${$}:${X}`:`ssh://${J}@${$}`}function DL($){let J=$.remoteRepos;if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function g$($){return DL(c4())[$]??null}function nD(){return DL(c4())}function iD($){let J=cE($.host,$.user,$.port),X=!1;return jq((z)=>{let Y={...DL(z)};Y[J]=$,z.remoteRepos=Y;let q=CL(z);if(X=!q.includes(J),X)z.savedRepos=[...q,J];return}),{key:J,added:X}}var I5=r(()=>{F4();n3()});import{spawn as gr,spawnSync as wr}from"child_process";import{existsSync as xr}from"fs";import{mkdir as br,readFile as yr,readdir as vr}from"fs/promises";function hr($){return/^[A-Za-z0-9_@%+=:,./-]+$/.test($)?$:L4($)}function ur($){if(!$)return"";let J=Object.entries($).filter(([X])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(X));if(J.length===0)return"";return`${J.map(([X,z])=>`${X}=${_L(z)}`).join(" ")} `}function AL($,J={}){let X=["ssh"];if(J.tty)X.push("-tt");if(J.batch)X.push("-o","BatchMode=yes");if(X.push("-o","ControlMaster=auto","-o",`ControlPath=${$.controlPath}`,"-o","ControlPersist=300"),X.push("-o","StrictHostKeyChecking=accept-new"),$.port)X.push("-p",String($.port));if($.auth.kind==="key"&&$.auth.keyPath)X.push("-i",$.auth.keyPath);return X.push(`${$.user}@${$.host}`),X}function lE($,J={}){return new Promise((X)=>{let[z,...Y]=$,q="",W="",H=!1,U=(V)=>{if(H)return;H=!0,X({stdout:q,stderr:W,exitCode:V})},M;try{M=gr(z??"",Y,{cwd:J.cwd,env:J.env,shell:!1,signal:J.signal})}catch{U(-1);return}M.stdout?.setEncoding("utf8"),M.stdout?.on("data",(V)=>{q+=V}),M.stderr?.setEncoding("utf8"),M.stderr?.on("data",(V)=>{W+=V}),M.on("error",()=>U(-1)),M.on("close",(V)=>U(V??-1))})}class RL{isRemote=!1;run($,J={}){return lE($,{cwd:J.cwd,env:J.env?{...process.env,...J.env}:process.env,signal:J.signal})}async exists($){return xr($)}async mkdirp($){await br($,{recursive:!0})}async readFile($){try{return await yr($,"utf8")}catch{return null}}async readdir($){try{return await vr($)}catch{return[]}}wrapCommand($){return $}ensureReady(){}}class XU{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor($,J=dE,X){this.spec=$;this.spawn=J;this.spawnAsync=X??(this.spawn===dE?cr:async(z,Y)=>this.spawn(z,Y))}ensureReady(){if(this.masterUp)return;if(this.spawn([...AL(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let J=[...AL(this.spec,{batch:this.spec.auth.kind!=="password"}),"-fN"];if(this.spec.auth.kind==="password"){let X=this.spec.auth.getPassword();if(X!=null){this.spawn(["sshpass","-e",...J],{SSHPASS:X}),this.masterUp=!0;return}}this.spawn(J),this.masterUp=!0}async run($,J={}){this.ensureReady();let X=`${ur(J.env)}${mr($)}`,z=J.cwd?`cd ${_L(J.cwd)} && ${X}`:X,Y=await this.spawnAsync([...AL(this.spec,{batch:!0}),z],void 0,{signal:J.signal});if(Y.exitCode===255)this.masterUp=!1;return Y}async exists($){return(await this.run(["test","-e",$])).exitCode===0}async mkdirp($){await this.run(["mkdir","-p",$])}async readFile($){let J=await this.run(["cat",$]);return J.exitCode===0?J.stdout:null}async readdir($){let J=await this.run(["ls","-1A",$]);if(J.exitCode!==0)return[];return J.stdout.split(`
12
12
  `).filter((X)=>X.length>0)}wrapCommand($,J={}){let X=J.cwd?`cd ${_L(J.cwd)} && ${$}`:$;return`${AL(this.spec,{tty:J.tty}).map(hr).join(" ")} ${_L(X)}`}}var _L,mr,dE=($,J)=>{let[X,...z]=$,Y=wr(X??"",z,{env:J?{...process.env,...J}:process.env,encoding:"utf8",shell:!1});return{stdout:Y.stdout??"",stderr:Y.stderr??"",exitCode:Y.status??-1}},cr=($,J,X)=>lE($,{env:J?{...process.env,...J}:process.env,signal:X?.signal});var aD=r(()=>{Bq();_L=L4,mr=hJ});import{spawnSync as dr}from"child_process";import{platform as lr}from"os";function pE($,J,X){return{service:pr,account:X?`${J}@${$}:${X}`:`${J}@${$}`}}function rD($=oD){return $.platform()==="darwin"}function nE($,J,X=oD){if(X.platform()!=="darwin")return!1;let{exitCode:z}=X.run(["security","add-generic-password","-U","-s",$.service,"-a",$.account,"-w",J]);return z===0}function IL($,J=oD){if(J.platform()!=="darwin")return null;let{stdout:X,exitCode:z}=J.run(["security","find-generic-password","-s",$.service,"-a",$.account,"-w"]);if(z!==0)return null;return X.replace(/\n$/,"")}var oD,pr="kobe-remote-ssh";var sD=r(()=>{oD={run($){let[J,...X]=$,z=dr(J??"",X,{encoding:"utf8",shell:!1});return{stdout:z.stdout??"",exitCode:z.status??-1}},platform(){return lr()}}});import{existsSync as nr}from"fs";function ir($){let J=$.auth,X=J.kind==="key"?{kind:"key",keyPath:J.keyPath}:{kind:"password",getPassword:()=>IL(J.keychainRef)};return{host:$.host,user:$.user,port:$.port,auth:X,controlPath:GL($.host,$.user,$.port)}}function aE($){let J=ir($),X=iE.get(J.controlPath);if(X)return X;let z=new XU(J);return iE.set(J.controlPath,z),z}function Vq($){let J=g$($);if(!J)return new RL;return aE(J)}function w$($){for(let J of Object.values(nD()))if($===J.basePath||$.startsWith(`${J.basePath}/`))return aE(J);return new RL}function PL($){return $&&f$($)?$:void 0}function VZ($){return w$($).isRemote||nr($)}function p5($){return w$($).isRemote?v7():$}var iE;var u7=r(()=>{F4();I5();aD();sD();iE=new Map});function Oq($,J,X){if(!J)return $;let z=Vq(J);return z.ensureReady(),z.wrapCommand($,{tty:!0,cwd:X})}function T4(){let $=[];for(let J of["KOBE_HOME_DIR","KOBE_DAEMON_SOCKET_PATH","KOBE_TMUX_SOCKET"]){let X=process.env[J];if(X&&X.length>0)$.push(`${J}=${k5(X)}`)}return $.length>0?`${$.join(" ")} `:""}var ZU="@kobe_remote";var OZ=r(()=>{u7();V8()});function rE($){let J=[];for(let X of $.split(`
13
- `)){let z=X.trim();if(!z)continue;let[Y,q,W,H,U,M,V]=z.split("\t");if(!Y)continue;let O=Number.parseInt(H??"",10),j=Number.parseInt(U??"",10),R=Number.parseInt(M??"",10),I=Number.parseInt(V??"",10);J.push({paneId:Y.trim(),role:q?.trim()??"",active:W?.trim()==="1",paneWidth:Number.isFinite(O)?O:0,paneHeight:Number.isFinite(j)?j:0,windowWidth:Number.isFinite(R)?R:0,windowHeight:Number.isFinite(I)?I:0})}return J}function sE($){let J=$.find((z)=>z.role===P$);if(!J)return{kind:"missing-engine"};let X=$.filter((z)=>z.role===Kq);if(X.length+1>=UL)return{kind:"maxed"};if(X.length===0)return{kind:"split",targetPane:J.paneId,direction:"-h"};if(X.length===1)return{kind:"split",targetPane:X[0]?.paneId??J.paneId,direction:"-v"};return{kind:"split",targetPane:J.paneId,direction:"-v"}}function QU($){return $.find((J)=>J.role===F3)??$.find((J)=>J.role==="")}function tE($){return 100-(Mz($??Number.NaN)??tB)}var oE="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var zU=r(()=>{V8()});var TL;var eE=r(()=>{TL={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.100",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 --conditions=browser ./src/cli/index.ts","dev:mock":"env KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react":"env KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react-task-dialogs":"env KOBE_DEV=1 bun ./src/tui-react/component/mock-dialogs-host.tsx","dev:mock-react-history":"env KOBE_DEV=1 bun ./src/tui-react/history/mock-host.tsx","dev:mock-react-filetree":"env KOBE_DEV=1 bun ./src/tui-react/panes/filetree/mock-host.tsx","dev:mock-react-sidebar":"env KOBE_DEV=1 bun ./src/tui-react/panes/sidebar/mock-host.tsx","dev:mock-react-terminal":"env KOBE_DEV=1 bun ./src/tui-react/panes/terminal/mock-host.tsx","dev:mock-react-dialogs":"env KOBE_DEV=1 bun ./src/tui-react/mock/dialogs-host.tsx","dev:mock-react-ops":"env KOBE_DEV=1 bun ./src/tui-react/ops/mock-host.tsx","dev:mock-react-settings":"env KOBE_DEV=1 bun ./src/tui-react/settings/mock-host.tsx","dev:mock-react-workspace":"env KOBE_DEV=1 bun ./src/tui-react/workspace/mock-host.tsx","dev:sandbox":"bun run scripts/dev-sandbox.ts run","dev:sandbox:reset":"bun run scripts/dev-sandbox.ts reset","dev:version":"bash ../../scripts/dev-version.sh",build:"bun run scripts/build.ts","build:with-web":"bun run build",compile:"bun run scripts/compile.ts",typecheck:"tsc --noEmit","check-i18n":"bun run scripts/check-i18n.ts",test:"bun run test:fast && bun run test:socket","perf:golden":"bun scripts/perf-golden.ts","test:fast":"vitest run --passWithNoTests --minWorkers=1 --maxWorkers=4","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 --pool forks --minWorkers=1 --maxWorkers=1 --passWithNoTests","test:render":"bun test test/render --coverage --coverage-reporter=text --coverage-reporter=lcov --coverage-dir=coverage-render",coverage:"vitest run --coverage --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.4.3","@opentui/react":"0.4.3","@xterm/headless":"^6.0.0","node-pty":"^1.1.0",react:"^19.2.0",ws:"^8.18.0"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.11","@tsconfig/bun":"1.0.10","@types/bun":"1.3.14","@types/node":"25.6.2","@types/react":"^19.2.0","@vitest/coverage-v8":"2.1.9",knip:"^6.14.2","kobe-web":"workspace:*","react-devtools-core":"^7.0.1",typescript:"5.8.2",vitest:"2.1.9"},trustedDependencies:[]}});var Jk={};K2(Jk,{repoSlug:()=>Lz,releasePageUrl:()=>XA,recommendedGlobalInstallCommand:()=>$A,isNewerSemver:()=>tD,fetchReleaseSummaries:()=>sr,fetchReleaseNotesRange:()=>JA,fetchReleaseNotes:()=>rr,compareSemver:()=>SL,checkLatestVersion:()=>YU,UPDATE_SCRIPT_URL:()=>EL,UPDATE_COMMAND:()=>pJ,PACKAGE_NAME:()=>eD,CURRENT_VERSION:()=>C2});function Lz(){let $=TL.repository?.url;if(!$)return null;let J=$.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!J||!J[1]||!J[2])return null;return`${J[1]}/${J[2]}`}function $A(){return`npm install -g ${eD}@latest`}async function or($){let J=new AbortController,X=setTimeout(()=>J.abort(),kL);try{let z=$.replace("/","%2F"),Y=await fetch(`https://registry.npmjs.org/${z}/latest`,{signal:J.signal,headers:{accept:"application/json"}});if(!Y.ok)return null;let q=await Y.json();if(typeof q.version!=="string")return null;return q.version}catch{return null}finally{clearTimeout(X)}}function tD($,J){return SL($,J)>0}function SL($,J){let X=(q)=>q.split("-")[0]??q,z=X($).split(".").map((q)=>Number.parseInt(q,10)),Y=X(J).split(".").map((q)=>Number.parseInt(q,10));for(let q=0;q<3;q++){let W=z[q]??0,H=Y[q]??0;if(Number.isNaN(W)||Number.isNaN(H))return 0;if(W>H)return 1;if(W<H)return-1}return 0}async function YU($={}){let J=process.env.KOBE_FAKE_UPDATE;if(J)return{current:C2,latest:J,hasUpdate:tD(J,C2)};if(Hq()&&!$.force)return null;let X=await or(eD);if(!X)return null;return{current:C2,latest:X,hasUpdate:tD(X,C2)}}function $k($){if(typeof $!=="string")return null;return $.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function rr($){let J=Lz();if(!J)return null;let X=`v${$}`,z=new AbortController,Y=setTimeout(()=>z.abort(),kL);try{let q=await fetch(`https://api.github.com/repos/${J}/releases/tags/${X}`,{signal:z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!q.ok)return null;let W=await q.json();if(typeof W.body!=="string"||typeof W.html_url!=="string")return null;return{body:W.body,url:W.html_url,version:$}}catch{return null}finally{clearTimeout(Y)}}async function JA($){let J=Lz();if(!J)return[];let X=$.limit??100,z=new AbortController,Y=setTimeout(()=>z.abort(),kL);try{let q=await fetch(`https://api.github.com/repos/${J}/releases?per_page=${X}`,{signal:z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!q.ok)return[];let W=await q.json();if(!Array.isArray(W))return[];return W.map((H)=>{let U=$k(H.tag_name);if(!U||typeof H.html_url!=="string"||typeof H.body!=="string")return null;if(SL(U,$.current)<=0)return null;if(SL(U,$.latest)>0)return null;return{version:U,url:H.html_url,body:H.body}}).filter((H)=>H!==null)}catch{return[]}finally{clearTimeout(Y)}}async function sr($=12){let J=Lz();if(!J)return[];let X=new AbortController,z=setTimeout(()=>X.abort(),kL);try{let Y=await fetch(`https://api.github.com/repos/${J}/releases?per_page=${$}`,{signal:X.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!Y.ok)return[];let q=await Y.json();if(!Array.isArray(q))return[];return q.map((W)=>{let H=$k(W.tag_name);if(!H||typeof W.html_url!=="string")return null;return{version:H,url:W.html_url}}).filter((W)=>W!==null)}catch{return[]}finally{clearTimeout(z)}}function XA($){let J=Lz();if(!J)return null;return`https://github.com/${J}/releases/tag/v${$}`}var C2,eD,EL="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",pJ,kL=3000;var c7=r(()=>{eE();F4();C2=TL.version,eD=TL.name;pJ=`curl -fsSL ${EL} | sh`});async function M7($,J){let X=J?.trim()||`=${$}`,{code:z,stdout:Y}=await h0(["list-panes","-t",X,"-F",oE]);return z===0?rE(Y):null}async function fL($){let{code:J,stdout:X}=await h0(["list-windows","-t",`=${$}`,"-F","#{window_active}\t#{window_id}"]);if(J!==0)return"";for(let z of X.split(`
13
+ `)){let z=X.trim();if(!z)continue;let[Y,q,W,H,U,M,V]=z.split("\t");if(!Y)continue;let O=Number.parseInt(H??"",10),j=Number.parseInt(U??"",10),R=Number.parseInt(M??"",10),I=Number.parseInt(V??"",10);J.push({paneId:Y.trim(),role:q?.trim()??"",active:W?.trim()==="1",paneWidth:Number.isFinite(O)?O:0,paneHeight:Number.isFinite(j)?j:0,windowWidth:Number.isFinite(R)?R:0,windowHeight:Number.isFinite(I)?I:0})}return J}function sE($){let J=$.find((z)=>z.role===P$);if(!J)return{kind:"missing-engine"};let X=$.filter((z)=>z.role===Kq);if(X.length+1>=UL)return{kind:"maxed"};if(X.length===0)return{kind:"split",targetPane:J.paneId,direction:"-h"};if(X.length===1)return{kind:"split",targetPane:X[0]?.paneId??J.paneId,direction:"-v"};return{kind:"split",targetPane:J.paneId,direction:"-v"}}function QU($){return $.find((J)=>J.role===F3)??$.find((J)=>J.role==="")}function tE($){return 100-(Mz($??Number.NaN)??tB)}var oE="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var zU=r(()=>{V8()});var TL;var eE=r(()=>{TL={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.101",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 --conditions=browser ./src/cli/index.ts","dev:mock":"env KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react":"env KOBE_DEV=1 bun ./src/tui-react/mock/host.tsx","dev:mock-react-task-dialogs":"env KOBE_DEV=1 bun ./src/tui-react/component/mock-dialogs-host.tsx","dev:mock-react-history":"env KOBE_DEV=1 bun ./src/tui-react/history/mock-host.tsx","dev:mock-react-filetree":"env KOBE_DEV=1 bun ./src/tui-react/panes/filetree/mock-host.tsx","dev:mock-react-sidebar":"env KOBE_DEV=1 bun ./src/tui-react/panes/sidebar/mock-host.tsx","dev:mock-react-terminal":"env KOBE_DEV=1 bun ./src/tui-react/panes/terminal/mock-host.tsx","dev:mock-react-dialogs":"env KOBE_DEV=1 bun ./src/tui-react/mock/dialogs-host.tsx","dev:mock-react-ops":"env KOBE_DEV=1 bun ./src/tui-react/ops/mock-host.tsx","dev:mock-react-settings":"env KOBE_DEV=1 bun ./src/tui-react/settings/mock-host.tsx","dev:mock-react-workspace":"env KOBE_DEV=1 bun ./src/tui-react/workspace/mock-host.tsx","dev:sandbox":"bun run scripts/dev-sandbox.ts run","dev:sandbox:reset":"bun run scripts/dev-sandbox.ts reset","dev:version":"bash ../../scripts/dev-version.sh",build:"bun run scripts/build.ts","build:with-web":"bun run build",compile:"bun run scripts/compile.ts",typecheck:"tsc --noEmit","check-i18n":"bun run scripts/check-i18n.ts",test:"bun run test:fast && bun run test:socket","perf:golden":"bun scripts/perf-golden.ts","test:fast":"vitest run --passWithNoTests --minWorkers=1 --maxWorkers=4","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 --pool forks --minWorkers=1 --maxWorkers=1 --passWithNoTests","test:render":"bun test test/render --coverage --coverage-reporter=text --coverage-reporter=lcov --coverage-dir=coverage-render",coverage:"vitest run --coverage --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.4.3","@opentui/react":"0.4.3","@xterm/headless":"^6.0.0","node-pty":"^1.1.0",react:"^19.2.0",ws:"^8.18.0"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.11","@tsconfig/bun":"1.0.10","@types/bun":"1.3.14","@types/node":"25.6.2","@types/react":"^19.2.0","@vitest/coverage-v8":"2.1.9",knip:"^6.14.2","kobe-web":"workspace:*","react-devtools-core":"^7.0.1",typescript:"5.8.2",vitest:"2.1.9"},trustedDependencies:[]}});var Jk={};K2(Jk,{repoSlug:()=>Lz,releasePageUrl:()=>XA,recommendedGlobalInstallCommand:()=>$A,isNewerSemver:()=>tD,fetchReleaseSummaries:()=>sr,fetchReleaseNotesRange:()=>JA,fetchReleaseNotes:()=>rr,compareSemver:()=>SL,checkLatestVersion:()=>YU,UPDATE_SCRIPT_URL:()=>EL,UPDATE_COMMAND:()=>pJ,PACKAGE_NAME:()=>eD,CURRENT_VERSION:()=>C2});function Lz(){let $=TL.repository?.url;if(!$)return null;let J=$.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!J||!J[1]||!J[2])return null;return`${J[1]}/${J[2]}`}function $A(){return`npm install -g ${eD}@latest`}async function or($){let J=new AbortController,X=setTimeout(()=>J.abort(),kL);try{let z=$.replace("/","%2F"),Y=await fetch(`https://registry.npmjs.org/${z}/latest`,{signal:J.signal,headers:{accept:"application/json"}});if(!Y.ok)return null;let q=await Y.json();if(typeof q.version!=="string")return null;return q.version}catch{return null}finally{clearTimeout(X)}}function tD($,J){return SL($,J)>0}function SL($,J){let X=(q)=>q.split("-")[0]??q,z=X($).split(".").map((q)=>Number.parseInt(q,10)),Y=X(J).split(".").map((q)=>Number.parseInt(q,10));for(let q=0;q<3;q++){let W=z[q]??0,H=Y[q]??0;if(Number.isNaN(W)||Number.isNaN(H))return 0;if(W>H)return 1;if(W<H)return-1}return 0}async function YU($={}){let J=process.env.KOBE_FAKE_UPDATE;if(J)return{current:C2,latest:J,hasUpdate:tD(J,C2)};if(Hq()&&!$.force)return null;let X=await or(eD);if(!X)return null;return{current:C2,latest:X,hasUpdate:tD(X,C2)}}function $k($){if(typeof $!=="string")return null;return $.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function rr($){let J=Lz();if(!J)return null;let X=`v${$}`,z=new AbortController,Y=setTimeout(()=>z.abort(),kL);try{let q=await fetch(`https://api.github.com/repos/${J}/releases/tags/${X}`,{signal:z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!q.ok)return null;let W=await q.json();if(typeof W.body!=="string"||typeof W.html_url!=="string")return null;return{body:W.body,url:W.html_url,version:$}}catch{return null}finally{clearTimeout(Y)}}async function JA($){let J=Lz();if(!J)return[];let X=$.limit??100,z=new AbortController,Y=setTimeout(()=>z.abort(),kL);try{let q=await fetch(`https://api.github.com/repos/${J}/releases?per_page=${X}`,{signal:z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!q.ok)return[];let W=await q.json();if(!Array.isArray(W))return[];return W.map((H)=>{let U=$k(H.tag_name);if(!U||typeof H.html_url!=="string"||typeof H.body!=="string")return null;if(SL(U,$.current)<=0)return null;if(SL(U,$.latest)>0)return null;return{version:U,url:H.html_url,body:H.body}}).filter((H)=>H!==null)}catch{return[]}finally{clearTimeout(Y)}}async function sr($=12){let J=Lz();if(!J)return[];let X=new AbortController,z=setTimeout(()=>X.abort(),kL);try{let Y=await fetch(`https://api.github.com/repos/${J}/releases?per_page=${$}`,{signal:X.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!Y.ok)return[];let q=await Y.json();if(!Array.isArray(q))return[];return q.map((W)=>{let H=$k(W.tag_name);if(!H||typeof W.html_url!=="string")return null;return{version:H,url:W.html_url}}).filter((W)=>W!==null)}catch{return[]}finally{clearTimeout(z)}}function XA($){let J=Lz();if(!J)return null;return`https://github.com/${J}/releases/tag/v${$}`}var C2,eD,EL="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",pJ,kL=3000;var c7=r(()=>{eE();F4();C2=TL.version,eD=TL.name;pJ=`curl -fsSL ${EL} | sh`});async function M7($,J){let X=J?.trim()||`=${$}`,{code:z,stdout:Y}=await h0(["list-panes","-t",X,"-F",oE]);return z===0?rE(Y):null}async function fL($){let{code:J,stdout:X}=await h0(["list-windows","-t",`=${$}`,"-F","#{window_active}\t#{window_id}"]);if(J!==0)return"";for(let z of X.split(`
14
14
  `)){let[Y,q]=z.split("\t");if(Y?.trim()==="1"&&q?.trim())return q.trim()}return""}async function Zk($,J){return J?.trim()||await fL($)}async function x$($,J){let{code:X,stdout:z}=await h0(["show-options","-wqv","-t",$,J]);return X===0?z.trim():""}async function GU($,J,X){await o0(["set-window-option","-t",$,J,X])}async function w9($,J){await o0(["set-window-option","-u","-t",$,J])}async function gL($){let{code:J,stdout:X}=await h0(["display-message","-p","-t",$,"#{pane_id}"]);return J===0&&X.trim()===$}async function f5($,J){await o0(["display-message","-t",$,J])}async function Cq($){let J=await U7($,["@kobe_worktree","@kobe_task","@kobe_vendor"]);return{cwd:J["@kobe_worktree"]||process.cwd(),taskId:J["@kobe_task"]||void 0,vendor:J["@kobe_vendor"]||void 0}}async function wL($){let{code:J,stdout:X}=await h0(["list-windows","-t",`=${$}`,"-F","#{window_id}"]);if(J!==0)return[];return X.split(`
15
15
  `).map((z)=>z.trim()).filter((z)=>z.length>0)}async function ZA($,J){return!!(await M7($,J))?.some((z)=>z.role===P$)}async function QA($){return(await wL($)).length}async function tr($){let{code:J,stdout:X}=await h0(["list-windows","-t",`=${$}`,"-F","#{window_index}"]);if(J!==0)return new Set;return new Set(X.split(`
16
16
  `).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)))}async function zA($,J){let X=await tr($),z=IE(J);while(X.has(z))z++;return z}async function YA($){let J=sB($);if(await y2(J))return J;return await o0(["new-session","-d","-s",J,"-n","hidden-panes","-c",p5(process.cwd()),"while :; do sleep 3600; done"]),J}async function xL($){let J=sB($);if(!await y2(J))return;let{code:X,stdout:z}=await h0(["list-panes","-s","-t",`=${J}`,"-F","#{@kobe_role}"]);if(X!==0)return;if(!z.split(`
@@ -632,7 +632,7 @@ ${m.join(`
632
632
  `),X=[],z=wi;for(let Y of J){let{chunks:q,endStyle:W}=DX1(Y,z);X.push(q),z=W}return X}var M5,wi,VX1;var gH=r(()=>{JS();M5=Object.freeze({BOLD:1,DIM:2,ITALIC:4,UNDERLINE:8,BLINK:16,INVERSE:32,HIDDEN:64,STRIKETHROUGH:128}),wi=Object.freeze({fg:void 0,bg:void 0,attributes:0});VX1=[[21,22,30],[247,118,142],[158,206,106],[224,175,104],[122,162,247],[187,154,247],[125,207,255],[169,177,214],[65,72,104],[255,137,157],[158,224,68],[250,186,74],[141,176,255],[199,169,255],[164,218,255],[192,202,245]]});function xi($){if($==="")return;let J=$.indexOf(":"),X=Number($.slice(J+1));if($.startsWith("rgb:"))return[X>>16&255,X>>8&255,X&255];if($.startsWith("pal:"))return XQ(X);return}function bi($,J){if(J==="fg"?$.isFgDefault():$.isBgDefault())return"";let z=J==="fg"?$.getFgColorMode():$.getBgColorMode(),Y=J==="fg"?$.getFgColor():$.getBgColor();if(z===RX1||(J==="fg"?$.isFgRGB():$.isBgRGB()))return`rgb:${Y}`;if(z===_X1||(J==="fg"?$.isFgPalette():$.isBgPalette()))return`pal:${Y}`;if(z===AX1)return"";return""}function PX1($){let J=0;if($.isBold())J|=M5.BOLD;if($.isDim())J|=M5.DIM;if($.isItalic())J|=M5.ITALIC;if($.isUnderline())J|=M5.UNDERLINE;if($.isBlink())J|=M5.BLINK;if($.isInverse())J|=M5.INVERSE;if($.isInvisible())J|=M5.HIDDEN;if($.isStrikethrough())J|=M5.STRIKETHROUGH;return{fg:bi($,"fg"),bg:bi($,"bg"),attrs:J}}function TX1($,J){return $.fg===J.fg&&$.bg===J.bg&&$.attrs===J.attrs}function SX1($){let J=xi($.fg),X=xi($.bg);return{...J?{fg:J}:{},...X?{bg:X}:{},...$.attrs!==0?{attributes:$.attrs}:{}}}function EX1($){let J=$.getChars();if(J!==""&&J!==" ")return!0;return!$.isAttributeDefault()||!$.isFgDefault()||!$.isBgDefault()}function yi($,J){if(ZS===void 0){let X=$.getCell(J);if(X)ZS=X;return X}return $.getCell(J,ZS)}function vi($,J=-1){let X=Math.min($.length-1,J);for(let H=0;H<$.length;H++){let U=yi($,H);if(!U||U.getWidth()===0)continue;if(EX1(U))X=Math.max(X,H)}if(X===-1)return[];let z=[],Y=IX1,q="",W=()=>{if(q==="")return;z.push({text:q,...SX1(Y)}),q=""};for(let H=0;H<=X;H++){let U=yi($,H);if(!U||U.getWidth()===0)continue;let M=PX1(U);if(!TX1(Y,M))W(),Y=M;q+=U.getChars()||" "}return W(),z}var AX1=0,_X1=16777216,RX1=50331648,IX1,ZS;var mi=r(()=>{gH();IX1=Object.freeze({fg:"",bg:"",attrs:0})});class dK{taskId;cwd;term;listeners=new Set;exitListeners=new Set;titleListeners=new Set;snapshot=[];cursor=null;snapshotDirty=!1;scrollbackCache=new Map;anchor;anchorId=0;_title=null;_unwatchedSince=Date.now();_killed=!1;muteReplies=!1;cols;rows;refreshQueued=!1;scrollbackRows;constructor($){this.taskId=$.taskId,this.cwd=$.cwd,this.cols=$.cols??kH,this.rows=$.rows??fH,this.scrollbackRows=$.scrollback??Hu(),this.term=new hi.Terminal({allowProposedApi:!0,cols:this.cols,rows:this.rows,scrollback:this.scrollbackRows}),this.term.onData((J)=>{if(this._killed||this.muteReplies)return;try{this.transportWrite(J)}catch{}}),this.term.onTitleChange((J)=>{if(!J||J===this._title)return;this._title=J;for(let X of this.titleListeners)try{X(J)}catch{}})}get killed(){return this._killed}write($){if(this._killed||$.length===0)return;try{this.transportWrite($)}catch{this.markDead(!1)}}onExit($){if(this._killed)return $(),()=>{};return this.exitListeners.add($),()=>{this.exitListeners.delete($)}}onTitleChange($){if(this.titleListeners.add($),this._title)try{$(this._title)}catch{}return()=>{this.titleListeners.delete($)}}paste($){if(this._killed||$.length===0)return;let J=!1;try{J=this.term.modes.bracketedPasteMode===!0}catch{}this.write(J?`\x1B[200~${$}\x1B[201~`:$)}wheel($,J,X){if(this._killed)return!1;try{let z=this.term.modes;if(z.mouseTrackingMode!=="none"){let Y=$==="up"?64:65;return this.write(`\x1B[<${Y};${Math.max(1,J)};${Math.max(1,X)}M`),!0}if(this.term.buffer.active.type==="alternate"){let Y=z.applicationCursorKeysMode===!0?$==="up"?"\x1BOA":"\x1BOB":$==="up"?"\x1B[A":"\x1B[B";return this.write(Y.repeat(3)),!0}}catch{}return!1}onData($){if(this.ensureFreshSnapshot(),this.listeners.add($),this._unwatchedSince=null,this.snapshot.length>0)try{$(this.snapshot,this.cursor)}catch{}return()=>{if(this.listeners.delete($),this.listeners.size===0&&this._unwatchedSince===null)this._unwatchedSince=Date.now()}}unwatchedSinceMs(){return this._unwatchedSince}resize($,J){if(this._killed)return;this.cols=$,this.rows=J;try{this.term.resize($,J),this.invalidateScrollbackCache(),this.transportResize($,J),this.refreshSnapshot()}catch{this.markDead(!1)}}invalidateScrollbackCache(){this.scrollbackCache.clear(),this.anchor?.dispose(),this.anchor=void 0,this.anchorId=0}capture(){return this.ensureFreshSnapshot(),this.snapshot}captureCursor(){return this.ensureFreshSnapshot(),this.cursor}ensureFreshSnapshot(){if(!this.snapshotDirty||this._killed)return;this.refreshSnapshot()}kill(){if(this._killed)return;this.markDead(!0)}feed($){if(this._killed)return;this.term.write($,()=>this.queueRefresh())}feedReplay($){if(this._killed)return;this.muteReplies=!0,this.term.write($,()=>{this.muteReplies=!1,this.queueRefresh()})}queueRefresh(){if(this.listeners.size===0){this.snapshotDirty=!0;return}if(this.refreshQueued)return;this.refreshQueued=!0,setTimeout(()=>{this.refreshQueued=!1,this.refreshSnapshot()},16)}inSynchronizedOutput(){try{return this.term.modes.synchronizedOutputMode===!0}catch{return!1}}cursorHidden(){try{return this.term._core?.coreService?.isCursorHidden===!0}catch{return!1}}refreshSnapshot(){if(this._killed)return;if(this.inSynchronizedOutput()){this.queueRefresh();return}let $=this.term.buffer.active,J=$.type==="alternate";if(!J&&(this.anchor===void 0||this.anchor.isDisposed)){this.scrollbackCache.clear();let U=this.term.registerMarker(0);if(U)this.anchor=U,this.anchorId=U.line}let X=!J&&this.anchor!==void 0&&!this.anchor.isDisposed,z=X?this.anchorId-this.anchor.line:0,Y=this.scrollbackCache,q=[],W=$.baseY+$.cursorY,H=Math.max(0,$.length-(this.rows+this.scrollbackRows));for(let U=H;U<$.length;U++){let M=X&&U<$.baseY;if(M){let R=Y.get(z+U);if(R){q.push(R);continue}}let V=$.getLine(U),O=U===W?$.cursorX-1:-1,j=V?vi(V,O):[];if(q.push(j),M)Y.set(z+U,j)}if(X){let U=z+H;for(let M of Y.keys())if(M<U)Y.delete(M)}if(!J){let U=this.term.registerMarker(0);if(U)this.anchorId=X?z+U.line:0,this.anchor?.dispose(),this.anchor=U}this.snapshot=q,this.snapshotDirty=!1,this.cursor=this.cursorHidden()?null:{x:$.cursorX,y:$.baseY+$.cursorY-H};for(let U of this.listeners)try{U(this.snapshot,this.cursor)}catch{}}markDead($){if(this._killed)return;if(this._killed=!0,$)try{this.transportKill()}catch{}let J=[...this.exitListeners];this.listeners.clear(),this.exitListeners.clear();for(let X of J)try{X()}catch{}}silentDispose(){this._killed=!0,this.listeners.clear(),this.exitListeners.clear(),this.titleListeners.clear()}}var hi;var QS=r(()=>{NP();JQ();mi();hi=W0(gi(),1)});function kX1($){let J=WY.get($.taskId);if(!J)J=new Set,WY.set($.taskId,J);J.add($)}function fX1($){let J=WY.get($.taskId);if(!J)return 0;if(J.delete($),J.size===0)WY.delete($.taskId);return J.size}function gX1($){if(ui.has($))return;ui.add($),$.on("pty.data",(J)=>{let X=J.payload,z=WY.get(X.key);if(z)for(let Y of z)Y.feedFrame(X.data)}),$.on("pty.exit",(J)=>{let X=J.payload,z=WY.get(X.key);if(z)for(let Y of[...z])Y.remoteExited(X.pid)})}function ci(){if(HY)return HY;let $=(async()=>{let J=await jg(),X=new O8(J);return await X.connect(),gX1(X),X.onLifecycle("close",()=>{if(HY===$)HY=null}),X})();return $.catch(()=>{if(HY===$)HY=null}),HY=$,$}function di($,J=n6()){if((process.env.KOBE_TERMINAL_BACKEND??"hosted")!=="hosted")return;ci().then((X)=>X.request("pty.warm",{cwd:$,shell:J})).catch(()=>{})}var HY=null,WY,ui,lK;var gO=r(()=>{aJ();d$();V_();JQ();QS();WY=new Map;ui=new WeakSet;lK=class lK extends dK{client=null;opened=!1;pendingInput=[];pendingResize=null;unsubs=[];deadOnAttach=!1;sessionPid=void 0;pendingExitPid=null;constructor($){super($);this.openRemote($)}static createdFresh($){return $.alive&&($.created??$.replay.length===0)}async openRemote($){try{let J=await ci();if(this.killed)return;this.client=J,kX1(this),this.unsubs.push(J.onLifecycle("close",()=>this.remoteGone()));let X=await J.request("pty.open",{key:this.taskId,cwd:this.cwd,command:$.command,shell:$.shell,cols:this.cols,rows:this.rows});if(this.killed)return;if(this.sessionPid=X.pid??null,X.replay.length>0)this.feedReplay(Buffer.from(X.replay,"base64"));if(this.opened=!0,this.pendingResize){let{cols:Y,rows:q}=this.pendingResize;this.pendingResize=null,this.sendResize(Y,q)}if($.initialInput&&lK.createdFresh(X))this.sendInput($.initialInput);for(let Y of this.pendingInput.splice(0))this.sendInput(Y);let z=this.pendingExitPid;if(this.pendingExitPid=null,!X.alive)this.deadOnAttach=X.replay.length>0,this.remoteGone();else if(z!==null&&z===this.sessionPid)this.remoteGone();else if(X.replay.length>0){if(this.sendResize(this.cols,Math.max(1,this.rows-1)),await this.nextDataOrTimeout(200),!this.killed)this.sendResize(this.cols,this.rows)}}catch(J){S4("pty-hosted",J),this.remoteGone()}}transportWrite($){if(!this.opened){this.pendingInput.push($);return}this.sendInput($)}transportResize($,J){if(!this.opened){this.pendingResize={cols:$,rows:J};return}this.sendResize($,J)}transportKill(){let $=this.client;if($)$.request("pty.kill",{key:this.taskId}).catch(()=>{});this.cleanup()}kill(){if(this.killed){this.client?.request("pty.kill",{key:this.taskId}).catch(()=>{});return}super.kill()}detach(){let $=this.client;this.cleanup();let J=WY.get(this.taskId)?.size??0;if($&&J===0)$.request("pty.detach",{key:this.taskId}).catch(()=>{});this.silentDispose()}sendInput($){this.client?.request("pty.write",{key:this.taskId,data:$}).catch(()=>this.remoteGone())}sendResize($,J){this.client?.request("pty.resize",{key:this.taskId,cols:$,rows:J}).catch(()=>{})}dataWaiter=null;nextDataOrTimeout($){return new Promise((J)=>{let X=setTimeout(()=>{this.dataWaiter=null,J()},$);this.dataWaiter=()=>{this.dataWaiter=null,clearTimeout(X),J()}})}feedFrame($){this.dataWaiter?.(),this.feed(Buffer.from($,"base64"))}remoteExited($){if(this.killed)return;if($===void 0){this.remoteGone();return}if(this.sessionPid===void 0){this.pendingExitPid=$;return}if($!==null&&$===this.sessionPid)this.remoteGone()}remoteGone(){this.cleanup(),this.markDead(!1)}cleanup(){fX1(this);for(let $ of this.unsubs.splice(0))try{$()}catch{}}}});class wO{taskId;cwd;listeners=new Set;buffer="";writes=[];_killed=!1;_title=null;exitListeners=new Set;titleListeners=new Set;pastes=[];deadOnAttach=!1;wheels=[];_cols;_rows;_cursor=null;constructor($){if(this.taskId=$.taskId,this.cwd=$.cwd,this._cols=$.cols??kH,this._rows=$.rows??fH,$.initialInput)this.writes.push($.initialInput)}get killed(){return this._killed}get writeLog(){return this.writes}get geometry(){return{cols:this._cols,rows:this._rows}}feed($){if(this._killed)return;this.buffer+=$;let J=EO($);if(J&&J!==this._title){this._title=J;for(let z of this.titleListeners)try{z(J)}catch{}}let X=this.capture();for(let z of this.listeners)try{z(X,this._cursor)}catch{}}write($){if(this._killed)return;this.writes.push($)}onData($){if(this.listeners.add($),this.buffer!=="")try{$(this.capture(),this._cursor)}catch{}return()=>{this.listeners.delete($)}}resize($,J){if(this._killed)return;this._cols=$,this._rows=J}capture(){return fO(this.buffer)}setCursor($){this._cursor=$}captureCursor(){if(this._killed)return null;return this._cursor}kill(){if(this._killed)return;this._killed=!0,this.listeners.clear();let $=[...this.exitListeners];this.exitListeners.clear();for(let J of $)J()}paste($){if(this._killed)return;this.pastes.push($)}wheel($,J,X){if(this._killed)return!1;return this.wheels.push({direction:$,col:J,row:X}),!1}onExit($){if(this._killed)return $(),()=>{};return this.exitListeners.add($),()=>{this.exitListeners.delete($)}}onTitleChange($){if(this.titleListeners.add($),this._title)try{$(this._title)}catch{}return()=>{this.titleListeners.delete($)}}}var zS=r(()=>{JQ();gH()});import{spawn as wX1}from"child_process";class xO{taskId;cwd;proc;listeners=new Set;buffer="";_killed=!1;_title=null;exitListeners=new Set;titleListeners=new Set;cols;rows;constructor($){this.taskId=$.taskId,this.cwd=$.cwd,this.cols=$.cols??kH,this.rows=$.rows??fH;let J=kO($),X=J[0]??n6(),z=J.slice(1);if(this.proc=wX1(X,z,{cwd:$.cwd,env:SH(process.env,{TERM:process.env.TERM??"xterm-256color",COLUMNS:String(this.cols),LINES:String(this.rows),KOBE_TERMINAL_PIPE:"1"}),stdio:["pipe","pipe","pipe"]}),this.proc.stdout?.setEncoding("utf8"),this.proc.stderr?.setEncoding("utf8"),this.proc.stdout?.on("data",(Y)=>this.append(Y)),this.proc.stderr?.on("data",(Y)=>this.append(Y)),this.proc.stdin?.on("error",()=>this.markDead(!1)),this.proc.on("error",(Y)=>{this.append(`
633
633
  [kobe terminal] failed to start shell: ${Y.message}
634
634
  `),this.markDead(!1)}),this.proc.on("exit",()=>this.markDead(!1)),this.proc.unref?.(),$.initialInput)this.write($.initialInput)}get killed(){return this._killed}write($){if(this._killed||$.length===0)return;let J=this.proc.stdin;if(!J||J.destroyed)return;let X=$.replace(/\r/g,`
635
- `);try{J.write(X)}catch{this.markDead(!1)}}onData($){if(this.listeners.add($),this.buffer!=="")try{$(this.capture(),null)}catch{}return()=>{this.listeners.delete($)}}resize($,J){if(this._killed)return;this.cols=$,this.rows=J}capture(){return fO(this.buffer)}captureCursor(){return null}kill(){if(this._killed)return;this.markDead(!0)}append($){if(this._killed)return;if(this.buffer+=$,this.buffer.length>XS)this.buffer=this.buffer.slice(this.buffer.length-XS);let J=EO($);if(J&&J!==this._title){this._title=J;for(let z of this.titleListeners)try{z(J)}catch{}}let X=this.capture();for(let z of this.listeners)try{z(X,null)}catch{}}markDead($){if(this._killed)return;if(this._killed=!0,$)try{this.proc.kill("SIGTERM")}catch{}let J=[...this.exitListeners];this.listeners.clear(),this.exitListeners.clear();for(let X of J)try{X()}catch{}}paste($){this.write($)}wheel(){return!1}onExit($){if(this._killed)return $(),()=>{};return this.exitListeners.add($),()=>{this.exitListeners.delete($)}}onTitleChange($){if(this.titleListeners.add($),this._title)try{$(this._title)}catch{}return()=>{this.titleListeners.delete($)}}}var YS=r(()=>{AO();JQ();gH()});function pi($){let J=process.env.KOBE_TERMINAL_BACKEND??"hosted";if(J==="mock")return new wO($);if(J==="pipe")return new xO($);if(J==="bun-pty")return new li($);if(J==="hosted")return new lK($);throw Error(`unknown terminal backend: ${J}`)}var li;var ni=r(()=>{AO();gO();zS();YS();JQ();QS();zS();YS();gO();li=class li extends dK{proc;constructor($){super($);if(this.proc=Bun.spawn(kO($),{cwd:$.cwd,env:SH(process.env,{TERM:"xterm-256color",COLUMNS:String(this.cols),LINES:String(this.rows),BASH_SILENCE_DEPRECATION_WARNING:"1",KOBE_TERMINAL_PTY:"1"}),terminal:{cols:this.cols,rows:this.rows,name:"xterm-256color",data:(J,X)=>this.feed(X),exit:()=>this.markDead(!1)}}),this.proc.exited.then(()=>this.markDead(!1),()=>this.markDead(!1)),this.proc.unref?.(),$.initialInput)this.transportWrite($.initialInput)}transportWrite($){this.proc.terminal?.write($)}transportResize($,J){this.proc.terminal?.resize($,J)}transportKill(){try{this.proc.terminal?.close()}catch{}try{this.proc.kill("SIGTERM")}catch{}}}});class ii{map=new Map;factory;constructor($=pi){this.factory=$}parkIdle($,J=Date.now()){let X=[];for(let[z,Y]of this.map){if(Y.killed)continue;if(!Y.detach||!Y.unwatchedSinceMs)continue;let q=Y.unwatchedSinceMs();if(q===null||J-q<$)continue;try{Y.detach()}catch{}this.map.delete(z),X.push(z)}if(X.length>0&&Hq()){let z=Math.round(process.memoryUsage().rss/1048576);console.error(`[kobe pty] parked ${X.length} idle terminal(s); ${this.map.size} live; rss=${z}MB`)}return X}acquire($,J,X={}){let z=this.map.get($);if(z&&!z.killed)return z;if(z)this.map.delete($);let Y=this.factory({taskId:$,cwd:J,...X});return this.map.set($,Y),Y}get($){let J=this.map.get($);if(!J)return null;if(J.killed)return this.map.delete($),null;return J}has($){return this.get($)!==null}release($){let J=this.map.get($);if(this.map.delete($),!J)return;try{J.kill()}catch{}}releaseWhere($){let J=Array.from(this.map.keys()).filter($);for(let X of J)this.release(X)}releaseAll(){let $=Array.from(this.map.keys());for(let J of $)this.release(J)}detachAll(){let $=Array.from(this.map.values());this.map.clear();for(let J of $)try{if(J.detach)J.detach();else J.kill()}catch{}}reset($,J,X={}){return this.release($),this.acquire($,J,X)}get size(){return this.map.size}}function O4(){if(!GS)GS=new ii;return GS}var GS=null;var FX=r(()=>{F4();ni()});function bX1($){let J=iz($)?.description;if(!J)return $;return J.split(":")[0]??J}function ai($){let{theme:J}=J0(),X=j7(),z=y5(cv),[,Y]=bO.useState(0),q=Date.now(),W=z.entries.filter((O)=>q-O.at<NI),H=W[0]?.at;bO.useEffect(()=>{if(H===void 0)return;let O=setTimeout(()=>Y((j)=>j+1),Math.max(30,H+NI-Date.now()));return()=>clearTimeout(O)},[H]);let U=W.length+(z.armed?1:0);if(U===0)return null;let M=Math.max(0,X.height-xX1-U),V=JH().key??"";return E.jsxDEV("box",{position:"absolute",zIndex:2400,left:$.left,top:M,width:$.width,flexDirection:"column",children:[W.map((O)=>E.jsxDEV("box",{paddingLeft:1,paddingRight:1,backgroundColor:J.backgroundPanel,children:E.jsxDEV("text",{fg:O.action?J.textMuted:J.warning,wrapMode:"none",children:tJ(`${O.prefixKey?`${O.prefixKey} + `:""}${O.stroke} ${O.action?`\u2192 ${bX1(O.action)}`:"\u2205"}`,$.width-2)},void 0,!1,void 0,this)},O.id,!1,void 0,this)),z.armed?E.jsxDEV("box",{paddingLeft:1,paddingRight:1,backgroundColor:J.backgroundPanel,children:E.jsxDEV("text",{fg:J.accent,wrapMode:"none",children:`${V} \u22EF`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var bO,xX1=1;var oi=r(async()=>{rJ();oz();DI();bZ();$0();await O2([H8(),W2()]);bO=W0(L0(),1)});function ri($){return $.map((J)=>yX1.test(J)?J:`'${J.replaceAll("'","'\\''")}'`).join(" ")}function qS($,J){return{command:[J],initialInput:`${ri($)}\r`}}var yX1;var HS=r(()=>{yX1=/^[A-Za-z0-9@%+=:,./_-]+$/});function si($){return $.kind==="leaf"?0:1+Math.max(...$.children.map(si))}function ti($){return{root:{kind:"leaf",id:"leaf-1",content:$},activeLeafId:"leaf-1",nextOrdinal:2}}function A7($){return $.kind==="leaf"?[$]:$.children.flatMap(A7)}function WS($,J,X){let z={kind:"leaf",id:`leaf-${$.nextOrdinal}`,content:X},Y=(W)=>{if(W.kind==="leaf"){if(W.id!==$.activeLeafId)return W;return{kind:"group",orientation:J,children:[W,z]}}if(W.orientation===J){let H=W.children.findIndex((U)=>U.kind==="leaf"&&U.id===$.activeLeafId);if(H>=0){let U=[...W.children.slice(0,H+1),z,...W.children.slice(H+1)];return{...W,children:U}}}return{...W,children:W.children.map(Y)}},q=Y($.root);if(si(q)>4)return $;return{root:q,activeLeafId:z.id,nextOrdinal:$.nextOrdinal+1}}function ei($,J){let X=A7($.root);if(X.length<=1)return null;let z=(U)=>{if(U.kind==="leaf")return U.id===J?null:U;let M=U.children.map(z).filter((V)=>V!==null);if(M.length===0)return null;if(M.length===1)return M[0];return{...U,children:M}},Y=z($.root);if(Y===null)return null;if(A7(Y).length===X.length)return $;let q=X.map((U)=>U.id),W=q[Math.max(0,q.indexOf(J)-1)],H=$.activeLeafId===J?W:$.activeLeafId;return{...$,root:Y,activeLeafId:H}}function $a($,J,X){let z=X.trim(),Y=z.length>0?z:null,q=(W)=>W.kind==="leaf"?W.id===J?{...W,title:Y}:W:{...W,children:W.children.map(q)};if(!A7($.root).some((W)=>W.id===J))return $;return{...$,root:q($.root)}}function Ja($,J){let X=A7($.root).map((q)=>q.id);if(X.length<=1)return $;let z=X.indexOf($.activeLeafId),Y=X[(z+J+X.length)%X.length];return{...$,activeLeafId:Y}}function BS($){return!$||A7($.root).some((J)=>J.id==="leaf-1")}function nK($){return $?A7($.root).length>1:!1}function yO($){let J=A7($.root);return J.length===1&&J[0]?.id==="leaf-1"?null:$}function ZQ($,J){return J==="leaf-1"?$:`${$}::${J}`}function US($,J,X,z){let Y=(H)=>{let U=(H??J)[0]??"",M=nZ(U);return M.length>0?M:"?"},q=new Map,W=new Map;for(let H of $){if(H.title){W.set(H.id,H.title);continue}let U=H.content===null?X||z?.get(H.id)||Y(H.content):z?.get(H.id)||pK,M=(q.get(U)??0)+1;q.set(U,M),W.set(H.id,M===1?U:`${U} ${M}`)}return W}function BY($,J,X){if($.title)return $.title;let z=$.splitTree?A7($.splitTree.root):[];if(z.length>1)return M2("terminal.tab.groupTitle",{n:$.ordinal});let Y=z.length===1?z[0]:void 0;if(Y&&Y.id!=="leaf-1")return Y.title??`${X??pK} ${$.ordinal}`;if(X)return`${X} ${$.ordinal}`;if($.autoTitle)return $.autoTitle;return`${$.kind==="engine"?K5($.vendor??J).defaultCommand[0]??pK:pK} ${$.ordinal}`}function KS($,J,X,z){if(!X||!z)return!1;if(K5(X).terminalTitle?.ownsStatus!==!0)return!1;return BY($,J,z)===`${z} ${$.ordinal}`}var pK="shell";var Xa=r(()=>{d7();pz();a9()});function vO(){return{tabs:[{kind:"engine",id:"tab-1",title:null,ordinal:1}],activeId:"tab-1",nextOrdinal:2}}function mO($,J){let X=$.tabs.findIndex((Y)=>Y.id===$.activeId);return{tabs:[...$.tabs.slice(0,X+1),J,...$.tabs.slice(X+1)],activeId:J.id,nextOrdinal:$.nextOrdinal+1}}function MS($,J){let X=$.nextOrdinal;return mO($,{kind:"engine",id:`tab-${X}`,title:null,ordinal:X,vendor:J})}function Za($,J,X){let z=$.nextOrdinal;return mO($,{kind:"command",id:`tab-${z}`,title:X,ordinal:z,command:J})}function FS($){return $.tabs.find((J)=>J.kind==="command"&&J.purpose==="editor")}function Qa($,J,X){let z=FS($);if(!z){let q=$.nextOrdinal;return mO($,{kind:"command",id:`tab-${q}`,title:X,ordinal:q,command:J,purpose:"editor"})}let Y=$.tabs.map((q)=>q.id===z.id?{...z,title:X,command:J,splitTree:null}:q);return{...$,tabs:Y,activeId:z.id}}function vX1($){return $.tabs.find((J)=>J.kind==="content")}function za($,J,X,z){let Y=vX1($);if(!Y){let W=$.nextOrdinal;return mO($,{kind:"content",id:`tab-${W}`,title:X,ordinal:W,relPath:J,base:z})}let q=$.tabs.map((W)=>W.id===Y.id?{...Y,title:X,relPath:J,base:z}:W);return{...$,tabs:q,activeId:Y.id}}function LS($,J){if($.tabs.length<=1)return{state:$,closedId:null};let X=$.tabs.findIndex((q)=>q.id===J);if(X<0)return{state:$,closedId:null};let z=$.tabs.filter((q)=>q.id!==J);if($.activeId!==J)return{state:{...$,tabs:z},closedId:J};let Y=z[Math.max(0,X-1)];return{state:{...$,tabs:z,activeId:(Y??z[0]).id},closedId:J}}function Ya($){return LS($,$.activeId)}function Ga($,J){let X=J.trim(),z=$.tabs.map((Y)=>Y.id===$.activeId?{...Y,title:X.length>0?X:null}:Y);return{...$,tabs:z}}function qa($,J,X){let z=$.tabs.map((Y)=>Y.id===J&&Y.kind==="engine"?{...Y,sessionId:X}:Y);return{...$,tabs:z}}function Ha($,J,X){let z=$.tabs.map((Y)=>Y.id===J?{...Y,autoTitle:X}:Y);return{...$,tabs:z}}function jS($,J,X){let z=$.tabs.map((Y)=>Y.id===J&&Y.kind==="engine"&&!Y.spawned!==!X?{...Y,spawned:X}:Y);return{...$,tabs:z}}function mX1($,J,X){if(!$.sessionId)return J;if($.spawned&&!X)return[...J,"--resume",$.sessionId];return[...J,"--session-id",$.sessionId]}function Wa($,J,X,z){let{live:Y,shell:q,prompt:W}=z,H=$.tabs.find((M)=>M.kind==="engine"),U=!!W&&J.id===H?.id&&!J.spawned&&!Y;return qS(mX1(J,U?[...X,W]:X,Y),q)}function Ba($,J,X){if($.kind==="engine"&&J&&!!$.sessionId&&$.spawned&&!X)return"resume";return"close"}function Ua($,J){let X=$.tabs.map((q)=>q.kind==="command"?{...q,command:J,purpose:void 0}:q);if(X.length===0)return vO();let z=X.some((q)=>q.id===$.activeId)?$.activeId:X[0].id,Y=X.reduce((q,W)=>Math.max(q,W.ordinal),0);return{tabs:X,activeId:z,nextOrdinal:Math.max($.nextOrdinal,Y+1)}}function NS($,J){let X=$.tabs.length;if(X<=1)return $;let z=$.tabs.findIndex((q)=>q.id===$.activeId),Y=$.tabs[(z+J+X)%X];return{...$,activeId:Y.id}}function Ka($,J){if($.activeId===J||!$.tabs.some((X)=>X.id===J))return $;return{...$,activeId:J}}function Ma($,J,X){if(!$.tabs.some((Y)=>Y.id===J))return $;let z=$.tabs.map((Y)=>Y.id===J?{...Y,splitTree:X}:Y);return{...$,tabs:z}}function n7($,J){return`${$}::${J}`}var UY=r(()=>{HS();Xa();HS()});import{TextAttributes as hX1}from"@opentui/core";function uX1($){let J=t2(),{theme:X}=J0(),z=_0(),Y=$.availableVendors.length>0?$.availableVendors:P4,q=$.allowShell?[...Y,"shell"]:Y,[W,H]=Fa.useState(Y.includes($.defaultVendor)?$.defaultVendor:q[0]??"claude");function U(V){$.onSubmit(V),J.clear()}let M=(V)=>H((O)=>{let j=q.indexOf(O);return q[(j+V+q.length)%q.length]??O});return $2(()=>({bindings:[{key:"left",cmd:()=>M(-1)},{key:"right",cmd:()=>M(1)},{key:"return",cmd:()=>U(W)}]})),E.jsxDEV("box",{paddingLeft:2,paddingRight:2,gap:1,children:[E.jsxDEV("box",{flexDirection:"row",justifyContent:"space-between",children:[E.jsxDEV("text",{attributes:hX1.BOLD,fg:X.text,children:$.dialogTitle??z("terminal.tab.chooseEngineTitle")},void 0,!1,void 0,this),E.jsxDEV("text",{fg:X.textMuted,onMouseUp:()=>{$.onCancel(),J.clear()},children:"esc"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),E.jsxDEV(FH,{choices:q,selected:W,onPick:(V)=>U(V)},void 0,!1,void 0,this),E.jsxDEV("box",{paddingBottom:1,children:E.jsxDEV("text",{fg:X.textMuted,children:z("terminal.tab.chooseEngineHint")},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function cX1($,J,X,z={}){return v6($,(Y)=>E.jsxDEV(uX1,{availableVendors:J,defaultVendor:X,dialogTitle:z.dialogTitle,allowShell:z.allowShell,onSubmit:(q)=>Y(q),onCancel:()=>Y(void 0)},void 0,!1,void 0,this))}var Fa,La;var ja=r(async()=>{r4();l2();$0();await O2([W2(),f4(),s4(),pZ()]);Fa=W0(L0(),1);La={show:cX1}});import{RGBA as dX1}from"@opentui/core";function Na($){if(!$)return;return dX1.fromInts($[0],$[1],$[2])}function lX1($){return{__isChunk:!0,text:$.text,...$.fg?{fg:Na($.fg)}:{},...$.bg?{bg:Na($.bg)}:{},...$.attributes!==void 0?{attributes:$.attributes}:{}}}function Va($){let J=[];for(let X=0;X<$.length;X++){if(X>0)J.push({__isChunk:!0,text:`
635
+ `);try{J.write(X)}catch{this.markDead(!1)}}onData($){if(this.listeners.add($),this.buffer!=="")try{$(this.capture(),null)}catch{}return()=>{this.listeners.delete($)}}resize($,J){if(this._killed)return;this.cols=$,this.rows=J}capture(){return fO(this.buffer)}captureCursor(){return null}kill(){if(this._killed)return;this.markDead(!0)}append($){if(this._killed)return;if(this.buffer+=$,this.buffer.length>XS)this.buffer=this.buffer.slice(this.buffer.length-XS);let J=EO($);if(J&&J!==this._title){this._title=J;for(let z of this.titleListeners)try{z(J)}catch{}}let X=this.capture();for(let z of this.listeners)try{z(X,null)}catch{}}markDead($){if(this._killed)return;if(this._killed=!0,$)try{this.proc.kill("SIGTERM")}catch{}let J=[...this.exitListeners];this.listeners.clear(),this.exitListeners.clear();for(let X of J)try{X()}catch{}}paste($){this.write($)}wheel(){return!1}onExit($){if(this._killed)return $(),()=>{};return this.exitListeners.add($),()=>{this.exitListeners.delete($)}}onTitleChange($){if(this.titleListeners.add($),this._title)try{$(this._title)}catch{}return()=>{this.titleListeners.delete($)}}}var YS=r(()=>{AO();JQ();gH()});function pi($){let J=process.env.KOBE_TERMINAL_BACKEND??"hosted";if(J==="mock")return new wO($);if(J==="pipe")return new xO($);if(J==="bun-pty")return new li($);if(J==="hosted")return new lK($);throw Error(`unknown terminal backend: ${J}`)}var li;var ni=r(()=>{AO();gO();zS();YS();JQ();QS();zS();YS();gO();li=class li extends dK{proc;constructor($){super($);if(this.proc=Bun.spawn(kO($),{cwd:$.cwd,env:SH(process.env,{TERM:"xterm-256color",COLUMNS:String(this.cols),LINES:String(this.rows),BASH_SILENCE_DEPRECATION_WARNING:"1",KOBE_TERMINAL_PTY:"1"}),terminal:{cols:this.cols,rows:this.rows,name:"xterm-256color",data:(J,X)=>this.feed(X),exit:()=>this.markDead(!1)}}),this.proc.exited.then(()=>this.markDead(!1),()=>this.markDead(!1)),this.proc.unref?.(),$.initialInput)this.transportWrite($.initialInput)}transportWrite($){this.proc.terminal?.write($)}transportResize($,J){this.proc.terminal?.resize($,J)}transportKill(){try{this.proc.terminal?.close()}catch{}try{this.proc.kill("SIGTERM")}catch{}}}});class ii{map=new Map;factory;constructor($=pi){this.factory=$}parkIdle($,J=Date.now()){let X=[];for(let[z,Y]of this.map){if(Y.killed)continue;if(!Y.detach||!Y.unwatchedSinceMs)continue;let q=Y.unwatchedSinceMs();if(q===null||J-q<$)continue;try{Y.detach()}catch{}this.map.delete(z),X.push(z)}if(X.length>0&&Hq()){let z=Math.round(process.memoryUsage().rss/1048576);console.error(`[kobe pty] parked ${X.length} idle terminal(s); ${this.map.size} live; rss=${z}MB`)}return X}acquire($,J,X={}){let z=this.map.get($);if(z&&!z.killed)return z;if(z)this.map.delete($);let Y=this.factory({taskId:$,cwd:J,...X});return this.map.set($,Y),Y}get($){let J=this.map.get($);if(!J)return null;if(J.killed)return this.map.delete($),null;return J}has($){return this.get($)!==null}release($){let J=this.map.get($);if(this.map.delete($),!J)return;try{J.kill()}catch{}}releaseWhere($){let J=Array.from(this.map.keys()).filter($);for(let X of J)this.release(X)}releaseAll(){let $=Array.from(this.map.keys());for(let J of $)this.release(J)}detachAll(){let $=Array.from(this.map.values());this.map.clear();for(let J of $)try{if(J.detach)J.detach();else J.kill()}catch{}}reset($,J,X={}){return this.release($),this.acquire($,J,X)}get size(){return this.map.size}}function O4(){if(!GS)GS=new ii;return GS}var GS=null;var FX=r(()=>{F4();ni()});function bX1($){let J=iz($)?.description;if(!J)return $;return J.split(":")[0]??J}function ai($){let{theme:J}=J0(),X=j7(),z=y5(cv),[,Y]=bO.useState(0),q=Date.now(),W=z.entries.filter((O)=>q-O.at<NI),H=W[0]?.at;bO.useEffect(()=>{if(H===void 0)return;let O=setTimeout(()=>Y((j)=>j+1),Math.max(30,H+NI-Date.now()));return()=>clearTimeout(O)},[H]);let U=W.length+(z.armed?1:0);if(U===0)return null;let M=Math.max(0,X.height-xX1-U),V=JH().key??"";return E.jsxDEV("box",{position:"absolute",zIndex:2400,left:$.left,top:M,width:$.width,flexDirection:"column",children:[W.map((O)=>E.jsxDEV("box",{paddingLeft:1,paddingRight:1,backgroundColor:J.backgroundPanel,children:E.jsxDEV("text",{fg:J.textMuted,wrapMode:"none",children:tJ(`${O.prefixKey?`${O.prefixKey} + `:""}${O.stroke} ${O.action?`\u2192 ${bX1(O.action)}`:"\u2205"}`,$.width-2)},void 0,!1,void 0,this)},O.id,!1,void 0,this)),z.armed?E.jsxDEV("box",{paddingLeft:1,paddingRight:1,backgroundColor:J.backgroundPanel,children:E.jsxDEV("text",{fg:J.textMuted,wrapMode:"none",children:`${V} \u22EF`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var bO,xX1=1;var oi=r(async()=>{rJ();oz();DI();bZ();$0();await O2([H8(),W2()]);bO=W0(L0(),1)});function ri($){return $.map((J)=>yX1.test(J)?J:`'${J.replaceAll("'","'\\''")}'`).join(" ")}function qS($,J){return{command:[J],initialInput:`${ri($)}\r`}}var yX1;var HS=r(()=>{yX1=/^[A-Za-z0-9@%+=:,./_-]+$/});function si($){return $.kind==="leaf"?0:1+Math.max(...$.children.map(si))}function ti($){return{root:{kind:"leaf",id:"leaf-1",content:$},activeLeafId:"leaf-1",nextOrdinal:2}}function A7($){return $.kind==="leaf"?[$]:$.children.flatMap(A7)}function WS($,J,X){let z={kind:"leaf",id:`leaf-${$.nextOrdinal}`,content:X},Y=(W)=>{if(W.kind==="leaf"){if(W.id!==$.activeLeafId)return W;return{kind:"group",orientation:J,children:[W,z]}}if(W.orientation===J){let H=W.children.findIndex((U)=>U.kind==="leaf"&&U.id===$.activeLeafId);if(H>=0){let U=[...W.children.slice(0,H+1),z,...W.children.slice(H+1)];return{...W,children:U}}}return{...W,children:W.children.map(Y)}},q=Y($.root);if(si(q)>4)return $;return{root:q,activeLeafId:z.id,nextOrdinal:$.nextOrdinal+1}}function ei($,J){let X=A7($.root);if(X.length<=1)return null;let z=(U)=>{if(U.kind==="leaf")return U.id===J?null:U;let M=U.children.map(z).filter((V)=>V!==null);if(M.length===0)return null;if(M.length===1)return M[0];return{...U,children:M}},Y=z($.root);if(Y===null)return null;if(A7(Y).length===X.length)return $;let q=X.map((U)=>U.id),W=q[Math.max(0,q.indexOf(J)-1)],H=$.activeLeafId===J?W:$.activeLeafId;return{...$,root:Y,activeLeafId:H}}function $a($,J,X){let z=X.trim(),Y=z.length>0?z:null,q=(W)=>W.kind==="leaf"?W.id===J?{...W,title:Y}:W:{...W,children:W.children.map(q)};if(!A7($.root).some((W)=>W.id===J))return $;return{...$,root:q($.root)}}function Ja($,J){let X=A7($.root).map((q)=>q.id);if(X.length<=1)return $;let z=X.indexOf($.activeLeafId),Y=X[(z+J+X.length)%X.length];return{...$,activeLeafId:Y}}function BS($){return!$||A7($.root).some((J)=>J.id==="leaf-1")}function nK($){return $?A7($.root).length>1:!1}function yO($){let J=A7($.root);return J.length===1&&J[0]?.id==="leaf-1"?null:$}function ZQ($,J){return J==="leaf-1"?$:`${$}::${J}`}function US($,J,X,z){let Y=(H)=>{let U=(H??J)[0]??"",M=nZ(U);return M.length>0?M:"?"},q=new Map,W=new Map;for(let H of $){if(H.title){W.set(H.id,H.title);continue}let U=H.content===null?X||z?.get(H.id)||Y(H.content):z?.get(H.id)||pK,M=(q.get(U)??0)+1;q.set(U,M),W.set(H.id,M===1?U:`${U} ${M}`)}return W}function BY($,J,X){if($.title)return $.title;let z=$.splitTree?A7($.splitTree.root):[];if(z.length>1)return M2("terminal.tab.groupTitle",{n:$.ordinal});let Y=z.length===1?z[0]:void 0;if(Y&&Y.id!=="leaf-1")return Y.title??`${X??pK} ${$.ordinal}`;if(X)return`${X} ${$.ordinal}`;if($.autoTitle)return $.autoTitle;return`${$.kind==="engine"?K5($.vendor??J).defaultCommand[0]??pK:pK} ${$.ordinal}`}function KS($,J,X,z){if(!X||!z)return!1;if(K5(X).terminalTitle?.ownsStatus!==!0)return!1;return BY($,J,z)===`${z} ${$.ordinal}`}var pK="shell";var Xa=r(()=>{d7();pz();a9()});function vO(){return{tabs:[{kind:"engine",id:"tab-1",title:null,ordinal:1}],activeId:"tab-1",nextOrdinal:2}}function mO($,J){let X=$.tabs.findIndex((Y)=>Y.id===$.activeId);return{tabs:[...$.tabs.slice(0,X+1),J,...$.tabs.slice(X+1)],activeId:J.id,nextOrdinal:$.nextOrdinal+1}}function MS($,J){let X=$.nextOrdinal;return mO($,{kind:"engine",id:`tab-${X}`,title:null,ordinal:X,vendor:J})}function Za($,J,X){let z=$.nextOrdinal;return mO($,{kind:"command",id:`tab-${z}`,title:X,ordinal:z,command:J})}function FS($){return $.tabs.find((J)=>J.kind==="command"&&J.purpose==="editor")}function Qa($,J,X){let z=FS($);if(!z){let q=$.nextOrdinal;return mO($,{kind:"command",id:`tab-${q}`,title:X,ordinal:q,command:J,purpose:"editor"})}let Y=$.tabs.map((q)=>q.id===z.id?{...z,title:X,command:J,splitTree:null}:q);return{...$,tabs:Y,activeId:z.id}}function vX1($){return $.tabs.find((J)=>J.kind==="content")}function za($,J,X,z){let Y=vX1($);if(!Y){let W=$.nextOrdinal;return mO($,{kind:"content",id:`tab-${W}`,title:X,ordinal:W,relPath:J,base:z})}let q=$.tabs.map((W)=>W.id===Y.id?{...Y,title:X,relPath:J,base:z}:W);return{...$,tabs:q,activeId:Y.id}}function LS($,J){if($.tabs.length<=1)return{state:$,closedId:null};let X=$.tabs.findIndex((q)=>q.id===J);if(X<0)return{state:$,closedId:null};let z=$.tabs.filter((q)=>q.id!==J);if($.activeId!==J)return{state:{...$,tabs:z},closedId:J};let Y=z[Math.max(0,X-1)];return{state:{...$,tabs:z,activeId:(Y??z[0]).id},closedId:J}}function Ya($){return LS($,$.activeId)}function Ga($,J){let X=J.trim(),z=$.tabs.map((Y)=>Y.id===$.activeId?{...Y,title:X.length>0?X:null}:Y);return{...$,tabs:z}}function qa($,J,X){let z=$.tabs.map((Y)=>Y.id===J&&Y.kind==="engine"?{...Y,sessionId:X}:Y);return{...$,tabs:z}}function Ha($,J,X){let z=$.tabs.map((Y)=>Y.id===J?{...Y,autoTitle:X}:Y);return{...$,tabs:z}}function jS($,J,X){let z=$.tabs.map((Y)=>Y.id===J&&Y.kind==="engine"&&!Y.spawned!==!X?{...Y,spawned:X}:Y);return{...$,tabs:z}}function mX1($,J,X){if(!$.sessionId)return J;if($.spawned&&!X)return[...J,"--resume",$.sessionId];return[...J,"--session-id",$.sessionId]}function Wa($,J,X,z){let{live:Y,shell:q,prompt:W}=z,H=$.tabs.find((M)=>M.kind==="engine"),U=!!W&&J.id===H?.id&&!J.spawned&&!Y;return qS(mX1(J,U?[...X,W]:X,Y),q)}function Ba($,J,X){if($.kind==="engine"&&J&&!!$.sessionId&&$.spawned&&!X)return"resume";return"close"}function Ua($,J){let X=$.tabs.map((q)=>q.kind==="command"?{...q,command:J,purpose:void 0}:q);if(X.length===0)return vO();let z=X.some((q)=>q.id===$.activeId)?$.activeId:X[0].id,Y=X.reduce((q,W)=>Math.max(q,W.ordinal),0);return{tabs:X,activeId:z,nextOrdinal:Math.max($.nextOrdinal,Y+1)}}function NS($,J){let X=$.tabs.length;if(X<=1)return $;let z=$.tabs.findIndex((q)=>q.id===$.activeId),Y=$.tabs[(z+J+X)%X];return{...$,activeId:Y.id}}function Ka($,J){if($.activeId===J||!$.tabs.some((X)=>X.id===J))return $;return{...$,activeId:J}}function Ma($,J,X){if(!$.tabs.some((Y)=>Y.id===J))return $;let z=$.tabs.map((Y)=>Y.id===J?{...Y,splitTree:X}:Y);return{...$,tabs:z}}function n7($,J){return`${$}::${J}`}var UY=r(()=>{HS();Xa();HS()});import{TextAttributes as hX1}from"@opentui/core";function uX1($){let J=t2(),{theme:X}=J0(),z=_0(),Y=$.availableVendors.length>0?$.availableVendors:P4,q=$.allowShell?[...Y,"shell"]:Y,[W,H]=Fa.useState(Y.includes($.defaultVendor)?$.defaultVendor:q[0]??"claude");function U(V){$.onSubmit(V),J.clear()}let M=(V)=>H((O)=>{let j=q.indexOf(O);return q[(j+V+q.length)%q.length]??O});return $2(()=>({bindings:[{key:"left",cmd:()=>M(-1)},{key:"right",cmd:()=>M(1)},{key:"return",cmd:()=>U(W)}]})),E.jsxDEV("box",{paddingLeft:2,paddingRight:2,gap:1,children:[E.jsxDEV("box",{flexDirection:"row",justifyContent:"space-between",children:[E.jsxDEV("text",{attributes:hX1.BOLD,fg:X.text,children:$.dialogTitle??z("terminal.tab.chooseEngineTitle")},void 0,!1,void 0,this),E.jsxDEV("text",{fg:X.textMuted,onMouseUp:()=>{$.onCancel(),J.clear()},children:"esc"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),E.jsxDEV(FH,{choices:q,selected:W,onPick:(V)=>U(V)},void 0,!1,void 0,this),E.jsxDEV("box",{paddingBottom:1,children:E.jsxDEV("text",{fg:X.textMuted,children:z("terminal.tab.chooseEngineHint")},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function cX1($,J,X,z={}){return v6($,(Y)=>E.jsxDEV(uX1,{availableVendors:J,defaultVendor:X,dialogTitle:z.dialogTitle,allowShell:z.allowShell,onSubmit:(q)=>Y(q),onCancel:()=>Y(void 0)},void 0,!1,void 0,this))}var Fa,La;var ja=r(async()=>{r4();l2();$0();await O2([W2(),f4(),s4(),pZ()]);Fa=W0(L0(),1);La={show:cX1}});import{RGBA as dX1}from"@opentui/core";function Na($){if(!$)return;return dX1.fromInts($[0],$[1],$[2])}function lX1($){return{__isChunk:!0,text:$.text,...$.fg?{fg:Na($.fg)}:{},...$.bg?{bg:Na($.bg)}:{},...$.attributes!==void 0?{attributes:$.attributes}:{}}}function Va($){let J=[];for(let X=0;X<$.length;X++){if(X>0)J.push({__isChunk:!0,text:`
636
636
  `});let z=$[X];if(!z)continue;for(let Y of z)J.push(lX1(Y))}return J}var Oa=()=>{};function Ca($){let J=$.toLowerCase();return J.includes("enoent")||J.includes("not found")}function VS($,J,X=$.attributes??0){return{text:J,...$.fg?{fg:$.fg}:{},...$.bg?{bg:$.bg}:{},...X!==0?{attributes:X}:{}}}function pX1($){let J=0;for(let X of $)J+=nN(X.codePointAt(0))||1;return J}function nX1($,J){let X=[],z=0,Y=!1;for(let q of $){if(Y){X.push(q);continue}let W=Array.from(q.text),H=z,U=-1;for(let M=0;M<W.length;M++){let V=nN(W[M].codePointAt(0))||1;if(J>=H&&J<H+V){U=M;break}H+=V}if(U>=0){let M=W.slice(0,U).join(""),V=W.slice(U+1).join("");if(M)X.push(VS(q,M));if(X.push(VS(q,W[U]||" ",(q.attributes??0)|M5.INVERSE)),V)X.push(VS(q,V));Y=!0}else X.push(q),z+=pX1(W)}if(!Y){if(J>z)X.push({text:" ".repeat(J-z)});X.push({text:" ",attributes:M5.INVERSE})}return X}function Da($,J){if(!J)return $;return $.map((X,z)=>z===J.y?nX1(X,J.x):X)}var Aa=r(()=>{gH()});function _a($){let{anchor:J,head:X}=$;return X.row<J.row||X.row===J.row&&X.col<J.col?{start:X,end:J}:{start:J,end:X}}function Ra($,J,X){let{start:z,end:Y}=_a($);if(J<z.row||J>Y.row)return null;let q=J===z.row?z.col:0,W=J===Y.row?Y.col+1:X;return q<W?[q,W]:null}function iX1($){let J="";for(let X of $)J+=X.text;return J}function Ia($,J){let{start:X,end:z}=_a(J),Y=[];for(let q=Math.max(0,X.row);q<=Math.min($.length-1,z.row);q++){let W=iX1($[q]??[]),H=Ra(J,q,Math.max(W.length,1));if(!H)continue;Y.push(Array.from(W).slice(H[0],H[1]).join("").trimEnd())}return Y.join(`
637
637
  `)}function aX1($,J,X){let z=[],Y=0;for(let q of $){let W=Array.from(q.text),H=Y,U=H+W.length;if(Y=U,U<=J||H>=X){z.push(q);continue}let M=Math.max(J-H,0),V=Math.min(X-H,W.length),O=W.slice(0,M).join(""),j=W.slice(M,V).join(""),R=W.slice(V).join("");if(O)z.push({...q,text:O});if(z.push({...q,text:j,attributes:(q.attributes??0)|M5.INVERSE}),R)z.push({...q,text:R})}if(Y<X)z.push({text:" ".repeat(X-Math.max(Y,J)),attributes:M5.INVERSE});return z}function Pa($,J,X,z){if(!J)return $;return $.map((Y,q)=>{let W=Ra(J,X+q,z);return W?aX1(Y,W[0],W[1]):Y})}var OS=r(()=>{gH()});function Ta($,J,X){let z=Math.max(1,J),Y=Math.max(0,$-Math.max(0,X));return{start:Math.max(0,Y-z),end:Y}}function Sa($,J,X){if(!$||J!==0)return null;if($.y<X.start||$.y>=X.end)return null;return{x:$.x,y:$.y-X.start}}function CS($){let J=$,X=typeof J.sequence==="string"&&J.sequence.length>0?J.sequence:null,z=typeof J.raw==="string"&&Ea.test(J.raw)||X!=null&&Ea.test(X);if(X!=null&&!z)return X;return ka($)}function ka($){let J=$.name;if(!J)return null;if($.shift&&J==="tab")return"\x1B[Z";if($.option||$.meta){let X=ka({...$,option:!1,meta:!1});return X==null?null:`\x1B${X}`}switch(J){case"return":case"enter":return"\r";case"tab":return"\t";case"backspace":return"\x7F";case"delete":return"\x1B[3~";case"up":return"\x1B[A";case"down":return"\x1B[B";case"right":return"\x1B[C";case"left":return"\x1B[D";case"home":return"\x1B[H";case"end":return"\x1B[F";case"escape":return"\x1B";case"space":return $.ctrl?"\x00":" ";default:if(J.length===1){if($.ctrl){let z=J.toLowerCase().charCodeAt(0);if(z>=97&&z<=122)return String.fromCharCode(z-96);let Y=oX1[J];if(Y!=null)return Y;return null}return J}return null}}var Ea,oX1,fa=10,rX1,ga,wa;var xa=r(()=>{rJ();Ea=/^\x1b\[[\d:;]*u$/,oX1={"@":"\x00","[":"\x1B","\\":"\x1C","]":"\x1D","^":"\x1E",_:"\x1F","?":"\x7F"};rX1=[{id:"focus.sidebar"},{id:"chat.tab.new"},{id:"chat.tab.close"},{id:"chat.tab.cycle-next"},{id:"chat.tab.cycle-prev"},{id:"chat.tab.rename"},"ctrl+e","ctrl+f","ctrl+\\","ctrl+=",{id:"workspace.split.focus-next"},{id:"focus.next"},{id:"terminal.reset"},{id:"workspace.zenToggle"},{id:"attention.next"}],ga=[...new Set(rX1.flatMap(($)=>typeof $==="string"?[$]:Ry($.id)))],wa=[..."abcdefghijklmnopqrstuvwxyz".split(""),..."ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""),..."0123456789".split(""),..." `~!@#$%^&*()-_=+[]{}\\|;:'\",.<>/?".split(""),"return","enter","space","tab","backspace","delete","up","down","left","right","home","end","pageup","pagedown","escape","insert","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12"]});function ya($){let J=$.pageSize??fa,X=[];X.push(...k4({"terminal.scroll-up":()=>$.scroll(-J),"terminal.scroll-down":()=>$.scroll(J),"terminal.reset":()=>$.reset()}));let z=new Set(ga),Y=(H)=>{let U=CS(H);if(U!=null)$.write(U)};for(let H of wa)for(let U of["","ctrl+","alt+","shift+","ctrl+shift+","alt+shift+","ctrl+alt+"]){let M=`${U}${H}`;if(z.has(M))continue;X.push({key:M,cmd:Y})}$2(()=>({enabled:$.focused,bindings:X}));let q=b5(),W=J2($);ba.useEffect(()=>{if(!q)return;let H=(M)=>{if(!W.current.focused||M.defaultPrevented||GK())return;let V=CS(M);if(V==null)return;W.current.write(V),M.preventDefault()},U=(M)=>{if(!W.current.focused||M.defaultPrevented||GK())return;let V=new TextDecoder().decode(M.bytes);if(V.length===0)return;W.current.paste(V),M.preventDefault()};return q.keyInput.on("keypress",H),q.keyInput.on("paste",U),()=>{q.keyInput.off("keypress",H),q.keyInput.off("paste",U)}},[q])}var ba;var va=r(async()=>{xa();c9();$6();await O2([H8(),f4()]);ba=W0(L0(),1)});function ma(){let[$,J]=LX.useState(null),[X,z]=LX.useState(4),[Y,q]=LX.useState(null),W=j7(),[H,U]=LX.useState(0),M=LX.useCallback(()=>{U((V)=>V+1&255)},[]);return LX.useEffect(()=>{if(!$)return;if($.width<=0||$.height<=0)return;let V=Math.max(20,$.width),O=Math.max(4,$.height);z(O),q((j)=>j&&j.cols===V&&j.rows===O?j:{cols:V,rows:O})},[$,W,H]),{bodyEl:$,setBodyEl:J,bodyRows:X,bodyGeometry:Y,bumpGeomTick:M,dims:W,geomTick:H}}var LX;var ha=r(async()=>{await H8();LX=W0(L0(),1)});function ua($){let[J,X]=D3.useState(null),[z,Y]=D3.useState(null),[q,W]=D3.useState([]),[H,U]=D3.useState(null),[M,V]=D3.useState(!1),O=J2($.command),j=J2($.initialInput),R=J2($.bodyGeometry),I=J2($.registry),_=J2($.onExit),D=J2($.onFreshPty),b=J2($.cwd),T=J2($.taskId),k=$.bodyGeometry!==null,P=$.cwd,v=$.taskId;D3.useEffect(()=>{if(!P||!v||!k){X(null),W([]),U(null),Y(null);return}let p=R.current;if(!p)return;let s;try{s=I.current.acquire(v,P,{...p,command:O.current,initialInput:j.current})}catch(h){let Q1=C0(h);Y(Q1),X(null),W([]),U(null);return}Y(null),X(s),D.current()},[P,v,k]),D3.useEffect(()=>{let p=J?J.killed:!1;if(V(p),!J)return;if(p){_.current?.({deadOnAttach:J.deadOnAttach===!0});return}let s=J.onExit(()=>{V(!0),_.current?.({deadOnAttach:J.deadOnAttach===!0})}),h=J.onData((Q1,$1)=>{W(Q1),U($1)});try{let Q1=J.capture();if(Q1.length>0)W(Q1);U(J.captureCursor())}catch{}return()=>{s(),h()}},[J]);let d=D3.useCallback((p,s,h)=>{try{let Q1=I.current.reset(s,p,{...h,command:O.current,initialInput:j.current});X(Q1),W([]),U(null),D.current()}catch(Q1){let $1=C0(Q1);Y($1),X(null),W([]),U(null)}},[]),n=D3.useRef(!1);return D3.useEffect(()=>{if($.resetToken,!n.current){n.current=!0;return}let p=b.current,s=T.current,h=R.current;if(p&&s&&h)d(p,s,h)},[$.resetToken,d]),{pty:J,snapshot:q,cursor:H,exited:M,acquireError:z,forceReacquire:d}}var D3;var ca=r(()=>{$6();D3=W0(L0(),1)});function sX1(){if(DS===void 0)DS=JN(process.platform,XN);return DS}function da($,J){let X=sX1();if(X)try{let z=Bun.spawn(["sh","-c",X],{stdin:"pipe",stdout:"ignore",stderr:"ignore"});z.stdin.write($),z.stdin.end()}catch{}try{J($)}catch{}}var DS;var la=r(()=>{UR()});function pa($){let[J,X]=KY.useState(null),[z,Y]=KY.useState(null),q=KY.useRef(!1),W=b5(),H=KY.useMemo(()=>{if(!J||!z)return null;if(J.row===z.row&&J.col===z.col)return null;return{anchor:J,head:z}},[J,z]);return{selection:H,cellFromEvent:(j)=>{let{bodyEl:R,bodyGeometry:I,bodyRows:_,visibleRangeStart:D}=$;if(!R||!I)return null;let b=Math.min(I.cols-1,Math.max(0,(j.x??0)-R.screenX)),T=Math.min(_-1,Math.max(0,(j.y??0)-R.screenY));return{row:D+T,col:b}},beginSelection:(j)=>{q.current=!0,X(j),Y(j)},updateSelectionHead:(j)=>{if(!q.current)return;Y(j)},isDragging:()=>q.current,endDragging:()=>{q.current=!1},clearSelection:()=>{X(null),Y(null)},copySelection:()=>{if(!H)return;let j=Ia($.snapshot,H);if(j.trim().length>0)da(j,(R)=>W?.copyToClipboardOSC52(R))}}}var KY;var na=r(async()=>{la();OS();await H8();KY=W0(L0(),1)});import{StyledText as tX1}from"@opentui/core";function AS($){let{theme:J}=J0(),X=_0(),z=$.registry??O4(),[Y,q]=t8.useState(!1),W=$.focused??Y,[H,U]=t8.useState(0),{bodyEl:M,setBodyEl:V,bodyRows:O,bodyGeometry:j,bumpGeomTick:R,dims:I,geomTick:_}=ma(),{pty:D,snapshot:b,cursor:T,exited:k,acquireError:P,forceReacquire:v}=ua({cwd:$.cwd,taskId:$.taskId,command:$.command,initialInput:$.initialInput,resetToken:$.resetToken,onExit:$.onExit,registry:z,bodyGeometry:j,onFreshPty:()=>U(0)}),d=(m)=>{let l=Math.max(0,b.length-O);U((o)=>Math.min(l,Math.max(0,o-m)))},n=t8.useMemo(()=>Ta(b.length,O,H),[b.length,O,H]),p=t8.useMemo(()=>b.slice(n.start,n.end),[b,n]),s=t8.useMemo(()=>Sa(T,H,n),[T,H,n]),h=pa({bodyEl:M,bodyGeometry:j,bodyRows:O,visibleRangeStart:n.start,snapshot:b}),Q1=t8.useMemo(()=>{let m=Pa(p,h.selection,n.start,j?.cols??80),l=W&&!h.selection?s:null;return Da(m,l)},[p,h.selection,n.start,j,W,s]),$1=t8.useMemo(()=>new tX1(Va(Q1)),[Q1]),[M1,I1]=t8.useState(null);t8.useEffect(()=>{if(M1&&!M1.isDestroyed)M1.content=$1},[M1,$1]);let L1=t2();ya({focused:W,write:(m)=>{if(!D||D.killed)return;D.write(m)},paste:(m)=>{if(!D||D.killed)return;D.paste(m)},scroll:d,reset:()=>{if(!D)return;let{cwd:m,taskId:l}=$,o=j;if(!m||!l||!o)return;V4.show(L1,X("terminal.reset.title"),X("terminal.reset.body"),"cancel").then((F1)=>{if(F1!==!0)return;if($.taskId!==l||$.cwd!==m)return;v(m,l,o)})}});let W1=b5(),x=t8.useRef(null);return t8.useEffect(()=>{if(!D||!j)return;let{cols:m,rows:l}=j,o=x.current;if(o&&o.cols===m&&o.rows===l)return;x.current={cols:m,rows:l};try{D.resize(m,l)}catch{}},[D,j]),t8.useEffect(()=>{if(!W1)return;if(!W)return;if(M&&s&&M.width>0)W1.setCursorPosition(M.screenX+s.x,M.screenY+s.y,!1);else W1.setCursorPosition(0,0,!1)},[W1,W,M,s,I,_]),t8.useEffect(()=>{return()=>{try{W1?.setCursorPosition(0,0,!1)}catch{}}},[W1]),E.jsxDEV("box",{flexDirection:"column",flexGrow:1,overflow:"hidden",backgroundColor:J.background,onMouseDown:(m)=>{if(m.button!==0)return;if(!W)$.onRequestFocus?.();let l=h.cellFromEvent(m);if(!l)return;h.beginSelection(l)},onMouseDrag:(m)=>{let l=h.cellFromEvent(m);if(l)h.updateSelectionHead(l)},onMouseUp:()=>{if(q(!0),!h.isDragging())return;if(h.endDragging(),h.selection)h.copySelection();else h.clearSelection()},onMouseScroll:(m)=>{let l=m.scroll;if(!l||l.direction!=="up"&&l.direction!=="down")return;if(D&&!D.killed&&M){let F1=Math.max(1,m.x-M.screenX+1),Y1=Math.max(1,m.y-M.screenY+1);if(D.wheel(l.direction,F1,Y1))return}let o=Math.max(1,l.delta||1);d(l.direction==="up"?-o:o)},children:[k?E.jsxDEV("box",{flexDirection:"row",flexShrink:0,paddingLeft:1,paddingRight:1,children:E.jsxDEV("text",{fg:J.error,wrapMode:"none",children:X("terminal.exited")},void 0,!1,void 0,this)},void 0,!1,void 0,this):null,H>0?E.jsxDEV("box",{flexDirection:"row",flexShrink:0,paddingLeft:1,paddingRight:1,children:E.jsxDEV("text",{fg:J.warning,wrapMode:"none",children:X("terminal.scrolledBack",{lines:H})},void 0,!1,void 0,this)},void 0,!1,void 0,this):null,E.jsxDEV("box",{ref:(m)=>V(m),onSizeChange:R,flexGrow:1,overflow:"hidden",children:D?E.jsxDEV("text",{fg:J.text,wrapMode:"none",ref:(m)=>I1(m)},void 0,!1,void 0,this):E.jsxDEV("box",{paddingLeft:1,paddingTop:1,flexDirection:"column",gap:0,children:P?E.jsxDEV(E.Fragment,{children:[E.jsxDEV("text",{fg:J.error,wrapMode:"word",children:Ca(P)?X("terminal.unavailable.shellMissing"):X("terminal.unavailable.spawnFailed")},void 0,!1,void 0,this),E.jsxDEV("text",{fg:J.textMuted,wrapMode:"word",children:P},void 0,!1,void 0,this)]},void 0,!0,void 0,this):E.jsxDEV("text",{fg:J.textMuted,children:X("terminal.noTask")},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var t8;var ia=r(async()=>{FX();Oa();Aa();OS();l2();ca();$0();await O2([H8(),W2(),s4(),JY(),va(),ha(),na()]);t8=W0(L0(),1)});function _S($=O4().get.bind(O4())){let J=new Map,X=new Set,z=()=>{for(let Y of X)Y()};return{reconcile(Y){let q=new Set(Y),W=!1;for(let[H,U]of J){if((q.has(H)?$(H):null)===U.pty)continue;U.unsub(),J.delete(H),W=!0}for(let H of q){if(J.has(H))continue;let U=$(H);if(!U)continue;let M={pty:U,unsub:()=>{},title:""};M.unsub=U.onTitleChange((V)=>{let O=bf(V);if(M.title===O)return;M.title=O,z()}),J.set(H,M),W=!0}return W},get(Y){return J.get(Y)?.title},subscribe(Y){return X.add(Y),()=>{X.delete(Y)}},dispose(){for(let Y of J.values())Y.unsub();J.clear(),X.clear()}}}function aa($){let J=e$.useRef(null);if(J.current===null)J.current=_S();let X=J.current,[z,Y]=e$.useState(new Map),q=J2($),W=e$.useCallback(()=>{let H=q.current;X.reconcile(H.values()),Y((U)=>{let M=new Map;for(let[V,O]of H){let j=X.get(O);if(j!==void 0)M.set(V,j)}if(M.size===U.size&&[...M].every(([V,O])=>U.get(V)===O))return U;return M})},[X]);return e$.useEffect(()=>{let H=setInterval(W,eX1);return()=>clearInterval(H)},[W]),e$.useEffect(()=>{W()},[$,W]),e$.useEffect(()=>{let H=!0,U=!1,M=X.subscribe(()=>{if(U)return;U=!0,queueMicrotask(()=>{if(U=!1,H)W()})});return()=>{H=!1,M()}},[X,W]),e$.useEffect(()=>()=>X.dispose(),[X]),z}var e$,eX1=2000;var RS=r(()=>{d7();FX();$6();e$=W0(L0(),1)});import{TextAttributes as oa}from"@opentui/core";function xH($,J){if(!J)return;for(let X of A7(J.root))if(X.id!=="leaf-1")O4().release(ZQ($,X.id))}function sa($){let{theme:J,transparentBackground:X}=J0(),z=X?J.border:J.borderSubtle,Y=_0(),q=l9(),W=$.splitTree??ra,[H,U]=wH.useState(W.activeLeafId);wH.useEffect(()=>{U(($.splitTree??ra).activeLeafId)},[$.splitTree]);let M=()=>({...W,activeLeafId:H}),V=(p)=>{if(p===W)return;$.onSplitChange(yO(p))},O=nK(W),j=WV(q.get(MK))==="box"&&O,R=yO(W)!==null;function I(p){let s=M(),h=ei(s,p);if(h===null)return!1;if(h!==s)V(h),O4().release(ZQ($.tabKey,p));return!0}function _(p){if(I(p))return;xH($.tabKey,W),$.onSplitChange(null),$.onExit?.()}$2(()=>({enabled:$.focused,bindings:k4({"workspace.split.right":()=>V(WS(M(),"row",[n6()])),"workspace.split.down":()=>V(WS(M(),"column",[n6()])),"workspace.split.focus-next":()=>U(Ja(M(),1).activeLeafId)})}));let D=t2();$2(()=>({enabled:$.focused&&O,bindings:k4({"workspace.split.close":()=>I(H),"workspace.split.rename":()=>{let p=H;V7.show(D,P.get(p)??"",{dialogTitle:Y("terminal.split.renameTitle"),fieldLabel:Y("terminal.split.renameField"),submitLabel:Y("terminal.tab.renameSubmit"),allowEmpty:!0}).then((s)=>{if(s===void 0)return;V($a(M(),p,s))})}})}));let b=(p)=>$.focused&&H===p,T=wH.useMemo(()=>{let p=new Map;for(let s of A7(W.root))p.set(s.id,ZQ($.tabKey,s.id));return p},[$.tabKey,W]),k=aa(T),P=US(A7(W.root),$.command,$.engineTitle,k),v=(p,s)=>p?{border:[p],borderColor:s}:{border:!1},d=(p,s)=>{let h=()=>U(p.id),Q1=b(p.id),$1=E.jsxDEV(E.Fragment,{children:[E.jsxDEV(AS,{cwd:$.cwd,taskId:ZQ($.tabKey,p.id),command:p.content??$.command,initialInput:p.content===null?$.initialInput:void 0,onExit:()=>_(p.id),resetToken:p.id==="leaf-1"?$.resetToken:void 0,focused:Q1,onRequestFocus:()=>{$.onRequestFocus?.(),h()}},void 0,!1,void 0,this),O?E.jsxDEV("box",{position:"absolute",right:0,top:0,zIndex:10,backgroundColor:J.backgroundElement,children:E.jsxDEV("text",{fg:Q1?J.focusAccent:J.textMuted,attributes:Q1?oa.BOLD:oa.DIM,wrapMode:"none",children:` ${P.get(p.id)??""} `},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this);if(j)return E.jsxDEV("box",{flexGrow:1,flexShrink:1,flexBasis:0,border:!0,borderColor:Q1?J.focusAccent:z,onMouseUp:h,children:$1},p.id,!1,void 0,this);return s?E.jsxDEV("box",{flexGrow:1,flexShrink:1,flexBasis:0,border:[s],borderColor:Q1?J.focusAccent:z,onMouseUp:h,children:$1},p.id,!1,void 0,this):E.jsxDEV("box",{flexGrow:1,flexShrink:1,flexBasis:0,border:!1,onMouseUp:h,children:$1},p.id,!1,void 0,this)},n=(p,s,h)=>p.kind==="leaf"?d(p,h):E.jsxDEV("box",{flexDirection:p.orientation,flexGrow:1,flexShrink:1,flexBasis:0,...v(j?void 0:h,z),children:p.children.map((Q1,$1)=>n(Q1,Q1.kind==="leaf"?Q1.id:`${s}.${$1}`,$1>0?p.orientation==="row"?"left":"top":void 0))},s,!1,void 0,this);if(R)return E.jsxDEV("box",{flexDirection:"column",flexGrow:1,overflow:"hidden",children:n(W.root,"root")},void 0,!1,void 0,this);return E.jsxDEV(AS,{cwd:$.cwd,taskId:$.tabKey,command:$.command,initialInput:$.initialInput,onExit:$.onExit,resetToken:$.resetToken,focused:$.focused,onRequestFocus:$.onRequestFocus},void 0,!1,void 0,this)}var wH,ra;var IS=r(async()=>{FK();JQ();FX();UY();c9();az();l2();RS();$0();await O2([KH(),W2(),f4(),ia(),s4()]);wH=W0(L0(),1),ra=ti(null)});function ea($,J,X){return{repoLabel:J6($),engines:J,defaultVendor:X,defaultBaseRef:XY($)??N7,engineLabel:x9}}function $o($,J){let X=l7($);if(J.length===0||J.includes(X))return X;return J[0]??X}async function $Z1($,J,X,z){return m$(J,z),k$(J),$.createTask({repo:J,baseRef:X,vendor:z})}async function JZ1($,J,X,z){try{let Y=await $Z1($,J,X.baseRef,X.vendor);return z.selectTask(Y.id),await z.enterTask(Y.id),Y.id}catch(Y){console.error("[kobe workspace] quick-fork task.create failed:",Y),z.notifyError(`Couldn't fork task: ${C0(Y)}`);return}}function Jo($,J){let[X,z]=ta.useState(null);async function Y(W,H){let U=await JZ1($,W,H,J);if(U)z({taskId:U,prompt:xV(H.prompt,H.attachments)})}function q(W){return W&&X?.taskId===W?X.prompt:void 0}return{onQuickFork:(W,H)=>void Y(W,H),initialPromptFor:q}}var ta;var PS=r(()=>{F7();I5();h$();bV();ZX();zH();ta=W0(L0(),1)});import{TextAttributes as Xo}from"@opentui/core";function Zo($){let J=J0(),{theme:X}=J,z=QQ.useRef(new Map),[Y,q]=QQ.useState(new Set),W=QQ.useRef(new Set);return QQ.useEffect(()=>{for(let[H,U]of $.turnStates){let M=z.current.get(H);if(z.current.set(H,U),U!=="done"||M!=="running"||J.reducedMotion)continue;q((O)=>new Set(O).add(H));let V=setTimeout(()=>{W.current.delete(V),q((O)=>{let j=new Set(O);return j.delete(H),j})},ZZ1);W.current.add(V)}for(let H of[...z.current.keys()])if(!$.turnStates.has(H))z.current.delete(H)},[$.turnStates,J.reducedMotion]),QQ.useEffect(()=>{let H=W.current;return()=>{for(let U of H)clearTimeout(U)}},[]),E.jsxDEV("box",{flexDirection:"row",gap:1,flexShrink:0,paddingLeft:1,backgroundColor:X.backgroundElement,children:$.tabs.map((H)=>{let U=$.turnStates.get(H.id)??"idle",M=$.liveTitles.get(H.id),V=KS(H,$.vendor,$.turnVendors.get(H.id),M),O=Y.has(H.id),j=U==="running"?X.focusAccent:U==="done"?X.success:U==="error"?X.error:X.textMuted;return E.jsxDEV("box",{flexDirection:"row",gap:0,onMouseUp:()=>$.onSelect(H.id),children:[!V&&$.turnStates.has(H.id)?E.jsxDEV("text",{fg:j,attributes:O?Xo.BOLD:void 0,wrapMode:"none",children:`${XZ1[U]} `},void 0,!1,void 0,this):null,E.jsxDEV("text",{fg:O?X.success:H.id===$.activeId?X.focusAccent:X.textMuted,attributes:O||H.id===$.activeId?Xo.BOLD:void 0,wrapMode:"none",children:BY(H,$.vendor,M)},void 0,!1,void 0,this)]},H.id,!0,void 0,this)})},void 0,!1,void 0,this)}var QQ,XZ1,ZZ1=600;var Qo=r(async()=>{UY();$0();await W2();QQ=W0(L0(),1),XZ1={running:"\u25CF",done:"\u2713",error:"!",unknown:"?",idle:"\u25CB"}});function TS($){return`terminalTabs.${$}`}function zo($,J){let X=TS(J);if($.store[X]===void 0)return;$.set(X,void 0)}function Yo($,J){let X=new Set(J),z=0;for(let Y of Object.keys($.store)){if(!Y.startsWith("terminalTabs."))continue;let q=Y.slice(13);if(X.has(q))continue;$.set(Y,void 0),z++}return z}function Go($){let{stateRef:J,propsRef:X,update:z,engineTabSpawnRef:Y}=$;hO.useEffect(()=>{X.current.onEditorTabReady?.((q,W)=>{let H=J.current,U=FS(H);if(U){let M=n7(X.current.taskId,U.id);xH(M,U.splitTree??null),O4().release(M)}if(z(Qa(H,q,W)),U?.id===H.activeId)$.bumpResetToken()})},[]),hO.useEffect(()=>{X.current.onDiffTabReady?.((q,W,H)=>{z(za(J.current,q,W,H))})},[]),hO.useEffect(()=>{X.current.onEngineSendReady?.((q)=>{let W=J.current.tabs.find((O)=>O.id===J.current.activeId),H=W?.kind==="engine"?W:J.current.tabs.find((O)=>O.kind==="engine");if(!H)return;let U=O4(),M=n7(X.current.taskId,H.id),V=U.get(M);if(!V&&H.kind==="engine")try{V=U.acquire(M,X.current.worktree,{...Y.current(H)})}catch{return}if(!V||V.killed)return;V.paste(q),V.write("\r")})},[])}var hO;var qo=r(async()=>{FX();UY();await IS();hO=W0(L0(),1)});function Ho($,J){let[X,z]=iK.useState($);return iK.useEffect(()=>{if(!$)return;let Y=!1;return(async()=>{try{await Promise.all(J.stateRef.current.tabs.map(async(q)=>{if(q.kind!=="engine"||!q.sessionId)return;let W=!1;try{W=(await K5(q.vendor??J.propsRef.current.vendor).history.readHistory(q.sessionId)).length>0}catch{}if(Y)return;J.update(jS(J.stateRef.current,q.id,W))}))}finally{if(!Y)z(!1)}})(),()=>{Y=!0}},[]),X}function Wo($){iK.useEffect(()=>{let J=!1,X=setInterval(()=>{if(J)return;let z=$.stateRef.current.tabs.filter((Y)=>Y.kind==="engine"&&!!Y.sessionId&&(!Y.spawned||!Y.title&&!Y.autoTitle));if(z.length===0)return;J=!0,(async()=>{try{for(let Y of z){if(!Y.sessionId)continue;let q=await DO(Y.vendor??$.propsRef.current.vendor,Y.sessionId);if(!q)continue;let W=jS($.stateRef.current,Y.id,!0);if(!Y.title&&!Y.autoTitle)W=Ha(W,Y.id,q);$.update(W)}}finally{J=!1}})()},QZ1);return()=>clearInterval(X)},[])}var iK,QZ1=5000;var Bo=r(()=>{d7();xK();UY();iK=W0(L0(),1)});function SS($,J){let X=n7($,J.id);if(!J.splitTree)return X;let z=A7(J.splitTree.root);return z.length===1?ZQ(X,z[0].id):null}function Uo($,J,X,z){if(J.kind==="engine"&&BS(J.splitTree))return{vendor:J.vendor??X,key:n7($,J.id)};let Y=SS($,J);if(!Y)return null;let q=pA(z(Y));return q?{vendor:q,key:Y}:null}var Ko=r(()=>{d7();UY()});function Mo($){let[J,X]=A3.useState(new Map),[z,Y]=A3.useState(new Map),[q,W]=A3.useState(new Map),H=A3.useRef(new Map),U=A3.useRef(null);if(U.current===null)U.current=_S();let M=J2($.sharedActivity),V=J2($.onBackgroundDone),O=J2($.state),j=J2($.taskId),R=J2($.worktree),I=J2($.vendor),_=A3.useCallback(()=>{let D=O4(),b=new Set,T=H.current,k=U.current;if(!k)return;let P=j.current,v=O.current,d=new Map;for(let n of v.tabs){let p=SS(P,n);if(p)d.set(p,n.id)}k.reconcile(d.keys()),Y((n)=>{let p=new Map;for(let[s,h]of d){let Q1=k.get(s);if(Q1!==void 0)p.set(h,Q1)}if(p.size===n.size&&[...p].every(([s,h])=>n.get(s)===h))return n;return p});for(let n of v.tabs){let p=Uo(P,n,I.current,(M1)=>k.get(M1));if(!p)continue;let s=T.get(n.id);if(s&&s.vendor===p.vendor&&s.key===p.key){b.add(n.id);continue}if(s)s.dispose(),T.delete(n.id);if(!D.has(p.key))continue;let h=n.id,Q1=K5(p.vendor).createTurnDetector(),$1=aV({worktree:R.current,detector:Q1,usingShared:()=>(M.current??null)!==null,sharedEntry:()=>M.current??null},{sessionAttached:async()=>!0,capturePane:async()=>{let M1=O4().get(p.key);if(!M1)throw Error("pty gone");return M1.capture().map((I1)=>I1.map((L1)=>L1.text).join("")).join(`
638
638
  `)},setTurnState:async(M1)=>{if(X((I1)=>new Map(I1).set(h,M1)),M1==="done"&&O.current.activeId!==h)V.current(h)}});T.set(h,{dispose:$1,vendor:p.vendor,key:p.key}),b.add(h)}for(let[n,p]of T){if(b.has(n))continue;p.dispose(),T.delete(n),X((s)=>{let h=new Map(s);return h.delete(n),h})}W((n)=>{let p=new Map;for(let[s,h]of T)p.set(s,h.vendor);if(p.size===n.size&&[...p].every(([s,h])=>n.get(s)===h))return n;return p})},[]);return A3.useEffect(()=>{let D=!0,b=!1,T=U.current?.subscribe(()=>{if(b)return;b=!0,queueMicrotask(()=>{if(b=!1,D)_()})});return()=>{D=!1,T?.()}},[_]),A3.useEffect(()=>{let D=setInterval(_,zZ1);return()=>clearInterval(D)},[_]),A3.useEffect(()=>{$.taskId,$.worktree,$.vendor,$.state,_()},[$.taskId,$.worktree,$.vendor,$.state,_]),A3.useEffect(()=>{return()=>{for(let D of H.current.values())D.dispose();U.current?.dispose()}},[]),{turnStates:J,liveTitles:z,turnVendors:q}}var A3,zZ1=2000;var Fo=r(()=>{d7();oV();FX();Ko();$6();RS();A3=W0(L0(),1)});function Lo($,J){uO.delete(J),zo($,J)}function jo($){let{theme:J}=J0(),X=t2(),z=yZ(),Y=l9(),q=_0(),W=TS($.taskId),H=J2($),U=(x,m)=>{let l=m?Y8(m,$.modelEffort):$.command,{sessionId:o}=RZ(l,m??$.vendor);return qa(x,x.activeId,o)},M=jX.useRef(!1),V=()=>{let x=uO.get($.taskId);if(x)return x;let m=Y.get(W,null),l=m&&Array.isArray(m.tabs)?Ua(m,[n6()]):null;M.current=l!==null;let o=l??U(vO(),void 0);return uO.set($.taskId,o),o},[O,j]=jX.useState(V),R=J2(O),I=(x)=>{uO.set(H.current.taskId,x),R.current=x,j(x),Y.set(W,x)},_=(x)=>{let m=x.vendor?Y8(x.vendor,$.modelEffort):$.command,l=O4().has(n7($.taskId,x.id));return Wa(R.current,x,m,{live:l,shell:n6(),prompt:H.current.initialPrompt})},D=J2(_),[b,T]=jX.useState(0),k=Ho(M.current,{stateRef:R,propsRef:H,update:I});Go({stateRef:R,propsRef:H,update:I,engineTabSpawnRef:D,bumpResetToken:()=>T((x)=>x+1)}),jX.useEffect(()=>{di($.worktree)},[$.worktree]);let P=O.tabs.find((x)=>x.id===O.activeId)??O.tabs[0];Wo({stateRef:R,propsRef:H,update:I});let{turnStates:v,liveTitles:d,turnVendors:n}=Mo({taskId:$.taskId,worktree:$.worktree,vendor:$.vendor,state:O,sharedActivity:$.sharedActivity,onBackgroundDone:(x)=>{let m=O.tabs.find((l)=>l.id===x);if(m)z.notify({kind:"done",taskId:$.taskId,tabId:x,title:BY(m,$.vendor)})}});jX.useEffect(()=>{z.markRead($.taskId,O.activeId)},[O.activeId]);function p(x){let m=R.current,l=m.tabs.find((Y1)=>Y1.id===x),{state:o,closedId:F1}=LS(m,x);if(F1)xH(n7($.taskId,F1),l?.splitTree??null),O4().release(n7($.taskId,F1));I(o)}let s=()=>P.kind==="command"?{command:P.command}:P.kind==="content"?{command:[]}:_(P),h=jX.useRef(new Set);function Q1(x){if(!R.current.tabs.some((o)=>o.id===P.id))return;if(Ba(P,x?.deadOnAttach===!0,h.current.has(P.id))==="resume"){h.current.add(P.id),O4().release(n7($.taskId,P.id)),T((o)=>o+1);return}if(R.current.tabs.length>1){p(P.id);return}O4().release(n7($.taskId,P.id)),h.current.clear();let l=U(vO(),void 0);if(I(l),l.activeId===P.id)T((o)=>o+1)}let $1=()=>{if(!P)return;V7.show(X,BY(P,$.vendor,d.get(P.id)),{dialogTitle:q("terminal.tab.renameTitle"),fieldLabel:q("terminal.tab.renameField"),submitLabel:q("terminal.tab.renameSubmit"),allowEmpty:!0}).then((x)=>{if(x===void 0)return;I(Ga(O,x))})},M1=()=>{(async()=>{let x=await a3(),m=await La.show(X,x,$.vendor,{allowShell:!0});if(m===void 0)return;if(m==="shell"){I(Za(O,[n6()],null));return}I(U(MS(O,m),m)),$.onChooseEngine?.(m);try{m$(JU($.worktree),m)}catch{}})()},I1=()=>{try{return l7(JU($.worktree))}catch{return $.vendor}},L1=()=>{(async()=>{let x;try{x=JU($.worktree)}catch{return}let m=await a3(),l=$o(x,m),o=m.length>0?m:[l],F1=await vV.show(X,ea(x,o,l));if(F1===void 0)return;$.onQuickFork?.(x,F1)})()};$2(()=>({enabled:$.focused,bindings:k4({"chat.tab.new":()=>{let x=I1();I(U(MS(O,x),x))},"chat.tab.chooseEngine":M1,"chat.tab.cycle-next":()=>I(NS(O,1)),"chat.tab.cycle-prev":()=>I(NS(O,-1)),"chat.fork.new":L1})}));let A1=nK(P.splitTree),W1=s();return $2(()=>({enabled:$.focused&&!A1,bindings:k4({"chat.tab.close":()=>{let x=O.tabs.find((o)=>o.id===O.activeId),{state:m,closedId:l}=Ya(O);if(!l){z.notify({kind:"error",taskId:$.taskId,tabId:O.activeId,title:q("terminal.tab.cannotCloseLast")});return}I(m),xH(n7($.taskId,l),x?.splitTree??null),O4().release(n7($.taskId,l))},"chat.tab.rename":$1})})),E.jsxDEV("box",{flexDirection:"column",flexGrow:1,children:[O.tabs.length>1?E.jsxDEV(Zo,{tabs:O.tabs,activeId:O.activeId,turnStates:v,onSelect:(x)=>I(Ka(O,x)),vendor:$.vendor,liveTitles:d,turnVendors:n},void 0,!1,void 0,this):null,k?E.jsxDEV("box",{flexGrow:1,paddingLeft:1,paddingTop:1,children:E.jsxDEV("text",{fg:J.textMuted,children:q("terminal.restoring")},void 0,!1,void 0,this)},void 0,!1,void 0,this):P.kind==="content"?E.jsxDEV(iV,{worktree:$.worktree,relPath:P.relPath,base:P.base,focused:$.focused,onClose:()=>p(P.id)},void 0,!1,void 0,this):E.jsxDEV(sa,{tabKey:n7($.taskId,P.id),cwd:$.worktree,command:W1.command,initialInput:W1.initialInput,splitTree:P.splitTree??null,onSplitChange:(x)=>I(Ma(O,P.id,x)),onExit:Q1,resetToken:b,focused:$.focused,onRequestFocus:$.onRequestFocus,engineTitle:P.title??P.autoTitle??null},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var jX,uO;var ES=r(async()=>{iJ();F7();I5();h$();gO();JQ();FX();UY();c9();az();rq();l2();$6();PS();Bo();Fo();$0();await O2([ja(),cP(),KH(),W2(),f4(),rP(),s4(),IS(),Qo(),qo()]);jX=W0(L0(),1),uO=new Map});function No($){return!$.dialogOpen&&!$.settingsOpen&&!$.worktreesOpen&&!$.updateOpen}function Vo($){return $.settingsOpen&&!$.dialogOpen}function Oo($){let{focus:J,dialog:X}=$,z=_0(),Y=b5();function q(){try{Y?.destroy()}catch(V){console.error("kobe: renderer.destroy() failed during quit:",V)}process.exit(0)}async function W(){if(await V4.show(X,z("workspace.quit.confirmTitle"),z("workspace.quit.confirmBody"),z("common.cancel"),z("workspace.quit.confirmLabel")))q()}function H(V){let j=(cO.indexOf(J.focused)+V+cO.length)%cO.length;J.setFocused(cO[j])}let U={dialogOpen:$.dialog.stack.length>0,settingsOpen:$.settingsOpen,worktreesOpen:$.worktreesOpen,updateOpen:$.updateOpen},M=No(U);$2(()=>({enabled:M,bindings:[...k4({"help.open":()=>cZ.show(X),"focus.numeric":(V,O)=>{let j=YZ1[O??0];if(j)J.setFocused(j)},"focus.next":()=>H(1),"workspace.zenToggle":()=>$.toggleZen(),"attention.next":()=>$.jumpToNextAttention()})]})),$2(()=>({enabled:M&&J.focused!=="sidebar",bindings:k4({"focus.sidebar":()=>J.setFocused("sidebar")})})),$2(()=>({enabled:M&&J.focused==="sidebar",bindings:k4({"app.quit":(V,O)=>{if(O===1){q();return}W()},"settings.open.sidebar":()=>$.openSettings(),"worktrees.open.sidebar":()=>$.openWorktrees(),"tasks.update":()=>$.openUpdate()})})),$2(()=>({enabled:M&&J.focused==="sidebar"&&!$.searchActive,bindings:k4({"task.new":()=>$.createTask(),"tasks.renameBranch":()=>{let V=$.selectedId;if(V)$.renameBranch(V)},"tasks.cycleEngine":()=>{let V=$.selectedId;if(V)$.cycleVendor(V)},"tasks.focusEngine":()=>J.setFocused("workspace")})})),$2(()=>({enabled:Vo(U),bindings:y6($.closeSettings)}))}var YZ1,cO;var Co=r(async()=>{c9();l2();await O2([H8(),qV(),f4(),JY()]);YZ1=["sidebar","workspace","files","workspace"],cO=["sidebar","workspace","files"]});import{TextAttributes as GZ1}from"@opentui/core";function qZ1($){let J=t2(),{theme:X}=J0(),z=_0(),[Y,q]=bH.useState($.currentBranch),[W,H]=bH.useState(0),U=bH.useMemo(()=>UV($.repo),[$.repo]),M=bH.useMemo(()=>KV(U,Y),[U,Y]),V=QX(M,W);function O(I){if(M.length===0)return;H((_)=>V3(_+I,M.length))}function j(I){let _=I.trim();if(!_)return;$.onSubmit(_),J.clear()}let R=V.items.map((I,_)=>({key:`${V.start+_}:${I}`,body:I,accent:Y.trim()===I}));return $2(()=>({bindings:[{key:"up",cmd:()=>O(-1)},{key:"down",cmd:()=>O(1)}]})),E.jsxDEV("box",{paddingLeft:2,paddingRight:2,gap:1,children:[E.jsxDEV("box",{flexDirection:"row",justifyContent:"space-between",children:[E.jsxDEV("text",{attributes:GZ1.BOLD,fg:X.text,children:z("tasks.reBranch.title")},void 0,!1,void 0,this),E.jsxDEV("text",{fg:X.textMuted,onMouseUp:()=>$.onCancel(),children:"esc"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),E.jsxDEV("box",{gap:0,children:[E.jsxDEV("text",{fg:X.accent,children:z("tasks.reBranch.fieldLabel")},void 0,!1,void 0,this),E.jsxDEV("input",{value:Y,placeholder:$.currentBranch,focused:!0,onInput:(I)=>{q(W8(I)),H(0)},onSubmit:()=>j(MV(Y,M,W))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M.length===0?E.jsxDEV("box",{gap:0,paddingBottom:1,children:E.jsxDEV("text",{fg:X.textMuted,wrapMode:"none",children:U.length===0?z("tasks.reBranch.hintNoBranches"):z("tasks.reBranch.hintNoMatch")},void 0,!1,void 0,this)},void 0,!1,void 0,this):E.jsxDEV(qX,{window:V,cursor:W,rows:R,onPick:(I)=>j(M[I]??Y),paddingBottom:1},void 0,!1,void 0,this),E.jsxDEV("box",{paddingBottom:1,children:E.jsxDEV("text",{fg:X.textMuted,children:z("tasks.reBranch.footer")},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function HZ1($,J){return v6($,(X)=>E.jsxDEV(qZ1,{currentBranch:J.currentBranch,repo:J.repo,onSubmit:(z)=>X(z),onCancel:()=>X(void 0)},void 0,!1,void 0,this))}var bH,Do;var Ao=r(async()=>{i9();ZX();l2();$0();await O2([W2(),f4(),s4(),pZ()]);bH=W0(L0(),1);Do={show:HZ1}});function _o($){let{orchestrator:J,tasks:X,dialog:z,notifyError:Y}=$,q={...PV({orch:J,tasks:X,dialog:z,notifyError:Y,notifyInfo:$.notifyInfo,selectedId:$.selectedId,setSelectedId:$.setSelectedId,logPrefix:"[kobe workspace]",enterTask:$.activateTask}),onTaskDeleted:(()=>{let M=SP({tasks:X,selectedId:$.selectedId,setSelectedId:$.setSelectedId});return(V,O)=>{$.forgetTaskTabs(V),M(V,O)}})()};async function W(M){let V=X().find((O)=>O.id===M);if(!V)return;await J.setPinned(M,!V.pinned).catch((O)=>{Y(`Couldn't pin: ${C0(O)}`)})}async function H(M,V){await J.moveTask(M,V).catch((O)=>{Y(`Couldn't move: ${C0(O)}`)})}async function U(M){let V=X().find((j)=>j.id===M);if(!V||V.kind==="main")return;let O=await Do.show(z,{currentBranch:V.branch,repo:V.repo});if(!O)return;await J.setBranch(M,O).catch((j)=>{Y(`Couldn't rename branch: ${C0(j)}`)})}return{createTask:()=>RN(q),archiveTask:(M)=>NN(q,M),deleteTask:(M)=>VN(q,M),renameTask:(M)=>ON(q,M),renameBranch:U,cycleVendor:(M)=>CN(q,M),togglePin:W,moveTask:H}}var Ro=r(async()=>{sR();$I();await O2([Ao(),EP()])});function Io($){let{theme:J}=J0(),X=_0(),z=y5($.orchestrator.transcriptActivityStore());if(!$.worktree)return E.jsxDEV("box",{flexGrow:1,alignItems:"center",justifyContent:"center",children:E.jsxDEV("text",{fg:J.textMuted,children:X("workspace.empty.selectTask")},void 0,!1,void 0,this)},void 0,!1,void 0,this);let Y=$.worktree;return E.jsxDEV(jo,{taskId:$.task?.id??Y,worktree:Y,command:Y8($.task?.vendor,$.task?.modelEffort),vendor:$.task?.vendor??n5,modelEffort:$.task?.modelEffort,onChooseEngine:$.task?(q)=>{let W=$.task?.id;if(!W)return;$.orchestrator.setVendor(W,q).catch((H)=>console.error("[kobe workspace] task.setVendor failed:",H))}:void 0,focused:$.focused,onRequestFocus:$.onRequestFocus,onEditorTabReady:$.onEditorTabReady,onEngineSendReady:$.onEngineSendReady,onDiffTabReady:$.onDiffTabReady,onQuickFork:$.onQuickFork,initialPrompt:$.initialPrompt,sharedActivity:z?.get(Y)??null},Y,!1,void 0,this)}var Po=r(async()=>{F7();L7();l2();bZ();$0();await O2([W2(),ES()])});function To($){let{tasks:J,engineState:X,selectedId:z,kv:Y,notif:q,selectTask:W,focusWorkspace:H,noTasksMessage:U}=$,M=dO.useRef(null);dO.useEffect(()=>{let O=M.current,j=new Map;for(let[R,I]of X)j.set(R,I.state);if(O&&Y.get(WZ1,!0)!==!1)for(let[R,I]of j){if(R===z)continue;if(O.get(R)===I)continue;let _=yy(I);if(!_)continue;let D=J.find((b)=>b.id===R)?.title??R;q.notify({kind:_,taskId:R,tabId:"",title:D})}M.current=j},[X,z,J,Y,q]);function V(){let O=J.filter((R)=>!R.archived).map((R)=>R.id),j=my(O,X,q.unread,z);if(!j){q.notify({kind:"done",taskId:z??"",tabId:"",title:U});return}W(j),H()}return{jumpToNextAttention:V}}var dO,WZ1="notifications.crossTask.enabled";var So=r(()=>{dO=W0(L0(),1)});async function Eo($,J){if(!$.getTask(J)?.worktreePath)try{await $.ensureWorktree(J)}catch(z){return $.reportError(z),!1}return $.selectTask(J),$.focusWorkspace(),!0}function ko($,J){let X=J?$.find((z)=>z.id===J&&!z.archived):void 0;if(X)return X;return $.find((z)=>!z.archived)??$[0]}function fo($){let{orch:J,tasks:X,activeTaskId:z}=$,[Y,q]=NX.useState(()=>J.activeTaskSignal()()),W=NX.useRef(!1),H=NX.useRef(!1);NX.useEffect(()=>{if(!W.current&&z&&X.some((j)=>j.id===z)){if(W.current=!0,!H.current&&Y!==z){q(z);return}}if(Y&&X.some((j)=>j.id===Y))return;q(ko(X,z)?.id??null)},[X,z,Y]);let U=NX.useRef(new Set);NX.useEffect(()=>{let j=new Set(X.filter((I)=>!I.archived).map((I)=>I.id)),R=O4();for(let I of U.current)if(!j.has(I))R.releaseWhere((_)=>_===I||_.startsWith(`${I}::`));U.current=j},[X]);function M(j){if(H.current=!0,Y===j)return;q(j),J.setActiveTask(j).catch((R)=>console.error("[kobe workspace] setActiveTask failed:",R))}async function V(j){await Eo({getTask:(R)=>X.find((I)=>I.id===R),ensureWorktree:(R)=>J.ensureWorktree(R),selectTask:M,focusWorkspace:$.focusWorkspace,reportError:(R)=>console.error("[kobe workspace] task.ensureWorktree failed:",R)},j)}let O=Y?X.find((j)=>j.id===Y):void 0;return{selectedId:Y,setSelectedId:q,selectedTask:O,selectTask:M,activateTask:V}}var NX;var go=r(()=>{FX();NX=W0(L0(),1)});var xo={};K2(xo,{startWorkspaceHost:()=>MZ1});import{join as BZ1}from"path";function KZ1($){let{theme:J,transparentBackground:X}=J0(),z=X?J.border:J.borderSubtle,Y=t2(),q=l9(),W=Bm(),H=j7(),U=yZ(),M=$.orchestrator;cN(M,U.notify);let V=y5(M.tasksSignal()),O=y5(M.activeTaskSignal()),j=y5(M.engineStateSignal()),R=y5(M.taskJobsSignal()),I=y5(M.worktreeChangesSignal()),[_,D]=_7.useState(null),[b,T]=_7.useState(null),[k,P]=_7.useState(!1),v=Math.max(wo,H.width-sz),d=Math.max(wo,Math.min(UZ1,Math.floor(v/3))),{selectedId:n,setSelectedId:p,selectedTask:s,selectTask:h,activateTask:Q1}=fo({orch:M,tasks:V,activeTaskId:O,focusWorkspace:()=>W.setFocused("workspace")}),$1=s?.worktreePath||null,{sortMode:M1,toggleSortMode:I1,moveMode:L1,setMoveMode:A1,notifyError:W1,notifyInfo:x,onLocalMergeRequest:m}=JV({kv:q,notif:U,tasks:V,selectedId:n,setSelectedId:p}),l=_0(),{jumpToNextAttention:o}=To({tasks:V,engineState:j,selectedId:n,kv:q,notif:U,selectTask:h,focusWorkspace:()=>W.setFocused("workspace"),noTasksMessage:l("workspace.attention.none")}),{createTask:F1,archiveTask:Y1,deleteTask:i,renameTask:Z1,renameBranch:D1,cycleVendor:X1,togglePin:K1,moveTask:E1}=_o({orchestrator:M,tasks:()=>V,dialog:Y,notifyError:W1,notifyInfo:x,selectedId:()=>n,setSelectedId:p,selectedTask:()=>s,activateTask:Q1,forgetTaskTabs:(c0)=>Lo(q,c0)}),a1=_7.useRef(!1);_7.useEffect(()=>{if(a1.current||V.length===0)return;a1.current=!0,Yo(q,V.map((c0)=>c0.id))},[V,q]);let D0=_7.useRef(null),R1=_7.useRef(null),l1=_7.useRef(null);async function Y0(){let c0=$1;if(!c0||!R1.current)return;let w4=await sV(c0);R1.current(w4)}let g0=Jo(M,{selectTask:p,enterTask:Q1,notifyError:W1}),[B1,h1]=_7.useState(!1);function r1(){let c0=!B1;if(h1(c0),c0)W.setFocused("workspace")}_7.useEffect(()=>{if(W.focused==="files")h1(!1)},[W.focused]);async function w0(c0){let w4=$1;if(!w4)return;let z4=BZ1(w4,c0),m8=D0.current?await sP(w4,z4):null;if(!m8){tV(z4);return}D0.current?.(["sh","-c",m8.command],m8.label),W.setFocused("workspace")}function n1(c0,w4){let z4=nZ(c0);l1.current?.(c0,z4,w4)}let[u0,T2]=_7.useState(!1);function a5(){T2(!0)}function F5(){T2(!1)}let[z6,_3]=_7.useState(!1),[$9,R3]=_7.useState(!1);Oo({focus:W,dialog:Y,settingsOpen:u0,worktreesOpen:z6,openWorktrees:()=>_3(!0),updateOpen:$9,openUpdate:()=>R3(!0),searchActive:k,selectedId:n,openSettings:a5,closeSettings:F5,createTask:()=>void F1(),renameBranch:(c0)=>void D1(c0),cycleVendor:(c0)=>void X1(c0),toggleZen:r1,jumpToNextAttention:o});let c2=Y.stack.length>0?null:W.focused;if(z6)return E.jsxDEV(uV,{orchestrator:M,onClose:()=>_3(!1)},void 0,!1,void 0,this);if($9)return E.jsxDEV(hV,{onClose:()=>R3(!1)},void 0,!1,void 0,this);if(u0)return E.jsxDEV("scrollbox",{flexGrow:1,backgroundColor:J.background,paddingTop:1,verticalScrollbarOptions:{trackOptions:{foregroundColor:"transparent"}},children:E.jsxDEV(GX,{kv:q,orchestrator:M,standalone:!0,onClose:F5},void 0,!1,void 0,this)},void 0,!1,void 0,this);return E.jsxDEV("box",{flexDirection:"row",flexGrow:1,backgroundColor:J.background,children:[E.jsxDEV("box",{width:sz,flexShrink:0,backgroundColor:J.backgroundPanel,borderColor:W.focused==="sidebar"?J.focusAccent:z,onMouseUp:()=>W.setFocused("sidebar"),children:E.jsxDEV($V,{width:sz-2,tasks:V,selectedId:n,onSelect:h,onActivate:(c0)=>void Q1(c0),engineState:j,taskJobs:R,worktreeChanges:I,focused:c2==="sidebar",onHoverChange:(c0)=>D(c0),onAddTask:()=>void F1(),onDeleteRequest:(c0)=>void i(c0),onArchiveRequest:(c0)=>void Y1(c0),onRenameRequest:(c0)=>void Z1(c0),onPinRequest:(c0)=>void K1(c0),moveMode:L1,onMoveRequest:(c0,w4)=>void E1(c0,w4),onMoveModeExit:()=>A1(!1),onLocalMergeRequest:m,sortMode:M1,onSortModeToggle:I1,projectFilter:b,onProjectFilterChange:T,onSearchActiveChange:P,zenActive:B1,onZenClick:r1},void 0,!1,void 0,this)},void 0,!1,void 0,this),E.jsxDEV("box",{flexGrow:1,flexShrink:1,borderColor:W.focused==="workspace"?J.focusAccent:z,onMouseUp:()=>W.setFocused("workspace"),children:E.jsxDEV(Io,{task:s,worktree:$1,orchestrator:M,focused:c2==="workspace",onRequestFocus:()=>W.setFocused("workspace"),onEditorTabReady:(c0)=>{D0.current=c0},onEngineSendReady:(c0)=>{R1.current=c0},onDiffTabReady:(c0)=>{l1.current=c0},onQuickFork:g0.onQuickFork,initialPrompt:g0.initialPromptFor(s?.id)},void 0,!1,void 0,this)},void 0,!1,void 0,this),!B1?E.jsxDEV("box",{width:d,flexShrink:0,borderColor:W.focused==="files"?J.focusAccent:z,onMouseUp:()=>W.setFocused("files"),children:E.jsxDEV(eV,{worktreePath:$1,prBaseRef:s?.prStatus?.baseRef,focused:c2==="files",onOpenFile:(c0)=>void w0(c0),onOpenDiff:n1,onZenToggle:r1,onCreatePR:()=>void Y0()},void 0,!1,void 0,this)},void 0,!1,void 0,this):null,E.jsxDEV(oN,{hover:_,dims:H},void 0,!1,void 0,this),E.jsxDEV(TV,{},void 0,!1,void 0,this),E.jsxDEV(ai,{left:1,width:sz-2},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}async function MZ1(){await d4({logContext:"workspace",providers:{kv:!0,focus:!0,notifications:!0},setup:async()=>{let $=await n$(),J=new sJ($,{role:"gui"});return await J.init(),process.env.KOBE_DAEMON_SOCKET_PATH=$.socketPath,{root:()=>E.jsxDEV(KZ1,{orchestrator:J},void 0,!1,void 0,this),onDestroy:()=>{J.dispose(),O4().detachAll()}}}})}var _7,wo=22,UZ1=34;var bo=r(async()=>{p7();zK();tP();a9();eP();XT();HK();FX();az();rq();l2();bZ();EI();pI();PS();So();go();$0();await O2([H8(),oi(),DV(),yP(),aP(),TI(),W2(),m6(),HT(),dI(),mI(),s4(),dP(),ES(),Co(),Ro(),Po()]);_7=W0(L0(),1)});var mo={};K2(mo,{startDirectTmux:()=>jZ1,chooseInitialTask:()=>vo});import{resolve as FZ1}from"path";function vo($,J={}){let X=(W)=>W?$.find((H)=>H.id===W):void 0,z=X(J.activeTaskId);if(z)return z;let Y=X(J.persistedTaskId);if(Y)return Y;if(J.cwdRepo){let W=$.find((H)=>H.kind==="main"&&H.repo===J.cwdRepo);if(W)return W}let q=$.filter((W)=>!W.archived);return q.find((W)=>W.pinned)??q[0]??$[0]}async function yo($){if($.length===0)return null;try{return await Bun.spawn($,{stdin:"inherit",stdout:"inherit",stderr:"inherit",env:process.env}).exited}catch{return null}}async function LZ1($){cD();let J=[...K7()];if(J.length===0){let X=FZ1(process.cwd());if(uD(X))J=[k$(X).path];else console.error("kobe: current directory is not a git repository \u2014 cd into one, or run `kobe add <path>`")}return await Promise.all(J.map((X)=>$.ensureMainTask(X).catch((z)=>{console.error(`[kobe] ensureMainTask failed for ${X}:`,z)}))),J[0]??""}async function jZ1(){if(wj("gui"),Promise.resolve().then(() => (sT(),rT)).then((X)=>X.ensureGlobalKobeHooks()),!await d3()){let X=process.platform==="darwin"?"brew install tmux":"sudo apt install tmux";console.error(`kobe: tmux not found on PATH \u2014 install it first: ${X}`),process.exitCode=1;return}let $=await n$(),J=new sJ($,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=$.socketPath,await J.init();let X=await LZ1(J),z=vo(J.listTasks(),{activeTaskId:J.activeTaskSignal()(),persistedTaskId:z8("lastSelectedTaskId"),cwdRepo:X});if(!z){let O=await aU();if(await _z(),await dL(O),await qN(O),await yo(Hz(O))===null)console.error("kobe: failed to attach to the kobe-home session"),process.exitCode=1;return}let Y=z.worktreePath||await J.ensureWorktree(z.id),q=U5(z.id);await J.setActiveTask(z.id).catch(()=>{}),i3("lastSelectedTaskId",z.id);let W=z.vendor;if(z.kind==="main"){let j=await GN(q)??l7(z.repo);if(j!==z.vendor)await J.setVendor(z.id,j).catch(()=>{}),W=j}let H=HH(z.repo,Y,{kind:"repo-init"});if(!await uq({name:q,cwd:Y,command:Y8(W),taskId:z.id,vendor:W,repo:z.repo,launchInit:H})){console.error(`kobe: tmux session ${q} failed to start (check the daemon log)`),process.exitCode=1;return}await _z(),await dL(q),await qN(q);let M=await yo(Hz(q));if(M===null){console.error(`kobe: failed to attach to tmux session ${q}`),process.exitCode=1;return}if(M!==0&&!await y2(q)){console.error(`kobe: tmux session ${q} ended unexpectedly (attach exited ${M})`),process.exitCode=M;return}let V=J.getTask(z.id);if(V&&V.title===o9&&V.worktreePath)try{let O=await PH(V.worktreePath,V.vendor);if(O)await J.setTitle(V.id,O)}catch(O){console.error("[kobe] auto-title failed:",O)}}finally{J.dispose()}}var ho=r(()=>{d$();p7();zK();F7();xK();EK();WH();I5();h$();Q5();Pj();qU();q8()});var uo={};K2(uo,{startTui:()=>NZ1});async function NZ1(){if(Pi(),sn(),FE()){let{startWorkspaceHost:J}=await bo().then(() => xo);await J();return}let{startDirectTmux:$}=await Promise.resolve().then(() => (ho(),mo));await $()}var co=r(()=>{F4();IO()});_D();rB();r4();import{resolve as fS}from"path";r4();function Z6($){let J={};for(let X=0;X<$.length;X++){let z=$[X],Y=$[X+1];if(Y===void 0)continue;if(z==="--task-id")J.taskId=Y,X++;else if(z==="--worktree")J.worktree=Y,X++;else if(z==="--target-pane")J.targetPane=Y,X++;else if(z==="--vendor")J.vendor=Y,X++;else if(z==="--preview")J.preview=Y,X++;else if(z==="--session")J.session=Y,X++;else if(z==="--repo")J.repo=Y,X++;else if(z==="--initial-task-id")J.initialTaskId=Y,X++;else if(z==="--action")J.action=Y,X++;else if(z==="--window")J.windowId=Y,X++;else if(z==="--cols")J.cols=Y,X++;else if(z==="--rows")J.rows=Y,X++;else if(z==="--status")J.status=Y,X++;else if(z==="--client")J.client=Y,X++;else if(z==="--title")J.title=Y,X++}return J}async function id($,J){if($==="new-chattab"){let X=Z6(J),z=X.session;if(!z)console.error("kobe new-chattab: --session <name> is required"),process.exit(2);let{windowIsSurface:Y}=await Promise.resolve().then(() => (Q5(),cq));if(await Y(z))return!0;let q;if(X.vendor!==void 0){let H=X.vendor.trim(),{getCustomEngineIds:U}=await Promise.resolve().then(() => (I5(),NZ)),{isBuiltinVendor:M}=await Promise.resolve().then(() => (r4(),OE));if(!(M(H)||U().includes(H))){let O=[...P4,...U()].join(", "),j=`kobe: unknown engine '${H}' (known: ${O})`,{runTmux:R}=await Promise.resolve().then(() => (Q5(),cq));await R(["display-message","-t",z,j]),console.error(j),process.exit(2)}q=H}let{newChatTab:W}=await Promise.resolve().then(() => (q8(),j3));return await W(z,q),!0}if($==="engine-tab-exit"){let z=Z6(J).session;if(!z)console.error("kobe engine-tab-exit: --session <name> is required"),process.exit(2);let{engineTabExit:Y}=await Promise.resolve().then(() => (mU(),Wx));return await Y(z),!0}if($==="kill-sessions"){let{runTmux:X,termAllPaneGroups:z,KOBE_TMUX_SOCKET:Y}=await Promise.resolve().then(() => (Q5(),cq));await z();let q=await X(["kill-server"]);return console.log(q===0?`kobe: killed all tmux sessions on the \`${Y}\` socket`:`kobe: no tmux sessions to kill on the \`${Y}\` socket`),!0}if($==="quick-create"){let z=Z6(J).session;if(!z)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:Y}=await Promise.resolve().then(() => (q8(),j3));return await Y(z),!0}if($==="focus-tasks"){let X=Z6(J),z=X.session;if(!z)console.error("kobe focus-tasks: --session <name> is required"),process.exit(2);let{windowIsSurface:Y}=await Promise.resolve().then(() => (Q5(),cq));if(X.windowId&&await Y(X.windowId))return!0;let{selectTasksPane:q}=await Promise.resolve().then(() => (q8(),j3));return await q(z,{windowId:X.windowId}),!0}if($==="heal-layout"){let z=Z6(J).session;if(!z)console.error("kobe heal-layout: --session <name> is required"),process.exit(2);let{healSessionLayout:Y}=await Promise.resolve().then(() => (q8(),j3)),{coalesceLayoutWork:q}=await Promise.resolve().then(() => (Tq(),Tj));return await q(z,"heal",()=>Y(z)),!0}if($==="resync-window"){let X=Z6(J),z=X.session;if(!z)console.error("kobe resync-window: --session <name> is required"),process.exit(2);let Y=Number.parseInt(X.cols??"",10),q=Number.parseInt(X.rows??"",10),W=Number.isInteger(Y)&&Y>0&&Number.isInteger(q)&&q>0?{columns:Y,rows:q}:null,{resyncWindowToClient:H}=await Promise.resolve().then(() => (q8(),j3)),{coalesceLayoutWork:U}=await Promise.resolve().then(() => (Tq(),Tj));return await U(z,"resync",()=>H(z,{size:W,status:X.status,clientName:X.client})),!0}if($==="capture-layout"){let z=Z6(J).session;if(!z)console.error("kobe capture-layout: --session <name> is required"),process.exit(2);let{captureGlobalLayoutOnDrag:Y}=await Promise.resolve().then(() => (q8(),j3)),{coalesceLayoutWork:q,genAgeMs:W,RESIZE_GUARD_MS:H}=await Promise.resolve().then(() => (Tq(),Tj));return await q(z,"capture",async()=>{if(W(z,"resize")<H)return;await Y(z)}),!0}if($==="layout"){let X=Z6(J),z=X.session;if(!z)console.error("kobe layout: --session <name> is required"),process.exit(2);let Y=X.action;if(!Y||!new Set(["workspace-split","workspace-close","workspace-reset","tasks-toggle","tasks-restore","ops-toggle","terminal-toggle","zen-toggle","chat-tab-close"]).has(Y))console.error("kobe layout: --action must be one of workspace-split, workspace-close, workspace-reset, tasks-toggle, tasks-restore, ops-toggle, terminal-toggle, zen-toggle, chat-tab-close"),process.exit(2);if(Y==="tasks-restore"&&X.windowId){let{windowIsSurface:H}=await Promise.resolve().then(() => (Q5(),cq));if(await H(X.windowId))return!0}let{runLayoutAction:W}=await Promise.resolve().then(() => (q8(),j3));return await W(z,Y,{windowId:X.windowId}),!0}if($==="tasks"){let X=Z6(J),{startTasksPane:z}=await vP().then(() => Dc);return await z({initialTaskId:X.initialTaskId}),!0}if($==="new-task"){let X=Z6(J),{startNewTaskHost:z}=await mP().then(() => Ac);return await z({defaultRepo:X.repo}),!0}if($==="quick-task"){let X=Z6(J),{startQuickTaskHost:z}=await fc().then(() => kc);return await z({session:X.session}),!0}if($==="update-page"){let{startUpdateHost:X}=await dP().then(() => gc);return await X(),!0}if($==="settings"){let{startSettingsHost:X}=await bc().then(() => xc);return await X(),!0}if($==="worktrees"){let{startWorktreesHost:X}=await cc().then(() => uc);return await X(),!0}if($==="help-page"){let{startHelpHost:X}=await lc().then(() => dc);return await X(),!0}if($==="history"){let X=Z6(J);if(!X.worktree)console.error("kobe history: --worktree <path> is required"),process.exit(2);let{startHistoryHost:z}=await ec().then(() => tc);return await z({worktree:X.worktree,vendor:mJ(X.vendor),title:X.title,live:J.includes("--live")}),!0}if($==="ops"){let X=Z6(J);if(!X.worktree)console.error("kobe ops: --worktree <path> is required"),process.exit(2);if(X.preview){let{startOpsPreview:Y}=await rP().then(() => zd);return await Y({worktree:X.worktree,relPath:X.preview}),!0}let{startOpsHost:z}=await nd().then(() => pd);return await z({taskId:X.taskId??"",worktree:X.worktree,targetPane:X.targetPane??null,vendor:mJ(X.vendor)}),!0}return!1}c7();function ad(){return[`kobe ${C2}`,"","Usage: kobe [command] [options]","","Run with no command to launch the TUI.","","Commands:"," web [options] Launch the browser dashboard"," completions <shell> Generate shell completion script (bash/zsh/fish)"," add [path] Save a repo path for the new-task picker"," remove [path] Forget a saved project (inverse of add; non-destructive)"," adopt [glob] Import existing git worktrees as tasks"," export [--csv|--json] Print the task list (json/csv/table; daemon-free)"," repo <verb> Per-repo init script + first prompt (show|set|unset)"," api <verb> Scriptable RPC surface for agents (see `kobe api --help`)"," daemon <verb> Manage the daemon (start|stop|status|restart)"," theme <verb> Manage user themes (list|add|remove)"," skill <verb> Install the kobe agent skill (install|status|command)"," feedback Send feedback to GitHub Discussions"," update [target] Self-update kobe"," doctor Diagnose daemon / tmux / state (read-only)"," reset [--hard] Stop daemon, PTY host, and tmux sessions"," 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(`
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@sma1lboy/kobe",
4
- "version": "0.7.100",
4
+ "version": "0.7.101",
5
5
  "description": "TUI orchestrator for Claude Code (codename)",
6
6
  "type": "module",
7
7
  "packageManager": "bun@1.3.13",