@sma1lboy/kobe 0.7.37 → 0.7.38
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 +187 -187
- package/package.json +2 -1
package/dist/cli/index.js
CHANGED
|
@@ -1,103 +1,103 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
var nL=Object.defineProperty;var iL=(J)=>J;function lL(J,Y){this[J]=iL.bind(null,Y)}var q1=(J,Y)=>{for(var Z in Y)nL(J,Z,{get:Y[Z],enumerable:!0,configurable:!0,set:lL.bind(Y,Z)})};var S=(J,Y)=>()=>(J&&(Y=J(J=0)),Y);var Pz=import.meta.require;import{basename as $L}from"path";function aL(J){let Y="";for(let Z=0;Z<J.length;Z++){let X=J[Z];if(X==="*")if(J[Z+1]==="*")Y+=".*",Z++;else Y+="[^/]*";else if(X==="?")Y+="[^/]";else if(X&&"\\^$.|+()[]{}".includes(X))Y+=`\\${X}`;else Y+=X}return new RegExp(`^${Y}$`)}function vz(J,Y){let Z;try{Z=aL(J)}catch{return!1}return Z.test(Y)||Z.test($L(Y))}var kq=()=>{};var xW={};q1(xW,{prevVendorWithin:()=>Iq,nextVendorWithin:()=>eY,nextVendor:()=>pL,isBuiltinVendor:()=>XJ,coerceVendorId:()=>wZ,BUILTIN_VENDORS:()=>xZ,ALL_VENDORS:()=>m1});function XJ(J){return J==="claude"||J==="codex"||J==="copilot"}function pL(J){let Y=m1.indexOf(J);return m1[(Y+1)%m1.length]??m1[0]}function eY(J,Y){if(J.length===0)return Y;let Z=J.indexOf(Y);return J[(Z+1)%J.length]??J[0]??Y}function Iq(J,Y){if(J.length===0)return Y;let Z=J.indexOf(Y);if(Z<0)return J[J.length-1]??Y;return J[(Z-1+J.length)%J.length]??Y}function wZ(J){let Y=J?.trim();return Y&&Y.length>0?Y:"claude"}var xZ,m1;var BJ=S(()=>{xZ=["claude","codex","copilot"],m1=[...xZ]});var mz;var wW=S(()=>{mz={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.37",description:"TUI orchestrator for Claude Code (codename)",type:"module",packageManager:"bun@1.3.13",bin:{kobe:"dist/cli/index.js"},files:["dist/cli","dist/web-ui","dist/*.wav","README.md","LICENSE"],publishConfig:{access:"public"},repository:{type:"git",url:"git+https://github.com/Sma1lboy/kobe.git"},homepage:"https://github.com/Sma1lboy/kobe#readme",bugs:{url:"https://github.com/Sma1lboy/kobe/issues"},engines:{bun:">=1.3.11"},scripts:{dev:"env KOBE_DEV=1 bun --preload @opentui/solid/preload --conditions=browser ./src/cli/index.ts","dev:sandbox":"mkdir -p .dev-sandbox/home && env KOBE_DEV=1 KOBE_HOME_DIR=$PWD/.dev-sandbox/home KOBE_TMUX_SOCKET=kobe-sandbox bun --preload @opentui/solid/preload --conditions=browser ./src/cli/index.ts","dev:sandbox:reset":"env KOBE_TMUX_SOCKET=kobe-sandbox bun ./src/cli/index.ts kill-sessions","dev:version":"bash ../../scripts/dev-version.sh",build:"bun run scripts/build.ts","build:with-web":"bun run build",compile:"bun run scripts/compile.ts",typecheck:"tsc --noEmit",test:"bun run test:fast && bun run test:socket","test:fast":"vitest run --passWithNoTests","test:socket":"KOBE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=1 --passWithNoTests","test:behavior":"KOBE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --passWithNoTests",bench:"vitest bench --run",lint:"biome check .",knip:"knip-bun",postinstall:"bun run scripts/check-preview-deps.ts || true",prepublishOnly:"bun run typecheck && bun run build"},"//":"biome.json + bunfig.toml live at the monorepo root since they apply repo-wide; bun.lock also lives at root (workspace-shared).",dependencies:{"@ansi-tools/parser":"^1.0.15","@opentui/core":"0.2.4","@opentui/solid":"0.2.4",ws:"^8.18.0","solid-js":"1.9.13"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.11","@tsconfig/bun":"1.0.10","@types/bun":"1.3.14","@types/node":"25.6.2",knip:"^6.14.2","kobe-web":"workspace:*","node-pty":"^1.1.0",typescript:"5.8.2",vitest:"2.1.9"},trustedDependencies:[]}});import{createHash as hW}from"crypto";import{homedir as rL}from"os";import{join as hZ}from"path";function PW(){return process.env.KOBE_DEV==="1"}function DY(){return process.env.KOBE_HOME_DIR??rL()}function o1(){return hZ(DY(),".kobe")}function xJ(){return hZ(DY(),".config","kobe","state.json")}function oL(){return hZ(o1(),"settings")}function vW(){return hZ(oL(),"keybindings.yaml")}function Nq(){return hZ(o1(),"issue-assets")}function cz(J,Y,Z){let X=hW("sha1").update(`${Y}@${J}:${Z??22}`).digest("hex").slice(0,16);return hZ(o1(),"ssh",`${X}.sock`)}function mW(J){let Y=hW("sha1").update(J).digest("hex").slice(0,16);return hZ(o1(),"worktree-init",Y)}var n1=()=>{};var dW={};q1(dW,{repoSlug:()=>PZ,releasePageUrl:()=>xq,recommendedGlobalInstallCommand:()=>Eq,isNewerSemver:()=>bq,fetchReleaseSummaries:()=>eL,fetchReleaseNotesRange:()=>uq,fetchReleaseNotes:()=>tL,compareSemver:()=>dz,checkLatestVersion:()=>yG,UPDATE_SCRIPT_URL:()=>nz,UPDATE_COMMAND:()=>EY,PACKAGE_NAME:()=>Tq,CURRENT_VERSION:()=>i0});function PZ(){let J=mz.repository?.url;if(!J)return null;let Y=J.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!Y||!Y[1]||!Y[2])return null;return`${Y[1]}/${Y[2]}`}function Eq(){return`npm install -g ${Tq}@latest`}async function sL(J){let Y=new AbortController,Z=setTimeout(()=>Y.abort(),iz);try{let X=J.replace("/","%2F"),G=await fetch(`https://registry.npmjs.org/${X}/latest`,{signal:Y.signal,headers:{accept:"application/json"}});if(!G.ok)return null;let z=await G.json();if(typeof z.version!=="string")return null;return z.version}catch{return null}finally{clearTimeout(Z)}}function bq(J,Y){return dz(J,Y)>0}function dz(J,Y){let Z=(z)=>z.split("-")[0]??z,X=Z(J).split(".").map((z)=>Number.parseInt(z,10)),G=Z(Y).split(".").map((z)=>Number.parseInt(z,10));for(let z=0;z<3;z++){let f=X[z]??0,q=G[z]??0;if(Number.isNaN(f)||Number.isNaN(q))return 0;if(f>q)return 1;if(f<q)return-1}return 0}async function yG(J={}){let Y=process.env.KOBE_FAKE_UPDATE;if(Y)return{current:i0,latest:Y,hasUpdate:bq(Y,i0)};if(PW()&&!J.force)return null;let Z=await sL(Tq);if(!Z)return null;return{current:i0,latest:Z,hasUpdate:bq(Z,i0)}}function cW(J){if(typeof J!=="string")return null;return J.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function tL(J){let Y=PZ();if(!Y)return null;let Z=`v${J}`,X=new AbortController,G=setTimeout(()=>X.abort(),iz);try{let z=await fetch(`https://api.github.com/repos/${Y}/releases/tags/${Z}`,{signal:X.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!z.ok)return null;let f=await z.json();if(typeof f.body!=="string"||typeof f.html_url!=="string")return null;return{body:f.body,url:f.html_url,version:J}}catch{return null}finally{clearTimeout(G)}}async function uq(J){let Y=PZ();if(!Y)return[];let Z=J.limit??100,X=new AbortController,G=setTimeout(()=>X.abort(),iz);try{let z=await fetch(`https://api.github.com/repos/${Y}/releases?per_page=${Z}`,{signal:X.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!z.ok)return[];let f=await z.json();if(!Array.isArray(f))return[];return f.map((q)=>{let B=cW(q.tag_name);if(!B||typeof q.html_url!=="string"||typeof q.body!=="string")return null;if(dz(B,J.current)<=0)return null;if(dz(B,J.latest)>0)return null;return{version:B,url:q.html_url,body:q.body}}).filter((q)=>q!==null)}catch{return[]}finally{clearTimeout(G)}}async function eL(J=12){let Y=PZ();if(!Y)return[];let Z=new AbortController,X=setTimeout(()=>Z.abort(),iz);try{let G=await fetch(`https://api.github.com/repos/${Y}/releases?per_page=${J}`,{signal:Z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return[];let z=await G.json();if(!Array.isArray(z))return[];return z.map((f)=>{let q=cW(f.tag_name);if(!q||typeof f.html_url!=="string")return null;return{version:q,url:f.html_url}}).filter((f)=>f!==null)}catch{return[]}finally{clearTimeout(X)}}function xq(J){let Y=PZ();if(!Y)return null;return`https://github.com/${Y}/releases/tag/v${J}`}var i0,Tq,nz="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",EY,iz=3000;var jJ=S(()=>{wW();n1();i0=mz.version,Tq=mz.name;EY=`curl -fsSL ${nz} | sh`});import{spawn as JD,spawnSync as YD}from"child_process";import{existsSync as iW}from"fs";import{mkdir as ZD,readFile as XD,readdir as GD}from"fs/promises";function vZ(J){return`'${J.replace(/'/g,"'\\''")}'`}function zD(J){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(J)?J:vZ(J)}function $W(J){return J.map(vZ).join(" ")}function QD(J,Y){let Z=$W(J);return Y?`cd ${vZ(Y)} && ${Z}`:Z}function fD(J){if(!J)return"";let Y=Object.entries(J).filter(([Z])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(Z));if(Y.length===0)return"";return`${Y.map(([Z,X])=>`${Z}=${vZ(X)}`).join(" ")} `}function SG(J,Y={}){let Z=["ssh"];if(Y.tty)Z.push("-tt");if(Y.batch)Z.push("-o","BatchMode=yes");if(Z.push("-o","ControlMaster=auto","-o",`ControlPath=${J.controlPath}`,"-o","ControlPersist=300"),Z.push("-o","StrictHostKeyChecking=accept-new"),J.port)Z.push("-p",String(J.port));if(J.auth.kind==="key"&&J.auth.keyPath)Z.push("-i",J.auth.keyPath);return Z.push(`${J.user}@${J.host}`),Z}function aW(J,Y={}){return new Promise((Z)=>{let[X,...G]=J,z="",f="",q=!1,B=(K)=>{if(q)return;q=!0,Z({stdout:z,stderr:f,exitCode:K})},j;try{j=JD(X??"",G,{cwd:Y.cwd,env:Y.env,shell:!1,signal:Y.signal})}catch{B(-1);return}j.stdout?.setEncoding("utf8"),j.stdout?.on("data",(K)=>{z+=K}),j.stderr?.setEncoding("utf8"),j.stderr?.on("data",(K)=>{f+=K}),j.on("error",()=>B(-1)),j.on("close",(K)=>B(K??-1))})}class lz{isRemote=!1;run(J,Y={}){return aW(J,{cwd:Y.cwd,env:Y.env?{...process.env,...Y.env}:process.env,signal:Y.signal})}async exists(J){return iW(J)}existsSync(J){return iW(J)}async mkdirp(J){await ZD(J,{recursive:!0})}async readFile(J){try{return await XD(J,"utf8")}catch{return null}}async readdir(J){try{return await GD(J)}catch{return[]}}wrapCommand(J){return J}ensureReady(){}}class CX{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(J,Y=lW,Z){this.spec=J;this.spawn=Y;this.spawnAsync=Z??(this.spawn===lW?qD:async(X,G)=>this.spawn(X,G))}ensureReady(){if(this.masterUp)return;if(this.spawn([...SG(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let Y=[...SG(this.spec,{batch:this.spec.auth.kind!=="password"}),"-fN"];if(this.spec.auth.kind==="password"){let Z=this.spec.auth.getPassword();if(Z!=null){this.spawn(["sshpass","-e",...Y],{SSHPASS:Z}),this.masterUp=!0;return}}this.spawn(Y),this.masterUp=!0}async run(J,Y={}){this.ensureReady();let Z=`${fD(Y.env)}${$W(J)}`,X=Y.cwd?`cd ${vZ(Y.cwd)} && ${Z}`:Z;return this.spawnAsync([...SG(this.spec,{batch:!0}),X],void 0,{signal:Y.signal})}async exists(J){return(await this.run(["test","-e",J])).exitCode===0}existsSync(J){return this.ensureReady(),this.spawn([...SG(this.spec,{batch:!0}),QD(["test","-e",J])]).exitCode===0}async mkdirp(J){await this.run(["mkdir","-p",J])}async readFile(J){let Y=await this.run(["cat",J]);return Y.exitCode===0?Y.stdout:null}async readdir(J){let Y=await this.run(["ls","-1A",J]);if(Y.exitCode!==0)return[];return Y.stdout.split(`
|
|
4
|
-
`).filter((
|
|
3
|
+
var hL=Object.defineProperty;var PL=(f)=>f;function vL(f,J){this[f]=PL.bind(null,J)}var jf=(f,J)=>{for(var Y in J)hL(f,Y,{get:J[Y],enumerable:!0,configurable:!0,set:vL.bind(J,Y)})};var C=(f,J)=>()=>(f&&(J=f(f=0)),J);var $Z=import.meta.require;import{basename as mL}from"path";function cL(f){let J="";for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="*")if(f[Y+1]==="*")J+=".*",Y++;else J+="[^/]*";else if(z==="?")J+="[^/]";else if(z&&"\\^$.|+()[]{}".includes(z))J+=`\\${z}`;else J+=z}return new RegExp(`^${J}$`)}function rZ(f,J){let Y;try{Y=cL(f)}catch{return!1}return Y.test(J)||Y.test(mL(J))}var hQ=()=>{};var e8={};jf(e8,{prevVendorWithin:()=>PQ,nextVendorWithin:()=>GY,nextVendor:()=>nL,isBuiltinVendor:()=>Q1,coerceVendorId:()=>mY,BUILTIN_VENDORS:()=>vY,ALL_VENDORS:()=>mf});function Q1(f){return f==="claude"||f==="codex"||f==="copilot"}function nL(f){let J=mf.indexOf(f);return mf[(J+1)%mf.length]??mf[0]}function GY(f,J){if(f.length===0)return J;let Y=f.indexOf(J);return f[(Y+1)%f.length]??f[0]??J}function PQ(f,J){if(f.length===0)return J;let Y=f.indexOf(J);if(Y<0)return f[f.length-1]??J;return f[(Y-1+f.length)%f.length]??J}function mY(f){let J=f?.trim();return J&&J.length>0?J:"claude"}var vY,mf;var K1=C(()=>{vY=["claude","codex","copilot"],mf=[...vY]});var pZ;var f9=C(()=>{pZ={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.38",description:"TUI orchestrator for Claude Code (codename)",type:"module",packageManager:"bun@1.3.13",bin:{kobe:"dist/cli/index.js"},files:["dist/cli","dist/web-ui","dist/*.wav","README.md","LICENSE"],publishConfig:{access:"public"},repository:{type:"git",url:"git+https://github.com/Sma1lboy/kobe.git"},homepage:"https://github.com/Sma1lboy/kobe#readme",bugs:{url:"https://github.com/Sma1lboy/kobe/issues"},engines:{bun:">=1.3.11"},scripts:{dev:"env KOBE_DEV=1 bun --preload @opentui/solid/preload --conditions=browser ./src/cli/index.ts","dev:sandbox":"mkdir -p .dev-sandbox/home && env KOBE_DEV=1 KOBE_HOME_DIR=$PWD/.dev-sandbox/home KOBE_TMUX_SOCKET=kobe-sandbox bun --preload @opentui/solid/preload --conditions=browser ./src/cli/index.ts","dev:sandbox:reset":"env KOBE_TMUX_SOCKET=kobe-sandbox bun ./src/cli/index.ts kill-sessions","dev:version":"bash ../../scripts/dev-version.sh",build:"bun run scripts/build.ts","build:with-web":"bun run build",compile:"bun run scripts/compile.ts",typecheck:"tsc --noEmit","check-i18n":"bun run scripts/check-i18n.ts",test:"bun run test:fast && bun run test:socket","test:fast":"vitest run --passWithNoTests","test:socket":"KOBE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=1 --passWithNoTests","test:behavior":"KOBE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --passWithNoTests",bench:"vitest bench --run",lint:"biome check .",knip:"knip-bun",postinstall:"bun run scripts/check-preview-deps.ts || true",prepublishOnly:"bun run typecheck && bun run build"},"//":"biome.json + bunfig.toml live at the monorepo root since they apply repo-wide; bun.lock also lives at root (workspace-shared).",dependencies:{"@ansi-tools/parser":"^1.0.15","@opentui/core":"0.2.4","@opentui/solid":"0.2.4",ws:"^8.18.0","solid-js":"1.9.13"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.11","@tsconfig/bun":"1.0.10","@types/bun":"1.3.14","@types/node":"25.6.2",knip:"^6.14.2","kobe-web":"workspace:*","node-pty":"^1.1.0",typescript:"5.8.2",vitest:"2.1.9"},trustedDependencies:[]}});import{createHash as J9}from"crypto";import{homedir as iL}from"os";import{join as cY}from"path";function Y9(){return process.env.KOBE_DEV==="1"}function OJ(){return process.env.KOBE_HOME_DIR??iL()}function ef(){return cY(OJ(),".kobe")}function v1(){return cY(OJ(),".config","kobe","state.json")}function lL(){return cY(ef(),"settings")}function z9(){return cY(lL(),"keybindings.yaml")}function vQ(){return cY(ef(),"issue-assets")}function _Z(f,J,Y){let z=J9("sha1").update(`${J}@${f}:${Y??22}`).digest("hex").slice(0,16);return cY(ef(),"ssh",`${z}.sock`)}function G9(f){let J=J9("sha1").update(f).digest("hex").slice(0,16);return cY(ef(),"worktree-init",J)}var lf=()=>{};var X9={};jf(X9,{repoSlug:()=>nY,releasePageUrl:()=>iQ,recommendedGlobalInstallCommand:()=>nQ,isNewerSemver:()=>mQ,fetchReleaseSummaries:()=>rL,fetchReleaseNotesRange:()=>dQ,fetchReleaseNotes:()=>$L,compareSemver:()=>oZ,checkLatestVersion:()=>xG,UPDATE_SCRIPT_URL:()=>sZ,UPDATE_COMMAND:()=>wJ,PACKAGE_NAME:()=>cQ,CURRENT_VERSION:()=>o0});function nY(){let f=pZ.repository?.url;if(!f)return null;let J=f.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!J||!J[1]||!J[2])return null;return`${J[1]}/${J[2]}`}function nQ(){return`npm install -g ${cQ}@latest`}async function aL(f){let J=new AbortController,Y=setTimeout(()=>J.abort(),tZ);try{let z=f.replace("/","%2F"),G=await fetch(`https://registry.npmjs.org/${z}/latest`,{signal:J.signal,headers:{accept:"application/json"}});if(!G.ok)return null;let Z=await G.json();if(typeof Z.version!=="string")return null;return Z.version}catch{return null}finally{clearTimeout(Y)}}function mQ(f,J){return oZ(f,J)>0}function oZ(f,J){let Y=(Z)=>Z.split("-")[0]??Z,z=Y(f).split(".").map((Z)=>Number.parseInt(Z,10)),G=Y(J).split(".").map((Z)=>Number.parseInt(Z,10));for(let Z=0;Z<3;Z++){let q=z[Z]??0,Q=G[Z]??0;if(Number.isNaN(q)||Number.isNaN(Q))return 0;if(q>Q)return 1;if(q<Q)return-1}return 0}async function xG(f={}){let J=process.env.KOBE_FAKE_UPDATE;if(J)return{current:o0,latest:J,hasUpdate:mQ(J,o0)};if(Y9()&&!f.force)return null;let Y=await aL(cQ);if(!Y)return null;return{current:o0,latest:Y,hasUpdate:mQ(Y,o0)}}function Z9(f){if(typeof f!=="string")return null;return f.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function $L(f){let J=nY();if(!J)return null;let Y=`v${f}`,z=new AbortController,G=setTimeout(()=>z.abort(),tZ);try{let Z=await fetch(`https://api.github.com/repos/${J}/releases/tags/${Y}`,{signal:z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!Z.ok)return null;let q=await Z.json();if(typeof q.body!=="string"||typeof q.html_url!=="string")return null;return{body:q.body,url:q.html_url,version:f}}catch{return null}finally{clearTimeout(G)}}async function dQ(f){let J=nY();if(!J)return[];let Y=f.limit??100,z=new AbortController,G=setTimeout(()=>z.abort(),tZ);try{let Z=await fetch(`https://api.github.com/repos/${J}/releases?per_page=${Y}`,{signal:z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!Z.ok)return[];let q=await Z.json();if(!Array.isArray(q))return[];return q.map((Q)=>{let H=Z9(Q.tag_name);if(!H||typeof Q.html_url!=="string"||typeof Q.body!=="string")return null;if(oZ(H,f.current)<=0)return null;if(oZ(H,f.latest)>0)return null;return{version:H,url:Q.html_url,body:Q.body}}).filter((Q)=>Q!==null)}catch{return[]}finally{clearTimeout(G)}}async function rL(f=12){let J=nY();if(!J)return[];let Y=new AbortController,z=setTimeout(()=>Y.abort(),tZ);try{let G=await fetch(`https://api.github.com/repos/${J}/releases?per_page=${f}`,{signal:Y.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return[];let Z=await G.json();if(!Array.isArray(Z))return[];return Z.map((q)=>{let Q=Z9(q.tag_name);if(!Q||typeof q.html_url!=="string")return null;return{version:Q,url:q.html_url}}).filter((q)=>q!==null)}catch{return[]}finally{clearTimeout(z)}}function iQ(f){let J=nY();if(!J)return null;return`https://github.com/${J}/releases/tag/v${f}`}var o0,cQ,sZ="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",wJ,tZ=3000;var U1=C(()=>{f9();lf();o0=pZ.version,cQ=pZ.name;wJ=`curl -fsSL ${sZ} | sh`});import{spawn as pL,spawnSync as _L}from"child_process";import{existsSync as Q9}from"fs";import{mkdir as oL,readFile as sL,readdir as tL}from"fs/promises";function dY(f){return`'${f.replace(/'/g,"'\\''")}'`}function eL(f){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(f)?f:dY(f)}function B9(f){return f.map(dY).join(" ")}function fM(f,J){let Y=B9(f);return J?`cd ${dY(J)} && ${Y}`:Y}function JM(f){if(!f)return"";let J=Object.entries(f).filter(([Y])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(Y));if(J.length===0)return"";return`${J.map(([Y,z])=>`${Y}=${dY(z)}`).join(" ")} `}function wG(f,J={}){let Y=["ssh"];if(J.tty)Y.push("-tt");if(J.batch)Y.push("-o","BatchMode=yes");if(Y.push("-o","ControlMaster=auto","-o",`ControlPath=${f.controlPath}`,"-o","ControlPersist=300"),Y.push("-o","StrictHostKeyChecking=accept-new"),f.port)Y.push("-p",String(f.port));if(f.auth.kind==="key"&&f.auth.keyPath)Y.push("-i",f.auth.keyPath);return Y.push(`${f.user}@${f.host}`),Y}function j9(f,J={}){return new Promise((Y)=>{let[z,...G]=f,Z="",q="",Q=!1,H=(V)=>{if(Q)return;Q=!0,Y({stdout:Z,stderr:q,exitCode:V})},B;try{B=pL(z??"",G,{cwd:J.cwd,env:J.env,shell:!1,signal:J.signal})}catch{H(-1);return}B.stdout?.setEncoding("utf8"),B.stdout?.on("data",(V)=>{Z+=V}),B.stderr?.setEncoding("utf8"),B.stderr?.on("data",(V)=>{q+=V}),B.on("error",()=>H(-1)),B.on("close",(V)=>H(V??-1))})}class eZ{isRemote=!1;run(f,J={}){return j9(f,{cwd:J.cwd,env:J.env?{...process.env,...J.env}:process.env,signal:J.signal})}async exists(f){return Q9(f)}existsSync(f){return Q9(f)}async mkdirp(f){await oL(f,{recursive:!0})}async readFile(f){try{return await sL(f,"utf8")}catch{return null}}async readdir(f){try{return await tL(f)}catch{return[]}}wrapCommand(f){return f}ensureReady(){}}class bz{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(f,J=H9,Y){this.spec=f;this.spawn=J;this.spawnAsync=Y??(this.spawn===H9?YM:async(z,G)=>this.spawn(z,G))}ensureReady(){if(this.masterUp)return;if(this.spawn([...wG(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let J=[...wG(this.spec,{batch:this.spec.auth.kind!=="password"}),"-fN"];if(this.spec.auth.kind==="password"){let Y=this.spec.auth.getPassword();if(Y!=null){this.spawn(["sshpass","-e",...J],{SSHPASS:Y}),this.masterUp=!0;return}}this.spawn(J),this.masterUp=!0}async run(f,J={}){this.ensureReady();let Y=`${JM(J.env)}${B9(f)}`,z=J.cwd?`cd ${dY(J.cwd)} && ${Y}`:Y;return this.spawnAsync([...wG(this.spec,{batch:!0}),z],void 0,{signal:J.signal})}async exists(f){return(await this.run(["test","-e",f])).exitCode===0}existsSync(f){return this.ensureReady(),this.spawn([...wG(this.spec,{batch:!0}),fM(["test","-e",f])]).exitCode===0}async mkdirp(f){await this.run(["mkdir","-p",f])}async readFile(f){let J=await this.run(["cat",f]);return J.exitCode===0?J.stdout:null}async readdir(f){let J=await this.run(["ls","-1A",f]);if(J.exitCode!==0)return[];return J.stdout.split(`
|
|
4
|
+
`).filter((Y)=>Y.length>0)}wrapCommand(f,J={}){let Y=J.cwd?`cd ${dY(J.cwd)} && ${f}`:f;return`${wG(this.spec,{tty:J.tty}).map(eL).join(" ")} ${dY(Y)}`}}var H9=(f,J)=>{let[Y,...z]=f,G=_L(Y??"",z,{env:J?{...process.env,...J}:process.env,encoding:"utf8",shell:!1});return{stdout:G.stdout??"",stderr:G.stderr??"",exitCode:G.status??-1}},YM=(f,J,Y)=>j9(f,{env:J?{...process.env,...J}:process.env,signal:Y?.signal});var lQ=()=>{};import{spawnSync as zM}from"child_process";import{platform as GM}from"os";function W9(f,J,Y){return{service:ZM,account:Y?`${J}@${f}:${Y}`:`${J}@${f}`}}function $Q(f=aQ){return f.platform()==="darwin"}function V9(f,J,Y=aQ){if(Y.platform()!=="darwin")return!1;let{exitCode:z}=Y.run(["security","add-generic-password","-U","-s",f.service,"-a",f.account,"-w",J]);return z===0}function fX(f,J=aQ){if(J.platform()!=="darwin")return null;let{stdout:Y,exitCode:z}=J.run(["security","find-generic-password","-s",f.service,"-a",f.account,"-w"]);if(z!==0)return null;return Y.replace(/\n$/,"")}var aQ,ZM="kobe-remote-ssh";var rQ=C(()=>{aQ={run(f){let[J,...Y]=f,z=zM(J??"",Y,{encoding:"utf8",shell:!1});return{stdout:z.stdout??"",exitCode:z.status??-1}},platform(){return GM()}}});import{mkdirSync as XM,readFileSync as qM,renameSync as QM,writeFileSync as HM}from"fs";import{dirname as BM}from"path";function cf(){try{let f=qM(v1(),"utf8"),J=JSON.parse(f);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return{}}function K9(f){let J=v1();XM(BM(J),{recursive:!0});let Y=`${J}.tmp`;HM(Y,JSON.stringify(f,null,2),"utf8"),QM(Y,J)}function Sz(f){let J=cf();if(f(J)!==!1)K9(J);return J}function iY(f){return Sz((J)=>{for(let[Y,z]of Object.entries(f))if(z===void 0)delete J[Y];else J[Y]=z;return})}function U9(f){K9(f)}var lY=C(()=>{lf()});var ZY={};jf(ZY,{statePath:()=>WM,setRepoInitOverride:()=>VM,setPersistedString:()=>af,resolveRepoRoot:()=>hJ,resolveMainRepoRoot:()=>jM,removeSavedRepo:()=>KM,remoteRepoKey:()=>O9,normalizeSavedRepos:()=>_Q,isRemoteRepoKey:()=>D1,isRemoteProjectsEnabled:()=>sQ,getSavedRepos:()=>m1,getRepoInitOverride:()=>oQ,getRemoteRepos:()=>eQ,getRemoteRepoConfig:()=>vJ,getPersistedString:()=>kf,getCustomEngineIds:()=>pQ,addSavedRepo:()=>PJ,addRemoteRepo:()=>fH});import{spawnSync as L9}from"child_process";import{realpathSync as D9}from"fs";function hJ(f){if(D1(f))return f;let J=L9("git",["rev-parse","--show-toplevel"],{cwd:f,encoding:"utf8",shell:!1});if(J.status!==0)return f;let Y=(J.stdout??"").trim();if(!Y)return f;try{if(D9(f)===D9(Y))return f}catch{}return Y}function jM(f){if(D1(f))return f;let J=L9("git",["worktree","list","--porcelain"],{cwd:f,encoding:"utf8",shell:!1});if(J.status!==0)return hJ(f);return(J.stdout??"").split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim()||hJ(f)}function WM(){return v1()}function JX(f){let J=f.savedRepos;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string")}function m1(){return JX(cf())}function kf(f){let J=cf()[f];return typeof J==="string"?J:void 0}function af(f,J){iY({[f]:J})}function pQ(){let f=cf().customEngineIds;if(!Array.isArray(f))return[];return f.filter((J)=>typeof J==="string"&&J.trim().length>0)}function PJ(f){let J=hJ(f),Y={added:!1,path:J,total:0};return Sz((z)=>{let G=JX(z);if(G.includes(J))return Y={added:!1,path:J,total:G.length},!1;z.savedRepos=[...G,J],Y={added:!0,path:J,total:G.length+1};return}),Y}function _Q(){let f=m1(),J=new Set,Y=[],z=!1;for(let G of f){let Z=hJ(G);if(Z!==G)z=!0;if(J.has(Z)){z=!0;continue}J.add(Z),Y.push(Z)}if(!z)return;iY({savedRepos:Y})}function M9(f){let J=f.repoConfigs;if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function F9(f){if(!f||typeof f!=="object")return{};let J=f;return{initScript:typeof J.initScript==="string"&&J.initScript.length>0?J.initScript:void 0,initPrompt:typeof J.initPrompt==="string"&&J.initPrompt.length>0?J.initPrompt:void 0}}function oQ(f){return F9(M9(cf())[hJ(f)])}function VM(f,J){let Y=hJ(f),z={};return Sz((G)=>{let Z={...M9(G)},q=F9(Z[Y]),Q=J.initScript===void 0?q.initScript:J.initScript||void 0,H=J.initPrompt===void 0?q.initPrompt:J.initPrompt||void 0;if(z={...Q?{initScript:Q}:{},...H?{initPrompt:H}:{}},!z.initScript&&!z.initPrompt){let{[Y]:B,...V}=Z;G.repoConfigs=V}else Z[Y]=z,G.repoConfigs=Z;return}),z}function KM(f){let J={removed:!1,path:f,total:0};return Sz((Y)=>{let z=JX(Y);if(!z.includes(f))return J={removed:!1,path:f,total:z.length},!1;Y.savedRepos=z.filter((G)=>G!==f),J={removed:!0,path:f,total:z.length-1};return}),J}function D1(f){return f.startsWith("ssh://")}function sQ(){return cf()["experimental.remoteProjects"]===!0}function O9(f,J,Y){return Y?`ssh://${J}@${f}:${Y}`:`ssh://${J}@${f}`}function tQ(f){let J=f.remoteRepos;if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function vJ(f){return tQ(cf())[f]??null}function eQ(){return tQ(cf())}function fH(f){let J=O9(f.host,f.user,f.port),Y=!1;return Sz((z)=>{let G={...tQ(z)};G[J]=f,z.remoteRepos=G;let Z=JX(z);if(Y=!Z.includes(J),Y)z.savedRepos=[...Z,J];return}),{key:J,added:Y}}var gf=C(()=>{lf();lY()});var R9={};jf(R9,{runAddRemote:()=>LM,parseRemoteFlags:()=>g9});import{createInterface as UM}from"readline";function g9(f){let J={};for(let Y=0;Y<f.length;Y++){let z=f[Y];switch(z){case"--host":J.host=f[++Y];break;case"--user":J.user=f[++Y];break;case"--path":J.path=f[++Y];break;case"--port":{let G=Number(f[++Y]);if(!Number.isInteger(G)||G<=0)t1(`invalid --port "${f[Y]}"`);J.port=G;break}case"--key":{let G=f[Y+1];if(G&&!G.startsWith("-"))J.key={present:!0,path:G},Y++;else J.key={present:!0};break}case"--password":J.password=!0;break;case"--help":case"-h":process.stdout.write(A9),process.exit(0);break;default:t1(`unknown flag "${z}"`)}}return J}function t1(f){process.stderr.write(`kobe add --remote: ${f}
|
|
5
5
|
|
|
6
|
-
${
|
|
7
|
-
`),
|
|
6
|
+
${A9}`),process.exit(2)}async function DM(f){let J=UM({input:process.stdin,output:process.stdout,terminal:!0}),Y=process.stdout,z=!1,G=Y._writeToOutput?.bind(Y);return Y._writeToOutput=(Z)=>{if(!z||!G)process.stdout.write(Z)},process.stdout.write(f),z=!0,new Promise((Z)=>{J.question("",(q)=>{if(z=!1,G)Y._writeToOutput=G;process.stdout.write(`
|
|
7
|
+
`),J.close(),Z(q)})})}async function LM(f){if(!sQ())t1("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let J=g9(f);if(!J.host)t1("--host is required");if(!J.user)t1("--user is required");if(!J.path)t1("--path (remote base path) is required");if(J.key&&J.password)t1("choose ONE of --key or --password, not both");if(!J.key&&!J.password)t1("an auth method is required: --key [path] or --password");let Y;if(J.password){if(!$Q())t1("--password needs the macOS keychain (unsupported on this platform)");let Z=W9(J.host,J.user,J.port),q=await DM(`Password for ${J.user}@${J.host}: `);if(q.length===0)t1("empty password");if(!V9(Z,q))t1("failed to store the password in the keychain");Y={kind:"password",keychainRef:Z}}else Y={kind:"key",keyPath:J.key?.path};let{key:z,added:G}=fH({host:J.host,user:J.user,port:J.port,basePath:J.path,auth:Y});console.log(G?`added remote project ${z} (base ${J.path})`:`updated remote project ${z} (base ${J.path})`),await MM(J,Y)}async function MM(f,J){if(J.kind==="password"&&!$Q())return;let Y=J.kind==="key"?{kind:"key",keyPath:J.keyPath}:{kind:"password",getPassword:()=>fX(J.keychainRef)},z={host:f.host,user:f.user,port:f.port,auth:Y,controlPath:_Z(f.host,f.user,f.port)};process.stdout.write("checking connection\u2026 ");try{if((await new bz(z).run(["test","-d",f.path])).exitCode===0)console.log("ok");else console.log(`reachable, but base path "${f.path}" is not a directory (you can create it later)`)}catch(G){console.log(`could not connect (${G instanceof Error?G.message:String(G)})`),console.log("the project is saved; fix the host/credentials and it will connect on first use.")}}var A9;var C9=C(()=>{lf();lQ();rQ();gf();A9=`Usage: kobe add --remote --host <host> --user <user> --path <basePath>
|
|
8
8
|
[--port N] [--key [path] | --password]
|
|
9
9
|
|
|
10
10
|
Register an SSH-backed project. Worktrees + the engine run on <host> under
|
|
11
11
|
<basePath>. Choose ONE auth: --key [path] (ssh-agent when path omitted) or
|
|
12
12
|
`+`--password (prompted, stored in the OS keychain \u2014 never in state.json).
|
|
13
|
-
`});function
|
|
14
|
-
`,Z=await bD(this.tmpPath,"w",420);try{await Z.writeFile(Y,"utf8"),await Z.sync()}finally{await Z.close()}await ED(this.tmpPath,this.path)}get(J){return this.assertLoaded(),this.cache.tasks.find((Y)=>Y.id===J)}list(){return this.assertLoaded(),this.cache.tasks.slice()}async create(J){this.assertLoaded();let Y=new Date().toISOString(),Z={archived:!1,vendor:J.vendor??k1,...J,id:kG(j9()),createdAt:Y,updatedAt:Y};return this.cache.tasks.push(Z),await this.save(),this.notifyListeners(),Z}async update(J,Y){this.assertLoaded();let Z=this.cache.tasks.findIndex((B)=>B.id===J);if(Z<0)throw Error(`task not found: ${J}`);let X=this.cache.tasks[Z];if(!X)throw Error(`task not found: ${J}`);let{id:G,createdAt:z,...f}=Y,q={...X,...f,id:X.id,createdAt:X.createdAt,updatedAt:new Date().toISOString()};return this.cache.tasks[Z]=q,await this.save(),this.notifyListeners(),q}async move(J,Y,Z){this.assertLoaded();let X=this.cache.tasks.find((L)=>L.id===J);if(!X)throw Error(`task not found: ${J}`);let G=Z?.length?Z:this.cache.tasks.map((L)=>L.id),z=G.indexOf(String(J));if(z<0)throw Error(`task not movable in current group: ${J}`);let f=G[z+Y];if(!f)return X;let q=this.cache.tasks.findIndex((L)=>L.id===J),B=this.cache.tasks.findIndex((L)=>L.id===f);if(q<0||B<0||q===B)return X;let[j]=this.cache.tasks.splice(q,1);if(!j)return X;let K=q<B?B-1:B,H=Y>0?K+1:K,U={...j,updatedAt:new Date().toISOString()};return this.cache.tasks.splice(H,0,U),await this.save(),this.notifyListeners(),U}async reorder(J){this.assertLoaded();let Y=J.map((G)=>{let z=this.cache.tasks.findIndex((q)=>q.id===G.id);if(!(z>=0?this.cache.tasks[z]:void 0))throw Error(`task not found: ${G.id}`);return{idx:z,position:G.position}}),Z=!1,X=new Map;for(let{idx:G,position:z}of Y){let f=this.cache.tasks[G];if(!f||f.position===z)continue;if(!X.has(G))X.set(G,f);this.cache.tasks[G]={...f,position:z},Z=!0}if(!Z)return;try{await this.save()}catch(G){for(let[z,f]of X)this.cache.tasks[z]=f;throw G}this.notifyListeners()}async archive(J,Y="done"){return this.update(J,{status:Y})}async remove(J){this.assertLoaded();let Y=this.cache.tasks.findIndex((Z)=>Z.id===J);if(Y<0)return;this.cache.tasks.splice(Y,1),await this.save(),this.notifyListeners()}async _unlinkForTests(){try{await W9(this.path)}catch(J){if(J.code!=="ENOENT")throw J}try{await W9(this.tmpPath)}catch(J){if(J.code!=="ENOENT")throw J}this.cache={version:YZ,tasks:[]},this.loaded=!1}assertLoaded(){if(!this.loaded)throw Error("TaskIndexStore: call load() before any other method")}snapshot(){return{version:YZ,tasks:this.cache.tasks.slice()}}notifyListeners(){if(this.listeners.size===0)return;let J=this.cache.tasks.slice();for(let Y of this.listeners)try{Y(J)}catch(Z){console.error("[kobe TaskIndexStore] listener threw on notify:",Z)}}}function wD(J,Y){if(!J||typeof J!=="object"||Array.isArray(J))return console.warn(`[kobe] tasks.json at ${Y} is not an object; recovering with empty index.`),{version:YZ,tasks:[]};let Z=J,X=Z.version;if(X!==void 0&&X!==1&&X!==2&&X!==3)return console.warn(`[kobe] tasks.json at ${Y} has unsupported version=${String(X)}; recovering with empty index.`),{version:YZ,tasks:[]};let G=Array.isArray(Z.tasks)?Z.tasks:[],z=[];for(let f of G){let q=hD(f);if(q)z.push(q);else console.warn(`[kobe] dropping malformed task entry from ${Y}: ${JSON.stringify(f)}`)}return{version:YZ,tasks:z}}function hD(J){if(!J||typeof J!=="object")return null;let Y=J;if(typeof Y.id!=="string"||typeof Y.title!=="string"||typeof Y.repo!=="string"||typeof Y.branch!=="string"||typeof Y.worktreePath!=="string"||typeof Y.status!=="string"||typeof Y.createdAt!=="string"||typeof Y.updatedAt!=="string")return null;if(!dD(Y.status))return null;let Z=typeof Y.archived==="boolean"?Y.archived:!1,X=Y.kind==="main"?"main":"task",G=X==="main"?Y.status==="in_progress"||Y.status==="done"?"backlog":Y.status:Y.status==="done"&&!Z?"in_progress":Y.status;return{id:kG(Y.id),title:Y.title,repo:Y.repo,branch:Y.branch,worktreePath:Y.worktreePath,status:G,archived:Z,pinned:typeof Y.pinned==="boolean"?Y.pinned:!1,kind:X,vendor:wZ(typeof Y.vendor==="string"?Y.vendor:void 0),prStatus:PD(Y.prStatus),...typeof Y.position==="number"&&Number.isFinite(Y.position)?{position:Y.position}:{},...typeof Y.modelEffort==="string"&&Y.modelEffort.length>0?{modelEffort:Y.modelEffort}:{},createdAt:Y.createdAt,updatedAt:Y.updatedAt}}function PD(J){if(!J||typeof J!=="object"||Array.isArray(J))return;let Y=J;if(!vD(Y.provider)||!mD(Y.lifecycle)||!cD(Y.checkState))return;return{provider:Y.provider,lifecycle:Y.lifecycle,checkState:Y.checkState,...typeof Y.number==="number"&&Number.isFinite(Y.number)?{number:Y.number}:{},...typeof Y.url==="string"?{url:Y.url}:{},...typeof Y.title==="string"?{title:Y.title}:{},...typeof Y.baseRef==="string"?{baseRef:Y.baseRef}:{},...typeof Y.headRef==="string"?{headRef:Y.headRef}:{},...typeof Y.reviewDecision==="string"?{reviewDecision:Y.reviewDecision}:{},...typeof Y.mergeable==="string"?{mergeable:Y.mergeable}:{},...typeof Y.lastCheckedAt==="string"?{lastCheckedAt:Y.lastCheckedAt}:{},...typeof Y.lastError==="string"?{lastError:Y.lastError}:{}}}function vD(J){return J==="github"||J==="gitlab"||J==="bitbucket"||J==="unknown"}function mD(J){return J==="creating"||J==="open"||J==="ready_to_merge"||J==="merged"||J==="closed"||J==="unknown"}function cD(J){return J==="none"||J==="pending"||J==="passing"||J==="failing"||J==="unknown"}function dD(J){return J==="backlog"||J==="in_progress"||J==="in_review"||J==="done"||J==="canceled"||J==="error"}var YZ=3;var IG=S(()=>{SJ();BJ();H9()});function K9(J){let Y=J.auth,Z=Y.kind==="key"?{kind:"key",keyPath:Y.keyPath}:{kind:"password",getPassword:()=>$z(Y.keychainRef)};return{host:J.host,user:J.user,port:J.port,auth:Z,controlPath:cz(J.host,J.user,J.port)}}function SX(J){let Y=wY(J);if(!Y)return new lz;return new CX(K9(Y))}function hY(J){for(let Y of Object.values(lq()))if(J===Y.basePath||J.startsWith(`${Y.basePath}/`))return new CX(K9(Y));return new lz}function U9(J){return J&&HJ(J)?J:void 0}function pz(J){let Y=hY(J);return Y.isRemote||Y.existsSync(J)}function I1(J){return hY(J).isRemote?DY():J}var rJ=S(()=>{n1();O1();wq();vq()});var _z;var L9=S(()=>{_z=class _z extends Error{args;cwd;exitCode;stdout;stderr;constructor(J,Y,Z){super(`git ${J.join(" ")} (cwd=${Y}) exited with code ${Z.exitCode}: ${Z.stderr.trim()||Z.stdout.trim()}`);this.name="GitCommandError",this.args=J,this.cwd=Y,this.exitCode=Z.exitCode,this.stdout=Z.stdout,this.stderr=Z.stderr}}});import{createHash as nD}from"crypto";import M9 from"fs";import kJ from"path";function F9(J){if(!kJ.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return kJ.join(o1(),iD,_D(J))}function O9(J){if(!kJ.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[F9(J),...aD.map((Y)=>kJ.join(J,Y))]}function A9(J,Y){if(!Y||/[/\\\0]/.test(Y))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(Y)}`);return kJ.join(F9(J),Y)}async function R9(J){if(HJ(J)){let Z=wY(J)?.basePath;if(!Z)return[];return SX(J).readdir(g9(Z))}let Y=new Set;for(let Z of O9(J))try{for(let X of M9.readdirSync(Z,{withFileTypes:!0}))if(X.isDirectory())Y.add(X.name)}catch{}return[...Y]}function pq(J,Y){if(!kJ.isAbsolute(J)||!kJ.isAbsolute(Y))return null;let Z=D9(Y);for(let X of O9(J)){let G=D9(X),z=kJ.relative(G,Z);if(z!==""&&!z.startsWith("..")&&!kJ.isAbsolute(z))return X}return null}function C9(J,Y){return pq(J,Y)!==null}function g9(J){return`${pD(J)}/.kobe/worktrees`}function y9(J,Y){if(!Y||/[/\\\0]/.test(Y))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(Y)}`);return`${g9(J)}/${Y}`}function pD(J){return J.length>1&&J.endsWith("/")?J.replace(/\/+$/,""):J}function D9(J){try{return M9.realpathSync(J)}catch{return kJ.resolve(J)}}function _D(J){let Z=(kJ.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",X=nD("sha1").update(kJ.resolve(J)).digest("hex").slice(0,12);return`${Z}-${X}`}var iD="worktrees",lD=".kobe/worktrees",$D=".claude/worktrees",aD;var _q=S(()=>{n1();rJ();O1();aD=[lD,$D]});var I9={};q1(I9,{GitWorktreeManager:()=>rz});import k9 from"fs";import oJ from"path";class rz{execDeps;constructor(J=rD){this.execDeps=J}ctxFor(J){let Y=this.execDeps.remoteBasePath(J);return Y?{exec:this.execDeps.execForRepo(J),dir:Y,remote:!0}:{exec:this.execDeps.execForRepo(J),dir:J,remote:!1}}async runGit(J,Y,Z){if(!Z.cwd)throw Error("runGit(): cwd is required; refusing to inherit from process.cwd()");let X=await J.run(["git",...Y],{cwd:Z.cwd,env:Z.env}),G={stdout:X.stdout,stderr:X.stderr,exitCode:X.exitCode};if(G.exitCode!==0&&!Z.allowFail)throw new _z(Y,Z.cwd,G);return G}async create(J,Y,Z,X){let G=this.ctxFor(J);if(ZZ("repo",G.dir),ZZ("path",Z),!Y)throw Error("create(): branch must be a non-empty string");if(await G.exec.exists(Z)){let B=await this.tryDescribe(G,Z);if(B){if(B.branch!==Y)throw Error(`worktree at ${Z} is on branch '${B.branch}', refusing to hijack to '${Y}'`);return B}throw Error(`create(): ${Z} exists but is not a registered git worktree`)}await G.exec.mkdirp(oJ.dirname(Z));let f=await this.branchExists(G,Y)?["worktree","add",Z,Y]:X?["worktree","add","-b",Y,Z,X]:["worktree","add","-b",Y,Z];await this.runGit(G.exec,f,{cwd:G.dir});let q=await this.tryDescribe(G,Z);if(!q)throw Error(`create(): git reported success but ${Z} is not a worktree`);if(q.branch!==Y)throw Error(`create(): post-condition failed \u2014 expected branch '${Y}' at ${Z}, got '${q.branch}'`);return q}async createForTask(J){let Y=this.execDeps.remoteBasePath(J.repo),Z=Y?y9(Y,J.slug):A9(J.repo,J.slug);return this.create(J.repo,J.branch,Z,J.baseRef)}async remove(J,Y){ZZ("path",J);let Z=this.execDeps.execForPath(J),X=Y?.force===!0;if(!await Z.exists(J)){let f=await this.findRepoFor(Z,J);if(f)await this.runGit(Z,["worktree","prune"],{cwd:f,allowFail:!0});return}let G=await this.findRepoFor(Z,J);if(!G)throw Error(`remove(): ${J} is not a git worktree`);if(!X){if(await this.isDirty(J))throw Error(`remove(): refusing to remove dirty worktree at ${J} (pass { force: true } to override)`)}let z=X?["worktree","remove","--force",J]:["worktree","remove",J];await this.runGit(Z,z,{cwd:G}),await this.runGit(Z,["worktree","prune"],{cwd:G,allowFail:!0})}async list(J){let Y=this.ctxFor(J);ZZ("repo",Y.dir);let Z=await this.runGit(Y.exec,["worktree","list","--porcelain"],{cwd:Y.dir}),X=rq(Z.stdout),G=[];for(let z of X){if(!z.path)continue;let f=Y.remote?S9(Y.dir,z.path):pq(J,z.path);if(!f)continue;if(!z.branch||z.detached)continue;let q=NG(f),B=NG(z.path),j=oJ.relative(q,B),K=oJ.join(f,j),H=await this.isDirty(z.path);G.push({path:K,branch:z.branch,head:z.head??"",dirty:H})}return G}async listAll(J){let Y=this.ctxFor(J);ZZ("repo",Y.dir);let Z=await this.runGit(Y.exec,["worktree","list","--porcelain"],{cwd:Y.dir}),X=rq(Z.stdout),G=Y.remote?Y.dir:NG(Y.dir),z=[];for(let f of X){if(!f.path)continue;if(f.bare)continue;if(!f.branch||f.detached)continue;if((Y.remote?f.path:NG(f.path))===G)continue;let q=await this.isDirty(f.path);z.push({path:f.path,branch:f.branch,head:f.head??"",dirty:q,kobeManaged:Y.remote?S9(Y.dir,f.path)!==null:C9(J,f.path),lastActivityMs:await this.lastActivityMs(Y.exec,f.path)})}return z.sort((f,q)=>q.lastActivityMs-f.lastActivityMs),z}async lastActivityMs(J,Y){try{let Z=await this.runGit(J,["log","-1","--format=%ct"],{cwd:Y}),X=Number.parseInt(Z.stdout.trim(),10);if(Number.isFinite(X)&&X>0)return X*1000}catch{}if(!J.isRemote)try{return k9.statSync(Y).mtimeMs}catch{}return 0}async isDirty(J){ZZ("path",J);let Y=this.execDeps.execForPath(J);return(await this.runGit(Y,["status","--porcelain"],{cwd:J})).stdout.length>0}async currentBranch(J){ZZ("path",J);let Y=this.execDeps.execForPath(J),X=(await this.runGit(Y,["rev-parse","--abbrev-ref","HEAD"],{cwd:J})).stdout.trim();if(!X||X==="HEAD")throw Error(`currentBranch(): ${J} is in detached-HEAD state`);return X}async renameBranch(J,Y,Z){if(ZZ("path",J),Y===Z)return;let X=this.execDeps.execForPath(J),G=await this.findRepoFor(X,J);if(!G)throw Error(`renameBranch(): ${J} is not a git worktree`);await this.runGit(X,["branch","-m",Y,Z],{cwd:G})}async tryDescribe(J,Y){let Z=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),X=rq(Z.stdout),G=(q)=>J.remote?q:NG(q),z=G(Y),f=X.find((q)=>q.path&&G(q.path)===z);if(!f||!f.path||!f.branch||f.detached)return null;return{path:Y,branch:f.branch,head:f.head??"",dirty:await this.isDirty(f.path)}}async branchExists(J,Y){let Z=`refs/heads/${Y}`;return(await this.runGit(J.exec,["show-ref","--verify","--quiet",Z],{cwd:J.dir,allowFail:!0})).exitCode===0}async findRepoFor(J,Y){try{let Z=await this.runGit(J,["rev-parse","--git-common-dir"],{cwd:Y,allowFail:!0});if(Z.exitCode!==0)return null;let X=Z.stdout.trim();if(!X)return null;let G=oJ.isAbsolute(X)?X:oJ.resolve(Y,X);return oJ.basename(G)===".git"?oJ.dirname(G):G}catch(Z){if(Z instanceof _z)return null;throw Z}}}function rq(J){let Y=[],Z=null;for(let X of J.split(`
|
|
15
|
-
`)){let G=X.replace(/\r$/,"");if(G===""){if(Z)Y.push(Z);Z=null;continue}if(!Z)Z={};if(G.startsWith("worktree "))Z.path=G.slice(9);else if(G.startsWith("HEAD "))Z.head=G.slice(5);else if(G.startsWith("branch ")){let z=G.slice(7);Z.branch=z.startsWith("refs/heads/")?z.slice(11):z}else if(G==="detached")Z.detached=!0;else if(G==="bare")Z.bare=!0}if(Z)Y.push(Z);return Y}function S9(J,Y){let Z=`${J.replace(/\/+$/,"")}/.kobe/worktrees`;return Y===Z||Y.startsWith(`${Z}/`)?Z:null}function ZZ(J,Y){if(!Y||!oJ.isAbsolute(Y))throw Error(`${J} must be an absolute path, got: ${JSON.stringify(Y)}`)}function NG(J){try{return k9.realpathSync(J)}catch{return oJ.resolve(J)}}var rD;var oq=S(()=>{rJ();O1();L9();_q();rD={execForRepo:SX,execForPath:hY,remoteBasePath(J){return wY(J)?.basePath??null}}});function N9(J){let Y=String(J),Z=Y.length-1;return x1.context.id+(Z?String.fromCharCode(96+Z):"")+Y}function eq(J){x1.context=J}function oD(){return{...x1.context,id:x1.getNextContextId(),count:0}}function dZ(J,Y){let Z=W1,X=l0,G=J.length===0,z=Y===void 0?X:Y,f=G?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:z?z.context:null,owner:z},q=G?()=>J(()=>{throw Error("Dispose method must be an explicit argument to createRoot function")}):()=>J(()=>l1(()=>XZ(f)));tJ.afterCreateOwner&&tJ.afterCreateOwner(f),l0=f,W1=null;try{return UJ(q,!0)}finally{W1=Z,l0=X}}function p(J,Y){Y=Y?Object.assign({},tz,Y):tz;let Z={value:J,observers:null,observerSlots:null,comparator:Y.equals||void 0};{if(Y.name)Z.name=Y.name;if(Y.internal)Z.internal=!0;else if(v9(Z),tJ.afterCreateSignal)tJ.afterCreateSignal(Z)}let X=(G)=>{if(typeof G==="function")if(B0&&B0.running&&B0.sources.has(Z))G=G(Z.tValue);else G=G(Z.value);return YB(Z,G)};return[m9.bind(Z),X]}function T9(J,Y,Z){let X=uG(J,Y,!0,IJ,Z);if(IX&&B0&&B0.running)d1.push(X);else nZ(X)}function MY(J,Y,Z){let X=uG(J,Y,!1,IJ,Z);if(IX&&B0&&B0.running)d1.push(X);else nZ(X)}function s0(J,Y,Z){P9=qM;let X=uG(J,Y,!1,IJ,Z),G=TG&&NJ(TG);if(G)X.suspense=G;if(!Z||!Z.render)X.user=!0;GJ?GJ.push(X):nZ(X)}function U0(J,Y,Z){Z=Z?Object.assign({},tz,Z):tz;let X=uG(J,Y,!0,0,Z);if(X.observers=null,X.observerSlots=null,X.comparator=Z.equals||void 0,IX&&B0&&B0.running)X.tState=IJ,d1.push(X);else nZ(X);return m9.bind(X)}function ZM(J){return J&&typeof J==="object"&&"then"in J}function ZQ(J,Y,Z){let X,G,z;if(typeof Y==="function")X=J,G=Y,z=Z||{};else X=!0,G=J,z=Y||{};let f=null,q=sq,B=null,j=!1,K=!1,H="initialValue"in z,U=typeof X==="function"&&U0(X),L=new Set,[F,D]=(z.storage||p)(z.initialValue),[A,R]=p(void 0),[l,g]=p(void 0,{equals:!1}),[k,C]=p(H?"ready":"unresolved");if(x1.context){if(B=x1.getNextContextId(),z.ssrLoadFrom==="initial")q=z.initialValue;else if(x1.load&&x1.has(B))q=x1.load(B)}function N(u,Q0,t,j0){if(f===u){if(f=null,j0!==void 0&&(H=!0),(u===q||Q0===q)&&z.onHydrated)queueMicrotask(()=>z.onHydrated(j0,{value:Q0}));if(q=sq,B0&&u&&j)B0.promises.delete(u),j=!1,UJ(()=>{B0.running=!0,_(Q0,t)},!1);else _(Q0,t)}return Q0}function _(u,Q0){UJ(()=>{if(Q0===void 0)D(()=>u);C(Q0!==void 0?"errored":H?"ready":"unresolved"),R(Q0);for(let t of L.keys())t.decrement();L.clear()},!1)}function X0(){let u=TG&&NJ(TG),Q0=F(),t=A();if(t!==void 0&&!f)throw t;if(W1&&!W1.user&&u)T9(()=>{if(l(),f){if(u.resolved&&B0&&j)B0.promises.add(f);else if(!L.has(u))u.increment(),L.add(u)}});return Q0}function s(u=!0){if(u!==!1&&K)return;K=!1;let Q0=U?U():X;if(j=B0&&B0.running,Q0==null||Q0===!1){N(f,l1(F));return}if(B0&&f)B0.promises.delete(f);let t,j0=q!==sq?q:l1(()=>{try{return G(Q0,{value:F(),refetching:u})}catch(S0){t=S0}});if(t!==void 0){N(f,void 0,sz(t),Q0);return}else if(!ZM(j0))return N(f,j0,void 0,Q0),j0;if(f=j0,"v"in j0){if(j0.s===1)N(f,j0.v,void 0,Q0);else N(f,void 0,sz(j0.v),Q0);return j0}return K=!0,queueMicrotask(()=>K=!1),UJ(()=>{C(H?"refreshing":"pending"),g()},!1),j0.then((S0)=>N(j0,S0,void 0,Q0),(S0)=>N(j0,void 0,sz(S0),Q0))}Object.defineProperties(X0,{state:{get:()=>k()},error:{get:()=>A()},loading:{get(){let u=k();return u==="pending"||u==="refreshing"}},latest:{get(){if(!H)return X0();let u=A();if(u&&!f)throw u;return F()}}});let Y0=l0;if(U)T9(()=>(Y0=l0,s(!1)));else s(!1);return[X0,{refetch:(u)=>XM(Y0,()=>s(u)),mutate:D}]}function XQ(J){return UJ(J,!1)}function l1(J){if(!kX&&W1===null)return J();let Y=W1;W1=null;try{if(kX)return kX.untrack(J);return J()}finally{W1=Y}}function LJ(J,Y,Z){let X=Array.isArray(J),G,z=Z&&Z.defer;return(f)=>{let q;if(X){q=Array(J.length);for(let j=0;j<J.length;j++)q[j]=J[j]()}else q=J();if(z)return z=!1,f;let B=l1(()=>Y(q,G,f));return G=q,B}}function s1(J){s0(()=>l1(J))}function P1(J){if(l0===null)console.warn("cleanups created outside a `createRoot` or `render` will never be run");else if(l0.cleanups===null)l0.cleanups=[J];else l0.cleanups.push(J);return J}function GQ(){return W1}function XM(J,Y){let Z=l0,X=W1;l0=J,W1=null;try{return UJ(Y,!0)}catch(G){zQ(G)}finally{l0=Z,W1=X}}function GM(J){if(B0&&B0.running)return J(),B0.done;let Y=W1,Z=l0;return Promise.resolve().then(()=>{W1=Y,l0=Z;let X;if(IX||TG)X=B0||(B0={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),X.done||(X.done=new Promise((G)=>X.resolve=G)),X.running=!0;return UJ(J,!1),W1=l0=null,X?X.done:void 0})}function u9(J,Y){let Z=uG(()=>l1(()=>{return Object.assign(J,{[JM]:!0}),J(Y)}),void 0,!0,0);return Z.props=Y,Z.observers=null,Z.observerSlots=null,Z.name=J.name,Z.component=J,nZ(Z),Z.tValue!==void 0?Z.tValue:Z.value}function v9(J){if(l0){if(l0.sourceMap)l0.sourceMap.push(J);else l0.sourceMap=[J];J.graph=l0}if(tJ.afterRegisterGraph)tJ.afterRegisterGraph(J)}function FY(J,Y){let Z=Symbol("context");return{id:Z,Provider:BM(Z,Y),defaultValue:J}}function NJ(J){let Y;return l0&&l0.context&&(Y=l0.context[J.id])!==void 0?Y:J.defaultValue}function zM(J){let Y=U0(J),Z=U0(()=>JB(Y()),void 0,{name:"children"});return Z.toArray=()=>{let X=Z();return Array.isArray(X)?X:X!=null?[X]:[]},Z}function m9(){let J=B0&&B0.running;if(this.sources&&(J?this.tState:this.state))if((J?this.tState:this.state)===IJ)nZ(this);else{let Y=d1;d1=null,UJ(()=>ez(this),!1),d1=Y}if(W1){let Y=this.observers;if(!Y||Y[Y.length-1]!==W1){let Z=Y?Y.length:0;if(!W1.sources)W1.sources=[this],W1.sourceSlots=[Z];else W1.sources.push(this),W1.sourceSlots.push(Z);if(!Y)this.observers=[W1],this.observerSlots=[W1.sources.length-1];else Y.push(W1),this.observerSlots.push(W1.sources.length-1)}}if(J&&B0.sources.has(this))return this.tValue;return this.value}function YB(J,Y,Z){let X=B0&&B0.running&&B0.sources.has(J)?J.tValue:J.value;if(!J.comparator||!J.comparator(X,Y)){if(B0){let G=B0.running;if(G||!Z&&B0.sources.has(J))B0.sources.add(J),J.tValue=Y;if(!G)J.value=Y}else J.value=Y;if(J.observers&&J.observers.length)UJ(()=>{for(let G=0;G<J.observers.length;G+=1){let z=J.observers[G],f=B0&&B0.running;if(f&&B0.disposed.has(z))continue;if(f?!z.tState:!z.state){if(z.pure)d1.push(z);else GJ.push(z);if(z.observers)d9(z)}if(!f)z.state=IJ;else z.tState=IJ}if(d1.length>1e6){if(d1=[],sD)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return Y}function nZ(J){if(!J.fn)return;XZ(J);let Y=YQ;if(x9(J,B0&&B0.running&&B0.sources.has(J)?J.tValue:J.value,Y),B0&&!B0.running&&B0.sources.has(J))queueMicrotask(()=>{UJ(()=>{B0&&(B0.running=!0),W1=l0=J,x9(J,J.tValue,Y),W1=l0=null},!1)})}function x9(J,Y,Z){let X,G=l0,z=W1;W1=l0=J;try{X=J.fn(Y)}catch(f){if(J.pure)if(B0&&B0.running)J.tState=IJ,J.tOwned&&J.tOwned.forEach(XZ),J.tOwned=void 0;else J.state=IJ,J.owned&&J.owned.forEach(XZ),J.owned=null;return J.updatedAt=Z+1,zQ(f)}finally{W1=z,l0=G}if(!J.updatedAt||J.updatedAt<=Z){if(J.updatedAt!=null&&"observers"in J)YB(J,X,!0);else if(B0&&B0.running&&J.pure){if(!B0.sources.has(J))J.value=X;B0.sources.add(J),J.tValue=X}else J.value=X;J.updatedAt=Z}}function uG(J,Y,Z,X=IJ,G){let z={fn:J,state:X,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:Y,owner:l0,context:l0?l0.context:null,pure:Z};if(B0&&B0.running)z.state=0,z.tState=X;if(l0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if(l0!==YM)if(B0&&B0.running&&l0.pure)if(!l0.tOwned)l0.tOwned=[z];else l0.tOwned.push(z);else if(!l0.owned)l0.owned=[z];else l0.owned.push(z);if(G&&G.name)z.name=G.name;if(kX&&z.fn){let f=z.fn,[q,B]=p(void 0,{equals:!1}),j=kX.factory(f,B);P1(()=>j.dispose());let K,H=()=>GM(B).then(()=>{if(K)K.dispose(),K=void 0});z.fn=(U)=>{if(q(),B0&&B0.running){if(!K)K=kX.factory(f,H);return K.track(U)}return j.track(U)}}return tJ.afterCreateOwner&&tJ.afterCreateOwner(z),z}function EG(J){let Y=B0&&B0.running;if((Y?J.tState:J.state)===0)return;if((Y?J.tState:J.state)===bG)return ez(J);if(J.suspense&&l1(J.suspense.inFallback))return J.suspense.effects.push(J);let Z=[J];while((J=J.owner)&&(!J.updatedAt||J.updatedAt<YQ)){if(Y&&B0.disposed.has(J))return;if(Y?J.tState:J.state)Z.push(J)}for(let X=Z.length-1;X>=0;X--){if(J=Z[X],Y){let G=J,z=Z[X+1];while((G=G.owner)&&G!==z)if(B0.disposed.has(G))return}if((Y?J.tState:J.state)===IJ)nZ(J);else if((Y?J.tState:J.state)===bG){let G=d1;d1=null,UJ(()=>ez(J,Z[0]),!1),d1=G}}}function UJ(J,Y){if(d1)return J();let Z=!1;if(!Y)d1=[];if(GJ)Z=!0;else GJ=[];YQ++;try{let X=J();return QM(Z),X}catch(X){if(!Z)GJ=null;d1=null,zQ(X)}}function QM(J){if(d1){if(IX&&B0&&B0.running)fM(d1);else c9(d1);d1=null}if(J)return;let Y;if(B0){if(!B0.promises.size&&!B0.queue.size){let{sources:X,disposed:G}=B0;GJ.push.apply(GJ,B0.effects),Y=B0.resolve;for(let z of GJ)"tState"in z&&(z.state=z.tState),delete z.tState;B0=null,UJ(()=>{for(let z of G)XZ(z);for(let z of X){if(z.value=z.tValue,z.owned)for(let f=0,q=z.owned.length;f<q;f++)XZ(z.owned[f]);if(z.tOwned)z.owned=z.tOwned;delete z.tValue,delete z.tOwned,z.tState=0}E9(!1)},!1)}else if(B0.running){B0.running=!1,B0.effects.push.apply(B0.effects,GJ),GJ=null,E9(!0);return}}let Z=GJ;if(GJ=null,Z.length)UJ(()=>P9(Z),!1);else tJ.afterUpdate&&tJ.afterUpdate();if(Y)Y()}function c9(J){for(let Y=0;Y<J.length;Y++)EG(J[Y])}function fM(J){for(let Y=0;Y<J.length;Y++){let Z=J[Y],X=B0.queue;if(!X.has(Z))X.add(Z),IX(()=>{X.delete(Z),UJ(()=>{B0.running=!0,EG(Z)},!1),B0&&(B0.running=!1)})}}function qM(J){let Y,Z=0;for(Y=0;Y<J.length;Y++){let X=J[Y];if(!X.user)EG(X);else J[Z++]=X}if(x1.context){if(x1.count){x1.effects||(x1.effects=[]),x1.effects.push(...J.slice(0,Z));return}eq()}if(x1.effects&&(x1.done||!x1.count))J=[...x1.effects,...J],Z+=x1.effects.length,delete x1.effects;for(Y=0;Y<Z;Y++)EG(J[Y])}function ez(J,Y){let Z=B0&&B0.running;if(Z)J.tState=0;else J.state=0;for(let X=0;X<J.sources.length;X+=1){let G=J.sources[X];if(G.sources){let z=Z?G.tState:G.state;if(z===IJ){if(G!==Y&&(!G.updatedAt||G.updatedAt<YQ))EG(G)}else if(z===bG)ez(G,Y)}}}function d9(J){let Y=B0&&B0.running;for(let Z=0;Z<J.observers.length;Z+=1){let X=J.observers[Z];if(Y?!X.tState:!X.state){if(Y)X.tState=bG;else X.state=bG;if(X.pure)d1.push(X);else GJ.push(X);X.observers&&d9(X)}}}function XZ(J){let Y;if(J.sources)while(J.sources.length){let Z=J.sources.pop(),X=J.sourceSlots.pop(),G=Z.observers;if(G&&G.length){let z=G.pop(),f=Z.observerSlots.pop();if(X<G.length)z.sourceSlots[f]=X,G[X]=z,Z.observerSlots[X]=f}}if(J.tOwned){for(Y=J.tOwned.length-1;Y>=0;Y--)XZ(J.tOwned[Y]);delete J.tOwned}if(B0&&B0.running&&J.pure)n9(J,!0);else if(J.owned){for(Y=J.owned.length-1;Y>=0;Y--)XZ(J.owned[Y]);J.owned=null}if(J.cleanups){for(Y=J.cleanups.length-1;Y>=0;Y--)J.cleanups[Y]();J.cleanups=null}if(B0&&B0.running)J.tState=0;else J.state=0;delete J.sourceMap}function n9(J,Y){if(!Y)J.tState=0,B0.disposed.add(J);if(J.owned)for(let Z=0;Z<J.owned.length;Z++)n9(J.owned[Z])}function sz(J){if(J instanceof Error)return J;return Error(typeof J==="string"?J:"Unknown error",{cause:J})}function w9(J,Y,Z){try{for(let X of Y)X(J)}catch(X){zQ(X,Z&&Z.owner||null)}}function zQ(J,Y=l0){let Z=b9&&Y&&Y.context&&Y.context[b9],X=sz(J);if(!Z)throw X;if(GJ)GJ.push({fn(){w9(X,Z,Y)},state:IJ});else w9(X,Z,Y)}function JB(J){if(typeof J==="function"&&!J.length)return JB(J());if(Array.isArray(J)){let Y=[];for(let Z=0;Z<J.length;Z++){let X=JB(J[Z]);if(Array.isArray(X))if(X.length<32768)Y.push.apply(Y,X);else for(let G=0;G<X.length;G++)Y.push(X[G]);else Y.push(X)}return Y}return J}function BM(J,Y){return function(X){let G;return MY(()=>G=l1(()=>{return l0.context={...l0.context,[J]:X.value},zM(()=>X.children)}),void 0,Y),G}}function h9(J){for(let Y=0;Y<J.length;Y++)J[Y]()}function HM(J,Y,Z={}){let X=[],G=[],z=[],f=0,q=Y.length>1?[]:null;return P1(()=>h9(z)),()=>{let B=J()||[],j=B.length,K,H;return B[JQ],l1(()=>{let L,F,D,A,R,l,g,k,C;if(j===0){if(f!==0)h9(z),z=[],X=[],G=[],f=0,q&&(q=[]);if(Z.fallback)X=[jM],G[0]=dZ((N)=>{return z[0]=N,Z.fallback()}),f=1}else if(f===0){G=Array(j);for(H=0;H<j;H++)X[H]=B[H],G[H]=dZ(U);f=j}else{D=Array(j),A=Array(j),q&&(R=Array(j));for(l=0,g=Math.min(f,j);l<g&&X[l]===B[l];l++);for(g=f-1,k=j-1;g>=l&&k>=l&&X[g]===B[k];g--,k--)D[k]=G[g],A[k]=z[g],q&&(R[k]=q[g]);L=new Map,F=Array(k+1);for(H=k;H>=l;H--)C=B[H],K=L.get(C),F[H]=K===void 0?-1:K,L.set(C,H);for(K=l;K<=g;K++)if(C=X[K],H=L.get(C),H!==void 0&&H!==-1)D[H]=G[K],A[H]=z[K],q&&(R[H]=q[K]),H=F[H],L.set(C,H);else z[K]();for(H=l;H<j;H++)if(H in D){if(G[H]=D[H],z[H]=A[H],q)q[H]=R[H],q[H](H)}else G[H]=dZ(U);G=G.slice(0,f=j),X=B.slice(0)}return G});function U(L){if(z[H]=L,q){let[F,D]=p(H,{name:"index"});return q[H]=D,Y(B[H],F)}return Y(B[H])}}}function i9(J,Y){if(WM){if(x1.context){let Z=x1.context;eq(oD());let X=u9(J,Y||{});return eq(Z),X}}return u9(J,Y||{})}function oz(){return!0}function tq(J){return!(J=typeof J==="function"?J():J)?{}:J}function KM(){for(let J=0,Y=this.length;J<Y;++J){let Z=this[J]();if(Z!==void 0)return Z}}function QQ(...J){let Y=!1;for(let f=0;f<J.length;f++){let q=J[f];Y=Y||!!q&&sJ in q,J[f]=typeof q==="function"?(Y=!0,U0(q)):q}if(eD&&Y)return new Proxy({get(f){for(let q=J.length-1;q>=0;q--){let B=tq(J[q])[f];if(B!==void 0)return B}},has(f){for(let q=J.length-1;q>=0;q--)if(f in tq(J[q]))return!0;return!1},keys(){let f=[];for(let q=0;q<J.length;q++)f.push(...Object.keys(tq(J[q])));return[...new Set(f)]}},VM);let Z={},X=Object.create(null);for(let f=J.length-1;f>=0;f--){let q=J[f];if(!q)continue;let B=Object.getOwnPropertyNames(q);for(let j=B.length-1;j>=0;j--){let K=B[j];if(K==="__proto__"||K==="constructor")continue;let H=Object.getOwnPropertyDescriptor(q,K);if(!X[K])X[K]=H.get?{enumerable:!0,configurable:!0,get:KM.bind(Z[K]=[H.get.bind(q)])}:H.value!==void 0?H:void 0;else{let U=Z[K];if(U){if(H.get)U.push(H.get.bind(q));else if(H.value!==void 0)U.push(()=>H.value)}}}}let G={},z=Object.keys(X);for(let f=z.length-1;f>=0;f--){let q=z[f],B=X[q];if(B&&B.get)Object.defineProperty(G,q,B);else G[q]=B?B.value:void 0}return G}function X1(J){let Y="fallback"in J&&{fallback:()=>J.fallback};return U0(HM(()=>J.each,J.children,Y||void 0),void 0,{name:"value"})}function z0(J){let Y=J.keyed,Z=U0(()=>J.when,void 0,{name:"condition value"}),X=Y?Z:U0(Z,void 0,{equals:(G,z)=>!G===!z,name:"condition"});return U0(()=>{let G=X();if(G){let z=J.children;return typeof z==="function"&&z.length>0?l1(()=>z(Y?G:()=>{if(!l1(X))throw UM("Show");return Z()})):z}return J.fallback},void 0,{name:"value"})}var x1,sD=!0,tD=(J,Y)=>J===Y,sJ,eD,JQ,JM,tz,b9=null,P9,IJ=1,bG=2,YM,sq,l0=null,B0=null,IX=null,kX=null,W1=null,d1=null,GJ=null,YQ=0,tJ,_N,E9,TG,jM,WM=!1,VM,UM=(J)=>`Attempting to access a stale value from <${J}> that could possibly be undefined. This may occur because you are reading the accessor returned from the component at a time where it has already been unmounted. We recommend cleaning up any stale timers or async, or reading from the initial condition.`,l9;var B1=S(()=>{x1={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return N9(this.context.count)},getNextContextId(){return N9(this.context.count++)}};sJ=Symbol("solid-proxy"),eD=typeof Proxy==="function",JQ=Symbol("solid-track"),JM=Symbol("solid-dev-component"),tz={equals:tD},P9=c9,YM={},sq={},tJ={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[_N,E9]=p(!1);jM=Symbol("fallback");VM={get(J,Y,Z){if(Y===sJ)return Z;return J.get(Y)},has(J,Y){if(Y===sJ)return!0;return J.has(Y)},set:oz,deleteProperty:oz,getOwnPropertyDescriptor(J,Y){return{configurable:!0,enumerable:!0,get(){return J.get(Y)},set:oz,deleteProperty:oz}},ownKeys(J){return J.keys()}};l9={hooks:tJ,writeSignal:YB,registerGraph:v9};if(globalThis)if(!globalThis.Solid$$)globalThis.Solid$$=!0;else console.warn("You appear to have multiple instances of Solid. This can lead to unexpected behavior.")});function LM(J,Y){switch((J??"").toUpperCase()){case"MERGED":return"merged";case"CLOSED":return"closed";case"OPEN":return(Y??"").toUpperCase()==="APPROVED"?"ready_to_merge":"open";default:return"unknown"}}function DM(J){let Y=(J.status??"").toUpperCase(),Z=(J.conclusion??"").toUpperCase(),X=(J.state??"").toUpperCase();if(Y&&Y!=="COMPLETED")return"pending";if(Z){if(Z==="SUCCESS"||Z==="NEUTRAL"||Z==="SKIPPED")return"passing";return"failing"}if(X==="SUCCESS")return"passing";if(X==="PENDING"||X==="EXPECTED")return"pending";if(X==="FAILURE"||X==="ERROR")return"failing";return"unknown"}function MM(J){if(!J||J.length===0)return"none";let Y=!1,Z=!1;for(let X of J){let G=DM(X);if(G==="failing")return"failing";if(G==="pending")Y=!0;else if(G==="passing")Z=!0}if(Y)return"pending";if(Z)return"passing";return"unknown"}function a9(J,Y){if(!J||typeof J.number!=="number")return null;return{provider:"github",lifecycle:LM(J.state,J.reviewDecision),checkState:MM(J.statusCheckRollup),number:J.number,url:J.url,title:J.title,baseRef:J.baseRefName,headRef:J.headRefName,reviewDecision:J.reviewDecision||void 0,mergeable:J.mergeable||void 0,lastCheckedAt:Y}}function fQ(J,Y){if(J===Y)return!0;if(!J||!Y)return!1;return J.provider===Y.provider&&J.lifecycle===Y.lifecycle&&J.checkState===Y.checkState&&J.number===Y.number&&J.url===Y.url&&J.title===Y.title&&J.baseRef===Y.baseRef&&J.headRef===Y.headRef&&J.reviewDecision===Y.reviewDecision&&J.mergeable===Y.mergeable}var $9="number,url,title,state,baseRefName,headRefName,reviewDecision,mergeable,statusCheckRollup";var ZB,XB,GB,zB="DIRTY_WORKTREE",QB,fB;var qB=S(()=>{ZB=class ZB extends Error{from;to;taskId;constructor(J,Y,Z){super(`illegal transition for task ${Z}: ${J} -> ${Y}`);this.from=J;this.to=Y;this.taskId=Z;this.name="IllegalTransitionError"}};XB=class XB extends Error{constructor(J){super(`task not found: ${J}`);this.name="TaskNotFoundError"}};GB=class GB extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};QB=class QB extends Error{taskId;constructor(J){super(`${zB}: task ${J} worktree has uncommitted or untracked changes`);this.taskId=J;this.name="DirtyWorktreeError"}};fB=class fB extends Error{taskId;cause;constructor(J,Y){super(`failed to remove worktree for task ${J}: ${Y instanceof Error?Y.message:String(Y)}`);this.taskId=J;this.cause=Y;this.name="WorktreeRemoveFailedError"}}});function p9(J){if(typeof J!=="string")return"";let Y=J.replace(/\s+/g," ").trim();if(Y.length===0)return"";let Z=[...Y];if(Z.length<=40)return Y;return`${Z.slice(0,40).join("")}\u2026`}function qQ(J,Y){let Z=J.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,32),X=Y.slice(-6).toLowerCase();return`kobe/${Z||"task"}-${X}`}var _9;var r9=S(()=>{_9=["aardvark","addax","adder","agouti","albatross","alpaca","anaconda","anchovy","anglerfish","anole","anteater","antelope","ape","argali","armadillo","avocet","axolotl","baboon","badger","banteng","barracuda","basilisk","bass","bat","beagle","bear","beaver","bee","beetle","beluga","betta","bison","blackbird","blenny","bluebird","bluegill","boar","bobcat","bonito","bovid","buffalo","bullfrog","bunting","bushbuck","butterfly","buzzard","caiman","camel","canary","capybara","caracal","cardinal","caribou","carp","cassowary","caterpillar","catfish","chameleon","chamois","char","cheetah","chickadee","chimp","chinchilla","chipmunk","chough","cicada","civet","clam","clownfish","cobra","cockatoo","condor","coot","copperhead","coral","cormorant","cougar","coyote","crab","crane","crawfish","crayfish","cricket","crocodile","crow","cuckoo","curlew","cuttlefish","deer","dikdik","dingo","dolphin","donkey","dormouse","dotterel","dove","dragonfly","dromedary","duck","dugong","dunlin","eagle","echidna","eel","egret","eider","eland","elephant","elk","emu","ermine","falcon","fawn","ferret","finch","firefly","flamingo","flounder","fox","frog","gadwall","gannet","gaur","gazelle","gecko","gemsbok","gerbil","gharial","gibbon","gnu","goat","goby","godwit","goldfish","goose","gopher","goral","gorilla","goshawk","grackle","grasshopper","grayling","grebe","grouse","guanaco","guillemot","guineafowl","guppy","halibut","hammerhead","hamster","hare","harrier","hartebeest","hawk","hedgehog","heron","herring","hippo","hornbill","hornet","horse","hummingbird","hyena","ibex","ibis","iguana","impala","indri","jacana","jackal","jaguar","jay","jellyfish","jerboa","junco","kakapo","kangaroo","kestrel","killdeer","kingfisher","kinglet","kite","kiwi","koala","kookaburra","krait","krill","kudu","ladybug","lamprey","langur","lapwing","lark","lemming","lemur","leopard","limpet","lion","lionfish","lizard","llama","lobster","locust","loon","lorikeet","loris","lynx","macaque","macaw","mackerel","magpie","mallard","mamba","mammoth","manatee","mandrill","manta","mantis","marlin","marmoset","marmot","marten","meerkat","merganser","mink","minnow","mole","mongoose","monitor","monkey","moose","moth","mouflon","mouse","mudpuppy","mule","muntjac","musk","muskox","muskrat","mussel","mustang","narwhal","newt","nightingale","numbat","nuthatch","nyala","ocelot","octopus","okapi","opossum","orangutan","orca","oriole","oryx","osprey","ostrich","otter","owl","oyster","oystercatcher","paca","panda","pangolin","panther","parakeet","parrot","parrotfish","partridge","peafowl","pelican","penguin","perch","petrel","pheasant","pigeon","pika","pike","pintail","pipefish","platypus","plover","pollock","pony","porcupine","porpoise","possum","ptarmigan","puffin","puma","pupfish","python","quail","quetzal","quokka","quoll","rabbit","raccoon","rail","rat","rattler","raven","ray","redpoll","reindeer","remora","rhino","roadrunner","robin","rook","sable","sailfish","salamander","salmon","sandpiper","sardine","scallop","scaup","scorpion","seahorse","seal","serval","shark","shearwater","shrew","shrike","shrimp","siskin","sitatunga","skate","skink","skua","skunk","sloth","smelt","snail","snipe","solenodon","sparrow","spider","springbok","squid","squirrel","starfish","starling","stilt","stingray","stoat","stork","sunbird","sunfish","swallow","swan","swift","swordfish","tahr","takin","tamarin","tanager","tapir","tarantula","tarpon","tarsier","teal","tenrec","terrapin","tern","tetra","thrasher","thrush","tiger","toad","tortoise","toucan","treecreeper","treefrog","trout","tuatara","tuna","turkey","turtle","urchin","urial","vicuna","viper","vole","vulture","wagtail","wallaby","walleye","walrus","warbler","warthog","waterbuck","weasel","wildebeest","wolf","wolverine","wombat","woodcock","woodpecker","wrasse","wren","yak","zebra","zebu","zorilla"]});class BB{activeSlugs;random;pool;pendingByRepo=new Map;chain=Promise.resolve();constructor(J,Y={}){this.activeSlugs=J;if(this.random=Y.random??Math.random,this.pool=Y.pool??_9,this.pool.length===0)throw Error("SlugAllocator: animal pool cannot be empty")}async allocate(J){let Y=this.chain,Z;this.chain=new Promise((X)=>{Z=X}),await Y;try{return await this.pickLocked(J)}finally{Z()}}commit(J,Y){this.deletePending(J,Y)}cancel(J,Y){this.deletePending(J,Y)}async pickLocked(J){let Y=await this.occupiedSlugs(J),Z=this.pool.filter((G)=>!Y.has(G));if(Z.length>0){let G=Z[Math.floor(this.random()*Z.length)];return this.addPending(J,G),G}let X=this.pool[Math.floor(this.random()*this.pool.length)];for(let G=2;;G++){let z=`${X}-v${G}`;if(!Y.has(z))return this.addPending(J,z),z}}async occupiedSlugs(J){let Y=new Set(this.pendingByRepo.get(J)??[]);for(let Z of this.activeSlugs(J))if(Z)Y.add(Z);for(let Z of await R9(J))Y.add(Z);return Y}addPending(J,Y){let Z=this.pendingByRepo.get(J);if(!Z)Z=new Set,this.pendingByRepo.set(J,Z);Z.add(Y)}deletePending(J,Y){let Z=this.pendingByRepo.get(J);if(!Z)return;if(Z.delete(Y),Z.size===0)this.pendingByRepo.delete(J)}}var o9=S(()=>{r9();_q()});var e9={};q1(e9,{PLACEHOLDER_TASK_TITLE:()=>OY,Orchestrator:()=>BQ});import{realpathSync as FM}from"fs";import{basename as OM,resolve as AM}from"path";function s9(J){return wY(J)?.basePath??J}class BQ{store;worktrees;slugs;tasksAcc;setTasks;activeTaskAcc;setActiveTaskSig;unsubscribeStore;worktreeLocks=new Map;mainTaskLocks=new Map;constructor(J){this.store=J.store,this.worktrees=J.worktrees,this.slugs=new BB((z)=>this.store.list().filter((f)=>f.repo===z&&f.kind!=="main").map((f)=>{return f.worktreePath.match(/([^/\\]+)[/\\]*$/)?.[1]??""}).filter((f)=>f.length>0));let[Y,Z]=p(this.store.list());this.tasksAcc=Y,this.setTasks=(z)=>Z(()=>z);let[X,G]=p(null);this.activeTaskAcc=X,this.setActiveTaskSig=(z)=>G(()=>z),this.unsubscribeStore=this.store.subscribe((z)=>{this.setTasks(z.slice())})}async init(){}activeTaskSignal(){return this.activeTaskAcc}async setActiveTask(J){let Y=J===null?null:String(J);if(this.setActiveTaskSig(Y),Y&&this.store.get(Y))await this.store.update(Y,{})}tasksSignal(){return this.tasksAcc}subscribeTasks(J){return this.store.subscribe(J)}dispose(){this.unsubscribeStore()}listTasks(){return this.store.list()}getTask(J){return this.store.get(J)}async createTask(J){if(!J.repo)throw Error("createTask: repo is required");let Y=(J.title??OY).trim()||OY,Z=await this.store.create({repo:J.repo,title:Y,branch:J.branch??"",worktreePath:"",status:"backlog",kind:"task",vendor:J.vendor??k1,...J.modelEffort?{modelEffort:J.modelEffort}:{}});if(J.baseRef)this.pendingBaseRefs.set(Z.id,J.baseRef);return Z}async ensureMainTask(J){let{repo:Y,key:Z}=t9(J),X=this.store.list().find((f)=>f.kind==="main"&&t9(f.repo).key===Z);if(X)return X;let G=this.mainTaskLocks.get(Z);if(G)return G;let z=(async()=>{return await this.store.create({repo:Y,title:RM(Y),branch:"",worktreePath:s9(Y),status:"backlog",kind:"main",vendor:k1})})();this.mainTaskLocks.set(Z,z);try{return await z}finally{this.mainTaskLocks.delete(Z)}}async ensureWorktree(J){let Y=this.requireTask(J);if(Y.kind==="main")return s9(Y.repo);if(Y.worktreePath)return Y.worktreePath;let Z=this.worktreeLocks.get(Y.id);if(Z)return await Z,this.requireTask(Y.id).worktreePath;let X=(async()=>{let z=await this.slugs.allocate(Y.repo);try{let f=Y.branch||qQ(Y.title,Y.id),q=this.pendingBaseRefs.get(Y.id),B=await this.worktrees.createForTask({repo:Y.repo,slug:z,branch:f,baseRef:q});this.slugs.commit(Y.repo,z),this.pendingBaseRefs.delete(Y.id),await this.store.update(Y.id,{worktreePath:B.path,branch:f})}catch(f){throw this.slugs.cancel(Y.repo,z),f}})();this.worktreeLocks.set(Y.id,X);try{await X}finally{this.worktreeLocks.delete(Y.id)}return this.requireTask(Y.id).worktreePath}async setTitle(J,Y){let Z=Y.trim();if(!Z)throw Error("setTitle: title is required (empty or whitespace-only rejected)");let X=this.requireTask(J);if(X.title===Z)return;await this.store.update(X.id,{title:Z}),await this.followBranchToTitle(X,Z)}async followBranchToTitle(J,Y){if(J.kind==="main"||!J.worktreePath)return;if(J.branch!==qQ(OY,J.id))return;let Z=qQ(Y,J.id);if(Z===J.branch)return;try{await this.setBranch(J.id,Z)}catch(X){console.error(`[kobe] follow-branch-to-title failed for ${J.id}:`,X)}}async setBranch(J,Y){let Z=Y.trim();if(!Z)throw Error("setBranch: branch is required (empty or whitespace-only rejected)");let X=this.requireTask(J);if(X.kind==="main")throw Error("setBranch: a main task tracks the repo's own branch; rename it with git directly");if(X.branch===Z)return;if(X.worktreePath)await this.worktrees.renameBranch(X.worktreePath,X.branch,Z);await this.store.update(X.id,{branch:Z})}async setVendor(J,Y){let Z=this.requireTask(J);if(Z.vendor===Y)return;await this.store.update(Z.id,{vendor:Y})}async setPinned(J,Y){let Z=this.requireTask(J);if(Z.kind==="main")return;let X=Y??!Z.pinned;if((Z.pinned??!1)===X)return;await this.store.update(Z.id,{pinned:X})}async moveTask(J,Y){let Z=this.requireTask(J);if(Z.kind==="main")return;let X=this.store.list().filter((G)=>(G.kind??"task")!=="main"&&G.archived===Z.archived&&(G.pinned??!1)===(Z.pinned??!1)).map((G)=>String(G.id));await this.store.move(Z.id,Y,X)}async setArchived(J,Y){let Z=this.requireTask(J);if(Z.kind==="main")return;let X=Y??!Z.archived;if(Z.archived===X)return;await this.store.update(Z.id,{archived:X})}async reorderTasks(J){if(J.length===0)return;for(let Y of J){if(this.requireTask(Y.taskId).kind==="main")throw Error(`cannot reorder a main task: ${Y.taskId}`);if(!Number.isFinite(Y.position))throw Error(`position must be a finite number: ${Y.taskId}`)}await this.store.reorder(J.map((Y)=>({id:Y.taskId,position:Y.position})))}async setStatus(J,Y){let Z=this.requireTask(J);if(Z.status===Y)return;if(Z.status==="done"&&Y==="error"||Z.status==="error"&&Y==="done")throw new ZB(Z.status,Y,Z.id);await this.store.update(Z.id,{status:Y})}async setPRStatus(J,Y){let Z=this.requireTask(J);if(fQ(Z.prStatus,Y??void 0))return;await this.store.update(Z.id,{prStatus:Y??void 0})}async deleteTask(J,Y){let Z=this.store.get(J);if(!Z)return;if(Z.kind==="main")throw new GB;let X=Y?.force===!0;if(Z.worktreePath){if(!X){let G=!1;try{G=await this.worktrees.isDirty(Z.worktreePath)}catch{}if(G)throw new QB(Z.id)}try{await this.worktrees.remove(Z.worktreePath,{force:X})}catch(G){throw new fB(Z.id,G)}}await this.store.remove(Z.id),this.pendingBaseRefs.delete(Z.id),this.worktreeLocks.delete(Z.id)}async discoverAdoptableWorktrees(J){if(!J)throw Error("discoverAdoptableWorktrees: repo is required");let Y=await this.worktrees.listAll(J),Z=new Set(this.store.list().filter((X)=>X.worktreePath).map((X)=>NX(X.worktreePath)));return Y.filter((X)=>!Z.has(NX(X.path)))}async adoptWorktree(J){if(!J.repo)throw Error("adoptWorktree: repo is required");if(!J.worktreePath)throw Error("adoptWorktree: worktreePath is required");let Y=NX(J.worktreePath),Z=this.adoptLocks.get(Y);if(Z)return Z;let X=this.adoptWorktreeLocked(J,Y);this.adoptLocks.set(Y,X);try{return await X}finally{this.adoptLocks.delete(Y)}}async adoptWorktreeLocked(J,Y){let Z=this.store.list().find((q)=>q.worktreePath&&NX(q.worktreePath)===Y);if(Z){if(J.ifExists==="return")return Z;throw Error(`adoptWorktree: ${J.worktreePath} is already adopted as a task`)}let G=(await this.worktrees.listAll(J.repo)).find((q)=>NX(q.path)===Y);if(!G)throw Error(`adoptWorktree: ${J.worktreePath} is not an adoptable git worktree of ${J.repo} (unknown, detached, or the main checkout)`);let z=J.branch?.trim()||G.branch,f=(J.title??OM(G.path)).trim()||OY;return this.store.create({repo:J.repo,title:f,branch:z,worktreePath:G.path,status:"backlog",kind:"task",vendor:J.vendor??k1})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(J){let Y=this.store.get(J);if(!Y)throw new XB(String(J));return Y}}function RM(J){let Y=J.split(/[/\\]/).filter(Boolean);return Y.length>0?Y[Y.length-1]??J:J}function t9(J){let Y=uY(J);return{repo:Y,key:HJ(Y)?Y:NX(Y)}}function NX(J){try{return FM(J)}catch{return AM(J)}}var OY="(new task)";var xG=S(()=>{B1();O1();SJ();qB();o9()});function jQ(J){return J.remoteVersion>=J.localMin&&J.localVersion>=J.remoteMin}function J7(J,Y){if(!J)return!1;return J!==Y}function gM(J){return typeof J==="string"&&CM.has(J)}function Y7(J){if(!Array.isArray(J))return null;let Y=new Set;for(let Z of J)if(gM(Z))Y.add(Z);return Y.size>0?Y:null}function eJ(J){return{id:J.id,title:J.title,repo:J.repo,branch:J.branch,worktreePath:J.worktreePath,kind:J.kind??"task",status:J.status,archived:J.archived,pinned:J.pinned??!1,vendor:J.vendor,prStatus:J.prStatus,position:J.position,modelEffort:J.modelEffort,createdAt:J.createdAt,updatedAt:J.updatedAt}}function wG(J){return`${JSON.stringify(J)}
|
|
16
|
-
`}var
|
|
17
|
-
`}function
|
|
18
|
-
`)}catch{}}function
|
|
19
|
-
`);while(
|
|
20
|
-
`)}}onLine(
|
|
21
|
-
`).map((G)=>G.trim()).filter(Boolean)[0];if(!
|
|
22
|
-
`).map((G)=>G.trim()).filter(Boolean)[0];if(!
|
|
23
|
-
`).map((G)=>G.trim()).filter(Boolean)[0];if(!
|
|
24
|
-
`)){let G=
|
|
25
|
-
`);if(
|
|
26
|
-
`)}return[G,
|
|
27
|
-
`)}function
|
|
28
|
-
`)}catch{}}}var
|
|
13
|
+
`});function k9(f){return typeof f==="string"&&FM.includes(f)}var hG=(f)=>f,yf="claude",FM;var S1=C(()=>{FM=["backlog","in_progress","in_review","done","canceled","error"]});function OM(f,J){let Y="",z=f;for(let G=J-1;G>=0;G--){let Z=z%32;Y="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Z]+Y,z=(z-Z)/32}return Y}function b9(f){let J=new Uint8Array(f);crypto.getRandomValues(J);let Y=Array(f);for(let z=0;z<f;z++)Y[z]=(J[z]??0)&31;return Y}function AM(f){for(let J=f.length-1;J>=0;J--){let Y=f[J]??0;if(Y<31)return f[J]=Y+1,!0;f[J]=0}return!1}function gM(f){let J="";for(let Y of f)J+="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Y]??"0";return J}function S9(f=Date.now()){let J;if(f===N9){let Y=y9.slice();if(!AM(Y))J=b9(16);else J=Y}else J=b9(16);return N9=f,y9=J,OM(f,10)+gM(J)}var N9=-1,y9;var I9=C(()=>{y9=Array(16).fill(0)});var JH={};jf(JH,{TaskIndexStore:()=>Iz});import{mkdir as RM,open as CM,readFile as kM,rename as NM,unlink as T9}from"fs/promises";import{homedir as yM}from"os";import{dirname as bM,join as u9}from"path";class Iz{homeDir;kobeDir;path;tmpPath;cache={version:XY,tasks:[]};loaded=!1;listeners=new Set;saveChain=Promise.resolve();constructor(f={}){this.homeDir=f.homeDir??yM(),this.kobeDir=u9(this.homeDir,".kobe"),this.path=u9(this.kobeDir,"tasks.json"),this.tmpPath=`${this.path}.tmp`}subscribe(f){if(this.listeners.add(f),this.loaded)try{f(this.cache.tasks.slice())}catch(J){console.error("[kobe TaskIndexStore] listener threw on subscribe:",J)}return()=>{this.listeners.delete(f)}}get filePath(){return this.path}get stateDir(){return this.kobeDir}async load(){let f;try{f=await kM(this.path,"utf8")}catch(Y){if(Y.code==="ENOENT")return this.cache={version:XY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot();throw Y}let J;try{J=JSON.parse(f)}catch(Y){return console.warn(`[kobe] tasks.json at ${this.path} is corrupted (${Y.message}); recovering with empty index. The stale file is left in place.`),this.cache={version:XY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot()}return this.cache=SM(J,this.path),this.loaded=!0,this.notifyListeners(),this.snapshot()}async save(){this.assertLoaded();let f=this.saveChain.then(()=>this.doSave());return this.saveChain=f.catch(()=>{}),f}async doSave(){await RM(bM(this.path),{recursive:!0});let f=this.snapshot(),J=`${JSON.stringify(f,null,2)}
|
|
14
|
+
`,Y=await CM(this.tmpPath,"w",420);try{await Y.writeFile(J,"utf8"),await Y.sync()}finally{await Y.close()}await NM(this.tmpPath,this.path)}get(f){return this.assertLoaded(),this.cache.tasks.find((J)=>J.id===f)}list(){return this.assertLoaded(),this.cache.tasks.slice()}async create(f){this.assertLoaded();let J=new Date().toISOString(),Y={archived:!1,vendor:f.vendor??yf,...f,id:hG(S9()),createdAt:J,updatedAt:J};return this.cache.tasks.push(Y),await this.save(),this.notifyListeners(),Y}async update(f,J){this.assertLoaded();let Y=this.cache.tasks.findIndex((H)=>H.id===f);if(Y<0)throw Error(`task not found: ${f}`);let z=this.cache.tasks[Y];if(!z)throw Error(`task not found: ${f}`);let{id:G,createdAt:Z,...q}=J,Q={...z,...q,id:z.id,createdAt:z.createdAt,updatedAt:new Date().toISOString()};return this.cache.tasks[Y]=Q,await this.save(),this.notifyListeners(),Q}async move(f,J,Y){this.assertLoaded();let z=this.cache.tasks.find((L)=>L.id===f);if(!z)throw Error(`task not found: ${f}`);let G=Y?.length?Y:this.cache.tasks.map((L)=>L.id),Z=G.indexOf(String(f));if(Z<0)throw Error(`task not movable in current group: ${f}`);let q=G[Z+J];if(!q)return z;let Q=this.cache.tasks.findIndex((L)=>L.id===f),H=this.cache.tasks.findIndex((L)=>L.id===q);if(Q<0||H<0||Q===H)return z;let[B]=this.cache.tasks.splice(Q,1);if(!B)return z;let V=Q<H?H-1:H,j=J>0?V+1:V,U={...B,updatedAt:new Date().toISOString()};return this.cache.tasks.splice(j,0,U),await this.save(),this.notifyListeners(),U}async reorder(f){this.assertLoaded();let J=f.map((G)=>{let Z=this.cache.tasks.findIndex((Q)=>Q.id===G.id);if(!(Z>=0?this.cache.tasks[Z]:void 0))throw Error(`task not found: ${G.id}`);return{idx:Z,position:G.position}}),Y=!1,z=new Map;for(let{idx:G,position:Z}of J){let q=this.cache.tasks[G];if(!q||q.position===Z)continue;if(!z.has(G))z.set(G,q);this.cache.tasks[G]={...q,position:Z},Y=!0}if(!Y)return;try{await this.save()}catch(G){for(let[Z,q]of z)this.cache.tasks[Z]=q;throw G}this.notifyListeners()}async archive(f,J="done"){return this.update(f,{status:J})}async remove(f){this.assertLoaded();let J=this.cache.tasks.findIndex((Y)=>Y.id===f);if(J<0)return;this.cache.tasks.splice(J,1),await this.save(),this.notifyListeners()}async _unlinkForTests(){try{await T9(this.path)}catch(f){if(f.code!=="ENOENT")throw f}try{await T9(this.tmpPath)}catch(f){if(f.code!=="ENOENT")throw f}this.cache={version:XY,tasks:[]},this.loaded=!1}assertLoaded(){if(!this.loaded)throw Error("TaskIndexStore: call load() before any other method")}snapshot(){return{version:XY,tasks:this.cache.tasks.slice()}}notifyListeners(){if(this.listeners.size===0)return;let f=this.cache.tasks.slice();for(let J of this.listeners)try{J(f)}catch(Y){console.error("[kobe TaskIndexStore] listener threw on notify:",Y)}}}function SM(f,J){if(!f||typeof f!=="object"||Array.isArray(f))return console.warn(`[kobe] tasks.json at ${J} is not an object; recovering with empty index.`),{version:XY,tasks:[]};let Y=f,z=Y.version;if(z!==void 0&&z!==1&&z!==2&&z!==3)return console.warn(`[kobe] tasks.json at ${J} has unsupported version=${String(z)}; recovering with empty index.`),{version:XY,tasks:[]};let G=Array.isArray(Y.tasks)?Y.tasks:[],Z=[];for(let q of G){let Q=IM(q);if(Q)Z.push(Q);else console.warn(`[kobe] dropping malformed task entry from ${J}: ${JSON.stringify(q)}`)}return{version:XY,tasks:Z}}function IM(f){if(!f||typeof f!=="object")return null;let J=f;if(typeof J.id!=="string"||typeof J.title!=="string"||typeof J.repo!=="string"||typeof J.branch!=="string"||typeof J.worktreePath!=="string"||typeof J.status!=="string"||typeof J.createdAt!=="string"||typeof J.updatedAt!=="string")return null;if(!wM(J.status))return null;let Y=typeof J.archived==="boolean"?J.archived:!1,z=J.kind==="main"?"main":"task",G=z==="main"?J.status==="in_progress"||J.status==="done"?"backlog":J.status:J.status==="done"&&!Y?"in_progress":J.status;return{id:hG(J.id),title:J.title,repo:J.repo,branch:J.branch,worktreePath:J.worktreePath,status:G,archived:Y,pinned:typeof J.pinned==="boolean"?J.pinned:!1,kind:z,vendor:mY(typeof J.vendor==="string"?J.vendor:void 0),prStatus:TM(J.prStatus),...typeof J.position==="number"&&Number.isFinite(J.position)?{position:J.position}:{},...typeof J.modelEffort==="string"&&J.modelEffort.length>0?{modelEffort:J.modelEffort}:{},createdAt:J.createdAt,updatedAt:J.updatedAt}}function TM(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let J=f;if(!uM(J.provider)||!EM(J.lifecycle)||!xM(J.checkState))return;return{provider:J.provider,lifecycle:J.lifecycle,checkState:J.checkState,...typeof J.number==="number"&&Number.isFinite(J.number)?{number:J.number}:{},...typeof J.url==="string"?{url:J.url}:{},...typeof J.title==="string"?{title:J.title}:{},...typeof J.baseRef==="string"?{baseRef:J.baseRef}:{},...typeof J.headRef==="string"?{headRef:J.headRef}:{},...typeof J.reviewDecision==="string"?{reviewDecision:J.reviewDecision}:{},...typeof J.mergeable==="string"?{mergeable:J.mergeable}:{},...typeof J.lastCheckedAt==="string"?{lastCheckedAt:J.lastCheckedAt}:{},...typeof J.lastError==="string"?{lastError:J.lastError}:{}}}function uM(f){return f==="github"||f==="gitlab"||f==="bitbucket"||f==="unknown"}function EM(f){return f==="creating"||f==="open"||f==="ready_to_merge"||f==="merged"||f==="closed"||f==="unknown"}function xM(f){return f==="none"||f==="pending"||f==="passing"||f==="failing"||f==="unknown"}function wM(f){return f==="backlog"||f==="in_progress"||f==="in_review"||f==="done"||f==="canceled"||f==="error"}var XY=3;var PG=C(()=>{S1();K1();I9()});function E9(f){let J=f.auth,Y=J.kind==="key"?{kind:"key",keyPath:J.keyPath}:{kind:"password",getPassword:()=>fX(J.keychainRef)};return{host:f.host,user:f.user,port:f.port,auth:Y,controlPath:_Z(f.host,f.user,f.port)}}function Tz(f){let J=vJ(f);if(!J)return new eZ;return new bz(E9(J))}function mJ(f){for(let J of Object.values(eQ()))if(f===J.basePath||f.startsWith(`${J.basePath}/`))return new bz(E9(J));return new eZ}function x9(f){return f&&D1(f)?f:void 0}function YX(f){let J=mJ(f);return J.isRemote||J.existsSync(f)}function bf(f){return mJ(f).isRemote?OJ():f}var e1=C(()=>{lf();gf();lQ();rQ()});var zX;var w9=C(()=>{zX=class zX extends Error{args;cwd;exitCode;stdout;stderr;constructor(f,J,Y){super(`git ${f.join(" ")} (cwd=${J}) exited with code ${Y.exitCode}: ${Y.stderr.trim()||Y.stdout.trim()}`);this.name="GitCommandError",this.args=f,this.cwd=J,this.exitCode=Y.exitCode,this.stdout=Y.stdout,this.stderr=Y.stderr}}});import{createHash as hM}from"crypto";import P9 from"fs";import I1 from"path";function v9(f){if(!I1.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return I1.join(ef(),PM,dM(f))}function m9(f){if(!I1.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[v9(f),...cM.map((J)=>I1.join(f,J))]}function c9(f,J){if(!J||/[/\\\0]/.test(J))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(J)}`);return I1.join(v9(f),J)}async function n9(f){if(D1(f)){let Y=vJ(f)?.basePath;if(!Y)return[];return Tz(f).readdir(i9(Y))}let J=new Set;for(let Y of m9(f))try{for(let z of P9.readdirSync(Y,{withFileTypes:!0}))if(z.isDirectory())J.add(z.name)}catch{}return[...J]}function YH(f,J){if(!I1.isAbsolute(f)||!I1.isAbsolute(J))return null;let Y=h9(J);for(let z of m9(f)){let G=h9(z),Z=I1.relative(G,Y);if(Z!==""&&!Z.startsWith("..")&&!I1.isAbsolute(Z))return z}return null}function d9(f,J){return YH(f,J)!==null}function i9(f){return`${nM(f)}/.kobe/worktrees`}function l9(f,J){if(!J||/[/\\\0]/.test(J))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(J)}`);return`${i9(f)}/${J}`}function nM(f){return f.length>1&&f.endsWith("/")?f.replace(/\/+$/,""):f}function h9(f){try{return P9.realpathSync(f)}catch{return I1.resolve(f)}}function dM(f){let Y=(I1.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=hM("sha1").update(I1.resolve(f)).digest("hex").slice(0,12);return`${Y}-${z}`}var PM="worktrees",vM=".kobe/worktrees",mM=".claude/worktrees",cM;var zH=C(()=>{lf();e1();gf();cM=[vM,mM]});var r9={};jf(r9,{GitWorktreeManager:()=>GX});import $9 from"fs";import fJ from"path";class GX{execDeps;constructor(f=iM){this.execDeps=f}ctxFor(f){let J=this.execDeps.remoteBasePath(f);return J?{exec:this.execDeps.execForRepo(f),dir:J,remote:!0}:{exec:this.execDeps.execForRepo(f),dir:f,remote:!1}}async runGit(f,J,Y){if(!Y.cwd)throw Error("runGit(): cwd is required; refusing to inherit from process.cwd()");let z=await f.run(["git",...J],{cwd:Y.cwd,env:Y.env}),G={stdout:z.stdout,stderr:z.stderr,exitCode:z.exitCode};if(G.exitCode!==0&&!Y.allowFail)throw new zX(J,Y.cwd,G);return G}async create(f,J,Y,z){let G=this.ctxFor(f);if(qY("repo",G.dir),qY("path",Y),!J)throw Error("create(): branch must be a non-empty string");if(await G.exec.exists(Y)){let H=await this.tryDescribe(G,Y);if(H){if(H.branch!==J)throw Error(`worktree at ${Y} is on branch '${H.branch}', refusing to hijack to '${J}'`);return H}throw Error(`create(): ${Y} exists but is not a registered git worktree`)}await G.exec.mkdirp(fJ.dirname(Y));let q=await this.branchExists(G,J)?["worktree","add",Y,J]:z?["worktree","add","-b",J,Y,z]:["worktree","add","-b",J,Y];await this.runGit(G.exec,q,{cwd:G.dir});let Q=await this.tryDescribe(G,Y);if(!Q)throw Error(`create(): git reported success but ${Y} is not a worktree`);if(Q.branch!==J)throw Error(`create(): post-condition failed \u2014 expected branch '${J}' at ${Y}, got '${Q.branch}'`);return Q}async createForTask(f){let J=this.execDeps.remoteBasePath(f.repo),Y=J?l9(J,f.slug):c9(f.repo,f.slug);return this.create(f.repo,f.branch,Y,f.baseRef)}async remove(f,J){qY("path",f);let Y=this.execDeps.execForPath(f),z=J?.force===!0;if(!await Y.exists(f)){let q=await this.findRepoFor(Y,f);if(q)await this.runGit(Y,["worktree","prune"],{cwd:q,allowFail:!0});return}let G=await this.findRepoFor(Y,f);if(!G)throw Error(`remove(): ${f} is not a git worktree`);if(!z){if(await this.isDirty(f))throw Error(`remove(): refusing to remove dirty worktree at ${f} (pass { force: true } to override)`)}let Z=z?["worktree","remove","--force",f]:["worktree","remove",f];await this.runGit(Y,Z,{cwd:G}),await this.runGit(Y,["worktree","prune"],{cwd:G,allowFail:!0})}async list(f){let J=this.ctxFor(f);qY("repo",J.dir);let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),z=GH(Y.stdout),G=[];for(let Z of z){if(!Z.path)continue;let q=J.remote?a9(J.dir,Z.path):YH(f,Z.path);if(!q)continue;if(!Z.branch||Z.detached)continue;let Q=vG(q),H=vG(Z.path),B=fJ.relative(Q,H),V=fJ.join(q,B),j=await this.isDirty(Z.path);G.push({path:V,branch:Z.branch,head:Z.head??"",dirty:j})}return G}async listAll(f){let J=this.ctxFor(f);qY("repo",J.dir);let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),z=GH(Y.stdout),G=J.remote?J.dir:vG(J.dir),Z=[];for(let q of z){if(!q.path)continue;if(q.bare)continue;if(!q.branch||q.detached)continue;if((J.remote?q.path:vG(q.path))===G)continue;let Q=await this.isDirty(q.path);Z.push({path:q.path,branch:q.branch,head:q.head??"",dirty:Q,kobeManaged:J.remote?a9(J.dir,q.path)!==null:d9(f,q.path),lastActivityMs:await this.lastActivityMs(J.exec,q.path)})}return Z.sort((q,Q)=>Q.lastActivityMs-q.lastActivityMs),Z}async lastActivityMs(f,J){try{let Y=await this.runGit(f,["log","-1","--format=%ct"],{cwd:J}),z=Number.parseInt(Y.stdout.trim(),10);if(Number.isFinite(z)&&z>0)return z*1000}catch{}if(!f.isRemote)try{return $9.statSync(J).mtimeMs}catch{}return 0}async isDirty(f){qY("path",f);let J=this.execDeps.execForPath(f);return(await this.runGit(J,["status","--porcelain"],{cwd:f})).stdout.length>0}async currentBranch(f){qY("path",f);let J=this.execDeps.execForPath(f),z=(await this.runGit(J,["rev-parse","--abbrev-ref","HEAD"],{cwd:f})).stdout.trim();if(!z||z==="HEAD")throw Error(`currentBranch(): ${f} is in detached-HEAD state`);return z}async renameBranch(f,J,Y){if(qY("path",f),J===Y)return;let z=this.execDeps.execForPath(f),G=await this.findRepoFor(z,f);if(!G)throw Error(`renameBranch(): ${f} is not a git worktree`);await this.runGit(z,["branch","-m",J,Y],{cwd:G})}async tryDescribe(f,J){let Y=await this.runGit(f.exec,["worktree","list","--porcelain"],{cwd:f.dir}),z=GH(Y.stdout),G=(Q)=>f.remote?Q:vG(Q),Z=G(J),q=z.find((Q)=>Q.path&&G(Q.path)===Z);if(!q||!q.path||!q.branch||q.detached)return null;return{path:J,branch:q.branch,head:q.head??"",dirty:await this.isDirty(q.path)}}async branchExists(f,J){let Y=`refs/heads/${J}`;return(await this.runGit(f.exec,["show-ref","--verify","--quiet",Y],{cwd:f.dir,allowFail:!0})).exitCode===0}async findRepoFor(f,J){try{let Y=await this.runGit(f,["rev-parse","--git-common-dir"],{cwd:J,allowFail:!0});if(Y.exitCode!==0)return null;let z=Y.stdout.trim();if(!z)return null;let G=fJ.isAbsolute(z)?z:fJ.resolve(J,z);return fJ.basename(G)===".git"?fJ.dirname(G):G}catch(Y){if(Y instanceof zX)return null;throw Y}}}function GH(f){let J=[],Y=null;for(let z of f.split(`
|
|
15
|
+
`)){let G=z.replace(/\r$/,"");if(G===""){if(Y)J.push(Y);Y=null;continue}if(!Y)Y={};if(G.startsWith("worktree "))Y.path=G.slice(9);else if(G.startsWith("HEAD "))Y.head=G.slice(5);else if(G.startsWith("branch ")){let Z=G.slice(7);Y.branch=Z.startsWith("refs/heads/")?Z.slice(11):Z}else if(G==="detached")Y.detached=!0;else if(G==="bare")Y.bare=!0}if(Y)J.push(Y);return J}function a9(f,J){let Y=`${f.replace(/\/+$/,"")}/.kobe/worktrees`;return J===Y||J.startsWith(`${Y}/`)?Y:null}function qY(f,J){if(!J||!fJ.isAbsolute(J))throw Error(`${f} must be an absolute path, got: ${JSON.stringify(J)}`)}function vG(f){try{return $9.realpathSync(f)}catch{return fJ.resolve(f)}}var iM;var ZH=C(()=>{e1();gf();w9();zH();iM={execForRepo:Tz,execForPath:mJ,remoteBasePath(f){return vJ(f)?.basePath??null}}});function p9(f){let J=String(f),Y=J.length-1;return wf.context.id+(Y?String.fromCharCode(96+Y):"")+J}function QH(f){wf.context=f}function lM(){return{...wf.context,id:wf.getNextContextId(),count:0}}function aY(f,J){let Y=Uf,z=s0,G=f.length===0,Z=J===void 0?z:J,q=G?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:Z?Z.context:null,owner:Z},Q=G?()=>f(()=>{throw Error("Dispose method must be an explicit argument to createRoot function")}):()=>f(()=>$f(()=>QY(q)));YJ.afterCreateOwner&&YJ.afterCreateOwner(q),s0=q,Uf=null;try{return F1(Q,!0)}finally{Uf=Y,s0=z}}function r(f,J){J=J?Object.assign({},qX,J):qX;let Y={value:f,observers:null,observerSlots:null,comparator:J.equals||void 0};{if(J.name)Y.name=J.name;if(J.internal)Y.internal=!0;else if(zW(Y),YJ.afterCreateSignal)YJ.afterCreateSignal(Y)}let z=(G)=>{if(typeof G==="function")if(B0&&B0.running&&B0.sources.has(Y))G=G(Y.tValue);else G=G(Y.value);return BH(Y,G)};return[GW.bind(Y),z]}function o9(f,J,Y){let z=dG(f,J,!0,T1,Y);if(Ez&&B0&&B0.running)nf.push(z);else $Y(z)}function AJ(f,J,Y){let z=dG(f,J,!1,T1,Y);if(Ez&&B0&&B0.running)nf.push(z);else $Y(z)}function ff(f,J,Y){YW=YF;let z=dG(f,J,!1,T1,Y),G=cG&&u1(cG);if(G)z.suspense=G;if(!Y||!Y.render)z.user=!0;H1?H1.push(z):$Y(z)}function K0(f,J,Y){Y=Y?Object.assign({},qX,Y):qX;let z=dG(f,J,!0,0,Y);if(z.observers=null,z.observerSlots=null,z.comparator=Y.equals||void 0,Ez&&B0&&B0.running)z.tState=T1,nf.push(z);else $Y(z);return GW.bind(z)}function oM(f){return f&&typeof f==="object"&&"then"in f}function jX(f,J,Y){let z,G,Z;if(typeof J==="function")z=f,G=J,Z=Y||{};else z=!0,G=f,Z=J||{};let q=null,Q=XH,H=null,B=!1,V=!1,j="initialValue"in Z,U=typeof z==="function"&&K0(z),L=new Set,[O,M]=(Z.storage||r)(Z.initialValue),[g,I]=r(void 0),[a,N]=r(void 0,{equals:!1}),[A,R]=r(j?"ready":"unresolved");if(wf.context){if(H=wf.getNextContextId(),Z.ssrLoadFrom==="initial")Q=Z.initialValue;else if(wf.load&&wf.has(H))Q=wf.load(H)}function S(T,Q0,t,V0){if(q===T){if(q=null,V0!==void 0&&(j=!0),(T===Q||Q0===Q)&&Z.onHydrated)queueMicrotask(()=>Z.onHydrated(V0,{value:Q0}));if(Q=XH,B0&&T&&B)B0.promises.delete(T),B=!1,F1(()=>{B0.running=!0,_(Q0,t)},!1);else _(Q0,t)}return Q0}function _(T,Q0){F1(()=>{if(Q0===void 0)M(()=>T);R(Q0!==void 0?"errored":j?"ready":"unresolved"),I(Q0);for(let t of L.keys())t.decrement();L.clear()},!1)}function z0(){let T=cG&&u1(cG),Q0=O(),t=g();if(t!==void 0&&!q)throw t;if(Uf&&!Uf.user&&T)o9(()=>{if(a(),q){if(T.resolved&&B0&&B)B0.promises.add(q);else if(!L.has(T))T.increment(),L.add(T)}});return Q0}function e(T=!0){if(T!==!1&&V)return;V=!1;let Q0=U?U():z;if(B=B0&&B0.running,Q0==null||Q0===!1){S(q,$f(O));return}if(B0&&q)B0.promises.delete(q);let t,V0=Q!==XH?Q:$f(()=>{try{return G(Q0,{value:O(),refetching:T})}catch(C0){t=C0}});if(t!==void 0){S(q,void 0,XX(t),Q0);return}else if(!oM(V0))return S(q,V0,void 0,Q0),V0;if(q=V0,"v"in V0){if(V0.s===1)S(q,V0.v,void 0,Q0);else S(q,void 0,XX(V0.v),Q0);return V0}return V=!0,queueMicrotask(()=>V=!1),F1(()=>{R(j?"refreshing":"pending"),N()},!1),V0.then((C0)=>S(V0,C0,void 0,Q0),(C0)=>S(V0,void 0,XX(C0),Q0))}Object.defineProperties(z0,{state:{get:()=>A()},error:{get:()=>g()},loading:{get(){let T=A();return T==="pending"||T==="refreshing"}},latest:{get(){if(!j)return z0();let T=g();if(T&&!q)throw T;return O()}}});let Y0=s0;if(U)o9(()=>(Y0=s0,e(!1)));else e(!1);return[z0,{refetch:(T)=>sM(Y0,()=>e(T)),mutate:M}]}function WX(f){return F1(f,!1)}function $f(f){if(!uz&&Uf===null)return f();let J=Uf;Uf=null;try{if(uz)return uz.untrack(f);return f()}finally{Uf=J}}function O1(f,J,Y){let z=Array.isArray(f),G,Z=Y&&Y.defer;return(q)=>{let Q;if(z){Q=Array(f.length);for(let B=0;B<f.length;B++)Q[B]=f[B]()}else Q=f();if(Z)return Z=!1,q;let H=$f(()=>J(Q,G,q));return G=Q,H}}function f1(f){ff(()=>$f(f))}function vf(f){if(s0===null)console.warn("cleanups created outside a `createRoot` or `render` will never be run");else if(s0.cleanups===null)s0.cleanups=[f];else s0.cleanups.push(f);return f}function VX(){return Uf}function sM(f,J){let Y=s0,z=Uf;s0=f,Uf=null;try{return F1(J,!0)}catch(G){KX(G)}finally{s0=Y,Uf=z}}function tM(f){if(B0&&B0.running)return f(),B0.done;let J=Uf,Y=s0;return Promise.resolve().then(()=>{Uf=J,s0=Y;let z;if(Ez||cG)z=B0||(B0={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),z.done||(z.done=new Promise((G)=>z.resolve=G)),z.running=!0;return F1(f,!1),Uf=s0=null,z?z.done:void 0})}function t9(f,J){let Y=dG(()=>$f(()=>{return Object.assign(f,{[pM]:!0}),f(J)}),void 0,!0,0);return Y.props=J,Y.observers=null,Y.observerSlots=null,Y.name=f.name,Y.component=f,$Y(Y),Y.tValue!==void 0?Y.tValue:Y.value}function zW(f){if(s0){if(s0.sourceMap)s0.sourceMap.push(f);else s0.sourceMap=[f];f.graph=s0}if(YJ.afterRegisterGraph)YJ.afterRegisterGraph(f)}function gJ(f,J){let Y=Symbol("context");return{id:Y,Provider:zF(Y,J),defaultValue:f}}function u1(f){let J;return s0&&s0.context&&(J=s0.context[f.id])!==void 0?J:f.defaultValue}function eM(f){let J=K0(f),Y=K0(()=>HH(J()),void 0,{name:"children"});return Y.toArray=()=>{let z=Y();return Array.isArray(z)?z:z!=null?[z]:[]},Y}function GW(){let f=B0&&B0.running;if(this.sources&&(f?this.tState:this.state))if((f?this.tState:this.state)===T1)$Y(this);else{let J=nf;nf=null,F1(()=>QX(this),!1),nf=J}if(Uf){let J=this.observers;if(!J||J[J.length-1]!==Uf){let Y=J?J.length:0;if(!Uf.sources)Uf.sources=[this],Uf.sourceSlots=[Y];else Uf.sources.push(this),Uf.sourceSlots.push(Y);if(!J)this.observers=[Uf],this.observerSlots=[Uf.sources.length-1];else J.push(Uf),this.observerSlots.push(Uf.sources.length-1)}}if(f&&B0.sources.has(this))return this.tValue;return this.value}function BH(f,J,Y){let z=B0&&B0.running&&B0.sources.has(f)?f.tValue:f.value;if(!f.comparator||!f.comparator(z,J)){if(B0){let G=B0.running;if(G||!Y&&B0.sources.has(f))B0.sources.add(f),f.tValue=J;if(!G)f.value=J}else f.value=J;if(f.observers&&f.observers.length)F1(()=>{for(let G=0;G<f.observers.length;G+=1){let Z=f.observers[G],q=B0&&B0.running;if(q&&B0.disposed.has(Z))continue;if(q?!Z.tState:!Z.state){if(Z.pure)nf.push(Z);else H1.push(Z);if(Z.observers)XW(Z)}if(!q)Z.state=T1;else Z.tState=T1}if(nf.length>1e6){if(nf=[],aM)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return J}function $Y(f){if(!f.fn)return;QY(f);let J=BX;if(e9(f,B0&&B0.running&&B0.sources.has(f)?f.tValue:f.value,J),B0&&!B0.running&&B0.sources.has(f))queueMicrotask(()=>{F1(()=>{B0&&(B0.running=!0),Uf=s0=f,e9(f,f.tValue,J),Uf=s0=null},!1)})}function e9(f,J,Y){let z,G=s0,Z=Uf;Uf=s0=f;try{z=f.fn(J)}catch(q){if(f.pure)if(B0&&B0.running)f.tState=T1,f.tOwned&&f.tOwned.forEach(QY),f.tOwned=void 0;else f.state=T1,f.owned&&f.owned.forEach(QY),f.owned=null;return f.updatedAt=Y+1,KX(q)}finally{Uf=Z,s0=G}if(!f.updatedAt||f.updatedAt<=Y){if(f.updatedAt!=null&&"observers"in f)BH(f,z,!0);else if(B0&&B0.running&&f.pure){if(!B0.sources.has(f))f.value=z;B0.sources.add(f),f.tValue=z}else f.value=z;f.updatedAt=Y}}function dG(f,J,Y,z=T1,G){let Z={fn:f,state:z,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:J,owner:s0,context:s0?s0.context:null,pure:Y};if(B0&&B0.running)Z.state=0,Z.tState=z;if(s0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if(s0!==_M)if(B0&&B0.running&&s0.pure)if(!s0.tOwned)s0.tOwned=[Z];else s0.tOwned.push(Z);else if(!s0.owned)s0.owned=[Z];else s0.owned.push(Z);if(G&&G.name)Z.name=G.name;if(uz&&Z.fn){let q=Z.fn,[Q,H]=r(void 0,{equals:!1}),B=uz.factory(q,H);vf(()=>B.dispose());let V,j=()=>tM(H).then(()=>{if(V)V.dispose(),V=void 0});Z.fn=(U)=>{if(Q(),B0&&B0.running){if(!V)V=uz.factory(q,j);return V.track(U)}return B.track(U)}}return YJ.afterCreateOwner&&YJ.afterCreateOwner(Z),Z}function nG(f){let J=B0&&B0.running;if((J?f.tState:f.state)===0)return;if((J?f.tState:f.state)===mG)return QX(f);if(f.suspense&&$f(f.suspense.inFallback))return f.suspense.effects.push(f);let Y=[f];while((f=f.owner)&&(!f.updatedAt||f.updatedAt<BX)){if(J&&B0.disposed.has(f))return;if(J?f.tState:f.state)Y.push(f)}for(let z=Y.length-1;z>=0;z--){if(f=Y[z],J){let G=f,Z=Y[z+1];while((G=G.owner)&&G!==Z)if(B0.disposed.has(G))return}if((J?f.tState:f.state)===T1)$Y(f);else if((J?f.tState:f.state)===mG){let G=nf;nf=null,F1(()=>QX(f,Y[0]),!1),nf=G}}}function F1(f,J){if(nf)return f();let Y=!1;if(!J)nf=[];if(H1)Y=!0;else H1=[];BX++;try{let z=f();return fF(Y),z}catch(z){if(!Y)H1=null;nf=null,KX(z)}}function fF(f){if(nf){if(Ez&&B0&&B0.running)JF(nf);else ZW(nf);nf=null}if(f)return;let J;if(B0){if(!B0.promises.size&&!B0.queue.size){let{sources:z,disposed:G}=B0;H1.push.apply(H1,B0.effects),J=B0.resolve;for(let Z of H1)"tState"in Z&&(Z.state=Z.tState),delete Z.tState;B0=null,F1(()=>{for(let Z of G)QY(Z);for(let Z of z){if(Z.value=Z.tValue,Z.owned)for(let q=0,Q=Z.owned.length;q<Q;q++)QY(Z.owned[q]);if(Z.tOwned)Z.owned=Z.tOwned;delete Z.tValue,delete Z.tOwned,Z.tState=0}s9(!1)},!1)}else if(B0.running){B0.running=!1,B0.effects.push.apply(B0.effects,H1),H1=null,s9(!0);return}}let Y=H1;if(H1=null,Y.length)F1(()=>YW(Y),!1);else YJ.afterUpdate&&YJ.afterUpdate();if(J)J()}function ZW(f){for(let J=0;J<f.length;J++)nG(f[J])}function JF(f){for(let J=0;J<f.length;J++){let Y=f[J],z=B0.queue;if(!z.has(Y))z.add(Y),Ez(()=>{z.delete(Y),F1(()=>{B0.running=!0,nG(Y)},!1),B0&&(B0.running=!1)})}}function YF(f){let J,Y=0;for(J=0;J<f.length;J++){let z=f[J];if(!z.user)nG(z);else f[Y++]=z}if(wf.context){if(wf.count){wf.effects||(wf.effects=[]),wf.effects.push(...f.slice(0,Y));return}QH()}if(wf.effects&&(wf.done||!wf.count))f=[...wf.effects,...f],Y+=wf.effects.length,delete wf.effects;for(J=0;J<Y;J++)nG(f[J])}function QX(f,J){let Y=B0&&B0.running;if(Y)f.tState=0;else f.state=0;for(let z=0;z<f.sources.length;z+=1){let G=f.sources[z];if(G.sources){let Z=Y?G.tState:G.state;if(Z===T1){if(G!==J&&(!G.updatedAt||G.updatedAt<BX))nG(G)}else if(Z===mG)QX(G,J)}}}function XW(f){let J=B0&&B0.running;for(let Y=0;Y<f.observers.length;Y+=1){let z=f.observers[Y];if(J?!z.tState:!z.state){if(J)z.tState=mG;else z.state=mG;if(z.pure)nf.push(z);else H1.push(z);z.observers&&XW(z)}}}function QY(f){let J;if(f.sources)while(f.sources.length){let Y=f.sources.pop(),z=f.sourceSlots.pop(),G=Y.observers;if(G&&G.length){let Z=G.pop(),q=Y.observerSlots.pop();if(z<G.length)Z.sourceSlots[q]=z,G[z]=Z,Y.observerSlots[z]=q}}if(f.tOwned){for(J=f.tOwned.length-1;J>=0;J--)QY(f.tOwned[J]);delete f.tOwned}if(B0&&B0.running&&f.pure)qW(f,!0);else if(f.owned){for(J=f.owned.length-1;J>=0;J--)QY(f.owned[J]);f.owned=null}if(f.cleanups){for(J=f.cleanups.length-1;J>=0;J--)f.cleanups[J]();f.cleanups=null}if(B0&&B0.running)f.tState=0;else f.state=0;delete f.sourceMap}function qW(f,J){if(!J)f.tState=0,B0.disposed.add(f);if(f.owned)for(let Y=0;Y<f.owned.length;Y++)qW(f.owned[Y])}function XX(f){if(f instanceof Error)return f;return Error(typeof f==="string"?f:"Unknown error",{cause:f})}function fW(f,J,Y){try{for(let z of J)z(f)}catch(z){KX(z,Y&&Y.owner||null)}}function KX(f,J=s0){let Y=_9&&J&&J.context&&J.context[_9],z=XX(f);if(!Y)throw z;if(H1)H1.push({fn(){fW(z,Y,J)},state:T1});else fW(z,Y,J)}function HH(f){if(typeof f==="function"&&!f.length)return HH(f());if(Array.isArray(f)){let J=[];for(let Y=0;Y<f.length;Y++){let z=HH(f[Y]);if(Array.isArray(z))if(z.length<32768)J.push.apply(J,z);else for(let G=0;G<z.length;G++)J.push(z[G]);else J.push(z)}return J}return f}function zF(f,J){return function(z){let G;return AJ(()=>G=$f(()=>{return s0.context={...s0.context,[f]:z.value},eM(()=>z.children)}),void 0,J),G}}function JW(f){for(let J=0;J<f.length;J++)f[J]()}function ZF(f,J,Y={}){let z=[],G=[],Z=[],q=0,Q=J.length>1?[]:null;return vf(()=>JW(Z)),()=>{let H=f()||[],B=H.length,V,j;return H[HX],$f(()=>{let L,O,M,g,I,a,N,A,R;if(B===0){if(q!==0)JW(Z),Z=[],z=[],G=[],q=0,Q&&(Q=[]);if(Y.fallback)z=[GF],G[0]=aY((S)=>{return Z[0]=S,Y.fallback()}),q=1}else if(q===0){G=Array(B);for(j=0;j<B;j++)z[j]=H[j],G[j]=aY(U);q=B}else{M=Array(B),g=Array(B),Q&&(I=Array(B));for(a=0,N=Math.min(q,B);a<N&&z[a]===H[a];a++);for(N=q-1,A=B-1;N>=a&&A>=a&&z[N]===H[A];N--,A--)M[A]=G[N],g[A]=Z[N],Q&&(I[A]=Q[N]);L=new Map,O=Array(A+1);for(j=A;j>=a;j--)R=H[j],V=L.get(R),O[j]=V===void 0?-1:V,L.set(R,j);for(V=a;V<=N;V++)if(R=z[V],j=L.get(R),j!==void 0&&j!==-1)M[j]=G[V],g[j]=Z[V],Q&&(I[j]=Q[V]),j=O[j],L.set(R,j);else Z[V]();for(j=a;j<B;j++)if(j in M){if(G[j]=M[j],Z[j]=g[j],Q)Q[j]=I[j],Q[j](j)}else G[j]=aY(U);G=G.slice(0,q=B),z=H.slice(0)}return G});function U(L){if(Z[j]=L,Q){let[O,M]=r(j,{name:"index"});return Q[j]=M,J(H[j],O)}return J(H[j])}}}function QW(f,J){if(XF){if(wf.context){let Y=wf.context;QH(lM());let z=t9(f,J||{});return QH(Y),z}}return t9(f,J||{})}function ZX(){return!0}function qH(f){return!(f=typeof f==="function"?f():f)?{}:f}function QF(){for(let f=0,J=this.length;f<J;++f){let Y=this[f]();if(Y!==void 0)return Y}}function UX(...f){let J=!1;for(let q=0;q<f.length;q++){let Q=f[q];J=J||!!Q&&JJ in Q,f[q]=typeof Q==="function"?(J=!0,K0(Q)):Q}if(rM&&J)return new Proxy({get(q){for(let Q=f.length-1;Q>=0;Q--){let H=qH(f[Q])[q];if(H!==void 0)return H}},has(q){for(let Q=f.length-1;Q>=0;Q--)if(q in qH(f[Q]))return!0;return!1},keys(){let q=[];for(let Q=0;Q<f.length;Q++)q.push(...Object.keys(qH(f[Q])));return[...new Set(q)]}},qF);let Y={},z=Object.create(null);for(let q=f.length-1;q>=0;q--){let Q=f[q];if(!Q)continue;let H=Object.getOwnPropertyNames(Q);for(let B=H.length-1;B>=0;B--){let V=H[B];if(V==="__proto__"||V==="constructor")continue;let j=Object.getOwnPropertyDescriptor(Q,V);if(!z[V])z[V]=j.get?{enumerable:!0,configurable:!0,get:QF.bind(Y[V]=[j.get.bind(Q)])}:j.value!==void 0?j:void 0;else{let U=Y[V];if(U){if(j.get)U.push(j.get.bind(Q));else if(j.value!==void 0)U.push(()=>j.value)}}}}let G={},Z=Object.keys(z);for(let q=Z.length-1;q>=0;q--){let Q=Z[q],H=z[Q];if(H&&H.get)Object.defineProperty(G,Q,H);else G[Q]=H?H.value:void 0}return G}function Zf(f){let J="fallback"in f&&{fallback:()=>f.fallback};return K0(ZF(()=>f.each,f.children,J||void 0),void 0,{name:"value"})}function X0(f){let J=f.keyed,Y=K0(()=>f.when,void 0,{name:"condition value"}),z=J?Y:K0(Y,void 0,{equals:(G,Z)=>!G===!Z,name:"condition"});return K0(()=>{let G=z();if(G){let Z=f.children;return typeof Z==="function"&&Z.length>0?$f(()=>Z(J?G:()=>{if(!$f(z))throw HF("Show");return Y()})):Z}return f.fallback},void 0,{name:"value"})}var wf,aM=!0,$M=(f,J)=>f===J,JJ,rM,HX,pM,qX,_9=null,YW,T1=1,mG=2,_M,XH,s0=null,B0=null,Ez=null,uz=null,Uf=null,nf=null,H1=null,BX=0,YJ,rI,s9,cG,GF,XF=!1,qF,HF=(f)=>`Attempting to access a stale value from <${f}> that could possibly be undefined. This may occur because you are reading the accessor returned from the component at a time where it has already been unmounted. We recommend cleaning up any stale timers or async, or reading from the initial condition.`,HW;var Wf=C(()=>{wf={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return p9(this.context.count)},getNextContextId(){return p9(this.context.count++)}};JJ=Symbol("solid-proxy"),rM=typeof Proxy==="function",HX=Symbol("solid-track"),pM=Symbol("solid-dev-component"),qX={equals:$M},YW=ZW,_M={},XH={},YJ={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[rI,s9]=r(!1);GF=Symbol("fallback");qF={get(f,J,Y){if(J===JJ)return Y;return f.get(J)},has(f,J){if(J===JJ)return!0;return f.has(J)},set:ZX,deleteProperty:ZX,getOwnPropertyDescriptor(f,J){return{configurable:!0,enumerable:!0,get(){return f.get(J)},set:ZX,deleteProperty:ZX}},ownKeys(f){return f.keys()}};HW={hooks:YJ,writeSignal:BH,registerGraph:zW};if(globalThis)if(!globalThis.Solid$$)globalThis.Solid$$=!0;else console.warn("You appear to have multiple instances of Solid. This can lead to unexpected behavior.")});function BF(f,J){switch((f??"").toUpperCase()){case"MERGED":return"merged";case"CLOSED":return"closed";case"OPEN":return(J??"").toUpperCase()==="APPROVED"?"ready_to_merge":"open";default:return"unknown"}}function jF(f){let J=(f.status??"").toUpperCase(),Y=(f.conclusion??"").toUpperCase(),z=(f.state??"").toUpperCase();if(J&&J!=="COMPLETED")return"pending";if(Y){if(Y==="SUCCESS"||Y==="NEUTRAL"||Y==="SKIPPED")return"passing";return"failing"}if(z==="SUCCESS")return"passing";if(z==="PENDING"||z==="EXPECTED")return"pending";if(z==="FAILURE"||z==="ERROR")return"failing";return"unknown"}function WF(f){if(!f||f.length===0)return"none";let J=!1,Y=!1;for(let z of f){let G=jF(z);if(G==="failing")return"failing";if(G==="pending")J=!0;else if(G==="passing")Y=!0}if(J)return"pending";if(Y)return"passing";return"unknown"}function jW(f,J){if(!f||typeof f.number!=="number")return null;return{provider:"github",lifecycle:BF(f.state,f.reviewDecision),checkState:WF(f.statusCheckRollup),number:f.number,url:f.url,title:f.title,baseRef:f.baseRefName,headRef:f.headRefName,reviewDecision:f.reviewDecision||void 0,mergeable:f.mergeable||void 0,lastCheckedAt:J}}function DX(f,J){if(f===J)return!0;if(!f||!J)return!1;return f.provider===J.provider&&f.lifecycle===J.lifecycle&&f.checkState===J.checkState&&f.number===J.number&&f.url===J.url&&f.title===J.title&&f.baseRef===J.baseRef&&f.headRef===J.headRef&&f.reviewDecision===J.reviewDecision&&f.mergeable===J.mergeable}var BW="number,url,title,state,baseRefName,headRefName,reviewDecision,mergeable,statusCheckRollup";var jH,WH,VH,KH="DIRTY_WORKTREE",UH,DH;var LH=C(()=>{jH=class jH extends Error{from;to;taskId;constructor(f,J,Y){super(`illegal transition for task ${Y}: ${f} -> ${J}`);this.from=f;this.to=J;this.taskId=Y;this.name="IllegalTransitionError"}};WH=class WH extends Error{constructor(f){super(`task not found: ${f}`);this.name="TaskNotFoundError"}};VH=class VH extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};UH=class UH extends Error{taskId;constructor(f){super(`${KH}: task ${f} worktree has uncommitted or untracked changes`);this.taskId=f;this.name="DirtyWorktreeError"}};DH=class DH extends Error{taskId;cause;constructor(f,J){super(`failed to remove worktree for task ${f}: ${J instanceof Error?J.message:String(J)}`);this.taskId=f;this.cause=J;this.name="WorktreeRemoveFailedError"}}});function WW(f){if(typeof f!=="string")return"";let J=f.replace(/\s+/g," ").trim();if(J.length===0)return"";let Y=[...J];if(Y.length<=40)return J;return`${Y.slice(0,40).join("")}\u2026`}function LX(f,J){let Y=f.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,32),z=J.slice(-6).toLowerCase();return`kobe/${Y||"task"}-${z}`}var VW;var KW=C(()=>{VW=["aardvark","addax","adder","agouti","albatross","alpaca","anaconda","anchovy","anglerfish","anole","anteater","antelope","ape","argali","armadillo","avocet","axolotl","baboon","badger","banteng","barracuda","basilisk","bass","bat","beagle","bear","beaver","bee","beetle","beluga","betta","bison","blackbird","blenny","bluebird","bluegill","boar","bobcat","bonito","bovid","buffalo","bullfrog","bunting","bushbuck","butterfly","buzzard","caiman","camel","canary","capybara","caracal","cardinal","caribou","carp","cassowary","caterpillar","catfish","chameleon","chamois","char","cheetah","chickadee","chimp","chinchilla","chipmunk","chough","cicada","civet","clam","clownfish","cobra","cockatoo","condor","coot","copperhead","coral","cormorant","cougar","coyote","crab","crane","crawfish","crayfish","cricket","crocodile","crow","cuckoo","curlew","cuttlefish","deer","dikdik","dingo","dolphin","donkey","dormouse","dotterel","dove","dragonfly","dromedary","duck","dugong","dunlin","eagle","echidna","eel","egret","eider","eland","elephant","elk","emu","ermine","falcon","fawn","ferret","finch","firefly","flamingo","flounder","fox","frog","gadwall","gannet","gaur","gazelle","gecko","gemsbok","gerbil","gharial","gibbon","gnu","goat","goby","godwit","goldfish","goose","gopher","goral","gorilla","goshawk","grackle","grasshopper","grayling","grebe","grouse","guanaco","guillemot","guineafowl","guppy","halibut","hammerhead","hamster","hare","harrier","hartebeest","hawk","hedgehog","heron","herring","hippo","hornbill","hornet","horse","hummingbird","hyena","ibex","ibis","iguana","impala","indri","jacana","jackal","jaguar","jay","jellyfish","jerboa","junco","kakapo","kangaroo","kestrel","killdeer","kingfisher","kinglet","kite","kiwi","koala","kookaburra","krait","krill","kudu","ladybug","lamprey","langur","lapwing","lark","lemming","lemur","leopard","limpet","lion","lionfish","lizard","llama","lobster","locust","loon","lorikeet","loris","lynx","macaque","macaw","mackerel","magpie","mallard","mamba","mammoth","manatee","mandrill","manta","mantis","marlin","marmoset","marmot","marten","meerkat","merganser","mink","minnow","mole","mongoose","monitor","monkey","moose","moth","mouflon","mouse","mudpuppy","mule","muntjac","musk","muskox","muskrat","mussel","mustang","narwhal","newt","nightingale","numbat","nuthatch","nyala","ocelot","octopus","okapi","opossum","orangutan","orca","oriole","oryx","osprey","ostrich","otter","owl","oyster","oystercatcher","paca","panda","pangolin","panther","parakeet","parrot","parrotfish","partridge","peafowl","pelican","penguin","perch","petrel","pheasant","pigeon","pika","pike","pintail","pipefish","platypus","plover","pollock","pony","porcupine","porpoise","possum","ptarmigan","puffin","puma","pupfish","python","quail","quetzal","quokka","quoll","rabbit","raccoon","rail","rat","rattler","raven","ray","redpoll","reindeer","remora","rhino","roadrunner","robin","rook","sable","sailfish","salamander","salmon","sandpiper","sardine","scallop","scaup","scorpion","seahorse","seal","serval","shark","shearwater","shrew","shrike","shrimp","siskin","sitatunga","skate","skink","skua","skunk","sloth","smelt","snail","snipe","solenodon","sparrow","spider","springbok","squid","squirrel","starfish","starling","stilt","stingray","stoat","stork","sunbird","sunfish","swallow","swan","swift","swordfish","tahr","takin","tamarin","tanager","tapir","tarantula","tarpon","tarsier","teal","tenrec","terrapin","tern","tetra","thrasher","thrush","tiger","toad","tortoise","toucan","treecreeper","treefrog","trout","tuatara","tuna","turkey","turtle","urchin","urial","vicuna","viper","vole","vulture","wagtail","wallaby","walleye","walrus","warbler","warthog","waterbuck","weasel","wildebeest","wolf","wolverine","wombat","woodcock","woodpecker","wrasse","wren","yak","zebra","zebu","zorilla"]});class MH{activeSlugs;random;pool;pendingByRepo=new Map;chain=Promise.resolve();constructor(f,J={}){this.activeSlugs=f;if(this.random=J.random??Math.random,this.pool=J.pool??VW,this.pool.length===0)throw Error("SlugAllocator: animal pool cannot be empty")}async allocate(f){let J=this.chain,Y;this.chain=new Promise((z)=>{Y=z}),await J;try{return await this.pickLocked(f)}finally{Y()}}commit(f,J){this.deletePending(f,J)}cancel(f,J){this.deletePending(f,J)}async pickLocked(f){let J=await this.occupiedSlugs(f),Y=this.pool.filter((G)=>!J.has(G));if(Y.length>0){let G=Y[Math.floor(this.random()*Y.length)];return this.addPending(f,G),G}let z=this.pool[Math.floor(this.random()*this.pool.length)];for(let G=2;;G++){let Z=`${z}-v${G}`;if(!J.has(Z))return this.addPending(f,Z),Z}}async occupiedSlugs(f){let J=new Set(this.pendingByRepo.get(f)??[]);for(let Y of this.activeSlugs(f))if(Y)J.add(Y);for(let Y of await n9(f))J.add(Y);return J}addPending(f,J){let Y=this.pendingByRepo.get(f);if(!Y)Y=new Set,this.pendingByRepo.set(f,Y);Y.add(J)}deletePending(f,J){let Y=this.pendingByRepo.get(f);if(!Y)return;if(Y.delete(J),Y.size===0)this.pendingByRepo.delete(f)}}var UW=C(()=>{KW();zH()});var MW={};jf(MW,{PLACEHOLDER_TASK_TITLE:()=>RJ,Orchestrator:()=>MX});import{realpathSync as VF}from"fs";import{basename as KF,resolve as UF}from"path";function DW(f){return vJ(f)?.basePath??f}class MX{store;worktrees;slugs;tasksAcc;setTasks;activeTaskAcc;setActiveTaskSig;unsubscribeStore;worktreeLocks=new Map;mainTaskLocks=new Map;constructor(f){this.store=f.store,this.worktrees=f.worktrees,this.slugs=new MH((Z)=>this.store.list().filter((q)=>q.repo===Z&&q.kind!=="main").map((q)=>{return q.worktreePath.match(/([^/\\]+)[/\\]*$/)?.[1]??""}).filter((q)=>q.length>0));let[J,Y]=r(this.store.list());this.tasksAcc=J,this.setTasks=(Z)=>Y(()=>Z);let[z,G]=r(null);this.activeTaskAcc=z,this.setActiveTaskSig=(Z)=>G(()=>Z),this.unsubscribeStore=this.store.subscribe((Z)=>{this.setTasks(Z.slice())})}async init(){}activeTaskSignal(){return this.activeTaskAcc}async setActiveTask(f){let J=f===null?null:String(f);if(this.setActiveTaskSig(J),J&&this.store.get(J))await this.store.update(J,{})}tasksSignal(){return this.tasksAcc}subscribeTasks(f){return this.store.subscribe(f)}dispose(){this.unsubscribeStore()}listTasks(){return this.store.list()}getTask(f){return this.store.get(f)}async createTask(f){if(!f.repo)throw Error("createTask: repo is required");let J=(f.title??RJ).trim()||RJ,Y=await this.store.create({repo:f.repo,title:J,branch:f.branch??"",worktreePath:"",status:"backlog",kind:"task",vendor:f.vendor??yf,...f.modelEffort?{modelEffort:f.modelEffort}:{}});if(f.baseRef)this.pendingBaseRefs.set(Y.id,f.baseRef);return Y}async ensureMainTask(f){let{repo:J,key:Y}=LW(f),z=this.store.list().find((q)=>q.kind==="main"&&LW(q.repo).key===Y);if(z)return z;let G=this.mainTaskLocks.get(Y);if(G)return G;let Z=(async()=>{return await this.store.create({repo:J,title:DF(J),branch:"",worktreePath:DW(J),status:"backlog",kind:"main",vendor:yf})})();this.mainTaskLocks.set(Y,Z);try{return await Z}finally{this.mainTaskLocks.delete(Y)}}async ensureWorktree(f){let J=this.requireTask(f);if(J.kind==="main")return DW(J.repo);if(J.worktreePath)return J.worktreePath;let Y=this.worktreeLocks.get(J.id);if(Y)return await Y,this.requireTask(J.id).worktreePath;let z=(async()=>{let Z=await this.slugs.allocate(J.repo);try{let q=J.branch||LX(J.title,J.id),Q=this.pendingBaseRefs.get(J.id),H=await this.worktrees.createForTask({repo:J.repo,slug:Z,branch:q,baseRef:Q});this.slugs.commit(J.repo,Z),this.pendingBaseRefs.delete(J.id),await this.store.update(J.id,{worktreePath:H.path,branch:q})}catch(q){throw this.slugs.cancel(J.repo,Z),q}})();this.worktreeLocks.set(J.id,z);try{await z}finally{this.worktreeLocks.delete(J.id)}return this.requireTask(J.id).worktreePath}async setTitle(f,J){let Y=J.trim();if(!Y)throw Error("setTitle: title is required (empty or whitespace-only rejected)");let z=this.requireTask(f);if(z.title===Y)return;await this.store.update(z.id,{title:Y}),await this.followBranchToTitle(z,Y)}async followBranchToTitle(f,J){if(f.kind==="main"||!f.worktreePath)return;if(f.branch!==LX(RJ,f.id))return;let Y=LX(J,f.id);if(Y===f.branch)return;try{await this.setBranch(f.id,Y)}catch(z){console.error(`[kobe] follow-branch-to-title failed for ${f.id}:`,z)}}async setBranch(f,J){let Y=J.trim();if(!Y)throw Error("setBranch: branch is required (empty or whitespace-only rejected)");let z=this.requireTask(f);if(z.kind==="main")throw Error("setBranch: a main task tracks the repo's own branch; rename it with git directly");if(z.branch===Y)return;if(z.worktreePath)await this.worktrees.renameBranch(z.worktreePath,z.branch,Y);await this.store.update(z.id,{branch:Y})}async setVendor(f,J){let Y=this.requireTask(f);if(Y.vendor===J)return;await this.store.update(Y.id,{vendor:J})}async setPinned(f,J){let Y=this.requireTask(f);if(Y.kind==="main")return;let z=J??!Y.pinned;if((Y.pinned??!1)===z)return;await this.store.update(Y.id,{pinned:z})}async moveTask(f,J){let Y=this.requireTask(f);if(Y.kind==="main")return;let z=this.store.list().filter((G)=>(G.kind??"task")!=="main"&&G.archived===Y.archived&&(G.pinned??!1)===(Y.pinned??!1)).map((G)=>String(G.id));await this.store.move(Y.id,J,z)}async setArchived(f,J){let Y=this.requireTask(f);if(Y.kind==="main")return;let z=J??!Y.archived;if(Y.archived===z)return;await this.store.update(Y.id,{archived:z})}async reorderTasks(f){if(f.length===0)return;for(let J of f){if(this.requireTask(J.taskId).kind==="main")throw Error(`cannot reorder a main task: ${J.taskId}`);if(!Number.isFinite(J.position))throw Error(`position must be a finite number: ${J.taskId}`)}await this.store.reorder(f.map((J)=>({id:J.taskId,position:J.position})))}async setStatus(f,J){let Y=this.requireTask(f);if(Y.status===J)return;if(Y.status==="done"&&J==="error"||Y.status==="error"&&J==="done")throw new jH(Y.status,J,Y.id);await this.store.update(Y.id,{status:J})}async setPRStatus(f,J){let Y=this.requireTask(f);if(DX(Y.prStatus,J??void 0))return;await this.store.update(Y.id,{prStatus:J??void 0})}async deleteTask(f,J){let Y=this.store.get(f);if(!Y)return;if(Y.kind==="main")throw new VH;let z=J?.force===!0;if(Y.worktreePath){if(!z){let G=!1;try{G=await this.worktrees.isDirty(Y.worktreePath)}catch{}if(G)throw new UH(Y.id)}try{await this.worktrees.remove(Y.worktreePath,{force:z})}catch(G){throw new DH(Y.id,G)}}await this.store.remove(Y.id),this.pendingBaseRefs.delete(Y.id),this.worktreeLocks.delete(Y.id)}async discoverAdoptableWorktrees(f){if(!f)throw Error("discoverAdoptableWorktrees: repo is required");let J=await this.worktrees.listAll(f),Y=new Set(this.store.list().filter((z)=>z.worktreePath).map((z)=>xz(z.worktreePath)));return J.filter((z)=>!Y.has(xz(z.path)))}async adoptWorktree(f){if(!f.repo)throw Error("adoptWorktree: repo is required");if(!f.worktreePath)throw Error("adoptWorktree: worktreePath is required");let J=xz(f.worktreePath),Y=this.adoptLocks.get(J);if(Y)return Y;let z=this.adoptWorktreeLocked(f,J);this.adoptLocks.set(J,z);try{return await z}finally{this.adoptLocks.delete(J)}}async adoptWorktreeLocked(f,J){let Y=this.store.list().find((Q)=>Q.worktreePath&&xz(Q.worktreePath)===J);if(Y){if(f.ifExists==="return")return Y;throw Error(`adoptWorktree: ${f.worktreePath} is already adopted as a task`)}let G=(await this.worktrees.listAll(f.repo)).find((Q)=>xz(Q.path)===J);if(!G)throw Error(`adoptWorktree: ${f.worktreePath} is not an adoptable git worktree of ${f.repo} (unknown, detached, or the main checkout)`);let Z=f.branch?.trim()||G.branch,q=(f.title??KF(G.path)).trim()||RJ;return this.store.create({repo:f.repo,title:q,branch:Z,worktreePath:G.path,status:"backlog",kind:"task",vendor:f.vendor??yf})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(f){let J=this.store.get(f);if(!J)throw new WH(String(f));return J}}function DF(f){let J=f.split(/[/\\]/).filter(Boolean);return J.length>0?J[J.length-1]??f:f}function LW(f){let J=hJ(f);return{repo:J,key:D1(J)?J:xz(J)}}function xz(f){try{return VF(f)}catch{return UF(f)}}var RJ="(new task)";var iG=C(()=>{Wf();gf();S1();LH();UW()});function FX(f){return f.remoteVersion>=f.localMin&&f.localVersion>=f.remoteMin}function FW(f,J){if(!f)return!1;return f!==J}function MF(f){return typeof f==="string"&&LF.has(f)}function OW(f){if(!Array.isArray(f))return null;let J=new Set;for(let Y of f)if(MF(Y))J.add(Y);return J.size>0?J:null}function zJ(f){return{id:f.id,title:f.title,repo:f.repo,branch:f.branch,worktreePath:f.worktreePath,kind:f.kind??"task",status:f.status,archived:f.archived,pinned:f.pinned??!1,vendor:f.vendor,prStatus:f.prStatus,position:f.position,modelEffort:f.modelEffort,createdAt:f.createdAt,updatedAt:f.updatedAt}}function lG(f){return`${JSON.stringify(f)}
|
|
16
|
+
`}var c1=3,HY=2,FH,LF;var rY=C(()=>{FH=["task.snapshot","issue.snapshot","active-task","update","engine-state","ui-prefs","keybindings","task.jobs","worktree.changes","session.deliver"],LF=new Set(FH)});import{createHash as FF}from"crypto";import{homedir as OX,tmpdir as OF}from"os";import{join as pY}from"path";function AF(f){return FF("sha1").update(f).digest("hex").slice(0,8)}function AH(f,J,Y,z){if(Buffer.byteLength(f,"utf8")<=OH)return f;let G=AF(J),Z=z===void 0?"":`-${z}`,q=pY(OF(),`kobe-${G}-${Y}${Z}.sock`);if(Buffer.byteLength(q,"utf8")<=OH)return q;throw Error(`kobe socket path exceeds ${OH} bytes even after fallback: ${q}`)}function CJ(f){let J=process.env.KOBE_DAEMON_SOCKET_PATH;if(J&&J.length>0)return J;let Y=f??process.env.KOBE_HOME_DIR;if(Y&&Y.length>0)return AH(pY(Y,".kobe","daemon.sock"),Y,"daemon");let z=process.env.XDG_RUNTIME_DIR;if(z&&z.length>0)return AH(pY(z,"kobe.sock"),z,"daemon");let G=OX();return AH(pY(G,".kobe","daemon.sock"),G,"daemon")}function cJ(f=process.env.KOBE_HOME_DIR??OX()){let J=process.env.KOBE_DAEMON_PID_PATH;if(J&&J.length>0)return J;return pY(f,".kobe","daemon.pid")}function AX(f=process.env.KOBE_HOME_DIR??OX()){return pY(f,".kobe","daemon.log")}function AW(f=process.env.KOBE_HOME_DIR??OX()){return pY(f,".kobe","client.log")}var OH=100;var wz=()=>{};import{appendFile as gW,mkdir as gF}from"fs/promises";import{dirname as RF}from"path";function gX(f){kW=f}function CF(f){if(f instanceof Error)return{message:f.message,stack:f.stack};let J;try{J=typeof f==="string"?f:JSON.stringify(f)}catch{J=String(f)}return{message:J}}function NW(f,J,Y=new Date){return`[${Y.toISOString()}] client ${kW} [${f}] pid=${process.pid}: ${J}
|
|
17
|
+
`}function kF(){if(RW)return;RW=!0;try{process.stderr.write(`[kobe] client log write failed; continuing without it
|
|
18
|
+
`)}catch{}}function yW(f){let J=AW();CW=CW.then(async()=>{try{await gW(J,f)}catch(Y){if(Y?.code==="ENOENT")await gF(RF(J),{recursive:!0}),await gW(J,f);else throw Y}}).catch(()=>kF())}function nJ(f,J){yW(NW(f,J))}function BY(f,J){let Y=CF(J);yW(NW(f,Y.stack??Y.message))}var kW="client",RW=!1,CW;var _Y=C(()=>{wz();CW=Promise.resolve()});import{connect as NF}from"net";import{StringDecoder as yF}from"string_decoder";class n1{socketPath;socket=null;buffer="";nextId=1;pending=new Map;handlers=new Map;lifecycleHandlers=new Map;connecting=null;disposed=!1;constructor(f){this.socketPath=f}connect(){if(this.socket)return Promise.resolve();if(this.disposed)return Promise.reject(Error("daemon client disposed"));if(this.connecting)return this.connecting;let f=this.openSocket();this.connecting=f;let J=()=>{if(this.connecting===f)this.connecting=null};return f.then(J,J),f}get isDisposed(){return this.disposed}close(){this.disposed=!0,this.socket?.end(),this.socket=null,this.failPending()}forceDisconnect(){let f=this.socket;if(!f)return;this.socket=null,f.destroy(),this.failPending()}failPending(){if(this.pending.size===0)return;let f=Error("daemon connection closed");for(let J of this.pending.values())J.reject(f);this.pending.clear()}on(f,J){let Y=this.handlers.get(f);if(!Y)Y=new Set,this.handlers.set(f,Y);return Y.add(J),()=>{if(Y?.delete(J),Y?.size===0)this.handlers.delete(f)}}onChannel(f,J){return this.on(f,(Y)=>J(Y.payload))}subscribe(f={}){let J={};if(f.channels)J.channels=f.channels;if(f.role)J.role=f.role;return this.request("subscribe",J)}onLifecycle(f,J){let Y=this.lifecycleHandlers.get(f);if(!Y)Y=new Set,this.lifecycleHandlers.set(f,Y);return Y.add(J),()=>{if(Y?.delete(J),Y?.size===0)this.lifecycleHandlers.delete(f)}}async request(f,J){await this.connect();let Y=this.socket;if(!Y)throw Error("daemon connection is not open");let z=String(this.nextId++),G=new Promise((Z,q)=>{this.pending.set(z,{resolve:(Q)=>Z(Q),reject:q})});return Y.write(lG({type:"request",id:z,name:f,payload:J})),G}openSocket(){return new Promise((f,J)=>{let Y=NF(this.socketPath);this.socket=Y;let z=()=>{Y.off("error",G),f()},G=(q)=>{if(Y.off("connect",z),this.socket===Y)this.socket=null;J(q)};Y.once("connect",z),Y.once("error",G);let Z=new yF("utf8");this.buffer="",Y.on("data",(q)=>this.onData(Z.write(q))),Y.on("close",()=>this.onSocketClose(Y))})}onSocketClose(f){if(this.socket!==f)return;this.socket=null,this.failPending(),this.emitLifecycle("close")}emitLifecycle(f){for(let J of this.lifecycleHandlers.get(f)??[])try{J()}catch(Y){console.error(`[kobe] lifecycle handler for "${f}" threw:`,Y)}}onData(f){this.buffer+=f;let J=this.buffer.indexOf(`
|
|
19
|
+
`);while(J!==-1){let Y=this.buffer.slice(0,J);if(this.buffer=this.buffer.slice(J+1),Y.trim().length>0)this.onLine(Y);J=this.buffer.indexOf(`
|
|
20
|
+
`)}}onLine(f){let J;try{J=JSON.parse(f)}catch(z){BY("client-frame",z);return}if(J.type==="event"){this.emit(J);return}if(J.type!=="response")return;let Y=this.pending.get(J.id);if(!Y)return;if(this.pending.delete(J.id),J.error){let z=Error(J.error.message);if(J.error.name)z.name=J.error.name;Y.reject(z)}else Y.resolve(J.payload)}emit(f){for(let J of this.handlers.get(f.name)??[])J(f);for(let J of this.handlers.get("*")??[])J(f)}}var aG=C(()=>{rY();_Y()});function RX(f){return bF.includes(f)}function bW(f,J,Y){switch(J){case"session-start":case"session-end":return"idle";case"turn-start":return"running";case"turn-complete":return"turn_complete";case"turn-failed":return Y?.failure==="rate_limit"||Y?.failure==="billing"?"rate_limited":"error";case"awaiting-input":return Y?.waiting==="permission"?"permission_needed":"running"}}var bF;var CX=C(()=>{bF=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function SF(){let f=process.env.KOBE_ENGINE_STATE_TTL_MS;if(f===void 0)return SW;let J=Number(f);return Number.isFinite(J)&&J>0?J:SW}class gH{bus;staleMs;now;activity=new Map;constructor(f,J=SF(),Y=()=>Date.now()){this.bus=f;this.staleMs=J;this.now=Y}report(f,J,Y){let z=this.activity.get(f);if(z?.lapse)clearTimeout(z.lapse);let G=bW(z?.state,J,Y),Z=this.now(),q={state:G,detail:Y,at:Z};if(G!=="idle"&&G!=="turn_complete")q.lapse=setTimeout(()=>{let Q=this.activity.get(f);if(Q&&Q.at===Z)this.publishIdle(f)},this.staleMs),q.lapse.unref?.();this.activity.set(f,q),this.bus.publish("engine-state",this.payload(f,q))}clearTask(f){let J=this.activity.get(f);if(J?.lapse)clearTimeout(J.lapse);if(this.activity.delete(f),J)this.bus.publish("engine-state",{taskId:f,state:"idle",at:this.now()})}snapshotByTask(){let f={};for(let[J,Y]of this.activity)f[J]=this.payload(J,Y);return f}currentNonIdle(){let f=[];for(let[J,Y]of this.activity)if(Y.state!=="idle")f.push(this.payload(J,Y));return f}close(){for(let f of this.activity.values())if(f.lapse)clearTimeout(f.lapse);this.activity.clear()}publishIdle(f){let J={state:"idle",at:this.now()};this.activity.set(f,J),this.bus.publish("engine-state",this.payload(f,J))}payload(f,J){return{taskId:f,state:J.state,...J.detail?{detail:J.detail}:{},at:J.at}}}var SW=600000;var IW=C(()=>{CX()});import{spawnSync as IF}from"child_process";import{existsSync as TF,statSync as uF}from"fs";import{homedir as EF}from"os";import $G from"path";async function TW(f=xF){let J=[],Y=(B)=>{if(!B)return;return J.push(B),f.fileExists(B)?B:void 0},z=f.which("claude");if(z){if(J.push(`which:${z}`),f.fileExists(z))return z}let G=f.home(),Z=Y($G.join(G,".claude","local","claude"));if(Z)return Z;let q=f.env("NVM_BIN");if(q){let B=Y($G.join(q,"claude"));if(B)return B}let Q=$G.join(G,".nvm","versions","node"),H=f.readdir(Q).sort().reverse();for(let B of H){let V=Y($G.join(Q,B,"bin","claude"));if(V)return V}for(let B of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude","/bin/claude"]){let V=Y(B);if(V)return V}for(let B of[".local/bin/claude",".npm-global/bin/claude",".yarn/bin/claude",".bun/bin/claude","bin/claude"]){let V=Y($G.join(G,B));if(V)return V}throw new kX(J)}var kX,xF;var uW=C(()=>{kX=class kX extends Error{checkedPaths;constructor(f){super(`Claude Code binary not found. Checked: ${f.join(", ")}. Ensure 'claude' is on PATH, or install at ~/.claude/local/claude.`);this.name="ClaudeBinaryNotFoundError",this.checkedPaths=f}};xF={fileExists(f){try{return uF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return EF()},which(f){let J=process.platform==="win32"?"where":"which",Y=IF(J,[f],{encoding:"utf8"});if(Y.status!==0)return;let z=Y.stdout.split(`
|
|
21
|
+
`).map((G)=>G.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("claude:")&&z.includes("aliased to")){let G=z.split("aliased to")[1]?.trim();return G&&TF(G)?G:void 0}return z},readdir(f){try{return $Z("fs").readdirSync(f)}catch{return[]}}}});import{spawnSync as wF}from"child_process";import{existsSync as hF,statSync as PF}from"fs";import{homedir as vF}from"os";import EW from"path";async function xW(f=mF){let J=[],Y=(q)=>{if(!q)return;return J.push(q),f.fileExists(q)?q:void 0},z=f.which("codex");if(z){if(J.push(`which:${z}`),f.fileExists(z))return z}let G=f.home();for(let q of["/opt/homebrew/bin/codex","/usr/local/bin/codex","/usr/bin/codex","/bin/codex"]){let Q=Y(q);if(Q)return Q}let Z=f.env("NVM_BIN");if(Z){let q=Y(EW.join(Z,"codex"));if(q)return q}for(let q of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let Q=Y(EW.join(G,q));if(Q)return Q}throw new NX(J)}var NX,mF;var wW=C(()=>{NX=class NX extends Error{checkedPaths;constructor(f){super(`Codex CLI binary not found. Checked: ${f.join(", ")}. Ensure 'codex' is on PATH (e.g. \`brew install codex\` or the official installer).`);this.name="CodexBinaryNotFoundError",this.checkedPaths=f}};mF={fileExists(f){try{return PF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return vF()},which(f){let J=process.platform==="win32"?"where":"which",Y=wF(J,[f],{encoding:"utf8"});if(Y.status!==0)return;let z=Y.stdout.split(`
|
|
22
|
+
`).map((G)=>G.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("codex:")&&z.includes("aliased to")){let G=z.split("aliased to")[1]?.trim();return G&&hF(G)?G:void 0}return z},readdir(f){try{return $Z("fs").readdirSync(f)}catch{return[]}}}});import{spawnSync as cF}from"child_process";import{existsSync as nF,statSync as dF}from"fs";import{homedir as iF}from"os";import jY from"path";async function hW(f=lF){let J=[],Y=(V)=>{if(!V)return;return J.push(V),f.fileExists(V)?V:void 0},z=f.which("copilot");if(z){if(J.push(`which:${z}`),f.fileExists(z))return z}let G=f.platform()==="win32"?["copilot.exe","copilot.cmd","copilot"]:["copilot"],Z=(V)=>{if(!V)return;for(let j of G){let U=Y(jY.join(V,j));if(U)return U}return};for(let V of["/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin"]){let j=Z(V);if(j)return j}let q=f.env("NVM_BIN"),Q=Z(q);if(Q)return Q;let H=f.home(),B=[jY.join(H,".npm-global/bin"),jY.join(H,".local/bin"),jY.join(H,".bun/bin"),jY.join(H,"bin")];if(f.platform()==="win32"){let V=f.env("APPDATA"),j=f.env("LOCALAPPDATA");if(B.unshift(jY.join(H,"AppData/Roaming/npm")),V)B.unshift(jY.join(V,"npm"));if(j)B.unshift(jY.join(j,"npm"))}for(let V of B){let j=Z(V);if(j)return j}throw new yX(J)}var yX,lF;var PW=C(()=>{yX=class yX extends Error{checkedPaths;constructor(f){super(`GitHub Copilot CLI binary not found. Checked: ${f.join(", ")}. Ensure 'copilot' is on PATH (for example \`npm install -g @github/copilot\` or \`brew install copilot-cli\`).`);this.name="CopilotBinaryNotFoundError",this.checkedPaths=f}};lF={fileExists(f){try{return dF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return iF()},which(f){let J=process.platform==="win32"?"where":"which",Y=cF(J,[f],{encoding:"utf8"});if(Y.status!==0)return;let z=Y.stdout.split(`
|
|
23
|
+
`).map((G)=>G.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("copilot:")&&z.includes("aliased to")){let G=z.split("aliased to")[1]?.trim();return G&&nF(G)?G:void 0}return z},platform(){return process.platform}}});import{readFileSync as aF,statSync as $F}from"fs";import{homedir as rF}from"os";import WY from"path";function pF(f,J){let Y=f("CLAUDE_CONFIG_DIR")?.trim();if(Y)return WY.join(Y,".claude.json");return WY.join(J,".claude.json")}function _F(f,J){let z=f("CODEX_HOME")?.trim()??WY.join(J,".codex");return WY.join(z,"auth.json")}function oF(f,J){let z=f("COPILOT_HOME")?.trim()??WY.join(J,".copilot");return WY.join(z,"config.json")}function sF(f){let J=f.split(".");if(J.length!==3)return null;let Y=J[1];if(!Y)return null;let z=Y.replace(/-/g,"+").replace(/_/g,"/"),G=z+"=".repeat((4-z.length%4)%4);try{let Z=Buffer.from(G,"base64").toString("utf8"),q=JSON.parse(Z);return typeof q==="object"&&q!==null?q:null}catch{return null}}async function SX(f){try{return{found:!0,path:await f()}}catch(J){if(J instanceof kX||J instanceof NX||J instanceof yX)return{found:!1,error:"not found on PATH"};return{found:!1,error:J instanceof Error?J.message:String(J)}}}async function vW(f){return(await Promise.all([["claude",()=>f.findClaudeBinary()],["codex",()=>f.findCodexBinary()],["copilot",()=>f.findCopilotBinary()]].map(async([z,G])=>(await SX(G)).found?z:null))).filter((z)=>z!==null)}function tF(f=hz){if(f!==hz)return vW(f);if(bX)return bX;let J=vW(f).catch((Y)=>{throw bX=null,Y});return bX=J,J}async function dJ(f=hz){return[...await tF(f),...pQ()]}async function IX(f=hz){let J=await SX(()=>f.findClaudeBinary()),Y=pF(f.env,f.home()),z;try{z=f.readFile(Y)}catch(H){return{binary:J,account:{kind:"none"},accountError:`read ${Y}: ${H instanceof Error?H.message:String(H)}`}}if(z===null)return{binary:J,account:{kind:"none"}};let G;try{G=JSON.parse(z)}catch(H){return{binary:J,account:{kind:"none"},accountError:`parse ${Y}: ${H instanceof Error?H.message:String(H)}`}}let Z=G?.oauthAccount;if(!Z||typeof Z!=="object")return{binary:J,account:{kind:"none"}};let q=Z,Q=typeof q.emailAddress==="string"?q.emailAddress:void 0;if(!Q)return{binary:J,account:{kind:"none"}};return{binary:J,account:{kind:"oauth",email:Q,organization:typeof q.organizationName==="string"?q.organizationName:void 0,displayName:typeof q.displayName==="string"?q.displayName:void 0,billingType:typeof q.billingType==="string"?q.billingType:void 0}}}async function TX(f=hz){let J=await SX(()=>f.findCodexBinary()),Y=_F(f.env,f.home()),z;try{z=f.readFile(Y)}catch(B){return{binary:J,account:{kind:"none"},accountError:`read ${Y}: ${B instanceof Error?B.message:String(B)}`}}if(z===null)return{binary:J,account:{kind:"none"}};let G;try{G=JSON.parse(z)}catch(B){return{binary:J,account:{kind:"none"},accountError:`parse ${Y}: ${B instanceof Error?B.message:String(B)}`}}let Z=G??{},q=Z.tokens,Q=typeof q?.id_token==="string"?q.id_token:void 0;if(Q){let B=sF(Q);if(!B)return{binary:J,account:{kind:"none"},accountError:"codex id_token: malformed JWT"};let V=typeof B.email==="string"?B.email:void 0,j=B["https://api.openai.com/auth"],U=typeof j==="object"&&j!==null&&!Array.isArray(j)?j:void 0,L=typeof U?.chatgpt_plan_type==="string"?U.chatgpt_plan_type:void 0;if(V)return{binary:J,account:{kind:"chatgpt",email:V,plan:L}};return{binary:J,account:{kind:"none"},accountError:"codex id_token: no email claim"}}let H=Z.OPENAI_API_KEY;if(typeof H==="string"&&H.length>0)return{binary:J,account:{kind:"apikey"}};return{binary:J,account:{kind:"none"}}}async function uX(f=hz){let J=await SX(()=>f.findCopilotBinary());for(let Z of["COPILOT_GITHUB_TOKEN","GH_TOKEN","GITHUB_TOKEN"])if(f.env(Z)?.trim())return{binary:J,account:{kind:"token",source:Z}};let Y=oF(f.env,f.home()),z;try{z=f.readFile(Y)}catch(Z){return{binary:J,account:{kind:"none"},accountError:`read ${Y}: ${Z instanceof Error?Z.message:String(Z)}`}}if(z===null)return{binary:J,account:{kind:"none"}};let G;try{G=JSON.parse(z)}catch(Z){return{binary:J,account:{kind:"none"},accountError:`parse ${Y}: ${Z instanceof Error?Z.message:String(Z)}`}}if(!RH(G))return{binary:J,account:{kind:"none"}};if(mW(G,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:J,account:{kind:"oauth"}};return{binary:J,account:{kind:"none"}}}function RH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function mW(f,J,Y=0){if(Y>4||!RH(f))return!1;for(let[z,G]of Object.entries(f)){if(J.includes(z)&&typeof G==="string"&&G.length>0)return!0;if(RH(G)&&mW(G,J,Y+1))return!0}return!1}var hz,bX=null;var oY=C(()=>{gf();uW();wW();PW();hz={readFile(f){try{$F(f)}catch(J){if(J.code==="ENOENT")return null;throw J}return aF(f,"utf8")},env(f){return process.env[f]},home(){return rF()},findClaudeBinary(){return TW()},findCodexBinary(){return xW()},findCopilotBinary(){return hW()}}});function cW(f){if(typeof f==="string")return f.length>0?[{type:"text",text:f}]:[];if(!Array.isArray(f))return[];let J=[];for(let Y of f){if(typeof Y==="string"){if(Y.length>0)J.push({type:"text",text:Y});continue}if(!Y||typeof Y!=="object")continue;let z=Y;if(z.type==="text"&&typeof z.text==="string"){J.push({type:"text",text:z.text});continue}if(z.type==="tool_use"){J.push({type:"tool_call",callId:typeof z.id==="string"?z.id:"",name:typeof z.name==="string"?z.name:"",input:z.input});continue}if(z.type==="tool_result"){J.push({type:"tool_result",callId:typeof z.tool_use_id==="string"?z.tool_use_id:"",output:z.content,isError:z.is_error===!0});continue}if(z.type==="thinking"&&typeof z.thinking==="string")J.push({type:"thinking",text:z.thinking})}return J}function nW(f){return f.isMeta===!0||f.isCompactSummary===!0}function dW(f){if(f.length===0)return!1;for(let J of f){if(J.type!=="text")return!1;let Y=J.text.trim();if(!Y.startsWith("<command-name>")&&!Y.startsWith("<command-message>")&&!Y.startsWith("<local-command"))return!1}return!0}import{appendFile as Ju,mkdir as Yu,readFile as eF,readdir as CH,stat as f3,unlink as zu,writeFile as Gu}from"fs/promises";import{homedir as iW}from"os";import EX from"path";function Y3(f){return f.replace(/[/.]/g,"-")}async function rG(f){if(!f)return[];let J=EX.join(iW(),".claude","projects",Y3(f)),Y;try{Y=await CH(J)}catch{return[]}let z=[];for(let G of Y){if(!G.endsWith(".jsonl"))continue;let Z=EX.join(J,G),q=0;try{q=(await f3(Z)).mtimeMs}catch{}z.push({sessionId:G.slice(0,-6),path:Z,mtimeMs:q})}return z.sort((G,Z)=>Z.mtimeMs-G.mtimeMs),z}async function lW(f){return(await rG(f))[0]?.mtimeMs??0}async function aW(f,J=J3){let Y=J.projectsDir(),z=await J.readdir(Y);for(let G of z){let Z=EX.join(Y,G,`${f}.jsonl`),q;try{q=await J.readFile(Z)}catch{continue}return z3(G3(q,f))}return[]}function z3(f){return f.map((J,Y)=>({msg:J,idx:Y})).sort((J,Y)=>{if(J.msg.timestamp<Y.msg.timestamp)return-1;if(J.msg.timestamp>Y.msg.timestamp)return 1;return J.idx-Y.idx}).map((J)=>J.msg)}function G3(f,J){let Y=[];for(let z of f.split(`
|
|
24
|
+
`)){let G=z.trim();if(!G)continue;let Z;try{Z=JSON.parse(G)}catch{continue}if(!kH(Z))continue;let q=Z3(Z,J);if(q)Y.push(q)}return Y}function Z3(f,J){if(nW(f))return null;let Y=kH(f.message)?f.message:f,z=Y.role;if(z!=="user"&&z!=="assistant"&&z!=="system")return null;if(!("content"in Y))return null;let G=cW(Y.content);if(z==="user"&&dW(G))return null;let Z=typeof f.timestamp==="string"?f.timestamp:new Date().toISOString(),q=typeof f.sessionId==="string"?f.sessionId:J,Q=X3(Y.usage);return Q?{role:z,blocks:G,timestamp:Z,sessionId:q,usage:Q}:{role:z,blocks:G,timestamp:Z,sessionId:q}}function X3(f){if(!kH(f))return;let J=typeof f.input_tokens==="number"?f.input_tokens:void 0,Y=typeof f.output_tokens==="number"?f.output_tokens:void 0;if(J===void 0||Y===void 0)return;let z=typeof f.cache_read_input_tokens==="number"?f.cache_read_input_tokens:void 0,G=typeof f.cache_creation_input_tokens==="number"?f.cache_creation_input_tokens:void 0;return{input_tokens:J,output_tokens:Y,...z!==void 0?{cache_read_input_tokens:z}:{},...G!==void 0?{cache_creation_input_tokens:G}:{}}}function kH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var J3;var NH=C(()=>{J3={projectsDir(){return EX.join(iW(),".claude","projects")},async readdir(f){try{return await CH(f)}catch{return[]}},async readFile(f){return await eF(f,"utf8")},async pathExists(f){try{return await CH(f),!0}catch{return!1}}}});import{fileURLToPath as rW}from"url";function Cf(){if(import.meta.url.endsWith(".js"))return["kobe"];let J=rW(new URL("./index.ts",import.meta.url)),Y=rW(import.meta.resolve("@opentui/solid/preload"));return[process.execPath,"--preload",Y,"--conditions=browser",J]}var iJ=()=>{};function yH(f,J={}){if(J.bareSafe&&q3.test(f))return f;return`'${f.replace(/'/g,"'\\''")}'`}function xX(f,J={}){return f.map((Y)=>yH(Y,J)).join(" ")}var q3;var bH=C(()=>{q3=/^[A-Za-z0-9_/.:=-]+$/});function _G(f){return`kobe-hidden-${f.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function _W(f){let J=Number.parseInt(f.replace(/^@/,""),10);return Number.isFinite(J)&&J>=0?1000+J:1000}function tY(f){if(!Number.isFinite(f))return sY;return Math.max(Q3,Math.min(H3,Math.round(f)))}function $J(f){if(!Number.isFinite(f))return null;return Math.max(B3,Math.min(j3,Math.round(f)))}function zf(f){return yH(f)}function g1(f){return xX(f)}function R1(f){return`${f}; __rc=$?; [ "$__rc" -ne 0 ] && printf '${"\\n \u26A0 Engine exited (code %s). Check Settings \u2192 Engines, fix the launch command, then press R to relaunch.\\n\\n"}' "$__rc"; exec "\${SHELL:-/bin/sh}"`}function SH(f){return`'${f.replace(/'/g,"'\\''")}'`}function oW(){return`clear; printf ${SH("\\n No task selected\\n\\n Press N to create a task, or pick one on the left.\\n\\n")}; exec "\${SHELL:-/bin/sh}"`}function sW(f,J){let Y=R1(f),z=J?.initScript?.trim();if(!z)return Y;let G=["{",z,"}"].join(`
|
|
25
|
+
`);if(J?.markerPath){let Z=SH(J.markerPath),q=SH(W3(J.markerPath));return[`if [ ! -f ${Z} ]; then`,G,`if [ $? -eq 0 ]; then mkdir -p ${q} && : > ${Z}; fi`,"fi",Y].join(`
|
|
26
|
+
`)}return[G,Y].join(`
|
|
27
|
+
`)}function W3(f){let J=f.lastIndexOf("/");return J<=0?".":f.slice(0,J)}function pW(f){return`cd ${zf(f)} && while :; do clear; printf "\\033[1m# %s\\033[0m\\n\\n" ${zf(f)}; git status --short --branch 2>/dev/null | sed 's/^/ /' || true; printf "\\n"; if command -v lsd >/dev/null 2>&1; then lsd --tree --git -I node_modules -I .git --depth 2 .; elif command -v eza >/dev/null 2>&1; then eza --tree --git -L 2 -I 'node_modules|.git' .; elif command -v tree >/dev/null 2>&1; then tree -L 2 -I 'node_modules|.git'; else ls -la; fi; sleep 2; done`}function tW(f){let J=zf(f.worktree),Y=zf(f.relPath),z=f.cliInvocation.map(zf).join(" "),G=`cd ${J} && if ! git diff --quiet HEAD -- ${Y} 2>/dev/null; then git diff HEAD -- ${Y} | { delta --paging=always 2>/dev/null || less -R; }; else bat --style=plain --paging=always ${Y} 2>/dev/null || \${PAGER:-less} ${Y} 2>/dev/null || cat ${Y}; fi`;return`${z} ops --worktree ${J} --preview ${Y} || { ${G}; }`}function eW(f){return`${g1([...f.cliInvocation,"update-page"])}`}function fV(f){let J=f.opener??"open";return[`tmux -L ${zf(f.tmuxSocket)} capture-pane -Jp -t '#{pane_id}' -S -500`,`grep -oiE 'https?://[^ "'\\''()<>]+'`,"awk '!seen[$0]++'","{ command -v fzf >/dev/null && fzf --reverse || tail -1; }",`xargs -I{} ${J} {}`].join(" | ")}function VY(f,J={}){let Y=[...f,"tasks"];if(J.initialTaskId)Y.push("--initial-task-id",J.initialTaskId);return g1(Y)}function mz(f){if(f.taskId&&f.claudePaneId){let J=f.cliInvocation.map(zf).join(" "),Y=f.vendor?` --vendor ${zf(f.vendor)}`:"";return`KOBE_FILETREE_WATCH=1 ${J} ops --task-id ${zf(f.taskId)} --worktree ${zf(f.cwd)} --target-pane ${zf(f.claudePaneId)}${Y} || { ${pW(f.cwd)}; }`}return pW(f.cwd)}var sY=32,d1="tasks",Pz="claude",GJ="ops",ZJ="shell",pG="workspace_aux",IH=4,XJ="@kobe_hidden_shell_pane",A1="@kobe_hidden_tasks_pane",vz="@kobe_zen_panes",lJ="@kobe_tasks_width",Q3=16,H3=120,wX=60,oG=50,eY="@kobe_right_width_pct",aJ="@kobe_ops_height_pct",B3=10,j3=90;var qJ=C(()=>{bH()});import{mkdir as V3,readFile as K3,writeFile as U3}from"fs/promises";import{dirname as D3}from"path";function L3(f){if(typeof f!=="string")return"other";if(f==="rate_limit"||f==="overloaded")return"rate_limit";if(f==="billing_error")return"billing";return"other"}function kJ(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}async function F3(f){try{let J=JSON.parse(await K3(f,"utf8"));return kJ(J)?J:{}}catch{return{}}}function O3(f){if(!kJ(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>kJ(J)&&typeof J.command==="string"&&J.command.includes(TH))}function A3(f){if(!kJ(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>kJ(J)&&typeof J.command==="string"&&M3.some((Y)=>J.command.includes(Y)))}function g3(f,J){let{hooks:Y,...z}=f,{WorktreeCreate:G,...Z}=kJ(Y)?Y:{},Q=(Array.isArray(G)?G:[]).filter((B)=>!O3(B));if(J!==null)Q.push({hooks:[{type:"command",command:J}]});let H={...Z};if(Q.length>0)H.WorktreeCreate=Q;return Object.keys(H).length>0?{...z,hooks:H}:{...z}}function R3(f=Cf()){let J={};for(let{event:Y,matcher:z,verb:G}of hX){let q={hooks:[{type:"command",command:g1([...f,"hook",G])}]};if(z)q.matcher=z;J[Y]=[q]}return J}function JV(f,J,Y=Cf()){let{hooks:z,...G}=f,Z=kJ(z)?{...z}:{},q=J?R3(Y):{};for(let{event:Q}of hX){let B=(Array.isArray(Z[Q])?Z[Q]:[]).filter((V)=>!A3(V));if(J&&Array.isArray(q[Q]))B.push(...q[Q]);if(B.length>0)Z[Q]=B;else delete Z[Q]}return Object.keys(Z).length>0?{...G,hooks:Z}:{...G}}function C3(f=Cf()){return{PostToolUse:[{matcher:"Bash",hooks:[{type:"command",command:g1([...f,"hook",TH])}]}]}}function k3(f){if(!kJ(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>kJ(J)&&typeof J.command==="string"&&J.command.includes(TH))}function YV(f,J,Y=Cf()){let{hooks:z,...G}=f,Z=kJ(z)?{...z}:{},q="PostToolUse",H=(Array.isArray(Z.PostToolUse)?Z.PostToolUse:[]).filter((B)=>!k3(B));if(J)H.push(...C3(Y).PostToolUse);if(H.length>0)Z.PostToolUse=H;else delete Z.PostToolUse;return Object.keys(Z).length>0?{...G,hooks:Z}:{...G}}class uH{vendor="claude";supportsHooks(){return!0}activityDetailFromPayload(f,J){if(f==="turn-failed")return{failure:L3(J.error_type)};if(f==="awaiting-input")return{waiting:"permission"};return}supportsWorktreeSync(){return!0}async installActivityHooks(f){await this.editSettings(f,(J)=>JV(J,!0))}async removeActivityHooks(f){await this.editSettings(f,(J)=>JV(J,!1))}async removeWorktreeSyncHook(f){await this.editSettings(f,(J)=>g3(J,null))}async installWorktreeWatchHook(f){await this.editSettings(f,(J)=>YV(J,!0))}async removeWorktreeWatchHook(f){await this.editSettings(f,(J)=>YV(J,!1))}async editSettings(f,J){try{let Y=await F3(f),z=J(Y);if(JSON.stringify(z)===JSON.stringify(Y))return;await V3(D3(f),{recursive:!0}),await U3(f,`${JSON.stringify(z,null,2)}
|
|
28
|
+
`)}catch{}}}var hX,Mu,M3,TH="worktree-created";var zV=C(()=>{iJ();qJ();hX=[{event:"SessionStart",verb:"session-start"},{event:"UserPromptSubmit",verb:"turn-start"},{event:"Stop",verb:"turn-complete"},{event:"StopFailure",verb:"turn-failed"},{event:"Notification",matcher:"permission_prompt",verb:"awaiting-input"},{event:"SessionEnd",verb:"session-end"}],Mu=hX.map((f)=>f.event);M3=hX.map((f)=>g1(["hook",f.verb]))});function EH(f){if(typeof f==="string")return f.length>0?[{type:"text",text:f}]:[];if(!Array.isArray(f))return[];let J=[];for(let Y of f){if(typeof Y==="string"){if(Y.length>0)J.push({type:"text",text:Y});continue}if(!N3(Y))continue;let z=typeof Y.type==="string"?Y.type:void 0;if(z==="input_text"||z==="output_text"){let G=typeof Y.text==="string"?Y.text:"";if(G.length>0)J.push({type:"text",text:G});continue}if(z)J.push({type:"text",text:`[codex: ${z}]`})}return J}function N3(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function GV(f){if(f.length===0)return!1;for(let J of f){if(J.type!=="text")return!1;let Y=(J.text??"").trim();if(!y3(Y)&&!b3(Y))return!1}return!0}function y3(f){return f.startsWith("<environment_context>")&&f.endsWith("</environment_context>")}function b3(f){return f.startsWith("# AGENTS.md instructions for ")&&f.includes(`
|
|
29
29
|
<INSTRUCTIONS>
|
|
30
|
-
`)&&
|
|
31
|
-
`)){let
|
|
32
|
-
`)){let G=
|
|
33
|
-
`)){let G=
|
|
34
|
-
`)){let
|
|
35
|
-
`)){let
|
|
36
|
-
`)){G++;let
|
|
37
|
-
`)){
|
|
38
|
-
`).filter((
|
|
39
|
-
`)){let
|
|
40
|
-
`)){let
|
|
41
|
-
`)){let[
|
|
42
|
-
`)){let[
|
|
43
|
-
`}function
|
|
44
|
-
`}function
|
|
45
|
-
`}function VZ(J,Y){process.stderr.write(u3(J,Y))}function MV(J=(Y)=>process.stderr.write(Y)){if(aB||pB)return;aB=(Y)=>J(LV("unhandledRejection",Y)),pB=(Y)=>J(LV("uncaughtException",Y)),process.on("unhandledRejection",aB),process.on("uncaughtException",pB)}var aB,pB;async function x3(J,Y=wX){let Z=[];for(let X of J.listTasks()){if(X.archived||X.title!==OY||!X.worktreePath)continue;try{let G=await Y(X.worktreePath,X.vendor??k1);if(!G)continue;let z=J.getTask(X.id);if(!z||z.title!==OY)continue;await J.setTitle(X.id,G),Z.push({id:X.id,title:G})}catch(G){b1("auto-title-poller",G)}}return Z}function FV(J,Y=_B,Z){if(Y<=0)return()=>{};let X=!1,z=setInterval(()=>{if(Z&&!Z())return;if(X)return;X=!0,x3(J).then(()=>KV(J)).catch((f)=>b1("auto-title-poller",f)).finally(()=>{X=!1})},Y);return z.unref?.(),()=>clearInterval(z)}var _B=4000;var OV=S(()=>{uQ();xG();UV();SJ()});class rB{last=new Map;sinks=new Set;publish(J,Y){this.last.set(J,Y);let Z={channel:J,payload:Y};for(let X of this.sinks)X(Z)}snapshot(){return[...this.last].map(([J,Y])=>({channel:J,payload:Y}))}onPublish(J){return this.sinks.add(J),()=>{this.sinks.delete(J)}}}function vQ(){return c1()[YX]===!0}var YX="experimental.autoStatus";var rG=S(()=>{cZ()});async function AV(J,Y,Z=vQ){if(!Z())return"skipped";let X=J.getTask(Y);if(!X)return"skipped";if((X.kind??"task")==="main"||X.archived)return"skipped";if(X.status!=="backlog")return"skipped";return await J.setStatus(Y,"in_progress"),"moved"}var RV=S(()=>{rG()});import{createHash as w3}from"crypto";import{homedir as h3}from"os";import UZ from"path";function d3(){return UZ.join(process.env.KOBE_HOME_DIR??h3(),".kobe")}function n3(J){let Z=(UZ.basename(J)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",X=w3("sha1").update(UZ.resolve(J)).digest("hex").slice(0,12);return`${Z}-${X}`}function i3(J){if(!UZ.isAbsolute(J))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${J}`);return UZ.join(d3(),P3,n3(J))}function l3(J){if(!UZ.isAbsolute(J))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${J}`);return[i3(J),...c3.map((Y)=>UZ.join(J,Y))]}function KZ(J){return J.length>1&&J.endsWith("/")?J.slice(0,-1):J}function CV(J,Y){return Y===J||Y.startsWith(`${J}/`)}function gV(J,Y){let Z=KZ(Y),X,G=-1;for(let z of J){if(!z.worktreePath)continue;let f=KZ(z.worktreePath);if(CV(f,Z)&&f.length>G)G=f.length,X=z.id}return X}function oB(J,Y){let Z=KZ(Y),X,G=-1;for(let z of J){if(!z.repo)continue;let f=KZ(z.repo);if(CV(f,Z)&&f.length>G)G=f.length,X=f}return X}function yV(J,Y){let Z=KZ(Y),X=new Set,G=new Set;for(let z of J){if(z.repo)X.add(KZ(z.repo));if(z.worktreePath)G.add(KZ(z.worktreePath))}for(let z of X)for(let f of l3(z).map(KZ)){let q=`${f}/`;if(!Z.startsWith(q))continue;let j=Z.slice(q.length).split("/")[0];if(!j)continue;let K=`${q}${j}`;if(G.has(K))return;return{repo:z,worktreePath:K}}return}var P3="worktrees",v3=".kobe/worktrees",m3=".claude/worktrees",c3;var SV=S(()=>{c3=[v3,m3]});function eB(J){return{message:J instanceof Error?J.message:String(J),name:J instanceof Error?J.name:void 0}}async function oG(J,Y,Z,X){let G=J.get(Y);if(!G)throw Error(`unknown daemon request: ${Y}`);return G.handle(Jj(Z),X)}function sG(){return new Map([{name:"hello",handle(Y,Z){let X=typeof Y.protocolVersion==="number"?Y.protocolVersion:hJ,G=typeof Y.minProtocolVersion==="number"?Y.minProtocolVersion:X;if(!jQ({localVersion:hJ,localMin:GZ,remoteVersion:X,remoteMin:G}))throw Error(`daemon is protocol v${hJ} (min v${GZ}); this client is v${X} (min v${G}). Upgrade your kobe.`);return{protocolVersion:hJ,minProtocolVersion:GZ,kobeVersion:i0,capabilities:[...jB],daemonPid:Z.daemon.pid,clientId:Z.clientId,tasks:Z.orch.listTasks().map(eJ)}}},{name:"daemon.status",handle(Y,Z){return{daemonPid:Z.daemon.pid,kobeVersion:i0,uptimeMs:Date.now()-Z.daemon.startedAt.getTime(),startedAt:Z.daemon.startedAt.toISOString(),attachedClients:Z.daemon.guiCount(),taskCount:Z.orch.listTasks().length,socketPath:Z.daemon.socketPath,webPort:Z.daemon.webPort??null}}},{name:"daemon.stop",async handle(Y,Z){return await Z.daemon.stopSoon(),{}}},{name:"task.list",handle(Y,Z){return{tasks:Z.orch.listTasks().map(eJ)}}},{name:"task.get",handle(Y,Z){let X=M1(Y,"taskId"),G=Z.orch.getTask(X);if(!G)throw Error(`task not found: ${X}`);return{task:eJ(G)}}},{name:"task.create",async handle(Y,Z){let X=M1(Y,"repo"),G=await Z.orch.createTask({repo:X,title:cJ(Y,"title"),branch:cJ(Y,"branch"),baseRef:cJ(Y,"baseRef"),vendor:tB(Y,"vendor"),modelEffort:cJ(Y,"effort")});return{taskId:G.id,task:eJ(G)}}},{name:"task.archive",async handle(Y,Z){let X=M1(Y,"taskId");return await Z.orch.setArchived(X,sB(Y,"archived")),{}}},{name:"task.rename",async handle(Y,Z){let X=M1(Y,"taskId");return await Z.orch.setTitle(X,M1(Y,"title")),{}}},{name:"task.setBranch",async handle(Y,Z){let X=M1(Y,"taskId");return await Z.orch.setBranch(X,M1(Y,"branch")),{}}},{name:"task.setVendor",async handle(Y,Z){let X=M1(Y,"taskId"),G=tB(Y,"vendor");if(!G)throw Error("task.setVendor: vendor is required");return await Z.orch.setVendor(X,G),{}}},{name:"task.delete",async handle(Y,Z){let X=M1(Y,"taskId");return await Z.orch.deleteTask(X,{force:sB(Y,"force")}),Z.activity.clearTask(X),{}}},{name:"task.pin",async handle(Y,Z){let X=M1(Y,"taskId");return await Z.orch.setPinned(X,sB(Y,"pinned")),{}}},{name:"task.move",async handle(Y,Z){let X=M1(Y,"taskId"),G=M1(Y,"direction");if(G!=="up"&&G!=="down")throw Error("direction must be up or down");return await Z.orch.moveTask(X,G==="up"?-1:1),{}}},{name:"task.status",async handle(Y,Z){let X=M1(Y,"taskId"),G=M1(Y,"status");if(!Q9(G))throw Error("status must be a TaskStatus");let z=G==="done"?Z.orch.getTask(X):void 0,f=z?.status;if(await Z.orch.setStatus(X,G),G==="done"&&f!=="done"&&z)try{let q=await Z.issues.mirrorTaskDone(z.repo,X);if(q)Z.bus.publish("issue.snapshot",q)}catch(q){b1("issue-done-mirror",q)}return{}}},{name:"task.reorder",async handle(Y,Z){let X=Y.moves;if(!Array.isArray(X)||X.length===0)throw Error("moves must be a non-empty array");if(X.length>500)throw Error("too many moves in one task.reorder batch (max 500)");let G=X.map((z)=>{if(typeof z!=="object"||z===null)throw Error("each move needs taskId and position");let f=z,q=M1(f,"taskId"),B=f.position;if(typeof B!=="number"||!Number.isFinite(B))throw Error("position must be a finite number");return{taskId:q,position:B}});return await Z.orch.reorderTasks(G),{}}},{name:"task.ensureMain",async handle(Y,Z){let X=M1(Y,"repo"),G=await Z.orch.ensureMainTask(X);return{task:eJ(G)}}},{name:"task.ensureWorktree",async handle(Y,Z){let X=M1(Y,"taskId");Z.bus.publish("task.jobs",{taskId:X,kind:"ensureWorktree",phase:"running"});try{let G=await Z.orch.ensureWorktree(X);return Z.bus.publish("task.jobs",{taskId:X,kind:"ensureWorktree",phase:"done"}),{worktreePath:G}}catch(G){throw Z.bus.publish("task.jobs",{taskId:X,kind:"ensureWorktree",phase:"error",error:G instanceof Error?G.message:String(G)}),G}}},{name:"worktree.discoverAdoptable",async handle(Y,Z){let X=M1(Y,"repo");return{worktrees:await Z.orch.discoverAdoptableWorktrees(X)}}},{name:"worktree.adopt",async handle(Y,Z){let X=await Z.orch.adoptWorktree({repo:M1(Y,"repo"),worktreePath:M1(Y,"worktreePath"),branch:cJ(Y,"branch"),vendor:tB(Y,"vendor"),title:cJ(Y,"title"),ifExists:cJ(Y,"ifExists")==="return"?"return":"error"});return{task:eJ(X)}}},{name:"worktree.reconcile",async handle(Y,Z){let X=M1(Y,"cwd"),G=M1(Y,"worktreePath"),z=oB(Z.orch.listTasks(),X)??oB(Z.orch.listTasks(),G);if(!z)return{adopted:!1};try{return{adopted:!0,taskId:(await Z.orch.adoptWorktree({repo:z,worktreePath:G,ifExists:"return"})).id}}catch(f){return b1("worktree-created",f),{adopted:!1}}}},{name:"task.setActive",async handle(Y,Z){let X=cJ(Y,"taskId")??null;return await Z.orch.setActiveTask(X),Z.bus.publish("active-task",{taskId:X}),{}}},{name:"issue.list",async handle(Y,Z){return Z.issues.list(M1(Y,"repoRoot"))}},{name:"issue.mutate",async handle(Y,Z){let X=await Z.issues.mutate(M1(Y,"repoRoot"),Y.op);return Z.bus.publish("issue.snapshot",X),X}},{name:"session.deliver",async handle(Y,Z){let X=M1(Y,"taskId"),G=M1(Y,"text"),z=cJ(Y,"source");if(z!==void 0&&z!=="note"&&z!=="dispatcher")throw Error('source must be "note" or "dispatcher"');if(!Z.orch.getTask(X))throw Error(`task not found: ${X}`);return Z.bus.publish("session.deliver",{taskId:X,text:G,at:Date.now(),source:z??"dispatcher"}),{ok:!0}}},{name:"note.file",async handle(Y,Z){let X=M1(Y,"taskId"),G=M1(Y,"text"),z=Z.orch.getTask(X);if(!z)throw Error(`task not found: ${X}`);let f=Z.orch.listTasks().find((B)=>(B.kind??"task")==="main"&&B.repo===z.repo&&!B.archived);if(!f||f.id===z.id)return{ok:!0,routed:!1};let q=z.title||z.branch||X;return Z.bus.publish("session.deliver",{taskId:f.id,text:`[KOBE FIELD NOTE] from "${q}" (task ${X}): ${G}`,at:Date.now(),source:"note"}),{ok:!0,routed:!0}}},{name:"engine.reportEvent",async handle(Y,Z){let X=M1(Y,"kind");if(!KQ(X))throw Error(`unknown engine event kind: ${X}`);let G=cJ(Y,"taskId"),z=cJ(Y,"cwd");if(!G&&z&&X==="session-start"){let B=yV(Z.orch.listTasks(),z);if(B)try{await Z.orch.adoptWorktree({repo:B.repo,worktreePath:B.worktreePath,ifExists:"return"})}catch(j){b1("worktree-autosync",j)}}let f=G??(z?gV(Z.orch.listTasks(),z):void 0);if(!f)return{};let q=$3(Y);if(Z.activity.report(f,X,q),X==="turn-start")AV(Z.orch,f).then((B)=>{if(B==="moved")console.log(`[status-rules] task ${f} auto-moved backlog \u2192 in_progress`)}).catch((B)=>b1("status-rules",B));return{}}}].map((Y)=>[Y.name,Y]))}function Jj(J){if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function M1(J,Y){let Z=J[Y];if(typeof Z!=="string"||Z.length===0)throw Error(`${Y} is required`);return Z}function cJ(J,Y){let Z=J[Y];if(Z===void 0||Z===null||Z==="")return;if(typeof Z!=="string")throw Error(`${Y} must be a string`);return Z}function sB(J,Y){let Z=J[Y];if(Z===void 0||Z===null)return;if(typeof Z!=="boolean")throw Error(`${Y} must be a boolean`);return Z}function tB(J,Y){let Z=cJ(J,Y);return Z&&Z.trim().length>0?Z:void 0}function $3(J){let Y=J.detail;if(!Y||typeof Y!=="object"||Array.isArray(Y))return;let Z=Y,X={};if(Z.failure==="rate_limit"||Z.failure==="billing"||Z.failure==="other")X.failure=Z.failure;if(Z.waiting==="permission"||Z.waiting==="input")X.waiting=Z.waiting;if(typeof Z.note==="string")X.note=Z.note;return Object.keys(X).length>0?X:void 0}var mQ=S(()=>{UQ();RV();SJ();jJ();SV();iZ()});import{execFile as a3}from"child_process";import{mkdir as p3,readFile as _3,realpath as kV,rename as r3,stat as o3,writeFile as s3}from"fs/promises";import{homedir as t3}from"os";import{dirname as e3,isAbsolute as JO,join as YO,resolve as IV}from"path";import{promisify as ZO}from"util";function XO(J){return(J instanceof Error?J.message:String(J)).includes("not a git repository")}function dQ(J=process.env.KOBE_HOME_DIR??t3()){return YO(J,".kobe","issues.json")}function bV(J){return typeof J==="string"&&NV.includes(J)}function GO(J){if(J===null||typeof J!=="object"||Array.isArray(J))return null;let Y=J;if(typeof Y.id!=="number")return null;return{id:Y.id,title:typeof Y.title==="string"?Y.title:"(untitled)",status:bV(Y.status)?Y.status:"open",created:typeof Y.created==="string"?Y.created:"",body:typeof Y.body==="string"?Y.body:"",taskId:typeof Y.taskId==="string"?Y.taskId:void 0}}function zO(){return{version:1,repos:{}}}function QO(){let J=new Date,Y=String(J.getMonth()+1).padStart(2,"0"),Z=String(J.getDate()).padStart(2,"0");return`${J.getFullYear()}-${Y}-${Z}`}async function fO(J){let{stdout:Y}=await Qj("git",["-C",J,"rev-parse","--git-common-dir"]),Z=Y.trim();return kV(JO(Z)?Z:IV(J,Z))}async function qO(J){let{stdout:Y}=await Qj("git",["-C",J,"rev-parse","--show-toplevel"]);return Y.trim()}async function BO(J){let{stdout:Y}=await Qj("git",["-C",J,"worktree","list","--porcelain"]),Z=Y.split(/\r?\n/).find((X)=>X.startsWith("worktree "))?.slice(9).trim();return Z?kV(Z):qO(J)}async function Yj(J){if(typeof J!=="string"||J.length===0)throw Error("repoRoot is required");let Y=IV(J);if(!(await o3(Y).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[X,G]=await Promise.all([BO(Y),fO(Y)]);return{repoRoot:X,repoKey:G}}catch(X){if(XO(X))throw Error("repoRoot is not a git repository");throw X}}async function Zj(J){try{let Y=JSON.parse(await _3(J,"utf8")),Z={};if(Y.repos&&typeof Y.repos==="object")for(let[X,G]of Object.entries(Y.repos)){if(!G||typeof G!=="object")continue;let z=G;Z[X]={repoRoot:typeof z.repoRoot==="string"?z.repoRoot:"",nextId:typeof z.nextId==="number"?z.nextId:1,issues:Array.isArray(z.issues)?z.issues.map(GO).filter((f)=>f!==null):[]}}return{version:1,repos:Z}}catch(Y){if(Y.code==="ENOENT")return zO();throw Y}}async function Xj(J,Y){await p3(e3(J),{recursive:!0});let Z=`${J}.tmp`;await s3(Z,`${JSON.stringify(Y,null,2)}
|
|
46
|
-
`,"utf8"),await r3(Z,J)}function Gj(J,Y){return{repoRoot:J,exists:Y!==null,nextId:Y?.nextId??1,issues:Y?.issues??[]}}async function zj(J,Y){let X=(cQ.get(J)??Promise.resolve()).then(Y),G=X.then(()=>{return},()=>{return});return cQ.set(J,G),G.then(()=>{if(cQ.get(J)===G)cQ.delete(J)}),X}class nQ{path;constructor(J=dQ()){this.path=J}async list(J){let{repoRoot:Y,repoKey:Z}=await Yj(J);return zj(this.path,async()=>{let X=await Zj(this.path),G=X.repos[Z]??null;if(G&&G.repoRoot!==Y)G.repoRoot=Y,await Xj(this.path,X);return Gj(Y,G)})}async mirrorTaskDone(J,Y){let{repoRoot:Z,repoKey:X}=await Yj(J);if(!Y)return null;return zj(this.path,async()=>{let G=await Zj(this.path),z=G.repos[X];if(!z)return null;let f=z.issues.find((q)=>q.taskId===Y);if(!f||f.status==="done")return null;return f.status="done",z.repoRoot=Z,await Xj(this.path,G),Gj(Z,z)})}async mutate(J,Y){let{repoRoot:Z,repoKey:X}=await Yj(J);if(!Y||typeof Y!=="object"||Array.isArray(Y)||typeof Y.type!=="string")throw Error("missing op");return zj(this.path,async()=>{let G=await Zj(this.path),z=G.repos[X];if(!z)z={repoRoot:Z,nextId:1,issues:[]},G.repos[X]=z;z.repoRoot=Z;let f=Y;if(f.type==="create"){if(typeof f.title!=="string"||f.title.trim().length===0)throw Error("create requires a non-empty title");if(f.body!==void 0&&typeof f.body!=="string")throw Error("body must be a string");z.issues=[{id:z.nextId,title:f.title,status:"open",created:QO(),body:typeof f.body==="string"?f.body:""},...z.issues],z.nextId+=1}else if(f.type==="setStatus"){if(typeof f.id!=="number")throw Error("setStatus requires a numeric id");if(!bV(f.status))throw Error(`invalid status: must be one of ${NV.join(", ")}`);let q=z.issues.find((B)=>B.id===f.id);if(!q)throw Error(`no issue #${f.id}`);q.status=f.status}else if(f.type==="update"){if(typeof f.id!=="number")throw Error("update requires a numeric id");if(f.title!==void 0&&(typeof f.title!=="string"||f.title.trim().length===0))throw Error("title must be a non-empty string");if(f.body!==void 0&&typeof f.body!=="string")throw Error("body must be a string");let q=z.issues.find((B)=>B.id===f.id);if(!q)throw Error(`no issue #${f.id}`);if(typeof f.title==="string")q.title=f.title;if(typeof f.body==="string")q.body=f.body}else if(f.type==="link"){if(typeof f.id!=="number")throw Error("link requires a numeric id");if(typeof f.taskId!=="string"||f.taskId.length===0)throw Error("link requires a non-empty taskId");let q=z.issues.find((B)=>B.id===f.id);if(!q)throw Error(`no issue #${f.id}`);q.taskId=f.taskId}else if(f.type==="unlink"){if(typeof f.id!=="number")throw Error("unlink requires a numeric id");let q=z.issues.find((B)=>B.id===f.id);if(!q)throw Error(`no issue #${f.id}`);q.taskId=void 0}else if(f.type==="delete"){if(typeof f.id!=="number")throw Error("delete requires a numeric id");let q=z.issues.filter((B)=>B.id!==f.id);if(q.length===z.issues.length)throw Error(`no issue #${f.id}`);z.issues=q}else throw Error(`unknown op type: ${f.type}`);return await Xj(this.path,G),Gj(Z,z)})}}var Qj,NV,cQ;var fj=S(()=>{Qj=ZO(a3),NV=["open","doing","hold","done"];cQ=new Map});import{mkdirSync as jO,watch as HO}from"fs";import{basename as WO,dirname as VO}from"path";function iQ(J){if(J.debounceMs<=0)return()=>{};let Y=VO(J.filePath),Z=new Set([WO(J.filePath),...J.matchBasenames??[]]),X=null,G=null,z=null,f=()=>{try{J.onTrigger()}catch(B){J.onError(B)}},q=()=>{if(X)clearTimeout(X);X=setTimeout(()=>{X=null,f()},J.debounceMs),X.unref?.()};try{jO(Y,{recursive:!0}),z=HO(Y,(B,j)=>{let K=j===null?null:String(j);if(K!==null&&!Z.has(K))return;q()}),z.on("error",J.onError)}catch(B){J.onError(B)}if(J.pollMs&&J.pollMs>0)G=setInterval(f,J.pollMs),G.unref?.();return()=>{if(X)clearTimeout(X),X=null;if(G)clearInterval(G),G=null;z?.close(),z=null}}var qj=()=>{};import{homedir as KO}from"os";import{basename as UO,join as LO}from"path";function jj(J=process.env.KOBE_HOME_DIR??KO()){return LO(J,".kobe","settings","keybindings.yaml")}function TV(J,Y={}){let Z=Y.debounceMs??Bj;if(Z<=0)return()=>{};let X=Y.path??jj(),G=UO(X),z=G.replace(/\.yaml$/,".yml"),f=0;return J.publish("keybindings",{rev:f}),iQ({filePath:X,matchBasenames:[G,z],debounceMs:Z,onTrigger:()=>{try{f+=1,J.publish("keybindings",{rev:f})}catch(B){b1("keybindings-watcher",B)}},onError:(B)=>b1("keybindings-watcher",B)})}var Bj=200;var EV=S(()=>{qj()});class Hj{clients;idleGraceMs;onIdleStop;schedule;log;cancelIdle=null;stopping=!1;constructor(J){this.clients=J.clients,this.idleGraceMs=J.idleGraceMs,this.onIdleStop=J.onIdleStop,this.schedule=J.schedule??DO,this.log=J.log??VZ}guiCount(){let J=0;for(let Y of this.clients())if(Y.holdsLifetime)J++;return J}hasSubscribers(){for(let J of this.clients())if(J.subscribed)return!0;return!1}isStopping(){return this.stopping}markStopping(){this.stopping=!0,this.clearIdle()}guiAttached(){this.clearIdle()}clientDisconnected(J){if(J)this.maybeArm()}clearIdle(){if(this.cancelIdle)this.cancelIdle(),this.cancelIdle=null}maybeArm(){if(this.stopping||this.guiCount()>0)return;this.clearIdle(),this.log("idle",`last gui gone \u2014 arming ${this.idleGraceMs}ms idle-stop grace`),this.cancelIdle=this.schedule(()=>{if(this.cancelIdle=null,this.stopping||this.guiCount()>0)return;this.log("idle","grace elapsed with no gui \u2014 self-stopping"),this.onIdleStop()},this.idleGraceMs)}}var DO=(J,Y)=>{let Z=setTimeout(J,Y);return Z.unref?.(),()=>clearTimeout(Z)};var uV=()=>{};import{spawn as MO}from"child_process";function Wj(J,Y,Z,X){if(Z)return J+X.slowRetryMs;return Y+Math.max(X.minIntervalMs,(Y-J)*5)}function Vj(J,Y){return!J.inFlight&&Y>=J.nextAllowedAt}function lQ(J,Y,Z,X){let G=Date.now();if(!Vj(J,G))return!1;J.inFlight=!0;let z=new AbortController,f=setTimeout(()=>z.abort(),Y.timeoutMs);return(async()=>{let q,B=!1;try{q=await Z(z.signal),B=!0}catch{}clearTimeout(f);let j=z.signal.aborted;if(J.nextAllowedAt=Wj(G,Date.now(),j,Y),J.inFlight=!1,B&&!j)X(q)})(),!0}function QY(J,Y,Z){return new Promise((X)=>{let G="",z=!1,f=(B)=>{if(z)return;z=!0,X({status:B,stdout:G})},q=MO(J,Y.slice(),{cwd:Z.cwd,stdio:["ignore","pipe","ignore"],env:Z.env,signal:Z.signal,killSignal:"SIGKILL"});q.stdout?.on("data",(B)=>{G+=String(B)}),q.on("error",()=>f(null)),q.on("close",(B)=>f(B))})}var tG=()=>{};function CO(J){if(J.archived)return!1;if(J.kind==="main")return!1;if(!J.branch||!J.worktreePath)return!1;if(HJ(J.repo)||HJ(J.worktreePath))return!1;return!0}async function gO(J,Y){let Z=Y.tickMs??$Q,X=[];for(let G of J.listTasks()){if(!CO(G)){Y.schedule.delete(G.id);continue}let z=Y.schedule.get(G.id)??0;if(Y.now<z)continue;try{let f=await Y.run(G.worktreePath,G.branch);if(f.kind==="empty"){Y.schedule.set(G.id,Y.now+FO);continue}let q=a9(f.view,Y.at),B=J.getTask(G.id);if(!B){Y.schedule.delete(G.id);continue}if(!fQ(B.prStatus,q??void 0))await J.setPRStatus(G.id,q),X.push(G.id);let j=q?.lifecycle==="merged"||q?.lifecycle==="closed";Y.schedule.set(G.id,Y.now+(j?OO:Z))}catch(f){b1("pr-status-poller",f),Y.schedule.set(G.id,Y.now+Z)}}return X}function xV(J,Y=$Q,Z,X=RO){if(Y<=0)return()=>{};let G=new Map,z=!1,q=setInterval(()=>{if(Z&&!Z())return;if(z)return;z=!0,gO(J,{run:X,now:Date.now(),at:new Date().toISOString(),schedule:G,tickMs:Y}).catch((B)=>b1("pr-status-poller",B)).finally(()=>{z=!1})},Y);return q.unref?.(),()=>clearInterval(q)}var $Q=30000,FO=300000,OO=600000,AO=1e4,RO=async(J,Y)=>{let Z=new AbortController,X=setTimeout(()=>Z.abort(),AO);try{let G=await QY("gh",["pr","view",Y,"--json",$9],{cwd:J,signal:Z.signal});if(G.status!==0)return{kind:"empty"};let z=JSON.parse(G.stdout);return typeof z.number==="number"?{kind:"pr",view:z}:{kind:"empty"}}catch{return{kind:"empty"}}finally{clearTimeout(X)}};var wV=S(()=>{tG();O1()});import{readFileSync as yO}from"fs";import{homedir as SO}from"os";import{basename as kO,join as IO}from"path";function Uj(J=process.env.KOBE_HOME_DIR??SO()){return IO(J,".config","kobe","state.json")}function hV(J){let Y={};try{let B=JSON.parse(yO(J,"utf8"));if(B&&typeof B==="object"&&!Array.isArray(B))Y=B}catch{}let Z=typeof Y.activeTheme==="string"&&Y.activeTheme.length>0?Y.activeTheme:"claude",X=Y.transparentBackground===!0,G=typeof Y.focusAccent==="string"&&bO.includes(Y.focusAccent)?Y.focusAccent:null,z=Y.activeSortMode==="recent"?"recent":"default",f=Y["tasksPane.keysCollapsed"]===!0,q=typeof Y["tasksPane.projectFilter"]==="string"&&Y["tasksPane.projectFilter"].length>0?Y["tasksPane.projectFilter"]:null;return{theme:Z,transparentBackground:X,focusAccent:G,sortMode:z,keysCollapsed:f,projectFilter:q}}function TO(J,Y){return J.theme===Y.theme&&J.transparentBackground===Y.transparentBackground&&J.focusAccent===Y.focusAccent&&J.sortMode===Y.sortMode&&J.keysCollapsed===Y.keysCollapsed&&J.projectFilter===Y.projectFilter}function PV(J,Y={}){let Z=Y.debounceMs??Kj;if(Z<=0)return()=>{};let X=Y.pollMs??NO,G=Y.statePath??Uj(),z=kO(G),f=hV(G);return J.publish("ui-prefs",f),iQ({filePath:G,matchBasenames:[z],debounceMs:Z,pollMs:X,onTrigger:()=>{try{let B=hV(G);if(TO(f,B))return;f=B,J.publish("ui-prefs",B)}catch(B){b1("ui-prefs-watcher",B)}},onError:(B)=>b1("ui-prefs-watcher",B)})}var Kj=200,NO=250,bO;var vV=S(()=>{qj();bO=["primary","success","info"]});function Lj(){return c1()[ZX]===!0}var ZX="experimental.dispatcher";var aQ=S(()=>{cZ()});import{randomUUID as EO}from"crypto";function fY(J){return`engineCommand.${J}`}function qY(J){return`engineName.${J}`}function XX(J){return g1(qY(J))?.trim()||Dj[J]||J}function eG(J){return a1(J??"claude").defaultCommand}function uO(J){let Y=[],Z=/"([^"]*)"|'([^']*)'|(\S+)/g;for(let X=Z.exec(J);X!==null;X=Z.exec(J))Y.push(X[1]??X[2]??X[3]??"");return Y}function RJ(J,Y){let Z=J??"claude",X=g1(fY(Z))?.trim(),G=(()=>{if(X){let z=uO(X);if(z.length>0)return z}return eG(Z)})();return xO(G,Z,Y)}function xO(J,Y,Z){let X=Z?.trim();if(!X)return J;let G=Y??"claude";if(!a1(G).effortLevels?.includes(X))return J;if(G==="codex")return[...J,"-c",`model_reasoning_effort=${X}`];return J}function nX(J,Y){if((Y??"claude")!=="claude")return{argv:J,sessionId:null};if(J.some((X)=>wO.has(X)))return{argv:J,sessionId:null};let Z=EO();return{argv:[...J,"--session-id",Z],sessionId:Z}}function GX(){let J=(Y)=>/^[A-Za-z0-9_/.:=-]+$/.test(Y)?Y:`'${Y.replace(/'/g,"'\\''")}'`;try{return[...R1(),"api"].map(J).join(" ")}catch{return"kobe api"}}function hO(J,Y=GX()){return[`You are running inside kobe (a local multi-session task manager) as task ${J}.`,"kobe tracks a lifecycle status for this task on a board.","When you have COMPLETED the work requested in this session and verified it, report it by running:",` ${Y} set-status --task-id ${J} --status in_review`,"Run it only when the work is genuinely done \u2014 never while you are asking the user a question, waiting for input, or mid-task.","Never set any other status value; everything beyond in_review is the user's decision."].join(`
|
|
47
|
-
`)}function
|
|
48
|
-
`)}function
|
|
30
|
+
`)&&f.endsWith("</INSTRUCTIONS>")}var ZV=()=>{};function XV(f,J={}){let Y=xH(f.input_tokens,0),z=xH(f.cached_input_tokens,0),G=xH(f.output_tokens,0),Z=Math.max(0,Y-z);if(Y<=0&&G<=0&&z<=0)return;return{input_tokens:Z,output_tokens:G,...z>0?{cache_read_input_tokens:z}:{},...S3(J.contextWindowTokens)?{context_window_tokens:J.contextWindowTokens}:{}}}function xH(f,J){return typeof f==="number"&&Number.isFinite(f)?f:J}function S3(f){return typeof f==="number"&&Number.isFinite(f)&&f>0}import{readFile as I3,readdir as T3,stat as u3,unlink as ku}from"fs/promises";import{homedir as E3}from"os";import fz from"path";async function vH(f=Jz){let J=f.sessionsDir(),Y=(await f.readdir(J)).sort().reverse(),z=[];for(let G of Y){let Z=fz.join(J,G),q=(await f.readdir(Z)).sort().reverse();for(let Q of q){let H=fz.join(Z,Q),B=(await f.readdir(H)).sort().reverse();for(let V of B){let j=fz.join(H,V),U=(await f.readdir(j)).filter((L)=>L.startsWith("rollout-")&&L.endsWith(".jsonl"));U.sort().reverse();for(let L of U)z.push(fz.join(j,L))}}}return z}async function x3(f,J=Jz){if(!f)return;let Y=f.toLowerCase(),z=await vH(J);for(let G of z)if(fz.basename(G).match(BV)?.[1]?.toLowerCase()===Y)return G;return}function w3(f){for(let J of f.split(`
|
|
31
|
+
`)){let Y=J.trim();if(!Y)continue;try{let z=JSON.parse(Y);if(z.type==="session_meta")return z.payload?.cwd??""}catch{}return""}return""}async function jV(f,J){let Y=qV.get(J);if(!Y)Y=new Map,qV.set(J,Y);let z=Y.get(f);if(z!==void 0)return z;let G;try{G=await J.readFile(f)}catch{return null}let Z=w3(G);if(Z)Y.set(f,Z);return Z}async function WV(f,J=Jz){if(!f)return[];let Y=await vH(J),z=[],G=0;for(let Z of Y){if(G>=h3)break;if(G++,await jV(Z,J)!==f)continue;let q=fz.basename(Z).match(BV)?.[1];if(q)z.push(q)}return z.reverse()}async function mH(f,J=Jz){if(!f)return null;let Y=await vH(J),z=0;for(let G of Y){if(z>=P3)break;if(z++,await jV(G,J)!==f)continue;try{return{path:G,mtimeMs:(await J.stat(G)).mtimeMs}}catch{}}return null}async function VV(f,J=Jz){return(await mH(f,J))?.mtimeMs??0}async function KV(f,J=Jz){return(await v3(f,J)).messages}async function v3(f,J=Jz){let Y=await x3(f,J);if(!Y)return{messages:[]};let z;try{z=await J.readFile(Y)}catch{return{messages:[]}}let G=m3(c3(z,f)),Z=a3(z);return{messages:G,...Z?{usageMetrics:Z}:{}}}function m3(f){return f.map((J,Y)=>({msg:J,idx:Y})).sort((J,Y)=>{if(J.msg.timestamp<Y.msg.timestamp)return-1;if(J.msg.timestamp>Y.msg.timestamp)return 1;return J.idx-Y.idx}).map((J)=>J.msg)}function c3(f,J){let Y=[];for(let z of f.split(`
|
|
32
|
+
`)){let G=z.trim();if(!G)continue;let Z;try{Z=JSON.parse(G)}catch{continue}if(!sG(Z))continue;if(Z.type!=="response_item")continue;let q=sG(Z.payload)?Z.payload:void 0;if(!q)continue;let Q=typeof Z.timestamp==="string"?Z.timestamp:new Date().toISOString(),H=n3(q,Q,J);if(H)Y.push(H)}return Y}function n3(f,J,Y){if(f.type==="message"){let z=f.role;if(z!=="user"&&z!=="assistant"&&z!=="system")return;let G=EH(f.content);if(z==="user"&&GV(G))return;return{role:z,blocks:G,timestamp:J,sessionId:Y}}if(f.type==="reasoning")return d3(f,J,Y);if(f.type==="function_call")return wH(f,J,Y,{name:PH(f.name,"function_call"),input:hH(f.arguments)});if(f.type==="custom_tool_call")return wH(f,J,Y,{name:PH(f.name,"custom_tool_call"),input:hH(f.input)});if(f.type==="tool_search_call")return wH(f,J,Y,{name:"tool_search_call",input:PX(f,["type","call_id","status"])});if(f.type==="function_call_output"||f.type==="custom_tool_call_output")return QV(f,J,Y,hH(f.output));if(f.type==="tool_search_output")return QV(f,J,Y,PX(f,["type","call_id"]));if(f.type==="web_search_call"||f.type==="image_generation_call"||f.type==="local_shell_call")return i3(f,J,Y);return}function d3(f,J,Y){let z=l3(f);if(z.length===0)return;return{role:"assistant",blocks:[{type:"thinking",text:z}],timestamp:J,sessionId:Y}}function wH(f,J,Y,z){let G=typeof f.call_id==="string"?f.call_id:void 0;if(!G)return;return{role:"assistant",blocks:[{type:"tool_call",callId:G,name:z.name,input:z.input}],timestamp:J,sessionId:Y}}function QV(f,J,Y,z){let G=typeof f.call_id==="string"?f.call_id:void 0;if(!G)return;return{role:"user",blocks:[{type:"tool_result",callId:G,output:z,isError:!1}],timestamp:J,sessionId:Y}}function i3(f,J,Y){let z=typeof f.type==="string"?f.type:"tool",G=typeof f.call_id==="string"&&f.call_id.length>0?f.call_id:`${z}:${J}`,Z=PH(f.name,z),q=PX(f,["type","call_id","status"]),Q=PX(f,["type","call_id"]);return{role:"assistant",timestamp:J,sessionId:Y,blocks:[{type:"tool_call",callId:G,name:Z,input:q},{type:"tool_result",callId:G,output:Q,isError:!1}]}}function l3(f){let J=HV(f.content);if(J.length>0)return J;let Y=typeof f.text==="string"?f.text:"";if(Y.length>0)return Y;return HV(f.summary)}function HV(f){if(typeof f==="string")return f;if(!Array.isArray(f))return"";let J=[];for(let Y of f){if(typeof Y==="string"){J.push(Y);continue}if(!sG(Y))continue;let z=typeof Y.text==="string"?Y.text:"";if(z.length>0)J.push(z)}return J.join("")}function PX(f,J){let Y={};for(let[z,G]of Object.entries(f))if(!J.includes(z))Y[z]=G;return Y}function PH(f,J){return typeof f==="string"&&f.length>0?f:J}function hH(f){if(typeof f!=="string")return f;try{return JSON.parse(f)}catch{return f}}function a3(f){let J,Y=null;for(let z of f.split(`
|
|
33
|
+
`)){let G=z.trim();if(!G)continue;let Z;try{Z=JSON.parse(G)}catch{continue}if(!sG(Z))continue;let q=typeof Z.timestamp==="string"?$3(Z.timestamp):null;if(Z.type==="response_item")continue;if(Z.type!=="turn.completed")continue;let Q=sG(Z.usage)?Z.usage:void 0;if(!Q)continue;let H=XV(Q);if(!H)continue;if(q!==null&&(Y===null||q>Y))Y=q,J=H;else if(Y===null)J=H}return J}function $3(f){let J=new Date(f).getTime();return Number.isFinite(J)?J:null}function sG(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var Jz,BV,qV,h3=200,P3=12;var cH=C(()=>{ZV();Jz={sessionsDir(){return fz.join(E3(),".codex","sessions")},async readdir(f){try{return await T3(f)}catch{return[]}},async readFile(f){return await I3(f,"utf8")},stat:u3};BV=/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;qV=new WeakMap});function DV(f){if(!vX(f))return;let J=vX(f.modelMetrics)?f.modelMetrics:void 0;if(!J)return;let Y=0,z=0,G=0;for(let q of Object.values(J)){if(!vX(q)||!vX(q.usage))continue;Y+=mX(q.usage.inputTokens,0),z+=mX(q.usage.outputTokens,0),G+=mX(q.usage.cacheReadTokens,0)}let Z=mX(f.currentTokens,0);if(Y===0&&z===0&&G===0&&Z===0)return;return{input_tokens:Y,output_tokens:z,...G>0?{cache_read_input_tokens:G}:{},...Z>0?{context_tokens:Z}:{}}}function vX(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function mX(f,J){return typeof f==="number"&&Number.isFinite(f)?f:J}import{readFile as r3,readdir as p3,rm as _3,stat as o3}from"fs/promises";import{homedir as s3}from"os";import KY from"path";async function dH(f=Yz){let J=KY.join(f.copilotDir(),"session-state");return(await f.readdir(J)).map((z)=>KY.join(J,z))}async function LV(f,J=Yz){let Y=[];for(let z of await dH(J)){let G=await iH(z,J);if(G.cwd!==f)continue;Y.push({id:G.id??KY.basename(z),updatedAt:G.updatedAt??""})}return Y.sort((z,G)=>z.updatedAt.localeCompare(G.updatedAt)).map((z)=>z.id)}async function MV(f,J=Yz){if(!f)return 0;let Y=0;for(let z of await dH(J)){if((await iH(z,J)).cwd!==f)continue;try{let{mtimeMs:Z}=await J.stat(KY.join(z,"events.jsonl"));if(Z>Y)Y=Z}catch{}}return Y}async function t3(f,J=Yz){let Y=await e3(f,J);if(!Y)return{messages:[]};let z=await J.readFile(KY.join(Y,"events.jsonl")).catch(()=>""),G=JO(z,f);return{messages:G.messages,...G.usageMetrics?{usageMetrics:G.usageMetrics}:{}}}async function FV(f,J=Yz){return(await t3(f,J)).messages}async function e3(f,J=Yz){for(let Y of await dH(J)){if(KY.basename(Y)===f)return Y;let z=await iH(Y,J);if(z.id===f||z.name?.toLowerCase()===f.toLowerCase())return Y}return}async function iH(f,J=Yz){let Y=await J.readFile(KY.join(f,"workspace.yaml")).catch(()=>"");return fO(Y)}function fO(f){let J={};for(let Y of f.split(`
|
|
34
|
+
`)){let z=Y.match(/^([A-Za-z_]+):\s*(.*)$/);if(!z)continue;let G=z[1],Z=z[2]??"";if(Z.startsWith('"')&&Z.endsWith('"'))Z=Z.slice(1,-1).replace(/\\"/g,'"');J[G]=Z}return{id:J.id,cwd:J.cwd,name:J.name,updatedAt:J.updated_at,createdAt:J.created_at}}function JO(f,J){let Y=[],z=new Map,G=J,Z,q=null;for(let Q of f.split(`
|
|
35
|
+
`)){let H=Q.trim();if(!H)continue;let B;try{B=JSON.parse(H)}catch{continue}if(!nH(B)||typeof B.type!=="string")continue;let V=typeof B.timestamp==="string"?B.timestamp:new Date().toISOString(),j=nH(B.data)?B.data:{};if(B.type==="session.start"){let U=typeof j.sessionId==="string"?j.sessionId:void 0;if(U)G=U;continue}if(B.type==="user.message"){let U=typeof j.content==="string"?j.content:"";if(!U)continue;if(!q)q=Buffer.from(U.slice(0,YO),"utf8").toString("utf8");Y.push({role:"user",blocks:[{type:"text",text:U}],timestamp:V,sessionId:G});continue}if(B.type==="assistant.message"){let U=[],L=typeof j.content==="string"?j.content:"";if(L)U.push({type:"text",text:L});let O=Array.isArray(j.toolRequests)?j.toolRequests:[];for(let M of O){if(!nH(M))continue;let g=typeof M.id==="string"?M.id:typeof M.toolCallId==="string"?M.toolCallId:"tool",I=typeof M.name==="string"?M.name:typeof M.toolName==="string"?M.toolName:"tool";U.push({type:"tool_call",callId:g,name:I,input:M.arguments??{}})}if(U.length>0)Y.push({role:"assistant",blocks:U,timestamp:V,sessionId:G});continue}if(B.type==="tool.execution_start"){let U=typeof j.toolCallId==="string"?j.toolCallId:void 0,L=typeof j.toolName==="string"?j.toolName:"tool";if(U)z.set(U,L);continue}if(B.type==="tool.execution_complete"){let U=typeof j.toolCallId==="string"?j.toolCallId:void 0;if(!U)continue;let L=z.get(U)??(typeof j.toolName==="string"?j.toolName:"tool"),O=j.result??(j.success===!1?{success:!1}:void 0);Y.push({role:"assistant",blocks:[{type:"tool_result",callId:U,output:O,isError:j.success===!1}],timestamp:V,sessionId:G});continue}if(B.type==="session.shutdown")Z=DV(j)}return{messages:Y,usageMetrics:Z,firstUserMessage:q}}function nH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var Yz,YO=200;var OV=C(()=>{Yz={copilotDir(){let f=process.env.COPILOT_HOME?.trim();if(f)return f;return KY.join(s3(),".copilot")},async readdir(f){try{return await p3(f)}catch{return[]}},async readFile(f){return await r3(f,"utf8")},stat:o3,async rm(f){await _3(f,{recursive:!0,force:!0})}}});function lH(f){return pf(f).createHookAdapter()}class tG{vendor;constructor(f){this.vendor=f}supportsHooks(){return!1}activityDetailFromPayload(){return}async installActivityHooks(){}async removeActivityHooks(){}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(){}async installWorktreeWatchHook(){}async removeWorktreeWatchHook(){}}var aH=C(()=>{UY()});import{readFile as AV}from"fs/promises";class cX{supportsCompletionMarkers(){return!0}}function gV(f){return pf(f).createTurnDetector()}function XO(f,J="claude",Y=0){let z=null,G=0;for(let Z of f.split(`
|
|
36
|
+
`)){G++;let q=RV(Z);if(!q)continue;let Q=kV(q.message)?q.message:q;if(Q.role!=="assistant")continue;if(!("content"in Q))continue;let H=CV(q,Y),B={id:`claude:${J}:${H}:${G}`,timestampMs:H,source:"claude"};if(!z||B.timestampMs>=z.timestampMs)z=B}return z}function qO(f,J="codex"){let Y=null,z=0;for(let G of f.split(`
|
|
37
|
+
`)){z++;let Z=RV(G);if(!Z||Z.type!=="turn.completed")continue;let q=CV(Z,0),Q={id:`codex:${J}:${q}:${z}`,timestampMs:q,source:"codex"};if(!Y||Q.timestampMs>=Y.timestampMs)Y=Q}return Y}function RV(f){let J=f.trim();if(!J)return null;try{let Y=JSON.parse(J);return kV(Y)?Y:null}catch{return null}}function CV(f,J){let Y=typeof f.timestamp==="string"?Date.parse(f.timestamp):Number.NaN;return Number.isFinite(Y)?Y:J}function kV(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var GO,$H,ZO,rH,nX;var pH=C(()=>{NH();cH();UY();GO={listSessionFiles:(f)=>rG(f),readFile:(f)=>AV(f,"utf8")};$H=class $H extends cX{deps;vendor="claude";cache=new Map;constructor(f=GO){super();this.deps=f}async latestCompletion(f){let J=await this.deps.listSessionFiles(f),Y=null,z=new Map;for(let G of J.slice(0,4)){let Z=this.cache.get(G.path),q;if(Z&&G.mtimeMs>0&&Z.mtimeMs===G.mtimeMs)q=Z.marker;else{let Q=await this.deps.readFile(G.path).catch(()=>"");q=XO(Q,G.path,G.mtimeMs)}if(z.set(G.path,{mtimeMs:G.mtimeMs,marker:q}),q&&(!Y||q.timestampMs>Y.timestampMs))Y=q}return this.cache=z,Y}};ZO={findLatestRollout:(f)=>mH(f),readFile:(f)=>AV(f,"utf8")};rH=class rH extends cX{deps;vendor="codex";cache=null;constructor(f=ZO){super();this.deps=f}async latestCompletion(f){if(!f)return null;let J=await this.deps.findLatestRollout(f);if(!J)return null;if(this.cache&&this.cache.path===J.path&&J.mtimeMs>0&&this.cache.mtimeMs===J.mtimeMs)return this.cache.marker;let Y=await this.deps.readFile(J.path).catch(()=>"");if(!Y)return null;let z=qO(Y,J.path);return this.cache={path:J.path,mtimeMs:J.mtimeMs,marker:z},z}};nX=class nX extends cX{vendor;constructor(f){super();this.vendor=f}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function VO(f){return{vendor:f,builtin:!1,displayName:f,defaultCommand:[f],history:QO,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new tG(f),createTurnDetector:()=>new nX(f)}}function pf(f){return Q1(f)?WO[f]:VO(f)}var QO,HO,BO,jO,WO;var UY=C(()=>{K1();oY();NH();zV();cH();OV();aH();pH();QO={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},HO={async listSessionIdsForWorktree(f){return[...await rG(f)].sort((Y,z)=>Y.mtimeMs-z.mtimeMs).map((Y)=>Y.sessionId)},readHistory:(f)=>aW(f),latestTranscriptMtimeForWorktree:(f)=>lW(f)},BO={listSessionIdsForWorktree:(f)=>WV(f),readHistory:(f)=>KV(f),latestTranscriptMtimeForWorktree:(f)=>VV(f)},jO={listSessionIdsForWorktree:(f)=>LV(f),readHistory:(f)=>FV(f),latestTranscriptMtimeForWorktree:(f)=>MV(f)},WO={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:HO,detectAccount:(f)=>IX(f),createHookAdapter:()=>new uH,createTurnDetector:()=>new $H},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:BO,detectAccount:(f)=>TX(f),createHookAdapter:()=>new tG("codex"),createTurnDetector:()=>new rH},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:jO,detectAccount:(f)=>uX(f),createHookAdapter:()=>new tG("copilot"),createTurnDetector:()=>new nX("copilot")}}});function NV(f){let J=f.find((G)=>G.role==="user");if(!J)return"";let Y=J.blocks.filter((G)=>G.type==="text").map((G)=>G.text).join(" "),z=WW(Y);return z.length>0?Buffer.from(z,"utf8").toString("utf8"):z}async function cz(f,J=yf){if(!f)return"";let{history:Y}=pf(J),z=await Y.listSessionIdsForWorktree(f);for(let G of z.slice(0,KO)){let Z=NV(await Y.readHistory(G));if(Z)return Z}return""}async function yV(f,J){if(!J)return"";try{return NV(await pf(f).history.readHistory(J))}catch{return""}}var KO=8;var dX=C(()=>{UY();S1()});function nz(f,J,Y){if(!J)return f;let z=Tz(J);return z.ensureReady(),z.wrapCommand(f,{tty:!0,cwd:Y})}function _f(){let f=[];for(let J of["KOBE_HOME_DIR","KOBE_DAEMON_SOCKET_PATH","KOBE_TMUX_SOCKET"]){let Y=process.env[J];if(Y&&Y.length>0)f.push(`${J}=${zf(Y)}`)}return f.length>0?`${f.join(" ")} `:""}var eG="@kobe_remote";var zz=C(()=>{e1();qJ()});var zZ={};jf(zZ,{windowIsSurface:()=>OO,windowCount:()=>LO,tmuxSessionName:()=>Mf,tmuxCommandSequence:()=>oH,tmuxAvailable:()=>NJ,tmuxArgs:()=>Gz,tagPaneRole:()=>IV,tagClaudePane:()=>FO,switchClientBeforeKill:()=>bJ,setWindowOption:()=>LY,setSessionOption:()=>lz,sessionExists:()=>Bf,sendKeys:()=>aX,sendKeyName:()=>YZ,runTmuxSequenceCapturing:()=>fZ,runTmuxSequence:()=>hf,runTmuxCapturing:()=>a0,runTmux:()=>v0,paneIdByRole:()=>tH,newWindow:()=>HJ,killSession:()=>i1,globalTasksPaneWidth:()=>lX,getSessionOptions:()=>C1,getSessionOption:()=>iX,getServerOptions:()=>DY,getServerOption:()=>SV,ensureFallbackSession:()=>$X,currentSessionName:()=>k1,claudePaneIdStrict:()=>az,claudePaneId:()=>eH,capturePaneById:()=>$z,attachArgv:()=>iz,SURFACE_WINDOW_OPTION:()=>fB,PANE_ROLE_OPTION:()=>JZ,KOBE_TMUX_SOCKET:()=>QJ,KOBE_HOME_SESSION:()=>TV,CLAUDE_ROLE_OPTION:()=>MO,CHAT_TAB_SESSION_ID_OPTION:()=>yJ});import{homedir as UO}from"os";function Gz(...f){return["tmux","-L",QJ,...f]}function Mf(f){return`kobe-${f.replace(/[^A-Za-z0-9_-]/g,"")}`}function iz(f){return Gz("attach-session","-t",`=${f}`)}async function _H(f){if(!f)return"";try{return await new Response(f).text()}catch{return""}}async function v0(f){try{let J=Bun.spawn(Gz(...f),{stdin:"ignore",cwd:dz,stdout:"ignore",stderr:"pipe"}),[Y,z]=await Promise.all([_H(J.stderr),J.exited]);if(z!==0&&Y.trim().length>0)console.error(`[kobe tmux] ${f.join(" ")} (${z}): ${Y.trim()}`);return z}catch{return 1}}async function DO(f){try{return await Bun.spawn(Gz(...f),{stdin:"ignore",cwd:dz,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function oH(f){let J=[];for(let Y of f){if(Y.length===0)continue;if(J.length>0)J.push(";");J.push(...Y)}return J}async function hf(f){let J=oH(f);return J.length===0?0:v0(J)}async function a0(f){try{let J=Bun.spawn(Gz(...f),{stdin:"ignore",cwd:dz,stdout:"pipe",stderr:"pipe"}),[Y,z,G]=await Promise.all([_H(J.stdout),_H(J.stderr),J.exited]);if(G!==0&&z.trim().length>0)console.error(`[kobe tmux] ${f.join(" ")} (${G}): ${z.trim()}`);return{code:G,stdout:Y}}catch{return{code:1,stdout:""}}}async function fZ(f){let J=oH(f);return J.length===0?{code:0,stdout:""}:a0(J)}async function NJ(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:dz,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function Bf(f){return await DO(["has-session","-t",`=${f}`])===0}async function LO(f){let{code:J,stdout:Y}=await a0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return 0;return Y.split(`
|
|
38
|
+
`).filter((z)=>z.trim().length>0).length}async function lz(f,J,Y){await v0(["set-option","-t",f,J,Y])}async function iX(f,J){let{code:Y,stdout:z}=await a0(["show-options","-v","-t",f,J]);return Y===0?z.trim():""}async function C1(f,J){let Y=Object.fromEntries(J.map((Z)=>[Z,void 0])),{code:z,stdout:G}=await fZ(J.map((Z)=>["show-options","-q","-t",f,Z]));if(z!==0)return Y;for(let Z of G.split(`
|
|
39
|
+
`)){let q=Z.indexOf(" ");if(q<=0)continue;let Q=Z.slice(0,q);if(Q in Y)Y[Q]=Z.slice(q+1).trim()}return Y}async function SV(f){let{code:J,stdout:Y}=await a0(["show-options","-sqv",f]);return J===0?Y.trim():""}async function DY(f){let J=Object.fromEntries(f.map((G)=>[G,void 0])),{code:Y,stdout:z}=await fZ(f.map((G)=>["show-options","-sq",G]));if(Y!==0)return J;for(let G of z.split(`
|
|
40
|
+
`)){let Z=G.indexOf(" ");if(Z<=0)continue;let q=G.slice(0,Z);if(q in J)J[q]=G.slice(Z+1).trim()}return J}async function lX(){let f=await SV(lJ),J=Number.parseInt(f,10);return Number.isFinite(J)&&J>0?tY(J):sY}async function IV(f,J){await v0(["set-option","-p","-t",f,JZ,J])}async function LY(f,J,Y){await v0(["set-window-option","-t",f,J,Y])}async function FO(f){await IV(f,sH)}async function tH(f,J,Y=!1){let{code:z,stdout:G}=await a0(["list-panes","-t",`=${f}`,"-F",`#{pane_id} #{${JZ}}`]);if(z!==0)return"";let Z="";for(let q of G.split(`
|
|
41
|
+
`)){let[Q,H]=q.split("\t");if(!Q)continue;if(!Z)Z=Q.trim();if(H?.trim()===J)return Q.trim()}return Y?Z:""}async function eH(f){return tH(f,sH,!0)}async function az(f){return tH(f,sH,!1)}async function $z(f,J){if(!f)return"";let Y=["capture-pane","-t",f,"-p"];if(typeof J==="number"&&J>0)Y.push("-S",String(-J));let{code:z,stdout:G}=await a0(Y);return z===0?G:""}async function aX(f,J){await v0(["send-keys","-t",f,"-l","--",J])}async function YZ(f,J){await v0(["send-keys","-t",f,J])}async function HJ(f,J){let Y=["new-window","-t",`=${f}`,"-c",J.cwd];if(J.name)Y.push("-n",J.name);if(J.surface){Y.push("-P","-F","#{window_id}"),Y.push(J.command);let{code:z,stdout:G}=await a0(Y),Z=G.trim();if(z===0&&Z)await LY(Z,fB,"1");return}Y.push(J.command),await v0(Y)}async function OO(f){let{code:J,stdout:Y}=await a0(["display-message","-t",f,"-p",`#{${fB}}`]);return J===0&&Y.trim()==="1"}async function k1(){let f=["display-message","-p"],J=process.env.TMUX_PANE;if(J&&J.length>0)f.push("-t",J);f.push("#{session_name}");let{code:Y,stdout:z}=await a0(f),G=z.trim();return Y===0&&G.length>0?G:null}async function i1(f){if(!f.startsWith("kobe-hidden-")){let J=_G(f);if(await Bf(J))await v0(["kill-session","-t",`=${J}`])}if(await Bf(f))await v0(["kill-session","-t",`=${f}`])}async function $X(){let f=TV;if(await Bf(f)){if(await iX(f,bV)==="tasks")return f;await v0(["kill-session","-t",`=${f}`])}let Y=(await a0(["new-session","-d","-s",f,"-c",dz,"-x","220","-y","50","-P","-F","#{pane_id}",oW()])).stdout.trim();if(Y){let z=await lX(),Z=(await a0(["split-window","-h","-b","-t",Y,"-l",`${z}`,"-c",dz,"-P","-F","#{pane_id}",R1(_f()+VY(Cf()))])).stdout.trim();if(Z)await hf([["set-option","-p","-t",Z,JZ,"tasks"],["select-pane","-t",Z]])}return await lz(f,bV,"tasks"),f}async function bJ(f,J){if(await k1()!==f)return;if(J&&J!==f&&await Bf(J)){await v0(["switch-client","-t",`=${J}`]);return}let z=await $X();await v0(["switch-client","-t",`=${z}`])}var QJ,dz,JZ="@kobe_role",MO,sH="claude",yJ="@kobe_session_id",fB="@kobe_surface",TV="kobe-home",bV="@kobe_home";var Sf=C(()=>{iJ();zz();qJ();QJ=process.env.KOBE_TMUX_SOCKET?.trim()||"kobe";dz=UO()||"/";MO=JZ});async function AO(f,J=uV){let{code:Y,stdout:z}=await J.capture(["list-windows","-t",`=${f}`,"-F",`#{window_index} #{automatic-rename} #{${yJ}}`]);if(Y!==0)return[];let G=[];for(let Z of z.split(`
|
|
42
|
+
`)){let[q,Q,H]=Z.split("\t"),B=Number.parseInt((q??"").trim(),10);if(!Number.isInteger(B))continue;G.push({index:B,sessionId:H?.trim()??"",autoRename:Q?.trim()??""})}return G}async function gO(f,J,Y){let{code:z,stdout:G}=await Y.capture(["show-window-options","-t",`=${f}:${J}`,"automatic-rename"]);return z===0&&/\boff\b/.test(G)}async function RO(f){let{code:J,stdout:Y}=await f.capture(["show-window-options","-g","automatic-rename"]);return J===0&&/\boff\b/.test(Y)}async function CO(f,J,Y,z){return await z.run(["rename-window","-t",`=${f}:${J}`,"--",Y])===0}async function EV(f,J=kO){let Y=0,z=null,G=async(Z,q)=>{if(q.autoRename==="1")return!1;if(q.autoRename==="0"){if(z===null)z=await RO(J.runner);if(!z)return!0}return gO(Z,q.index,J.runner)};for(let Z of f.listTasks()){if(Z.archived||Z.kind==="main"||!Z.worktreePath)continue;let q=Mf(Z.id),Q=await AO(q,J.runner);if(Q.length===0)continue;let H=Q.reduce((V,j)=>Math.min(V,j.index),Number.POSITIVE_INFINITY),B=Z.vendor??yf;for(let V of Q)try{if(await G(q,V))continue;let j=V.sessionId?await J.titleFromSessionId(B,V.sessionId):V.index===H?await J.titleFromWorktree(Z.worktreePath,B):"";if(j&&await CO(q,V.index,j,J.runner))Y++}catch{}}return Y}var uV,kO;var xV=C(()=>{dX();Sf();S1();uV={capture:a0,run:v0};kO={runner:uV,titleFromSessionId:yV,titleFromWorktree:cz}});function hV(f){if(f instanceof Error)return f;let J;try{J=typeof f==="string"?f:JSON.stringify(f)}catch{J=String(f)}return Error(J)}function wV(f,J,Y=new Date){let z=hV(J);return`[${Y.toISOString()}] daemon ${f}: ${z.stack??`${z.name}: ${z.message}`}
|
|
43
|
+
`}function NO(f,J,Y=new Date){let z=hV(J);return`[${Y.toISOString()}] daemon error [${f}]: ${z.stack??`${z.name}: ${z.message}`}
|
|
44
|
+
`}function If(f,J){process.stderr.write(NO(f,J))}function yO(f,J,Y=new Date){return`[${Y.toISOString()}] daemon [${f}]: ${J}
|
|
45
|
+
`}function MY(f,J){process.stderr.write(yO(f,J))}function PV(f=(J)=>process.stderr.write(J)){if(JB||YB)return;JB=(J)=>f(wV("unhandledRejection",J)),YB=(J)=>f(wV("uncaughtException",J)),process.on("unhandledRejection",JB),process.on("uncaughtException",YB)}var JB,YB;async function bO(f,J=cz){let Y=[];for(let z of f.listTasks()){if(z.archived||z.title!==RJ||!z.worktreePath)continue;try{let G=await J(z.worktreePath,z.vendor??yf);if(!G)continue;let Z=f.getTask(z.id);if(!Z||Z.title!==RJ)continue;await f.setTitle(z.id,G),Y.push({id:z.id,title:G})}catch(G){If("auto-title-poller",G)}}return Y}function vV(f,J=zB,Y){if(J<=0)return()=>{};let z=!1,Z=setInterval(()=>{if(Y&&!Y())return;if(z)return;z=!0,bO(f).then(()=>EV(f)).catch((q)=>If("auto-title-poller",q)).finally(()=>{z=!1})},J);return Z.unref?.(),()=>clearInterval(Z)}var zB=4000;var mV=C(()=>{dX();iG();xV();S1()});class GB{last=new Map;sinks=new Set;publish(f,J){this.last.set(f,J);let Y={channel:f,payload:J};for(let z of this.sinks)z(Y)}snapshot(){return[...this.last].map(([f,J])=>({channel:f,payload:J}))}onPublish(f){return this.sinks.add(f),()=>{this.sinks.delete(f)}}}function rX(){return cf()[Zz]===!0}var Zz="experimental.autoStatus";var GZ=C(()=>{lY()});async function cV(f,J,Y=rX){if(!Y())return"skipped";let z=f.getTask(J);if(!z)return"skipped";if((z.kind??"task")==="main"||z.archived)return"skipped";if(z.status!=="backlog")return"skipped";return await f.setStatus(J,"in_progress"),"moved"}var nV=C(()=>{GZ()});import{createHash as SO}from"crypto";import{homedir as IO}from"os";import OY from"path";function wO(){return OY.join(process.env.KOBE_HOME_DIR??IO(),".kobe")}function hO(f){let Y=(OY.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=SO("sha1").update(OY.resolve(f)).digest("hex").slice(0,12);return`${Y}-${z}`}function PO(f){if(!OY.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return OY.join(wO(),TO,hO(f))}function vO(f){if(!OY.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[PO(f),...xO.map((J)=>OY.join(f,J))]}function FY(f){return f.length>1&&f.endsWith("/")?f.slice(0,-1):f}function dV(f,J){return J===f||J.startsWith(`${f}/`)}function iV(f,J){let Y=FY(J),z,G=-1;for(let Z of f){if(!Z.worktreePath)continue;let q=FY(Z.worktreePath);if(dV(q,Y)&&q.length>G)G=q.length,z=Z.id}return z}function ZB(f,J){let Y=FY(J),z,G=-1;for(let Z of f){if(!Z.repo)continue;let q=FY(Z.repo);if(dV(q,Y)&&q.length>G)G=q.length,z=q}return z}function lV(f,J){let Y=FY(J),z=new Set,G=new Set;for(let Z of f){if(Z.repo)z.add(FY(Z.repo));if(Z.worktreePath)G.add(FY(Z.worktreePath))}for(let Z of z)for(let q of vO(Z).map(FY)){let Q=`${q}/`;if(!Y.startsWith(Q))continue;let B=Y.slice(Q.length).split("/")[0];if(!B)continue;let V=`${Q}${B}`;if(G.has(V))return;return{repo:Z,worktreePath:V}}return}var TO="worktrees",uO=".kobe/worktrees",EO=".claude/worktrees",xO;var aV=C(()=>{xO=[uO,EO]});function QB(f){return{message:f instanceof Error?f.message:String(f),name:f instanceof Error?f.name:void 0}}async function ZZ(f,J,Y,z){let G=f.get(J);if(!G)throw Error(`unknown daemon request: ${J}`);return G.handle(HB(Y),z)}function XZ(){return new Map([{name:"hello",handle(J,Y){let z=typeof J.protocolVersion==="number"?J.protocolVersion:c1,G=typeof J.minProtocolVersion==="number"?J.minProtocolVersion:z;if(!FX({localVersion:c1,localMin:HY,remoteVersion:z,remoteMin:G}))throw Error(`daemon is protocol v${c1} (min v${HY}); this client is v${z} (min v${G}). Upgrade your kobe.`);return{protocolVersion:c1,minProtocolVersion:HY,kobeVersion:o0,capabilities:[...FH],daemonPid:Y.daemon.pid,clientId:Y.clientId,tasks:Y.orch.listTasks().map(zJ)}}},{name:"daemon.status",handle(J,Y){return{daemonPid:Y.daemon.pid,kobeVersion:o0,uptimeMs:Date.now()-Y.daemon.startedAt.getTime(),startedAt:Y.daemon.startedAt.toISOString(),attachedClients:Y.daemon.guiCount(),taskCount:Y.orch.listTasks().length,socketPath:Y.daemon.socketPath,webPort:Y.daemon.webPort??null}}},{name:"daemon.stop",async handle(J,Y){return await Y.daemon.stopSoon(),{}}},{name:"task.list",handle(J,Y){return{tasks:Y.orch.listTasks().map(zJ)}}},{name:"task.get",handle(J,Y){let z=Af(J,"taskId"),G=Y.orch.getTask(z);if(!G)throw Error(`task not found: ${z}`);return{task:zJ(G)}}},{name:"task.create",async handle(J,Y){let z=Af(J,"repo"),G=await Y.orch.createTask({repo:z,title:l1(J,"title"),branch:l1(J,"branch"),baseRef:l1(J,"baseRef"),vendor:qB(J,"vendor"),modelEffort:l1(J,"effort")});return{taskId:G.id,task:zJ(G)}}},{name:"task.archive",async handle(J,Y){let z=Af(J,"taskId");return await Y.orch.setArchived(z,XB(J,"archived")),{}}},{name:"task.rename",async handle(J,Y){let z=Af(J,"taskId");return await Y.orch.setTitle(z,Af(J,"title")),{}}},{name:"task.setBranch",async handle(J,Y){let z=Af(J,"taskId");return await Y.orch.setBranch(z,Af(J,"branch")),{}}},{name:"task.setVendor",async handle(J,Y){let z=Af(J,"taskId"),G=qB(J,"vendor");if(!G)throw Error("task.setVendor: vendor is required");return await Y.orch.setVendor(z,G),{}}},{name:"task.delete",async handle(J,Y){let z=Af(J,"taskId");return await Y.orch.deleteTask(z,{force:XB(J,"force")}),Y.activity.clearTask(z),{}}},{name:"task.pin",async handle(J,Y){let z=Af(J,"taskId");return await Y.orch.setPinned(z,XB(J,"pinned")),{}}},{name:"task.move",async handle(J,Y){let z=Af(J,"taskId"),G=Af(J,"direction");if(G!=="up"&&G!=="down")throw Error("direction must be up or down");return await Y.orch.moveTask(z,G==="up"?-1:1),{}}},{name:"task.status",async handle(J,Y){let z=Af(J,"taskId"),G=Af(J,"status");if(!k9(G))throw Error("status must be a TaskStatus");let Z=G==="done"?Y.orch.getTask(z):void 0,q=Z?.status;if(await Y.orch.setStatus(z,G),G==="done"&&q!=="done"&&Z)try{let Q=await Y.issues.mirrorTaskDone(Z.repo,z);if(Q)Y.bus.publish("issue.snapshot",Q)}catch(Q){If("issue-done-mirror",Q)}return{}}},{name:"task.reorder",async handle(J,Y){let z=J.moves;if(!Array.isArray(z)||z.length===0)throw Error("moves must be a non-empty array");if(z.length>500)throw Error("too many moves in one task.reorder batch (max 500)");let G=z.map((Z)=>{if(typeof Z!=="object"||Z===null)throw Error("each move needs taskId and position");let q=Z,Q=Af(q,"taskId"),H=q.position;if(typeof H!=="number"||!Number.isFinite(H))throw Error("position must be a finite number");return{taskId:Q,position:H}});return await Y.orch.reorderTasks(G),{}}},{name:"task.ensureMain",async handle(J,Y){let z=Af(J,"repo"),G=await Y.orch.ensureMainTask(z);return{task:zJ(G)}}},{name:"task.ensureWorktree",async handle(J,Y){let z=Af(J,"taskId");Y.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"running"});try{let G=await Y.orch.ensureWorktree(z);return Y.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"done"}),{worktreePath:G}}catch(G){throw Y.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"error",error:G instanceof Error?G.message:String(G)}),G}}},{name:"worktree.discoverAdoptable",async handle(J,Y){let z=Af(J,"repo");return{worktrees:await Y.orch.discoverAdoptableWorktrees(z)}}},{name:"worktree.adopt",async handle(J,Y){let z=await Y.orch.adoptWorktree({repo:Af(J,"repo"),worktreePath:Af(J,"worktreePath"),branch:l1(J,"branch"),vendor:qB(J,"vendor"),title:l1(J,"title"),ifExists:l1(J,"ifExists")==="return"?"return":"error"});return{task:zJ(z)}}},{name:"worktree.reconcile",async handle(J,Y){let z=Af(J,"cwd"),G=Af(J,"worktreePath"),Z=ZB(Y.orch.listTasks(),z)??ZB(Y.orch.listTasks(),G);if(!Z)return{adopted:!1};try{return{adopted:!0,taskId:(await Y.orch.adoptWorktree({repo:Z,worktreePath:G,ifExists:"return"})).id}}catch(q){return If("worktree-created",q),{adopted:!1}}}},{name:"task.setActive",async handle(J,Y){let z=l1(J,"taskId")??null;return await Y.orch.setActiveTask(z),Y.bus.publish("active-task",{taskId:z}),{}}},{name:"issue.list",async handle(J,Y){return Y.issues.list(Af(J,"repoRoot"))}},{name:"issue.mutate",async handle(J,Y){let z=await Y.issues.mutate(Af(J,"repoRoot"),J.op);return Y.bus.publish("issue.snapshot",z),z}},{name:"session.deliver",async handle(J,Y){let z=Af(J,"taskId"),G=Af(J,"text"),Z=l1(J,"source");if(Z!==void 0&&Z!=="note"&&Z!=="dispatcher")throw Error('source must be "note" or "dispatcher"');if(!Y.orch.getTask(z))throw Error(`task not found: ${z}`);return Y.bus.publish("session.deliver",{taskId:z,text:G,at:Date.now(),source:Z??"dispatcher"}),{ok:!0}}},{name:"note.file",async handle(J,Y){let z=Af(J,"taskId"),G=Af(J,"text"),Z=Y.orch.getTask(z);if(!Z)throw Error(`task not found: ${z}`);let q=Y.orch.listTasks().find((H)=>(H.kind??"task")==="main"&&H.repo===Z.repo&&!H.archived);if(!q||q.id===Z.id)return{ok:!0,routed:!1};let Q=Z.title||Z.branch||z;return Y.bus.publish("session.deliver",{taskId:q.id,text:`[KOBE FIELD NOTE] from "${Q}" (task ${z}): ${G}`,at:Date.now(),source:"note"}),{ok:!0,routed:!0}}},{name:"engine.reportEvent",async handle(J,Y){let z=Af(J,"kind");if(!RX(z))throw Error(`unknown engine event kind: ${z}`);let G=l1(J,"taskId"),Z=l1(J,"cwd");if(!G&&Z&&z==="session-start"){let H=lV(Y.orch.listTasks(),Z);if(H)try{await Y.orch.adoptWorktree({repo:H.repo,worktreePath:H.worktreePath,ifExists:"return"})}catch(B){If("worktree-autosync",B)}}let q=G??(Z?iV(Y.orch.listTasks(),Z):void 0);if(!q)return{};let Q=mO(J);if(Y.activity.report(q,z,Q),z==="turn-start")cV(Y.orch,q).then((H)=>{if(H==="moved")console.log(`[status-rules] task ${q} auto-moved backlog \u2192 in_progress`)}).catch((H)=>If("status-rules",H));return{}}}].map((J)=>[J.name,J]))}function HB(f){if(!f||typeof f!=="object"||Array.isArray(f))return{};return f}function Af(f,J){let Y=f[J];if(typeof Y!=="string"||Y.length===0)throw Error(`${J} is required`);return Y}function l1(f,J){let Y=f[J];if(Y===void 0||Y===null||Y==="")return;if(typeof Y!=="string")throw Error(`${J} must be a string`);return Y}function XB(f,J){let Y=f[J];if(Y===void 0||Y===null)return;if(typeof Y!=="boolean")throw Error(`${J} must be a boolean`);return Y}function qB(f,J){let Y=l1(f,J);return Y&&Y.trim().length>0?Y:void 0}function mO(f){let J=f.detail;if(!J||typeof J!=="object"||Array.isArray(J))return;let Y=J,z={};if(Y.failure==="rate_limit"||Y.failure==="billing"||Y.failure==="other")z.failure=Y.failure;if(Y.waiting==="permission"||Y.waiting==="input")z.waiting=Y.waiting;if(typeof Y.note==="string")z.note=Y.note;return Object.keys(z).length>0?z:void 0}var pX=C(()=>{CX();nV();S1();U1();aV();rY()});import{execFile as cO}from"child_process";import{mkdir as nO,readFile as dO,realpath as $V,rename as iO,stat as lO,writeFile as aO}from"fs/promises";import{homedir as $O}from"os";import{dirname as rO,isAbsolute as pO,join as _O,resolve as rV}from"path";import{promisify as oO}from"util";function sO(f){return(f instanceof Error?f.message:String(f)).includes("not a git repository")}function oX(f=process.env.KOBE_HOME_DIR??$O()){return _O(f,".kobe","issues.json")}function _V(f){return typeof f==="string"&&pV.includes(f)}function tO(f){if(f===null||typeof f!=="object"||Array.isArray(f))return null;let J=f;if(typeof J.id!=="number")return null;return{id:J.id,title:typeof J.title==="string"?J.title:"(untitled)",status:_V(J.status)?J.status:"open",created:typeof J.created==="string"?J.created:"",body:typeof J.body==="string"?J.body:"",taskId:typeof J.taskId==="string"?J.taskId:void 0}}function eO(){return{version:1,repos:{}}}function fA(){let f=new Date,J=String(f.getMonth()+1).padStart(2,"0"),Y=String(f.getDate()).padStart(2,"0");return`${f.getFullYear()}-${J}-${Y}`}async function JA(f){let{stdout:J}=await UB("git",["-C",f,"rev-parse","--git-common-dir"]),Y=J.trim();return $V(pO(Y)?Y:rV(f,Y))}async function YA(f){let{stdout:J}=await UB("git",["-C",f,"rev-parse","--show-toplevel"]);return J.trim()}async function zA(f){let{stdout:J}=await UB("git",["-C",f,"worktree","list","--porcelain"]),Y=J.split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim();return Y?$V(Y):YA(f)}async function BB(f){if(typeof f!=="string"||f.length===0)throw Error("repoRoot is required");let J=rV(f);if(!(await lO(J).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[z,G]=await Promise.all([zA(J),JA(J)]);return{repoRoot:z,repoKey:G}}catch(z){if(sO(z))throw Error("repoRoot is not a git repository");throw z}}async function jB(f){try{let J=JSON.parse(await dO(f,"utf8")),Y={};if(J.repos&&typeof J.repos==="object")for(let[z,G]of Object.entries(J.repos)){if(!G||typeof G!=="object")continue;let Z=G;Y[z]={repoRoot:typeof Z.repoRoot==="string"?Z.repoRoot:"",nextId:typeof Z.nextId==="number"?Z.nextId:1,issues:Array.isArray(Z.issues)?Z.issues.map(tO).filter((q)=>q!==null):[]}}return{version:1,repos:Y}}catch(J){if(J.code==="ENOENT")return eO();throw J}}async function WB(f,J){await nO(rO(f),{recursive:!0});let Y=`${f}.tmp`;await aO(Y,`${JSON.stringify(J,null,2)}
|
|
46
|
+
`,"utf8"),await iO(Y,f)}function VB(f,J){return{repoRoot:f,exists:J!==null,nextId:J?.nextId??1,issues:J?.issues??[]}}async function KB(f,J){let z=(_X.get(f)??Promise.resolve()).then(J),G=z.then(()=>{return},()=>{return});return _X.set(f,G),G.then(()=>{if(_X.get(f)===G)_X.delete(f)}),z}class sX{path;constructor(f=oX()){this.path=f}async list(f){let{repoRoot:J,repoKey:Y}=await BB(f);return KB(this.path,async()=>{let z=await jB(this.path),G=z.repos[Y]??null;if(G&&G.repoRoot!==J)G.repoRoot=J,await WB(this.path,z);return VB(J,G)})}async mirrorTaskDone(f,J){let{repoRoot:Y,repoKey:z}=await BB(f);if(!J)return null;return KB(this.path,async()=>{let G=await jB(this.path),Z=G.repos[z];if(!Z)return null;let q=Z.issues.find((Q)=>Q.taskId===J);if(!q||q.status==="done")return null;return q.status="done",Z.repoRoot=Y,await WB(this.path,G),VB(Y,Z)})}async mutate(f,J){let{repoRoot:Y,repoKey:z}=await BB(f);if(!J||typeof J!=="object"||Array.isArray(J)||typeof J.type!=="string")throw Error("missing op");return KB(this.path,async()=>{let G=await jB(this.path),Z=G.repos[z];if(!Z)Z={repoRoot:Y,nextId:1,issues:[]},G.repos[z]=Z;Z.repoRoot=Y;let q=J;if(q.type==="create"){if(typeof q.title!=="string"||q.title.trim().length===0)throw Error("create requires a non-empty title");if(q.body!==void 0&&typeof q.body!=="string")throw Error("body must be a string");Z.issues=[{id:Z.nextId,title:q.title,status:"open",created:fA(),body:typeof q.body==="string"?q.body:""},...Z.issues],Z.nextId+=1}else if(q.type==="setStatus"){if(typeof q.id!=="number")throw Error("setStatus requires a numeric id");if(!_V(q.status))throw Error(`invalid status: must be one of ${pV.join(", ")}`);let Q=Z.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);Q.status=q.status}else if(q.type==="update"){if(typeof q.id!=="number")throw Error("update requires a numeric id");if(q.title!==void 0&&(typeof q.title!=="string"||q.title.trim().length===0))throw Error("title must be a non-empty string");if(q.body!==void 0&&typeof q.body!=="string")throw Error("body must be a string");let Q=Z.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);if(typeof q.title==="string")Q.title=q.title;if(typeof q.body==="string")Q.body=q.body}else if(q.type==="link"){if(typeof q.id!=="number")throw Error("link requires a numeric id");if(typeof q.taskId!=="string"||q.taskId.length===0)throw Error("link requires a non-empty taskId");let Q=Z.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);Q.taskId=q.taskId}else if(q.type==="unlink"){if(typeof q.id!=="number")throw Error("unlink requires a numeric id");let Q=Z.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);Q.taskId=void 0}else if(q.type==="delete"){if(typeof q.id!=="number")throw Error("delete requires a numeric id");let Q=Z.issues.filter((H)=>H.id!==q.id);if(Q.length===Z.issues.length)throw Error(`no issue #${q.id}`);Z.issues=Q}else throw Error(`unknown op type: ${q.type}`);return await WB(this.path,G),VB(Y,Z)})}}var UB,pV,_X;var DB=C(()=>{UB=oO(cO),pV=["open","doing","hold","done"];_X=new Map});import{mkdirSync as GA,watch as ZA}from"fs";import{basename as XA,dirname as qA}from"path";function tX(f){if(f.debounceMs<=0)return()=>{};let J=qA(f.filePath),Y=new Set([XA(f.filePath),...f.matchBasenames??[]]),z=null,G=null,Z=null,q=()=>{try{f.onTrigger()}catch(H){f.onError(H)}},Q=()=>{if(z)clearTimeout(z);z=setTimeout(()=>{z=null,q()},f.debounceMs),z.unref?.()};try{GA(J,{recursive:!0}),Z=ZA(J,(H,B)=>{let V=B===null?null:String(B);if(V!==null&&!Y.has(V))return;Q()}),Z.on("error",f.onError)}catch(H){f.onError(H)}if(f.pollMs&&f.pollMs>0)G=setInterval(q,f.pollMs),G.unref?.();return()=>{if(z)clearTimeout(z),z=null;if(G)clearInterval(G),G=null;Z?.close(),Z=null}}var LB=()=>{};import{homedir as QA}from"os";import{basename as HA,join as BA}from"path";function FB(f=process.env.KOBE_HOME_DIR??QA()){return BA(f,".kobe","settings","keybindings.yaml")}function oV(f,J={}){let Y=J.debounceMs??MB;if(Y<=0)return()=>{};let z=J.path??FB(),G=HA(z),Z=G.replace(/\.yaml$/,".yml"),q=0;return f.publish("keybindings",{rev:q}),tX({filePath:z,matchBasenames:[G,Z],debounceMs:Y,onTrigger:()=>{try{q+=1,f.publish("keybindings",{rev:q})}catch(H){If("keybindings-watcher",H)}},onError:(H)=>If("keybindings-watcher",H)})}var MB=200;var sV=C(()=>{LB()});class OB{clients;idleGraceMs;onIdleStop;schedule;log;cancelIdle=null;stopping=!1;constructor(f){this.clients=f.clients,this.idleGraceMs=f.idleGraceMs,this.onIdleStop=f.onIdleStop,this.schedule=f.schedule??jA,this.log=f.log??MY}guiCount(){let f=0;for(let J of this.clients())if(J.holdsLifetime)f++;return f}hasSubscribers(){for(let f of this.clients())if(f.subscribed)return!0;return!1}isStopping(){return this.stopping}markStopping(){this.stopping=!0,this.clearIdle()}guiAttached(){this.clearIdle()}clientDisconnected(f){if(f)this.maybeArm()}clearIdle(){if(this.cancelIdle)this.cancelIdle(),this.cancelIdle=null}maybeArm(){if(this.stopping||this.guiCount()>0)return;this.clearIdle(),this.log("idle",`last gui gone \u2014 arming ${this.idleGraceMs}ms idle-stop grace`),this.cancelIdle=this.schedule(()=>{if(this.cancelIdle=null,this.stopping||this.guiCount()>0)return;this.log("idle","grace elapsed with no gui \u2014 self-stopping"),this.onIdleStop()},this.idleGraceMs)}}var jA=(f,J)=>{let Y=setTimeout(f,J);return Y.unref?.(),()=>clearTimeout(Y)};var tV=()=>{};import{spawn as WA}from"child_process";function AB(f,J,Y,z){if(Y)return f+z.slowRetryMs;return J+Math.max(z.minIntervalMs,(J-f)*5)}function gB(f,J){return!f.inFlight&&J>=f.nextAllowedAt}function eX(f,J,Y,z){let G=Date.now();if(!gB(f,G))return!1;f.inFlight=!0;let Z=new AbortController,q=setTimeout(()=>Z.abort(),J.timeoutMs);return(async()=>{let Q,H=!1;try{Q=await Y(Z.signal),H=!0}catch{}clearTimeout(q);let B=Z.signal.aborted;if(f.nextAllowedAt=AB(G,Date.now(),B,J),f.inFlight=!1,H&&!B)z(Q)})(),!0}function BJ(f,J,Y){return new Promise((z)=>{let G="",Z=!1,q=(H)=>{if(Z)return;Z=!0,z({status:H,stdout:G})},Q=WA(f,J.slice(),{cwd:Y.cwd,stdio:["ignore","pipe","ignore"],env:Y.env,signal:Y.signal,killSignal:"SIGKILL"});Q.stdout?.on("data",(H)=>{G+=String(H)}),Q.on("error",()=>q(null)),Q.on("close",(H)=>q(H))})}var qZ=()=>{};function LA(f){if(f.archived)return!1;if(f.kind==="main")return!1;if(!f.branch||!f.worktreePath)return!1;if(D1(f.repo)||D1(f.worktreePath))return!1;return!0}async function MA(f,J){let Y=J.tickMs??fq,z=[];for(let G of f.listTasks()){if(!LA(G)){J.schedule.delete(G.id);continue}let Z=J.schedule.get(G.id)??0;if(J.now<Z)continue;try{let q=await J.run(G.worktreePath,G.branch);if(q.kind==="empty"){J.schedule.set(G.id,J.now+VA);continue}let Q=jW(q.view,J.at),H=f.getTask(G.id);if(!H){J.schedule.delete(G.id);continue}if(!DX(H.prStatus,Q??void 0))await f.setPRStatus(G.id,Q),z.push(G.id);let B=Q?.lifecycle==="merged"||Q?.lifecycle==="closed";J.schedule.set(G.id,J.now+(B?KA:Y))}catch(q){If("pr-status-poller",q),J.schedule.set(G.id,J.now+Y)}}return z}function eV(f,J=fq,Y,z=DA){if(J<=0)return()=>{};let G=new Map,Z=!1,Q=setInterval(()=>{if(Y&&!Y())return;if(Z)return;Z=!0,MA(f,{run:z,now:Date.now(),at:new Date().toISOString(),schedule:G,tickMs:J}).catch((H)=>If("pr-status-poller",H)).finally(()=>{Z=!1})},J);return Q.unref?.(),()=>clearInterval(Q)}var fq=30000,VA=300000,KA=600000,UA=1e4,DA=async(f,J)=>{let Y=new AbortController,z=setTimeout(()=>Y.abort(),UA);try{let G=await BJ("gh",["pr","view",J,"--json",BW],{cwd:f,signal:Y.signal});if(G.status!==0)return{kind:"empty"};let Z=JSON.parse(G.stdout);return typeof Z.number==="number"?{kind:"pr",view:Z}:{kind:"empty"}}catch{return{kind:"empty"}}finally{clearTimeout(z)}};var f7=C(()=>{qZ();gf()});import{readFileSync as FA}from"fs";import{homedir as OA}from"os";import{basename as AA,join as gA}from"path";function CB(f=process.env.KOBE_HOME_DIR??OA()){return gA(f,".config","kobe","state.json")}function J7(f){let J={};try{let B=JSON.parse(FA(f,"utf8"));if(B&&typeof B==="object"&&!Array.isArray(B))J=B}catch{}let Y=typeof J.activeTheme==="string"&&J.activeTheme.length>0?J.activeTheme:"claude",z=J.transparentBackground===!0,G=typeof J.focusAccent==="string"&&CA.includes(J.focusAccent)?J.focusAccent:null,Z=J.activeSortMode==="recent"?"recent":"default",q=J["tasksPane.keysCollapsed"]===!0,Q=typeof J["tasksPane.projectFilter"]==="string"&&J["tasksPane.projectFilter"].length>0?J["tasksPane.projectFilter"]:null,H=typeof J.locale==="string"&&J.locale.length>0?J.locale:"en";return{theme:Y,transparentBackground:z,focusAccent:G,locale:H,sortMode:Z,keysCollapsed:q,projectFilter:Q}}function kA(f,J){return f.theme===J.theme&&f.transparentBackground===J.transparentBackground&&f.focusAccent===J.focusAccent&&f.locale===J.locale&&f.sortMode===J.sortMode&&f.keysCollapsed===J.keysCollapsed&&f.projectFilter===J.projectFilter}function Y7(f,J={}){let Y=J.debounceMs??RB;if(Y<=0)return()=>{};let z=J.pollMs??RA,G=J.statePath??CB(),Z=AA(G),q=J7(G);return f.publish("ui-prefs",q),tX({filePath:G,matchBasenames:[Z],debounceMs:Y,pollMs:z,onTrigger:()=>{try{let H=J7(G);if(kA(q,H))return;q=H,f.publish("ui-prefs",H)}catch(H){If("ui-prefs-watcher",H)}},onError:(H)=>If("ui-prefs-watcher",H)})}var RB=200,RA=250,CA;var z7=C(()=>{LB();CA=["primary","success","info"]});function kB(){return cf()[Xz]===!0}var Xz="experimental.dispatcher";var Jq=C(()=>{lY()});import{randomUUID as NA}from"crypto";function jJ(f){return`engineCommand.${f}`}function WJ(f){return`engineName.${f}`}function qz(f){return kf(WJ(f))?.trim()||NB[f]||f}function QZ(f){return pf(f??"claude").defaultCommand}function yA(f){let J=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g;for(let z=Y.exec(f);z!==null;z=Y.exec(f))J.push(z[1]??z[2]??z[3]??"");return J}function N1(f,J){let Y=f??"claude",z=kf(jJ(Y))?.trim(),G=(()=>{if(z){let Z=yA(z);if(Z.length>0)return Z}return QZ(Y)})();return bA(G,Y,J)}function bA(f,J,Y){let z=Y?.trim();if(!z)return f;let G=J??"claude";if(!pf(G).effortLevels?.includes(z))return f;if(G==="codex")return[...f,"-c",`model_reasoning_effort=${z}`];return f}function rz(f,J){if((J??"claude")!=="claude")return{argv:f,sessionId:null};if(f.some((z)=>SA.has(z)))return{argv:f,sessionId:null};let Y=NA();return{argv:[...f,"--session-id",Y],sessionId:Y}}function Qz(){let f=(J)=>/^[A-Za-z0-9_/.:=-]+$/.test(J)?J:`'${J.replace(/'/g,"'\\''")}'`;try{return[...Cf(),"api"].map(f).join(" ")}catch{return"kobe api"}}function IA(f,J=Qz()){return[`You are running inside kobe (a local multi-session task manager) as task ${f}.`,"kobe tracks a lifecycle status for this task on a board.","When you have COMPLETED the work requested in this session and verified it, report it by running:",` ${J} set-status --task-id ${f} --status in_review`,"Run it only when the work is genuinely done \u2014 never while you are asking the user a question, waiting for input, or mid-task.","Never set any other status value; everything beyond in_review is the user's decision."].join(`
|
|
47
|
+
`)}function TA(f,J=Qz()){return["kobe shares hard-won discoveries between its parallel sessions as one-line field notes.","When you RESOLVE a non-obvious, repo-level gotcha (a build flag, a flaky test, an environment quirk, an API trap), file it:",` ${J} note --task-id ${f} --text "<one line: the verified conclusion>"`,"File only verified conclusions another session could act on \u2014 never progress logs, opinions, or details specific to your own task. A handful per session at most."].join(`
|
|
48
|
+
`)}function uA(f,J=Qz(),Y={}){let z=[];if((Y.status??rX)())z.push(IA(f,J));if((Y.notes??kB)())z.push(TA(f,J));return z.length>0?z.join(`
|
|
49
49
|
|
|
50
|
-
`):null}function
|
|
51
|
-
`)}function
|
|
52
|
-
`)?
|
|
53
|
-
`)}return
|
|
54
|
-
`:
|
|
55
|
-
`)?
|
|
56
|
-
`;return""}async function
|
|
57
|
-
`),D={files:U,raw:F};return Response.json(D)}var nO=15000,iO=8;var iV=S(()=>{rJ();sQ()});import{isAbsolute as _O}from"path";function $V(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function oO(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9._-]+$/.test(J)&&!J.includes("..")}async function sO(J){let Y=J.searchParams.get("worktreePath"),Z=J.searchParams.get("vendor")??"claude";if(!Y||!_O(Y))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!$V(Z))return Response.json({error:"invalid vendor"},{status:400});try{let X=a1(Z).history,[G,z]=await Promise.all([X.listSessionIdsForWorktree(Y),X.latestTranscriptMtimeForWorktree(Y)]);return Response.json({sessions:G,latestMtime:z})}catch(X){return Response.json({error:X instanceof Error?X.message:String(X)},{status:500})}}async function tO(J){let Y=J.searchParams.get("vendor")??"claude",Z=J.searchParams.get("sessionId");if(!$V(Y))return Response.json({error:"invalid vendor"},{status:400});if(!oO(Z))return Response.json({error:"invalid sessionId"},{status:400});try{let X=await a1(Y).history.readHistory(Z);return Response.json({messages:X})}catch(X){return Response.json({error:X instanceof Error?X.message:String(X)},{status:500})}}async function aV(J,Y){if(Y.pathname!==lV&&Y.pathname!==rO)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Y.pathname===lV?sO(Y):tO(Y)}var lV="/api/history/sessions",rO="/api/history/messages";var pV=S(()=>{jZ()});import{mkdir as eO,readFile as JA,writeFile as YA}from"fs/promises";import{join as _V}from"path";function rV(){return _V(o1(),"notes")}function oV(J){return typeof J==="string"&&J.length>0&&/^[A-Za-z0-9_-]+$/.test(J)}function sV(J){return _V(rV(),`${J}.md`)}async function XA(J){let Y=J.searchParams.get("taskId");if(!oV(Y))return Response.json({error:"invalid taskId"},{status:400});try{let Z="";try{Z=await JA(sV(Y),"utf8")}catch(X){if(X.code!=="ENOENT")throw X}return Response.json({markdown:Z})}catch(Z){return Response.json({error:Z instanceof Error?Z.message:String(Z)},{status:500})}}async function GA(J){let Y;try{Y=await J.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!oV(Y.taskId))return Response.json({error:"invalid taskId"},{status:400});if(typeof Y.markdown!=="string")return Response.json({error:"markdown must be a string"},{status:400});try{return await eO(rV(),{recursive:!0}),await YA(sV(Y.taskId),Y.markdown,"utf8"),Response.json({ok:!0})}catch(Z){return Response.json({error:Z instanceof Error?Z.message:String(Z)},{status:500})}}async function tV(J,Y){if(Y.pathname!==ZA)return null;if(J.method==="GET")return XA(Y);if(J.method==="PUT")return GA(J);return Response.json({error:"method not allowed"},{status:405})}var ZA="/api/notes";var eV=S(()=>{n1()});var $X;var tQ=S(()=>{$X={$schema:"https://opencode.ai/theme.json",defs:{darkBg:"#141413",darkBgRaised:"#1A1917",darkBgInset:"#2B2A27",darkBgMenu:"#33312E",darkBorderSubtle:"#2B2A27",darkBorder:"#3A3835",darkBorderActive:"#5C5853",darkText:"#EAE7DF",darkTextMuted:"#A9A39A",darkTextSubtle:"#6B665F",darkPrimary:"#CC785C",darkSecondary:"#D4967E",darkAccent:"#CC785C",darkAccentHover:"#E0AB96",darkRed:"#D47563",darkOrange:"#D97757",darkYellow:"#E8C96B",darkGreen:"#9ACA86",darkBlue:"#61AAF2",darkViolet:"#9B87F5",darkTerracotta:"#BF4D43",lightBg:"#FAF9F5",lightBgRaised:"#F0EEE6",lightBgInset:"#EAE7DF",lightBgMenu:"#E2DED4",lightBorderSubtle:"#EAE7DF",lightBorder:"#D9D5CC",lightBorderActive:"#A9A39A",lightText:"#1A1917",lightTextMuted:"#6B665F",lightTextSubtle:"#8D877D",lightPrimary:"#C96442",lightSecondary:"#B85F3D",lightAccent:"#CC785C",lightAccentHover:"#B85F3D",lightRed:"#A84B3A",lightOrange:"#C96442",lightYellow:"#8A6220",lightGreen:"#2E7C4C",lightBlue:"#207FDE",lightViolet:"#7B5BB6",lightTerracotta:"#BF4D43"},theme:{primary:{dark:"darkPrimary",light:"lightPrimary"},secondary:{dark:"darkSecondary",light:"lightSecondary"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkYellow",light:"lightYellow"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkBlue",light:"lightBlue"},text:{dark:"darkText",light:"lightText"},textMuted:{dark:"darkTextMuted",light:"lightTextMuted"},background:{dark:"darkBg",light:"lightBg"},backgroundPanel:{dark:"darkBgRaised",light:"lightBgRaised"},backgroundElement:{dark:"darkBgInset",light:"lightBgInset"},backgroundMenu:{dark:"darkBgMenu",light:"lightBgMenu"},backgroundDialog:{dark:"darkBgRaised",light:"lightBgRaised"},border:{dark:"darkBorder",light:"lightBorder"},borderActive:{dark:"darkBorderActive",light:"lightBorderActive"},borderSubtle:{dark:"darkBorderSubtle",light:"lightBorderSubtle"},diffAdded:{dark:"darkGreen",light:"lightGreen"},diffRemoved:{dark:"darkRed",light:"lightRed"},diffContext:{dark:"darkTextMuted",light:"lightTextSubtle"},diffHunkHeader:{dark:"darkTextMuted",light:"lightTextSubtle"},diffHighlightAdded:{dark:"#B5E0A0",light:"#1F6638"},diffHighlightRemoved:{dark:"#E89180",light:"#8A3A2C"},diffAddedBg:{dark:"#1F2A1F",light:"#E5EEDF"},diffRemovedBg:{dark:"#2A1F1C",light:"#F5DAD3"},diffContextBg:{dark:"darkBgRaised",light:"lightBgRaised"},diffLineNumber:{dark:"darkTextSubtle",light:"lightTextSubtle"},diffAddedLineNumberBg:{dark:"#1A2419",light:"#D5E2CC"},diffRemovedLineNumberBg:{dark:"#241915",light:"#EBC8BE"},markdownText:{dark:"darkText",light:"lightText"},markdownHeading:{dark:"darkPrimary",light:"lightPrimary"},markdownLink:{dark:"darkAccent",light:"lightAccent"},markdownLinkText:{dark:"darkBlue",light:"lightBlue"},markdownCode:{dark:"darkSecondary",light:"lightSecondary"},markdownBlockQuote:{dark:"darkTextMuted",light:"lightTextMuted"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkPrimary",light:"lightPrimary"},markdownHorizontalRule:{dark:"darkTextMuted",light:"lightTextMuted"},markdownListItem:{dark:"darkAccent",light:"lightAccent"},markdownListEnumeration:{dark:"darkBlue",light:"lightBlue"},markdownImage:{dark:"darkAccent",light:"lightAccent"},markdownImageText:{dark:"darkBlue",light:"lightBlue"},markdownCodeBlock:{dark:"darkText",light:"lightText"},markdownQuote:{dark:"darkTextMuted",light:"lightTextMuted"},syntaxComment:{dark:"darkTextSubtle",light:"lightTextSubtle"},syntaxKeyword:{dark:"darkPrimary",light:"lightPrimary"},syntaxFunction:{dark:"darkBlue",light:"lightBlue"},syntaxVariable:{dark:"darkText",light:"lightText"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkViolet",light:"lightViolet"},syntaxOperator:{dark:"darkSecondary",light:"lightSecondary"},syntaxPunctuation:{dark:"darkText",light:"lightText"},selectedListItemText:{dark:"darkBg",light:"lightBg"}}}});var aX;var eQ=S(()=>{aX={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#0a0a0a",darkStep2:"#111111",darkStep3:"#181818",darkStep4:"#1f1f1f",darkStep5:"#2a2a2a",darkStep6:"#363636",darkStep7:"#444444",darkStep8:"#5a5a5a",darkStep9:"#7a7a7a",darkStep10:"#9a9a9a",darkStep11:"#909090",darkStep12:"#e8e8e8",darkAccent:"#7da5c8",darkAccentBright:"#9bc3e3",darkRed:"#e06c75",darkOrange:"#d6a668",darkGreen:"#7fd88f",darkCyan:"#7da5c8",darkYellow:"#d6a668",lightStep1:"#fafafa",lightStep2:"#f3f3f3",lightStep3:"#ececec",lightStep4:"#e2e2e2",lightStep5:"#d4d4d4",lightStep6:"#bdbdbd",lightStep7:"#9c9c9c",lightStep8:"#7c7c7c",lightStep9:"#5b5b5b",lightStep10:"#404040",lightStep11:"#6c6c6c",lightStep12:"#1a1a1a",lightAccent:"#3d6f9f",lightAccentBright:"#1a4f87",lightRed:"#c9343a",lightOrange:"#a06b1a",lightGreen:"#3d9a57",lightCyan:"#3d6f9f",lightYellow:"#a06b1a"},theme:{primary:{dark:"darkStep12",light:"lightStep12"},secondary:{dark:"darkAccentBright",light:"lightAccentBright"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},backgroundMenu:{dark:"darkStep4",light:"lightStep4"},border:{dark:"darkStep6",light:"lightStep6"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep4",light:"lightStep4"},diffAdded:{dark:"#7fd88f",light:"#3d9a57"},diffRemoved:{dark:"#e06c75",light:"#c9343a"},diffContext:{dark:"darkStep10",light:"lightStep10"},diffHunkHeader:{dark:"darkStep10",light:"lightStep10"},diffHighlightAdded:{dark:"#9be5ad",light:"#2d7a3f"},diffHighlightRemoved:{dark:"#f08490",light:"#a82530"},diffAddedBg:{dark:"#15241a",light:"#d8efdc"},diffRemovedBg:{dark:"#2a1518",light:"#f5dadc"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"darkStep9",light:"lightStep9"},diffAddedLineNumberBg:{dark:"#0f1c14",light:"#c5deca"},diffRemovedLineNumberBg:{dark:"#221012",light:"#e5c5c8"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkStep12",light:"lightStep12"},markdownLink:{dark:"darkAccent",light:"lightAccent"},markdownCode:{dark:"darkAccentBright",light:"lightAccentBright"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},markdownQuote:{dark:"darkStep11",light:"lightStep11"},selectedListItemText:{dark:"darkStep1",light:"lightStep1"}}}});var pX;var Jf=S(()=>{pX={$schema:"https://opencode.ai/theme.json",defs:{background:"#282a36",currentLine:"#44475a",selection:"#44475a",foreground:"#f8f8f2",comment:"#6272a4",cyan:"#8be9fd",green:"#50fa7b",orange:"#ffb86c",pink:"#ff79c6",purple:"#bd93f9",red:"#ff5555",yellow:"#f1fa8c"},theme:{primary:{dark:"purple",light:"purple"},secondary:{dark:"pink",light:"pink"},accent:{dark:"cyan",light:"cyan"},error:{dark:"red",light:"red"},warning:{dark:"yellow",light:"yellow"},success:{dark:"green",light:"green"},info:{dark:"orange",light:"orange"},text:{dark:"foreground",light:"#282a36"},textMuted:{dark:"comment",light:"#6272a4"},background:{dark:"#282a36",light:"#f8f8f2"},backgroundPanel:{dark:"#21222c",light:"#e8e8e2"},backgroundElement:{dark:"currentLine",light:"#d8d8d2"},border:{dark:"currentLine",light:"#c8c8c2"},borderActive:{dark:"purple",light:"purple"},borderSubtle:{dark:"#191a21",light:"#e0e0e0"},diffAdded:{dark:"green",light:"green"},diffRemoved:{dark:"red",light:"red"},diffContext:{dark:"comment",light:"#6272a4"},diffHunkHeader:{dark:"comment",light:"#6272a4"},diffHighlightAdded:{dark:"green",light:"green"},diffHighlightRemoved:{dark:"red",light:"red"},diffAddedBg:{dark:"#1a3a1a",light:"#e0ffe0"},diffRemovedBg:{dark:"#3a1a1a",light:"#ffe0e0"},diffContextBg:{dark:"#21222c",light:"#e8e8e2"},diffLineNumber:{dark:"#989aa4",light:"#686865"},diffAddedLineNumberBg:{dark:"#1a3a1a",light:"#e0ffe0"},diffRemovedLineNumberBg:{dark:"#3a1a1a",light:"#ffe0e0"},markdownText:{dark:"foreground",light:"#282a36"},markdownHeading:{dark:"purple",light:"purple"},markdownLink:{dark:"cyan",light:"cyan"},markdownLinkText:{dark:"pink",light:"pink"},markdownCode:{dark:"green",light:"green"},markdownBlockQuote:{dark:"comment",light:"#6272a4"},markdownEmph:{dark:"yellow",light:"yellow"},markdownStrong:{dark:"orange",light:"orange"},markdownHorizontalRule:{dark:"comment",light:"#6272a4"},markdownListItem:{dark:"purple",light:"purple"},markdownListEnumeration:{dark:"cyan",light:"cyan"},markdownImage:{dark:"cyan",light:"cyan"},markdownImageText:{dark:"pink",light:"pink"},markdownCodeBlock:{dark:"foreground",light:"#282a36"},syntaxComment:{dark:"comment",light:"#6272a4"},syntaxKeyword:{dark:"pink",light:"pink"},syntaxFunction:{dark:"green",light:"green"},syntaxVariable:{dark:"foreground",light:"#282a36"},syntaxString:{dark:"yellow",light:"yellow"},syntaxNumber:{dark:"purple",light:"purple"},syntaxType:{dark:"cyan",light:"cyan"},syntaxOperator:{dark:"pink",light:"pink"},syntaxPunctuation:{dark:"foreground",light:"#282a36"}}}});var _X;var Yf=S(()=>{_X={$schema:"https://opencode.ai/theme.json",defs:{nord0:"#2E3440",nord1:"#3B4252",nord2:"#434C5E",nord3:"#4C566A",nord4:"#D8DEE9",nord5:"#E5E9F0",nord6:"#ECEFF4",nord7:"#8FBCBB",nord8:"#88C0D0",nord9:"#81A1C1",nord10:"#5E81AC",nord11:"#BF616A",nord12:"#D08770",nord13:"#EBCB8B",nord14:"#A3BE8C",nord15:"#B48EAD"},theme:{primary:{dark:"nord8",light:"nord10"},secondary:{dark:"nord9",light:"nord9"},accent:{dark:"nord7",light:"nord7"},error:{dark:"nord11",light:"nord11"},warning:{dark:"nord12",light:"nord12"},success:{dark:"nord14",light:"nord14"},info:{dark:"nord8",light:"nord10"},text:{dark:"nord6",light:"nord0"},textMuted:{dark:"#8B95A7",light:"nord1"},background:{dark:"nord0",light:"nord6"},backgroundPanel:{dark:"nord1",light:"nord5"},backgroundElement:{dark:"nord2",light:"nord4"},border:{dark:"nord2",light:"nord3"},borderActive:{dark:"nord3",light:"nord2"},borderSubtle:{dark:"nord2",light:"nord3"},diffAdded:{dark:"nord14",light:"nord14"},diffRemoved:{dark:"nord11",light:"nord11"},diffContext:{dark:"#8B95A7",light:"nord3"},diffHunkHeader:{dark:"#8B95A7",light:"nord3"},diffHighlightAdded:{dark:"nord14",light:"nord14"},diffHighlightRemoved:{dark:"nord11",light:"nord11"},diffAddedBg:{dark:"#3B4252",light:"#E5E9F0"},diffRemovedBg:{dark:"#3B4252",light:"#E5E9F0"},diffContextBg:{dark:"nord1",light:"nord5"},diffLineNumber:{dark:"#a9aeb6",light:"textMuted"},diffAddedLineNumberBg:{dark:"#3B4252",light:"#E5E9F0"},diffRemovedLineNumberBg:{dark:"#3B4252",light:"#E5E9F0"},markdownText:{dark:"nord4",light:"nord0"},markdownHeading:{dark:"nord8",light:"nord10"},markdownLink:{dark:"nord9",light:"nord9"},markdownLinkText:{dark:"nord7",light:"nord7"},markdownCode:{dark:"nord14",light:"nord14"},markdownBlockQuote:{dark:"#8B95A7",light:"nord3"},markdownEmph:{dark:"nord12",light:"nord12"},markdownStrong:{dark:"nord13",light:"nord13"},markdownHorizontalRule:{dark:"#8B95A7",light:"nord3"},markdownListItem:{dark:"nord8",light:"nord10"},markdownListEnumeration:{dark:"nord7",light:"nord7"},markdownImage:{dark:"nord9",light:"nord9"},markdownImageText:{dark:"nord7",light:"nord7"},markdownCodeBlock:{dark:"nord4",light:"nord0"},syntaxComment:{dark:"#8B95A7",light:"nord3"},syntaxKeyword:{dark:"nord9",light:"nord9"},syntaxFunction:{dark:"nord8",light:"nord8"},syntaxVariable:{dark:"nord7",light:"nord7"},syntaxString:{dark:"nord14",light:"nord14"},syntaxNumber:{dark:"nord15",light:"nord15"},syntaxType:{dark:"nord7",light:"nord7"},syntaxOperator:{dark:"nord9",light:"nord9"},syntaxPunctuation:{dark:"nord4",light:"nord0"}}}});var rX;var Zf=S(()=>{rX={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#161616",darkStep2:"#1f1f1f",darkStep3:"#282828",darkStep4:"#323232",darkStep5:"#3c3c3c",darkStep6:"#484848",darkStep7:"#545454",darkStep8:"#6a6a6a",darkStep9:"#fab283",darkStep10:"#ffc09f",darkStep11:"#808080",darkStep12:"#eeeeee",darkSecondary:"#5c9cf5",darkAccent:"#7da5c8",darkRed:"#e06c75",darkOrange:"#f5a742",darkGreen:"#7fd88f",darkCyan:"#56b6c2",darkYellow:"#e5c07b",lightStep1:"#ffffff",lightStep2:"#fafafa",lightStep3:"#f5f5f5",lightStep4:"#ebebeb",lightStep5:"#e1e1e1",lightStep6:"#d4d4d4",lightStep7:"#b8b8b8",lightStep8:"#a0a0a0",lightStep9:"#3b7dd8",lightStep10:"#2968c3",lightStep11:"#8a8a8a",lightStep12:"#1a1a1a",lightSecondary:"#7b5bb6",lightAccent:"#3d6f9f",lightRed:"#d1383d",lightOrange:"#d68c27",lightGreen:"#3d9a57",lightCyan:"#318795",lightYellow:"#b0851f"},theme:{primary:{dark:"darkStep9",light:"lightStep9"},secondary:{dark:"darkSecondary",light:"lightSecondary"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},border:{dark:"darkStep7",light:"lightStep7"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep6",light:"lightStep6"},diffAdded:{dark:"#4fd6be",light:"#1e725c"},diffRemoved:{dark:"#c53b53",light:"#c53b53"},diffContext:{dark:"#828bb8",light:"#7086b5"},diffHunkHeader:{dark:"#828bb8",light:"#7086b5"},diffHighlightAdded:{dark:"#b8db87",light:"#4db380"},diffHighlightRemoved:{dark:"#e26a75",light:"#f52a65"},diffAddedBg:{dark:"#20303b",light:"#d5e5d5"},diffRemovedBg:{dark:"#37222c",light:"#f7d8db"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"#8f8f8f",light:"#595959"},diffAddedLineNumberBg:{dark:"#1b2b34",light:"#c5d5c5"},diffRemovedLineNumberBg:{dark:"#2d1f26",light:"#e7c8cb"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkAccent",light:"lightAccent"},markdownLink:{dark:"darkStep9",light:"lightStep9"},markdownLinkText:{dark:"darkCyan",light:"lightCyan"},markdownCode:{dark:"darkGreen",light:"lightGreen"},markdownBlockQuote:{dark:"darkYellow",light:"lightYellow"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkOrange",light:"lightOrange"},markdownHorizontalRule:{dark:"darkStep11",light:"lightStep11"},markdownListItem:{dark:"darkStep9",light:"lightStep9"},markdownListEnumeration:{dark:"darkCyan",light:"lightCyan"},markdownImage:{dark:"darkStep9",light:"lightStep9"},markdownImageText:{dark:"darkCyan",light:"lightCyan"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},syntaxComment:{dark:"darkStep11",light:"lightStep11"},syntaxKeyword:{dark:"darkAccent",light:"lightAccent"},syntaxFunction:{dark:"darkStep9",light:"lightStep9"},syntaxVariable:{dark:"darkRed",light:"lightRed"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkYellow",light:"lightYellow"},syntaxOperator:{dark:"darkCyan",light:"lightCyan"},syntaxPunctuation:{dark:"darkStep12",light:"lightStep12"}}}});var oX;var Xf=S(()=>{oX={$schema:"https://opencode.ai/theme.json",defs:{darkBg0:"#111c18",darkBg1:"#1a2520",darkBg2:"#23372B",darkBg3:"#3d4a44",darkFg0:"#C1C497",darkFg1:"#9aa88a",darkGray:"#53685B",darkRed:"#FF5345",darkGreen:"#549e6a",darkYellow:"#459451",darkBlue:"#509475",darkMagenta:"#D2689C",darkCyan:"#2DD5B7",darkWhite:"#F6F5DD",darkRedBright:"#db9f9c",darkGreenBright:"#63b07a",darkYellowBright:"#E5C736",darkBlueBright:"#ACD4CF",darkMagentaBright:"#75bbb3",darkCyanBright:"#8CD3CB",lightBg0:"#F6F5DD",lightBg1:"#E8E7CC",lightBg2:"#D5D4B8",lightBg3:"#A8A78C",lightFg0:"#111c18",lightFg1:"#1a2520",lightGray:"#53685B",lightRed:"#c7392d",lightGreen:"#3d7a52",lightYellow:"#b5a020",lightBlue:"#3d7560",lightMagenta:"#a8527a",lightCyan:"#1faa90"},theme:{primary:{dark:"darkCyan",light:"lightCyan"},secondary:{dark:"darkMagenta",light:"lightMagenta"},accent:{dark:"darkGreen",light:"lightGreen"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkYellowBright",light:"lightYellow"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkFg0",light:"lightFg0"},textMuted:{dark:"darkGray",light:"lightGray"},background:{dark:"darkBg0",light:"lightBg0"},backgroundPanel:{dark:"darkBg1",light:"lightBg1"},backgroundElement:{dark:"darkBg2",light:"lightBg2"},border:{dark:"darkBg3",light:"lightBg3"},borderActive:{dark:"darkCyan",light:"lightCyan"},borderSubtle:{dark:"darkBg2",light:"lightBg2"},diffAdded:{dark:"darkGreen",light:"lightGreen"},diffRemoved:{dark:"darkRed",light:"lightRed"},diffContext:{dark:"darkGray",light:"lightGray"},diffHunkHeader:{dark:"darkCyan",light:"lightCyan"},diffHighlightAdded:{dark:"darkGreenBright",light:"lightGreen"},diffHighlightRemoved:{dark:"darkRedBright",light:"lightRed"},diffAddedBg:{dark:"#15241c",light:"#e0eee5"},diffRemovedBg:{dark:"#241515",light:"#eee0e0"},diffContextBg:{dark:"darkBg1",light:"lightBg1"},diffLineNumber:{dark:"#828b87",light:"#5f5e4f"},diffAddedLineNumberBg:{dark:"#121f18",light:"#d5e5da"},diffRemovedLineNumberBg:{dark:"#1f1212",light:"#e5d5d5"},markdownText:{dark:"darkFg0",light:"lightFg0"},markdownHeading:{dark:"darkCyan",light:"lightCyan"},markdownLink:{dark:"darkCyanBright",light:"lightCyan"},markdownLinkText:{dark:"darkGreen",light:"lightGreen"},markdownCode:{dark:"darkGreenBright",light:"lightGreen"},markdownBlockQuote:{dark:"darkGray",light:"lightGray"},markdownEmph:{dark:"darkMagenta",light:"lightMagenta"},markdownStrong:{dark:"darkFg0",light:"lightFg0"},markdownHorizontalRule:{dark:"darkGray",light:"lightGray"},markdownListItem:{dark:"darkCyan",light:"lightCyan"},markdownListEnumeration:{dark:"darkCyanBright",light:"lightCyan"},markdownImage:{dark:"darkCyanBright",light:"lightCyan"},markdownImageText:{dark:"darkGreen",light:"lightGreen"},markdownCodeBlock:{dark:"darkFg0",light:"lightFg0"},syntaxComment:{dark:"darkGray",light:"lightGray"},syntaxKeyword:{dark:"darkCyan",light:"lightCyan"},syntaxFunction:{dark:"darkBlue",light:"lightBlue"},syntaxVariable:{dark:"darkFg0",light:"lightFg0"},syntaxString:{dark:"darkGreenBright",light:"lightGreen"},syntaxNumber:{dark:"darkMagenta",light:"lightMagenta"},syntaxType:{dark:"darkGreen",light:"lightGreen"},syntaxOperator:{dark:"darkYellow",light:"lightYellow"},syntaxPunctuation:{dark:"darkFg0",light:"lightFg0"}}}});var sX;var Gf=S(()=>{sX={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#1a1b26",darkStep2:"#1e2030",darkStep3:"#222436",darkStep4:"#292e42",darkStep5:"#3b4261",darkStep6:"#545c7e",darkStep7:"#737aa2",darkStep8:"#9099b2",darkStep9:"#82aaff",darkStep10:"#89b4fa",darkStep11:"#828bb8",darkStep12:"#c8d3f5",darkRed:"#ff757f",darkOrange:"#ff966c",darkYellow:"#ffc777",darkGreen:"#c3e88d",darkCyan:"#86e1fc",darkPurple:"#c099ff",lightStep1:"#e1e2e7",lightStep2:"#d5d6db",lightStep3:"#c8c9ce",lightStep4:"#b9bac1",lightStep5:"#a8aecb",lightStep6:"#9699a8",lightStep7:"#737a8c",lightStep8:"#5a607d",lightStep9:"#2e7de9",lightStep10:"#1a6ce7",lightStep11:"#8990a3",lightStep12:"#3760bf",lightRed:"#f52a65",lightOrange:"#b15c00",lightYellow:"#8c6c3e",lightGreen:"#587539",lightCyan:"#007197",lightPurple:"#9854f1"},theme:{primary:{dark:"darkStep9",light:"lightStep9"},secondary:{dark:"darkPurple",light:"lightPurple"},accent:{dark:"darkOrange",light:"lightOrange"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkStep9",light:"lightStep9"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},border:{dark:"darkStep7",light:"lightStep7"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep6",light:"lightStep6"},diffAdded:{dark:"#4fd6be",light:"#1e725c"},diffRemoved:{dark:"#c53b53",light:"#c53b53"},diffContext:{dark:"#828bb8",light:"#7086b5"},diffHunkHeader:{dark:"#828bb8",light:"#7086b5"},diffHighlightAdded:{dark:"#b8db87",light:"#4db380"},diffHighlightRemoved:{dark:"#e26a75",light:"#f52a65"},diffAddedBg:{dark:"#20303b",light:"#d5e5d5"},diffRemovedBg:{dark:"#37222c",light:"#f7d8db"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"#8f909a",light:"#59595b"},diffAddedLineNumberBg:{dark:"#1b2b34",light:"#c5d5c5"},diffRemovedLineNumberBg:{dark:"#2d1f26",light:"#e7c8cb"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkPurple",light:"lightPurple"},markdownLink:{dark:"darkStep9",light:"lightStep9"},markdownLinkText:{dark:"darkCyan",light:"lightCyan"},markdownCode:{dark:"darkGreen",light:"lightGreen"},markdownBlockQuote:{dark:"darkYellow",light:"lightYellow"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkOrange",light:"lightOrange"},markdownHorizontalRule:{dark:"darkStep11",light:"lightStep11"},markdownListItem:{dark:"darkStep9",light:"lightStep9"},markdownListEnumeration:{dark:"darkCyan",light:"lightCyan"},markdownImage:{dark:"darkStep9",light:"lightStep9"},markdownImageText:{dark:"darkCyan",light:"lightCyan"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},syntaxComment:{dark:"darkStep11",light:"lightStep11"},syntaxKeyword:{dark:"darkPurple",light:"lightPurple"},syntaxFunction:{dark:"darkStep9",light:"lightStep9"},syntaxVariable:{dark:"darkRed",light:"lightRed"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkYellow",light:"lightYellow"},syntaxOperator:{dark:"darkCyan",light:"lightCyan"},syntaxPunctuation:{dark:"darkStep12",light:"lightStep12"}}}});function Oj(J,Y,Z=[]){if(Y===void 0)return null;if(typeof Y!=="string")return Oj(J,Y.dark,Z);if(Y==="transparent"||Y==="none")return null;if(Y.startsWith("#"))return Y;if(Z.includes(Y))return null;let X=J.defs?.[Y]??J.theme[Y];return Oj(J,X,[...Z,Y])}function Fj(J){return Math.max(0,Math.min(255,Math.round(J)))}function Yz(J,Y,Z){let X=Number.parseInt(J.slice(1),16),G=Number.parseInt(Y.slice(1),16),z=(q,B)=>q>>B&255;return`#${(Fj(z(X,16)+(z(G,16)-z(X,16))*Z)<<16|Fj(z(X,8)+(z(G,8)-z(X,8))*Z)<<8|Fj(z(X,0)+(z(G,0)-z(X,0))*Z)).toString(16).padStart(6,"0")}`}function VA(J){let Y=(q)=>Oj(J,J.theme[q]),Z=Y("background"),X=Y("text");if(!Z||!X)return null;let G=Y("textMuted")??Yz(X,Z,0.35),z=Y("primary")??X,f=Y("border")??Yz(X,Z,0.8);return{bg:Z,surface:Y("backgroundPanel")??Z,inset:Y("backgroundElement")??Z,menu:Y("backgroundMenu")??Y("backgroundElement")??Z,line:f,"line-subtle":Y("borderSubtle")??f,"line-active":Y("borderActive")??Yz(f,X,0.3),fg:X,muted:G,subtle:Yz(G,Z,0.35),primary:z,"primary-hover":Yz(z,X,0.35),"kobe-orange":z,"kobe-green":Y("success")??X,"kobe-blue":Y("info")??X,"kobe-red":Y("error")??X,"kobe-yellow":Y("warning")??X,"kobe-violet":Y("secondary")??z}}function J8(J,Y){if(Y.pathname!==UA)return null;if(J.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:KA})}var WA,KA,UA="/api/themes";var Y8=S(()=>{tQ();eQ();Jf();Yf();Zf();Xf();Gf();WA={claude:$X,conductor:aX,dracula:pX,nord:_X,opencode:rX,"osaka-jade":oX,tokyonight:sX};KA=Object.fromEntries(Object.entries(WA).map(([J,Y])=>[J,VA(Y)]).filter((J)=>J[1]!==null))});import{createHash as LA,randomUUID as DA}from"crypto";import{mkdir as MA}from"fs/promises";import{join as Aj,resolve as FA}from"path";function RA(J){return LA("sha1").update(J).digest("hex").slice(0,16)}async function yA(J){let Y=Number.parseInt(J.headers.get("content-length")??"",10);if(Number.isFinite(Y)&&Y>Z8)return Response.json({error:"asset too large"},{status:413});let Z;try{Z=await J.formData()}catch{return Response.json({error:"invalid form data"},{status:400})}let X=Z.get("repoRoot");if(typeof X!=="string"||X.length===0)return Response.json({error:"missing repoRoot"},{status:400});let G=Z.get("file");if(!(G instanceof File))return Response.json({error:"file must be a File"},{status:400});if(G.size>Z8)return Response.json({error:"asset too large"},{status:413});let z=OA[G.type];if(!z)return Response.json({error:`unsupported content-type: ${G.type||"unknown"}`},{status:415});try{let f=RA(X),q=Aj(Nq(),f);await MA(q,{recursive:!0});let j=`${DA()}.${z}`;return await Bun.write(Aj(q,j),G),Response.json({url:`${zf}/${f}/${j}`})}catch(f){return Response.json({error:f instanceof Error?f.message:String(f)},{status:500})}}async function SA(J){let Y=J.slice(zf.length+1),Z=Y.indexOf("/");if(Z<0)return Response.json({error:"not found"},{status:404});let X=Y.slice(0,Z),G=Y.slice(Z+1);if(!CA.test(X)||!gA.test(G))return Response.json({error:"invalid asset path"},{status:400});let z=Nq(),f=FA(z,X,G);if(f!==Aj(z,X,G)||!f.startsWith(`${z}/`))return Response.json({error:"invalid asset path"},{status:400});let q=G.slice(G.lastIndexOf(".")+1).toLowerCase(),B=AA[q];if(!B)return Response.json({error:"invalid asset path"},{status:400});let j=Bun.file(f);if(!await j.exists())return Response.json({error:"not found"},{status:404});return new Response(j,{headers:{"content-type":B,"cache-control":"public, max-age=31536000, immutable","x-content-type-options":"nosniff"}})}async function X8(J,Y){if(Y.pathname===zf){if(J.method==="POST")return yA(J);return Response.json({error:"method not allowed"},{status:405})}if(Y.pathname.startsWith(`${zf}/`)){if(J.method==="GET")return SA(Y.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var zf="/api/issue-assets",Z8=10485760,OA,AA,CA,gA;var G8=S(()=>{n1();OA={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},AA={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};CA=/^[a-f0-9]{16}$/,gA=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function z8(J,Y=500){return Response.json({error:J instanceof Error?J.message:String(J)},{status:Y})}function Q8(J){let Y=J instanceof Error?J.message:String(J);if(/^no issue #\d+$/.test(Y))return 404;if(Y==="repoRoot is required"||Y==="repoRoot does not exist"||Y==="repoRoot is not a git repository"||Y==="missing op"||Y==="create requires a non-empty title"||Y==="body must be a string"||Y==="setStatus requires a numeric id"||Y.startsWith("invalid status:")||Y==="update requires a numeric id"||Y==="title must be a non-empty string"||Y==="link requires a numeric id"||Y==="link requires a non-empty taskId"||Y==="unlink requires a numeric id"||Y==="delete requires a numeric id"||Y.startsWith("unknown op type:"))return 400;return 500}async function kA(J,Y){let Z=Y.searchParams.get("repoRoot");if(!Z)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await J.request("issue.list",{repoRoot:Z}))}catch(X){return z8(X,Q8(X))}}async function IA(J,Y){let Z;try{Z=await Y.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(Z===null||typeof Z!=="object"||Array.isArray(Z))return Response.json({error:"body must be a JSON object"},{status:400});let X=Z;if(typeof X.repoRoot!=="string"||X.repoRoot.length===0)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await J.request("issue.mutate",{repoRoot:X.repoRoot,op:X.op}))}catch(G){return z8(G,Q8(G))}}async function f8(J,Y,Z){if(Y.pathname!=="/api/issues")return null;if(J.method==="GET")return kA(Z,Y);if(J.method==="POST")return IA(Z,J);return Response.json({error:"method not allowed"},{status:405})}function q8(J){return NA.has(String(J??"").trim().toLowerCase())}function B8(J){try{if(!J)return null;let Y=new URL(J);if(Y.protocol!=="http:"&&Y.protocol!=="https:")return null;return Y.hostname}catch{return null}}function bA(J){let Y=B8(J);return Y!==null&&q8(Y)}function j8(J,Y={}){if(!J)return!0;if(bA(J))return!0;let Z=Y.allowedHost?.trim();if(!Z)return!1;let X=B8(J);return X!==null&&X===Z}function H8(J){let Y=String(J??"").trim();return Y&&!q8(Y)?Y:void 0}var NA;var W8=S(()=>{NA=new Set(["localhost","127.0.0.1","::1","[::1]"])});var TA,V8;var K8=S(()=>{TA=["daemon.status","task.list","task.get","task.create","task.archive","task.rename","task.setBranch","task.setVendor","task.delete","task.pin","task.move","task.status","task.reorder","task.ensureMain","task.ensureWorktree","task.setActive","worktree.discoverAdoptable","worktree.adopt"],V8=new Set(TA)});var Rj={};q1(Rj,{resolveRepoInit:()=>D8,resolveEngineLaunchInit:()=>aY});import{existsSync as L8,readFileSync as EA}from"fs";import{join as Qf}from"path";function xA(J){return L8(Qf(J,U8))?`sh ${U8}`:void 0}function wA(J){let Y=Qf(J,uA);if(!L8(Y))return;try{let Z=EA(Y,"utf8");return Z.trim().length>0?Z:void 0}catch{return}}function D8(J,Y){let Z=J?dq(J):{},X=xA(Y)??Z.initScript,G=wA(Y)??Z.initPrompt;return{initScript:X&&X.trim().length>0?X:void 0,initPrompt:G&&G.trim().length>0?G:void 0}}function hA(J,Y){if(J.kind==="none")return;if(J.kind==="explicit")return{source:"explicit",text:J.prompt};let Z=Y.initPrompt?.trim();return Z?{source:"repo-init",text:Z}:void 0}function aY(J,Y,Z={kind:"repo-init"}){let X=D8(J,Y);return{initScript:X.initScript,firstMessage:hA(Z,X)}}var U8,uA;var tX=S(()=>{O1();U8=Qf(".kobe","init.sh"),uA=Qf(".kobe","init-prompt.md")});import{existsSync as M8,readFileSync as PA}from"fs";function F8(){qX=null}function vA(){let J=vW();if(M8(J))return{canonical:J,found:J};let Y=J.replace(/\.yaml$/,".yml");if(M8(Y))return{canonical:J,found:Y};return{canonical:J,found:null}}function ff(){if(qX)return qX;let{canonical:J,found:Y}=vA();if(!Y)return qX={path:J,exists:!1,doc:null,warnings:[]},qX;let Z=[],X=null;try{let G=PA(Y,"utf8");X=Bun.YAML.parse(G)}catch(G){let z=G instanceof Error?G.message:String(G);Z.push(`could not read/parse ${Y}: ${z}`)}return qX={path:J,exists:!0,doc:X,warnings:Z},qX}var qX=null;var Cj=S(()=>{n1()});function eX(J,Y){let Z=`alternating [${J}, ${Y}] pairs`;return{layout:Z,validateCount:(X)=>X>=2&&X%2===0?null:`needs ${Z} (an even number of chords \u2014 got ${X})`}}function $A(J,Y){let Z=J.trim().toLowerCase();if(!Z)return{error:"empty chord"};let X=Z.split("+"),G=X.pop()??"";if(G===""&&X.length>0){if(G="+",X[X.length-1]==="")X.pop()}if(!G)return{error:`"${J}": no key after the modifiers`};let z=new Set;for(let B of X){let j=dA[B];if(!j)return{error:`"${J}": unknown modifier "${B}" (use ctrl / cmd / alt / shift)`};z.add(j)}if(G=nA[G]??G,z.has("shift")&&G.length===1&&!Y?.allowShiftCharacter)return{error:`"${J}": shift+<character> can never match \u2014 terminals deliver shift+letter as a plain character, not a modifier event`};let f=lA.filter((B)=>z.has(B)).join("+"),q=f?`${f}+${G}`:G;if(G.length>1&&!iA.has(G))return{chord:q,warning:`"${J}": unrecognized key name "${G}" \u2014 the chord may never fire`};return{chord:q}}function qf(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function aA(J){if(J==="darwin")return["darwin","macos","mac"];if(J==="win32")return["win32","windows"];return[J]}function pA(J){if(!qf(J))return null;let Y=J.bindings;if(qf(Y))return Y;return J}function Bf(J,Y,Z){let X=[];if(J===null||J===void 0)return{entries:[],warnings:X};if(!qf(J))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let G=new Map,z=[];if(J.bindings!==void 0)if(qf(J.bindings))z.push(J.bindings);else X.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let f of aA(Y)){let q=J[f];if(q===void 0)continue;let B=pA(q);if(B)z.push(B);else X.push(`\`${f}:\` must be a mapping (or contain a \`bindings:\` mapping)`)}for(let f of z)for(let[q,B]of Object.entries(f)){if(B===null||B===!1||Array.isArray(B)&&B.length===0){G.set(q,[]);continue}let j=typeof B==="string"?[B]:Array.isArray(B)?B:null;if(!j){X.push(`${q}: expected a chord string, a list of chords, or null \u2014 got ${typeof B}`);continue}let K=[],H=!1;for(let U of j){if(typeof U!=="string"){X.push(`${q}: chord entries must be strings`),H=!0;continue}let L=$A(U,Z?.chordOptsFor?.(q));if("error"in L){X.push(`${q}: ${L.error}`),H=!0;continue}if(L.warning)X.push(`${q}: ${L.warning}`);if(!K.includes(L.chord))K.push(L.chord)}if(K.length===0&&H){X.push(`${q}: no valid chords \u2014 keeping the default`);continue}G.set(q,K)}return{entries:Array.from(G,([f,q])=>({id:f,keys:q})),warnings:X}}function _A(J,Y){return J===Y||J==="global"||Y==="global"}function O8(J,Y){let Z=[],X=[];for(let G of Y){let z=J.find((H)=>H.id===G.id);if(!z){Z.push(`${G.id}: unknown binding id (press F1 in kobe for the full list)`);continue}let f=gj[G.id];if(f){Z.push(`${G.id}: not customizable \u2014 ${f}`);continue}if(z.keys.length===0){Z.push(`${G.id}: not customizable \u2014 the key is handled outside the keymap (doc-only row)`);continue}let q=mA[G.id];if(q&&G.keys.length>0){let H=q.validateCount(G.keys.length);if(H){Z.push(`${G.id}: ${H} \u2014 keeping the default`);continue}}let B=G.keys.filter((H)=>{if(H.length===1&&cA.has(z.scope))return Z.push(`${G.id}: "${H}" dropped \u2014 a bare character on a ${z.scope}-scope binding would steal typed input (add a modifier)`),!1;return!0});if(B.length===0&&G.keys.length>0){Z.push(`${G.id}: no chords survived validation \u2014 keeping the default`);continue}if(q&&B.length!==G.keys.length){Z.push(`${G.id}: a dropped chord would shift the slot layout (${q.layout}) \u2014 keeping the default`);continue}let j=z.keys,K=z;if(K.keys=B,z.hint)if(B.length===0)K.hint=void 0;else z.hint.keys=B.join("/");X.push({id:G.id,keys:B,defaultKeys:j})}for(let G of X)for(let z of G.keys){let f=J.find((q)=>q.id===G.id);if(!f)continue;for(let q of J){if(q.id===G.id)continue;if(!q.keys.includes(z))continue;if(!_A(f.scope,q.scope))continue;Z.push(`${G.id}: "${z}" also fires ${q.id} (${q.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:X,warnings:Z}}var gj,mA,cA,dA,nA,iA,lA;var jf=S(()=>{gj={"focus.numeric":"pane focus is positional (h/j/k/l \u2192 pane) and mirrors the tmux-layer ctrl+hjkl bindings \u2014 rebind tmux.focus instead","sidebar.goto":"gg vs Shift+G is discriminated via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't carry both halves","sidebar.pin":"fires on Shift+P via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't work","sidebar.localMerge":"fires on Shift+M via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't work","chat.question.nav":"the question picker has no live registration site (display-only row) \u2014 rebinding would change Help without changing behavior","chat.question.pick-number":"digits map to options positionally and the question picker has no live registration site (display-only row)"};mA={"sidebar.nav":eX("down","up"),"files.nav":eX("down","up"),"sidebar.search.nav":eX("down","up"),"files.hierarchy":eX("collapse","expand"),"sidebar.view":eX("previous view","next view"),"files.tab":eX("previous tab","next tab")},cA=new Set(["global","workspace","terminal"]),dA={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},nA={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},iA=new Set(["up","down","left","right","pageup","pagedown","home","end","insert","delete","backspace","tab","space","escape","enter","return",...Array.from({length:12},(J,Y)=>`f${Y+1}`)]),lA=["ctrl","cmd","alt","shift"]});function JG(J){return J in A8}function HX(J,Y){let Z=J.split("+"),X=Z.pop()??"";if(X===""&&Z.length>0){if(X="+",Z[Z.length-1]==="")Z.pop()}let G=new Set(Z);if(G.has("cmd"))return{error:`"${J}": the Command key never reaches tmux \u2014 use ctrl/alt/shift`};let z;if(X.length===1)z=G.has("shift")?X.toUpperCase():X;else{let B=oA[X];if(!B)return{error:`"${J}": tmux can't bind the key "${X}"`};z=B}let f=/^f\d+$/.test(X);if(G.size===0&&!f&&!Y?.allowBare)return{error:`"${J}": tmux session keys are no-prefix root bindings live in every pane \u2014 a bare key would shadow typing (add a modifier, or use an F-key)`};let q="";if(G.has("ctrl"))q+="C-";if(G.has("alt"))q+="M-";if(G.has("shift"))q+="S-";return{key:q+z}}function C8(){let J={};for(let[Z,X]of Object.entries(jX)){let G=HX(X,{allowBare:JG(Z)});if("error"in G)throw Error(`default tmux chord for ${Z} failed to translate: ${G.error}`);J[Z]={chord:X,key:G.key}}let Y=MZ.map((Z)=>{let X=HX(Z);if("error"in X)throw Error(`default tmux focus chord ${Z} failed to translate`);return{chord:Z,key:X.key}});return{binds:J,focus:Y,overridden:new Set,warnings:[]}}function yj(J){let Y=C8(),Z=new Set;for(let X of J){if(!X.id.startsWith("tmux."))continue;if(X.id===SY){if(X.keys.length===0){Y.focus=[null,null,null,null],Z.add(SY);continue}if(X.keys.length!==MZ.length){Y.warnings.push(`${SY}: needs exactly 4 chords in order left/down/up/right (got ${X.keys.length}) \u2014 keeping the default`);continue}let q=[],B=!0;for(let j of X.keys){let K=HX(j);if("error"in K){Y.warnings.push(`${SY}: ${K.error} \u2014 keeping the default`),B=!1;break}q.push({chord:j,key:K.key})}if(!B)continue;Y.focus=q,Z.add(SY);continue}if(!(X.id in jX)){Y.warnings.push(`${X.id}: unknown tmux binding id`);continue}let G=X.id;if(X.keys.length===0){Y.binds[G]=null,Z.add(G);continue}if(X.keys.length>1)Y.warnings.push(`${G}: tmux bindings take ONE chord \u2014 using "${X.keys[0]}", ignoring the rest`);let z=X.keys[0],f=HX(z,{allowBare:JG(G)});if("error"in f){Y.warnings.push(`${G}: ${f.error} \u2014 keeping the default`);continue}if(z!==jX[G])Z.add(G);Y.binds[G]={chord:z,key:f.key}}return Y.overridden=Z,Y}function Sj(J){return J.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function g8(){BX=null}function Hf(){if(BX)return BX;let J=ff();if(!J.exists||J.doc===null)return BX=C8(),BX;let Y=Bf(J.doc,process.platform,{chordOptsFor:Sj}),Z=Y.warnings.filter((G)=>G.startsWith("tmux.")),X=yj(Y.entries);X.warnings=[...Z,...X.warnings];for(let G of X.warnings)console.warn(`[kobe/keybindings] ${G}`);return BX=X,BX}var rA,A8,R8,jX,SY="tmux.focus",MZ,oA,BX=null;var Wf=S(()=>{Cj();jf();rA={"tmux.detach":"ctrl+q","tmux.tab.new":"ctrl+t","tmux.tab.chooseEngine":"ctrl+shift+t","tmux.tab.prev":"ctrl+[","tmux.tab.next":"ctrl+]","tmux.tab.close":"ctrl+w","tmux.tab.rename":"f2"},A8={"tmux.layout.workspaceSplit":"s","tmux.layout.workspaceClose":"x","tmux.layout.workspaceReset":"r","tmux.layout.tasksToggle":"a","tmux.layout.opsToggle":"o","tmux.layout.terminalToggle":"z","tmux.layout.zenToggle":"space"},R8=["F6","F7","F8","F9","F10","F11"],jX={...rA,...A8};MZ=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],oA={up:"Up",down:"Down",left:"Left",right:"Right",pageup:"PgUp",pagedown:"PgDn",home:"Home",end:"End",insert:"IC",delete:"DC",backspace:"BSpace",tab:"Tab",space:"Space",escape:"Escape",enter:"Enter",return:"Enter",...Object.fromEntries(Array.from({length:12},(J,Y)=>[`f${Y+1}`,`F${Y+1}`]))}});async function Zz(J,Y){let Z=null;for(let G=0;G<24;G++){let z=await cX(J);if(z){if(!Y)return{pane:z,ready:!0};let f=(await dX(z)).trim();if(f.length>0&&f===Z)return{pane:z,ready:!0};Z=f}await y8(250)}return{pane:await cX(J)||await lB(J),ready:!1}}async function Xz(J,Y){let Z=`kobe-api-${J.replace(/[^A-Za-z0-9]/g,"")}`;await u0(["set-buffer","-b",Z,"--",Y]),await u0(["paste-buffer","-p","-d","-b",Z,"-t",J]),await y8(sA),await pG(J,"Enter")}async function S8(J,Y){let{pane:Z}=await Zz(J,!0);if(!Z)return;await Xz(Z,Y.text)}var y8=(J)=>new Promise((Y)=>setTimeout(Y,J)),sA=150;var Vf=S(()=>{N1()});function k8(J,Y){if(J===null)return{kind:"create",reason:"no session with this name \u2014 build fresh"};let Z=J.worktree===Y.cwd,X=!Y.vendor||J.vendor===Y.vendor;if(J.claudePaneAlive&&Z&&X)return{kind:"reuse",reason:"healthy: engine pane alive, worktree + vendor match"};if(Z&&!X&&Y.hasEngineCommand)return{kind:"respawn-engine",reason:`vendor drift: session tagged ${J.vendor===""?"<untagged>":`"${J.vendor}"`}, task wants "${Y.vendor}" \u2014 relaunch engine pane in place (KOB-232)`};if(Z&&X&&J.windowCount>1)return{kind:"reuse",reason:"active window's engine pane is gone but sibling chat tabs exist \u2014 reuse rather than drop them"};if(!Z)return{kind:"rebuild",reason:J.worktree===""?"legacy session with no @kobe_worktree tag \u2014 rebuild in the right place":`worktree drift: session tagged "${J.worktree}", task wants "${Y.cwd}" \u2014 rebuild`};if(!X)return{kind:"rebuild",reason:"vendor drift but no engine command to respawn with \u2014 rebuild"};return{kind:"rebuild",reason:"single-window session whose engine pane was destroyed \u2014 rebuild"}}var I8;var N8=S(()=>{tQ();eQ();Jf();Yf();Zf();Xf();Gf();I8={claude:$X,conductor:aX,nord:_X,opencode:rX,dracula:pX,tokyonight:sX,"osaka-jade":oX}});function tA(J){let Y=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.exec(J);if(!Y)return null;let Z=Y[1];if(Z.length===3){let[X,G,z]=Z;return`#${X}${X}${G}${G}${z}${z}`.toLowerCase()}return`#${Z.slice(0,6)}`.toLowerCase()}function b8(J,Y,Z="dark"){let X=J.defs??{};function G(f,q){if(typeof f==="string"){if(f==="transparent"||f==="none")return null;if(f.startsWith("#"))return tA(f);if(q.includes(f))return null;let j=X[f]??J.theme[f];if(j===void 0)return null;return G(j,[...q,f])}if(!f||typeof f!=="object")return null;let B=f[Z];return typeof B==="string"?G(B,q):null}let z=J.theme[Y];if(z===void 0)return null;return G(z,[Y])}function Kf(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}function Uf(J){if(!Kf(J))return{ok:!1,reason:"theme must be a JSON object at the top level"};let Y=J;if(!("theme"in Y))return{ok:!1,reason:"missing required key `theme`"};let Z=Y.theme;if(!Kf(Z))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in Y&&Y.defs!==void 0){if(!Kf(Y.defs))return{ok:!1,reason:"`defs` must be an object map"};for(let[X,G]of Object.entries(Y.defs))if(typeof G!=="string")return{ok:!1,reason:`defs.${X} must be a string (hex like "#abc" or a ref name)`}}for(let[X,G]of Object.entries(Z)){if(typeof G==="string")continue;if(!Kf(G))return{ok:!1,reason:`theme.${X} must be a string or a { dark, light } object (got ${G===null?"null":Array.isArray(G)?"array":typeof G})`};let z=G;if(typeof z.dark!=="string")return{ok:!1,reason:`theme.${X}.dark must be a string`};if(typeof z.light!=="string")return{ok:!1,reason:`theme.${X}.light must be a string`}}if("$schema"in Y&&Y.$schema!==void 0&&typeof Y.$schema!=="string")return{ok:!1,reason:"`$schema` must be a string when present"};return{ok:!0,theme:Y}}var kj=()=>{};import{readFileSync as eA,readdirSync as J2}from"fs";import{join as T8}from"path";function YG(){return T8(o1(),"themes")}function Gz(){let J=YG(),Y;try{Y=J2(J)}catch{return[]}let Z=[];for(let X of Y){if(!X.endsWith(".json"))continue;let G=T8(J,X),z;try{let B=eA(G,"utf8");z=JSON.parse(B)}catch(B){let j=B instanceof Error?B.message:String(B);console.warn(`[kobe] skipping user theme ${G}: invalid JSON \u2014 ${j}`);continue}let f=Uf(z);if(!f.ok){console.warn(`[kobe] skipping user theme ${G}: ${f.reason}`);continue}let q=X.slice(0,-5);Z.push({name:q,theme:f.theme})}return Z}var Lf=S(()=>{n1();kj()});import{readFileSync as Y2}from"fs";function X2(){try{let J=JSON.parse(Y2(xJ(),"utf8")),Y=typeof J.activeTheme==="string"&&J.activeTheme?J.activeTheme:"claude",Z=typeof J.focusAccent==="string"&&Z2.includes(J.focusAccent)?J.focusAccent:"primary";return{themeName:Y,focusAccentSlot:Z,enabled:J.tmuxChromeTheme!=="off"&&J.tmuxBorderTheme!=="off"}}catch{return{themeName:"claude",focusAccentSlot:"primary",enabled:!0}}}function G2(J){return Gz().find((Z)=>Z.name===J)?.theme??I8[J]??null}function BY(J,...Y){for(let Z of Y){let X=b8(J,Z);if(X)return X}return null}function E8(J,Y){let Z=BY(J,"text"),X=BY(J,"background"),G=BY(J,"textMuted","text"),z=BY(J,"backgroundPanel","background"),f=BY(J,"backgroundElement","backgroundPanel","background"),q=BY(J,"backgroundMenu","backgroundElement","backgroundPanel","background"),B=BY(J,"selectedListItemText","background"),j=BY(J,Y,"primary","borderActive","border","text");return{border:BY(J,"border","text"),activeBorder:j,statusBg:z,statusFg:G,statusMutedFg:G,windowFg:G,currentWindowBg:f,currentWindowFg:j,activityFg:BY(J,"info","primary","text"),bellFg:BY(J,"warning","error","primary","text"),messageBg:q,messageFg:Z,messageCommandFg:j,modeBg:j,modeFg:B??X}}function dJ(J){let Y=[];if(J.bg)Y.push(`bg=${J.bg}`);if(J.fg)Y.push(`fg=${J.fg}`);if(Y.length===0)return null;if(J.attrs)Y.push(...J.attrs);return Y.join(",")}function x8(J){let Y=dJ({bg:J.statusBg,fg:J.statusFg}),Z=dJ({bg:J.statusBg,fg:J.statusMutedFg}),X=dJ({bg:J.statusBg,fg:J.windowFg});return[{key:"border",option:"pane-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:dJ({fg:J.border})},{key:"active",option:"pane-active-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:dJ({fg:J.activeBorder})},{key:"status",option:"status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Y},{key:"status-left",option:"status-left-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Z},{key:"status-right",option:"status-right-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Z},{key:"window",option:"window-status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:X},{key:"current-window",option:"window-status-current-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:dJ({bg:J.currentWindowBg,fg:J.currentWindowFg,attrs:["bold"]})},{key:"activity-window",option:"window-status-activity-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:dJ({bg:J.statusBg,fg:J.activityFg})},{key:"bell-window",option:"window-status-bell-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:dJ({bg:J.statusBg,fg:J.bellFg,attrs:["bold"]})},{key:"last-window",option:"window-status-last-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:dJ({bg:J.statusBg,fg:J.statusFg})},{key:"message",option:"message-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:dJ({bg:J.messageBg,fg:J.messageFg})},{key:"message-command",option:"message-command-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:dJ({bg:J.messageBg,fg:J.messageCommandFg,attrs:["bold"]})},{key:"mode",option:"mode-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:dJ({bg:J.modeBg,fg:J.modeFg})},{key:"display-panes",option:"display-panes-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:J.border},{key:"display-panes-active",option:"display-panes-active-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:J.activeBorder}]}function z2(J){let Y=new Set(J.marker.split(",").map((z)=>z.trim()).filter(Boolean)),Z=[],X=[];for(let z of x8(J.hexes))if(z.value){if((J.current[z.key]??"")!==z.value)Z.push(["set-option",z.setFlag,z.option,z.value]);X.push(z.key)}else if(Y.has(z.key))Z.push(["set-option",z.unsetFlag,z.option]);let G=X.join(",");if(G!==J.marker)Z.push(G?["set-option","-g",Ij,G]:["set-option","-gu",Ij]);return Z}async function u8(J){let{code:Y,stdout:Z}=await c0(J);return Y===0?Z.trim():""}async function WX(){try{let J=X2(),Y=J.enabled?G2(J.themeName):null,Z=Y?E8(Y,J.focusAccentSlot):E8({theme:{}},J.focusAccentSlot),X=x8(Z),[G,...z]=await Promise.all([u8(["show-options","-gqv",Ij]),...X.map((B)=>u8(["show-options",B.showFlag,B.option]))]),f=Object.fromEntries(X.map((B,j)=>[B.key,z[j]??""])),q=z2({marker:G,current:f,hexes:Z});if(q.length>0)await w1(q)}catch{}}var Ij="@kobe_border_theme",Z2;var Df=S(()=>{n1();N1();N8();Lf();Z2=["primary","success","info"]});var Mf={};q1(Mf,{recordGen:()=>FZ,isLatestGen:()=>m8,genAgeMs:()=>W2,coalesceLayoutWork:()=>V2,RESIZE_GUARD_MS:()=>H2,LAYOUT_COALESCE_MS:()=>P8});import{createHash as Q2,randomUUID as f2}from"crypto";import{mkdirSync as q2,readFileSync as w8,renameSync as B2,writeFileSync as j2}from"fs";import{join as h8}from"path";function v8(){return h8(o1(),"layout-coord")}function Nj(J,Y){let Z=Q2("sha1").update(J).digest("hex").slice(0,16);return h8(v8(),`${Z}.${Y}`)}function FZ(J,Y){let Z=f2();try{q2(v8(),{recursive:!0});let X=Nj(J,Y),G=`${X}.${Z}.tmp`;j2(G,`${Date.now()}
|
|
58
|
-
${
|
|
59
|
-
`)[1]?.trim()===
|
|
60
|
-
`)[0]??"",10);return Number.isFinite(
|
|
61
|
-
`)){let
|
|
62
|
-
`).map((
|
|
63
|
-
`).map((
|
|
64
|
-
`).map((
|
|
65
|
-
`)){let
|
|
66
|
-
`)){let[G,
|
|
67
|
-
`).map((
|
|
68
|
-
`).some((
|
|
69
|
-
`).filter((
|
|
70
|
-
`)){let[
|
|
71
|
-
`)){let[
|
|
72
|
-
`)){let[
|
|
73
|
-
${
|
|
74
|
-
data: ${JSON.stringify(
|
|
50
|
+
`):null}function Yq(f,J,Y,z={}){if(!Y)return f;if((J??"claude")!=="claude")return f;if(f.includes("--append-system-prompt")||f.includes("--append-system-prompt-file"))return f;let G=uA(Y,Qz(),z);if(!G)return f;return[...f,"--append-system-prompt",G]}function EA(f,J=Qz()){return[`You are running inside kobe (a local multi-session task manager) as this repository's DISPATCHER (task ${f}, the repo's main session).`,"kobe runs multiple worktree task sessions on this repo in parallel. When one of them resolves a non-obvious gotcha, it files a one-line field note; kobe forwards each note to you as a user message prefixed with [KOBE FIELD NOTE].","Your job is routing that knowledge, fully autonomously \u2014 never ask the user for permission:",` - See the fleet: \`${J} collect --repo .\` (status, running, change counts per task), or \`--task-ids id1,id2\` for specific tasks.`,` - Relay a note to a task that would benefit: \`${J} dispatch --task-id <id> --prompt "[dispatcher] FYI from <author task>: <note verbatim>"\`.`," - Relay to the in-flight tasks whose work plausibly touches the same area \u2014 and to nobody else. If no task benefits, do nothing."," - Never relay a note back to its author, never relay the same note to the same task twice, and keep relays verbatim with provenance \u2014 no summarizing, no embellishment.","Use ONLY the dispatch verb to message sessions \u2014 the `send` verb pastes via tmux and would spawn a DUPLICATE engine for web-hosted sessions. If dispatch fails, report the error in your own session and stop; do not fall back.","Take no action on merge conflicts between tasks \u2014 the board's conflict radar is display-only by design, and resolution timing belongs to the humans and the tasks themselves.","Never run git commands inside other tasks' worktrees."].join(`
|
|
51
|
+
`)}function zq(f,J,Y,z=kB){if(!Y||!z())return f;if((J??"claude")!=="claude")return f;if(f.includes("--append-system-prompt")||f.includes("--append-system-prompt-file"))return f;return[...f,"--append-system-prompt",EA(Y)]}var NB,SA;var E1=C(()=>{iJ();UY();GZ();Jq();gf();K1();NB=Object.fromEntries(vY.map((f)=>[f,pf(f).displayName]));SA=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});function pz(f){return Hz.includes(f)?f:"auto"}var Hz,G7,rJ="editor.kind",AY="editor.customCommand",Gq="auto";var Zq=C(()=>{Hz=["auto","vim","nvim","nano","emacs","custom"],G7=["nvim","vim","emacs","nano"]});function jz(f){return f==="taskpanel"?"taskpanel":"chattab"}var pJ="settings.surface",Bz="chattab";function x1(f=process.env){return{...f,...yB}}var yB;var gY=C(()=>{yB={GIT_OPTIONAL_LOCKS:"0"}});async function _z(f,J,Y={}){if(!f)return{stdout:"",stderr:"worktreePath is required",status:-1};let z=(Y.execForPath??mJ)(f),G=Y.timeoutMs&&Y.timeoutMs>0?new AbortController:null,Z=!1,q=G?setTimeout(()=>{Z=!0,G.abort()},Y.timeoutMs):null,Q;try{Q=await z.run(["git",...J],{cwd:f,env:yB,signal:G?.signal})}catch(H){if(q)clearTimeout(q);return{stdout:"",stderr:H instanceof Error?H.message:String(H),status:-1}}if(q)clearTimeout(q);if(Z&&Q.exitCode===-1&&!Q.stderr)return{stdout:Q.stdout,stderr:`git ${J.join(" ")} timed out after ${Y.timeoutMs}ms`,status:-1};return{stdout:Q.stdout,stderr:Q.stderr,status:Q.exitCode}}function xA(f,J){if(!f||!J||J.startsWith("/"))return null;let Y=J.split("/");if(Y.some((z)=>z===".."))return null;return`${f.replace(/\/+$/,"")}/${Y.filter(Boolean).join("/")}`}async function Z7(f,J,Y={}){let z=xA(f,J);if(!z)return null;let G=(Y.execForPath??mJ)(f);try{return await G.readFile(z)}catch{return null}}var Xq=C(()=>{e1();gY()});import{statSync as wA}from"fs";async function HZ(f,J){let Y=await _z(f,J,{timeoutMs:hA}),z=Y.status??-1;return{ok:z===0,stdout:Y.stdout,stderr:Y.stderr,code:z}}function vA(f){switch(f){case"M":return"modified";case"A":return"added";case"D":return"deleted";case"R":return"renamed";case"C":return"copied";case"T":return"type changed";case"U":return"unmerged";case"?":return"untracked";default:return"changed"}}function X7(f){let J=new Map;if(!f)return J;let Y=f.split(/(?=^diff --git )/m);for(let z of Y){if(!z.startsWith("diff --git"))continue;let G=null,Z=z.match(/^\+\+\+ b\/(.*)$/m);if(Z&&Z[1]!=="/dev/null")G=Z[1];else{let q=z.match(/^diff --git a\/.* b\/(.*)$/m);if(q)G=q[1]}if(!G)continue;J.set(mA(G),z.endsWith(`
|
|
52
|
+
`)?z:`${z}
|
|
53
|
+
`)}return J}function mA(f){if(!(f.startsWith('"')&&f.endsWith('"')))return f;return f.slice(1,-1).replace(/\\([\\"nt])/g,(Y,z)=>z==="n"?`
|
|
54
|
+
`:z==="t"?"\t":z)}async function cA(f,J,Y){let z=Array(f.length),G=Math.max(1,Math.min(J,f.length)),Z=0;async function q(){while(Z<f.length){let Q=Z++;z[Q]=await Y(f[Q],Q)}}return await Promise.all(Array.from({length:G},()=>q())),z}async function nA(f,J){let Y=await HZ(f,["diff","--no-color","--no-index","--","/dev/null",J]);if(Y.stdout.trim())return Y.stdout.endsWith(`
|
|
55
|
+
`)?Y.stdout:`${Y.stdout}
|
|
56
|
+
`;return""}async function q7(f,J){if(J.pathname!=="/api/diff")return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});let Y=J.searchParams.get("worktreePath");if(!Y)return Response.json({error:"missing worktreePath"},{status:400});let z;try{z=decodeURIComponent(Y)}catch{return Response.json({error:"invalid worktreePath encoding"},{status:400})}if(!z.startsWith("/"))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!YX(z))return Response.json({error:"worktreePath does not exist"},{status:400});if(!mJ(z).isRemote)try{if(!wA(z).isDirectory())return Response.json({error:"worktreePath is not a directory"},{status:400})}catch{return Response.json({error:"worktreePath does not exist"},{status:400})}let Z=await HZ(z,["rev-parse","--is-inside-work-tree"]);if(!Z.ok||Z.stdout.trim()!=="true")return Response.json({error:`not a git work tree: ${Z.stderr.trim()||z}`},{status:500});let[q,Q,H]=await Promise.all([HZ(z,["status","--porcelain=v1","-z","--untracked-files=all"]),HZ(z,["diff","--no-color"]),HZ(z,["diff","--no-color","--staged"])]);if(!q.ok)return Response.json({error:`git status failed: ${q.stderr.trim()}`},{status:500});let B=X7(Q.stdout),V=X7(H.stdout),j=q.stdout.split("\x00"),U=[],L=[];for(let g=0;g<j.length;g++){let I=j[g];if(!I)continue;let a=I[0]??" ",N=I[1]??" ",A=I.slice(3);if(!A)continue;if(a==="R"||a==="C"||N==="R"||N==="C")g++;let R=a==="?"&&N==="?",S=a!==" "&&a!=="?"?a:N,_=a!==" "&&a!=="?",z0="";if(R)L.push({fileIndex:U.length,path:A});else if(z0=V.get(A)??B.get(A)??"",V.has(A)&&B.has(A))z0=`${V.get(A)}${B.get(A)}`;U.push({path:A,status:R?"untracked":vA(S),staged:_,patch:z0})}if(L.length>0){let g=await cA(L,PA,(I)=>nA(z,I.path));for(let I=0;I<L.length;I++)U[L[I].fileIndex].patch=g[I]}U.sort((g,I)=>g.path.localeCompare(I.path));let O=[H.stdout,Q.stdout].filter(Boolean).join(`
|
|
57
|
+
`),M={files:U,raw:O};return Response.json(M)}var hA=15000,PA=8;var Q7=C(()=>{e1();Xq()});import{isAbsolute as dA}from"path";function B7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function lA(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9._-]+$/.test(f)&&!f.includes("..")}async function aA(f){let J=f.searchParams.get("worktreePath"),Y=f.searchParams.get("vendor")??"claude";if(!J||!dA(J))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!B7(Y))return Response.json({error:"invalid vendor"},{status:400});try{let z=pf(Y).history,[G,Z]=await Promise.all([z.listSessionIdsForWorktree(J),z.latestTranscriptMtimeForWorktree(J)]);return Response.json({sessions:G,latestMtime:Z})}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}async function $A(f){let J=f.searchParams.get("vendor")??"claude",Y=f.searchParams.get("sessionId");if(!B7(J))return Response.json({error:"invalid vendor"},{status:400});if(!lA(Y))return Response.json({error:"invalid sessionId"},{status:400});try{let z=await pf(J).history.readHistory(Y);return Response.json({messages:z})}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}async function j7(f,J){if(J.pathname!==H7&&J.pathname!==iA)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return J.pathname===H7?aA(J):$A(J)}var H7="/api/history/sessions",iA="/api/history/messages";var W7=C(()=>{UY()});import{mkdir as rA,readFile as pA,writeFile as _A}from"fs/promises";import{join as V7}from"path";function K7(){return V7(ef(),"notes")}function U7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function D7(f){return V7(K7(),`${f}.md`)}async function sA(f){let J=f.searchParams.get("taskId");if(!U7(J))return Response.json({error:"invalid taskId"},{status:400});try{let Y="";try{Y=await pA(D7(J),"utf8")}catch(z){if(z.code!=="ENOENT")throw z}return Response.json({markdown:Y})}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function tA(f){let J;try{J=await f.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!U7(J.taskId))return Response.json({error:"invalid taskId"},{status:400});if(typeof J.markdown!=="string")return Response.json({error:"markdown must be a string"},{status:400});try{return await rA(K7(),{recursive:!0}),await _A(D7(J.taskId),J.markdown,"utf8"),Response.json({ok:!0})}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function L7(f,J){if(J.pathname!==oA)return null;if(f.method==="GET")return sA(J);if(f.method==="PUT")return tA(f);return Response.json({error:"method not allowed"},{status:405})}var oA="/api/notes";var M7=C(()=>{lf()});var oz;var qq=C(()=>{oz={$schema:"https://opencode.ai/theme.json",defs:{darkBg:"#141413",darkBgRaised:"#1A1917",darkBgInset:"#2B2A27",darkBgMenu:"#33312E",darkBorderSubtle:"#2B2A27",darkBorder:"#3A3835",darkBorderActive:"#5C5853",darkText:"#EAE7DF",darkTextMuted:"#A9A39A",darkTextSubtle:"#6B665F",darkPrimary:"#CC785C",darkSecondary:"#D4967E",darkAccent:"#CC785C",darkAccentHover:"#E0AB96",darkRed:"#D47563",darkOrange:"#D97757",darkYellow:"#E8C96B",darkGreen:"#9ACA86",darkBlue:"#61AAF2",darkViolet:"#9B87F5",darkTerracotta:"#BF4D43",lightBg:"#FAF9F5",lightBgRaised:"#F0EEE6",lightBgInset:"#EAE7DF",lightBgMenu:"#E2DED4",lightBorderSubtle:"#EAE7DF",lightBorder:"#D9D5CC",lightBorderActive:"#A9A39A",lightText:"#1A1917",lightTextMuted:"#6B665F",lightTextSubtle:"#8D877D",lightPrimary:"#C96442",lightSecondary:"#B85F3D",lightAccent:"#CC785C",lightAccentHover:"#B85F3D",lightRed:"#A84B3A",lightOrange:"#C96442",lightYellow:"#8A6220",lightGreen:"#2E7C4C",lightBlue:"#207FDE",lightViolet:"#7B5BB6",lightTerracotta:"#BF4D43"},theme:{primary:{dark:"darkPrimary",light:"lightPrimary"},secondary:{dark:"darkSecondary",light:"lightSecondary"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkYellow",light:"lightYellow"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkBlue",light:"lightBlue"},text:{dark:"darkText",light:"lightText"},textMuted:{dark:"darkTextMuted",light:"lightTextMuted"},background:{dark:"darkBg",light:"lightBg"},backgroundPanel:{dark:"darkBgRaised",light:"lightBgRaised"},backgroundElement:{dark:"darkBgInset",light:"lightBgInset"},backgroundMenu:{dark:"darkBgMenu",light:"lightBgMenu"},backgroundDialog:{dark:"darkBgRaised",light:"lightBgRaised"},border:{dark:"darkBorder",light:"lightBorder"},borderActive:{dark:"darkBorderActive",light:"lightBorderActive"},borderSubtle:{dark:"darkBorderSubtle",light:"lightBorderSubtle"},diffAdded:{dark:"darkGreen",light:"lightGreen"},diffRemoved:{dark:"darkRed",light:"lightRed"},diffContext:{dark:"darkTextMuted",light:"lightTextSubtle"},diffHunkHeader:{dark:"darkTextMuted",light:"lightTextSubtle"},diffHighlightAdded:{dark:"#B5E0A0",light:"#1F6638"},diffHighlightRemoved:{dark:"#E89180",light:"#8A3A2C"},diffAddedBg:{dark:"#1F2A1F",light:"#E5EEDF"},diffRemovedBg:{dark:"#2A1F1C",light:"#F5DAD3"},diffContextBg:{dark:"darkBgRaised",light:"lightBgRaised"},diffLineNumber:{dark:"darkTextSubtle",light:"lightTextSubtle"},diffAddedLineNumberBg:{dark:"#1A2419",light:"#D5E2CC"},diffRemovedLineNumberBg:{dark:"#241915",light:"#EBC8BE"},markdownText:{dark:"darkText",light:"lightText"},markdownHeading:{dark:"darkPrimary",light:"lightPrimary"},markdownLink:{dark:"darkAccent",light:"lightAccent"},markdownLinkText:{dark:"darkBlue",light:"lightBlue"},markdownCode:{dark:"darkSecondary",light:"lightSecondary"},markdownBlockQuote:{dark:"darkTextMuted",light:"lightTextMuted"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkPrimary",light:"lightPrimary"},markdownHorizontalRule:{dark:"darkTextMuted",light:"lightTextMuted"},markdownListItem:{dark:"darkAccent",light:"lightAccent"},markdownListEnumeration:{dark:"darkBlue",light:"lightBlue"},markdownImage:{dark:"darkAccent",light:"lightAccent"},markdownImageText:{dark:"darkBlue",light:"lightBlue"},markdownCodeBlock:{dark:"darkText",light:"lightText"},markdownQuote:{dark:"darkTextMuted",light:"lightTextMuted"},syntaxComment:{dark:"darkTextSubtle",light:"lightTextSubtle"},syntaxKeyword:{dark:"darkPrimary",light:"lightPrimary"},syntaxFunction:{dark:"darkBlue",light:"lightBlue"},syntaxVariable:{dark:"darkText",light:"lightText"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkViolet",light:"lightViolet"},syntaxOperator:{dark:"darkSecondary",light:"lightSecondary"},syntaxPunctuation:{dark:"darkText",light:"lightText"},selectedListItemText:{dark:"darkBg",light:"lightBg"}}}});var sz;var Qq=C(()=>{sz={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#0a0a0a",darkStep2:"#111111",darkStep3:"#181818",darkStep4:"#1f1f1f",darkStep5:"#2a2a2a",darkStep6:"#363636",darkStep7:"#444444",darkStep8:"#5a5a5a",darkStep9:"#7a7a7a",darkStep10:"#9a9a9a",darkStep11:"#909090",darkStep12:"#e8e8e8",darkAccent:"#7da5c8",darkAccentBright:"#9bc3e3",darkRed:"#e06c75",darkOrange:"#d6a668",darkGreen:"#7fd88f",darkCyan:"#7da5c8",darkYellow:"#d6a668",lightStep1:"#fafafa",lightStep2:"#f3f3f3",lightStep3:"#ececec",lightStep4:"#e2e2e2",lightStep5:"#d4d4d4",lightStep6:"#bdbdbd",lightStep7:"#9c9c9c",lightStep8:"#7c7c7c",lightStep9:"#5b5b5b",lightStep10:"#404040",lightStep11:"#6c6c6c",lightStep12:"#1a1a1a",lightAccent:"#3d6f9f",lightAccentBright:"#1a4f87",lightRed:"#c9343a",lightOrange:"#a06b1a",lightGreen:"#3d9a57",lightCyan:"#3d6f9f",lightYellow:"#a06b1a"},theme:{primary:{dark:"darkStep12",light:"lightStep12"},secondary:{dark:"darkAccentBright",light:"lightAccentBright"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},backgroundMenu:{dark:"darkStep4",light:"lightStep4"},border:{dark:"darkStep6",light:"lightStep6"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep4",light:"lightStep4"},diffAdded:{dark:"#7fd88f",light:"#3d9a57"},diffRemoved:{dark:"#e06c75",light:"#c9343a"},diffContext:{dark:"darkStep10",light:"lightStep10"},diffHunkHeader:{dark:"darkStep10",light:"lightStep10"},diffHighlightAdded:{dark:"#9be5ad",light:"#2d7a3f"},diffHighlightRemoved:{dark:"#f08490",light:"#a82530"},diffAddedBg:{dark:"#15241a",light:"#d8efdc"},diffRemovedBg:{dark:"#2a1518",light:"#f5dadc"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"darkStep9",light:"lightStep9"},diffAddedLineNumberBg:{dark:"#0f1c14",light:"#c5deca"},diffRemovedLineNumberBg:{dark:"#221012",light:"#e5c5c8"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkStep12",light:"lightStep12"},markdownLink:{dark:"darkAccent",light:"lightAccent"},markdownCode:{dark:"darkAccentBright",light:"lightAccentBright"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},markdownQuote:{dark:"darkStep11",light:"lightStep11"},selectedListItemText:{dark:"darkStep1",light:"lightStep1"}}}});var tz;var Hq=C(()=>{tz={$schema:"https://opencode.ai/theme.json",defs:{background:"#282a36",currentLine:"#44475a",selection:"#44475a",foreground:"#f8f8f2",comment:"#6272a4",cyan:"#8be9fd",green:"#50fa7b",orange:"#ffb86c",pink:"#ff79c6",purple:"#bd93f9",red:"#ff5555",yellow:"#f1fa8c"},theme:{primary:{dark:"purple",light:"purple"},secondary:{dark:"pink",light:"pink"},accent:{dark:"cyan",light:"cyan"},error:{dark:"red",light:"red"},warning:{dark:"yellow",light:"yellow"},success:{dark:"green",light:"green"},info:{dark:"orange",light:"orange"},text:{dark:"foreground",light:"#282a36"},textMuted:{dark:"comment",light:"#6272a4"},background:{dark:"#282a36",light:"#f8f8f2"},backgroundPanel:{dark:"#21222c",light:"#e8e8e2"},backgroundElement:{dark:"currentLine",light:"#d8d8d2"},border:{dark:"currentLine",light:"#c8c8c2"},borderActive:{dark:"purple",light:"purple"},borderSubtle:{dark:"#191a21",light:"#e0e0e0"},diffAdded:{dark:"green",light:"green"},diffRemoved:{dark:"red",light:"red"},diffContext:{dark:"comment",light:"#6272a4"},diffHunkHeader:{dark:"comment",light:"#6272a4"},diffHighlightAdded:{dark:"green",light:"green"},diffHighlightRemoved:{dark:"red",light:"red"},diffAddedBg:{dark:"#1a3a1a",light:"#e0ffe0"},diffRemovedBg:{dark:"#3a1a1a",light:"#ffe0e0"},diffContextBg:{dark:"#21222c",light:"#e8e8e2"},diffLineNumber:{dark:"#989aa4",light:"#686865"},diffAddedLineNumberBg:{dark:"#1a3a1a",light:"#e0ffe0"},diffRemovedLineNumberBg:{dark:"#3a1a1a",light:"#ffe0e0"},markdownText:{dark:"foreground",light:"#282a36"},markdownHeading:{dark:"purple",light:"purple"},markdownLink:{dark:"cyan",light:"cyan"},markdownLinkText:{dark:"pink",light:"pink"},markdownCode:{dark:"green",light:"green"},markdownBlockQuote:{dark:"comment",light:"#6272a4"},markdownEmph:{dark:"yellow",light:"yellow"},markdownStrong:{dark:"orange",light:"orange"},markdownHorizontalRule:{dark:"comment",light:"#6272a4"},markdownListItem:{dark:"purple",light:"purple"},markdownListEnumeration:{dark:"cyan",light:"cyan"},markdownImage:{dark:"cyan",light:"cyan"},markdownImageText:{dark:"pink",light:"pink"},markdownCodeBlock:{dark:"foreground",light:"#282a36"},syntaxComment:{dark:"comment",light:"#6272a4"},syntaxKeyword:{dark:"pink",light:"pink"},syntaxFunction:{dark:"green",light:"green"},syntaxVariable:{dark:"foreground",light:"#282a36"},syntaxString:{dark:"yellow",light:"yellow"},syntaxNumber:{dark:"purple",light:"purple"},syntaxType:{dark:"cyan",light:"cyan"},syntaxOperator:{dark:"pink",light:"pink"},syntaxPunctuation:{dark:"foreground",light:"#282a36"}}}});var ez;var Bq=C(()=>{ez={$schema:"https://opencode.ai/theme.json",defs:{nord0:"#2E3440",nord1:"#3B4252",nord2:"#434C5E",nord3:"#4C566A",nord4:"#D8DEE9",nord5:"#E5E9F0",nord6:"#ECEFF4",nord7:"#8FBCBB",nord8:"#88C0D0",nord9:"#81A1C1",nord10:"#5E81AC",nord11:"#BF616A",nord12:"#D08770",nord13:"#EBCB8B",nord14:"#A3BE8C",nord15:"#B48EAD"},theme:{primary:{dark:"nord8",light:"nord10"},secondary:{dark:"nord9",light:"nord9"},accent:{dark:"nord7",light:"nord7"},error:{dark:"nord11",light:"nord11"},warning:{dark:"nord12",light:"nord12"},success:{dark:"nord14",light:"nord14"},info:{dark:"nord8",light:"nord10"},text:{dark:"nord6",light:"nord0"},textMuted:{dark:"#8B95A7",light:"nord1"},background:{dark:"nord0",light:"nord6"},backgroundPanel:{dark:"nord1",light:"nord5"},backgroundElement:{dark:"nord2",light:"nord4"},border:{dark:"nord2",light:"nord3"},borderActive:{dark:"nord3",light:"nord2"},borderSubtle:{dark:"nord2",light:"nord3"},diffAdded:{dark:"nord14",light:"nord14"},diffRemoved:{dark:"nord11",light:"nord11"},diffContext:{dark:"#8B95A7",light:"nord3"},diffHunkHeader:{dark:"#8B95A7",light:"nord3"},diffHighlightAdded:{dark:"nord14",light:"nord14"},diffHighlightRemoved:{dark:"nord11",light:"nord11"},diffAddedBg:{dark:"#3B4252",light:"#E5E9F0"},diffRemovedBg:{dark:"#3B4252",light:"#E5E9F0"},diffContextBg:{dark:"nord1",light:"nord5"},diffLineNumber:{dark:"#a9aeb6",light:"textMuted"},diffAddedLineNumberBg:{dark:"#3B4252",light:"#E5E9F0"},diffRemovedLineNumberBg:{dark:"#3B4252",light:"#E5E9F0"},markdownText:{dark:"nord4",light:"nord0"},markdownHeading:{dark:"nord8",light:"nord10"},markdownLink:{dark:"nord9",light:"nord9"},markdownLinkText:{dark:"nord7",light:"nord7"},markdownCode:{dark:"nord14",light:"nord14"},markdownBlockQuote:{dark:"#8B95A7",light:"nord3"},markdownEmph:{dark:"nord12",light:"nord12"},markdownStrong:{dark:"nord13",light:"nord13"},markdownHorizontalRule:{dark:"#8B95A7",light:"nord3"},markdownListItem:{dark:"nord8",light:"nord10"},markdownListEnumeration:{dark:"nord7",light:"nord7"},markdownImage:{dark:"nord9",light:"nord9"},markdownImageText:{dark:"nord7",light:"nord7"},markdownCodeBlock:{dark:"nord4",light:"nord0"},syntaxComment:{dark:"#8B95A7",light:"nord3"},syntaxKeyword:{dark:"nord9",light:"nord9"},syntaxFunction:{dark:"nord8",light:"nord8"},syntaxVariable:{dark:"nord7",light:"nord7"},syntaxString:{dark:"nord14",light:"nord14"},syntaxNumber:{dark:"nord15",light:"nord15"},syntaxType:{dark:"nord7",light:"nord7"},syntaxOperator:{dark:"nord9",light:"nord9"},syntaxPunctuation:{dark:"nord4",light:"nord0"}}}});var fG;var jq=C(()=>{fG={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#161616",darkStep2:"#1f1f1f",darkStep3:"#282828",darkStep4:"#323232",darkStep5:"#3c3c3c",darkStep6:"#484848",darkStep7:"#545454",darkStep8:"#6a6a6a",darkStep9:"#fab283",darkStep10:"#ffc09f",darkStep11:"#808080",darkStep12:"#eeeeee",darkSecondary:"#5c9cf5",darkAccent:"#7da5c8",darkRed:"#e06c75",darkOrange:"#f5a742",darkGreen:"#7fd88f",darkCyan:"#56b6c2",darkYellow:"#e5c07b",lightStep1:"#ffffff",lightStep2:"#fafafa",lightStep3:"#f5f5f5",lightStep4:"#ebebeb",lightStep5:"#e1e1e1",lightStep6:"#d4d4d4",lightStep7:"#b8b8b8",lightStep8:"#a0a0a0",lightStep9:"#3b7dd8",lightStep10:"#2968c3",lightStep11:"#8a8a8a",lightStep12:"#1a1a1a",lightSecondary:"#7b5bb6",lightAccent:"#3d6f9f",lightRed:"#d1383d",lightOrange:"#d68c27",lightGreen:"#3d9a57",lightCyan:"#318795",lightYellow:"#b0851f"},theme:{primary:{dark:"darkStep9",light:"lightStep9"},secondary:{dark:"darkSecondary",light:"lightSecondary"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},border:{dark:"darkStep7",light:"lightStep7"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep6",light:"lightStep6"},diffAdded:{dark:"#4fd6be",light:"#1e725c"},diffRemoved:{dark:"#c53b53",light:"#c53b53"},diffContext:{dark:"#828bb8",light:"#7086b5"},diffHunkHeader:{dark:"#828bb8",light:"#7086b5"},diffHighlightAdded:{dark:"#b8db87",light:"#4db380"},diffHighlightRemoved:{dark:"#e26a75",light:"#f52a65"},diffAddedBg:{dark:"#20303b",light:"#d5e5d5"},diffRemovedBg:{dark:"#37222c",light:"#f7d8db"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"#8f8f8f",light:"#595959"},diffAddedLineNumberBg:{dark:"#1b2b34",light:"#c5d5c5"},diffRemovedLineNumberBg:{dark:"#2d1f26",light:"#e7c8cb"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkAccent",light:"lightAccent"},markdownLink:{dark:"darkStep9",light:"lightStep9"},markdownLinkText:{dark:"darkCyan",light:"lightCyan"},markdownCode:{dark:"darkGreen",light:"lightGreen"},markdownBlockQuote:{dark:"darkYellow",light:"lightYellow"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkOrange",light:"lightOrange"},markdownHorizontalRule:{dark:"darkStep11",light:"lightStep11"},markdownListItem:{dark:"darkStep9",light:"lightStep9"},markdownListEnumeration:{dark:"darkCyan",light:"lightCyan"},markdownImage:{dark:"darkStep9",light:"lightStep9"},markdownImageText:{dark:"darkCyan",light:"lightCyan"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},syntaxComment:{dark:"darkStep11",light:"lightStep11"},syntaxKeyword:{dark:"darkAccent",light:"lightAccent"},syntaxFunction:{dark:"darkStep9",light:"lightStep9"},syntaxVariable:{dark:"darkRed",light:"lightRed"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkYellow",light:"lightYellow"},syntaxOperator:{dark:"darkCyan",light:"lightCyan"},syntaxPunctuation:{dark:"darkStep12",light:"lightStep12"}}}});var JG;var Wq=C(()=>{JG={$schema:"https://opencode.ai/theme.json",defs:{darkBg0:"#111c18",darkBg1:"#1a2520",darkBg2:"#23372B",darkBg3:"#3d4a44",darkFg0:"#C1C497",darkFg1:"#9aa88a",darkGray:"#53685B",darkRed:"#FF5345",darkGreen:"#549e6a",darkYellow:"#459451",darkBlue:"#509475",darkMagenta:"#D2689C",darkCyan:"#2DD5B7",darkWhite:"#F6F5DD",darkRedBright:"#db9f9c",darkGreenBright:"#63b07a",darkYellowBright:"#E5C736",darkBlueBright:"#ACD4CF",darkMagentaBright:"#75bbb3",darkCyanBright:"#8CD3CB",lightBg0:"#F6F5DD",lightBg1:"#E8E7CC",lightBg2:"#D5D4B8",lightBg3:"#A8A78C",lightFg0:"#111c18",lightFg1:"#1a2520",lightGray:"#53685B",lightRed:"#c7392d",lightGreen:"#3d7a52",lightYellow:"#b5a020",lightBlue:"#3d7560",lightMagenta:"#a8527a",lightCyan:"#1faa90"},theme:{primary:{dark:"darkCyan",light:"lightCyan"},secondary:{dark:"darkMagenta",light:"lightMagenta"},accent:{dark:"darkGreen",light:"lightGreen"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkYellowBright",light:"lightYellow"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkFg0",light:"lightFg0"},textMuted:{dark:"darkGray",light:"lightGray"},background:{dark:"darkBg0",light:"lightBg0"},backgroundPanel:{dark:"darkBg1",light:"lightBg1"},backgroundElement:{dark:"darkBg2",light:"lightBg2"},border:{dark:"darkBg3",light:"lightBg3"},borderActive:{dark:"darkCyan",light:"lightCyan"},borderSubtle:{dark:"darkBg2",light:"lightBg2"},diffAdded:{dark:"darkGreen",light:"lightGreen"},diffRemoved:{dark:"darkRed",light:"lightRed"},diffContext:{dark:"darkGray",light:"lightGray"},diffHunkHeader:{dark:"darkCyan",light:"lightCyan"},diffHighlightAdded:{dark:"darkGreenBright",light:"lightGreen"},diffHighlightRemoved:{dark:"darkRedBright",light:"lightRed"},diffAddedBg:{dark:"#15241c",light:"#e0eee5"},diffRemovedBg:{dark:"#241515",light:"#eee0e0"},diffContextBg:{dark:"darkBg1",light:"lightBg1"},diffLineNumber:{dark:"#828b87",light:"#5f5e4f"},diffAddedLineNumberBg:{dark:"#121f18",light:"#d5e5da"},diffRemovedLineNumberBg:{dark:"#1f1212",light:"#e5d5d5"},markdownText:{dark:"darkFg0",light:"lightFg0"},markdownHeading:{dark:"darkCyan",light:"lightCyan"},markdownLink:{dark:"darkCyanBright",light:"lightCyan"},markdownLinkText:{dark:"darkGreen",light:"lightGreen"},markdownCode:{dark:"darkGreenBright",light:"lightGreen"},markdownBlockQuote:{dark:"darkGray",light:"lightGray"},markdownEmph:{dark:"darkMagenta",light:"lightMagenta"},markdownStrong:{dark:"darkFg0",light:"lightFg0"},markdownHorizontalRule:{dark:"darkGray",light:"lightGray"},markdownListItem:{dark:"darkCyan",light:"lightCyan"},markdownListEnumeration:{dark:"darkCyanBright",light:"lightCyan"},markdownImage:{dark:"darkCyanBright",light:"lightCyan"},markdownImageText:{dark:"darkGreen",light:"lightGreen"},markdownCodeBlock:{dark:"darkFg0",light:"lightFg0"},syntaxComment:{dark:"darkGray",light:"lightGray"},syntaxKeyword:{dark:"darkCyan",light:"lightCyan"},syntaxFunction:{dark:"darkBlue",light:"lightBlue"},syntaxVariable:{dark:"darkFg0",light:"lightFg0"},syntaxString:{dark:"darkGreenBright",light:"lightGreen"},syntaxNumber:{dark:"darkMagenta",light:"lightMagenta"},syntaxType:{dark:"darkGreen",light:"lightGreen"},syntaxOperator:{dark:"darkYellow",light:"lightYellow"},syntaxPunctuation:{dark:"darkFg0",light:"lightFg0"}}}});var YG;var Vq=C(()=>{YG={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#1a1b26",darkStep2:"#1e2030",darkStep3:"#222436",darkStep4:"#292e42",darkStep5:"#3b4261",darkStep6:"#545c7e",darkStep7:"#737aa2",darkStep8:"#9099b2",darkStep9:"#82aaff",darkStep10:"#89b4fa",darkStep11:"#828bb8",darkStep12:"#c8d3f5",darkRed:"#ff757f",darkOrange:"#ff966c",darkYellow:"#ffc777",darkGreen:"#c3e88d",darkCyan:"#86e1fc",darkPurple:"#c099ff",lightStep1:"#e1e2e7",lightStep2:"#d5d6db",lightStep3:"#c8c9ce",lightStep4:"#b9bac1",lightStep5:"#a8aecb",lightStep6:"#9699a8",lightStep7:"#737a8c",lightStep8:"#5a607d",lightStep9:"#2e7de9",lightStep10:"#1a6ce7",lightStep11:"#8990a3",lightStep12:"#3760bf",lightRed:"#f52a65",lightOrange:"#b15c00",lightYellow:"#8c6c3e",lightGreen:"#587539",lightCyan:"#007197",lightPurple:"#9854f1"},theme:{primary:{dark:"darkStep9",light:"lightStep9"},secondary:{dark:"darkPurple",light:"lightPurple"},accent:{dark:"darkOrange",light:"lightOrange"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkStep9",light:"lightStep9"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},border:{dark:"darkStep7",light:"lightStep7"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep6",light:"lightStep6"},diffAdded:{dark:"#4fd6be",light:"#1e725c"},diffRemoved:{dark:"#c53b53",light:"#c53b53"},diffContext:{dark:"#828bb8",light:"#7086b5"},diffHunkHeader:{dark:"#828bb8",light:"#7086b5"},diffHighlightAdded:{dark:"#b8db87",light:"#4db380"},diffHighlightRemoved:{dark:"#e26a75",light:"#f52a65"},diffAddedBg:{dark:"#20303b",light:"#d5e5d5"},diffRemovedBg:{dark:"#37222c",light:"#f7d8db"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"#8f909a",light:"#59595b"},diffAddedLineNumberBg:{dark:"#1b2b34",light:"#c5d5c5"},diffRemovedLineNumberBg:{dark:"#2d1f26",light:"#e7c8cb"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkPurple",light:"lightPurple"},markdownLink:{dark:"darkStep9",light:"lightStep9"},markdownLinkText:{dark:"darkCyan",light:"lightCyan"},markdownCode:{dark:"darkGreen",light:"lightGreen"},markdownBlockQuote:{dark:"darkYellow",light:"lightYellow"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkOrange",light:"lightOrange"},markdownHorizontalRule:{dark:"darkStep11",light:"lightStep11"},markdownListItem:{dark:"darkStep9",light:"lightStep9"},markdownListEnumeration:{dark:"darkCyan",light:"lightCyan"},markdownImage:{dark:"darkStep9",light:"lightStep9"},markdownImageText:{dark:"darkCyan",light:"lightCyan"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},syntaxComment:{dark:"darkStep11",light:"lightStep11"},syntaxKeyword:{dark:"darkPurple",light:"lightPurple"},syntaxFunction:{dark:"darkStep9",light:"lightStep9"},syntaxVariable:{dark:"darkRed",light:"lightRed"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkYellow",light:"lightYellow"},syntaxOperator:{dark:"darkCyan",light:"lightCyan"},syntaxPunctuation:{dark:"darkStep12",light:"lightStep12"}}}});function SB(f,J,Y=[]){if(J===void 0)return null;if(typeof J!=="string")return SB(f,J.dark,Y);if(J==="transparent"||J==="none")return null;if(J.startsWith("#"))return J;if(Y.includes(J))return null;let z=f.defs?.[J]??f.theme[J];return SB(f,z,[...Y,J])}function bB(f){return Math.max(0,Math.min(255,Math.round(f)))}function BZ(f,J,Y){let z=Number.parseInt(f.slice(1),16),G=Number.parseInt(J.slice(1),16),Z=(Q,H)=>Q>>H&255;return`#${(bB(Z(z,16)+(Z(G,16)-Z(z,16))*Y)<<16|bB(Z(z,8)+(Z(G,8)-Z(z,8))*Y)<<8|bB(Z(z,0)+(Z(G,0)-Z(z,0))*Y)).toString(16).padStart(6,"0")}`}function qg(f){let J=(Q)=>SB(f,f.theme[Q]),Y=J("background"),z=J("text");if(!Y||!z)return null;let G=J("textMuted")??BZ(z,Y,0.35),Z=J("primary")??z,q=J("border")??BZ(z,Y,0.8);return{bg:Y,surface:J("backgroundPanel")??Y,inset:J("backgroundElement")??Y,menu:J("backgroundMenu")??J("backgroundElement")??Y,line:q,"line-subtle":J("borderSubtle")??q,"line-active":J("borderActive")??BZ(q,z,0.3),fg:z,muted:G,subtle:BZ(G,Y,0.35),primary:Z,"primary-hover":BZ(Z,z,0.35),"kobe-orange":Z,"kobe-green":J("success")??z,"kobe-blue":J("info")??z,"kobe-red":J("error")??z,"kobe-yellow":J("warning")??z,"kobe-violet":J("secondary")??Z}}function F7(f,J){if(J.pathname!==Hg)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:Qg})}var Xg,Qg,Hg="/api/themes";var O7=C(()=>{qq();Qq();Hq();Bq();jq();Wq();Vq();Xg={claude:oz,conductor:sz,dracula:tz,nord:ez,opencode:fG,"osaka-jade":JG,tokyonight:YG};Qg=Object.fromEntries(Object.entries(Xg).map(([f,J])=>[f,qg(J)]).filter((f)=>f[1]!==null))});import{createHash as Bg,randomUUID as jg}from"crypto";import{mkdir as Wg}from"fs/promises";import{join as IB,resolve as Vg}from"path";function Dg(f){return Bg("sha1").update(f).digest("hex").slice(0,16)}async function Fg(f){let J=Number.parseInt(f.headers.get("content-length")??"",10);if(Number.isFinite(J)&&J>A7)return Response.json({error:"asset too large"},{status:413});let Y;try{Y=await f.formData()}catch{return Response.json({error:"invalid form data"},{status:400})}let z=Y.get("repoRoot");if(typeof z!=="string"||z.length===0)return Response.json({error:"missing repoRoot"},{status:400});let G=Y.get("file");if(!(G instanceof File))return Response.json({error:"file must be a File"},{status:400});if(G.size>A7)return Response.json({error:"asset too large"},{status:413});let Z=Kg[G.type];if(!Z)return Response.json({error:`unsupported content-type: ${G.type||"unknown"}`},{status:415});try{let q=Dg(z),Q=IB(vQ(),q);await Wg(Q,{recursive:!0});let B=`${jg()}.${Z}`;return await Bun.write(IB(Q,B),G),Response.json({url:`${Kq}/${q}/${B}`})}catch(q){return Response.json({error:q instanceof Error?q.message:String(q)},{status:500})}}async function Og(f){let J=f.slice(Kq.length+1),Y=J.indexOf("/");if(Y<0)return Response.json({error:"not found"},{status:404});let z=J.slice(0,Y),G=J.slice(Y+1);if(!Lg.test(z)||!Mg.test(G))return Response.json({error:"invalid asset path"},{status:400});let Z=vQ(),q=Vg(Z,z,G);if(q!==IB(Z,z,G)||!q.startsWith(`${Z}/`))return Response.json({error:"invalid asset path"},{status:400});let Q=G.slice(G.lastIndexOf(".")+1).toLowerCase(),H=Ug[Q];if(!H)return Response.json({error:"invalid asset path"},{status:400});let B=Bun.file(q);if(!await B.exists())return Response.json({error:"not found"},{status:404});return new Response(B,{headers:{"content-type":H,"cache-control":"public, max-age=31536000, immutable","x-content-type-options":"nosniff"}})}async function g7(f,J){if(J.pathname===Kq){if(f.method==="POST")return Fg(f);return Response.json({error:"method not allowed"},{status:405})}if(J.pathname.startsWith(`${Kq}/`)){if(f.method==="GET")return Og(J.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var Kq="/api/issue-assets",A7=10485760,Kg,Ug,Lg,Mg;var R7=C(()=>{lf();Kg={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},Ug={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};Lg=/^[a-f0-9]{16}$/,Mg=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function C7(f,J=500){return Response.json({error:f instanceof Error?f.message:String(f)},{status:J})}function k7(f){let J=f instanceof Error?f.message:String(f);if(/^no issue #\d+$/.test(J))return 404;if(J==="repoRoot is required"||J==="repoRoot does not exist"||J==="repoRoot is not a git repository"||J==="missing op"||J==="create requires a non-empty title"||J==="body must be a string"||J==="setStatus requires a numeric id"||J.startsWith("invalid status:")||J==="update requires a numeric id"||J==="title must be a non-empty string"||J==="link requires a numeric id"||J==="link requires a non-empty taskId"||J==="unlink requires a numeric id"||J==="delete requires a numeric id"||J.startsWith("unknown op type:"))return 400;return 500}async function Ag(f,J){let Y=J.searchParams.get("repoRoot");if(!Y)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await f.request("issue.list",{repoRoot:Y}))}catch(z){return C7(z,k7(z))}}async function gg(f,J){let Y;try{Y=await J.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(Y===null||typeof Y!=="object"||Array.isArray(Y))return Response.json({error:"body must be a JSON object"},{status:400});let z=Y;if(typeof z.repoRoot!=="string"||z.repoRoot.length===0)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await f.request("issue.mutate",{repoRoot:z.repoRoot,op:z.op}))}catch(G){return C7(G,k7(G))}}async function N7(f,J,Y){if(J.pathname!=="/api/issues")return null;if(f.method==="GET")return Ag(Y,J);if(f.method==="POST")return gg(Y,f);return Response.json({error:"method not allowed"},{status:405})}function y7(f){return Rg.has(String(f??"").trim().toLowerCase())}function b7(f){try{if(!f)return null;let J=new URL(f);if(J.protocol!=="http:"&&J.protocol!=="https:")return null;return J.hostname}catch{return null}}function Cg(f){let J=b7(f);return J!==null&&y7(J)}function S7(f,J={}){if(!f)return!0;if(Cg(f))return!0;let Y=J.allowedHost?.trim();if(!Y)return!1;let z=b7(f);return z!==null&&z===Y}function I7(f){let J=String(f??"").trim();return J&&!y7(J)?J:void 0}var Rg;var T7=C(()=>{Rg=new Set(["localhost","127.0.0.1","::1","[::1]"])});var kg,u7;var E7=C(()=>{kg=["daemon.status","task.list","task.get","task.create","task.archive","task.rename","task.setBranch","task.setVendor","task.delete","task.pin","task.move","task.status","task.reorder","task.ensureMain","task.ensureWorktree","task.setActive","worktree.discoverAdoptable","worktree.adopt"],u7=new Set(kg)});var TB={};jf(TB,{resolveRepoInit:()=>h7,resolveEngineLaunchInit:()=>_J});import{existsSync as w7,readFileSync as Ng}from"fs";import{join as Uq}from"path";function bg(f){return w7(Uq(f,x7))?`sh ${x7}`:void 0}function Sg(f){let J=Uq(f,yg);if(!w7(J))return;try{let Y=Ng(J,"utf8");return Y.trim().length>0?Y:void 0}catch{return}}function h7(f,J){let Y=f?oQ(f):{},z=bg(J)??Y.initScript,G=Sg(J)??Y.initPrompt;return{initScript:z&&z.trim().length>0?z:void 0,initPrompt:G&&G.trim().length>0?G:void 0}}function Ig(f,J){if(f.kind==="none")return;if(f.kind==="explicit")return{source:"explicit",text:f.prompt};let Y=J.initPrompt?.trim();return Y?{source:"repo-init",text:Y}:void 0}function _J(f,J,Y={kind:"repo-init"}){let z=h7(f,J);return{initScript:z.initScript,firstMessage:Ig(Y,z)}}var x7,yg;var zG=C(()=>{gf();x7=Uq(".kobe","init.sh"),yg=Uq(".kobe","init-prompt.md")});import{existsSync as P7,readFileSync as Tg}from"fs";function v7(){Wz=null}function ug(){let f=z9();if(P7(f))return{canonical:f,found:f};let J=f.replace(/\.yaml$/,".yml");if(P7(J))return{canonical:f,found:J};return{canonical:f,found:null}}function Dq(){if(Wz)return Wz;let{canonical:f,found:J}=ug();if(!J)return Wz={path:f,exists:!1,doc:null,warnings:[]},Wz;let Y=[],z=null;try{let G=Tg(J,"utf8");z=Bun.YAML.parse(G)}catch(G){let Z=G instanceof Error?G.message:String(G);Y.push(`could not read/parse ${J}: ${Z}`)}return Wz={path:f,exists:!0,doc:z,warnings:Y},Wz}var Wz=null;var uB=C(()=>{lf()});function GG(f,J){let Y=`alternating [${f}, ${J}] pairs`;return{layout:Y,validateCount:(z)=>z>=2&&z%2===0?null:`needs ${Y} (an even number of chords \u2014 got ${z})`}}function mg(f,J){let Y=f.trim().toLowerCase();if(!Y)return{error:"empty chord"};let z=Y.split("+"),G=z.pop()??"";if(G===""&&z.length>0){if(G="+",z[z.length-1]==="")z.pop()}if(!G)return{error:`"${f}": no key after the modifiers`};let Z=new Set;for(let H of z){let B=wg[H];if(!B)return{error:`"${f}": unknown modifier "${H}" (use ctrl / cmd / alt / shift)`};Z.add(B)}if(G=hg[G]??G,Z.has("shift")&&G.length===1&&!J?.allowShiftCharacter)return{error:`"${f}": shift+<character> can never match \u2014 terminals deliver shift+letter as a plain character, not a modifier event`};let q=vg.filter((H)=>Z.has(H)).join("+"),Q=q?`${q}+${G}`:G;if(G.length>1&&!Pg.has(G))return{chord:Q,warning:`"${f}": unrecognized key name "${G}" \u2014 the chord may never fire`};return{chord:Q}}function Lq(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function cg(f){if(f==="darwin")return["darwin","macos","mac"];if(f==="win32")return["win32","windows"];return[f]}function ng(f){if(!Lq(f))return null;let J=f.bindings;if(Lq(J))return J;return f}function Mq(f,J,Y){let z=[];if(f===null||f===void 0)return{entries:[],warnings:z};if(!Lq(f))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let G=new Map,Z=[];if(f.bindings!==void 0)if(Lq(f.bindings))Z.push(f.bindings);else z.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let q of cg(J)){let Q=f[q];if(Q===void 0)continue;let H=ng(Q);if(H)Z.push(H);else z.push(`\`${q}:\` must be a mapping (or contain a \`bindings:\` mapping)`)}for(let q of Z)for(let[Q,H]of Object.entries(q)){if(H===null||H===!1||Array.isArray(H)&&H.length===0){G.set(Q,[]);continue}let B=typeof H==="string"?[H]:Array.isArray(H)?H:null;if(!B){z.push(`${Q}: expected a chord string, a list of chords, or null \u2014 got ${typeof H}`);continue}let V=[],j=!1;for(let U of B){if(typeof U!=="string"){z.push(`${Q}: chord entries must be strings`),j=!0;continue}let L=mg(U,Y?.chordOptsFor?.(Q));if("error"in L){z.push(`${Q}: ${L.error}`),j=!0;continue}if(L.warning)z.push(`${Q}: ${L.warning}`);if(!V.includes(L.chord))V.push(L.chord)}if(V.length===0&&j){z.push(`${Q}: no valid chords \u2014 keeping the default`);continue}G.set(Q,V)}return{entries:Array.from(G,([q,Q])=>({id:q,keys:Q})),warnings:z}}function dg(f,J){return f===J||f==="global"||J==="global"}function m7(f,J){let Y=[],z=[];for(let G of J){let Z=f.find((j)=>j.id===G.id);if(!Z){Y.push(`${G.id}: unknown binding id (press F1 in kobe for the full list)`);continue}let q=EB[G.id];if(q){Y.push(`${G.id}: not customizable \u2014 ${q}`);continue}if(Z.keys.length===0){Y.push(`${G.id}: not customizable \u2014 the key is handled outside the keymap (doc-only row)`);continue}let Q=Eg[G.id];if(Q&&G.keys.length>0){let j=Q.validateCount(G.keys.length);if(j){Y.push(`${G.id}: ${j} \u2014 keeping the default`);continue}}let H=G.keys.filter((j)=>{if(j.length===1&&xg.has(Z.scope))return Y.push(`${G.id}: "${j}" dropped \u2014 a bare character on a ${Z.scope}-scope binding would steal typed input (add a modifier)`),!1;return!0});if(H.length===0&&G.keys.length>0){Y.push(`${G.id}: no chords survived validation \u2014 keeping the default`);continue}if(Q&&H.length!==G.keys.length){Y.push(`${G.id}: a dropped chord would shift the slot layout (${Q.layout}) \u2014 keeping the default`);continue}let B=Z.keys,V=Z;if(V.keys=H,Z.hint)if(H.length===0)V.hint=void 0;else Z.hint.keys=H.join("/");z.push({id:G.id,keys:H,defaultKeys:B})}for(let G of z)for(let Z of G.keys){let q=f.find((Q)=>Q.id===G.id);if(!q)continue;for(let Q of f){if(Q.id===G.id)continue;if(!Q.keys.includes(Z))continue;if(!dg(q.scope,Q.scope))continue;Y.push(`${G.id}: "${Z}" also fires ${Q.id} (${Q.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:z,warnings:Y}}var EB,Eg,xg,wg,hg,Pg,vg;var Fq=C(()=>{EB={"focus.numeric":"pane focus is positional (h/j/k/l \u2192 pane) and mirrors the tmux-layer ctrl+hjkl bindings \u2014 rebind tmux.focus instead","sidebar.goto":"gg vs Shift+G is discriminated via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't carry both halves","sidebar.pin":"fires on Shift+P via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't work","sidebar.localMerge":"fires on Shift+M via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't work","chat.question.nav":"the question picker has no live registration site (display-only row) \u2014 rebinding would change Help without changing behavior","chat.question.pick-number":"digits map to options positionally and the question picker has no live registration site (display-only row)"};Eg={"sidebar.nav":GG("down","up"),"files.nav":GG("down","up"),"sidebar.search.nav":GG("down","up"),"files.hierarchy":GG("collapse","expand"),"sidebar.view":GG("previous view","next view"),"files.tab":GG("previous tab","next tab")},xg=new Set(["global","workspace","terminal"]),wg={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},hg={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},Pg=new Set(["up","down","left","right","pageup","pagedown","home","end","insert","delete","backspace","tab","space","escape","enter","return",...Array.from({length:12},(f,J)=>`f${J+1}`)]),vg=["ctrl","cmd","alt","shift"]});function ZG(f){return f in c7}function Uz(f,J){let Y=f.split("+"),z=Y.pop()??"";if(z===""&&Y.length>0){if(z="+",Y[Y.length-1]==="")Y.pop()}let G=new Set(Y);if(G.has("cmd"))return{error:`"${f}": the Command key never reaches tmux \u2014 use ctrl/alt/shift`};let Z;if(z.length===1)Z=G.has("shift")?z.toUpperCase():z;else{let H=lg[z];if(!H)return{error:`"${f}": tmux can't bind the key "${z}"`};Z=H}let q=/^f\d+$/.test(z);if(G.size===0&&!q&&!J?.allowBare)return{error:`"${f}": tmux session keys are no-prefix root bindings live in every pane \u2014 a bare key would shadow typing (add a modifier, or use an F-key)`};let Q="";if(G.has("ctrl"))Q+="C-";if(G.has("alt"))Q+="M-";if(G.has("shift"))Q+="S-";return{key:Q+Z}}function d7(){let f={};for(let[Y,z]of Object.entries(Kz)){let G=Uz(z,{allowBare:ZG(Y)});if("error"in G)throw Error(`default tmux chord for ${Y} failed to translate: ${G.error}`);f[Y]={chord:z,key:G.key}}let J=RY.map((Y)=>{let z=Uz(Y);if("error"in z)throw Error(`default tmux focus chord ${Y} failed to translate`);return{chord:Y,key:z.key}});return{binds:f,focus:J,overridden:new Set,warnings:[]}}function xB(f){let J=d7(),Y=new Set;for(let z of f){if(!z.id.startsWith("tmux."))continue;if(z.id===SJ){if(z.keys.length===0){J.focus=[null,null,null,null],Y.add(SJ);continue}if(z.keys.length!==RY.length){J.warnings.push(`${SJ}: needs exactly 4 chords in order left/down/up/right (got ${z.keys.length}) \u2014 keeping the default`);continue}let Q=[],H=!0;for(let B of z.keys){let V=Uz(B);if("error"in V){J.warnings.push(`${SJ}: ${V.error} \u2014 keeping the default`),H=!1;break}Q.push({chord:B,key:V.key})}if(!H)continue;J.focus=Q,Y.add(SJ);continue}if(!(z.id in Kz)){J.warnings.push(`${z.id}: unknown tmux binding id`);continue}let G=z.id;if(z.keys.length===0){J.binds[G]=null,Y.add(G);continue}if(z.keys.length>1)J.warnings.push(`${G}: tmux bindings take ONE chord \u2014 using "${z.keys[0]}", ignoring the rest`);let Z=z.keys[0],q=Uz(Z,{allowBare:ZG(G)});if("error"in q){J.warnings.push(`${G}: ${q.error} \u2014 keeping the default`);continue}if(Z!==Kz[G])Y.add(G);J.binds[G]={chord:Z,key:q.key}}return J.overridden=Y,J}function wB(f){return f.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function i7(){Vz=null}function Oq(){if(Vz)return Vz;let f=Dq();if(!f.exists||f.doc===null)return Vz=d7(),Vz;let J=Mq(f.doc,process.platform,{chordOptsFor:wB}),Y=J.warnings.filter((G)=>G.startsWith("tmux.")),z=xB(J.entries);z.warnings=[...Y,...z.warnings];for(let G of z.warnings)console.warn(`[kobe/keybindings] ${G}`);return Vz=z,Vz}var ig,c7,n7,Kz,SJ="tmux.focus",RY,lg,Vz=null;var Aq=C(()=>{uB();Fq();ig={"tmux.detach":"ctrl+q","tmux.tab.new":"ctrl+t","tmux.tab.chooseEngine":"ctrl+shift+t","tmux.tab.prev":"ctrl+[","tmux.tab.next":"ctrl+]","tmux.tab.close":"ctrl+w","tmux.tab.rename":"f2"},c7={"tmux.layout.workspaceSplit":"s","tmux.layout.workspaceClose":"x","tmux.layout.workspaceReset":"r","tmux.layout.tasksToggle":"a","tmux.layout.opsToggle":"o","tmux.layout.terminalToggle":"z","tmux.layout.zenToggle":"space"},n7=["F6","F7","F8","F9","F10","F11"],Kz={...ig,...c7};RY=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],lg={up:"Up",down:"Down",left:"Left",right:"Right",pageup:"PgUp",pagedown:"PgDn",home:"Home",end:"End",insert:"IC",delete:"DC",backspace:"BSpace",tab:"Tab",space:"Space",escape:"Escape",enter:"Enter",return:"Enter",...Object.fromEntries(Array.from({length:12},(f,J)=>[`f${J+1}`,`F${J+1}`]))}});async function jZ(f,J){let Y=null;for(let G=0;G<24;G++){let Z=await az(f);if(Z){if(!J)return{pane:Z,ready:!0};let q=(await $z(Z)).trim();if(q.length>0&&q===Y)return{pane:Z,ready:!0};Y=q}await l7(250)}return{pane:await az(f)||await eH(f),ready:!1}}async function WZ(f,J){let Y=`kobe-api-${f.replace(/[^A-Za-z0-9]/g,"")}`;await v0(["set-buffer","-b",Y,"--",J]),await v0(["paste-buffer","-p","-d","-b",Y,"-t",f]),await l7(ag),await YZ(f,"Enter")}async function a7(f,J){let{pane:Y}=await jZ(f,!0);if(!Y)return;await WZ(Y,J.text)}var l7=(f)=>new Promise((J)=>setTimeout(J,f)),ag=150;var gq=C(()=>{Sf()});function $7(f,J){if(f===null)return{kind:"create",reason:"no session with this name \u2014 build fresh"};let Y=f.worktree===J.cwd,z=!J.vendor||f.vendor===J.vendor;if(f.claudePaneAlive&&Y&&z)return{kind:"reuse",reason:"healthy: engine pane alive, worktree + vendor match"};if(Y&&!z&&J.hasEngineCommand)return{kind:"respawn-engine",reason:`vendor drift: session tagged ${f.vendor===""?"<untagged>":`"${f.vendor}"`}, task wants "${J.vendor}" \u2014 relaunch engine pane in place (KOB-232)`};if(Y&&z&&f.windowCount>1)return{kind:"reuse",reason:"active window's engine pane is gone but sibling chat tabs exist \u2014 reuse rather than drop them"};if(!Y)return{kind:"rebuild",reason:f.worktree===""?"legacy session with no @kobe_worktree tag \u2014 rebuild in the right place":`worktree drift: session tagged "${f.worktree}", task wants "${J.cwd}" \u2014 rebuild`};if(!z)return{kind:"rebuild",reason:"vendor drift but no engine command to respawn with \u2014 rebuild"};return{kind:"rebuild",reason:"single-window session whose engine pane was destroyed \u2014 rebuild"}}var r7;var p7=C(()=>{qq();Qq();Hq();Bq();jq();Wq();Vq();r7={claude:oz,conductor:sz,nord:ez,opencode:fG,dracula:tz,tokyonight:YG,"osaka-jade":JG}});function $g(f){let J=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.exec(f);if(!J)return null;let Y=J[1];if(Y.length===3){let[z,G,Z]=Y;return`#${z}${z}${G}${G}${Z}${Z}`.toLowerCase()}return`#${Y.slice(0,6)}`.toLowerCase()}function _7(f,J,Y="dark"){let z=f.defs??{};function G(q,Q){if(typeof q==="string"){if(q==="transparent"||q==="none")return null;if(q.startsWith("#"))return $g(q);if(Q.includes(q))return null;let B=z[q]??f.theme[q];if(B===void 0)return null;return G(B,[...Q,q])}if(!q||typeof q!=="object")return null;let H=q[Y];return typeof H==="string"?G(H,Q):null}let Z=f.theme[J];if(Z===void 0)return null;return G(Z,[J])}function Rq(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function Cq(f){if(!Rq(f))return{ok:!1,reason:"theme must be a JSON object at the top level"};let J=f;if(!("theme"in J))return{ok:!1,reason:"missing required key `theme`"};let Y=J.theme;if(!Rq(Y))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in J&&J.defs!==void 0){if(!Rq(J.defs))return{ok:!1,reason:"`defs` must be an object map"};for(let[z,G]of Object.entries(J.defs))if(typeof G!=="string")return{ok:!1,reason:`defs.${z} must be a string (hex like "#abc" or a ref name)`}}for(let[z,G]of Object.entries(Y)){if(typeof G==="string")continue;if(!Rq(G))return{ok:!1,reason:`theme.${z} must be a string or a { dark, light } object (got ${G===null?"null":Array.isArray(G)?"array":typeof G})`};let Z=G;if(typeof Z.dark!=="string")return{ok:!1,reason:`theme.${z}.dark must be a string`};if(typeof Z.light!=="string")return{ok:!1,reason:`theme.${z}.light must be a string`}}if("$schema"in J&&J.$schema!==void 0&&typeof J.$schema!=="string")return{ok:!1,reason:"`$schema` must be a string when present"};return{ok:!0,theme:J}}var hB=()=>{};import{readFileSync as rg,readdirSync as pg}from"fs";import{join as o7}from"path";function XG(){return o7(ef(),"themes")}function VZ(){let f=XG(),J;try{J=pg(f)}catch{return[]}let Y=[];for(let z of J){if(!z.endsWith(".json"))continue;let G=o7(f,z),Z;try{let H=rg(G,"utf8");Z=JSON.parse(H)}catch(H){let B=H instanceof Error?H.message:String(H);console.warn(`[kobe] skipping user theme ${G}: invalid JSON \u2014 ${B}`);continue}let q=Cq(Z);if(!q.ok){console.warn(`[kobe] skipping user theme ${G}: ${q.reason}`);continue}let Q=z.slice(0,-5);Y.push({name:Q,theme:q.theme})}return Y}var kq=C(()=>{lf();hB()});import{readFileSync as _g}from"fs";function sg(){try{let f=JSON.parse(_g(v1(),"utf8")),J=typeof f.activeTheme==="string"&&f.activeTheme?f.activeTheme:"claude",Y=typeof f.focusAccent==="string"&&og.includes(f.focusAccent)?f.focusAccent:"primary";return{themeName:J,focusAccentSlot:Y,enabled:f.tmuxChromeTheme!=="off"&&f.tmuxBorderTheme!=="off"}}catch{return{themeName:"claude",focusAccentSlot:"primary",enabled:!0}}}function tg(f){return VZ().find((Y)=>Y.name===f)?.theme??r7[f]??null}function VJ(f,...J){for(let Y of J){let z=_7(f,Y);if(z)return z}return null}function s7(f,J){let Y=VJ(f,"text"),z=VJ(f,"background"),G=VJ(f,"textMuted","text"),Z=VJ(f,"backgroundPanel","background"),q=VJ(f,"backgroundElement","backgroundPanel","background"),Q=VJ(f,"backgroundMenu","backgroundElement","backgroundPanel","background"),H=VJ(f,"selectedListItemText","background"),B=VJ(f,J,"primary","borderActive","border","text");return{border:VJ(f,"border","text"),activeBorder:B,statusBg:Z,statusFg:G,statusMutedFg:G,windowFg:G,currentWindowBg:q,currentWindowFg:B,activityFg:VJ(f,"info","primary","text"),bellFg:VJ(f,"warning","error","primary","text"),messageBg:Q,messageFg:Y,messageCommandFg:B,modeBg:B,modeFg:H??z}}function a1(f){let J=[];if(f.bg)J.push(`bg=${f.bg}`);if(f.fg)J.push(`fg=${f.fg}`);if(J.length===0)return null;if(f.attrs)J.push(...f.attrs);return J.join(",")}function e7(f){let J=a1({bg:f.statusBg,fg:f.statusFg}),Y=a1({bg:f.statusBg,fg:f.statusMutedFg}),z=a1({bg:f.statusBg,fg:f.windowFg});return[{key:"border",option:"pane-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:a1({fg:f.border})},{key:"active",option:"pane-active-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:a1({fg:f.activeBorder})},{key:"status",option:"status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:J},{key:"status-left",option:"status-left-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Y},{key:"status-right",option:"status-right-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Y},{key:"window",option:"window-status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:z},{key:"current-window",option:"window-status-current-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:a1({bg:f.currentWindowBg,fg:f.currentWindowFg,attrs:["bold"]})},{key:"activity-window",option:"window-status-activity-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:a1({bg:f.statusBg,fg:f.activityFg})},{key:"bell-window",option:"window-status-bell-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:a1({bg:f.statusBg,fg:f.bellFg,attrs:["bold"]})},{key:"last-window",option:"window-status-last-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:a1({bg:f.statusBg,fg:f.statusFg})},{key:"message",option:"message-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:a1({bg:f.messageBg,fg:f.messageFg})},{key:"message-command",option:"message-command-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:a1({bg:f.messageBg,fg:f.messageCommandFg,attrs:["bold"]})},{key:"mode",option:"mode-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:a1({bg:f.modeBg,fg:f.modeFg})},{key:"display-panes",option:"display-panes-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:f.border},{key:"display-panes-active",option:"display-panes-active-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:f.activeBorder}]}function eg(f){let J=new Set(f.marker.split(",").map((Z)=>Z.trim()).filter(Boolean)),Y=[],z=[];for(let Z of e7(f.hexes))if(Z.value){if((f.current[Z.key]??"")!==Z.value)Y.push(["set-option",Z.setFlag,Z.option,Z.value]);z.push(Z.key)}else if(J.has(Z.key))Y.push(["set-option",Z.unsetFlag,Z.option]);let G=z.join(",");if(G!==f.marker)Y.push(G?["set-option","-g",PB,G]:["set-option","-gu",PB]);return Y}async function t7(f){let{code:J,stdout:Y}=await a0(f);return J===0?Y.trim():""}async function Dz(){try{let f=sg(),J=f.enabled?tg(f.themeName):null,Y=J?s7(J,f.focusAccentSlot):s7({theme:{}},f.focusAccentSlot),z=e7(Y),[G,...Z]=await Promise.all([t7(["show-options","-gqv",PB]),...z.map((H)=>t7(["show-options",H.showFlag,H.option]))]),q=Object.fromEntries(z.map((H,B)=>[H.key,Z[B]??""])),Q=eg({marker:G,current:q,hexes:Y});if(Q.length>0)await hf(Q)}catch{}}var PB="@kobe_border_theme",og;var Nq=C(()=>{lf();Sf();p7();kq();og=["primary","success","info"]});var yq={};jf(yq,{recordGen:()=>CY,isLatestGen:()=>G5,genAgeMs:()=>XR,coalesceLayoutWork:()=>qR,RESIZE_GUARD_MS:()=>ZR,LAYOUT_COALESCE_MS:()=>Y5});import{createHash as fR,randomUUID as JR}from"crypto";import{mkdirSync as YR,readFileSync as f5,renameSync as zR,writeFileSync as GR}from"fs";import{join as J5}from"path";function z5(){return J5(ef(),"layout-coord")}function vB(f,J){let Y=fR("sha1").update(f).digest("hex").slice(0,16);return J5(z5(),`${Y}.${J}`)}function CY(f,J){let Y=JR();try{YR(z5(),{recursive:!0});let z=vB(f,J),G=`${z}.${Y}.tmp`;GR(G,`${Date.now()}
|
|
58
|
+
${Y}`),zR(G,z)}catch{}return Y}function G5(f,J,Y){try{return f5(vB(f,J),"utf8").split(`
|
|
59
|
+
`)[1]?.trim()===Y}catch{return!0}}function XR(f,J,Y=Date.now()){try{let z=Number.parseInt(f5(vB(f,J),"utf8").split(`
|
|
60
|
+
`)[0]??"",10);return Number.isFinite(z)?Y-z:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function qR(f,J,Y,z=Y5){let G=CY(f,J);if(z>0)await new Promise((Z)=>setTimeout(Z,z));if(!G5(f,J,G))return;await Y()}var Y5=120,ZR=400;var qG=C(()=>{lf()});function HR(f){let J=[];for(let Y of f.split(`
|
|
61
|
+
`)){let z=Y.trim();if(!z)continue;let[G,Z,q,Q,H]=z.split("\t");if(!G||!Z||!q)continue;let B=Number.parseInt(H?.trim()??"",10);J.push({windowId:G.trim(),paneId:Z.trim(),role:q.trim(),version:Q?.trim()??"",...Number.isFinite(B)?{paneWidth:B}:{}})}return J}function Z5(f,J){let Y=new Map;for(let G of f){let Z=Y.get(G.windowId)??[];Z.push(G),Y.set(G.windowId,Z)}let z=[];for(let G of Y.values()){let Z=G.find((B)=>B.role==="claude")?.paneId,q=G.find((B)=>B.role==="tasks"),Q=G.find((B)=>B.role==="ops");if(q&&(J.force||q.version!==J.currentVersion))z.push({role:"tasks",paneId:q.paneId});let H=J.force?!0:Z&&(J.vendorChanged||Q?.version!==J.currentVersion);if(Q&&H)z.push({role:"ops",paneId:Q.paneId,claudePaneId:Z??null})}return z}async function mB(f){let{code:J,stdout:Y}=await a0(["list-panes","-s","-t",`=${f}`,"-F",QR]);if(J!==0)return null;return HR(Y)}function X5(f,J){let Y=Cf(),z=_f(),G=[];for(let Z of f){let q=Z.role==="tasks"?VY(Y,{initialTaskId:J.taskId}):mz({cwd:J.cwd,taskId:J.taskId,claudePaneId:Z.claudePaneId,cliInvocation:Y,vendor:J.vendor});G.push(["respawn-pane","-k","-t",Z.paneId,"-c",bf(J.cwd),R1(z+q)],["set-option","-p","-t",Z.paneId,"@kobe_role",Z.role],["set-option","-p","-t",Z.paneId,KJ,o0])}return G}async function q5(f,J,Y,z,G){let Z=await mB(f);if(!Z)return!1;let q=Z.filter((B)=>B.role==="claude");if(q.length===0)return!1;let Q=bf(J),H=[];for(let B of q){let V=rz(Y,G),j=R1(nz(g1(V.argv),z,J));H.push(["respawn-pane","-k","-c",Q,"-t",B.paneId,j]),H.push(V.sessionId?["set-window-option","-t",B.paneId,yJ,V.sessionId]:["set-window-option","-u","-t",B.paneId,yJ])}return await hf(H),!0}async function Q5(){let f=await DY([lJ,eY,aJ]),J=Number.parseInt(f[lJ]??"",10),Y=Number.isFinite(J)&&J>0?tY(J):sY,z=BR({widthPct:$J(Number.parseInt(f[eY]??"",10)),heightPct:$J(Number.parseInt(f[aJ]??"",10))});return{tasksWidth:Y,rcArgs:z}}function BR(f){let J=[];if(f.widthPct!==null)J.push("-x",`${f.widthPct}%`);if(f.heightPct!==null)J.push("-y",`${f.heightPct}%`);return J}async function H5(){return(await Q5()).rcArgs}async function cB(f,J={}){let{tasksWidth:Y,rcArgs:z}=await Q5(),G=await mB(f);if(!G)return{rows:null,commands:[]};let Z=[];for(let q of G)if(q.role==="tasks"&&(J.force||q.paneWidth!==Y))Z.push(["resize-pane","-t",q.paneId,"-x",`${Y}`]);if(z.length>0){for(let q of G)if(q.role==="ops")Z.push(["resize-pane","-t",q.paneId,...z])}return{rows:G,commands:Z}}async function QG(f,J){CY(f,"resize");let{rows:Y,commands:z}=await cB(f);if(!Y)return;let G=[...z];if(J)G.push(...X5(Z5(Y,{currentVersion:o0,force:!1,vendorChanged:J.vendorChanged}),J));if(G.length>0)await hf(G)}async function B5(f){if(!await Bf(f))return;await QG(f)}async function KZ(f){let{code:J,stdout:Y}=await a0(["list-panes","-t",`=${f}`,"-F",`#{@kobe_role} #{pane_width} #{pane_height} #{window_width} #{window_height} #{window_zoomed_flag} #{${XJ}} #{${A1}}`]);if(J!==0)return;let z=Y.split(`
|
|
62
|
+
`).map((B)=>B.split("\t")).filter((B)=>(B[0]?.trim()??"")!=="");if(z.length===0)return;if(z.some((B)=>B[5]?.trim()==="1"))return;if(z.some((B)=>(B[6]?.trim()??"")!==""))return;if(z.some((B)=>(B[7]?.trim()??"")!==""))return;let G=Number.parseInt(z[0][3]?.trim()??"",10),Z=Number.parseInt(z[0][4]?.trim()??"",10),q=[],Q=z.find(([B])=>B?.trim()==="tasks");if(Q){let B=Number.parseInt(Q[1]?.trim()??"",10);if(Number.isFinite(B)&&B>0)q.push(["set-option","-s",lJ,`${tY(B)}`])}let H=z.find(([B])=>B?.trim()==="ops");if(H&&Number.isFinite(G)&&G>0&&Number.isFinite(Z)&&Z>0){let B=Number.parseInt(H[1]?.trim()??"",10),V=Number.parseInt(H[2]?.trim()??"",10),j=Number.isFinite(B)?$J(100*B/G):null,U=Number.isFinite(V)?$J(100*V/Z):null;if(j!==null)q.push(["set-option","-s",eY,`${j}`]);if(U!==null)q.push(["set-option","-s",aJ,`${U}`])}if(q.length>0)await hf(q)}function jR(f){let J=f.split(`
|
|
63
|
+
`).map((z)=>z.split("\t")).filter((z)=>(z[0]?.trim()??"")!=="");if(J.length===0)return!1;if(J.some((z)=>z[1]?.trim()==="1"))return!1;if(J.some((z)=>(z[2]?.trim()??"")!==""))return!1;if(J.some((z)=>(z[3]?.trim()??"")!==""))return!1;let Y=new Set(J.map((z)=>z[0]?.trim()));return Y.has("tasks")&&Y.has("ops")}async function j5(f){let{code:J,stdout:Y}=await a0(["list-panes","-t",`=${f}`,"-F",`#{@kobe_role} #{window_zoomed_flag} #{${XJ}} #{${A1}}`]);if(J!==0||!jR(Y))return;await KZ(f)}async function HG(f){let J=await C1(f,["@kobe_worktree","@kobe_task","@kobe_vendor"]),Y=J["@kobe_worktree"]||process.cwd(),z=J["@kobe_task"]||void 0,G=J["@kobe_vendor"]||void 0,Z=await mB(f);if(!Z)return;let q=X5(Z5(Z,{currentVersion:o0,force:!0}),{cwd:Y,taskId:z,vendor:G});if(q.length>0)await hf(q);await Dz()}var KJ="@kobe_pane_version",QR;var UZ=C(()=>{iJ();E1();e1();Sf();qJ();Nq();U1();zz();qG();QR=`#{window_id} #{pane_id} #{@kobe_role} #{${KJ}} #{pane_width}`});function Sq(f,J){return[["bind-key","-n",f,"if-shell","-F","#{?#{@kobe_surface},0,1}","previous-window"],["bind-key","-n",J,"if-shell","-F","#{?#{@kobe_surface},0,1}","next-window"]]}function Iq(f,J="kill-window"){return["bind-key","-n",f,"if-shell","-F","#{>:#{session_windows},1}",J,"display-message 'Cannot close the only ChatTab'"]}function Tq(f){return["bind-key","-n",f,"command-prompt","-I","#{window_name}","rename-window -- '%%'"]}function uq(f){return[["bind-key","-n",f,"command-prompt","-p",bq],["bind-key","T","command-prompt","-p",bq]]}function nB(f){return f.startsWith("C-")&&f.length===3?`^${f.slice(2)}`:f}function Eq(f){return`${[f.focusLeft?`${nB(f.focusLeft)} tasks`:null,f.detach?`${nB(f.detach)} detach`:null,f.newTab?`${nB(f.newTab)} tab`:null,f.layoutSplits?`prefix ${f.layoutSplits} splits`:null,f.layoutPanes?`prefix ${f.layoutPanes} panes`:null].filter((Y)=>Y!==null).join(" ")} `}async function iB(f,J){let Y=_f(),z=await lX(),G=R1(J.opsCommand??Y+mz({cwd:J.cwd,taskId:J.taskId,claudePaneId:f,cliInvocation:J.inv,vendor:J.vendor})),{stdout:Z}=await fZ([["set-option","-p","-t",f,"@kobe_role","claude"],["set-window-option","-t",f,dB,"idle"],["split-window","-h","-b","-t",f,"-l",`${z}`,"-c",bf(J.cwd),"-P","-F","tasks=#{pane_id}",R1(Y+VY(J.inv,{initialTaskId:J.taskId}))],["split-window","-h","-t",f,"-l",`${100-wX}%`,"-c",bf(J.cwd),"-P","-F","ops=#{pane_id}",G],["split-window","-v","-l",`${100-oG}%`,"-c",bf(J.cwd),"-P","-F","shell=#{pane_id}"],["select-pane","-t",f]]),q=Object.fromEntries(Z.split(`
|
|
64
|
+
`).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>Q.split("=",2)));if(await hf([...q.tasks?[["set-option","-p","-t",q.tasks,"@kobe_role",d1]]:[],...q.tasks?[["set-option","-p","-t",q.tasks,KJ,o0]]:[],...q.ops?[["set-option","-p","-t",q.ops,"@kobe_role",GJ]]:[],...q.ops?[["set-option","-p","-t",q.ops,KJ,o0]]:[],...q.shell?[["set-option","-p","-t",q.shell,"@kobe_role",ZJ]]:[]]),q.ops){let Q=await H5();if(Q.length>0)await v0(["resize-pane","-t",q.ops,...Q])}}async function W5(f,J){if(!await Bf(f))return;let Y=await C1(f,["@kobe_worktree","@kobe_task","@kobe_vendor",eG]),z=Y["@kobe_worktree"]||process.cwd(),G=Y["@kobe_task"]||void 0,Z=Y[eG]||void 0,q=J??Y["@kobe_vendor"];if(J)await WR(f,G,J);let Q=N1(q),H=rz(Q,q),B=Cf(),j=(await a0(["new-window","-t",`=${f}`,"-c",bf(z),"-P","-F","#{pane_id}",R1(nz(g1(H.argv),Z,z))])).stdout.trim();if(!j)return;if(H.sessionId)await LY(j,yJ,H.sessionId);await iB(j,{cwd:z,taskId:G,inv:B,vendor:q})}async function wq(f){if(!await Bf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),Z=`${_f()}${z.map(zf).join(" ")} settings`;await HJ(f,{cwd:bf(Y),command:Z,name:"settings",surface:!0})}async function hq(f){if(!await Bf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),Z=`${_f()}${z.map(zf).join(" ")} help-page`;await HJ(f,{cwd:bf(Y),command:Z,name:"help",surface:!0})}async function Pq(f,J){if(!await Bf(f))return;let z=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=Cf(),Z=_f(),q=J?` --repo ${zf(J)}`:"",Q=`${Z}${G.map(zf).join(" ")} new-task${q}`;await HJ(f,{cwd:bf(z),command:Q,name:"new task",surface:!0})}async function vq(f){if(!await Bf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),Z=`${_f()}${eW({cliInvocation:z})}`;await HJ(f,{cwd:bf(Y),command:Z,name:"update",surface:!0})}async function V5(f){if(!await Bf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),Z=`${_f()}${z.map(zf).join(" ")} quick-task --session ${zf(f)}`;await HJ(f,{cwd:bf(Y),command:Z,name:"quick task",surface:!0})}async function WR(f,J,Y){if(await lz(f,"@kobe_vendor",Y),!J)return;try{let{connectOrStartDaemon:z}=await Promise.resolve().then(() => (y1(),aB)),G=await z();try{await G.request("task.setVendor",{taskId:J,vendor:Y})}finally{G.close()}}catch(z){console.error("[kobe tmux] failed to persist selected engine vendor:",z)}}var bq,dB="@kobe_tab_state",DZ="#{?#{==:#{@kobe_tab_state},running},\u25CF,#{?#{==:#{@kobe_tab_state},done},\u2713,#{?#{==:#{@kobe_tab_state},error},!,#{?#{==:#{@kobe_tab_state},unknown},?,\u25CB}}}} #I:#W",xq;var lB=C(()=>{iJ();E1();e1();Sf();qJ();K1();U1();zz();UZ();bq=`engine (${mf.join("/")}/\u2026)`;xq=DZ});function K5(){return cf()[mq]!==!1}var mq="zen.keepTasks";var $B=C(()=>{lY()});function KR(f){let J=[];for(let Y of f.split(`
|
|
65
|
+
`)){let z=Y.trim();if(!z)continue;let[G,Z,q,Q,H,B,V]=z.split("\t");if(!G)continue;let j=Number.parseInt(Q??"",10),U=Number.parseInt(H??"",10),L=Number.parseInt(B??"",10),O=Number.parseInt(V??"",10);J.push({paneId:G.trim(),role:Z?.trim()??"",active:q?.trim()==="1",paneWidth:Number.isFinite(j)?j:0,paneHeight:Number.isFinite(U)?U:0,windowWidth:Number.isFinite(L)?L:0,windowHeight:Number.isFinite(O)?O:0})}return J}function UR(f){let J=f.find((z)=>z.role===Pz);if(!J)return{kind:"missing-engine"};let Y=f.filter((z)=>z.role===pG);if(Y.length+1>=IH)return{kind:"maxed"};if(Y.length===0)return{kind:"split",targetPane:J.paneId,direction:"-h"};if(Y.length===1)return{kind:"split",targetPane:Y[0]?.paneId??J.paneId,direction:"-v"};return{kind:"split",targetPane:J.paneId,direction:"-v"}}function rB(f){return f.find((J)=>J.role===ZJ)??f.find((J)=>J.role==="")}function DR(f){return 100-($J(f??Number.NaN)??oG)}function LR(f){let J=Number.parseInt(f??"",10);return Number.isFinite(J)&&J>0?J:void 0}async function $1(f,J){let Y=J?.trim()||`=${f}`,{code:z,stdout:G}=await a0(["list-panes","-t",Y,"-F",VR]);return z===0?KR(G):null}async function MR(f){let{code:J,stdout:Y}=await a0(["list-windows","-t",`=${f}`,"-F","#{window_active}\t#{window_id}"]);if(J!==0)return"";for(let z of Y.split(`
|
|
66
|
+
`)){let[G,Z]=z.split("\t");if(G?.trim()==="1"&&Z?.trim())return Z.trim()}return""}async function Lz(f,J){let{code:Y,stdout:z}=await a0(["show-options","-wqv","-t",f,J]);return Y===0?z.trim():""}async function pB(f,J,Y){await v0(["set-window-option","-t",f,J,Y])}async function kY(f,J){await v0(["set-window-option","-u","-t",f,J])}async function _B(f){let{code:J,stdout:Y}=await a0(["display-message","-p","-t",f,"#{pane_id}"]);return J===0&&Y.trim()===f}async function Tf(f,J){await v0(["display-message","-t",f,J])}async function cq(f){let J=await C1(f,["@kobe_worktree","@kobe_task","@kobe_vendor"]);return{cwd:J["@kobe_worktree"]||process.cwd(),taskId:J["@kobe_task"]||void 0,vendor:J["@kobe_vendor"]||void 0}}function FR(f){let J=Cf(),Y=_f();return R1(Y+mz({cwd:f.cwd,taskId:f.taskId,claudePaneId:f.enginePaneId,cliInvocation:J,vendor:f.vendor}))}async function OR(f,J){return J?.trim()||await MR(f)}async function AR(f,J){let Y=await $1(f,J);if(!Y)return;let z=UR(Y);if(z.kind==="missing-engine"){await Tf(J,"kobe: no engine pane in this window");return}if(z.kind==="maxed"){await Tf(J,`kobe: workspace split limit is ${IH} panes`);return}let{cwd:G}=await cq(f),{code:Z,stdout:q}=await a0(["split-window",z.direction,"-t",z.targetPane,"-l","50%","-c",bf(G),"-P","-F","#{pane_id}",R1("true")]),Q=q.trim();if(Z!==0||!Q)return;await hf([["set-option","-p","-t",Q,"@kobe_role",pG],["select-pane","-t",Q]])}async function gR(f,J){let Y=await $1(f,J);if(!Y)return;let z=Y.filter((q)=>q.role===pG);if(z.length===0){await Tf(J,"kobe: no workspace split to close");return}let Z=z.find((q)=>q.active)??z[z.length-1];if(!Z)return;await v0(["kill-pane","-t",Z.paneId])}async function RR(f,J){let Y=await $1(f,J);if(!Y)return;let z=Y.filter((G)=>G.role===pG);if(z.length===0){await Tf(J,"kobe: no workspace splits to reset");return}await hf(z.map((G)=>["kill-pane","-t",G.paneId]))}async function U5(){let f=await DY([lJ]);return tY(LR(f[lJ])??sY)}async function CR(f){let{cwd:J,taskId:Y}=await cq(f),z=Cf(),G=_f();return{cwd:J,command:R1(G+VY(z,{initialTaskId:Y}))}}async function D5(f,J){let Y=await $1(f,J);if(!Y)return;let z=Y.find((M)=>M.role===GJ);if(z){await v0(["kill-pane","-t",z.paneId]);return}let G=rB(Y),Z=Y.find((M)=>M.role===Pz);if(!Z){await Tf(J,"kobe: cannot restore file pane in this layout");return}let{cwd:q,taskId:Q,vendor:H}=await cq(f),B=FR({cwd:q,taskId:Q,vendor:H,enginePaneId:Z.paneId}),V=G?["split-window","-v","-b","-t",G.paneId,"-l",`${await kR()}%`,"-c",bf(q),"-P","-F","#{pane_id}",B]:["split-window","-h","-t",Z.paneId,"-l",`${await oB()}%`,"-c",bf(q),"-P","-F","#{pane_id}",B],{code:j,stdout:U}=await a0(V),L=U.trim();if(j!==0||!L)return;let O=[["set-option","-p","-t",L,"@kobe_role",GJ],["set-option","-p","-t",L,KJ,o0]];if(G?.role==="")O.push(["set-option","-p","-t",G.paneId,"@kobe_role",ZJ]);await hf(O)}async function kR(){let f=await DY([aJ]);return $J(Number.parseInt(f[aJ]??"",10))??oG}async function oB(){let f=await DY([eY]);return $J(Number.parseInt(f[eY]??"",10))??100-wX}async function L5(){let f=await DY([aJ]);return DR(Number.parseInt(f[aJ]??"",10))}async function NR(f){let{code:J,stdout:Y}=await a0(["list-windows","-t",`=${f}`,"-F","#{window_index}"]);if(J!==0)return new Set;return new Set(Y.split(`
|
|
67
|
+
`).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)))}async function M5(f,J){let Y=await NR(f),z=_W(J);while(Y.has(z))z++;return z}async function F5(f){let J=_G(f);if(await Bf(J))return J;return await v0(["new-session","-d","-s",J,"-n","hidden-panes","-c",bf(process.cwd()),"while :; do sleep 3600; done"]),J}async function sB(f){let J=_G(f);if(!await Bf(J))return;let{code:Y,stdout:z}=await a0(["list-panes","-s","-t",`=${J}`,"-F","#{@kobe_role}"]);if(Y!==0)return;if(!z.split(`
|
|
68
|
+
`).some((Z)=>{let q=Z.trim();return q===ZJ||q===d1}))await v0(["kill-session","-t",`=${J}`])}async function yR(f,J){await O5(f,J,XJ)}async function bR(f,J){await O5(f,J,A1)}async function O5(f,J,Y){let z=await Lz(J,Y);if(!z)return;if(await _B(z))await v0(["kill-pane","-t",z]);await kY(J,Y)}async function SR(f,J){await yR(f,J),await bR(f,J),await sB(f)}function A5(f){return f.find((J)=>J.role===Pz)??f[0]}async function tB(f,J,Y){let z=A5(Y);if(!z)return await Tf(J,"kobe: cannot restore Tasks pane in this layout"),!1;let G=await U5(),{cwd:Z,command:q}=await CR(f),{code:Q,stdout:H}=await a0(["split-window","-h","-b","-t",z.paneId,"-l",`${G}`,"-c",bf(Z),"-P","-F","#{pane_id}",q]),B=H.trim();if(Q!==0||!B)return!1;return await hf([["set-option","-p","-t",B,"@kobe_role",d1],["set-option","-p","-t",B,KJ,o0],["select-pane","-t",B]]),await kY(J,A1),await Tf(J,"kobe: Tasks pane restored"),!0}async function g5(f,J,Y){let z=await F5(f),G=await M5(z,J),{code:Z,stdout:q}=await a0(["break-pane","-d","-s",Y.paneId,"-t",`${z}:${G}`,"-P","-F","#{pane_id}"]),Q=q.trim()||Y.paneId;if(Z!==0||!Q){await Tf(J,"kobe: could not hide Tasks pane");return}await pB(J,A1,Q),await Tf(J,"kobe: Tasks pane hidden")}async function eB(f,J,Y){let z=await $1(f,J);if(!z)return;if(!await _B(Y)){await kY(J,A1);let q=z.find((Q)=>Q.role===d1);if(q){await v0(["select-pane","-t",q.paneId]);return}await tB(f,J,z);return}let G=A5(z);if(!G){await Tf(J,"kobe: cannot restore Tasks pane in this layout");return}if(await v0(["join-pane","-h","-b","-s",Y,"-t",G.paneId,"-l",`${await U5()}`])!==0){await Tf(J,"kobe: could not restore Tasks pane");return}await hf([["set-option","-p","-t",Y,"@kobe_role",d1],["set-option","-p","-t",Y,KJ,o0],["select-pane","-t",Y]]),await kY(J,A1),await sB(f),await Tf(J,"kobe: Tasks pane restored")}async function IR(f,J){let Y=await Lz(J,A1);if(Y){await eB(f,J,Y);return}let z=await $1(f,J);if(!z)return;let G=z.find((Z)=>Z.role===d1);if(G){await g5(f,J,G);return}await tB(f,J,z)}async function TR(f,J){let Y=await Lz(J,A1);if(Y){await eB(f,J,Y);return}let z=await $1(f,J);if(!z)return;let G=z.find((Z)=>Z.role===d1);if(G){await v0(["select-pane","-t",G.paneId]);return}await tB(f,J,z)}async function R5(f,J,Y){if(Y.role==="")await v0(["set-option","-p","-t",Y.paneId,"@kobe_role",ZJ]);let z=await F5(f),G=await M5(z,J),{code:Z,stdout:q}=await a0(["break-pane","-d","-s",Y.paneId,"-t",`${z}:${G}`,"-P","-F","#{pane_id}"]),Q=q.trim()||Y.paneId;if(Z!==0||!Q){await Tf(J,"kobe: could not hide terminal pane");return}await pB(J,XJ,Q),await Tf(J,"kobe: Terminal pane hidden")}async function C5(f,J,Y){let z=Y.find((V)=>V.role===GJ),G=Y.find((V)=>V.role===Pz);if(!z&&!G)return await Tf(J,"kobe: cannot restore terminal pane in this layout"),!1;let{cwd:Z}=await cq(f),q=z?["split-window","-v","-t",z.paneId,"-l",`${await L5()}%`,"-c",bf(Z),"-P","-F","#{pane_id}"]:["split-window","-h","-t",G?.paneId??"","-l",`${await oB()}%`,"-c",bf(Z),"-P","-F","#{pane_id}"],{code:Q,stdout:H}=await a0(q),B=H.trim();if(Q!==0||!B)return!1;return await v0(["set-option","-p","-t",B,"@kobe_role",ZJ]),await kY(J,XJ),await Tf(J,"kobe: Terminal pane restored"),!0}async function k5(f,J,Y){let z=await $1(f,J);if(!z)return;if(!await _B(Y)){await kY(J,XJ),await C5(f,J,z);return}let G=z.find((B)=>B.role===GJ),Z=z.find((B)=>B.role===Pz);if(!G&&!Z){await Tf(J,"kobe: cannot restore terminal pane in this layout");return}let q=G?["join-pane","-v","-s",Y,"-t",G.paneId,"-l",`${await L5()}%`]:["join-pane","-h","-s",Y,"-t",Z?.paneId??"","-l",`${await oB()}%`];if(await v0(q)!==0){await Tf(J,"kobe: could not restore terminal pane");return}await v0(["set-option","-p","-t",Y,"@kobe_role",ZJ]),await kY(J,XJ),await sB(f),z=await $1(f,J);let H=z?.find((B)=>B.paneId===Y);if(H)await v0(["select-pane","-t",H.paneId]);await Tf(J,"kobe: Terminal pane restored")}async function uR(f,J){let Y=await Lz(J,XJ);if(Y){await k5(f,J,Y);return}let z=await $1(f,J);if(!z)return;let G=rB(z);if(G){await R5(f,J,G);return}await C5(f,J,z)}async function ER(f,J){let Y=await Lz(J,vz);if(Y){await wR(f,J,Y);return}await xR(f,J)}async function xR(f,J){let Y=await $1(f,J);if(!Y)return;let z=[],G=Y.find((q)=>q.role===GJ);if(G)await v0(["kill-pane","-t",G.paneId]),z.push(GJ);let Z=rB(Y);if(Z)await R5(f,J,Z),z.push(ZJ);if(!K5()){let q=Y.find((Q)=>Q.role===d1);if(q)await g5(f,J,q),z.push(d1)}if(z.length===0){await Tf(J,"kobe: already focused \u2014 nothing to hide");return}await pB(J,vz,z.join(",")),await Tf(J,"kobe: Zen mode on")}async function wR(f,J,Y){let z=new Set(Y.split(",").map((G)=>G.trim()));if(z.has(d1)){let G=await Lz(J,A1);if(G)await eB(f,J,G)}if(z.has(GJ)){let G=await $1(f,J);if(G&&!G.some((Z)=>Z.role===GJ))await D5(f,J)}if(z.has(ZJ)){let G=await Lz(J,XJ);if(G)await k5(f,J,G)}await kY(J,vz),await Tf(J,"kobe: Zen mode off")}async function hR(f){let{code:J,stdout:Y}=await a0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return 0;return Y.split(`
|
|
69
|
+
`).filter((z)=>z.trim().length>0).length}async function PR(f,J){if(await hR(f)<=1){await Tf(J,"Cannot close the only ChatTab");return}await SR(f,J),await v0(["kill-window","-t",J])}async function nq(f,J,Y={}){if(!await Bf(f))return;let z=await OR(f,Y.windowId);if(!z)return;switch(J){case"workspace-split":await AR(f,z);return;case"workspace-close":await gR(f,z);return;case"workspace-reset":await RR(f,z);return;case"tasks-toggle":await IR(f,z);return;case"tasks-restore":await TR(f,z);return;case"ops-toggle":await D5(f,z);return;case"terminal-toggle":await uR(f,z);return;case"zen-toggle":await ER(f,z);return;case"chat-tab-close":await PR(f,z);return}}var VR="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var fj=C(()=>{iJ();e1();$B();Sf();qJ();U1();zz();UZ()});var r1={};jf(r1,{tmuxWindowSizeArgsForClient:()=>zj,tmuxSessionName:()=>Mf,tmuxInitialSizeArgs:()=>y5,tmuxInitialClientSize:()=>Yj,tmuxAvailable:()=>NJ,switchClientBeforeKill:()=>bJ,sessionExists:()=>Bf,selectTasksPane:()=>aR,runLayoutAction:()=>nq,resyncWindowToClient:()=>cR,refreshKobeWorkspacePanes:()=>HG,quickCreate:()=>V5,prepareWindowForSwitch:()=>iq,prepareWindowForAttach:()=>dq,parseTmuxClientRows:()=>b5,parseObservedSession:()=>T5,openUpdateTab:()=>vq,openSettingsTab:()=>wq,openNewTaskTab:()=>Pq,openHelpTab:()=>hq,newChatTab:()=>W5,kobeStatusRight:()=>Eq,killSession:()=>i1,healSessionLayout:()=>B5,focusBindCommand:()=>I5,ensureSession:()=>yY,currentSessionName:()=>k1,clientsWithConflictingSize:()=>S5,chatTabSwitchBindings:()=>Sq,chatTabRenameBinding:()=>Tq,chatTabCloseBinding:()=>Iq,chatTabChooseEngineBindings:()=>uq,captureGlobalLayoutOnDrag:()=>j5,captureGlobalLayout:()=>KZ,attachArgv:()=>iz,PANE_VERSION_OPTION:()=>KJ,CHAT_TAB_STATUS_FORMAT:()=>DZ,CHAT_TAB_STATUS_CURRENT_FORMAT:()=>xq,CHAT_TAB_STATE_OPTION:()=>dB,CHAT_TAB_ENGINE_PROMPT:()=>bq});function y5(f=process.stdout,J=process.env){let Y=Yj(f,J);return Y?["-x",`${Y.columns}`,"-y",`${Y.rows}`]:[]}function Yj(f=process.stdout,J=process.env){let Y=NY(f.columns)??NY(J.COLUMNS),z=NY(f.rows)??NY(J.LINES);return Y&&z?{columns:Y,rows:z}:null}function NY(f){let J=typeof f==="number"?f:typeof f==="string"?Number.parseInt(f,10):Number.NaN;return Number.isInteger(J)&&J>0?J:void 0}function b5(f){let J=[];for(let Y of f.split(`
|
|
70
|
+
`)){let[z,G,Z,q,Q]=Y.split("\t"),H=NY(Z?.trim()),B=NY(q?.trim());if(!z?.trim()||!G?.trim()||!H||!B)continue;J.push({name:z.trim(),session:G.trim(),width:H,height:B,flags:Q?.trim()??""})}return J}function S5(f,J,Y,z={}){return f.filter((G)=>G.session===J).filter((G)=>G.name!==z.currentClientName).filter((G)=>G.width!==Y.columns||G.height!==Y.rows).map((G)=>G.name)}function zj(f,J){let Y=Math.max(1,f.rows-(J.status?.trim()==="on"?1:0));return["-x",`${f.columns}`,"-y",`${Y}`]}async function Gj(f,J,Y={}){if(!J)return;let{code:z,stdout:G}=await a0(["list-clients","-t",`=${f}`,"-F",vR]);if(z!==0)return;let Z=S5(b5(G),f,J,Y),q=[];if(Y.currentClientName)q.push(["refresh-client","-f","!ignore-size","-t",Y.currentClientName]);for(let Q of Z)q.push(["refresh-client","-f","ignore-size","-t",Q]);if(q.length>0)await hf(q)}async function dq(f){CY(f,"resize");let J=Yj();await Gj(f,J);let Y=J?["-x",`${J.columns}`,"-y",`${J.rows}`]:[];if(Y.length>0)await v0(["resize-window","-t",`=${f}`,...Y]);await QG(f)}async function mR(){let{code:f,stdout:J}=await a0(["display-message","-p","#{client_name}\t#{client_width}\t#{client_height}\t#{status}"]);if(f!==0)return{sizeArgs:[],clientSize:null,clientName:void 0};let[Y,z,G,Z]=J.trim().split("\t"),q=NY(z),Q=NY(G),H=q&&Q?{columns:q,rows:Q}:null;return{sizeArgs:H?zj(H,{status:Z}):[],clientSize:H,clientName:Y?.trim()||void 0}}async function iq(f){CY(f,"resize");let J=await mR();await Gj(f,J.clientSize,{currentClientName:J.clientName});let Y=J.sizeArgs;if(Y.length>0)await v0(["resize-window","-t",`=${f}`,...Y]);await QG(f)}async function cR(f,J){if(!J.size)return;CY(f,"resize"),await Gj(f,J.size,{currentClientName:J.clientName});let Y=zj(J.size,{status:J.status}),{commands:z}=await cB(f,{force:!0});await hf([["resize-window","-t",`=${f}`,...Y],...z])}function I5(f,J,Y){let z=`#{?window_zoomed_flag,1,#{?${nR[J]},,1}}`;if(Y)return["bind-key","-n",f,"if-shell","-F",z,`select-pane ${J}`,Y];return["bind-key","-n",f,"if-shell","-F",z,`select-pane ${J}`]}async function yY(f){let J=Jj.get(f.name);if(J)return J;let Y=lR(f);Jj.set(f.name,Y);try{return await Y}finally{Jj.delete(f.name)}}function T5(f){let J="",Y="",z=!1,G=new Set;for(let Z of f.split(`
|
|
71
|
+
`)){let[q,Q,H,B,V]=Z.split("\t");if(!q?.trim())continue;if(G.add(q.trim()),!J&&B?.trim())J=B.trim();if(!Y&&V?.trim())Y=V.trim();if(Q?.trim()==="1"&&H?.trim()==="claude")z=!0}return{worktree:J,vendor:Y,claudePaneAlive:z,windowCount:G.size}}async function iR(f){if(!await Bf(f))return null;let{code:J,stdout:Y}=await a0(["list-panes","-s","-t",`=${f}`,"-F",dR]);if(J!==0)return{worktree:"",vendor:"",claudePaneAlive:!1,windowCount:0};return T5(Y)}async function lR(f){let J=f.launchInit,Y=await iR(f.name),z=$7(Y,{cwd:f.cwd,vendor:f.vendor,hasEngineCommand:f.command.length>0}),G=x9(f.repo);if(z.kind==="reuse")return await QG(f.name,{cwd:f.cwd,taskId:f.taskId,vendor:f.vendor}),!0;if(z.kind==="respawn-engine"){if(await q5(f.name,f.cwd,f.command,G,f.vendor)){if(f.vendor)await lz(f.name,"@kobe_vendor",f.vendor);return await QG(f.name,{cwd:f.cwd,taskId:f.taskId,vendor:f.vendor,vendorChanged:!0}),!0}}if(z.kind==="rebuild"||z.kind==="respawn-engine")await i1(f.name);let Z=Cf(),q=rz(f.command,f.vendor),Q=f.repo!==void 0&&f.cwd===f.repo,H=Q||G?void 0:f.taskId,B=Q&&!G?f.taskId:void 0,V=zq(Yq(q.argv,f.vendor,H),f.vendor,B),j=nz(g1(V),G,f.cwd),L=(await a0(["new-session","-d","-s",f.name,"-c",bf(f.cwd),...y5(),"-P","-F","#{pane_id}",sW(j,{initScript:G?void 0:J?.initScript,markerPath:!G&&J?.initScript?G9(f.cwd):void 0})])).stdout.trim();if(!L)return console.error("[kobe tmux] new-session returned no pane id; session creation failed"),!1;if(q.sessionId)await LY(L,yJ,q.sessionId);await hf([...f.taskId?[["set-option","-t",f.name,"@kobe_task",f.taskId]]:[],["set-option","-t",f.name,"@kobe_worktree",f.cwd],...f.vendor?[["set-option","-t",f.name,"@kobe_vendor",f.vendor]]:[],...G?[["set-option","-t",f.name,eG,G]]:[]]),await iB(L,{cwd:f.cwd,taskId:f.taskId,opsCommand:f.opsCommand,inv:Z,vendor:f.vendor});let O=_f(),M=Z.map(zf).join(" "),g=`${O}${M} new-chattab --session '#{session_name}'`,I=`${g} --vendor '%%'`,a=`run-shell ${zf(I)}`,N=`${O}${M} focus-tasks --session '#{session_name}' --window '#{window_id}'`,A=`run-shell ${zf(N)}`,R=(H0)=>`${O}${M} layout --session '#{session_name}' --window '#{window_id}' --action ${H0}`,S=R("tasks-restore"),_=`run-shell ${zf(S)}`,z0=R("chat-tab-close"),e=`run-shell ${zf(z0)}`,Y0=`${O}${M} heal-layout --session '#{session_name}'`,T=`run-shell -b ${zf(Y0)}`,Q0=`${O}${M} resync-window --session '#{session_name}' --client '#{client_name}' --cols '#{client_width}' --rows '#{client_height}' --status '#{status}'`,t=`run-shell -b ${zf(Q0)}`,V0=`${O}${M} capture-layout --session '#{session_name}'`,C0=`run-shell -b ${zf(V0)}`,$=fV({tmuxSocket:QJ}),x=Oq(),f0=n7.map((H0)=>["unbind-key","-n",H0]);if(x.overridden.has(SJ))for(let H0 of RY){let k0=Uz(H0);if("key"in k0)f0.push(["unbind-key","-n",k0.key])}for(let H0 of x.overridden){if(H0===SJ)continue;let k0=Kz[H0],x0=ZG(H0),y0=Uz(k0,{allowBare:x0});if("key"in y0)f0.push(x0?["unbind-key",y0.key]:["unbind-key","-n",y0.key])}let u=["-L","-D","-U","-R"],G0=x.focus.flatMap((H0,k0)=>{let x0=u[k0],y0=x0==="-L"?_:void 0;return H0&&x0?[I5(H0.key,x0,y0)]:[]}),w=x.binds,n=(H0,k0)=>{let x0=w[H0];return x0?[["bind-key",x0.key,"run-shell",R(k0)]]:[]},q0=(...H0)=>{let k0=H0.map((x0)=>w[x0]?.chord).filter((x0)=>!!x0);return k0.length>0?k0.join("/"):null};await hf([["set-option","-g","status","on"],["set-window-option","-g","aggressive-resize","on"],["set-option","-g","monitor-activity","on"],["set-option","-g","visual-activity","off"],["set-option","-g","window-status-format",DZ],["set-option","-g","window-status-current-format",xq],["set-option","-g","status-right",Eq({focusLeft:x.focus[0]?.key??null,detach:w["tmux.detach"]?.key??null,newTab:w["tmux.tab.new"]?.key??null,layoutSplits:q0("tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"),layoutPanes:q0("tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle","tmux.layout.zenToggle")})],["set-option","-g","mouse","on"],["set-hook","-g","window-resized",T],["set-hook","-g","client-resized",t],["set-hook","-g","window-layout-changed",C0],...f0,...w["tmux.detach"]?[["bind-key","-n",w["tmux.detach"].key,"if-shell","-F",`#{?#{${A1}},1,#{==:#{@kobe_role},tasks}}`,"detach-client",A]]:[],...G0,...w["tmux.tab.new"]?[["bind-key","-n",w["tmux.tab.new"].key,"run-shell",g]]:[],...w["tmux.tab.chooseEngine"]?uq(w["tmux.tab.chooseEngine"].key).map((H0)=>[...H0,a]):[],...w["tmux.tab.prev"]&&w["tmux.tab.next"]?Sq(w["tmux.tab.prev"].key,w["tmux.tab.next"].key):w["tmux.tab.prev"]?[["bind-key","-n",w["tmux.tab.prev"].key,"previous-window"]]:w["tmux.tab.next"]?[["bind-key","-n",w["tmux.tab.next"].key,"next-window"]]:[],...w["tmux.tab.close"]?[Iq(w["tmux.tab.close"].key,e)]:[],...w["tmux.tab.rename"]?[Tq(w["tmux.tab.rename"].key)]:[],...n("tmux.layout.workspaceSplit","workspace-split"),...n("tmux.layout.workspaceClose","workspace-close"),...n("tmux.layout.workspaceReset","workspace-reset"),...n("tmux.layout.tasksToggle","tasks-toggle"),...n("tmux.layout.opsToggle","ops-toggle"),...n("tmux.layout.terminalToggle","terminal-toggle"),...n("tmux.layout.zenToggle","zen-toggle"),["bind-key","f","run-shell",`${O}${M} quick-create --session '#{session_name}'`],["bind-key","u","display-popup","-E",$]]),await Dz(),await v0(["select-pane","-t",L]);let W0=J?.firstMessage;if(W0)a7(f.name,W0).catch((H0)=>console.error("[kobe tmux] first message delivery failed:",H0));return!0}async function N5(f,J,Y){let z=Y?.trim()||`=${f}`,{code:G,stdout:Z}=await a0(["list-panes","-t",z,"-F","#{pane_id}\t#{@kobe_role}"]);if(G!==0)return"";for(let q of Z.split(`
|
|
72
|
+
`)){let[Q,H]=q.split("\t");if(Q?.trim()&&H?.trim()===J)return Q.trim()}return""}async function aR(f,J={}){if(!await Bf(f))return"";let Y=await N5(f,"tasks",J.windowId);if(!Y)await nq(f,"tasks-restore",{windowId:J.windowId}),Y=await N5(f,"tasks",J.windowId);if(!Y)return"";return await v0(["select-pane","-t",Y]),Y}var vR="#{client_name}\t#{client_session}\t#{client_width}\t#{client_height}\t#{client_flags}",nR,Jj,dR="#{window_id}\t#{window_active}\t#{@kobe_role}\t#{@kobe_worktree}\t#{@kobe_vendor}";var J1=C(()=>{iJ();E1();lf();e1();Sf();Aq();gq();qJ();Nq();lB();zz();fj();qG();UZ();Sf();lB();UZ();fj();nR={"-L":"pane_at_left","-D":"pane_at_bottom","-U":"pane_at_top","-R":"pane_at_right"};Jj=new Map});async function $R(f,J){let{task:Y}=await f.request("task.get",{taskId:J});return Y}async function Zj(f,J){let Y=await $R(f,J);if(Y.worktreePath)return{task:Y,worktreePath:Y.worktreePath};let{worktreePath:z}=await f.request("task.ensureWorktree",{taskId:J});if(!z)throw Error(`task ${J} has no worktree`);return{task:Y,worktreePath:z}}async function u5(f,J){let{task:Y,worktreePath:z}=await Zj(f,J),G=Mf(J);if(!await Bf(G)){let Z=_J(Y.repo??"",z,{kind:"repo-init"});if(!await yY({name:G,cwd:z,command:N1(Y.vendor,Y.modelEffort),taskId:J,vendor:Y.vendor,launchInit:Z}))throw Error(`failed to start tmux session for ${J}`)}return{session:G,worktreePath:z}}function rR(f){return xX(f,{bareSafe:!0})}async function E5(f,J){let{task:Y,worktreePath:z}=await Zj(f,J),G=Y.kind==="main"?void 0:J,Z=Y.kind==="main"?J:void 0,q=[...zq(Yq(N1(Y.vendor,Y.modelEffort),Y.vendor,G),Y.vendor,Z)],Q=_J(Y.repo??"",z,{kind:"none"}),H=rR(q),B=Q.initScript?.trim()?`${Q.initScript}
|
|
73
|
+
${H}`:H,V=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:z,command:[V,"-ilc",B]}}async function x5(f,J){let{worktreePath:Y}=await Zj(f,J),z=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:Y,command:[z,"-il"]}}async function w5(f){let J=Mf(f);await bJ(J).catch(()=>{}),await i1(J).catch(()=>{})}var h5=C(()=>{E1();bH();zG();Sf();J1()});import{existsSync as pR}from"fs";import{join as P5,normalize as c5}from"path";function _R(f){let J=null,Y=null,z=new TextEncoder,G=new ReadableStream({start(Z){J=f((Q,H)=>{try{Z.enqueue(z.encode(`event: ${Q}
|
|
74
|
+
data: ${JSON.stringify(H)}
|
|
75
75
|
|
|
76
|
-
`))}catch{}}),
|
|
76
|
+
`))}catch{}}),Y=setInterval(()=>{try{Z.enqueue(z.encode(`: ping
|
|
77
77
|
|
|
78
|
-
`))}catch{}},15000)},cancel(){if(
|
|
79
|
-
`).map((
|
|
80
|
-
`)){if(!
|
|
81
|
-
`,"utf8");async function Y0(){if(
|
|
82
|
-
`);while(
|
|
83
|
-
`)}}return
|
|
78
|
+
`))}catch{}},15000)},cancel(){if(Y)clearInterval(Y);J?.()}});return new Response(G,{headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform",connection:"keep-alive"}})}async function oR(f,J,Y){try{let{name:z,payload:G}=await f.json();if(!z)return Response.json({error:"missing rpc name"},{status:400});if(!u7.has(z))return Response.json({error:`rpc ${z} is not exposed to the web UI`},{status:403});let Z=await J.request(z,G),q=G?.taskId;if(typeof q==="string"){let Q=z==="task.archive"&&G.archived!==!1;if(z==="task.delete"||Q)Y(q)}return Response.json({result:Z})}catch(z){let G=z instanceof Error&&z.name!=="Error"?z.name:void 0;return Response.json({error:z instanceof Error?z.message:String(z),...G?{name:G}:{}},{status:500})}}async function sR(){try{let J=(await dJ()).map((Y)=>({id:Y,label:qz(Y),effortLevels:pf(Y).effortLevels}));return Response.json({engines:J.length>0?J:[{id:"claude",label:"Claude"}]})}catch(f){return Response.json({error:f instanceof Error?f.message:String(f)},{status:500})}}function tR(){return Response.json({api:Qz()})}function eR(){return Response.json({projects:m1()})}function bY(f,J=""){return typeof f==="string"?f:J}function f2(f,J){return typeof f==="boolean"?f:J}function a5(f){let J=f.customEngineIds;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string"&&l5.test(Y)&&!Q1(Y))}function J2(f){return f.split(/[-_]+/).filter(Boolean).map((J)=>`${J.slice(0,1).toUpperCase()}${J.slice(1)}`).join(" ")}function Y2(f,J){return bY(f[WJ(J)]).trim()||qz(J)}function z2(f,J){return bY(f[jJ(J)]).trim()||QZ(J).join(" ")}function $5(){let f=cf(),J=a5(f),Y=[...vY,...J],z=bY(f.lastSelectedVendor,"claude"),G=bY(f.focusAccent,"primary");return Response.json({activeTheme:bY(f.activeTheme,"claude"),transparentBackground:f2(f.transparentBackground,!1),focusAccent:i5.includes(G)?G:"primary",notificationsToast:f["notifications.toast.enabled"]!==!1,notificationsSound:f["notifications.sound.enabled"]!==!1,settingsSurface:jz(f[pJ]??Bz),editorKind:pz(f[rJ]??Gq),editorCustomCommand:bY(f[AY]),remoteProjects:f["experimental.remoteProjects"]===!0,autoStatus:f[Zz]===!0,dispatcher:f[Xz]===!0,defaultEngine:z,engines:Y.map((Z)=>({id:Z,label:Y2(f,Z),command:z2(f,Z),isBuiltin:Q1(Z),isCustom:!Q1(Z),isDefault:Z===z}))})}function LZ(f,J,Y){if(typeof Y==="string")f[J]=Y.trim()}function BG(f,J,Y){if(typeof Y==="boolean")f[J]=Y}async function G2(f){try{let J=await f.json(),Y={};if(LZ(Y,"activeTheme",J.activeTheme),BG(Y,"transparentBackground",J.transparentBackground),i5.includes(J.focusAccent))Y.focusAccent=J.focusAccent;if(BG(Y,"notifications.toast.enabled",J.notificationsToast),BG(Y,"notifications.sound.enabled",J.notificationsSound),J.settingsSurface==="chattab"||J.settingsSurface==="taskpanel")Y[pJ]=J.settingsSurface;if(Hz.includes(J.editorKind))Y[rJ]=J.editorKind;LZ(Y,AY,J.editorCustomCommand),BG(Y,"experimental.remoteProjects",J.remoteProjects),BG(Y,Zz,J.autoStatus),BG(Y,Xz,J.dispatcher),LZ(Y,"lastSelectedVendor",J.defaultEngine);let z=cf(),G=a5(z),Z=new Set([...vY,...G]),q=Array.isArray(J.engineUpdates)?J.engineUpdates:[];for(let Q of q){if(!Q||typeof Q!=="object")continue;let H=Q;if(typeof H.id!=="string"||!Z.has(H.id))continue;LZ(Y,jJ(H.id),H.command),LZ(Y,WJ(H.id),H.label)}if(J.addEngine&&typeof J.addEngine==="object"){let Q=J.addEngine,H=typeof Q.id==="string"?Q.id.trim().toLowerCase():"";if(!l5.test(H)||Q1(H)||Z.has(H))return Response.json({error:"invalid or duplicate engine id"},{status:400});Y.customEngineIds=[...G,H],Y[jJ(H)]=bY(Q.command).trim();let B=bY(Q.label).trim();Y[WJ(H)]=B&&B!==H?B:J2(H)}if(typeof J.removeEngine==="string"){let Q=J.removeEngine;if(!Q1(Q)){if(Y.customEngineIds=G.filter((H)=>H!==Q),Y[jJ(Q)]=void 0,Y[WJ(Q)]=void 0,z.lastSelectedVendor===Q)Y.lastSelectedVendor="claude"}}if(Object.keys(Y).length>0)iY(Y);return $5()}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:400})}}async function Z2(f,J){try{let{taskId:Y}=await f.json();if(!Y)return Response.json({error:"missing taskId"},{status:400});return Response.json(await u5(J,Y))}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function v5(f,J,Y){try{let z=f.searchParams.get("taskId");if(!z)return Response.json({error:"missing taskId"},{status:400});return Response.json(await Y(J,z))}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}function r5(){return Response.json({review:kf(lq.review)??null,pr:kf(lq.pr)??null})}async function X2(f){try{let J=await f.json();if(typeof J.review==="string")af(lq.review,J.review);if(typeof J.pr==="string")af(lq.pr,J.pr);return r5()}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:400})}}async function q2(f,J){let z=c5(P5(J,f==="/"?"/index.html":f));if(!z.startsWith(J))return new Response("forbidden",{status:403});let G=Bun.file(pR(z)?z:P5(J,"index.html"));if(!await G.exists())return new Response("kobe web assets not built \u2014 run `bun --filter kobe-web build`",{status:503});return new Response(G)}function Q2(f){let{link:J,sseSends:Y,staticDir:z}=f,G=f.tearDownSession??((Z)=>void w5(Z));return async function(q){let Q=new URL(q.url);if(Q.pathname===d5)return new Response(n5);if(!S7(q.headers.get("origin"),{allowedHost:f.allowedHost}))return new Response("forbidden: cross-origin request rejected",{status:403});if(Q.pathname==="/events")return _R((O)=>{let M=f.onSseOpen?.()??(()=>{});return O("snapshot",J.snapshot()),Y.add(O),()=>{Y.delete(O),M()}});if(Q.pathname==="/api/rpc"&&q.method==="POST")return oR(q,J,G);if(Q.pathname==="/api/session"&&q.method==="POST")return Z2(q,J);if(Q.pathname==="/api/engine-spec"&&q.method==="GET")return v5(Q,J,E5);if(Q.pathname==="/api/terminal-spec"&&q.method==="GET")return v5(Q,J,x5);if(Q.pathname==="/api/engines"&&q.method==="GET")return sR();if(Q.pathname==="/api/cli-invocation"&&q.method==="GET")return tR();if(Q.pathname==="/api/projects"&&q.method==="GET")return eR();if(Q.pathname==="/api/settings"&&q.method==="GET")return $5();if(Q.pathname==="/api/settings"&&q.method==="PATCH")return G2(q);if(Q.pathname==="/api/quick-prompts"&&q.method==="GET")return r5();if(Q.pathname==="/api/quick-prompts"&&q.method==="PUT")return X2(q);let H=await L7(q,Q);if(H)return H;let B=await q7(q,Q);if(B)return B;let V=await j7(q,Q);if(V)return V;let j=await N7(q,Q,J);if(j)return j;let U=await g7(q,Q);if(U)return U;let L=F7(q,Q);if(L)return L;if(z)return q2(Q.pathname,z);return new Response("not found",{status:404})}}function Mz(f,J){let Y=f.snapshot().find((z)=>z.channel===J);return Y?Y.payload:null}function Xj(f){return f.length>1?f.replace(/\/+$/,""):f}function H2(f,J){let Y=Xj(J),z=new Set([J]);for(let G of f){let Z=Xj(G.repo),q=Xj(G.worktreePath);if(Z===Y||q===Y){if(G.repo)z.add(G.repo);if(G.worktreePath)z.add(G.worktreePath)}}return[...z]}function p5(f){let J=XZ();return{async request(Y,z){return await ZZ(J,Y,z,f.ctx(0))},snapshot(){let Y=f.orch.listTasks().map(zJ),z={},G=Mz(f.bus,"issue.snapshot");if(G)for(let Q of H2(Y,G.repoRoot))z[Q]={...G,repoRoot:Q};let Z=Mz(f.bus,"task.jobs"),q=Z?.phase==="running"?{[Z.taskId]:Z}:{};return{tasks:Y,activeTaskId:Mz(f.bus,"active-task")?.taskId??null,engineStates:f.activity.snapshotByTask(),update:Mz(f.bus,"update")?.info??null,jobs:q,worktreeChanges:Mz(f.bus,"worktree.changes")?.changes??{},issueSnapshots:z,deliver:Mz(f.bus,"session.deliver"),uiPrefs:Mz(f.bus,"ui-prefs"),connected:!0}}}}async function m5(f){try{let J=Bun.spawn(["lsof","-nP",`-iTCP:${f}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(J.stdout).text()).split(`
|
|
79
|
+
`).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function B2(f,J=d5){let Y;try{Y=(await(await fetch(`http://localhost:${f}${J}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Y!==n5)throw Error(`port ${f} is in use by a non-kobe service; refusing to replace it`);let z=await m5(f);for(let Z of z)try{process.kill(Z,"SIGTERM")}catch{}let G=Date.now()+2000;while(Date.now()<G){if((await m5(f)).length===0)return;await new Promise((Z)=>setTimeout(Z,100))}}async function _5(f){if(f.takeover!==!1)await B2(f.port);let J=new Set,Y=f.onEvent((Q)=>{for(let H of J)H("channel",Q)}),z=f.hostname?.trim()||process.env.KOBE_WEB_HOST?.trim()||"127.0.0.1",G=I7(z),Z=Q2({link:f.link,sseSends:J,staticDir:f.staticDir?c5(f.staticDir):void 0,allowedHost:G,onSseOpen:f.onSseOpen}),q=Bun.serve({port:f.port,hostname:z,idleTimeout:0,fetch:Z});return{port:q.port??f.port,hostname:z,close(){Y(),q.stop(!0)}}}var n5="kobe-web",d5="/__kobe_web",i5,l5,lq;var o5=C(()=>{oY();E1();UY();GZ();Jq();gf();lY();Zq();K1();Q7();W7();M7();O7();pX();rY();R7();T7();E7();h5();i5=["primary","success","info"],l5=/^[a-z][a-z0-9_-]{0,47}$/;lq={review:"boardPrompt.review",pr:"boardPrompt.pr"}});var s5={};jf(s5,{sameWorktreeChanges:()=>IJ,readWorktreeChanges:()=>W2,pickPushedChanges:()=>$q,parsePorcelain:()=>jG});import{spawnSync as j2}from"child_process";function IJ(f,J){return f.added===J.added&&f.deleted===J.deleted}function $q(f,J){if(!f)return null;return f.get(J)??aq}function W2(f){if(!f)return aq;try{let J=j2("git",["status","--porcelain=v1"],{cwd:f,encoding:"utf8",stdio:["ignore","pipe","pipe"],env:x1()});if(J.status!==0||!J.stdout)return aq;return jG(J.stdout)}catch{return aq}}function jG(f){let J=0,Y=0;for(let z of f.split(`
|
|
80
|
+
`)){if(!z||z.startsWith("##"))continue;let G=z.charAt(0),Z=z.charAt(1);if(G==="D"||Z==="D")Y+=1;else J+=1}return{added:J,deleted:Y}}var aq;var WG=C(()=>{gY();aq={added:0,deleted:0}});async function D2(f,J){let Y=await BJ("git",["status","--porcelain=v1"],{cwd:f,env:x1(),signal:J});if(Y.status!==0)throw Error("git status failed");return jG(Y.stdout)}function L2(f){let J=new Set;for(let Y of f){if(Y.archived)continue;if(!Y.worktreePath)continue;if(D1(Y.repo)||D1(Y.worktreePath))continue;J.add(Y.worktreePath)}return J}class t5{orch;bus;options;entries=new Map;stopped=!1;constructor(f,J,Y={}){this.orch=f;this.bus=J;this.options=Y}tick(){if(this.stopped)return;if(this.options.hasSubscribers&&!this.options.hasSubscribers())return;try{let f=L2(this.orch.listTasks()),J=!1;for(let Y of this.entries.keys()){if(f.has(Y))continue;if(this.entries.get(Y)?.value)J=!0;this.entries.delete(Y)}if(J)this.publish();for(let Y of f)this.maybeCollect(Y)}catch(f){If("worktree-changes",f)}}stop(){this.stopped=!0}maybeCollect(f){let J=this.entries.get(f);if(!J)J={inFlight:!1,nextAllowedAt:0},this.entries.set(f,J);let Y=this.options.cadence??{timeoutMs:V2,slowRetryMs:K2,minIntervalMs:U2},z=this.options.run??D2;eX(J,Y,(G)=>z(f,G),(G)=>{if(this.stopped)return;if(this.entries.get(f)!==J)return;if(J.value&&IJ(J.value,G))return;J.value=G,this.publish()})}publish(){let f={};for(let[J,Y]of this.entries)if(Y.value)f[J]=Y.value;this.bus.publish("worktree.changes",{changes:f})}}function e5(f,J,Y=qj,z){if(Y<=0)return()=>{};let G=new t5(f,J,{hasSubscribers:z});G.tick();let Z=setInterval(()=>G.tick(),Y);return Z.unref?.(),()=>{clearInterval(Z),G.stop()}}var qj=2000,V2=4000,K2=60000,U2=1500;var fK=C(()=>{gY();qZ();gf();WG()});import{mkdir as JK,readFile as M2,unlink as Qj,writeFile as F2}from"fs/promises";import{createServer as O2}from"net";import{dirname as YK}from"path";import{StringDecoder as A2}from"string_decoder";function R2(){let f=process.env.KOBE_DAEMON_IDLE_GRACE_MS;if(f===void 0)return zK;let J=Number(f);return Number.isFinite(J)&&J>=0?J:zK}async function ZK(f,J={}){let Y=J.socketPath??CJ(J.homeDir),z=J.pidPath??cJ(J.homeDir),G=J.startedAt??new Date,Z=new Set,q=new Set,Q=1,H=new OB({clients:function*(){yield*Z,yield*q},idleGraceMs:R2(),onIdleStop:()=>void Y0().catch(($)=>If("daemon-idle-shutdown",$))}),B=new GB;B.onPublish(($)=>{GK(Z,{type:"event",name:$.channel,payload:$.payload})});let V=new gH(B),j=new sX(oX(J.homeDir));await JK(YK(Y),{recursive:!0}),await JK(YK(z),{recursive:!0}),await Qj(Y).catch(()=>{});let U=O2(($)=>{let x={id:Q++,connectedAt:new Date,socket:$,buffer:"",subscribed:!1,holdsLifetime:!1,channels:null};Z.add(x);let f0=new A2("utf8");$.on("data",(u)=>{x.buffer+=f0.write(u),C0(x)}),$.on("error",()=>{}),$.on("close",()=>{if(Z.delete(x),x.subscribed)MY("conn",`client #${x.id} (${x.holdsLifetime?"gui":"pane"}) disconnected \u2014 ${Z.size} client(s), ${H.guiCount()} gui left`);H.clientDisconnected(x.holdsLifetime)})}),L=f.subscribeTasks(($)=>{B.publish("task.snapshot",{tasks:$.map(zJ)})}),O=J.checkUpdate??xG,M=J.updatePollMs??g2,g=()=>{O().then(($)=>B.publish("update",{info:$})).catch(($)=>If("update-poller",$))},I=null;if(M>0)g(),I=setInterval(g,M),I.unref?.();let a=J.autoTitlePollMs??zB,N=vV(f,a,()=>H.hasSubscribers()),A=Y7(B,{statePath:CB(J.homeDir),debounceMs:J.uiPrefsDebounceMs??RB}),R=oV(B,{path:FB(J.homeDir),debounceMs:J.keybindingsDebounceMs??MB}),S=e5(f,B,J.worktreeChangesTickMs??qj,()=>H.hasSubscribers()),_=eV(f,J.prStatusPollMs??fq,()=>H.hasSubscribers()),z0=null,e={socketPath:Y,pidPath:z,startedAt:G,get webPort(){return z0?.port},clients:Z,async close(){if(H.markStopping(),L(),z0?.close(),z0=null,I)clearInterval(I);N(),_(),A(),R(),S(),V.close(),GK(Z,{type:"event",name:"daemon.stopping",payload:{}});for(let $ of Array.from(Z))$.socket.destroy();await new Promise(($)=>U.close(()=>$())),await Qj(Y).catch(()=>{}),await Qj(z).catch(()=>{})}};await new Promise(($,x)=>{let f0=U;f0.once("error",x),U.listen(Y,()=>{f0.removeListener("error",x),$()})}),await F2(z,`${process.pid}
|
|
81
|
+
`,"utf8");async function Y0(){if(H.isStopping())return;H.markStopping(),await J.onStop?.(),setTimeout(()=>{e.close().catch(($)=>If("daemon-shutdown",$))},0).unref()}let T=XZ();function Q0($){return{orch:f,bus:B,activity:V,issues:j,daemon:{startedAt:G,socketPath:Y,webPort:z0?.port,pid:process.pid,guiCount:()=>H.guiCount(),stopSoon:Y0},clientId:$}}if(J.webPort!==void 0){let $=p5({orch:f,bus:B,activity:V,ctx:Q0});z0=await _5({port:J.webPort,hostname:J.webHost,staticDir:J.webStaticDir,link:$,onEvent:(x)=>B.onPublish(x),onSseOpen:()=>{let x={subscribed:!0,holdsLifetime:!0};return q.add(x),H.guiAttached(),MY("conn",`web client subscribed \u2014 ${Z.size+q.size} client(s), ${H.guiCount()} gui`),()=>{q.delete(x),MY("conn",`web client disconnected \u2014 ${Z.size+q.size} client(s), ${H.guiCount()} gui left`),H.clientDisconnected(!0)}}}),MY("web",`daemon web transport listening on http://${z0.hostname}:${z0.port}`)}async function t($,x){if($.name==="subscribe"){let f0=HB($.payload),u=x.subscribed;x.subscribed=!0;let G0=f0.role==="gui"?"gui":"pane";x.holdsLifetime=G0==="gui",x.channels=OW(f0.channels);let w=!u;if(x.holdsLifetime)H.guiAttached();MY("conn",`client #${x.id} subscribed as ${G0}${x.channels?` [${[...x.channels].join(",")}]`:""} \u2014 ${Z.size} client(s), ${H.guiCount()} gui${w?" (collectors resume)":""}`);for(let n of B.snapshot()){if(x.channels&&!x.channels.has(n.channel))continue;MZ(x,{type:"event",name:n.channel,payload:n.payload})}if(!x.channels||x.channels.has("engine-state"))for(let n of V.currentNonIdle())MZ(x,{type:"event",name:"engine-state",payload:n});return{}}return ZZ(T,$.name,$.payload,Q0(x.id))}async function V0($,x){try{let f0=await t($,x);MZ(x,{type:"response",id:$.id,name:$.name,payload:f0})}catch(f0){MZ(x,{type:"response",id:$.id,name:$.name,error:QB(f0)})}}function C0($){let x=$.buffer.indexOf(`
|
|
82
|
+
`);while(x!==-1){let f0=$.buffer.slice(0,x);if($.buffer=$.buffer.slice(x+1),f0.trim().length>0)try{let u=JSON.parse(f0);if(u.type!=="request")throw Error("daemon only accepts request frames from clients");V0(u,$)}catch(u){MZ($,{type:"response",id:"parse-error",error:{message:u instanceof Error?u.message:String(u)}})}x=$.buffer.indexOf(`
|
|
83
|
+
`)}}return e}async function VG(f){try{let J=await M2(f,"utf8"),Y=Number(J.trim());return Number.isFinite(Y)?Y:null}catch{return null}}function MZ(f,J){f.socket.write(lG(J))}function GK(f,J){let Y=J.type==="event"&&J.name!=="daemon.stopping"?J.name:null,z=null;for(let G of f){if(!G.subscribed&&J.type==="event")continue;if(Y&&G.channels&&!G.channels.has(Y))continue;z??=lG(J),G.socket.write(z)}}var g2=21600000,zK=3000;var rq=C(()=>{U1();IW();mV();pX();DB();sV();tV();wz();f7();rY();z7();o5();fK();pX();DB()});import{unlink as XK}from"fs/promises";function C2(f){try{return process.kill(f,0),!0}catch(J){return J.code==="EPERM"}}async function KG(f,J){let Y=await VG(J),z=Y!==null&&Y!==process.pid?Y:null,G=z!==null&&C2(z),Z=G?"graceful":"absent",q=new n1(f),Q=q.request("daemon.stop").catch(()=>{return}),H=new Promise((B)=>setTimeout(B,2000));if(await Promise.race([Q,H]),q.close(),G&&z!==null){let B=Date.now()+5000,V=!1;while(Date.now()<B){try{process.kill(z,0)}catch{break}if(!V&&Date.now()-(B-5000)>2000){try{process.kill(z,"SIGTERM")}catch{}Z="sigterm",V=!0}await new Promise((j)=>setTimeout(j,50))}try{process.kill(z,0),process.kill(z,"SIGKILL"),Z="sigkill",await new Promise((j)=>setTimeout(j,100))}catch{}}return await XK(f).catch(()=>{}),await XK(J).catch(()=>{}),{pid:Y,method:Z}}var pq=C(()=>{aG();rq()});var aB={};jf(aB,{testDaemonResponds:()=>_q,ensureDaemonReachable:()=>UG,connectOrStartDaemon:()=>UJ,connectIfRunning:()=>p1});import{spawn as k2}from"child_process";import{closeSync as N2,existsSync as y2,mkdirSync as b2,openSync as S2}from"fs";import{dirname as qK,resolve as Hj}from"path";import{fileURLToPath as I2}from"url";function E2(f,J,Y,z){let G="ignore",Z;try{b2(qK(z),{recursive:!0}),Z=S2(z,"a"),G=["ignore",Z,Z]}catch{G="ignore"}if(k2(f,[...J],{detached:!0,stdio:G,env:Y}).unref(),Z!==void 0)try{N2(Z)}catch{}}async function UG(){let f=CJ();if(await _q(f))return f;await KG(f,cJ()).catch(()=>{});let[J,...Y]=x2(T2);E2(J,Y,process.env,AX());let z=Date.now()+5000;while(Date.now()<z){if(await _q(f))return f;await new Promise((G)=>setTimeout(G,100))}throw Error(`kobe: daemon did not start (or stayed wedged) at ${f}`)}async function UJ(){let f=await UG(),J=new n1(f);return await J.connect(),J}async function p1(){let f=CJ();if(!await _q(f))return null;let J=new n1(f);return await J.connect(),J}async function _q(f,J=u2){let Y=new n1(f);try{await Y.connect()}catch{return Y.close(),!1}let z=Y.request("hello",{protocolVersion:c1}).then(()=>!0).catch(()=>!0),G,Z=new Promise((Q)=>{G=setTimeout(()=>Q(!1),J)}),q=await Promise.race([z,Z]);if(G)clearTimeout(G);return Y.close(),q}function x2(f){let J=I2(import.meta.url);if(J.startsWith("/$bunfs")||J.startsWith("B:\\~BUN"))return[process.execPath,...f];let Y=qK(J),z=[Hj(Y,"../cli/index.ts"),Hj(Y,"../../../kobe/src/cli/index.ts"),Hj(Y,"../cli/index.js")],G=z.find((Z)=>y2(Z));if(G)return[process.execPath,G,...f];throw Error(`kobe: could not locate kobe entry near ${Y}; checked ${z.join(", ")}`)}var T2,u2=3000;var y1=C(()=>{pq();wz();rY();aG();T2=["daemon","start"]});var jK={};jf(jK,{runExportSubcommand:()=>c2,renderExport:()=>BK});function w2(f){return{id:f.id,title:f.title,status:f.status,archived:String(f.archived),vendor:f.vendor??yf,branch:f.branch,repo:f.repo,worktreePath:f.worktreePath}}function Bj(f){process.stderr.write(`kobe export: ${f}
|
|
84
84
|
|
|
85
|
-
${
|
|
86
|
-
`),process.exit(2)}function
|
|
87
|
-
`)}function
|
|
88
|
-
`)}function
|
|
89
|
-
`);return}let
|
|
90
|
-
`);return}process.stdout.write(`${
|
|
91
|
-
`)}var
|
|
92
|
-
`),
|
|
85
|
+
${HK}
|
|
86
|
+
`),process.exit(2)}function h2(f){let J="json";for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="--json")J="json";else if(z==="--csv")J="csv";else if(z==="--format"){let G=f[++Y];if(G===void 0)Bj("--format requires a value (json, csv, or table)");J=QK(G)}else if(z.startsWith("--format="))J=QK(z.slice(9));else Bj(`unexpected argument "${z}"`)}return J}function QK(f){if(f==="json"||f==="csv"||f==="table")return f;Bj(`unknown format "${f}" (expected json, csv, or table)`)}function P2(f){if(/[",\r\n]/.test(f))return`"${f.replace(/"/g,'""')}"`;return f}function v2(f){let J=[FZ.join(",")];for(let Y of f)J.push(FZ.map((z)=>P2(Y[z])).join(","));return J.join(`
|
|
87
|
+
`)}function m2(f){let J={};for(let G of FZ)J[G]=Math.max(G.length,...f.map((Z)=>Z[G].length));let Y=(G)=>FZ.map((Z)=>G[Z].padEnd(J[Z])).join(" ").trimEnd(),z={};for(let G of FZ)z[G]=G;return[Y(z),...f.map(Y)].join(`
|
|
88
|
+
`)}function BK(f,J){let Y=f.map(w2);if(J==="json")return JSON.stringify(Y,null,2);if(J==="csv")return v2(Y);return m2(Y)}async function c2(f){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(`${HK}
|
|
89
|
+
`);return}let J=h2(f),{TaskIndexStore:Y}=await Promise.resolve().then(() => (PG(),JH)),z=new Y;await z.load();let G=z.list();if(G.length===0&&J==="table"){process.stdout.write(`no tasks
|
|
90
|
+
`);return}process.stdout.write(`${BK(G,J)}
|
|
91
|
+
`)}var HK,FZ;var WK=C(()=>{S1();HK=["Usage: kobe export [--json | --csv | --format <json|csv|table>]","","Print the task list (from ~/.kobe/tasks.json) to stdout. Read-only and","daemon-free \u2014 works with the kobe daemon down.","","Options:"," --json JSON array of tasks (default)"," --csv CSV with a header row"," --format <fmt> One of: json, csv, table"," -h, --help Print this help",""].join(`
|
|
92
|
+
`),FZ=["id","title","status","archived","vendor","branch","repo","worktreePath"]});var UK={};jf(UK,{runRepoSubcommand:()=>l2});import{readFileSync as n2}from"fs";import{resolve as oq}from"path";function SY(f){process.stderr.write(`kobe repo: ${f}
|
|
93
93
|
|
|
94
|
-
${
|
|
95
|
-
`),process.exit(2)}function
|
|
96
|
-
`);return}let{getRepoInitOverride:
|
|
97
|
-
`)});import{spawnSync as
|
|
94
|
+
${KK}
|
|
95
|
+
`),process.exit(2)}function VK(f){try{return n2(oq(process.cwd(),f),"utf8")}catch(J){SY(`cannot read ${f}: ${J instanceof Error?J.message:String(J)}`)}}function d2(f){let J={};for(let Y=0;Y<f.length;Y++){let z=f[Y],G=()=>{let Z=f[++Y];if(Z===void 0)SY(`${z} requires a value`);return Z};if(z==="--init-script")J.initScript=G();else if(z==="--init-script-file")J.initScript=VK(G());else if(z==="--init-prompt")J.initPrompt=G();else if(z==="--init-prompt-file")J.initPrompt=VK(G());else if(z.startsWith("-"))SY(`unknown flag "${z}"`);else if(J.path===void 0)J.path=z;else SY(`unexpected argument "${z}"`)}return J}function i2(f){let J,Y=!1,z=!1;for(let G of f)if(G==="--init-script")Y=!0;else if(G==="--init-prompt")z=!0;else if(G.startsWith("-"))SY(`unknown flag "${G}"`);else if(J===void 0)J=G;else SY(`unexpected argument "${G}"`);if(!Y&&!z)Y=!0,z=!0;return{path:J,clearScript:Y,clearPrompt:z}}async function l2(f){let[J,...Y]=f;if(J===void 0||J==="--help"||J==="-h"||J==="help"){process.stdout.write(`${KK}
|
|
96
|
+
`);return}let{getRepoInitOverride:z,setRepoInitOverride:G,resolveRepoRoot:Z}=await Promise.resolve().then(() => (gf(),ZY)),{existsSync:q}=await import("fs"),{join:Q}=await import("path");if(J==="show"){let[H]=Y.filter((L)=>!L.startsWith("-")),B=Z(oq(process.cwd(),H??".")),V=z(B),j=q(Q(B,".kobe","init.sh")),U=q(Q(B,".kobe","init-prompt.md"));console.log(`repo: ${B}`),console.log(` .kobe/init.sh: ${j?"present (wins)":"absent"}`),console.log(` .kobe/init-prompt.md: ${U?"present (wins)":"absent"}`),console.log(` override initScript: ${V.initScript?DG(V.initScript):"(unset)"}`),console.log(` override initPrompt: ${V.initPrompt?DG(V.initPrompt):"(unset)"}`);return}if(J==="set"){let H=d2(Y);if(H.initScript===void 0&&H.initPrompt===void 0)SY("set needs at least one of --init-script(-file) / --init-prompt(-file)");let B=Z(oq(process.cwd(),H.path??".")),V=G(B,{...H.initScript!==void 0?{initScript:H.initScript}:{},...H.initPrompt!==void 0?{initPrompt:H.initPrompt}:{}});console.log(`updated override for ${B}`),console.log(` initScript: ${V.initScript?DG(V.initScript):"(unset)"}`),console.log(` initPrompt: ${V.initPrompt?DG(V.initPrompt):"(unset)"}`);return}if(J==="unset"){let{path:H,clearScript:B,clearPrompt:V}=i2(Y),j=Z(oq(process.cwd(),H??".")),U=G(j,{...B?{initScript:""}:{},...V?{initPrompt:""}:{}});console.log(`cleared override for ${j}`),console.log(` initScript: ${U.initScript?DG(U.initScript):"(unset)"}`),console.log(` initPrompt: ${U.initPrompt?DG(U.initPrompt):"(unset)"}`);return}SY(`unknown verb "${J}"`)}function DG(f){let J=f.replace(/\s+/g," ").trim();return J.length>60?`"${J.slice(0,57)}\u2026"`:`"${J}"`}var KK;var DK=C(()=>{KK=["Usage: kobe repo <show|set|unset> [path] [options]","","Manage a repo's per-user init override (state.json fallback for repos","that don't ship .kobe/init.sh / .kobe/init-prompt.md).","","Commands:"," show [path] Print the override + whether the repo ships .kobe/ files"," set [path] <options> Set the init script and/or first prompt"," unset [path] [--init-script] [--init-prompt] Clear one or both (default: both)","","Set options (later wins; *-file reads from disk):"," --init-script <text> Inline shell to run before the engine"," --init-script-file <path> Read the init script from a file"," --init-prompt <text> Inline first prompt for the engine"," --init-prompt-file <path> Read the first prompt from a file",""," path defaults to the current directory (resolved to its git toplevel).",""].join(`
|
|
97
|
+
`)});import{spawnSync as a2}from"child_process";function p2(f){let[J,Y]=f.split("/");if(!J||!Y)throw Error(`invalid GitHub repository slug: ${f}`);return{owner:J,name:Y}}function LK(f,J){let Y=f.trim();if(!Y)throw Error(`${J} is required`);return Y}function MK(f,J){let Y=J?.map((z)=>typeof z.message==="string"?z.message:null).filter((z)=>!!z);if(Y&&Y.length>0)return Y.join("; ");return f.trim()||"GitHub CLI returned an empty response"}function FK(f,J,Y){let z=["api","graphql","-f",`query=${f}`];for(let[H,B]of Object.entries(J))z.push("-f",`${H}=${B}`);let G=Y.spawn("gh",z,{encoding:"utf8"});if(G.error)throw Error(`failed to run gh: ${G.error.message}`);let Z=typeof G.stdout==="string"?G.stdout:String(G.stdout??""),q=typeof G.stderr==="string"?G.stderr:String(G.stderr??""),Q;try{Q=JSON.parse(Z)}catch{throw Error(`failed to parse gh response: ${MK(q,void 0)}`)}if((G.status??0)!==0||Q.errors?.length)throw Error(MK(q,Q.errors));if(!Q.data)throw Error("GitHub CLI response did not include data");return Q.data}function _2(f){return`${f}
|
|
98
98
|
|
|
99
99
|
---
|
|
100
|
-
Submitted from kobe ${
|
|
100
|
+
Submitted from kobe ${o0}.`}function LG(f,J={}){let Y=LK(f.title,"feedback title"),z=_2(LK(f.body,"feedback body")),G=(J.repoSlug??nY)();if(!G)throw Error("package repository is not a GitHub repository");let{owner:Z,name:q}=p2(G),Q=f.categorySlug?.trim()||jj,H={spawn:J.spawn??a2},V=FK($2,{owner:Z,name:q},H).repository,j=V?.id;if(!j)throw Error(`GitHub repository not found: ${G}`);let U=V.discussionCategories?.nodes?.find((M)=>M.slug===Q);if(!U)throw Error(`GitHub Discussion category not found: ${Q}`);let O=FK(r2,{repositoryId:j,categoryId:U.id,title:Y,body:z},H).createDiscussion?.discussion;if(!O?.url||typeof O.number!=="number")throw Error("GitHub did not return the created Discussion");return{number:O.number,url:O.url}}var jj="feedback",$2=`
|
|
101
101
|
query($owner: String!, $name: String!) {
|
|
102
102
|
repository(owner: $owner, name: $name) {
|
|
103
103
|
id
|
|
@@ -110,7 +110,7 @@ query($owner: String!, $name: String!) {
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
`,
|
|
113
|
+
`,r2=`
|
|
114
114
|
mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!) {
|
|
115
115
|
createDiscussion(input: {
|
|
116
116
|
repositoryId: $repositoryId,
|
|
@@ -124,74 +124,74 @@ mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!)
|
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
|
-
`;var
|
|
128
|
-
`)}function
|
|
129
|
-
`)}function
|
|
130
|
-
`)}function
|
|
131
|
-
`),process.exit(
|
|
132
|
-
`);return}let
|
|
133
|
-
${
|
|
134
|
-
`);return}try{zH(X,z.flags)}catch(q){if(q instanceof U1)pY(q.message,q.code,2);pY(q instanceof Error?q.message:String(q),"BAD_FLAG",2)}let f=null;if(!X.offline)try{f=await Y6()}catch(q){pY(`could not reach or start the kobe daemon: ${q instanceof Error?q.message:String(q)}`,"BAD_DAEMON",2)}try{let q=await X.handler(W6(X,z.flags,f?.client??null,qH));qC(q,z.pretty)}catch(q){if(q instanceof U1)pY(q.message,q.code,1);pY(q instanceof Error?q.message:String(q),"RPC_ERROR",1)}finally{f?.close()}}var XH=2,VG=10,G6,ZC,U1,j1,$f,KG,UG,GC,f6,BC,qH;var K6=S(()=>{bJ();nf();N1();Vf();BJ();jJ();Z6();G6=["backlog","in_progress","in_review","done","canceled","error"],ZC=["open","doing","hold","done"];U1=class U1 extends Error{code;constructor(J,Y){super(J);this.code=Y}};j1={repo:(J=!0)=>({name:"repo",type:"string",required:J,placeholder:"PATH",description:"Repo root (git toplevel). Relative paths resolve against $PWD."}),taskId:(J=!0)=>({name:"task-id",type:"string",required:J,placeholder:"ID",description:"Target task id (from `list` / `add`)."}),vendor:()=>({name:"vendor",type:"enum",values:m1,placeholder:"V",description:"Engine vendor for the task."}),title:()=>({name:"title",type:"string",placeholder:"T",description:"Human task title."}),prompt:(J,Y)=>({name:"prompt",type:"string",required:J,placeholder:"TEXT",description:Y})},$f={"spawn-task":"add"},KG={discover:["schema"],read:["list","get-task","collect"],create:["add","fan-out"],drive:["send","dispatch","note","set-active"],edit:["rename","set-branch","set-vendor","set-status"],issues:["issue-list","issue-create","issue-set-status","issue-update"],lifecycle:["archive","pin","delete"],worktree:["ensure-worktree","adopt","discover-adoptable"],feedback:["feedback"]};UG=[{name:"schema",summary:"Explore the API. Default = a COMPACT index (groups + verb summaries, no flags). Drill in with --verb / --group; --all for the full spec.",flags:[{name:"verb",type:"string",placeholder:"NAME",description:"Full flag detail for ONE verb."},{name:"group",type:"string",placeholder:"G",description:"List the verbs in one group (compact)."},{name:"all",type:"bool",description:"The COMPLETE spec \u2014 every verb AND every flag (large; avoid by default)."}],offline:!0,handler:XC},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:DC},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[j1.taskId()],handler:LC},{name:"add",summary:"Create a task (shows in the sidebar immediately). With --prompt it also starts the engine and delivers it. Alias: spawn-task.",flags:[j1.repo(),j1.title(),{name:"branch",type:"string",placeholder:"B",description:"Explicit branch name (else auto kobe/<slug>-<id>)."},{name:"base-branch",type:"string",placeholder:"B",description:"Base ref the worktree branches from."},j1.vendor(),{name:"status",type:"enum",values:G6,default:"backlog",description:"Initial lifecycle status."},{name:"pin",type:"bool",description:"Pin the task to the top of the sidebar."},j1.prompt(!1,"Optional first message \u2014 when set, materializes the worktree, starts the engine, and pastes it.")],handler:WC},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${VG}.`,flags:[j1.repo(),j1.prompt(!0,"Shared prompt delivered to every spawned task."),{name:"count",type:"int",placeholder:"N",description:"Number of tasks of one vendor (with --vendor)."},{name:"agents",type:"string",placeholder:"claude:2,codex:1",description:"Per-vendor counts (alternative to --count)."},j1.vendor(),j1.title(),{name:"base-branch",type:"string",placeholder:"B",description:"Base ref for every worktree."}],handler:RC},{name:"send",summary:"Paste a follow-up prompt into a task's running engine (one full turn). Defaults to the active task.",flags:[j1.taskId(!1),j1.prompt(!0,"Text pasted + submitted into the engine pane.")],handler:VC},{name:"dispatch",summary:"Route text into a task's live session via the daemon's session.deliver channel \u2014 the front-end hosting the session pastes it. The dispatcher's messenger (docs/design/dispatcher.md); unlike `send`, it never spawns or touches tmux itself.",flags:[j1.taskId(!0),j1.prompt(!0,"Text delivered into the task's engine session.")],handler:KC},{name:"note",summary:"File a one-line field note \u2014 a resolved, repo-level gotcha worth sharing. kobe forwards it to the repo's dispatcher session (the main session), which relays it to the in-flight tasks that benefit (docs/design/dispatcher.md).",flags:[j1.taskId(!0),{name:"text",type:"string",required:!0,placeholder:"TEXT",description:"One line: the verified conclusion another session could act on."}],handler:UC},{name:"feedback",summary:"Create a GitHub Discussion in the kobe repo's Feedback category through `gh`.",flags:[{name:"title",type:"string",required:!0,placeholder:"T",description:"Discussion title."},{name:"body",type:"string",required:!0,placeholder:"TEXT",description:"Discussion body."},{name:"category",type:"string",default:ZH,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:gC},{name:"issue-list",summary:"List daemon-owned issues for a repo.",flags:[j1.repo()],handler:(J)=>WY(J,"issue.list",{repoRoot:J.args.requirePath("repo")})},{name:"issue-create",summary:"Create a daemon-owned issue for a repo.",flags:[j1.repo(),{name:"title",type:"string",required:!0,placeholder:"T",description:"Issue title."},{name:"body",type:"string",placeholder:"TEXT",description:"Issue body."}],handler:(J)=>WY(J,"issue.mutate",{repoRoot:J.args.requirePath("repo"),op:{type:"create",title:J.args.require("title"),body:J.args.str("body")}})},{name:"issue-set-status",summary:"Set a daemon-owned issue's status.",flags:[j1.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"status",type:"enum",required:!0,values:ZC,description:"New issue status."}],handler:(J)=>WY(J,"issue.mutate",{repoRoot:J.args.requirePath("repo"),op:{type:"setStatus",id:J.args.int("id"),status:J.args.requireEnum("status")}})},{name:"issue-update",summary:"Update a daemon-owned issue's title and/or body.",flags:[j1.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"title",type:"string",placeholder:"T",description:"New title."},{name:"body",type:"string",placeholder:"TEXT",description:"New body."}],handler:HC},{name:"collect",summary:"Read-only comparison snapshot of several tasks (identity, branch, .running, uncommitted .changes).",flags:[{name:"task-ids",type:"csv",placeholder:"a,b,c",description:"Comma-separated task ids."},j1.repo(!1)],handler:CC},{name:"rename",summary:"Set a task's title.",flags:[j1.taskId(),{name:"title",type:"string",required:!0,placeholder:"T",description:"New title."}],handler:(J)=>WY(J,"task.rename",{taskId:J.args.require("task-id"),title:J.args.require("title")})},{name:"set-branch",summary:"Rename a task's branch (git branch -m if materialized, else recorded).",flags:[j1.taskId(),{name:"branch",type:"string",required:!0,placeholder:"B",description:"New branch name."}],handler:(J)=>WY(J,"task.setBranch",{taskId:J.args.require("task-id"),branch:J.args.require("branch")})},{name:"set-vendor",summary:"Change a task's engine vendor (takes effect on next session rebuild).",flags:[j1.taskId(),{...j1.vendor(),required:!0}],handler:(J)=>WY(J,"task.setVendor",{taskId:J.args.require("task-id"),vendor:J.args.requireEnum("vendor")})},{name:"set-status",summary:"Set a task's lifecycle status.",flags:[j1.taskId(),{name:"status",type:"enum",required:!0,values:G6,description:"New status."}],handler:(J)=>WY(J,"task.status",{taskId:J.args.require("task-id"),status:J.args.requireEnum("status")})},{name:"archive",summary:"Archive (or with --archived=false, unarchive) a task. Non-destructive: worktree/branch/history stay.",flags:[j1.taskId(),{name:"archived",type:"bool",default:"true",description:"true to archive, false to unarchive."}],handler:FC},{name:"pin",summary:"Pin (or with --pinned=false, unpin) a task to the top of the sidebar.",flags:[j1.taskId(),{name:"pinned",type:"bool",default:"true",description:"true to pin, false to unpin."}],handler:(J)=>WY(J,"task.pin",{taskId:J.args.require("task-id"),pinned:J.args.bool("pinned")??!0})},{name:"set-active",summary:"Set the shared active task (the focus every Tasks pane highlights). Pass --none to clear.",flags:[j1.taskId(!1),{name:"none",type:"bool",description:"Clear the active task instead of setting one."}],handler:MC},{name:"ensure-worktree",summary:"Materialize a task's git worktree on disk now (without starting an engine). Returns { worktreePath }.",flags:[j1.taskId()],handler:(J)=>WY(J,"task.ensureWorktree",{taskId:J.args.require("task-id")})},{name:"delete",summary:"Permanently remove a task (and its worktree). DESTRUCTIVE \u2014 prefer `archive`. Needs --force on a dirty worktree.",flags:[j1.taskId(),{name:"force",type:"bool",description:"Delete even with uncommitted changes."}],handler:OC},{name:"discover-adoptable",summary:"List existing git worktrees in a repo not yet tracked as kobe tasks. Returns { worktrees }.",flags:[j1.repo()],handler:(J)=>WY(J,"worktree.discoverAdoptable",{repo:J.args.requirePath("repo")})},{name:"adopt",summary:"Import an existing git worktree as a kobe task. Returns { task }.",flags:[j1.repo(),{name:"worktree",type:"string",required:!0,placeholder:"PATH",description:"Path of the worktree to adopt."},{name:"branch",type:"string",placeholder:"B",description:"Branch override (else the worktree's own)."},j1.vendor(),j1.title()],handler:AC}],GC=UG.map((J)=>J.name);f6=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];BC={sessionExists:f1,ensureSession:async(J)=>(await Promise.resolve().then(() => (t1(),iJ))).ensureSession(J),waitForEnginePane:Zz,pasteAndSubmit:Xz,resolveEngineLaunchInit:async(J,Y,Z)=>(await Promise.resolve().then(() => (tX(),Rj))).resolveEngineLaunchInit(J,Y,Z),engineCommand:RJ};qH={isTaskRunning:(J)=>f1(K1(J)),deliverPrompt:(J,Y,Z)=>H6(J,Y,Z),resolveRepoRoot:async(J)=>(await Promise.resolve().then(() => (O1(),JZ))).resolveMainRepoRoot(J),defaultVendor:async()=>{let{getPersistedString:J}=await Promise.resolve().then(() => (O1(),JZ)),Y=J("lastSelectedVendor")?.trim();return Y?Y:void 0},readWorktreeChanges:async(J)=>(await Promise.resolve().then(() => (fG(),E5))).readWorktreeChanges(J),tearDownSession:async(J)=>{let Y=K1(J);await yY(Y).catch(()=>{}),await mJ(Y).catch(()=>{})}}});var M6={};q1(M6,{updatePlan:()=>U6,runUpdateSubcommand:()=>IC,parseUpdateArgs:()=>L6});import{spawnSync as kC}from"child_process";function U6(){return{command:"sh",args:["-c",EY],display:EY}}function L6(J){let Y=!1;for(let Z=0;Z<J.length;Z+=1){let X=J[Z];if(X==="--help"||X==="-h"||X==="help")return{help:!0,dryRun:Y};if(X==="--dry-run"){Y=!0;continue}process.stderr.write(`kobe update: unknown argument "${X}"
|
|
127
|
+
`;var sq=C(()=>{U1()});async function OK(f={}){let J=f.mode==="require-running"?await p1():await UJ();if(!J)return null;return{client:J,close:()=>J.close()}}var AK=C(()=>{y1()});var uK={};jf(uK,{verbSchema:()=>Dj,verbHelp:()=>SK,validateAgainstSpec:()=>Kj,schemaIndex:()=>yK,runApiSubcommand:()=>OC,parseFlags:()=>Vj,parseAgentsSpec:()=>kK,invokeVerb:()=>FC,fullSchema:()=>bK,findVerb:()=>OZ,deliverPrompt:()=>IK,defaultApiRuntime:()=>Lj,apiUsage:()=>tq,VerbArgs:()=>Uj,VERB_GROUPS:()=>FG,VERBS:()=>OG,FANOUT_CAP:()=>MG,ApiError:()=>Ff,API_VERBS:()=>t2,API_SCHEMA_VERSION:()=>Wj});import{resolve as gK}from"path";function CK(f){for(let[J,Y]of Object.entries(FG))if(Y.includes(f))return J;return"other"}async function s2(f){let J=f.args.str("verb");if(J){let z=OZ(J);if(!z)throw new Ff(`unknown verb: ${J}`,"BAD_VERB");return Dj(z)}let Y=f.args.str("group");if(Y)return fC(Y);if(f.args.bool("all"))return bK();return yK()}function OZ(f){let J=eq[f]??f;return OG.find((Y)=>Y.name===J)}function Vj(f,J=new Set){let Y=new Map,z=!1,G=!1;for(let Z=0;Z<f.length;Z++){let q=f[Z];if(!q.startsWith("--")&&q!=="-h")throw new Ff(`unexpected positional arg: ${q}`,"BAD_FLAG");if(q==="-h"){G=!0;continue}let Q=q.indexOf("=");if(Q!==-1){let V=q.slice(2,Q),j=q.slice(Q+1);if(V==="pretty")z=j!=="false"&&j!=="0";else if(V==="help")G=j!=="false"&&j!=="0";else Y.set(V,j);continue}let H=q.slice(2);if(H==="pretty"){z=!0;continue}if(H==="help"){G=!0;continue}if(J.has(H)){Y.set(H,"true");continue}let B=f[Z+1];if(B===void 0||B.startsWith("--"))throw new Ff(`flag --${H} requires a value`,"BAD_FLAG");Y.set(H,B),Z+=1}return{flags:Y,pretty:z,help:G}}function Kj(f,J){let Y=new Set(f.flags.map((z)=>z.name));for(let z of J.keys())if(!Y.has(z))throw new Ff(`unknown flag --${z} for "${f.name}". Run \`kobe api ${f.name} --help\``,"BAD_FLAG");for(let z of f.flags){if(z.required&&!J.get(z.name))throw new Ff(`--${z.name} is required for "${f.name}"`,"MISSING_FLAG");if(z.type==="enum"&&z.values){let G=J.get(z.name);if(G!==void 0&&!z.values.includes(G))throw new Ff(`--${z.name} must be one of ${z.values.join(", ")}`,"BAD_FLAG")}if(z.type==="int"){let G=J.get(z.name);if(G!==void 0){let Z=Number.parseInt(G,10);if(!Number.isInteger(Z)||Z<=0)throw new Ff(`--${z.name} must be a positive integer`,"BAD_FLAG")}}}}class Uj{verb;flags;constructor(f,J){this.verb=f;this.flags=J}spec(f){let J=this.verb.flags.find((Y)=>Y.name===f);if(!J)throw Error(`internal: --${f} is not declared on verb "${this.verb.name}"`);return J}str(f){this.spec(f);let J=this.flags.get(f);return J&&J.length>0?J:void 0}require(f){let J=this.str(f);if(J===void 0)throw new Ff(`--${f} is required`,"MISSING_FLAG");return J}enumOf(f){let J=this.spec(f),Y=this.str(f);if(Y===void 0)return;if(J.values&&!J.values.includes(Y))throw new Ff(`--${f} must be one of ${J.values.join(", ")}`,"BAD_FLAG");return Y}requireEnum(f){return this.require(f),this.enumOf(f)}vendor(){return this.enumOf("vendor")}bool(f){this.spec(f);let J=this.str(f);if(J===void 0)return;if(["true","1","yes"].includes(J))return!0;if(["false","0","no"].includes(J))return!1;throw new Ff(`--${f} must be a boolean (true/false)`,"BAD_FLAG")}int(f){this.spec(f);let J=this.str(f);if(J===void 0)return;let Y=Number.parseInt(J,10);if(!Number.isInteger(Y)||Y<=0)throw new Ff(`--${f} must be a positive integer`,"BAD_FLAG");return Y}path(f){let J=this.str(f);return J===void 0?void 0:gK(process.cwd(),J)}requirePath(f){return gK(process.cwd(),this.require(f))}}function kK(f){let J=[];for(let Y of f.split(",")){let z=Y.trim();if(!z)continue;let G=z.indexOf(":");if(G===-1)throw new Ff(`--agents entry "${z}" must be vendor:count`,"BAD_FLAG");let Z=z.slice(0,G);if(!mf.includes(Z))throw new Ff(`--agents vendor "${Z}" must be one of ${mf.join(", ")}`,"BAD_FLAG");let q=Number.parseInt(z.slice(G+1),10);if(!Number.isInteger(q)||q<=0)throw new Ff(`--agents count for "${Z}" must be a positive integer`,"BAD_FLAG");if(J.length+q>MG)throw new Ff(`--agents requests ${J.length+q} agents, exceeds the cap of ${MG}`,"BAD_FLAG");for(let Q=0;Q<q;Q++)J.push(Z)}if(J.length===0)throw new Ff('--agents specified no agents (e.g. "claude:2,codex:1")',"BAD_FLAG");return J}function e2(f){return{name:f.name,type:f.type,required:f.required??!1,...f.values?{values:f.values}:{},...f.default!==void 0?{default:f.default}:{},...f.placeholder?{placeholder:f.placeholder}:{},description:f.description}}function Dj(f){return{name:f.name,group:CK(f.name),summary:f.summary,offline:f.offline??!1,flags:f.flags.map(e2)}}function yK(){return{apiVersion:Wj,kobeVersion:o0,hint:"Compact index. Drill into ONE verb: `kobe api schema --verb <name>` (or `kobe api <verb> --help`). One group: `--group <g>`. Whole spec: `--all`.",groups:FG,verbs:OG.map((f)=>({name:f.name,group:CK(f.name),summary:f.summary})),globalFlags:NK,aliases:eq}}function fC(f){let J=FG[f];if(!J)throw new Ff(`unknown group: ${f}. Groups: ${Object.keys(FG).join(", ")}`,"BAD_FLAG");return{group:f,verbs:J.map((Y)=>{let z=OZ(Y);return{name:Y,summary:z?.summary??""}})}}function bK(){return{apiVersion:Wj,kobeVersion:o0,output:{success:"one JSON object on stdout, newline-terminated, exit 0",error:'{"error":{"message","code"}} on stderr, exit != 0',pretty:"--pretty indents stdout JSON"},globalFlags:NK,aliases:eq,groups:FG,verbs:OG.map(Dj)}}function JC(f){return f.flags.map((J)=>{let Y=J.type==="enum"&&J.values?J.values.join("|"):J.placeholder??(J.type==="bool"?"":"X"),z=Y?`--${J.name} ${Y}`:`--${J.name}`;return J.required?z:`[${z}]`}).join(" ")}function SK(f){let J=[`kobe api ${f.name} ${JC(f)}`.trimEnd(),"",f.summary,""],Y=Object.entries(eq).find(([,z])=>z===f.name)?.[0];if(Y)J.push(`Alias: ${Y}`,"");if(f.flags.length>0){J.push("Flags:");for(let z of f.flags){let G=z.required?" (required)":"",Z=z.default!==void 0?` [default: ${z.default}]`:"",q=z.type==="enum"&&z.values?` {${z.values.join("|")}}`:"";J.push(` --${z.name}${q}${G}${Z} ${z.description}`)}J.push("")}return J.push("Global: [--pretty] [--help]"),J.join(`
|
|
128
|
+
`)}function tq(){return["usage: kobe api <verb> [flags] [--pretty] [--help]","","Explore the full surface (names, flags, types) with: kobe api schema","","verbs:",...OG.map((J)=>` ${J.name.padEnd(18)} ${J.summary}`),"","Output is one JSON object on stdout (exit 0); errors are JSON on stderr (exit != 0)."].join(`
|
|
129
|
+
`)}function YC(f,J){let Y=J?JSON.stringify(f,null,2):JSON.stringify(f);process.stdout.write(`${Y}
|
|
130
|
+
`)}function oJ(f,J,Y=1){process.stderr.write(`${JSON.stringify({error:{message:f,code:J}})}
|
|
131
|
+
`),process.exit(Y)}async function IK(f,J,Y,z=zC){let G=J.worktreePath;if(!G)G=(await f.request("task.ensureWorktree",{taskId:J.id})).worktreePath;if(!G)throw new Ff(`task ${J.id} has no worktree`,"NO_WORKTREE");let Z=Mf(J.id),q=await z.sessionExists(Z);if(!q){let B=await z.resolveEngineLaunchInit(J.repo??"",G,{kind:"none"});if(!await z.ensureSession({name:Z,cwd:G,command:z.engineCommand(J.vendor),taskId:J.id,vendor:J.vendor,repo:J.repo,launchInit:B}))throw new Ff(`failed to start tmux session for ${J.id}`,"SESSION_FAILED")}let{pane:Q,ready:H}=await z.waitForEnginePane(Z,!q);if(!Q)throw new Ff(`no engine pane in session ${Z}`,"NO_ENGINE_PANE");return await z.pasteAndSubmit(Q,Y),{session:Z,pane:Q,started:!q,engineReady:H}}async function GC(f){let J=null,Y=f.onChannel("active-task",(z)=>{J=z.taskId});try{await f.subscribe()}finally{Y()}return J}function w1(f){if(!f.client)throw new Ff("daemon required","BAD_DAEMON");return f.client}async function DJ(f,J,Y){return w1(f).request(J,Y)}async function ZC(f){let J=f.args.str("title"),Y=f.args.str("body");if(J===void 0&&Y===void 0)throw new Ff("issue-update requires --title and/or --body","MISSING_FLAG");return DJ(f,"issue.mutate",{repoRoot:f.args.requirePath("repo"),op:{type:"update",id:f.args.int("id"),title:J,body:Y}})}async function XC(f){let J=w1(f),{args:Y,runtime:z}=f,Z={repo:await z.resolveRepoRoot(Y.requirePath("repo"))},q=Y.str("title");if(q)Z.title=q;let Q=Y.str("branch");if(Q)Z.branch=Q;let H=Y.str("base-branch");if(H)Z.baseRef=H;let B=Y.vendor()??await z.defaultVendor();if(B)Z.vendor=B;let V=await J.request("task.create",Z),j=V.taskId;await J.request("task.setActive",{taskId:j});let U=Y.enumOf("status");if(U)await J.request("task.status",{taskId:j,status:U});let L=Y.bool("pin");if(L!==void 0)await J.request("task.pin",{taskId:j,pinned:L});let O=V.task;if(U||L!==void 0)O=(await J.request("task.get",{taskId:j})).task;let M=Y.str("prompt");if(!M)return{taskId:j,task:O,started:!1};let g=await f.runtime.deliverPrompt(J,{id:j,worktreePath:O.worktreePath,vendor:O.vendor,repo:O.repo},M);return O=(await J.request("task.get",{taskId:j})).task,{taskId:j,task:O,started:g.started,engineReady:g.engineReady,session:g.session}}async function qC(f){let J=w1(f),Y=f.args.require("prompt"),z=f.args.str("task-id");if(!z){let q=await GC(J);if(!q)throw new Ff("no --task-id given and no active task \u2014 open a task first or pass --task-id","MISSING_TARGET");z=q}let G=await J.request("task.get",{taskId:z}),Z=await f.runtime.deliverPrompt(J,{id:z,worktreePath:G.task.worktreePath,vendor:G.task.vendor,repo:G.task.repo},Y);return{ok:!0,taskId:z,session:Z.session,started:Z.started,engineReady:Z.engineReady}}async function QC(f){let J=w1(f),Y=f.args.require("task-id"),z=f.args.require("prompt");return await J.request("session.deliver",{taskId:Y,text:z,source:"dispatcher"}),{ok:!0,taskId:Y,routed:"session.deliver"}}async function HC(f){let J=w1(f),Y=f.args.require("task-id"),z=f.args.require("text");return await J.request("note.file",{taskId:Y,text:z})}async function BC(f){let J=w1(f),Y=f.args.require("task-id"),z=await J.request("task.get",{taskId:Y}),G=await f.runtime.isTaskRunning(Y);return{task:z.task,running:G}}async function jC(f){return w1(f).request("task.list")}async function WC(f){let J=w1(f),z=f.args.bool("none")?null:f.args.require("task-id");return await J.request("task.setActive",{taskId:z}),{ok:!0,activeTaskId:z}}async function VC(f){let J=w1(f),Y=f.args.require("task-id"),z=f.args.bool("archived")??!0,G=await J.request("task.archive",{taskId:Y,archived:z});if(z)await f.runtime.tearDownSession(Y);return G}async function KC(f){let J=w1(f),Y=f.args.require("task-id"),z=f.args.bool("force")??!1,G=await J.request("task.delete",{taskId:Y,force:z});return await f.runtime.tearDownSession(Y),G}async function UC(f){let J=w1(f),{args:Y}=f,z={repo:Y.requirePath("repo"),worktreePath:Y.requirePath("worktree")},G=Y.str("branch");if(G)z.branch=G;let Z=Y.vendor();if(Z)z.vendor=Z;let q=Y.str("title");if(q)z.title=q;return J.request("worktree.adopt",z)}async function DC(f){let J=w1(f),{args:Y,runtime:z}=f,G=await z.resolveRepoRoot(Y.requirePath("repo")),Z=Y.require("prompt"),q=Y.str("title"),Q=Y.str("base-branch"),H=Y.str("agents"),B=await z.defaultVendor(),V=H?kK(H):Array(Y.int("count")??1).fill(Y.vendor()??B??"claude");if(V.length>MG)throw new Ff(`fan-out of ${V.length} exceeds the cap of ${MG} \u2014 spawn in batches`,"BAD_FLAG");let j=[];for(let U of V){let L={repo:G,vendor:U};if(q)L.title=q;if(Q)L.baseRef=Q;let O=await J.request("task.create",L),M=await f.runtime.deliverPrompt(J,{id:O.taskId,worktreePath:O.task.worktreePath,vendor:U,repo:O.task.repo},Z);j.push({taskId:O.taskId,vendor:U,started:M.started,engineReady:M.engineReady,session:M.session})}return{count:j.length,tasks:j}}async function LC(f){let J=w1(f),{args:Y,runtime:z}=f,G=Y.str("task-ids"),Z=Y.path("repo"),q;if(G)q=G.split(",").map((H)=>H.trim()).filter(Boolean);else if(Z){let H=await z.resolveRepoRoot(Z),{tasks:B}=await J.request("task.list");q=[];for(let V of B){if(V.archived)continue;if(await z.resolveRepoRoot(V.repo)===H)q.push(V.id)}}else throw new Ff("collect needs --task-ids id1,id2 or --repo PATH","MISSING_TARGET");let Q=[];for(let H of q){let{task:B}=await J.request("task.get",{taskId:H}),V=await z.isTaskRunning(H),j=B.worktreePath?await z.readWorktreeChanges(B.worktreePath):{added:0,deleted:0};Q.push({taskId:B.id,title:B.title,branch:B.branch,worktreePath:B.worktreePath,vendor:B.vendor,status:B.status,running:V,changes:j})}return{tasks:Q}}async function MC(f){return{ok:!0,discussion:LG({title:f.args.require("title"),body:f.args.require("body"),categorySlug:f.args.str("category")})}}function TK(f,J,Y,z){return{args:new Uj(f,J),client:Y,runtime:z}}async function FC(f,J,Y){let z=OZ(f);if(!z)throw new Ff(`unknown verb: ${f}`,"BAD_VERB");let G=new Set(z.flags.filter((q)=>q.type==="bool").map((q)=>q.name)),Z=Vj(J,G);return Kj(z,Z.flags),z.handler(TK(z,Z.flags,Y.client,Y.runtime??Lj))}async function OC(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(!J)oJ(tq(),"MISSING_VERB",2);process.stdout.write(`${tq()}
|
|
132
|
+
`);return}let z=OZ(J);if(!z)oJ(`unknown verb: ${J}
|
|
133
|
+
${tq()}`,"BAD_VERB",2);let G=new Set(z.flags.filter((Q)=>Q.type==="bool").map((Q)=>Q.name)),Z;try{Z=Vj(Y,G)}catch(Q){if(Q instanceof Ff)oJ(Q.message,Q.code,2);oJ(Q instanceof Error?Q.message:String(Q),"BAD_FLAG",2)}if(Z.help){process.stdout.write(`${SK(z)}
|
|
134
|
+
`);return}try{Kj(z,Z.flags)}catch(Q){if(Q instanceof Ff)oJ(Q.message,Q.code,2);oJ(Q instanceof Error?Q.message:String(Q),"BAD_FLAG",2)}let q=null;if(!z.offline)try{q=await OK()}catch(Q){oJ(`could not reach or start the kobe daemon: ${Q instanceof Error?Q.message:String(Q)}`,"BAD_DAEMON",2)}try{let Q=await z.handler(TK(z,Z.flags,q?.client??null,Lj));YC(Q,Z.pretty)}catch(Q){if(Q instanceof Ff)oJ(Q.message,Q.code,1);oJ(Q instanceof Error?Q.message:String(Q),"RPC_ERROR",1)}finally{q?.close()}}var Wj=2,MG=10,RK,o2,Ff,Vf,eq,FG,OG,t2,NK,zC,Lj;var EK=C(()=>{E1();sq();Sf();gq();K1();U1();AK();RK=["backlog","in_progress","in_review","done","canceled","error"],o2=["open","doing","hold","done"];Ff=class Ff extends Error{code;constructor(f,J){super(f);this.code=J}};Vf={repo:(f=!0)=>({name:"repo",type:"string",required:f,placeholder:"PATH",description:"Repo root (git toplevel). Relative paths resolve against $PWD."}),taskId:(f=!0)=>({name:"task-id",type:"string",required:f,placeholder:"ID",description:"Target task id (from `list` / `add`)."}),vendor:()=>({name:"vendor",type:"enum",values:mf,placeholder:"V",description:"Engine vendor for the task."}),title:()=>({name:"title",type:"string",placeholder:"T",description:"Human task title."}),prompt:(f,J)=>({name:"prompt",type:"string",required:f,placeholder:"TEXT",description:J})},eq={"spawn-task":"add"},FG={discover:["schema"],read:["list","get-task","collect"],create:["add","fan-out"],drive:["send","dispatch","note","set-active"],edit:["rename","set-branch","set-vendor","set-status"],issues:["issue-list","issue-create","issue-set-status","issue-update"],lifecycle:["archive","pin","delete"],worktree:["ensure-worktree","adopt","discover-adoptable"],feedback:["feedback"]};OG=[{name:"schema",summary:"Explore the API. Default = a COMPACT index (groups + verb summaries, no flags). Drill in with --verb / --group; --all for the full spec.",flags:[{name:"verb",type:"string",placeholder:"NAME",description:"Full flag detail for ONE verb."},{name:"group",type:"string",placeholder:"G",description:"List the verbs in one group (compact)."},{name:"all",type:"bool",description:"The COMPLETE spec \u2014 every verb AND every flag (large; avoid by default)."}],offline:!0,handler:s2},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:jC},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[Vf.taskId()],handler:BC},{name:"add",summary:"Create a task (shows in the sidebar immediately). With --prompt it also starts the engine and delivers it. Alias: spawn-task.",flags:[Vf.repo(),Vf.title(),{name:"branch",type:"string",placeholder:"B",description:"Explicit branch name (else auto kobe/<slug>-<id>)."},{name:"base-branch",type:"string",placeholder:"B",description:"Base ref the worktree branches from."},Vf.vendor(),{name:"status",type:"enum",values:RK,default:"backlog",description:"Initial lifecycle status."},{name:"pin",type:"bool",description:"Pin the task to the top of the sidebar."},Vf.prompt(!1,"Optional first message \u2014 when set, materializes the worktree, starts the engine, and pastes it.")],handler:XC},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${MG}.`,flags:[Vf.repo(),Vf.prompt(!0,"Shared prompt delivered to every spawned task."),{name:"count",type:"int",placeholder:"N",description:"Number of tasks of one vendor (with --vendor)."},{name:"agents",type:"string",placeholder:"claude:2,codex:1",description:"Per-vendor counts (alternative to --count)."},Vf.vendor(),Vf.title(),{name:"base-branch",type:"string",placeholder:"B",description:"Base ref for every worktree."}],handler:DC},{name:"send",summary:"Paste a follow-up prompt into a task's running engine (one full turn). Defaults to the active task.",flags:[Vf.taskId(!1),Vf.prompt(!0,"Text pasted + submitted into the engine pane.")],handler:qC},{name:"dispatch",summary:"Route text into a task's live session via the daemon's session.deliver channel \u2014 the front-end hosting the session pastes it. The dispatcher's messenger (docs/design/dispatcher.md); unlike `send`, it never spawns or touches tmux itself.",flags:[Vf.taskId(!0),Vf.prompt(!0,"Text delivered into the task's engine session.")],handler:QC},{name:"note",summary:"File a one-line field note \u2014 a resolved, repo-level gotcha worth sharing. kobe forwards it to the repo's dispatcher session (the main session), which relays it to the in-flight tasks that benefit (docs/design/dispatcher.md).",flags:[Vf.taskId(!0),{name:"text",type:"string",required:!0,placeholder:"TEXT",description:"One line: the verified conclusion another session could act on."}],handler:HC},{name:"feedback",summary:"Create a GitHub Discussion in the kobe repo's Feedback category through `gh`.",flags:[{name:"title",type:"string",required:!0,placeholder:"T",description:"Discussion title."},{name:"body",type:"string",required:!0,placeholder:"TEXT",description:"Discussion body."},{name:"category",type:"string",default:jj,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:MC},{name:"issue-list",summary:"List daemon-owned issues for a repo.",flags:[Vf.repo()],handler:(f)=>DJ(f,"issue.list",{repoRoot:f.args.requirePath("repo")})},{name:"issue-create",summary:"Create a daemon-owned issue for a repo.",flags:[Vf.repo(),{name:"title",type:"string",required:!0,placeholder:"T",description:"Issue title."},{name:"body",type:"string",placeholder:"TEXT",description:"Issue body."}],handler:(f)=>DJ(f,"issue.mutate",{repoRoot:f.args.requirePath("repo"),op:{type:"create",title:f.args.require("title"),body:f.args.str("body")}})},{name:"issue-set-status",summary:"Set a daemon-owned issue's status.",flags:[Vf.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"status",type:"enum",required:!0,values:o2,description:"New issue status."}],handler:(f)=>DJ(f,"issue.mutate",{repoRoot:f.args.requirePath("repo"),op:{type:"setStatus",id:f.args.int("id"),status:f.args.requireEnum("status")}})},{name:"issue-update",summary:"Update a daemon-owned issue's title and/or body.",flags:[Vf.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"title",type:"string",placeholder:"T",description:"New title."},{name:"body",type:"string",placeholder:"TEXT",description:"New body."}],handler:ZC},{name:"collect",summary:"Read-only comparison snapshot of several tasks (identity, branch, .running, uncommitted .changes).",flags:[{name:"task-ids",type:"csv",placeholder:"a,b,c",description:"Comma-separated task ids."},Vf.repo(!1)],handler:LC},{name:"rename",summary:"Set a task's title.",flags:[Vf.taskId(),{name:"title",type:"string",required:!0,placeholder:"T",description:"New title."}],handler:(f)=>DJ(f,"task.rename",{taskId:f.args.require("task-id"),title:f.args.require("title")})},{name:"set-branch",summary:"Rename a task's branch (git branch -m if materialized, else recorded).",flags:[Vf.taskId(),{name:"branch",type:"string",required:!0,placeholder:"B",description:"New branch name."}],handler:(f)=>DJ(f,"task.setBranch",{taskId:f.args.require("task-id"),branch:f.args.require("branch")})},{name:"set-vendor",summary:"Change a task's engine vendor (takes effect on next session rebuild).",flags:[Vf.taskId(),{...Vf.vendor(),required:!0}],handler:(f)=>DJ(f,"task.setVendor",{taskId:f.args.require("task-id"),vendor:f.args.requireEnum("vendor")})},{name:"set-status",summary:"Set a task's lifecycle status.",flags:[Vf.taskId(),{name:"status",type:"enum",required:!0,values:RK,description:"New status."}],handler:(f)=>DJ(f,"task.status",{taskId:f.args.require("task-id"),status:f.args.requireEnum("status")})},{name:"archive",summary:"Archive (or with --archived=false, unarchive) a task. Non-destructive: worktree/branch/history stay.",flags:[Vf.taskId(),{name:"archived",type:"bool",default:"true",description:"true to archive, false to unarchive."}],handler:VC},{name:"pin",summary:"Pin (or with --pinned=false, unpin) a task to the top of the sidebar.",flags:[Vf.taskId(),{name:"pinned",type:"bool",default:"true",description:"true to pin, false to unpin."}],handler:(f)=>DJ(f,"task.pin",{taskId:f.args.require("task-id"),pinned:f.args.bool("pinned")??!0})},{name:"set-active",summary:"Set the shared active task (the focus every Tasks pane highlights). Pass --none to clear.",flags:[Vf.taskId(!1),{name:"none",type:"bool",description:"Clear the active task instead of setting one."}],handler:WC},{name:"ensure-worktree",summary:"Materialize a task's git worktree on disk now (without starting an engine). Returns { worktreePath }.",flags:[Vf.taskId()],handler:(f)=>DJ(f,"task.ensureWorktree",{taskId:f.args.require("task-id")})},{name:"delete",summary:"Permanently remove a task (and its worktree). DESTRUCTIVE \u2014 prefer `archive`. Needs --force on a dirty worktree.",flags:[Vf.taskId(),{name:"force",type:"bool",description:"Delete even with uncommitted changes."}],handler:KC},{name:"discover-adoptable",summary:"List existing git worktrees in a repo not yet tracked as kobe tasks. Returns { worktrees }.",flags:[Vf.repo()],handler:(f)=>DJ(f,"worktree.discoverAdoptable",{repo:f.args.requirePath("repo")})},{name:"adopt",summary:"Import an existing git worktree as a kobe task. Returns { task }.",flags:[Vf.repo(),{name:"worktree",type:"string",required:!0,placeholder:"PATH",description:"Path of the worktree to adopt."},{name:"branch",type:"string",placeholder:"B",description:"Branch override (else the worktree's own)."},Vf.vendor(),Vf.title()],handler:UC}],t2=OG.map((f)=>f.name);NK=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];zC={sessionExists:Bf,ensureSession:async(f)=>(await Promise.resolve().then(() => (J1(),r1))).ensureSession(f),waitForEnginePane:jZ,pasteAndSubmit:WZ,resolveEngineLaunchInit:async(f,J,Y)=>(await Promise.resolve().then(() => (zG(),TB))).resolveEngineLaunchInit(f,J,Y),engineCommand:N1};Lj={isTaskRunning:(f)=>Bf(Mf(f)),deliverPrompt:(f,J,Y)=>IK(f,J,Y),resolveRepoRoot:async(f)=>(await Promise.resolve().then(() => (gf(),ZY))).resolveMainRepoRoot(f),defaultVendor:async()=>{let{getPersistedString:f}=await Promise.resolve().then(() => (gf(),ZY)),J=f("lastSelectedVendor")?.trim();return J?J:void 0},readWorktreeChanges:async(f)=>(await Promise.resolve().then(() => (WG(),s5))).readWorktreeChanges(f),tearDownSession:async(f)=>{let J=Mf(f);await bJ(J).catch(()=>{}),await i1(J).catch(()=>{})}}});var PK={};jf(PK,{updatePlan:()=>xK,runUpdateSubcommand:()=>gC,parseUpdateArgs:()=>wK});import{spawnSync as AC}from"child_process";function xK(){return{command:"sh",args:["-c",wJ],display:wJ}}function wK(f){let J=!1;for(let Y=0;Y<f.length;Y+=1){let z=f[Y];if(z==="--help"||z==="-h"||z==="help")return{help:!0,dryRun:J};if(z==="--dry-run"){J=!0;continue}process.stderr.write(`kobe update: unknown argument "${z}"
|
|
135
135
|
|
|
136
|
-
`),
|
|
137
|
-
`))}async function
|
|
138
|
-
`),
|
|
139
|
-
`),
|
|
140
|
-
`),
|
|
141
|
-
`),process.exit(1)}function
|
|
136
|
+
`),hK(process.stderr),process.exit(2)}return{help:!1,dryRun:J}}function hK(f){f.write(["Usage: kobe update [--dry-run]","","Runs kobe's GitHub-hosted update script.","","Default command:",` ${wJ}`,"","Script URL:",` ${sZ}`,"","Manual fallback:",` ${nQ()}`,"","Examples:"," kobe update"," kobe update --dry-run",""].join(`
|
|
137
|
+
`))}async function gC(f,J){let Y={spawn:J?.spawn??AC,stdout:J?.stdout??process.stdout,stderr:J?.stderr??process.stderr,exit:J?.exit??((q)=>process.exit(q))},z=wK(f);if(z.help){hK(Y.stdout);return}let G=xK();if(Y.stdout.write(`kobe ${o0} -> latest
|
|
138
|
+
`),Y.stdout.write(`running: ${G.display}
|
|
139
|
+
`),z.dryRun)return;let Z=Y.spawn(G.command,G.args,{stdio:"inherit"});if(Z.error)Y.stderr.write(`kobe update: failed to run ${G.command}: ${Z.error.message}
|
|
140
|
+
`),Y.exit(1);Y.exit(Z.status??1)}var vK=C(()=>{U1()});var dK={};jf(dK,{runThemeSubcommand:()=>xC});import{existsSync as cK,mkdirSync as RC,readFileSync as CC,readdirSync as kC,unlinkSync as NC,writeFileSync as yC}from"fs";import{basename as mK,join as Fj,resolve as bC}from"path";function sJ(f){process.stderr.write(`kobe theme: ${f}
|
|
141
|
+
`),process.exit(1)}function IY(f){process.stderr.write(`kobe theme: ${f}
|
|
142
142
|
|
|
143
|
-
`),
|
|
143
|
+
`),nK(),process.exit(2)}function SC(){let f=[];f.push("bundled:");for(let z of[...Mj].sort())f.push(` ${z} [built-in]`);let J=XG(),Y=[];try{Y=kC(J).filter((z)=>z.endsWith(".json")).sort()}catch{}if(f.push(""),f.push(`user (${J}):`),Y.length===0)f.push(" (none)");else for(let z of Y){let G=z.slice(0,-5),Z=Fj(J,z),q=Mj.includes(G)?" (overrides built-in)":"";f.push(` ${G}${q} ${Z}`)}process.stdout.write(`${f.join(`
|
|
144
144
|
`)}
|
|
145
|
-
`)}async function
|
|
146
|
-
`,"utf8"),process.stdout.write(`installed theme "${
|
|
147
|
-
`)}function
|
|
148
|
-
`)}function
|
|
149
|
-
`))}async function
|
|
145
|
+
`)}async function IC(f){if(/^https?:\/\//i.test(f)){let Z;try{Z=await fetch(f)}catch(V){sJ(`failed to fetch ${f}: ${V instanceof Error?V.message:String(V)}`)}if(!Z.ok)sJ(`failed to fetch ${f}: HTTP ${Z.status} ${Z.statusText}`);let q=await Z.text(),Q=f.split(/[?#]/)[0]??f,H=mK(Q)||"theme.json",B=H.endsWith(".json")?H.slice(0,-5):H;return{text:q,defaultName:B}}let J=bC(process.cwd(),f),Y;try{Y=CC(J,"utf8")}catch(Z){sJ(`failed to read ${J}: ${Z instanceof Error?Z.message:String(Z)}`)}let z=mK(J),G=z.endsWith(".json")?z.slice(0,-5):z;return{text:Y,defaultName:G}}function TC(f){let J=null,Y,z=!1;for(let G=0;G<f.length;G+=1){let Z=f[G];if(Z==="--force"||Z==="-f"){z=!0;continue}if(Z==="--name"||Z==="-n"){let q=f[G+1];if(q===void 0)IY("--name requires a value");Y=q,G+=1;continue}if(Z.startsWith("--name=")){Y=Z.slice(7);continue}if(Z.startsWith("--"))IY(`unknown flag: ${Z}`);if(J===null){J=Z;continue}IY(`unexpected positional argument: ${Z}`)}if(J===null)IY("missing <source> (URL or path to theme JSON)");return{source:J,opts:{name:Y,force:z}}}async function uC(f){let{source:J,opts:Y}=TC(f),{text:z,defaultName:G}=await IC(J),Z;try{Z=JSON.parse(z)}catch(V){sJ(`source is not valid JSON: ${V instanceof Error?V.message:String(V)}`)}let q=Cq(Z);if(!q.ok)sJ(`source is not a valid kobe theme: ${q.reason}`);let Q=Y.name??G;if(!Q||!/^[a-zA-Z0-9._-]+$/.test(Q))sJ(`invalid theme name "${Q}" (use letters, digits, '.', '_', '-')`);let H=XG();RC(H,{recursive:!0});let B=Fj(H,`${Q}.json`);if(cK(B)&&!Y.force)sJ(`${B} already exists (pass --force to overwrite)`);yC(B,`${JSON.stringify(q.theme,null,2)}
|
|
146
|
+
`,"utf8"),process.stdout.write(`installed theme "${Q}" -> ${B}
|
|
147
|
+
`)}function EC(f){let J=f[0];if(!J)IY("missing <name>");if(f.length>1)IY(`unexpected extra arguments after "${J}"`);if(Mj.includes(J))sJ(`"${J}" is a built-in theme and cannot be removed`);let Y=Fj(XG(),`${J}.json`);if(!cK(Y))sJ(`no user theme named "${J}" (looked for ${Y})`);NC(Y),process.stdout.write(`removed theme "${J}" (${Y})
|
|
148
|
+
`)}function nK(){process.stderr.write(["Usage: kobe theme <command> [args]","","Commands:"," list List bundled and user-installed themes"," add <source> [--name <name>] Install a theme from a URL or local path"," Pass --force to overwrite an existing user theme"," remove <name> Remove a user-installed theme","",`User themes live under: ${XG()}`,"Schema: https://raw.githubusercontent.com/sma1lboy/kobe/main/packages/kobe/src/tui/context/theme/theme.schema.json",""].join(`
|
|
149
|
+
`))}async function xC(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(nK(),!J)process.exit(2);return}if(J==="list"||J==="ls"){if(Y.length>0)IY(`"${J}" takes no arguments`);SC();return}if(J==="add"){await uC(Y);return}if(J==="remove"||J==="rm"){EC(Y);return}IY(`unknown action "${J}" (try "list", "add", or "remove")`)}var Mj;var iK=C(()=>{lf();kq();hB();Mj=["claude","conductor","dracula","nord","opencode","osaka-jade","tokyonight"]});var rK={};jf(rK,{runFeedbackSubcommand:()=>hC,parseFeedbackArgs:()=>$K});import{readFileSync as lK}from"fs";function TY(f){process.stderr.write(`kobe feedback: ${f}
|
|
150
150
|
|
|
151
|
-
${
|
|
152
|
-
`),process.exit(2)}function
|
|
153
|
-
`);return}if(!
|
|
154
|
-
`)});import{homedir as
|
|
155
|
-
`))}function
|
|
151
|
+
${aK}
|
|
152
|
+
`),process.exit(2)}function wC(f){if(f==="-")return lK(0,"utf8");return lK(f,"utf8")}function $K(f){let J={help:!1};for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="--help"||z==="-h"||z==="help")return{...J,help:!0};if(z==="--title"){if(J.title=f[++Y],J.title===void 0)TY("--title requires a value");continue}if(z==="--body"){if(J.body=f[++Y],J.body===void 0)TY("--body requires a value");continue}if(z==="--body-file"){if(J.bodyFile=f[++Y],J.bodyFile===void 0)TY("--body-file requires a value");continue}if(z==="--category"){if(J.category=f[++Y],J.category===void 0)TY("--category requires a value");continue}TY(`unexpected argument "${z}"`)}return J}async function hC(f){let J=$K(f);if(J.help){process.stdout.write(`${aK}
|
|
153
|
+
`);return}if(!J.title)TY("--title is required");if(J.body&&J.bodyFile)TY("pass either --body or --body-file, not both");let Y=J.bodyFile?wC(J.bodyFile):J.body;if(!Y)TY("--body or --body-file is required");let z=LG({title:J.title,body:Y,categorySlug:J.category});console.log(`created Discussion #${z.number}: ${z.url}`)}var aK;var pK=C(()=>{sq();aK=["Usage: kobe feedback --title <text> (--body <text> | --body-file <path>) [--category <slug>]","","Create a GitHub Discussion in the kobe repository using the GitHub CLI.","","Requires:"," gh auth login","","Options:"," --title <text> Discussion title"," --body <text> Discussion body"," --body-file <path> Read the Discussion body from a file; use - for stdin"," --category <slug> Discussion category slug (default: feedback)"," -h, --help Print this help",""].join(`
|
|
154
|
+
`)});import{homedir as PC}from"os";async function _K(f={}){let J=f.homeDir??process.env.KOBE_HOME_DIR??PC(),Y=new Iz({homeDir:J});await Y.load();let z=new GX,G=new MX({store:Y,worktrees:z});return{homeDir:J,orchestrator:G,store:Y,worktrees:z,async close(){G.dispose()}}}var oK=C(()=>{iG();PG();ZH()});var tK={};jf(tK,{runDaemonSubcommand:()=>mC});function sK(f){f.write(["Usage: kobe daemon <command>","","Commands:"," status Print the running daemon's status JSON (default)"," start Run the daemon in the foreground (this process becomes it)"," stop Ask the running daemon to shut down"," restart Stop the daemon (graceful \u2192 SIGTERM \u2192 SIGKILL) and respawn it",""].join(`
|
|
155
|
+
`))}function vC(){let f=process.env.KOBE_DAEMON_WEB_PORT?.trim();if(f==="0"||f==="off"||f==="false")return;let J=f?Number.parseInt(f,10):5174;return Number.isFinite(J)&&J>0?J:5174}async function mC(f){let[J="status"]=f,Y=CJ(),z=cJ();if(J==="--help"||J==="-h"||J==="help"){sK(process.stdout);return}if(J==="status"){let Q=new n1(Y);try{let H=await Q.request("daemon.status");console.log(JSON.stringify(H,null,2))}catch{let H=await VG(z);if(H)console.log(`kobe daemon: no daemon socket at ${Y} (stale pidfile pid=${H})`);else console.log(`kobe daemon: no daemon running at ${Y}`);process.exitCode=1}finally{Q.close()}return}if(J==="stop"){let Q=new n1(Y);try{await Q.request("daemon.stop"),console.log("kobe daemon: stop requested")}catch{console.log(`kobe daemon: no daemon running at ${Y}`)}finally{Q.close()}return}if(J==="restart"){await KG(Y,z),(await UJ()).close(),console.log(`kobe daemon: restarted, listening on ${Y}`);return}if(J!=="start")process.stderr.write(`kobe daemon: unknown command "${J}"
|
|
156
156
|
|
|
157
|
-
`),
|
|
157
|
+
`),sK(process.stderr),process.exit(2);PV();let G=await _K(),Z=await ZK(G.orchestrator,{socketPath:Y,pidPath:z,homeDir:G.homeDir,webPort:vC(),webHost:process.env.KOBE_WEB_HOST,webStaticDir:process.env.KOBE_DAEMON_WEB_STATIC_DIR,onStop:async()=>{await G.close()}});if(console.log(`kobe daemon: listening on ${Z.socketPath}`),Z.webPort)console.log(`kobe daemon: web transport listening on http://127.0.0.1:${Z.webPort}`);let q=async()=>{await Z.close(),await G.close(),process.exit(0)};process.once("SIGINT",()=>void q()),process.once("SIGTERM",()=>void q())}var eK=C(()=>{aG();y1();pq();wz();rq();oK()});import{existsSync as cC,readFileSync as nC}from"fs";import{homedir as dC}from"os";import{join as fU}from"path";function gj(f={}){return["skills","add",iC,"--skill","kobe","--agent",f.agent??fQ]}function JQ(f={}){return`npx ${gj(f).join(" ")}`}function Rj(f={}){let J=f.home??dC(),Y=f.cwd??process.cwd();return[fU(J,JU),fU(Y,JU)]}function lC(f){let J=f.match(/kobe-skill-version:\s*(\d+)/);return J?Number.parseInt(J[1],10):null}function gZ(f){let J=Rj(f).find((G)=>cC(G));if(!J)return{installed:!1,installedVersion:null,currentVersion:Oj,stale:!1};let Y=null;try{Y=lC(nC(J,"utf8"))}catch{Y=null}let z=Y===null||Y<Oj;return{installed:!0,installedVersion:Y,currentVersion:Oj,stale:z}}function YU(){let f=gZ();if(!f.installed){if(kf(Aj)==="1")return;af(Aj,"1"),process.stderr.write(`
|
|
158
158
|
kobe: the kobe agent skill isn't installed \u2014 install it so your coding agent can drive kobe via \`kobe api\`:
|
|
159
|
-
${
|
|
160
|
-
(wraps \`${
|
|
159
|
+
${AZ}
|
|
160
|
+
(wraps \`${JQ()}\`; check anytime with \`kobe doctor\`)
|
|
161
161
|
|
|
162
|
-
`);return}if(
|
|
163
|
-
kobe: your kobe agent skill is out of date (${
|
|
164
|
-
${
|
|
162
|
+
`);return}if(f.stale){let J=`${Aj}:v${f.currentVersion}`;if(kf(J)==="1")return;af(J,"1");let Y=f.installedVersion===null?"an older":`v${f.installedVersion}`;process.stderr.write(`
|
|
163
|
+
kobe: your kobe agent skill is out of date (${Y}; this kobe wants v${f.currentVersion}) \u2014 refresh it so \`kobe api\` guidance matches:
|
|
164
|
+
${AZ}
|
|
165
165
|
|
|
166
|
-
`)}}var
|
|
167
|
-
`).filter((
|
|
168
|
-
`)}catch{return""}}async function
|
|
169
|
-
`).filter((
|
|
170
|
-
`));return}let
|
|
171
|
-
`)),process.exit(2);let
|
|
172
|
-
`))
|
|
173
|
-
`))}async function
|
|
174
|
-
`))}async function
|
|
166
|
+
`)}}var Oj=2,JU=".claude/skills/kobe/SKILL.md",AZ="kobe skill install",iC="Sma1lboy/kobe",fQ="claude-code",Aj="skillHintSeen";var YQ=C(()=>{gf()});var zQ={};jf(zQ,{runResetSubcommand:()=>zk,runReloadSubcommand:()=>Gk,runDoctorSubcommand:()=>Jk});import{existsSync as aC,readFileSync as ZU,statSync as $C}from"fs";import{unlink as rC}from"fs/promises";import{join as XU}from"path";import{createInterface as pC}from"readline";function _C(f){try{return process.kill(f,0),!0}catch(J){return J.code==="EPERM"}}async function oC(f){let J=new n1(f);try{return await J.request("daemon.status")}catch{return null}finally{J.close()}}function sC(f){let J=Math.floor(f/1000);if(J<60)return`${J}s`;let Y=Math.floor(J/60);if(Y<60)return`${Y}m ${J%60}s`;return`${Math.floor(Y/60)}h ${Y%60}m`}function tC(f){if(f<1024)return`${f} B`;if(f<1048576)return`${(f/1024).toFixed(1)} KB`;return`${(f/1048576).toFixed(1)} MB`}function Cj(f){try{let J=$C(f);return`present (${tC(J.size)}, modified ${J.mtime.toISOString()})`}catch{return"absent"}}function qU(f){try{let J=JSON.parse(ZU(f,"utf8"));return Array.isArray(J.tasks)?J.tasks.length:null}catch{return null}}function eC(f,J){try{return ZU(f,"utf8").split(`
|
|
167
|
+
`).filter((z)=>z.trim().length>0).slice(-J).join(`
|
|
168
|
+
`)}catch{return""}}async function kj(f){let J=Bun.spawn(Gz(...f),{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),[Y,z]=await Promise.all([new Response(J.stdout).text().catch(()=>""),J.exited]);return{code:z,stdout:Y}}async function fk(){if(!await NJ())return 0;let{code:f,stdout:J}=await kj(["list-sessions","-F","#{session_name}"]);if(f!==0)return 0;return J.split(`
|
|
169
|
+
`).filter((Y)=>Y.trim().length>0).length}async function Jk(f=[]){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(["Usage: kobe doctor","","Read-only diagnosis of the daemon / tmux / state. Takes no options.",""].join(`
|
|
170
|
+
`));return}let J=f.find((j)=>j.length>0);if(J!==void 0)process.stderr.write([`kobe doctor: unexpected argument "${J}"`,"","Usage: kobe doctor (read-only; takes no options)",""].join(`
|
|
171
|
+
`)),process.exit(2);let Y=CJ(),z=cJ(),G=AX(),Z=XU(ef(),"tasks.json"),q=v1(),Q=["kobe doctor",` home: ${OJ()}`,` socket: ${Y}`,""],H=await oC(Y);if(H){let j=typeof H.daemonPid==="number"?H.daemonPid:"?",U=typeof H.uptimeMs==="number"?sC(H.uptimeMs):"?",L=typeof H.taskCount==="number"?H.taskCount:"?",O=typeof H.attachedClients==="number"?H.attachedClients:"?";Q.push(`daemon: \u2713 running (pid ${j}, up ${U}, ${L} task(s), ${O} client(s))`);let M=typeof H.kobeVersion==="string"?H.kobeVersion:void 0;if(M&&M!==o0)Q.push(` \u26A0 stale build: daemon is v${M}, you launched v${o0}`),Q.push(" \u2192 run `kobe daemon restart`, then `kobe reload` in any open kobe sessions");else if(M)Q.push(` build: v${M}`)}else{let j=await VG(z);if(j&&_C(j))Q.push(`daemon: \u2717 WEDGED \u2014 process alive (pid ${j}) but not accepting connections`),Q.push(" \u2192 run `kobe reset` to kill it, then relaunch kobe");else if(j)Q.push(`daemon: \u2717 not running (stale pidfile \u2192 pid ${j} is gone)`),Q.push(" \u2192 harmless; relaunch kobe, or `kobe reset` to clear the stale pidfile");else Q.push("daemon: \u2717 not running (no pidfile)");if(aC(Y))Q.push(` orphan socket file present: ${Y}`);let U=eC(G,8);if(U){Q.push(" last lines of daemon.log:");for(let L of U.split(`
|
|
172
|
+
`))Q.push(` \u2502 ${L}`)}}if(Q.push(""),await NJ())Q.push(`tmux: ${await fk()} kobe session(s) on \`${QJ}\` socket`);else Q.push("tmux: \u2717 not found on PATH (task sessions need tmux)");Q.push("");let B=gZ();if(!B.installed)Q.push("skill: \u2717 kobe agent skill not installed (optional \u2014 lets a coding agent drive `kobe api`)"),Q.push(` \u2192 ${AZ}`);else if(B.stale){let j=B.installedVersion===null?"unstamped":`v${B.installedVersion}`;Q.push(`skill: \u26A0 kobe agent skill out of date (${j}; this kobe wants v${B.currentVersion})`),Q.push(` \u2192 ${AZ}`)}else Q.push(`skill: \u2713 kobe agent skill installed (v${B.installedVersion})`);Q.push("");let V=qU(Z);Q.push(`tasks.json: ${Cj(Z)}${V===null?"":` \u2014 ${V} task(s)`}`),Q.push(`state.json: ${Cj(q)}`),Q.push(`daemon.log: ${Cj(G)}`),console.log(Q.join(`
|
|
173
|
+
`))}async function Yk(f){let J=pC({input:process.stdin,output:process.stdout});try{let Y=await new Promise((z)=>J.question(f,z));return/^y(es)?$/i.test(Y.trim())}finally{J.close()}}async function zU(f,J){try{await rC(f),console.log(` removed ${J} (${f})`)}catch(Y){if(Y.code==="ENOENT")console.log(` ${J}: already absent`);else console.error(` failed to remove ${J} (${f}): ${Y instanceof Error?Y.message:String(Y)}`)}}function GU(f){f.write(["Usage: kobe reset [--hard] [--yes]","","Recover a wedged install: stop the daemon (graceful \u2192 SIGTERM \u2192 SIGKILL),","remove its socket + pidfile, and kill all kobe tmux sessions.","Never touches your git worktrees.","","Options:"," --hard Also wipe the task index + UI state"," -y, --yes Skip the interactive confirmation"," -h, --help Print this help",""].join(`
|
|
174
|
+
`))}async function zk(f){if(f.includes("--help")||f.includes("-h")||f.includes("help")){GU(process.stdout);return}let J=new Set(["--hard","--yes","-y"]),Y=f.find((j)=>!J.has(j));if(Y!==void 0)process.stderr.write(`kobe reset: unknown argument "${Y}"
|
|
175
175
|
|
|
176
|
-
`),
|
|
177
|
-
re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await
|
|
176
|
+
`),GU(process.stderr),process.exit(2);let z=f.includes("--hard"),G=f.includes("--yes")||f.includes("-y"),Z=CJ(),q=cJ(),Q=XU(ef(),"tasks.json"),H=v1();if(console.log("kobe reset will:"),console.log(" \u2022 stop the kobe daemon (graceful \u2192 SIGTERM \u2192 SIGKILL)"),console.log(` \u2022 remove its socket + pidfile (${Z})`),console.log(` \u2022 kill all kobe tmux sessions on the \`${QJ}\` socket`),z){let j=qU(Q);console.log(` \u2022 DELETE the task index${j===null?"":` (${j} task(s))`} \u2014 ${Q}`),console.log(` \u2022 DELETE the UI state \u2014 ${H}`)}if(console.log(" \u2022 NOT touch your git worktrees under ~/.kobe/worktrees/ or legacy repo-local roots"),!z)console.log(" (your task list & worktrees are kept \u2014 add --hard to also wipe the task index + UI state)");if(!G){if(!process.stdin.isTTY){console.log(`
|
|
177
|
+
re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await Yk(z?`
|
|
178
178
|
Stop daemon, kill sessions AND wipe task index? [y/N] `:`
|
|
179
|
-
Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:
|
|
180
|
-
kobe: reset complete. Relaunch kobe to start fresh.`)}async function
|
|
181
|
-
`));return}let
|
|
179
|
+
Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:B,method:V}=await KG(Z,q);if(console.log(V==="absent"?" daemon: was not running (cleared any stale socket/pidfile)":` daemon: stopped via ${V}${B?` (pid ${B})`:""}`),await NJ()){let{code:j}=await kj(["kill-server"]);console.log(j===0?` tmux: killed all sessions on \`${QJ}\``:` tmux: no sessions on \`${QJ}\``)}else console.log(" tmux: not installed \u2014 no sessions to kill");if(z)await zU(Q,"task index"),await zU(H,"UI state");console.log(`
|
|
180
|
+
kobe: reset complete. Relaunch kobe to start fresh.`)}async function Gk(f=[]){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(["Usage: kobe reload","","Restart kobe's Tasks + Ops panes in every live session, in place.","Picks up new kobe code without `kobe reset` \u2014 the engine (claude)","panes and your running turns are never touched. Takes no options.",""].join(`
|
|
181
|
+
`));return}let J=f.find((Q)=>Q.length>0);if(J!==void 0)process.stderr.write(`kobe reload: unexpected argument "${J}"
|
|
182
182
|
|
|
183
183
|
Usage: kobe reload (takes no options)
|
|
184
|
-
`),process.exit(2);if(!await
|
|
185
|
-
`).map((
|
|
186
|
-
`).map((
|
|
187
|
-
`),process.exit(2);
|
|
188
|
-
`),process.stdout.write(` home: ${
|
|
189
|
-
`);else if(
|
|
190
|
-
`),process.stdout.write(` home: ${
|
|
191
|
-
`),!
|
|
192
|
-
`);process.on("SIGINT",()=>{
|
|
193
|
-
`),
|
|
194
|
-
`),process.exit(1)}}var
|
|
184
|
+
`),process.exit(2);if(!await NJ()){console.log("kobe reload: tmux is not installed \u2014 no panes to reload");return}let{code:Y,stdout:z}=await kj(["list-sessions","-F","#{session_name}"]);if(Y!==0){console.log(`kobe reload: no kobe tmux sessions on the \`${QJ}\` socket`);return}let G=z.split(`
|
|
185
|
+
`).map((Q)=>Q.trim()).filter((Q)=>Q.length>0);if(G.length===0){console.log(`kobe reload: no kobe tmux sessions on the \`${QJ}\` socket`);return}let{refreshKobeWorkspacePanes:Z}=await Promise.resolve().then(() => (J1(),r1)),q=0;for(let Q of G)try{await Z(Q),q++}catch(H){console.error(` failed to reload session "${Q}": ${H instanceof Error?H.message:String(H)}`)}console.log(`kobe: reloaded Tasks/Ops panes in ${q}/${G.length} session(s) \u2014 engine panes untouched`)}var GQ=C(()=>{aG();pq();wz();rq();lf();YQ();Sf();U1()});var KU={};jf(KU,{runWebSubcommand:()=>Wk});import{existsSync as BU}from"fs";import{homedir as Zk}from"os";import{resolve as ZQ}from"path";import{fileURLToPath as jU}from"url";function QU(){let f=process.env.KOBE_HOME_DIR?.trim();return f?`sandbox: ${f}`:`${Zk()}/.kobe (production)`}function qk(){let f=jU(import.meta.url),J=[ZQ(f,"../../../../kobe-web/dist"),ZQ(f,"../../web-ui")];for(let Y of J)if(BU(`${Y}/index.html`))return Y;return}function Qk(){let f=jU(import.meta.url),J=[ZQ(f,"../../../../kobe-web/pty-server.mjs"),ZQ(f,"../../web-ui/pty-server.mjs")];for(let Y of J)if(BU(Y))return Y;return}async function HU(f){try{let J=Bun.spawn(["lsof","-nP",`-iTCP:${f}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(J.stdout).text()).split(`
|
|
186
|
+
`).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function Hk(f){let J;try{J=(await(await fetch(`http://localhost:${f}${VU}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(J!==WU)throw Error(`PTY port ${f} is in use by a non-kobe service; refusing to replace it`);let Y=await HU(f);for(let G of Y)try{process.kill(G,"SIGTERM")}catch{}let z=Date.now()+2000;while(Date.now()<z){if((await HU(f)).length===0)return;await new Promise((G)=>setTimeout(G,100))}}async function Bk(f){let J=Qk();if(!J)return null;let Y=f.webPort+2;if(f.takeover)await Hk(Y);return Bun.spawn(["node",J],{stdin:"ignore",stdout:"inherit",stderr:"inherit",env:{...process.env,KOBE_DAEMON_WEB_PORT:String(f.webPort),KOBE_PTY_PORT:String(Y)}})}async function jk(f,J){if(process.env.KOBE_DAEMON_WEB_PORT=String(f),J)process.env.KOBE_DAEMON_WEB_STATIC_DIR=J;await UG();let Y;try{Y=(await(await fetch(`http://127.0.0.1:${f}${VU}`,{signal:AbortSignal.timeout(1500)})).text()).trim()}catch(z){throw Error(`daemon web transport is not reachable on :${f}; run \`kobe daemon restart\` so the daemon picks up this build (${z instanceof Error?z.message:String(z)})`)}if(Y!==WU)throw Error(`unexpected daemon web health marker on :${f}: ${Y}`);if(J){if(!(await fetch(`http://127.0.0.1:${f}/`,{signal:AbortSignal.timeout(1500)})).ok)throw Error(`daemon web transport is up on :${f} but is not serving web assets; run \`kobe daemon restart\` so it picks up ${J}`)}}async function Wk(f){if(f.includes("--help")||f.includes("-h")){process.stdout.write(Xk);return}let J=5174,Y=f.indexOf("--port");if(Y!==-1){let z=Number.parseInt(f[Y+1]??"",10);if(!Number.isFinite(z))process.stderr.write(`kobe web: --port needs a number
|
|
187
|
+
`),process.exit(2);J=z}try{let z=f.includes("--routes-only")||f.includes("--bridge-only"),G=!f.includes("--no-takeover"),Z=z?void 0:qk();if(!z&&!Z)throw Error("web assets are missing from this kobe build; run `bun run build` in packages/kobe, or `bun run dev` in packages/kobe-web from a source checkout");await jk(J,Z);let q=null,Q=!1,H=()=>{if(Q)return;Q=!0,q?.kill(),q=null};if(z)process.stdout.write(`kobe daemon web transport listening on http://localhost:${J} (routes only)
|
|
188
|
+
`),process.stdout.write(` home: ${QU()}
|
|
189
|
+
`);else if(q=await Bk({webPort:J,takeover:G}),process.stdout.write(`kobe web \u2192 http://localhost:${J}
|
|
190
|
+
`),process.stdout.write(` home: ${QU()}
|
|
191
|
+
`),!q)process.stderr.write(`kobe web: PTY server not found; terminal tabs will be unavailable
|
|
192
|
+
`);process.on("SIGINT",()=>{H(),process.exit(0)}),process.on("SIGTERM",()=>{H(),process.exit(0)}),q?.exited.then(()=>{if(!Q)process.stderr.write(`kobe web: PTY server exited
|
|
193
|
+
`),H(),process.exit(1)}),await new Promise(()=>{})}catch(z){process.stderr.write(`kobe web: ${z instanceof Error?z.message:String(z)}
|
|
194
|
+
`),process.exit(1)}}var WU="kobe-web",VU="/__kobe_web",Xk=`Usage: kobe web [options]
|
|
195
195
|
|
|
196
196
|
Launch the kobe web UI through daemon web transport on http://localhost:<port>.
|
|
197
197
|
|
|
@@ -200,45 +200,45 @@ Options:
|
|
|
200
200
|
--routes-only Routes only; Vite serves the SPA separately.
|
|
201
201
|
--no-takeover Reserved for compatibility; daemon owns the web port.
|
|
202
202
|
-h, --help Show this help.
|
|
203
|
-
`;var
|
|
204
|
-
`)}function
|
|
205
|
-
`),process.exit(2);
|
|
203
|
+
`;var UU=C(()=>{y1()});var LU={};jf(LU,{runSkillSubcommand:()=>Kk});function Nj(){return["usage: kobe skill <verb>","","verbs:"," install [--agent NAME] Install the kobe agent skill (wraps `npx skills add`)"," status Show whether the skill is installed"," command [--agent NAME] Print the underlying npx command without running it","",`The skill teaches a coding agent how to drive \`kobe api\`. Default agent: ${fQ}.`].join(`
|
|
204
|
+
`)}function DU(f){let J=fQ;for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="--agent"){let G=f[Y+1];if(!G||G.startsWith("--"))process.stderr.write(`kobe skill: --agent requires a value
|
|
205
|
+
`),process.exit(2);J=G,Y++}else if(z.startsWith("--agent="))J=z.slice(8);else process.stderr.write(`kobe skill: unknown flag "${z}"
|
|
206
206
|
|
|
207
|
-
${
|
|
208
|
-
`),process.exit(2)}return
|
|
209
|
-
`),!
|
|
207
|
+
${Nj()}
|
|
208
|
+
`),process.exit(2)}return J}async function Kk(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(process.stdout.write(`${Nj()}
|
|
209
|
+
`),!J)process.exitCode=2;return}if(!Vk.includes(J))process.stderr.write(`kobe skill: unknown verb "${J}"
|
|
210
210
|
|
|
211
|
-
${
|
|
212
|
-
`),process.exit(2);if(
|
|
213
|
-
`));return}if(
|
|
214
|
-
`);return}let
|
|
215
|
-
`);let
|
|
216
|
-
kobe skill install failed (npx exited ${
|
|
217
|
-
You can run it yourself: ${
|
|
218
|
-
`),process.exit(
|
|
219
|
-
`)}var
|
|
220
|
-
`))}var Rg=500,gg="worktree-created",JK="externalWorktreeSync";var OH=S(()=>{CJ();hB();UQ();O1();BJ()});function BK(J){var Y;if(J>=55296&&J<=57343||J>1114111)return 65533;return(Y=ug.get(J))!==null&&Y!==void 0?Y:J}var AH,ug,qK;var jK=S(()=>{ug=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),qK=(AH=String.fromCodePoint)!==null&&AH!==void 0?AH:(J)=>{let Y="";if(J>65535)J-=65536,Y+=String.fromCharCode(J>>>10&1023|55296),J=56320|J&1023;return Y+=String.fromCharCode(J),Y}});function HK(J){let Y=typeof atob==="function"?atob(J):typeof Buffer.from==="function"?Buffer.from(J,"base64").toString("binary"):new Buffer(J,"base64").toString("binary"),Z=Y.length&-2,X=new Uint16Array(Z/2);for(let G=0,z=0;G<Z;G+=2){let f=Y.charCodeAt(G),q=Y.charCodeAt(G+1);X[z++]=f|q<<8}return X}var WK;var VK=S(()=>{WK=HK("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg")});var zJ;var KK=S(()=>{(function(J){J[J.VALUE_LENGTH=49152]="VALUE_LENGTH",J[J.FLAG13=8192]="FLAG13",J[J.BRANCH_LENGTH=8064]="BRANCH_LENGTH",J[J.JUMP_TABLE=127]="JUMP_TABLE"})(zJ||(zJ={}))});function RH(J){return J>=E1.ZERO&&J<=E1.NINE}function xg(J){return J>=E1.UPPER_A&&J<=E1.UPPER_F||J>=E1.LOWER_A&&J<=E1.LOWER_F}function wg(J){return J>=E1.UPPER_A&&J<=E1.UPPER_Z||J>=E1.LOWER_A&&J<=E1.LOWER_Z||RH(J)}function hg(J){return J===E1.EQUALS||wg(J)}class CH{constructor(J,Y,Z){this.decodeTree=J,this.emitCodePoint=Y,this.errors=Z,this.state=_1.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=rY.Strict,this.runConsumed=0}startEntity(J){this.decodeMode=J,this.state=_1.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(J,Y){switch(this.state){case _1.EntityStart:{if(J.charCodeAt(Y)===E1.NUM)return this.state=_1.NumericStart,this.consumed+=1,this.stateNumericStart(J,Y+1);return this.state=_1.NamedEntity,this.stateNamedEntity(J,Y)}case _1.NumericStart:return this.stateNumericStart(J,Y);case _1.NumericDecimal:return this.stateNumericDecimal(J,Y);case _1.NumericHex:return this.stateNumericHex(J,Y);case _1.NamedEntity:return this.stateNamedEntity(J,Y)}}stateNumericStart(J,Y){if(Y>=J.length)return-1;if((J.charCodeAt(Y)|UK)===E1.LOWER_X)return this.state=_1.NumericHex,this.consumed+=1,this.stateNumericHex(J,Y+1);return this.state=_1.NumericDecimal,this.stateNumericDecimal(J,Y)}stateNumericHex(J,Y){while(Y<J.length){let Z=J.charCodeAt(Y);if(RH(Z)||xg(Z)){let X=Z<=E1.NINE?Z-E1.ZERO:(Z|UK)-E1.LOWER_A+10;this.result=this.result*16+X,this.consumed++,Y++}else return this.emitNumericEntity(Z,3)}return-1}stateNumericDecimal(J,Y){while(Y<J.length){let Z=J.charCodeAt(Y);if(RH(Z))this.result=this.result*10+(Z-E1.ZERO),this.consumed++,Y++;else return this.emitNumericEntity(Z,2)}return-1}emitNumericEntity(J,Y){var Z;if(this.consumed<=Y)return(Z=this.errors)===null||Z===void 0||Z.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(J===E1.SEMI)this.consumed+=1;else if(this.decodeMode===rY.Strict)return 0;if(this.emitCodePoint(BK(this.result),this.consumed),this.errors){if(J!==E1.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(J,Y){let{decodeTree:Z}=this,X=Z[this.treeIndex],G=(X&zJ.VALUE_LENGTH)>>14;while(Y<J.length){if(G===0&&(X&zJ.FLAG13)!==0){let f=(X&zJ.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let q=X&zJ.JUMP_TABLE;if(J.charCodeAt(Y)!==q)return this.result===0?0:this.emitNotTerminatedNamedEntity();Y++,this.excess++,this.runConsumed++}while(this.runConsumed<f){if(Y>=J.length)return-1;let q=this.runConsumed-1,B=Z[this.treeIndex+1+(q>>1)],j=q%2===0?B&255:B>>8&255;if(J.charCodeAt(Y)!==j)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();Y++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(f>>1),X=Z[this.treeIndex],G=(X&zJ.VALUE_LENGTH)>>14}if(Y>=J.length)break;let z=J.charCodeAt(Y);if(z===E1.SEMI&&G!==0&&(X&zJ.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.treeIndex=vg(Z,X,this.treeIndex+Math.max(1,G),z),this.treeIndex<0)return this.result===0||this.decodeMode===rY.Attribute&&(G===0||hg(z))?0:this.emitNotTerminatedNamedEntity();if(X=Z[this.treeIndex],G=(X&zJ.VALUE_LENGTH)>>14,G!==0){if(z===E1.SEMI)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.decodeMode!==rY.Strict&&(X&zJ.FLAG13)===0)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}Y++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var J;let{result:Y,decodeTree:Z}=this,X=(Z[Y]&zJ.VALUE_LENGTH)>>14;return this.emitNamedEntityData(Y,X,this.consumed),(J=this.errors)===null||J===void 0||J.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(J,Y,Z){let{decodeTree:X}=this;if(this.emitCodePoint(Y===1?X[J]&~(zJ.VALUE_LENGTH|zJ.FLAG13):X[J+1],Z),Y===3)this.emitCodePoint(X[J+2],Z);return Z}end(){var J;switch(this.state){case _1.NamedEntity:return this.result!==0&&(this.decodeMode!==rY.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case _1.NumericDecimal:return this.emitNumericEntity(0,2);case _1.NumericHex:return this.emitNumericEntity(0,3);case _1.NumericStart:return(J=this.errors)===null||J===void 0||J.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case _1.EntityStart:return 0}}}function Pg(J){let Y="",Z=new CH(J,(X)=>Y+=qK(X));return function(G,z){let f=0,q=0;while((q=G.indexOf("&",q))>=0){Y+=G.slice(f,q),Z.startEntity(z);let j=Z.write(G,q+1);if(j<0){f=q+Z.end();break}f=q+j,q=j===0?f+1:f}let B=Y+G.slice(f);return Y="",B}}function vg(J,Y,Z,X){let G=(Y&zJ.BRANCH_LENGTH)>>7,z=Y&zJ.JUMP_TABLE;if(G===0)return z!==0&&X===z?Z:-1;if(z){let j=X-z;return j<0||j>=G?-1:J[Z+j]-1}let f=G+1>>1,q=0,B=G-1;while(q<=B){let j=q+B>>>1,K=j>>1,U=J[Z+K]>>(j&1)*8&255;if(U<X)q=j+1;else if(U>X)B=j-1;else return J[Z+f+j]}return-1}function UX(J,Y=rY.Legacy){return mg(J,Y)}var E1,UK=32,_1,rY,mg;var LK=S(()=>{jK();VK();KK();(function(J){J[J.NUM=35]="NUM",J[J.SEMI=59]="SEMI",J[J.EQUALS=61]="EQUALS",J[J.ZERO=48]="ZERO",J[J.NINE=57]="NINE",J[J.LOWER_A=97]="LOWER_A",J[J.LOWER_F=102]="LOWER_F",J[J.LOWER_X=120]="LOWER_X",J[J.LOWER_Z=122]="LOWER_Z",J[J.UPPER_A=65]="UPPER_A",J[J.UPPER_F=70]="UPPER_F",J[J.UPPER_Z=90]="UPPER_Z"})(E1||(E1={}));(function(J){J[J.EntityStart=0]="EntityStart",J[J.NumericStart=1]="NumericStart",J[J.NumericDecimal=2]="NumericDecimal",J[J.NumericHex=3]="NumericHex",J[J.NamedEntity=4]="NamedEntity"})(_1||(_1={}));(function(J){J[J.Legacy=0]="Legacy",J[J.Strict=1]="Strict",J[J.Attribute=2]="Attribute"})(rY||(rY={}));mg=Pg(WK)});var DK,MK;var OK=S(()=>{LK();(function(J){J[J.XML=0]="XML",J[J.HTML=1]="HTML"})(DK||(DK={}));(function(J){J[J.UTF8=0]="UTF8",J[J.ASCII=1]="ASCII",J[J.Extensive=2]="Extensive",J[J.Attribute=3]="Attribute",J[J.Text=4]="Text"})(MK||(MK={}))});import{CliRenderer as dg,createCliRenderer as ng,engine as ig}from"@opentui/core";import{createTestRenderer as Tv}from"@opentui/core/testing";import{ASCIIFontRenderable as lg,BoxRenderable as $g,CodeRenderable as ag,DiffRenderable as pg,InputRenderable as _g,LineNumberRenderable as rg,MarkdownRenderable as og,ScrollBoxRenderable as sg,SelectRenderable as tg,TabSelectRenderable as eg,TextareaRenderable as Jy,TextAttributes as gH,TextNodeRenderable as Yy,TextRenderable as Zy}from"@opentui/core";import{engine as xv,Timeline as wv}from"@opentui/core";import{BaseRenderable as SK,createTextAttributes as Gy,InputRenderable as yH,InputRenderableEvents as Kz,isTextNodeRenderable as IH,parseColor as AK,Renderable as zy,RootTextNodeRenderable as Qy,ScrollBoxRenderable as fy,SelectRenderable as RK,SelectRenderableEvents as SH,TabSelectRenderable as CK,TabSelectRenderableEvents as kH,TextNodeRenderable as qy,TextRenderable as kK}from"@opentui/core";import{BaseRenderable as Dy,isTextNodeRenderable as My,TextNodeRenderable as Fy,TextRenderable as Oy,Yoga as yK}from"@opentui/core";import{BoxRenderable as $v,RootRenderable as av}from"@opentui/core";import{TimeToFirstDrawRenderable as gy}from"@opentui/core";import{createSlotRegistry as rv}from"@opentui/core";function jy({createElement:J,createTextNode:Y,createSlotNode:Z,isTextNode:X,replaceText:G,insertNode:z,removeNode:f,setProperty:q,getParentNode:B,getFirstChild:j,getNextSibling:K}){function H(g,k,C,N){if(C!==void 0&&!N)N=[];if(typeof k!=="function")return U(g,k,N,C);MY((_)=>U(g,k(),_,C),N)}function U(g,k,C,N,_){while(typeof C==="function")C=C();if(k===C)return C;let X0=typeof k,s=N!==void 0;if(X0==="string"||X0==="number"){if(X0==="number")k=k.toString();if(s){let Y0=C[0];if(Y0&&X(Y0))G(Y0,k);else Y0=Y(k);C=D(g,C,N,Y0)}else if(C!==""&&typeof C==="string")G(j(g),C=k);else D(g,C,N,Y(k)),C=k}else if(k==null||X0==="boolean")C=D(g,C,N);else if(X0==="function")return MY(()=>{let Y0=k();while(typeof Y0==="function")Y0=Y0();C=U(g,Y0,C,N)}),()=>C;else if(Array.isArray(k)){let Y0=[];if(L(Y0,k,_))return MY(()=>C=U(g,Y0,C,N,!0)),()=>C;if(Y0.length===0){let u=D(g,C,N);if(s)return C=u}else if(Array.isArray(C))if(C.length===0)A(g,Y0,N);else F(g,C,Y0);else if(C==null||C==="")A(g,Y0);else F(g,s&&C||[j(g)],Y0);C=Y0}else{if(Array.isArray(C)){if(s)return C=D(g,C,N,k);D(g,C,null,k)}else if(C==null||C===""||!j(g))z(g,k);else R(g,k,j(g));C=k}return C}function L(g,k,C){let N=!1;for(let _=0,X0=k.length;_<X0;_++){let s=k[_],Y0;if(s==null||s===!0||s===!1);else if(Array.isArray(s))N=L(g,s)||N;else if((Y0=typeof s)==="string"||Y0==="number")g.push(Y(s));else if(Y0==="function")if(C){while(typeof s==="function")s=s();N=L(g,Array.isArray(s)?s:[s])||N}else g.push(s),N=!0;else g.push(s)}return N}function F(g,k,C){let N=C.length,_=k.length,X0=N,s=0,Y0=0,u=K(k[_-1]),Q0=null;while(s<_||Y0<X0){if(k[s]===C[Y0]){s++,Y0++;continue}while(k[_-1]===C[X0-1])_--,X0--;if(_===s){let t=X0<N?Y0?K(C[Y0-1]):C[X0-Y0]:u;while(Y0<X0)z(g,C[Y0++],t)}else if(X0===Y0)while(s<_){if(!Q0||!Q0.has(k[s]))f(g,k[s]);s++}else if(k[s]===C[X0-1]&&C[Y0]===k[_-1]){let t=K(k[--_]);z(g,C[Y0++],K(k[s++])),z(g,C[--X0],t),k[_]=C[X0]}else{if(!Q0){Q0=new Map;let j0=Y0;while(j0<X0)Q0.set(C[j0],j0++)}let t=Q0.get(k[s]);if(t!=null)if(Y0<t&&t<X0){let j0=s,S0=1,$;while(++j0<_&&j0<X0){if(($=Q0.get(k[j0]))==null||$!==t+S0)break;S0++}if(S0>t-Y0){let P=k[s];while(Y0<t)z(g,C[Y0++],P)}else R(g,C[Y0++],k[s++])}else s++;else f(g,k[s++])}}}function D(g,k,C,N){if(C===void 0){let X0;while(X0=j(g))f(g,X0);return N&&z(g,N),N??""}let _=N||Z();if(k.length){let X0=!1;for(let s=k.length-1;s>=0;s--){let Y0=k[s];if(_!==Y0){let u=B(Y0)===g;if(!X0&&!s)u?R(g,_,Y0):z(g,_,C);else u&&f(g,Y0)}else X0=!0}}else z(g,_,C);return[_]}function A(g,k,C){for(let N=0,_=k.length;N<_;N++)z(g,k[N],C)}function R(g,k,C){z(g,k,C),f(g,C)}function l(g,k,C={},N){if(k||(k={}),!N)MY(()=>C.children=U(g,k.children,C.children));return MY(()=>k.ref&&k.ref(g)),MY(()=>{for(let _ in k){if(_==="children"||_==="ref")continue;let X0=k[_];if(X0===C[_])continue;q(g,_,X0,C[_]),C[_]=X0}}),C}return{render(g,k){let C;return dZ((N)=>{C=N,H(k,g())}),C},insert:H,spread(g,k,C){if(typeof k==="function")MY((N)=>l(g,k(),N,C));else l(g,k,void 0,C)},createElement:J,createTextNode:Y,insertNode:z,setProp(g,k,C,N){return q(g,k,C,N),C},mergeProps:QQ,effect:MY,memo:By,createComponent:i9,use(g,k,C){return l1(()=>g(k,C))}}}function Hy(J){let Y=jy(J);return Y.mergeProps=QQ,Y}function uH(J){if(!tf.has(J))tf.set(J,0);let Y=tf.get(J)+1;return tf.set(J,Y),`${J}-${Y}`}function Wy(J,Y,Z){if(r1("Inserting node:",$1(Y),"into parent:",$1(J),"with anchor:",$1(Z),Y instanceof LG),Y instanceof Uz)Y.parent=J,Y=Y.getSlotChild(J);if(Z&&Z instanceof Uz)Z=Z.getSlotChild(J);if(IH(Y)){if(!(J instanceof kK)&&!IH(J))throw Error(`Orphan text error: "${Y.toChunks().map((z)=>z.text).join("")}" must have a <text> as a parent: ${J.id} above ${Y.id}`)}if(!(J instanceof SK))throw console.error("[INSERT]","Tried to mount a non base renderable"),Error("Tried to mount a non base renderable");if(!Z){J.add(Y);return}let X=NH(J),G=X.findIndex((z)=>z.id===Z.id);if(G===-1)r1("[INSERT]","Could not find anchor",$1(J),$1(Z),"[children]",...X.map((z)=>z.id));J.add(Y,G)}function Vy(J,Y){if(r1("Removing node:",$1(Y),"from parent:",$1(J)),Y instanceof Uz)Y.parent=null,Y=Y.getSlotChild(J);J.remove(Y.id),process.nextTick(()=>{if(Y instanceof SK&&!Y.parent){Y.destroyRecursively();return}})}function Ky(J){r1("Creating text node:",J);let Y=uH("text-node");if(typeof J==="number")J=J.toString();return LG.fromString(UX(J),{id:Y})}function Uy(){let J=uH("slot-node");return r1("Creating slot node",J),new Uz(J)}function gK(J){r1("Getting parent of node:",$1(J));let Y=J.parent??void 0;if(Y instanceof Qy)Y=Y.textParent??void 0;let Z=Y?.parent?.parent?.parent;if(Z instanceof fy&&Z.content===Y)Y=Z;return Y}function Ry(J){Object.assign(xK,J)}function Cy(){return xK}var EH,e1=()=>{let J=NJ(EH);if(!J)throw Error("No renderer found");return J},Xy=(J)=>{let Y=e1();s1(()=>{Y.on("resize",J)}),P1(()=>{Y.off("resize",J)})},IY=()=>{let J=e1(),[Y,Z]=p({width:J.width,height:J.height});return Xy((G,z)=>{Z({width:G,height:z})}),Y},By=(J)=>U0(()=>J()),tf,r1=(...J)=>{if(process.env.DEBUG)console.log("[Reconciler]",...J)},LG,$1=(J)=>{if(!J)return;return J.id},NH=(J)=>{let Y;if(J instanceof kK)Y=J.getTextChildren();else Y=J.getChildren();return Y},Ly,x,Y1,I,V,T,W,M,nv,Q,IK,kZ,xH,NK,bK,Uz,Lz,ef,bH,TH,TK,EK,uK,Ay,xK,yy=(J,Y)=>{let Z,X=!1,G=!1,z=!0,f=!1,q=J.destroy.bind(J),B=()=>{if(G)return;if(!Z){X=!0;return}G=!0,Z()};J.once("destroy",B),J.destroy=()=>{if(z){f=!0;return}q()};try{Z=Ly(()=>I(EH.Provider,{get value(){return J},get children(){return I(Y,{})}}),J.root)}finally{z=!1,J.destroy=q}if(X)B();if(f)q()},wK=async(J,Y={})=>{let Z=Y instanceof dg?Y:await ng({...Y,onDestroy:()=>{Y.onDestroy?.()}});ig.attach(Z),yy(Z,J)};var w=S(()=>{B1();OK();B1();B1();B1();EH=FY();tf=new Map;LG=class LG extends qy{static fromString(J,Y={}){let Z=new LG(Y);return Z.add(J),Z}};({render:Ly,effect:x,memo:Y1,createComponent:I,createElement:V,createTextNode:T,insertNode:W,insert:M,spread:nv,setProp:Q,mergeProps:IK,use:kZ}=Hy({createElement(J){r1("Creating element:",J);let Y=uH(J),Z=NJ(EH);if(!Z)throw Error("No renderer found");let X=Cy();if(!X[J])throw Error(`[Reconciler] Unknown component type: ${J}`);let G=new X[J](Z,{id:Y});return r1("Element created with id:",Y),G},createTextNode:Ky,createSlotNode:Uy,replaceText(J,Y){if(r1("Replacing text:",Y,"in node:",$1(J)),!(J instanceof LG))return;J.replace(UX(Y),0)},setProperty(J,Y,Z,X){if(Y.startsWith("on:")){let G=Y.slice(3);if(Z)J.on(G,Z);if(X)J.off(G,X);return}if(IH(J)){if(Y==="href"){J.link={url:Z};return}if(Y==="style"){J.attributes|=Gy(Z),J.fg=Z.fg?AK(Z.fg):J.fg,J.bg=Z.bg?AK(Z.bg):J.bg;return}return}switch(Y){case"id":r1("Id mapped",J.id,"=",Z),J[Y]=Z;break;case"focused":if(!(J instanceof zy))return;if(Z)J.focus();else J.blur();break;case"onChange":let G=void 0;if(J instanceof RK)G=SH.SELECTION_CHANGED;else if(J instanceof CK)G=kH.SELECTION_CHANGED;else if(J instanceof yH)G=Kz.CHANGE;if(!G)break;if(Z)J.on(G,Z);if(X)J.off(G,X);break;case"onInput":if(J instanceof yH){if(Z)J.on(Kz.INPUT,Z);if(X)J.off(Kz.INPUT,X)}break;case"onSubmit":if(J instanceof yH){if(Z)J.on(Kz.ENTER,Z);if(X)J.off(Kz.ENTER,X)}else J[Y]=Z;break;case"onSelect":if(J instanceof RK){if(Z)J.on(SH.ITEM_SELECTED,Z);if(X)J.off(SH.ITEM_SELECTED,X)}else if(J instanceof CK){if(Z)J.on(kH.ITEM_SELECTED,Z);if(X)J.off(kH.ITEM_SELECTED,X)}break;case"style":for(let z in Z){let f=Z[z];if(X!==void 0&&f===X[z])continue;J[z]=f}break;case"text":case"content":{let z=typeof Z==="string"?Z:Array.isArray(Z)?Z.join(""):`${Z}`;J[Y]=UX(z);break}default:J[Y]=Z}},isTextNode(J){return J instanceof LG},insertNode:Wy,removeNode:Vy,getParentNode:gK,getFirstChild(J){r1("Getting first child of node:",$1(J));let Y=NH(J)[0];if(!Y){r1("No first child found for node:",$1(J));return}return r1("First child found:",$1(Y),"for node:",$1(J)),Y},getNextSibling(J){r1("Getting next sibling of node:",$1(J));let Y=gK(J);if(!Y){r1("No parent found for node:",$1(J));return}let Z=NH(Y),X=Z.indexOf(J);if(X===-1||X===Z.length-1){r1("No next sibling found for node:",$1(J));return}let G=Z[X+1];if(!G){r1("Next sibling is null for node:",$1(J));return}return r1("Next sibling found:",$1(G),"for node:",$1(J)),G}}));xH=class xH extends Dy{constructor(J){super({id:J})}add(J,Y){throw Error("Can't add children on an Slot renderable")}getChildren(){return[]}remove(J){}insertBefore(J,Y){throw Error("Can't add children on an Slot renderable")}getRenderable(J){return}getChildrenCount(){return 0}requestRender(){}findDescendantById(J){return}};NK=class NK extends Fy{slotParent;destroyed=!1;constructor(J,Y){super({id:J});this._visible=!1,this.slotParent=Y}destroy(){if(this.destroyed)return;this.destroyed=!0,this.slotParent?.destroy(),super.destroy()}};bK=class bK extends xH{yogaNode;slotParent;destroyed=!1;constructor(J,Y){super(J);this._visible=!1,this.slotParent=Y,this.yogaNode=yK.default.Node.create(),this.yogaNode.setDisplay(yK.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};Uz=class Uz extends xH{layoutNode;textNode;destroyed=!1;constructor(J){super(J);this._visible=!1}getSlotChild(J){if(My(J)||J instanceof Oy){if(!this.textNode)this.textNode=new NK(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new bK(`slot-layout-${this.id}`,this);return this.layoutNode}destroy(){if(this.destroyed)return;if(this.destroyed=!0,this.layoutNode)this.layoutNode.destroy();if(this.textNode)this.textNode.destroy()}};Lz=class Lz extends Yy{_ctx;constructor(J,Y){super(Y);this._ctx=J}};ef=class ef extends Lz{constructor(J,Y){super(null,J);if(Y==="b"||Y==="strong")this.attributes=(this.attributes||0)|gH.BOLD;else if(Y==="i"||Y==="em")this.attributes=(this.attributes||0)|gH.ITALIC;else if(Y==="u")this.attributes=(this.attributes||0)|gH.UNDERLINE}};bH=class bH extends ef{constructor(J){super(J,"b")}};TH=class TH extends ef{constructor(J){super(J,"i")}};TK=class TK extends ef{constructor(J){super(J,"u")}};EK=class EK extends Lz{constructor(J,Y){super(null,Y);this.add()}add(){return super.add(`
|
|
221
|
-
`)}};uK=class uK extends Lz{constructor(J,Y){let Z={...Y,link:{url:Y.href}};super(null,Z)}};Ay={box:$g,text:Zy,input:_g,select:tg,textarea:Jy,ascii_font:lg,tab_select:eg,scrollbox:sg,code:ag,diff:pg,line_number:rg,markdown:og,span:Lz,strong:bH,b:bH,em:TH,i:TH,u:TK,br:EK,a:uK},xK={...Ay};Ry({time_to_first_draw:gy})});function Sy(J){let Y=J?.changes;if(!Y||typeof Y!=="object"||Array.isArray(Y))return null;let Z=new Map;for(let[X,G]of Object.entries(Y)){let z=G;if(typeof z?.added!=="number"||typeof z.deleted!=="number")return null;Z.set(X,{added:z.added,deleted:z.deleted})}return Z}function ky(J,Y){if(J.size!==Y.size)return!1;for(let[Z,X]of J){let G=Y.get(Z);if(!G||!kY(X,G))return!1}return!0}class QJ{client;tasksAcc;setTasks;activeTaskAcc;setActiveTaskSig;updateAcc;setUpdateSig;daemonVersionAcc;setDaemonVersionSig;engineStateAcc;setEngineStateSig;taskJobsAcc;setTaskJobsSig;worktreeChangesAcc;setWorktreeChangesSig;uiPrefsAcc;setUiPrefsSig;keybindingsRevAcc;setKeybindingsRevSig;connectionStateAcc;setConnectionState;ensureReachable;role;channels;subscribesTasks;reconnecting=!1;constructor(J,Y={}){this.client=J;let[Z,X]=p([]),[G,z]=p(null),[f,q]=p(null),[B,j]=p(null),[K,H]=p(new Map),[U,L]=p(new Map),[F,D]=p(null),[A,R]=p(null),[l,g]=p(null),[k,C]=p("online");this.tasksAcc=Z,this.setTasks=(N)=>X(()=>N),this.activeTaskAcc=G,this.setActiveTaskSig=(N)=>z(()=>N),this.updateAcc=f,this.setUpdateSig=(N)=>q(()=>N),this.daemonVersionAcc=B,this.setDaemonVersionSig=(N)=>j(()=>N),this.engineStateAcc=K,this.setEngineStateSig=(N)=>H(()=>N),this.taskJobsAcc=U,this.setTaskJobsSig=(N)=>L(()=>N),this.worktreeChangesAcc=F,this.setWorktreeChangesSig=(N)=>D(()=>N),this.uiPrefsAcc=A,this.setUiPrefsSig=(N)=>R(()=>N),this.keybindingsRevAcc=l,this.setKeybindingsRevSig=(N)=>g(()=>N),this.connectionStateAcc=k,this.setConnectionState=(N)=>C(()=>N),this.ensureReachable=Y.ensureReachable??jG,this.role=Y.role??"pane",this.channels=Y.channels,this.subscribesTasks=!Y.channels||Y.channels.includes("task.snapshot"),this.client.on("*",(N)=>this.handleEvent(N.name,N.payload)),this.client.onLifecycle("close",()=>{if(this.setConnectionState("disconnected"),this.role==="pane")vY("orch","daemon socket closed \u2014 starting non-spawning reconnect loop"),this.reconnectLoop()})}async reconnectLoop(){if(this.reconnecting)return;this.reconnecting=!0;let J=500,Y=0;while(!this.client.isDisposed){if(await new Promise((Z)=>setTimeout(Z,J)),this.client.isDisposed)break;Y++;try{await this.init(),vY("orch",`reconnected and re-subscribed after ${Y} attempt(s) \u2014 task list re-synced`),this.reconnecting=!1;return}catch(Z){if(Y===1||Y%10===0)zZ("orch-reconnect",Z);J=Math.min(J*2,3000)}}this.reconnecting=!1}async init(){let J=await this.client.request("hello",{protocolVersion:hJ,minProtocolVersion:GZ}),Y=typeof J.protocolVersion==="number"?J.protocolVersion:hJ,Z=typeof J.minProtocolVersion==="number"?J.minProtocolVersion:Y;if(!jQ({localVersion:hJ,localMin:GZ,remoteVersion:Y,remoteMin:Z}))throw Error(`kobe daemon is protocol v${Y} (min v${Z}); this client is v${hJ} (min v${GZ}). Restart the daemon (\`kobe daemon restart\`) or upgrade kobe.`);if(this.setDaemonVersionSig(typeof J.kobeVersion==="string"?J.kobeVersion:null),J.tasks&&this.subscribesTasks)this.setTasks(J.tasks.map(Dz));if(await this.client.subscribe({role:this.role,channels:this.channels}),J.capabilities?.includes("worktree.changes")){if(this.worktreeChangesAcc()===null)this.setWorktreeChangesSig(new Map)}else this.setWorktreeChangesSig(null);this.setConnectionState("online"),vY("orch",`subscribed as ${this.role} (${this.tasksAcc().length} tasks)`)}connectionStateSignal(){return this.connectionStateAcc}async manualReconnect(){this.client.forceDisconnect(),await this.ensureReachable(),await this.init()}dispose(){this.client.close()}tasksSignal(){return this.tasksAcc}activeTaskSignal(){return this.activeTaskAcc}updateSignal(){return this.updateAcc}daemonVersionSignal(){return this.daemonVersionAcc}daemonStaleSignal(){return()=>J7(this.daemonVersionAcc()??void 0,i0)}engineStateSignal(){return this.engineStateAcc}taskJobsSignal(){return this.taskJobsAcc}worktreeChangesSignal(){return this.worktreeChangesAcc}uiPrefsSignal(){return this.uiPrefsAcc}keybindingsRevSignal(){return this.keybindingsRevAcc}listTasks(){return this.tasksAcc()}getTask(J){return this.tasksAcc().find((Y)=>Y.id===J)}subscribeTasks(J){try{J(this.listTasks())}catch(Z){console.error("[kobe RemoteOrchestrator] task listener threw on subscribe:",Z)}let Y=!0;return dZ((Z)=>{return s0(()=>{let X=this.tasksAcc();if(Y){Y=!1;return}try{J(X)}catch(G){console.error("[kobe RemoteOrchestrator] task listener threw:",G)}}),Z})}async createTask(J){let{modelEffort:Y,...Z}=J,X=await this.client.request("task.create",{...Z,effort:Y});return Dz(X.task)}async ensureMainTask(J){let Y=await this.client.request("task.ensureMain",{repo:J});return Dz(Y.task)}async ensureWorktree(J){return(await this.client.request("task.ensureWorktree",{taskId:String(J)})).worktreePath}async setTitle(J,Y){await this.client.request("task.rename",{taskId:String(J),title:Y})}async setBranch(J,Y){await this.client.request("task.setBranch",{taskId:String(J),branch:Y})}async setVendor(J,Y){await this.client.request("task.setVendor",{taskId:String(J),vendor:Y})}async setPinned(J,Y){await this.client.request("task.pin",{taskId:String(J),pinned:Y})}async moveTask(J,Y){await this.client.request("task.move",{taskId:String(J),direction:Y<0?"up":"down"})}async setArchived(J,Y){await this.client.request("task.archive",{taskId:String(J),archived:Y})}async setStatus(J,Y){await this.client.request("task.status",{taskId:String(J),status:Y})}async deleteTask(J,Y){await this.client.request("task.delete",{taskId:String(J),force:Y?.force})}async discoverAdoptableWorktrees(J){return(await this.client.request("worktree.discoverAdoptable",{repo:J})).worktrees}async adoptWorktree(J){let Y=await this.client.request("worktree.adopt",J);return Dz(Y.task)}async setActiveTask(J){await this.client.request("task.setActive",{taskId:J===null?null:String(J)})}handleEvent(J,Y){if(J==="task.snapshot"){let Z=Y?.tasks;if(Array.isArray(Z))this.setTasks(Z.map(Dz)),this.pruneEngineState(Z),this.pruneTaskJobs(Z);return}if(J==="active-task"){let Z=Y?.taskId;this.setActiveTaskSig(typeof Z==="string"?Z:null);return}if(J==="update"){let Z=Y?.info;this.setUpdateSig(Z??null);return}if(J==="engine-state"){let Z=Y;if(typeof Z?.taskId!=="string"||typeof Z.state!=="string")return;let X=new Map(this.engineStateAcc());if(Z.state==="idle")X.delete(Z.taskId);else X.set(Z.taskId,{state:Z.state,detail:Z.detail,at:typeof Z.at==="number"?Z.at:0});this.setEngineStateSig(X);return}if(J==="task.jobs"){let Z=Y;if(typeof Z?.taskId!=="string"||Z.kind!=="ensureWorktree")return;let X=this.taskJobsAcc();if(Z.phase==="running"){let G=new Map(X);G.set(Z.taskId,{kind:Z.kind}),this.setTaskJobsSig(G);return}if((Z.phase==="done"||Z.phase==="error")&&X.has(Z.taskId)){let G=new Map(X);G.delete(Z.taskId),this.setTaskJobsSig(G)}return}if(J==="worktree.changes"){let Z=Sy(Y);if(!Z)return;let X=this.worktreeChangesAcc();if(X&&ky(X,Z))return;this.setWorktreeChangesSig(Z);return}if(J==="ui-prefs"){let Z=Y;if(typeof Z?.theme!=="string")return;this.setUiPrefsSig({theme:Z.theme,transparentBackground:Z.transparentBackground===!0,focusAccent:typeof Z.focusAccent==="string"?Z.focusAccent:null,sortMode:Z.sortMode==="recent"?"recent":"default",keysCollapsed:Z.keysCollapsed===!0,projectFilter:typeof Z.projectFilter==="string"&&Z.projectFilter.length>0?Z.projectFilter:null});return}if(J==="keybindings"){let Z=Y;if(typeof Z?.rev!=="number")return;this.setKeybindingsRevSig(Z.rev);return}}pruneEngineState(J){let Y=this.engineStateAcc();if(Y.size===0)return;let Z=new Set(J.map((G)=>G.id)),X=null;for(let G of Y.keys()){if(Z.has(G))continue;if(!X)X=new Map(Y);X.delete(G)}if(X)this.setEngineStateSig(X)}pruneTaskJobs(J){let Y=this.taskJobsAcc();if(Y.size===0)return;let Z=new Set(J.map((G)=>G.id)),X=null;for(let G of Y.keys()){if(Z.has(G))continue;if(!X)X=new Map(Y);X.delete(G)}if(X)this.setTaskJobsSig(X)}}function Dz(J){return{id:kG(J.id),title:J.title,repo:J.repo,branch:J.branch,worktreePath:J.worktreePath,kind:J.kind,status:J.status,archived:J.archived,pinned:J.pinned,vendor:J.vendor,prStatus:J.prStatus,modelEffort:J.modelEffort,createdAt:J.createdAt,updatedAt:J.updatedAt}}var IZ=S(()=>{$Z();CJ();iZ();B1();fG();SJ();jJ()});function vK(J){let Y=J[sJ];if(!Y){if(Object.defineProperty(J,sJ,{value:Y=new Proxy(J,by)}),!Array.isArray(J)){let Z=Object.keys(J),X=Object.getOwnPropertyDescriptors(J),G=Object.getPrototypeOf(J),z=G!==null&&J!==null&&typeof J==="object"&&!Array.isArray(J)&&G!==Object.prototype;if(z){let f=Object.getOwnPropertyDescriptors(G);Z.push(...Object.keys(f)),Object.assign(X,f)}for(let f=0,q=Z.length;f<q;f++){let B=Z[f];if(z&&B==="constructor")continue;if(X[B].get)Object.defineProperty(J,B,{configurable:!0,enumerable:X[B].enumerable,get:X[B].get.bind(Y)})}}}return Y}function Jq(J){let Y;return J!=null&&typeof J==="object"&&(J[sJ]||!(Y=Object.getPrototypeOf(J))||Y===Object.prototype||Array.isArray(J))}function Fz(J,Y=new Set){let Z,X,G,z;if(Z=J!=null&&J[wH])return Z;if(!Jq(J)||Y.has(J))return J;if(Array.isArray(J)){if(Object.isFrozen(J))J=J.slice(0);else Y.add(J);for(let f=0,q=J.length;f<q;f++)if(G=J[f],(X=Fz(G,Y))!==G)J[f]=X}else{if(Object.isFrozen(J))J=Object.assign({},J);else Y.add(J);let f=Object.keys(J),q=Object.getOwnPropertyDescriptors(J);for(let B=0,j=f.length;B<j;B++){if(z=f[B],q[z].get)continue;if(G=J[z],(X=Fz(G,Y))!==G)J[z]=X}}return J}function Yq(J,Y){let Z=J[Y];if(!Z)Object.defineProperty(J,Y,{value:Z=Object.create(null)});return Z}function Oz(J,Y,Z){if(J[Y])return J[Y];let[X,G]=p(Z,{equals:!1,internal:!0});return X.$=G,J[Y]=X}function Iy(J,Y){let Z=Reflect.getOwnPropertyDescriptor(J,Y);if(!Z||Z.get||!Z.configurable||Y===sJ||Y===DG)return Z;return delete Z.value,delete Z.writable,Z.get=()=>J[sJ][Y],Z}function mK(J){GQ()&&Oz(Yq(J,DG),PK)()}function Ny(J){return mK(J),Reflect.ownKeys(J)}function Zq(J,Y,Z,X=!1){if(Y==="__proto__"){console.warn('Refusing to set "__proto__" on a store.');return}if(!X&&J[Y]===Z)return;let G=J[Y],z=J.length;if(hK.onStoreNodeUpdate&&hK.onStoreNodeUpdate(J,Y,Z,G),Z===void 0){if(delete J[Y],J[oY]&&J[oY][Y]&&G!==void 0)J[oY][Y].$()}else if(J[Y]=Z,J[oY]&&J[oY][Y]&&G===void 0)J[oY][Y].$();let f=Yq(J,DG),q;if(q=Oz(f,Y,G))q.$(()=>Z);if(Array.isArray(J)&&J.length!==z){for(let B=J.length;B<z;B++)(q=f[B])&&q.$();(q=Oz(f,"length",z))&&q.$(J.length)}(q=f[PK])&&q.$()}function cK(J,Y){let Z=Object.keys(Y);for(let X=0;X<Z.length;X+=1){let G=Z[X];if(dK(G))continue;Zq(J,G,Y[G])}}function dK(J){return J==="__proto__"||J==="constructor"||J==="prototype"}function Ty(J,Y){if(typeof Y==="function")Y=Y(J);if(Y=Fz(Y),Array.isArray(Y)){if(J===Y)return;let Z=0,X=Y.length;for(;Z<X;Z++){let G=Y[Z];if(J[Z]!==G)Zq(J,Z,G)}Zq(J,"length",X)}else cK(J,Y)}function Mz(J,Y,Z=[]){let X,G=J;if(Y.length>1){X=Y.shift();let f=typeof X,q=Array.isArray(J);if(f==="string"&&(X==="__proto__"||Y.length>1&&dK(X))){console.warn(`Refusing to traverse unsafe key "${X}" on a store.`);return}if(Array.isArray(X)){for(let B=0;B<X.length;B++)Mz(J,[X[B]].concat(Y),Z);return}else if(q&&f==="function"){for(let B=0;B<J.length;B++)if(X(J[B],B))Mz(J,[B].concat(Y),Z);return}else if(q&&f==="object"){let{from:B=0,to:j=J.length-1,by:K=1}=X;for(let H=B;H<=j;H+=K)Mz(J,[H].concat(Y),Z);return}else if(Y.length>1){Mz(J[X],Y,[X].concat(Z));return}G=J[X],Z=[X].concat(Z)}let z=Y[0];if(typeof z==="function"){if(z=z(G,Z),z===G)return}if(X===void 0&&z==null)return;if(z=Fz(z),X===void 0||Jq(G)&&Jq(z)&&!Array.isArray(z))cK(G,z);else Zq(J,X,z)}function NZ(...[J,Y]){let Z=Fz(J||{}),X=Array.isArray(Z);if(typeof Z!=="object"&&typeof Z!=="function")throw Error(`Unexpected type ${typeof Z} received when initializing 'createStore'. Expected an object.`);let G=vK(Z);l9.registerGraph({value:Z,name:Y&&Y.name});function z(...f){XQ(()=>{X&&f.length===1?Ty(Z,f[0]):Mz(Z,f)})}return[G,z]}var wH,DG,oY,PK,hK,by,Qm;var Az=S(()=>{B1();wH=Symbol("store-raw"),DG=Symbol("store-node"),oY=Symbol("store-has"),PK=Symbol("store-self"),hK={onStoreNodeUpdate:null};by={get(J,Y,Z){if(Y===wH)return J;if(Y===sJ)return Z;if(Y===JQ)return mK(J),Z;let X=Yq(J,DG),G=X[Y],z=G?G():J[Y];if(Y===DG||Y===oY||Y==="__proto__")return z;if(!G){let f=Object.getOwnPropertyDescriptor(J,Y);if(GQ()&&(typeof z!=="function"||J.hasOwnProperty(Y))&&!(f&&f.get))z=Oz(X,Y,z)()}return Jq(z)?vK(z):z},has(J,Y){if(Y===wH||Y===sJ||Y===JQ||Y===DG||Y===oY||Y==="__proto__")return!0;return GQ()&&Oz(Yq(J,oY),Y)(),Y in J},set(){return console.warn("Cannot mutate a Store directly"),!0},deleteProperty(){return console.warn("Cannot mutate a Store directly"),!0},ownKeys:Ny,getOwnPropertyDescriptor:Iy};Qm=Symbol("store-root")});function Xq(J){let Y=FY();return{provider:(Z)=>{let X=J.init(Z);return I(z0,{get when(){return X.ready===void 0||X.ready===!0},get children(){return I(Y.Provider,{value:X,get children(){return Z.children}})}})},use(){let Z=NJ(Y);if(!Z)throw Error(`${J.name} context must be used within a context provider`);return Z}}}var hH=S(()=>{w();w();B1()});import{RGBA as LX}from"@opentui/core";function uy(){return Object.keys(JJ.themes)}function Rz(J){return Boolean(JJ.themes[J])}function vH(J,Y){if(!J)return!1;if(!Y||typeof Y!=="object"||!Y.theme)return!1;return DX("themes",{...JJ.themes,[J]:Y}),!0}function PH(J,Y="dark"){let Z=J.defs??{};function X(B,j=[]){if(typeof B==="string"){if(B==="transparent"||B==="none")return LX.fromInts(0,0,0,0);if(B.startsWith("#"))return LX.fromHex(B);if(j.includes(B))return LX.fromInts(0,0,0);let K=Z[B]??J.theme[B];if(K===void 0)return LX.fromInts(0,0,0);return X(K,[...j,B])}return X(B[Y],j)}let G={};for(let[B,j]of Object.entries(J.theme))G[B]=X(j);let z=G.text??LX.fromHex("#ffffff"),f=G.background??LX.fromHex("#000000");return{...{primary:G.primary??z,secondary:G.secondary??z,accent:G.accent??G.primary??z,error:G.error??z,warning:G.warning??z,success:G.success??z,info:G.info??z,text:z,textMuted:G.textMuted??z,background:f,backgroundPanel:G.backgroundPanel??f,backgroundElement:G.backgroundElement??f,backgroundMenu:G.backgroundMenu??G.backgroundElement??f,backgroundDialog:G.backgroundDialog??G.backgroundPanel??f,border:G.border??z,borderActive:G.borderActive??G.border??z,borderSubtle:G.borderSubtle??G.border??z,diffAdded:G.diffAdded??G.success??z,diffRemoved:G.diffRemoved??G.error??z,diffContext:G.diffContext??G.textMuted??z,diffHunkHeader:G.diffHunkHeader??G.textMuted??z,diffAddedBg:G.diffAddedBg??f,diffRemovedBg:G.diffRemovedBg??f,selectedListItemText:G.selectedListItemText??f},...G}}var Ey,MX,JJ,DX,v0,nK;var u1=S(()=>{w();B1();Az();hH();tQ();eQ();Jf();Yf();Zf();Xf();Gf();Ey={claude:$X,conductor:aX,nord:_X,opencode:rX,dracula:pX,tokyonight:sX,"osaka-jade":oX},MX=["primary","success","info"],[JJ,DX]=NZ({themes:{...Ey},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:v0,provider:nK}=Xq({name:"Theme",init:(J)=>{if(J.mode)DX("mode",J.mode);if(J.theme&&Rz(J.theme))DX("active",J.theme);let Y=e1(),Z=U0(()=>{let G=JJ.themes[JJ.active];if(G)return PH(G,JJ.mode);let z=JJ.themes.claude??JJ.themes.opencode??Object.values(JJ.themes)[0];if(!z)return PH({theme:{background:"#000000",text:"#ffffff"}},JJ.mode);return PH(z,JJ.mode)}),X=U0(()=>{let G=Z(),z=G[JJ.focusAccent]??G.primary,f={...G,focusAccent:z};if(!JJ.transparentBackground)return f;let q=LX.fromInts(0,0,0,0);return{...f,background:q,backgroundPanel:q}});return s0(()=>{Y?.setBackgroundColor(X().background)}),{theme:new Proxy({},{get(G,z){let f=X();return f[z]??f.text}}),get selected(){return JJ.active},get transparentBackground(){return JJ.transparentBackground},get focusAccent(){return JJ.focusAccent},mode(){return JJ.mode},set(G){if(!Rz(G))return!1;return DX("active",G),!0},setMode(G){DX("mode",G)},setTransparentBackground(G){DX("transparentBackground",G)},setFocusAccent(G){DX("focusAccent",G)},all(){return uy()},has(G){return Rz(G)}}}}))});function xy(J){let Y=[],Z=J.name;if(Z)Y.push(Z);if(Z==="return")Y.push("enter");if(Z==="enter")Y.push("return");let X=[];if(J.ctrl)X.push("ctrl");if(J.meta)X.push("cmd");if(J.option)X.push("alt");if(J.shift&&Z&&Z.length>1)X.push("shift");if(X.length===0)return Y;let G=`${X.join("+")}+`;return Y.map((z)=>G+z)}function mH(J,Y){if(Y.defaultPrevented)return!1;let Z=xy(Y);for(let X=J.length-1;X>=0;X--){let G=J[X];if(!G)continue;let z=G.config();if(z.enabled===!1)continue;let f=z.bindings.find((q)=>Z.includes(q.key));if(f)return f.cmd(Y,f.slot),Y.preventDefault(),!0}return!1}function hy(){if(cH)return;let J=e1();if(!J)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");cH=J.keyInput,iK=(Y)=>{mH(Gq,Y)},cH.on("keypress",iK)}function L1(J){hy();let Y=wy++,Z={config:J,id:Y};s0(()=>{J()}),Gq.push(Z),P1(()=>{let X=Gq.findIndex((G)=>G.id===Y);if(X>=0)Gq.splice(X,1)})}var wy=1,Gq,cH=null,iK=null;var gJ=S(()=>{w();B1();Gq=[]});import{RGBA as lK}from"@opentui/core";function my(J){let Y=IY(),Z=v0(),{theme:X}=Z,G=e1(),z=!1,f=()=>{if(J.size==="xlarge")return 140;if(J.size==="large")return 110;if(J.size==="small")return 50;return 80},q=2,B=()=>Math.max(8,Y().height-q*2);return(()=>{var j=V("box"),K=V("box");return W(j,K),Q(j,"onMouseDown",()=>{z=!!G?.getSelection()}),Q(j,"onMouseUp",()=>{if(z){z=!1;return}J.onClose?.()}),Q(j,"alignItems","center"),Q(j,"justifyContent","center"),Q(j,"position","absolute"),Q(j,"zIndex",3000),Q(j,"left",0),Q(j,"top",0),Q(K,"onMouseUp",(H)=>{z=!1,H.stopPropagation()}),Q(K,"flexShrink",1),Q(K,"flexGrow",0),Q(K,"paddingTop",1),M(K,()=>J.children),x((H)=>{var U=Y().width,L=Y().height,F=Z.transparentBackground?vy:Py,D=f(),A=Y().width-2,R=B(),l=X.backgroundDialog;return U!==H.e&&(H.e=Q(j,"width",U,H.e)),L!==H.t&&(H.t=Q(j,"height",L,H.t)),F!==H.a&&(H.a=Q(j,"backgroundColor",F,H.a)),D!==H.o&&(H.o=Q(K,"width",D,H.o)),A!==H.i&&(H.i=Q(K,"maxWidth",A,H.i)),R!==H.n&&(H.n=Q(K,"maxHeight",R,H.n)),l!==H.s&&(H.s=Q(K,"backgroundColor",l,H.s)),H},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),j})()}function cy(){let[J,Y]=NZ({stack:[],size:"medium"}),Z=e1(),X=null;function G(){setTimeout(()=>{if(!X)return;if(X.isDestroyed)return;function z(q){for(let B of q.getChildren()){if(B===X)return!0;if(z(B))return!0}return!1}let f=Z?.root;if(!f)return;if(!z(f))return;X.focus()},1)}return L1(()=>({enabled:J.stack.length>0&&!Z?.getSelection()?.getSelectedText(),bindings:[{key:"escape",cmd:()=>{if(Z?.getSelection())Z.clearSelection();J.stack.at(-1)?.onClose?.(),Y("stack",J.stack.slice(0,-1)),G()}},{key:"ctrl+c",cmd:()=>{if(Z?.getSelection())Z.clearSelection();J.stack.at(-1)?.onClose?.(),Y("stack",J.stack.slice(0,-1)),G()}}]})),{clear(){for(let z of J.stack)z.onClose?.();XQ(()=>{Y("size","medium"),Y("stack",[])}),G()},replace(z,f){if(J.stack.length===0)X=Z?.currentFocusedRenderable??null,X?.blur();for(let q of J.stack)q.onClose?.();Y("size","medium"),Y("stack",[{element:z,onClose:f}])},push(z,f){if(J.stack.length===0)X=Z?.currentFocusedRenderable??null,X?.blur();Y("stack",[...J.stack,{element:z,onClose:f}])},pop(){if(J.stack.at(-1)?.onClose?.(),Y("stack",J.stack.slice(0,-1)),J.stack.length===0)G()},get stack(){return J.stack},get size(){return J.size},setSize(z){Y("size",z)}}}function aK(J){let Y=cy();return I($K.Provider,{value:Y,get children(){return[Y1(()=>J.children),(()=>{var Z=V("box");return Q(Z,"position","absolute"),Q(Z,"zIndex",3000),M(Z,I(z0,{get when(){return Y.stack.length},get children(){return I(my,{onClose:()=>Y.clear(),get size(){return Y.size},get children(){return Y.stack.at(-1).element()}})}})),Z})()]}})}function h1(){let J=NJ($K);if(!J)throw Error("useDialog must be used within a DialogProvider");return J}var Py,vy,$K;var uJ=S(()=>{w();w();w();w();w();w();w();w();B1();Az();u1();gJ();Py=lK.fromInts(0,0,0,128),vy=lK.fromInts(0,0,0,64);$K=FY()});import{spawnSync as dH}from"child_process";import*as _K from"fs";function pK(J){return`This folder isn't a git repository yet, and a task needs a git branch to work in. To fix it, turn ${J} into a repo: git init && git add -A && git commit -m "init" \u2014 then create the task again. (Working in non-git folders is coming soon.)`}function rK(J){let Y=J.trim();if(!Y)return"repo path is required";let Z;try{Z=_K.statSync(Y)}catch{return`path does not exist: ${Y}`}if(!Z.isDirectory())return`not a directory: ${Y}`;try{if(dH("git",["rev-parse","--git-dir"],{cwd:Y,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return pK(Y)}catch{return pK(Y)}return null}function Cz(J){if(!J)return null;try{let Y=dH("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:J,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]});if(Y.status!==0)return null;let Z=Y.stdout.trim();if(!Z||Z==="HEAD")return null;return Z}catch{return null}}function oK(J){if(!J)return[];try{let Y=dH("git",["for-each-ref","--format=%(refname:short)","refs/heads/"],{cwd:J,encoding:"utf-8",timeout:2000});if(Y.status!==0)return[];return Y.stdout.split(`
|
|
222
|
-
`).map((Z)=>Z.trim()).filter(Boolean).sort((Z,X)=>{let G=(q)=>q==="main"?0:q==="master"?1:q==="develop"?2:3,z=G(Z),f=G(X);if(z!==f)return z-f;return Z.localeCompare(X)})}catch{return[]}}var VY="main";var zq=()=>{};import*as sK from"fs";import*as Qq from"os";function fJ(J){if(J==="~")return Qq.homedir();if(J.startsWith("~/"))return Qq.homedir()+J.slice(1);return J}function nH(J){if(!J)return{base:"",filter:""};let Z=fJ(J==="~"?"~/":J);if(Z.endsWith("/"))return{base:Z,filter:""};let X=Z.lastIndexOf("/");if(X===-1)return{base:"",filter:Z};return{base:Z.slice(0,X+1),filter:Z.slice(X+1)}}function iH(J){if(!J)return[];try{let Y=sK.readdirSync(J,{withFileTypes:!0}),Z=[];for(let X of Y)if(X.isDirectory())Z.push(X.name);return Z.sort((X,G)=>X.localeCompare(G))}catch{return[]}}function lH(J,Y){let Z=Y.toLowerCase(),G=Z.startsWith(".")?J:J.filter((z)=>!z.startsWith("."));if(!Z)return G;return G.filter((z)=>z.toLowerCase().startsWith(Z))}function gz(J,Y,Z){let X=Y+Z;if(J.startsWith("~")){let G=Qq.homedir();if(X===G)return"~";if(X.startsWith(`${G}/`))return`~${X.slice(G.length)}`}return X}var fq=()=>{};import{spawn as dy}from"child_process";import*as FX from"fs";import*as yz from"path";function tK(J){let Y=J.trim().replace(/\/+$/,"");if(!Y)return"";let Z=Y.lastIndexOf("/"),X=Y.lastIndexOf(":"),G=Math.max(Z,X);return(G>=0?Y.slice(G+1):Y).replace(/\.git$/i,"")}function eK(J){let Y=J.trim();if(!Y)return"git URL is required";let Z=Y.includes("://"),X=Y.includes("@")&&Y.includes(":"),G=Y.includes("/");if(!Z&&!X&&!G)return`does not look like a git URL: ${Y}`;return null}function J4(J,Y){let Z=Y.trim();if(!Z)return"folder name is required";if(Z.includes("/")||Z.includes("\\"))return"folder name cannot contain path separators";let X=J.trim();if(!X)return"parent directory is required";let G=fJ(X),z;try{z=FX.statSync(G)}catch{return`parent directory does not exist: ${G}`}if(!z.isDirectory())return`not a directory: ${G}`;let f=yz.join(G,Z);if(FX.existsSync(f))return`target already exists: ${f}`;return null}function Y4(J,Y){return yz.join(fJ(J.trim()),Y.trim())}function Z4(J,Y){let Z=Y.trim();if(!Z)return Y;let X=fJ(J.trim());if(!X)return Y;try{if(!FX.statSync(X).isDirectory())return Y}catch{return Y}if(!FX.existsSync(yz.join(X,Z)))return Z;for(let G=2;G<1000;G++){let z=`${Z}-${G}`;if(!FX.existsSync(yz.join(X,z)))return z}return Z}function X4(J,Y,Z){return new Promise((X)=>{let G="";try{let z=dy("git",["clone","--progress",J,Y],{stdio:["ignore","ignore","pipe"]});z.stderr?.setEncoding("utf-8"),z.stderr?.on("data",(f)=>{if(G+=f,Z){let q=f.split(/[\r\n]+/).filter((j)=>j.trim().length>0),B=q[q.length-1];if(B)Z(B)}}),z.on("error",(f)=>{X({ok:!1,error:f.message})}),z.on("close",(f)=>{if(f===0){X({ok:!0,path:Y});return}let q=G.split(/[\r\n]+/).filter((B)=>B.trim().length>0).pop()??`git clone exited with ${f}`;X({ok:!1,error:q})})}catch(z){X({ok:!1,error:z instanceof Error?z.message:String(z)})}})}var G4=S(()=>{fq()});function qq(J){if(J==="existing")return"clone";if(J==="clone")return"adopt";return"existing"}function z4(J){if(J==="existing")return"adopt";if(J==="clone")return"existing";return"clone"}function Q4(J,Y){let Z=J.trim();if(Y.includes(Z))return"saved";if(Z.startsWith("~"))return"browse";if(Z.includes("/"))return"browse";return"saved"}function yJ(J){return J.replace(/[\r\n]+/g,"")}function $H(J,Y="existing"){if(J==="confirm")return"tabs";if(J==="tabs")return"engine";if(J==="engine")return aH(Y);if(Y==="clone"){if(J==="cloneUrl")return"cloneParent";if(J==="cloneParent")return"cloneFolder";if(J==="cloneFolder")return"cloneBaseRef";if(J==="cloneBaseRef")return"confirm";return"cloneUrl"}if(Y==="adopt")return J==="adoptFilter"?"confirm":"adoptFilter";if(J==="repo")return"baseRef";if(J==="baseRef")return"confirm";return"repo"}function aH(J){if(J==="clone")return"cloneUrl";if(J==="adopt")return"adoptFilter";return"repo"}function f4(J,Y){let Z=Y.trim();if(!Z)return J;return J.filter((X)=>vz(Z,X.path))}function q4(J,Y){let Z=new Set,X=[];for(let G of[J,...Y]){let z=G.trim();if(!z||Z.has(z))continue;Z.add(z),X.push(z)}return X}function B4(J,Y){let Z=Y.trim().toLowerCase();if(!Z)return J;return J.filter((X)=>X.toLowerCase().includes(Z))}function j4(J,Y){let Z=Y.trim().toLowerCase();if(!Z)return J;return J.filter((X)=>X.toLowerCase().includes(Z))}function Sz(J,Y,Z=ny){let X=J.length;if(X<=Z)return{items:J,start:0,total:X};let G=Math.floor(Z/2),z=Math.max(0,Y-G);if(z+Z>X)z=X-Z;return{items:J.slice(z,z+Z),start:z,total:X}}function NY(J,Y){if(Y<=0)return 0;return Math.max(0,Math.min(Y-1,J))}function H4(J,Y,Z){let X=Y[Z];if(X)return X;return J.trim()||VY}var ny=8;var pH=S(()=>{kq();zq()});import{TextAttributes as $J}from"@opentui/core";function W4(J){let Y=h1(),{theme:Z}=v0(),[X,G]=p("existing"),z=()=>{let b=J.availableVendors;return b&&b.length>0?b:m1},f=(()=>{let b=z(),W0=J.defaultVendor??"claude";return b.includes(W0)?W0:b[0]??"claude"})(),[q,B]=p(f),[j,K]=p("tabs"),[H,U]=p(J.defaultRepo),[L,F]=p(Cz(fJ(J.defaultRepo.trim()))??VY),[D,A]=p(!1),[R,l]=p(""),[g,k]=p(J.defaultCloneParent?.trim()?J.defaultCloneParent:"~/"),[C,N]=p(""),[_,X0]=p(!1),[s,Y0]=p(VY),[u,Q0]=p(!1),[t,j0]=p(""),S0=U0(()=>q4(J.defaultRepo,J.savedRepos)),$=U0(()=>Q4(H(),S0())),P=U0(()=>nH(H())),G0=U0(()=>iH(P().base)),Z0=U0(()=>lH(G0(),P().filter)),K0=U0(()=>B4(S0(),H())),h=U0(()=>$()==="browse"?Z0():K0()),[y,e]=p(0),V0=U0(()=>Sz(h(),y())),[q0,A0]=p(!1),I0=U0(()=>oK(fJ(H().trim()))),k0=U0(()=>j4(I0(),L())),[a0,v]=p(0),H0=U0(()=>Sz(k0(),a0())),o=U0(()=>nH(g())),R0=U0(()=>iH(o().base)),b0=U0(()=>lH(R0(),o().filter)),[w0,N0]=p(0),d=U0(()=>Sz(b0(),w0())),[J0,F0]=p(!1),[d0,r0]=p(""),[x0,e0]=p(0),[G1,F1]=p(new Set),[a]=ZQ(()=>X()==="adopt"?fJ(H().trim()):null,async(b)=>J.discoverAdoptable?await J.discoverAdoptable(b):[]),r=U0(()=>f4(a()??[],d0())),O=U0(()=>Sz(r().map((b)=>b.path),x0())),L0=U0(()=>{let b=O();return r().slice(b.start,b.start+b.items.length)});s0(()=>{r(),e0((b)=>NY(b,r().length))});function f0(b){F1((W0)=>{let h0=new Set(W0);if(h0.has(b))h0.delete(b);else h0.add(b);return h0})}function n0(){let b=r()[x0()];if(b)f0(b.path)}s0(()=>{k0(),v(0)}),s0(()=>{let b=fJ(H().trim());if(!b)return;if(D())return;let W0=Cz(b);if(W0)F(W0)}),s0(()=>{h(),e(0)}),s0(()=>{b0(),N0(0)}),s0(()=>{let b=R(),W0=g();if(_())return;let h0=tK(b);N(Z4(W0,h0))});let[M0,m0]=p(null);s0(()=>{H(),R(),g(),C(),d0(),m0(null)});function D0(){let b=fJ(H().trim());if(!b)return;let W0=rK(b);if(W0){m0(W0),K("repo");return}let h0=L().trim()||VY;J.onSubmit({repo:b,baseRef:h0,vendor:q()}),Y.clear()}async function E0(){if(u())return;let b=eK(R());if(b){m0(b),K("cloneUrl");return}let W0=J4(g(),C());if(W0){m0(W0),K(C().trim()?"cloneParent":"cloneFolder");return}let h0=Y4(g(),C());Q0(!0),j0(`Cloning into ${h0}\u2026`);let Q1=await X4(R().trim(),h0,(VJ)=>{j0(VJ)});if(Q0(!1),!Q1.ok){m0(`git clone failed: ${Q1.error}`),K("cloneUrl");return}let YJ=s().trim()||VY,qJ=fJ(g().trim());J.onSubmit({repo:Q1.path,baseRef:YJ,vendor:q(),cloned:{parentDir:qJ}}),Y.clear()}function z1(){let b=r();if(b.length===0){m0("no adoptable worktrees to import");return}let W0=G1(),h0=W0.size>0?b.filter((Q1)=>W0.has(Q1.path)):b.slice(x0(),x0()+1);if(h0.length===0)return;J.onSubmit({mode:"adopt",repo:fJ(H().trim()),vendor:q(),adopt:h0.map((Q1)=>({worktreePath:Q1.path,branch:Q1.branch}))}),Y.clear()}function p0(){if(X()==="clone"){E0();return}if(X()==="adopt"){z1();return}D0()}function _0(b){if(u())return;if(b===X())return;G(b),K(aH(b)),m0(null)}function Z1(b){if(u())return;let W0=b===1?qq(X()):z4(X());if(W0===X())return;G(W0),m0(null),K("tabs")}function C1(b){B((W0)=>b===1?eY(z(),W0):Iq(z(),W0))}function g0(){if(!H().trim()&&$()==="saved"){let W0=h()[0];if(W0){U(W0),K("baseRef");return}}if($()==="browse"){let h0=Z0()[y()],Q1=P();if(h0){U(gz(H(),Q1.base,h0)),e(0),A0(!0),K("baseRef");return}K("baseRef");return}let b=h()[y()];if(b){U(b),K("baseRef");return}K("baseRef")}function c(b){let h0=h()[b];if(!h0)return;if($()==="browse"){let Q1=P();U(gz(H(),Q1.base,h0)),e(b),A0(!0),K("baseRef");return}U(h0),e(b),K("baseRef")}function C0(){let W0=b0()[w0()],h0=o();if(W0){k(gz(g(),h0.base,W0)),N0(0),F0(!0),K("cloneFolder");return}K("cloneFolder")}function A1(b){let h0=b0()[b];if(!h0)return;let Q1=o();k(gz(g(),Q1.base,h0)),N0(b),F0(!0),K("cloneFolder")}let S1=()=>{let b=r();if(b.length===0)return;let W0=b.every((h0)=>G1().has(h0.path));F1(W0?new Set:new Set(b.map((h0)=>h0.path)))};L1(()=>({bindings:[{key:"tab",cmd:()=>K((b)=>$H(b,X()))},{key:"ctrl+]",cmd:()=>_0(qq(X()))},{key:"ctrl+[",cmd:()=>_0(qq(X()))},{key:"ctrl+e",cmd:()=>B((b)=>eY(z(),b))},{key:"up",cmd:()=>{if(u())return;if(X()==="existing"&&j()==="repo"){let b=h();if(b.length===0)return;e(NY(y()-1,b.length));return}if(X()==="existing"&&j()==="baseRef"){let b=k0();if(b.length===0)return;v(NY(a0()-1,b.length));return}if(X()==="clone"&&j()==="cloneParent"){let b=b0();if(b.length===0)return;N0(NY(w0()-1,b.length));return}if(X()==="adopt"){let b=r();if(b.length===0)return;e0(NY(x0()-1,b.length))}}},{key:"down",cmd:()=>{if(u())return;if(X()==="existing"&&j()==="repo"){let b=h();if(b.length===0)return;e(NY(y()+1,b.length));return}if(X()==="existing"&&j()==="baseRef"){let b=k0();if(b.length===0)return;v(NY(a0()+1,b.length));return}if(X()==="clone"&&j()==="cloneParent"){let b=b0();if(b.length===0)return;N0(NY(w0()+1,b.length));return}if(X()==="adopt"){let b=r();if(b.length===0)return;e0(NY(x0()+1,b.length))}}},...j()==="tabs"||j()==="engine"?[{key:"left",cmd:()=>j()==="tabs"?Z1(-1):C1(-1)},{key:"right",cmd:()=>j()==="tabs"?Z1(1):C1(1)},{key:"return",cmd:()=>K((b)=>$H(b,X()))}]:[],...X()==="adopt"?[{key:"ctrl+a",cmd:S1}]:[]]})),L1(()=>({enabled:j()==="confirm"&&!u(),bindings:[{key:"return",cmd:()=>p0()}]}));let H1=(b)=>j()===b?Z.primary:Z.textMuted,o0=(b)=>j()===b?$J.BOLD|$J.UNDERLINE:void 0,v1=(b,W0)=>b?W0?$J.BOLD|$J.UNDERLINE:$J.BOLD:void 0;return(()=>{var b=V("box"),W0=V("box"),h0=V("text"),Q1=V("box"),YJ=V("box"),qJ=V("text"),VJ=V("box"),bY=V("box"),TY=V("text"),KJ=V("box"),RX=V("text"),tY=V("text");return W(b,W0),W(b,Q1),W(b,KJ),Q(b,"paddingLeft",2),Q(b,"paddingRight",2),Q(b,"gap",0),W(W0,h0),Q(W0,"flexDirection","row"),W(h0,T("New task")),W(Q1,YJ),Q(Q1,"gap",1),Q(Q1,"paddingTop",1),Q(Q1,"paddingBottom",1),M(Q1,()=>{let n=()=>j()==="tabs",m=(i)=>i?Z.primary:Z.textMuted;return(()=>{var i=V("box"),E=V("text"),O0=V("text"),T0=V("text");return W(i,E),W(i,O0),W(i,T0),Q(i,"flexDirection","row"),Q(i,"gap",2),Q(E,"onMouseUp",()=>_0("existing")),M(E,()=>X()==="existing"?"\u25B8 For Existing":" For Existing"),Q(O0,"onMouseUp",()=>_0("clone")),M(O0,()=>X()==="clone"?"\u25B8 For New Repo":" For New Repo"),Q(T0,"onMouseUp",()=>_0("adopt")),M(T0,()=>X()==="adopt"?"\u25B8 Adopt Worktree":" Adopt Worktree"),x((y0)=>{var P0=m(X()==="existing"),D1=v1(X()==="existing",n()),V1=m(X()==="clone"),ZJ=v1(X()==="clone",n()),pJ=m(X()==="adopt"),gG=v1(X()==="adopt",n());return P0!==y0.e&&(y0.e=Q(E,"fg",P0,y0.e)),D1!==y0.t&&(y0.t=Q(E,"attributes",D1,y0.t)),V1!==y0.a&&(y0.a=Q(O0,"fg",V1,y0.a)),ZJ!==y0.o&&(y0.o=Q(O0,"attributes",ZJ,y0.o)),pJ!==y0.i&&(y0.i=Q(T0,"fg",pJ,y0.i)),gG!==y0.n&&(y0.n=Q(T0,"attributes",gG,y0.n)),y0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),i})()},YJ),W(YJ,qJ),W(YJ,VJ),Q(YJ,"gap",0),W(qJ,T("engine")),W(VJ,bY),W(VJ,TY),Q(VJ,"flexDirection","row"),Q(VJ,"gap",2),M(VJ,I(X1,{get each(){return z()},children:(n)=>{let m=()=>q()===n;return(()=>{var i=V("text");return Q(i,"onMouseUp",()=>B(n)),M(i,()=>m()?"\u25B8 ":" ",null),M(i,n,null),x((E)=>{var O0=m()?Z.primary:Z.textMuted,T0=m()?$J.BOLD:void 0;return O0!==E.e&&(E.e=Q(i,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(i,"attributes",T0,E.t)),E},{e:void 0,t:void 0}),i})()}}),bY),Q(bY,"flexGrow",1),W(TY,T("ctrl+e")),M(Q1,I(z0,{get when(){return X()==="existing"},get children(){return[(()=>{var n=V("box"),m=V("text"),i=V("input");return W(n,m),W(n,i),Q(n,"gap",0),W(m,T("repo")),Q(i,"onInput",(E)=>{A0(!1),U(yJ(E))}),Q(i,"onSubmit",()=>{if(!H().trim())return;g0()}),x((E)=>{var O0=H1("repo"),T0=o0("repo"),y0=H(),P0=J.defaultRepo,D1=j()==="repo";return O0!==E.e&&(E.e=Q(m,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(m,"attributes",T0,E.t)),y0!==E.a&&(E.a=Q(i,"value",y0,E.a)),P0!==E.o&&(E.o=Q(i,"placeholder",P0,E.o)),D1!==E.i&&(E.i=Q(i,"focused",D1,E.i)),E},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),n})(),I(z0,{get when(){return Y1(()=>j()==="repo"&&h().length>0)()&&!q0()},get children(){var n=V("box");return Q(n,"gap",0),Q(n,"paddingLeft",2),M(n,I(z0,{get when(){return V0().start>0},get children(){var m=V("text"),i=T("\u2191 "),E=T(" more");return W(m,i),W(m,E),Q(m,"wrapMode","none"),M(m,()=>V0().start,E),x((O0)=>Q(m,"fg",Z.textMuted,O0)),m}}),null),M(n,I(X1,{get each(){return V0().items},children:(m,i)=>{let E=()=>V0().start+i(),O0=()=>E()===y(),T0=()=>$()==="saved"&&m===J.defaultRepo,y0=()=>$()==="saved"&&H().trim()===m,P0=()=>$()==="browse"?"/":"",D1=()=>T0()?" (current dir)":"";return(()=>{var V1=V("text");return Q(V1,"wrapMode","none"),Q(V1,"onMouseUp",()=>c(E())),M(V1,()=>O0()?"\u25B8 ":" ",null),M(V1,m,null),M(V1,P0,null),M(V1,D1,null),x((ZJ)=>{var pJ=O0()?Z.primary:y0()?Z.accent:Z.textMuted,gG=O0()?$J.BOLD:void 0;return pJ!==ZJ.e&&(ZJ.e=Q(V1,"fg",pJ,ZJ.e)),gG!==ZJ.t&&(ZJ.t=Q(V1,"attributes",gG,ZJ.t)),ZJ},{e:void 0,t:void 0}),V1})()}}),null),M(n,I(z0,{get when(){return V0().start+V0().items.length<V0().total},get children(){var m=V("text"),i=T("\u2193 "),E=T(" more");return W(m,i),W(m,E),Q(m,"wrapMode","none"),M(m,()=>V0().total-V0().start-V0().items.length,E),x((O0)=>Q(m,"fg",Z.textMuted,O0)),m}}),null),n}}),(()=>{var n=V("box"),m=V("text"),i=V("input");return W(n,m),W(n,i),Q(n,"gap",0),W(m,T("from branch")),Q(i,"placeholder",VY),Q(i,"onInput",(E)=>{A(!0),F(yJ(E))}),Q(i,"onSubmit",()=>{F(H4(L(),k0(),a0())),A(!0),D0()}),x((E)=>{var O0=H1("baseRef"),T0=o0("baseRef"),y0=L(),P0=j()==="baseRef";return O0!==E.e&&(E.e=Q(m,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(m,"attributes",T0,E.t)),y0!==E.a&&(E.a=Q(i,"value",y0,E.a)),P0!==E.o&&(E.o=Q(i,"focused",P0,E.o)),E},{e:void 0,t:void 0,a:void 0,o:void 0}),n})(),I(z0,{get when(){return Y1(()=>j()==="baseRef"&&k0().length===0)()&&M0()==null},get children(){var n=V("box"),m=V("text");return W(n,m),Q(n,"gap",0),Q(n,"paddingLeft",2),Q(n,"paddingBottom",1),Q(m,"wrapMode","none"),M(m,()=>I0().length===0?"(no local branches found \u2014 typed text will be used as ref)":"(no match \u2014 typed text will be used as ref)"),x((i)=>Q(m,"fg",Z.textMuted,i)),n}}),I(z0,{get when(){return Y1(()=>j()==="baseRef")()&&k0().length>0},get children(){var n=V("box");return Q(n,"gap",0),Q(n,"paddingLeft",2),Q(n,"paddingBottom",1),M(n,I(z0,{get when(){return H0().start>0},get children(){var m=V("text"),i=T("\u2191 "),E=T(" more");return W(m,i),W(m,E),Q(m,"wrapMode","none"),M(m,()=>H0().start,E),x((O0)=>Q(m,"fg",Z.textMuted,O0)),m}}),null),M(n,I(X1,{get each(){return H0().items},children:(m,i)=>{let E=()=>H0().start+i(),O0=()=>E()===a0(),T0=()=>L().trim()===m;return(()=>{var y0=V("text");return Q(y0,"wrapMode","none"),Q(y0,"onMouseUp",()=>{F(m),A(!0),v(E()),K("confirm")}),M(y0,()=>O0()?"\u25B8 ":" ",null),M(y0,m,null),x((P0)=>{var D1=O0()?Z.primary:T0()?Z.accent:Z.textMuted,V1=O0()?$J.BOLD:void 0;return D1!==P0.e&&(P0.e=Q(y0,"fg",D1,P0.e)),V1!==P0.t&&(P0.t=Q(y0,"attributes",V1,P0.t)),P0},{e:void 0,t:void 0}),y0})()}}),null),M(n,I(z0,{get when(){return H0().start+H0().items.length<H0().total},get children(){var m=V("text"),i=T("\u2193 "),E=T(" more");return W(m,i),W(m,E),Q(m,"wrapMode","none"),M(m,()=>H0().total-H0().start-H0().items.length,E),x((O0)=>Q(m,"fg",Z.textMuted,O0)),m}}),null),n}})]}}),null),M(Q1,I(z0,{get when(){return X()==="clone"},get children(){return[(()=>{var n=V("box"),m=V("text"),i=V("input");return W(n,m),W(n,i),Q(n,"gap",0),W(m,T("git url")),Q(i,"placeholder","https://github.com/user/repo.git"),Q(i,"onInput",(E)=>l(yJ(E))),Q(i,"onSubmit",()=>{if(!R().trim())return;K("cloneParent")}),x((E)=>{var O0=H1("cloneUrl"),T0=o0("cloneUrl"),y0=R(),P0=j()==="cloneUrl";return O0!==E.e&&(E.e=Q(m,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(m,"attributes",T0,E.t)),y0!==E.a&&(E.a=Q(i,"value",y0,E.a)),P0!==E.o&&(E.o=Q(i,"focused",P0,E.o)),E},{e:void 0,t:void 0,a:void 0,o:void 0}),n})(),(()=>{var n=V("box"),m=V("text"),i=V("input");return W(n,m),W(n,i),Q(n,"gap",0),W(m,T("parent dir")),Q(i,"placeholder","~/"),Q(i,"onInput",(E)=>{F0(!1),k(yJ(E))}),Q(i,"onSubmit",()=>C0()),x((E)=>{var O0=H1("cloneParent"),T0=o0("cloneParent"),y0=g(),P0=j()==="cloneParent";return O0!==E.e&&(E.e=Q(m,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(m,"attributes",T0,E.t)),y0!==E.a&&(E.a=Q(i,"value",y0,E.a)),P0!==E.o&&(E.o=Q(i,"focused",P0,E.o)),E},{e:void 0,t:void 0,a:void 0,o:void 0}),n})(),I(z0,{get when(){return j()==="cloneParent"},get children(){var n=V("box"),m=V("text");return W(n,m),Q(n,"paddingLeft",2),W(m,T("(remembered \u2014 next clone defaults to this dir)")),Q(m,"wrapMode","none"),x((i)=>Q(m,"fg",Z.textMuted,i)),n}}),I(z0,{get when(){return Y1(()=>j()==="cloneParent"&&b0().length>0)()&&!J0()},get children(){var n=V("box");return Q(n,"gap",0),Q(n,"paddingLeft",2),M(n,I(z0,{get when(){return d().start>0},get children(){var m=V("text"),i=T("\u2191 "),E=T(" more");return W(m,i),W(m,E),Q(m,"wrapMode","none"),M(m,()=>d().start,E),x((O0)=>Q(m,"fg",Z.textMuted,O0)),m}}),null),M(n,I(X1,{get each(){return d().items},children:(m,i)=>{let E=()=>d().start+i(),O0=()=>E()===w0();return(()=>{var T0=V("text"),y0=T("/");return W(T0,y0),Q(T0,"wrapMode","none"),Q(T0,"onMouseUp",()=>A1(E())),M(T0,()=>O0()?"\u25B8 ":" ",y0),M(T0,m,y0),x((P0)=>{var D1=O0()?Z.primary:Z.textMuted,V1=O0()?$J.BOLD:void 0;return D1!==P0.e&&(P0.e=Q(T0,"fg",D1,P0.e)),V1!==P0.t&&(P0.t=Q(T0,"attributes",V1,P0.t)),P0},{e:void 0,t:void 0}),T0})()}}),null),M(n,I(z0,{get when(){return d().start+d().items.length<d().total},get children(){var m=V("text"),i=T("\u2193 "),E=T(" more");return W(m,i),W(m,E),Q(m,"wrapMode","none"),M(m,()=>d().total-d().start-d().items.length,E),x((O0)=>Q(m,"fg",Z.textMuted,O0)),m}}),null),n}}),(()=>{var n=V("box"),m=V("text"),i=V("input");return W(n,m),W(n,i),Q(n,"gap",0),W(m,T("folder name")),Q(i,"placeholder","auto from url"),Q(i,"onInput",(E)=>{X0(!0),N(yJ(E))}),Q(i,"onSubmit",()=>K("cloneBaseRef")),x((E)=>{var O0=H1("cloneFolder"),T0=o0("cloneFolder"),y0=C(),P0=j()==="cloneFolder";return O0!==E.e&&(E.e=Q(m,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(m,"attributes",T0,E.t)),y0!==E.a&&(E.a=Q(i,"value",y0,E.a)),P0!==E.o&&(E.o=Q(i,"focused",P0,E.o)),E},{e:void 0,t:void 0,a:void 0,o:void 0}),n})(),(()=>{var n=V("box"),m=V("text"),i=V("input");return W(n,m),W(n,i),Q(n,"gap",0),W(m,T("base branch")),Q(i,"placeholder",VY),Q(i,"onInput",(E)=>Y0(yJ(E))),Q(i,"onSubmit",()=>void E0()),x((E)=>{var O0=H1("cloneBaseRef"),T0=o0("cloneBaseRef"),y0=s(),P0=j()==="cloneBaseRef";return O0!==E.e&&(E.e=Q(m,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(m,"attributes",T0,E.t)),y0!==E.a&&(E.a=Q(i,"value",y0,E.a)),P0!==E.o&&(E.o=Q(i,"focused",P0,E.o)),E},{e:void 0,t:void 0,a:void 0,o:void 0}),n})(),I(z0,{get when(){return u()},get children(){var n=V("box"),m=V("text");return W(n,m),Q(n,"gap",0),Q(n,"paddingLeft",2),Q(m,"wrapMode","none"),M(m,()=>t()||"Cloning\u2026"),x((i)=>Q(m,"fg",Z.textMuted,i)),n}})]}}),null),M(Q1,I(z0,{get when(){return X()==="adopt"},get children(){return[(()=>{var n=V("box"),m=V("text"),i=V("input");return W(n,m),W(n,i),Q(n,"gap",0),W(m,T("filter (path glob)")),Q(i,"placeholder","* \u2014 type e.g. feature-* to narrow"),Q(i,"onInput",(E)=>r0(yJ(E))),Q(i,"onSubmit",()=>n0()),x((E)=>{var O0=H1("adoptFilter"),T0=o0("adoptFilter"),y0=d0(),P0=j()==="adoptFilter";return O0!==E.e&&(E.e=Q(m,"fg",O0,E.e)),T0!==E.t&&(E.t=Q(m,"attributes",T0,E.t)),y0!==E.a&&(E.a=Q(i,"value",y0,E.a)),P0!==E.o&&(E.o=Q(i,"focused",P0,E.o)),E},{e:void 0,t:void 0,a:void 0,o:void 0}),n})(),(()=>{var n=V("box"),m=V("text"),i=T("repo: ");return W(n,m),Q(n,"paddingLeft",2),W(m,i),Q(m,"wrapMode","none"),M(m,()=>fJ(H().trim())||"(none)",null),x((E)=>Q(m,"fg",Z.textMuted,E)),n})(),I(z0,{get when(){return a.loading},get children(){var n=V("box"),m=V("text");return W(n,m),Q(n,"paddingLeft",2),W(m,T("scanning worktrees\u2026")),Q(m,"wrapMode","none"),x((i)=>Q(m,"fg",Z.textMuted,i)),n}}),I(z0,{get when(){return Y1(()=>!a.loading)()&&r().length===0},get children(){var n=V("box"),m=V("text");return W(n,m),Q(n,"paddingLeft",2),Q(m,"wrapMode","none"),M(m,()=>(a()??[]).length===0?"no unlinked worktrees \u2014 every git worktree here is already a task":"no worktrees match the filter"),x((i)=>Q(m,"fg",Z.textMuted,i)),n}}),I(z0,{get when(){return r().length>0},get children(){var n=V("box"),m=V("text");return W(n,m),Q(n,"gap",0),Q(n,"paddingLeft",2),M(n,I(z0,{get when(){return O().start>0},get children(){var i=V("text"),E=T("\u2191 "),O0=T(" more");return W(i,E),W(i,O0),Q(i,"wrapMode","none"),M(i,()=>O().start,O0),x((T0)=>Q(i,"fg",Z.textMuted,T0)),i}}),m),M(n,I(X1,{get each(){return L0()},children:(i,E)=>{let O0=()=>O().start+E(),T0=()=>O0()===x0(),y0=()=>G1().has(i.path),P0=()=>[i.dirty?"dirty":"",i.kobeManaged?"":"external"].filter(Boolean).join(",");return(()=>{var D1=V("text");return Q(D1,"wrapMode","none"),Q(D1,"onMouseUp",()=>{e0(O0()),f0(i.path)}),M(D1,()=>T0()?"\u25B8 ":" ",null),M(D1,()=>y0()?"[x] ":"[ ] ",null),M(D1,()=>i.branch,null),M(D1,(()=>{var V1=Y1(()=>!!P0());return()=>V1()?` (${P0()})`:""})(),null),x((V1)=>{var ZJ=T0()?Z.primary:y0()?Z.accent:Z.textMuted,pJ=T0()?$J.BOLD:void 0;return ZJ!==V1.e&&(V1.e=Q(D1,"fg",ZJ,V1.e)),pJ!==V1.t&&(V1.t=Q(D1,"attributes",pJ,V1.t)),V1},{e:void 0,t:void 0}),D1})()}}),m),M(n,I(z0,{get when(){return O().start+O().items.length<O().total},get children(){var i=V("text"),E=T("\u2193 "),O0=T(" more");return W(i,E),W(i,O0),Q(i,"wrapMode","none"),M(i,()=>O().total-O().start-O().items.length,O0),x((T0)=>Q(i,"fg",Z.textMuted,T0)),i}}),m),Q(m,"wrapMode","none"),M(m,(()=>{var i=Y1(()=>G1().size>0);return()=>i()?`${G1().size} selected \xB7 enter toggles \xB7 ctrl+a all \xB7 Create imports`:"enter toggles \xB7 ctrl+a all \xB7 Create imports the highlighted row"})()),x((i)=>Q(m,"fg",Z.textMuted,i)),n}})]}}),null),M(Q1,I(z0,{get when(){return M0()},get children(){var n=V("text"),m=T("\u203B ");return W(n,m),Q(n,"wrapMode","word"),M(n,M0,null),x((i)=>Q(n,"fg",Z.error,i)),n}}),null),W(KJ,RX),W(KJ,tY),Q(KJ,"flexDirection","row"),Q(KJ,"justifyContent","space-between"),Q(KJ,"alignItems","center"),Q(KJ,"paddingTop",1),Q(KJ,"paddingBottom",1),W(RX,T("\u2191\u2193 pick \xB7 tab next field \xB7 \u2190\u2192 switch \xB7 enter done \xB7 esc cancel")),Q(tY,"onMouseUp",()=>p0()),M(tY,(()=>{var n=Y1(()=>!!u());return()=>n()?"[ Cloning\u2026 ]":j()==="confirm"?"\u25B8 [ Create ]":"[ Create ]"})()),x((n)=>{var m=$J.BOLD,i=Z.text,E=H1("engine"),O0=o0("engine"),T0=Z.textMuted,y0=Z.textMuted,P0=j()==="confirm"?Z.primary:Z.text,D1=j()==="confirm"?$J.BOLD:void 0;return m!==n.e&&(n.e=Q(h0,"attributes",m,n.e)),i!==n.t&&(n.t=Q(h0,"fg",i,n.t)),E!==n.a&&(n.a=Q(qJ,"fg",E,n.a)),O0!==n.o&&(n.o=Q(qJ,"attributes",O0,n.o)),T0!==n.i&&(n.i=Q(TY,"fg",T0,n.i)),y0!==n.n&&(n.n=Q(RX,"fg",y0,n.n)),P0!==n.s&&(n.s=Q(tY,"fg",P0,n.s)),D1!==n.h&&(n.h=Q(tY,"attributes",D1,n.h)),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),b})()}var V4=S(()=>{w();w();w();w();w();w();w();w();BJ();B1();u1();zq();gJ();fq();uJ();G4();pH()});function iy(J,Y,Z,X){return new Promise((G)=>{J.replace(()=>I(W4,{defaultRepo:Y,savedRepos:Z,get defaultCloneParent(){return X?.defaultCloneParent},get defaultVendor(){return X?.defaultVendor},get availableVendors(){return X?.availableVendors},get discoverAdoptable(){return X?.discoverAdoptable},onSubmit:(z)=>G(z),onCancel:()=>G(void 0)}),()=>G(void 0)),J.setSize("medium")})}var Bq;var kz=S(()=>{w();V4();pH();Bq={show:iy}});function K4(J,Y){return[{key:"tab",cmd:()=>Y.cycleField(1)},{key:"shift+tab",cmd:()=>Y.cycleField(-1)},{key:"ctrl+e",cmd:()=>Y.stepEngine(1)},...J==="engine"?[{key:"left",cmd:()=>Y.stepEngine(-1)},{key:"right",cmd:()=>Y.stepEngine(1)},{key:"return",cmd:()=>Y.commit()}]:[]]}import{TextAttributes as U4}from"@opentui/core";function ly(J){let Y=h1(),{theme:Z}=v0(),[X,G]=p("prompt"),[z,f]=p(""),[q,B]=p(J.defaultVendor),[j,K]=p(J.defaultBaseRef);function H(D){let A=jq.indexOf(X());G(jq[(A+D+jq.length)%jq.length]??"prompt")}function U(D){let A=J.engines;if(A.length===0)return;if(D>0){B((l)=>eY(A,l));return}let R=Math.max(0,A.indexOf(q()));B(A[(R-1+A.length)%A.length]??q())}function L(){let D=z().trim();if(!D){G("prompt");return}J.onSubmit({prompt:D,vendor:q(),baseRef:j().trim()||J.defaultBaseRef}),Y.clear()}L1(()=>({enabled:!0,bindings:K4(X(),{cycleField:H,stepEngine:U,commit:L})}));let F=(D)=>X()===D?Z.accent:Z.textMuted;return(()=>{var D=V("box"),A=V("box"),R=V("text"),l=V("text"),g=V("box"),k=V("text"),C=V("input"),N=V("box"),_=V("text"),X0=V("box"),s=V("text"),Y0=V("input"),u=V("box"),Q0=V("text");return W(D,A),W(D,g),W(D,N),W(D,X0),W(D,u),Q(D,"paddingLeft",2),Q(D,"paddingRight",2),Q(D,"gap",1),W(A,R),W(A,l),Q(A,"flexDirection","row"),Q(A,"justifyContent","space-between"),M(R,()=>`Quick task \xB7 ${J.repoLabel}`),W(l,T("esc")),Q(l,"onMouseUp",()=>J.onCancel()),W(g,k),W(g,C),Q(g,"gap",0),W(k,T("prompt")),Q(C,"placeholder","what should this task do?"),Q(C,"onInput",(t)=>f(yJ(t))),Q(C,"onSubmit",()=>L()),W(N,_),Q(N,"flexDirection","row"),Q(N,"gap",2),W(_,T("engine")),M(N,I(X1,{get each(){return J.engines},children:(t)=>(()=>{var j0=V("text");return Q(j0,"onMouseUp",()=>{B(t),G("engine")}),M(j0,()=>J.engineLabel(t)),x((S0)=>{var $=q()===t?Z.primary:Z.textMuted,P=q()===t?U4.BOLD:void 0;return $!==S0.e&&(S0.e=Q(j0,"fg",$,S0.e)),P!==S0.t&&(S0.t=Q(j0,"attributes",P,S0.t)),S0},{e:void 0,t:void 0}),j0})()}),null),W(X0,s),W(X0,Y0),Q(X0,"gap",0),W(s,T("branch")),Q(Y0,"onInput",(t)=>K(yJ(t))),Q(Y0,"onSubmit",()=>L()),W(u,Q0),Q(u,"paddingBottom",1),W(Q0,T("enter create \xB7 tab field \xB7 ctrl+e engine \xB7 esc cancel")),x((t)=>{var j0=U4.BOLD,S0=Z.text,$=Z.textMuted,P=F("prompt"),G0=z(),Z0=X()==="prompt",K0=F("engine"),h=F("branch"),y=j(),e=J.defaultBaseRef,V0=X()==="branch",q0=Z.textMuted;return j0!==t.e&&(t.e=Q(R,"attributes",j0,t.e)),S0!==t.t&&(t.t=Q(R,"fg",S0,t.t)),$!==t.a&&(t.a=Q(l,"fg",$,t.a)),P!==t.o&&(t.o=Q(k,"fg",P,t.o)),G0!==t.i&&(t.i=Q(C,"value",G0,t.i)),Z0!==t.n&&(t.n=Q(C,"focused",Z0,t.n)),K0!==t.s&&(t.s=Q(_,"fg",K0,t.s)),h!==t.h&&(t.h=Q(s,"fg",h,t.h)),y!==t.r&&(t.r=Q(Y0,"value",y,t.r)),e!==t.d&&(t.d=Q(Y0,"placeholder",e,t.d)),V0!==t.l&&(t.l=Q(Y0,"focused",V0,t.l)),q0!==t.u&&(t.u=Q(Q0,"fg",q0,t.u)),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0}),D})()}function $y(J,Y){return new Promise((Z)=>{J.replace(()=>I(ly,IK(Y,{onSubmit:(X)=>Z(X),onCancel:()=>Z(void 0)})),()=>Z(void 0)),J.setSize("medium")})}var jq,L4;var D4=S(()=>{w();w();w();w();w();w();w();w();B1();BJ();u1();gJ();uJ();kz();jq=["prompt","engine","branch"];L4={show:$y}});async function M4(J={}){let Y=J.logTag??"orch-connect",Z=J.connect??lJ,X=null;try{let G=await Z();if(!G)return vY(Y,"no daemon running \u2014 caller degrades"),null;return X=new QJ(G,{...J.orchestratorOptions,channels:J.channels}),await X.init(),X}catch(G){return zZ(Y,G),X?.dispose(),null}}var F4=S(()=>{$Z();CJ();IZ()});function O4(J){let[Y,Z]=p(J.initial??"sidebar"),[X,G]=p(0),z=e1();function f(H){if(G((L)=>L+1),Y()===H)return;let U=z?.currentFocusedRenderable;if(U&&!U.isDestroyed)try{U.blur()}catch{}Z(H)}function q(H){let L=(Hq.indexOf(Y())+H+Hq.length)%Hq.length;f(Hq[L])}let B=new Map;function j(H){let U=B.get(H);if(!U)U=()=>Y()===H,B.set(H,U);return U}let K={focused:Y,is:j,setFocused:f,cycle:q,refocusTick:X};return I(ay.Provider,{value:K,get children(){return J.children}})}var Hq,ay;var A4=S(()=>{w();w();B1();Hq=["sidebar","workspace","files","terminal"],ay=FY(null)});function R4(){for(let J of bZ){let Y=py.get(J.id);if(!Y)continue;let Z=J;Z.keys=[...Y.keys],Z.hint=Y.hint?{...Y.hint}:void 0}}function C4(){_y((J)=>J+1)}function rH(J){return ry.get(J)}function oy(J){return rH(J)?.keys??[]}function TZ(J){let Y=[];for(let Z in J){let X=J[Z];if(!X)continue;let G=oy(Z);if(G.length===0){console.warn(`[kobe/keybindings] bindByIds: id="${Z}" has no chords (or doesn't exist in KobeKeymap)`);continue}G.forEach((z,f)=>Y.push({key:z,cmd:X,slot:f}))}return Y}var bZ,py,_H,_y,ry;var MG=S(()=>{B1();bZ=[{id:"help.open",scope:"global",keys:["f1"],category:"Global",description:"Show keybindings help",hint:{keys:"F1",label:"help",pin:"right"}},{id:"task.new",scope:"sidebar",keys:["n"],category:"Sidebar",description:"New task",hint:{keys:"n",label:"new"}},{id:"task.openEditor",scope:"global",keys:["ctrl+o"],category:"Global",description:"Open active task worktree in editor"},{id:"settings.open",scope:"global",keys:["ctrl+,"],category:"Global",description:"Open settings"},{id:"settings.open.sidebar",scope:"sidebar",keys:["s"],category:"Sidebar",description:"Open settings",hint:{keys:"s",label:"settings",status:!1}},{id:"app.quit",scope:"sidebar",keys:["q"],category:"Sidebar",description:"Quit (with confirm)",hint:{keys:"q",label:"quit",status:!1}},{id:"focus.sidebar",scope:"workspace",keys:["ctrl+q"],category:"Workspace",description:"Back to sidebar (tasks)",hint:{keys:"ctrl+q",label:"tasks"}},{id:"focus.numeric",scope:"global",keys:["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],category:"Navigation",description:"Jump to pane (h=sidebar, j=workspace, k=files, l=terminal)",hint:{keys:"ctrl+hjkl",label:"focus",pin:"right",status:!1}},{id:"chat.interrupt",scope:"workspace",keys:[],category:"Workspace",description:"Interrupt current turn (esc while streaming)"},{id:"sidebar.nav",scope:"sidebar",keys:["j","k","down","up"],category:"Sidebar",description:"Move cursor up/down",hint:{keys:"j/k",label:"nav"}},{id:"sidebar.select",scope:"sidebar",keys:["return"],category:"Sidebar",description:"Open the selected task",hint:{keys:"enter",label:"select"}},{id:"sidebar.goto",scope:"sidebar",keys:["g"],category:"Sidebar",description:"Top / bottom of list (gg or shift-G)"},{id:"sidebar.rename",scope:"sidebar",keys:["r"],category:"Sidebar",description:"Rename task",hint:{keys:"r",label:"rename",status:!1}},{id:"sidebar.archive",scope:"sidebar",keys:["a"],category:"Sidebar",description:"Toggle archive",hint:{keys:"a",label:"archive",status:!1}},{id:"sidebar.localMerge",scope:"sidebar",keys:["m"],category:"Sidebar",description:"Local merge task into parent repo (Shift+M)",hint:{keys:"M",label:"merge",status:!1}},{id:"sidebar.pin",scope:"sidebar",keys:["p"],category:"Sidebar",description:"Pin / unpin task at top (Shift+P)",hint:{keys:"P",label:"pin",status:!1}},{id:"sidebar.view",scope:"sidebar",keys:["[","]"],category:"Sidebar",description:"Switch view (Working session \u2194 Archives)",hint:{keys:"[/]",label:"view",status:!1}},{id:"sidebar.sort",scope:"sidebar",keys:["t"],category:"Sidebar",description:"Switch task sort (default \u2194 recent)",hint:{keys:"t",label:"sort",status:!1}},{id:"sidebar.projectFilter",scope:"sidebar",keys:["ctrl+p"],category:"Sidebar",description:"Cycle task project filter",hint:{keys:"ctrl+p",label:"project",status:!1}},{id:"sidebar.delete",scope:"sidebar",keys:["d"],category:"Sidebar",description:"Delete task (with confirm)",hint:{keys:"d",label:"delete",status:!1}},{id:"sidebar.search.enter",scope:"sidebar",keys:["/"],category:"Sidebar",description:"Search tasks (fuzzy filter)",hint:{keys:"/",label:"search"}},{id:"sidebar.search.nav",scope:"sidebar",keys:["down","up"],category:"Sidebar",description:"Move highlight in search results"},{id:"sidebar.search.submit",scope:"sidebar",keys:["return"],category:"Sidebar",description:"Select search match and exit search"},{id:"sidebar.search.cancel",scope:"sidebar",keys:["escape"],category:"Sidebar",description:"Cancel search (restore prior selection)"},{id:"tasks.openWorktree",scope:"sidebar",keys:["o"],category:"Tasks pane",description:"Open selected task's worktree in your editor",hint:{keys:"o",label:"open wt",status:!1}},{id:"tasks.renameBranch",scope:"sidebar",keys:["b"],category:"Tasks pane",description:"Rename the selected task's git branch",hint:{keys:"b",label:"branch",status:!1}},{id:"tasks.cycleEngine",scope:"sidebar",keys:["v"],category:"Tasks pane",description:"Cycle engine vendor (claude \u2194 codex \u2194 \u2026) \u2014 applies on reopen",hint:{keys:"v",label:"engine",status:!1}},{id:"tasks.update",scope:"sidebar",keys:["u"],category:"Tasks pane",description:"Open the update page (when a new version is available)",hint:{keys:"u",label:"update",status:!1}},{id:"tasks.focusEngine",scope:"sidebar",keys:["right"],category:"Tasks pane",description:"Focus the engine pane of the current window",hint:{keys:"\u2192",label:"engine",status:!1}},{id:"tasks.toggleKeys",scope:"sidebar",keys:["?"],category:"Tasks pane",description:"Collapse / expand the keys legend",hint:{keys:"?",label:"fold keys",status:!1}},{id:"tmux.quickTask",scope:"global",keys:[],category:"Workspace (tmux)",description:"Quick new task (tmux prefix, then f)",hint:{keys:"prefix f",label:"new task",status:!1}},{id:"tmux.engineTab",scope:"global",keys:[],category:"Workspace (tmux)",description:"Open the engine in a new tab (tmux prefix, then t)",hint:{keys:"prefix t",label:"engine tab",status:!1}},{id:"tmux.layout.workspaceSplit",scope:"global",keys:[],category:"Workspace (tmux)",description:"Add a temporary workspace split (tmux prefix, then s)",hint:{keys:"prefix s",label:"split",status:!1}},{id:"tmux.layout.workspaceClose",scope:"global",keys:[],category:"Workspace (tmux)",description:"Close the focused temporary workspace split (tmux prefix, then x)",hint:{keys:"prefix x",label:"close split",status:!1}},{id:"tmux.layout.workspaceReset",scope:"global",keys:[],category:"Workspace (tmux)",description:"Close all temporary workspace splits (tmux prefix, then r)",hint:{keys:"prefix r",label:"reset splits",status:!1}},{id:"tmux.layout.tasksToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Hide / restore the Tasks pane (tmux prefix, then a)",hint:{keys:"prefix a",label:"tasks pane",status:!1}},{id:"tmux.layout.opsToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Toggle the file/Ops pane (tmux prefix, then o)",hint:{keys:"prefix o",label:"file pane",status:!1}},{id:"tmux.layout.terminalToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Hide / restore the terminal pane (tmux prefix, then z)",hint:{keys:"prefix z",label:"terminal",status:!1}},{id:"tmux.layout.zenToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Zen mode \u2014 collapse to the engine pane (tmux prefix, then space)",hint:{keys:"prefix space",label:"zen",status:!1}},{id:"chat.send",scope:"workspace",keys:[],category:"Workspace",description:"Send message (composer)",hint:{keys:"enter",label:"send"}},{id:"chat.newline",scope:"workspace",keys:[],category:"Workspace",description:"Newline in composer",hint:{keys:"shift+enter",label:"newline"}},{id:"chat.cycle-mode",scope:"workspace",keys:[],category:"Workspace",description:"Cycle permission mode (composer)",hint:{keys:"shift+tab",label:"mode"}},{id:"chat.steer",scope:"workspace",keys:[],category:"Workspace",description:"Steer (interrupt + send) \u2014 mid-stream only",hint:{keys:"ctrl+enter",label:"steer",status:!1}},{id:"chat.tab.new",scope:"workspace",keys:["ctrl+t"],category:"Workspace",description:"New chat tab",hint:{keys:"ctrl+t",label:"new tab"}},{id:"chat.fork.new",scope:"workspace",keys:["ctrl+f"],category:"Workspace",description:"Quick-fork: create child task seeded with current repo/branch/model",hint:{keys:"ctrl+f",label:"fork"}},{id:"chat.session.resume",scope:"workspace",keys:["ctrl+y"],category:"Workspace",description:"Resume a prior session in this task's worktree",hint:{keys:"ctrl+y",label:"resume",status:!1}},{id:"chat.tab.close",scope:"workspace",keys:["ctrl+w"],category:"Workspace",description:"Close chat tab",hint:{keys:"ctrl+w",label:"close tab",status:!1}},{id:"chat.tab.rename",scope:"workspace",keys:["f2"],category:"Workspace",description:"Rename active chat tab",hint:{keys:"f2",label:"rename tab",status:!1}},{id:"chat.tab.cycle-next",scope:"workspace",keys:["ctrl+]"],category:"Workspace",description:"Next chat tab",hint:{keys:"ctrl+]",label:"next tab",status:!1}},{id:"chat.tab.cycle-prev",scope:"workspace",keys:["ctrl+["],category:"Workspace",description:"Previous chat tab",hint:{keys:"ctrl+[",label:"prev tab",status:!1}},{id:"chat.question.nav",scope:"workspace",keys:["j","k","down","up"],category:"Workspace",description:"Move highlight in question picker",hint:{keys:"j/k",label:"pick",status:!1}},{id:"chat.question.toggle",scope:"workspace",keys:["space"],category:"Workspace",description:"Toggle highlighted option in question picker",hint:{keys:"space",label:"toggle",status:!1}},{id:"chat.question.submit",scope:"workspace",keys:["return"],category:"Workspace",description:"Advance / submit question picker",hint:{keys:"enter",label:"submit",status:!1}},{id:"chat.question.pick-number",scope:"workspace",keys:["1","2","3","4","5","6","7","8","9"],category:"Workspace",description:"Pick option by number in question picker",hint:{keys:"1-9",label:"pick",status:!1}},{id:"files.nav",scope:"files",keys:["j","k","down","up"],category:"Files",description:"Move cursor up/down",hint:{keys:"j/k",label:"nav"}},{id:"files.hierarchy",scope:"files",keys:["h","l","left","right"],category:"Files",description:"Collapse / expand tree level",hint:{keys:"h/l",label:"level"}},{id:"files.open",scope:"files",keys:["return"],category:"Files",description:"Open file in nvim (diff vs HEAD when changed)",hint:{keys:"enter",label:"open"}},{id:"files.tab",scope:"files",keys:["[","]"],category:"Files",description:"Switch tab (cycle All / Changes)",hint:{keys:"[/]",label:"tab",status:!1}},{id:"files.refresh",scope:"files",keys:["r"],category:"Files",description:"Refresh",hint:{keys:"r",label:"refresh",status:!1}},{id:"files.openExternal",scope:"files",keys:["o"],category:"Files",description:"Open file in system default app (audio / video / pdf preview)",hint:{keys:"o",label:"open external",status:!1}},{id:"files.mention",scope:"files",keys:["a"],category:"Files",description:"Inject @<path> mention into the engine pane",hint:{keys:"a",label:"@mention"}},{id:"files.createPR",scope:"files",keys:["p"],category:"Files",description:"Create PR from the current task",hint:{keys:"p",label:"create PR"}},{id:"terminal.scroll-up",scope:"terminal",keys:["ctrl+pageup"],category:"Terminal",description:"Scroll scrollback up",hint:{keys:"ctrl+pgup",label:"scroll",status:!1}},{id:"terminal.scroll-down",scope:"terminal",keys:["ctrl+pagedown"],category:"Terminal",description:"Scroll scrollback down"},{id:"terminal.reset",scope:"terminal",keys:["f5"],category:"Terminal",description:"Reset terminal \u2014 kill the current shell and respawn",hint:{keys:"f5",label:"reset"}},{id:"dialog.cancel",scope:"global",keys:[],category:"Dialog",description:"Close the top dialog (esc)"},{id:"dialog.newtask.tab.cycle",scope:"global",keys:[],category:"Dialog",description:"Switch New Task tab (Existing / New Repo)",hint:{keys:"ctrl+[/]",label:"tab"}}],py=new Map(bZ.map((J)=>[J.id,{keys:[...J.keys],hint:J.hint?{...J.hint}:void 0}]));[_H,_y]=p(0);ry=new Map(bZ.map((J)=>[J.id,J]))});function Wq(){if(EZ)return EZ;let J=ff();if(!J.exists)return EZ={path:J.path,exists:!1,applied:[],warnings:[]},EZ;let Y=[...J.warnings],Z=Bf(J.doc,process.platform,{chordOptsFor:Sj});Y.push(...Z.warnings);let X=Z.entries.filter((q)=>q.id.startsWith("tmux.")),G=Z.entries.filter((q)=>!q.id.startsWith("tmux.")),z=O8(bZ,G);Y.push(...z.warnings);let f=[...z.applied];if(X.length>0){let q=yj(X);Y.push(...q.warnings);for(let B of q.overridden){if(B===SY){f.push({id:B,keys:q.focus.map((H)=>H?.chord??"").filter((H)=>H!==""),defaultKeys:MZ});continue}let j=q.binds[B];f.push({id:B,keys:j?[j.chord]:[],defaultKeys:[jX[B]]});let K=bZ.find((H)=>H.id===B);if(K?.hint)K.hint.keys=j?`${JG(B)?"prefix ":""}${j.chord}`:"\u2014"}}for(let q of Y)console.warn(`[kobe/keybindings] ${q}`);return EZ={path:J.path,exists:!0,applied:f,warnings:Y},EZ}function g4(){return EZ??Wq()}function y4(){EZ=null,F8(),g8(),R4();let J=Wq();return C4(),J}var EZ=null;var oH=S(()=>{Cj();Wf();jf();MG()});var sy=250,FG,S4;var Iz=S(()=>{Az();cZ();hH();({use:FG,provider:S4}=Xq({name:"KV",init:()=>{let[J,Y]=NZ(c1()),Z=new Set,X=null;function G(q){if(Z.size===0)return!0;try{let B={};for(let j of Z)B[j]=J[j];return mZ(B),Z.clear(),!0}catch(B){return console.error(`[kobe] kv ${q} failed:`,B),!1}}function z(){if(X)clearTimeout(X);X=setTimeout(()=>{X=null,G("write")},sy)}let f={get ready(){return!0},get store(){return J},signal(q,B){if(J[q]===void 0)Y(q,B);return[()=>f.get(q),(j)=>f.set(q,j)]},get(q,B){return J[q]??B},set(q,B){Y(q,B),Z.add(q),z()},flush(){if(X)clearTimeout(X),X=null;return G("flush")},clear(){for(let q of Object.keys(J))Y(q,void 0);if(X)clearTimeout(X),X=null;Z.clear();try{oW({})}catch(q){console.error("[kobe] kv clear write failed:",q)}}};return f}}))});var Vq="../pulse-n3cq1btw.wav";var k4=()=>{};import{existsSync as ey,mkdirSync as JS}from"fs";import{tmpdir as YS}from"os";import{basename as ZS,isAbsolute as XS,join as sH,resolve as GS}from"path";function QS(J,Y,Z){if(J==="ffplay")return[J,"-autoexit","-nodisp","-af",`volume=${Z}`,Y];if(J==="mpv")return[J,"--no-video","--audio-display=no","--volume",String(Math.round(Z*100)),Y];if(J==="mpg123"||J==="mpg321")return[J,"-g",String(Math.round(Z*100)),Y];if(J==="mplayer")return[J,"-vo","null","-volume",String(Math.round(Z*100)),Y];if(J==="afplay"||J==="omxplayer"||J==="aplay"||J==="cmdmp3")return[J,Y];if(J==="play")return[J,"-v",String(Z),Y];if(J==="cvlc")return[J,`--gain=${Z}`,"--play-and-exit",Y];return[J,"-c",`(New-Object Media.SoundPlayer '${Y.replace(/'/g,"''")}').PlaySync()`]}function fS(){if(Kq!==void 0)return Kq;let Y=(process.env.PATH??"").split(":").filter(Boolean);return Kq=zS.find((Z)=>Y.some((X)=>ey(sH(X,Z))))??null,Kq}async function qS(){return b4??=(async()=>{JS(N4,{recursive:!0});let J=sH(N4,ZS(I4)),Y=Bun.file(J);if(await Y.exists())return J;return await Bun.write(Y,Bun.file(I4)),J})(),b4}function T4(J=0.4){let Y=fS();if(!Y)return;qS().then((Z)=>{try{Bun.spawn(QS(Y,Z,J),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var I4,N4,zS,Kq,b4;var E4=S(()=>{k4();I4=XS(Vq)?Vq:GS(import.meta.dir,Vq),N4=sH(YS(),"kobe-sfx"),zS=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function u4(J,Y){return`${J}:${Y}`}function w4(J){let Y=FG(),[Z,X]=p([]),[G,z]=p(new Map),f=0;function q(H){if(z((U)=>{let L=new Map(U),F=u4(H.taskId,H.tabId),D=U.get(F);if(D==="needs_input"||D==="error")return U;return L.set(F,H.kind),L}),Y.get("notifications.sound.enabled",!0)!==!1){try{process.stdout.write("\x07")}catch{}T4()}if(Y.get("notifications.toast.enabled",!0)!==!1){let U=++f,L={id:U,kind:H.kind,taskId:H.taskId,tabId:H.tabId,title:H.title};X((F)=>[...F,L]),setTimeout(()=>B(U),BS)}}function B(H){X((U)=>U.filter((L)=>L.id!==H))}function j(H,U){z((L)=>{let F=u4(H,U);if(!L.has(F))return L;let D=new Map(L);return D.delete(F),D})}let K={toasts:Z,unread:G,notify:q,dismiss:B,markRead:j};return I(x4.Provider,{value:K,get children(){return J.children}})}function Uq(){let J=NJ(x4);if(!J)throw Error("useNotifications must be used within a NotificationsProvider");return J}var BS=4500,x4;var Lq=S(()=>{w();B1();E4();Iz();x4=FY()});function tH(J,Y){if(typeof Y.theme==="string"&&Y.theme.length>0&&Y.theme!==J.selectedTheme()){if(!J.hasTheme(Y.theme))J.reloadUserThemes();if(J.hasTheme(Y.theme))J.setTheme(Y.theme)}if(typeof Y.transparentBackground==="boolean"&&Y.transparentBackground!==J.transparentBackground())J.setTransparentBackground(Y.transparentBackground);if(Y.focusAccent===null||typeof Y.focusAccent==="string"){let Z=HS(Y.focusAccent);if(Z&&Z!==J.focusAccent())J.setFocusAccent(Z)}}function HS(J){if(J===null)return"primary";return jS.includes(J)?J:null}var jS;var h4=S(()=>{jS=["primary","success","info"]});import{readFileSync as WS}from"fs";function P4(J){try{let Y=JSON.parse(WS(xJ(),"utf8")),Z=typeof Y.activeTheme==="string"&&Rz(Y.activeTheme)?Y.activeTheme:J,X=Y.transparentBackground===!0,G=typeof Y.focusAccent==="string"&&MX.includes(Y.focusAccent)?Y.focusAccent:null;return{theme:Z,transparent:X,focusAccent:G}}catch{return{theme:J,transparent:!1,focusAccent:null}}}var v4=S(()=>{n1();u1()});function KS(J){if(J)VQ(J);Wq();for(let{name:Y,theme:Z}of Gz())vH(Y,Z)}function US(J){let Y={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return J?{...Y,onDestroy:J}:Y}function LS(J){let Y=()=>J.children,Z=()=>J.notifications?I(w4,{get children(){return Y()}}):Y(),X=()=>I(aK,{get children(){return Z()}}),G=()=>J.focus?I(O4,{initial:"sidebar",get children(){return X()}}):X(),z=()=>J.kv?I(S4,{get children(){return G()}}):G();return I(nK,{mode:"dark",get theme(){return J.theme},get children(){return z()}})}function DS(J){let Y=v0(),Z={selectedTheme:()=>Y.selected,hasTheme:(q)=>Y.has(q),setTheme:(q)=>Y.set(q),reloadUserThemes:()=>{for(let{name:q,theme:B}of Gz())vH(q,B)},transparentBackground:()=>Y.transparentBackground,setTransparentBackground:(q)=>Y.setTransparentBackground(q),focusAccent:()=>Y.focusAccent,setFocusAccent:(q)=>Y.setFocusAccent(q)};tH(Z,{theme:J.boot.theme,transparentBackground:J.boot.transparent,focusAccent:J.boot.focusAccent});let[X,G]=p(null),z=!1;s1(()=>{(async()=>{let q=await M4({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!q)return;if(z){q.dispose();return}G(q)})()}),s0(()=>{let q=X()?.uiPrefsSignal()();if(q)tH(Z,q)});let f=null;return s0(()=>{let q=X()?.keybindingsRevSignal()();if(q==null)return;if(f===null||q===f){f=q;return}f=q,y4()}),P1(()=>{z=!0,X()?.dispose()}),null}async function WJ(J){KS(J.logContext);let Y=P4(VS),Z=await J.setup(Y),X=J.providers?.kv??!0,G=J.providers?.focus??!0,z=J.providers?.notifications??!1;await wK(()=>I(LS,{get theme(){return Y.theme},kv:X,focus:G,notifications:z,get children(){return[I(DS,{boot:Y}),Y1(()=>Z.root())]}}),US(Z.onDestroy))}var VS="claude";var uZ=S(()=>{w();w();w();$Z();B1();F4();A4();oH();Iz();Lq();u1();Lf();uJ();h4();v4()});async function eH(J,Y,Z,X,G={}){let z=K1(Y.id);if(await f1(z))return!0;let f=Y.worktreePath;if(!f)f=await J.ensureWorktree(Y.id);if(!f)throw Error(`task ${Y.id} has no worktree`);let{ensureSession:q}=await Promise.resolve().then(() => (t1(),iJ)),{resolveEngineLaunchInit:B}=await Promise.resolve().then(() => (tX(),Rj)),j=B(Z,f,{kind:G.includeInitPrompt?"repo-init":"none"});if(!await q({name:z,cwd:f,command:RJ(X),taskId:Y.id,vendor:X,repo:Z,launchInit:j}))throw Error(`failed to start tmux session for ${Y.id}`);return!1}async function Dq(J,Y,Z,X,G={}){await eH(J,Y,Z,X,G),await J.setActiveTask(Y.id).catch(()=>{});let{prepareWindowForSwitch:z}=await Promise.resolve().then(() => (t1(),iJ));await z(K1(Y.id)),await u0(["switch-client","-t",`=${K1(Y.id)}`])}var JW=S(()=>{bJ();N1()});var m4={};q1(m4,{startNewTaskHost:()=>MS,NewTaskPage:()=>Mq});function Mq(J){let{theme:Y}=v0(),Z=h1();s1(()=>{X()});async function X(){let G=wJ(),z=J.defaultRepo||G[0]||process.cwd(),f=g1("lastSelectedVendor")??k1,q=await mY(),B=J.orchestrator,j=await Bq.show(Z,z,G,{defaultVendor:f,availableVendors:q,discoverAdoptable:B?(H)=>B.discoverAdoptableWorktrees(H):void 0});if(!j)process.exit(0);if(i1("lastSelectedVendor",j.vendor),xY(j.repo),!B)console.error("[kobe new-task] no daemon; cannot create task"),process.exit(1);let K;try{if(j.mode==="adopt")for(let H of j.adopt)K=await B.adoptWorktree({repo:j.repo,worktreePath:H.worktreePath,branch:H.branch,vendor:j.vendor});else K=await B.createTask({repo:j.repo,baseRef:j.baseRef,vendor:j.vendor})}catch(H){console.error("[kobe new-task] task.create/adopt failed:",H),process.exit(1)}if(K)try{await Dq(B,K,j.repo,j.vendor,{includeInitPrompt:j.mode!=="adopt"})}catch(H){console.error("[kobe new-task] auto-enter failed:",H)}process.exit(0)}return(()=>{var G=V("box");return Q(G,"flexDirection","column"),Q(G,"flexGrow",1),x((z)=>Q(G,"backgroundColor",Y.background,z)),G})()}async function MS(J){await WJ({setup:async()=>{let Y=null;try{let Z=await HY(),X=new QJ(Z);await X.init(),Y=X}catch(Z){console.error("[kobe new-task] daemon unavailable; cannot create task:",Z)}return{root:()=>I(Mq,{get defaultRepo(){return J.defaultRepo},orchestrator:Y}),onDestroy:()=>{Y?.dispose()}}}})}var YW=S(()=>{w();w();w();w();CJ();B1();IZ();aZ();O1();SJ();kz();u1();uZ();JW();uJ()});function Fq(J,Y,Z,X,G={}){if(J.length===0)return Y;let z=new Map;for(let B of J)z.set(Z(B),B);let f=J.length===Y.length,q=Array(Y.length);for(let B=0;B<Y.length;B++){let j=Y[B],K=z.get(Z(j));if(K&&X(K,j)&&(!G.samePosition||J[B]===K)){if(q[B]=K,f&&J[B]!==K)f=!1}else q[B]=j,f=!1}return f?J:q}function c4(J,Y){if(!J)return!0;let Z=J.toLowerCase(),X=Y.toLowerCase(),G=0;for(let z=0;z<X.length&&G<Z.length;z++)if(X.charCodeAt(z)===Z.charCodeAt(G))G++;return G===Z.length}function FS(J,Y){let Z=Y==="archived";return J.filter((X)=>X.archived===Z)}function ZW(J,Y,Z,X="default",G){let z=FS(J,Y),f=Z?.trim()??"",q=G?aJ(G):null,B=f?z.filter((D)=>c4(f,`${D.title} ${KY(D.repo)}`)):z,j=[],K=[],H=[],U=new Set;for(let D of B){if(D.kind==="main"){let A=aJ(D.repo);if(U.has(A))continue;U.add(A),j.push(D);continue}if(q&&aJ(D.repo)!==q)continue;if(D.pinned===!0)K.push(D);else H.push(D)}if(j.sort((D,A)=>KY(D.repo).localeCompare(KY(A.repo))),X==="recent")K.sort(d4),H.sort(d4);let L=[],F=0;for(let D of j)L.push({kind:"task",task:D,flatIndex:F}),F++;for(let D of K)L.push({kind:"task",task:D,flatIndex:F}),F++;for(let D of H)L.push({kind:"task",task:D,flatIndex:F}),F++;return L}function d4(J,Y){let Z=n4(Y)-n4(J);if(Z!==0)return Z;return String(Y.id).localeCompare(String(J.id))}function n4(J){let Y=Date.parse(J.updatedAt||J.createdAt);return Number.isFinite(Y)?Y:0}function KY(J){let Y=J.split("/").filter(Boolean);return Y[Y.length-1]??J}function aJ(J){return J.trim().replace(/[\\/]+$/,"")||J}function OS(J,Y){let Z=KY(J);if(!Y.some((G)=>G!==J&&KY(G)===Z))return Z;return J.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function i4(J,Y){let Z=Y==="archived",X=new Map;for(let z of J){let f=aJ(z.repo),q=X.get(f)??{repo:z.repo,count:0};if(z.kind==="main")q.repo=z.repo;else if(z.archived===Z)q.count+=1;X.set(f,q)}let G=[...X.values()].map((z)=>z.repo);return[...X.values()].map((z)=>({repo:z.repo,label:OS(z.repo,G),count:z.count})).sort((z,f)=>z.label.localeCompare(f.label))}function l4(J,Y){if(J.length===0)return-1;if(!Y)return J[0]?.flatIndex??-1;let Z=aJ(Y),X=J.find((z)=>z.task.kind!=="main"&&aJ(z.task.repo)===Z);if(X)return X.flatIndex;return J.find((z)=>z.task.kind==="main"&&aJ(z.task.repo)===Z)?.flatIndex??J[0]?.flatIndex??-1}function XW(J){return J.map((Y)=>Y.task.id)}function $4(J){let Y=[],Z=[];for(let X of J)if(X.task.kind==="main")Y.push(X);else Z.push(X);return{projectRows:Y,taskRows:Z}}function AS(J,Y){return J===Y||J.id===Y.id&&J.kind===Y.kind&&J.title===Y.title&&J.repo===Y.repo&&J.branch===Y.branch&&J.worktreePath===Y.worktreePath&&J.status===Y.status&&J.archived===Y.archived&&J.pinned===Y.pinned&&J.vendor===Y.vendor}function a4(J,Y){return Fq(J,Y,(Z)=>Z.task.id,(Z,X)=>Z.flatIndex===X.flatIndex&&AS(Z.task,X.task),{samePosition:!0})}var Oq=()=>{};var p4={};q1(p4,{startQuickTaskHost:()=>yS});async function RS(J,Y){let Z,X;if(Y){let H=await OJ(Y,["@kobe_task","@kobe_worktree"]);Z=H["@kobe_task"]||void 0,X=H["@kobe_worktree"]||void 0}let G=(Z?J?.getTask(Z)?.repo:void 0)??wJ()[0],z=G??X??process.cwd();if(!G)return{ctx:null,fallbackRepo:z};let f=await mY(),q=g1("lastSelectedVendor")??k1,B=f.length===0||f.includes(q)?q:f[0]??q,j=Cz(fJ(G))??VY,K=f.length>0?f:[B];return{ctx:{repo:G,vendor:B,baseRef:j,engines:K},fallbackRepo:z}}async function CS(J,Y,Z,X,G){let z=await eH(J,Y,Z,X),f=K1(Y.id),{pane:q}=await Zz(f,!z);if(q)await Xz(q,G)}function gS(J){let{theme:Y}=v0(),Z=h1();s1(()=>{X()});async function X(){let G=J.ctx,z=await L4.show(Z,{repoLabel:KY(G.repo),engines:G.engines,defaultVendor:G.vendor,defaultBaseRef:G.baseRef,engineLabel:XX});if(z===void 0)process.exit(0);i1("lastSelectedVendor",z.vendor),xY(G.repo);let f=J.orchestrator;if(!f)console.error("[kobe quick-task] no daemon; cannot create task"),process.exit(1);try{let q=await f.createTask({repo:G.repo,baseRef:z.baseRef,vendor:z.vendor});await CS(f,q,G.repo,z.vendor,z.prompt),await Dq(f,q,G.repo,z.vendor)}catch(q){console.error("[kobe quick-task] task.create/deliver failed:",q),process.exit(1)}process.exit(0)}return(()=>{var G=V("box");return Q(G,"flexDirection","column"),Q(G,"flexGrow",1),x((z)=>Q(G,"backgroundColor",Y.background,z)),G})()}async function yS(J){await WJ({setup:async()=>{let Y=null;try{let G=await HY(),z=new QJ(G);await z.init(),Y=z}catch(G){console.error("[kobe quick-task] daemon unavailable; cannot create task:",G)}let{ctx:Z,fallbackRepo:X}=await RS(Y,J.session);return{root:()=>Z?I(gS,{ctx:Z,orchestrator:Y}):I(Mq,{defaultRepo:X,orchestrator:Y}),onDestroy:()=>{Y?.dispose()}}}})}var _4=S(()=>{w();w();w();w();CJ();B1();IZ();aZ();bJ();O1();N1();Vf();SJ();D4();u1();zq();uZ();fq();JW();YW();Oq();uJ()});function Rq(J){let Y=J.trim().split(/\s+/).pop()??"",Z=/^([CM])-(.+)$/.exec(Y);if(!Z)return null;let X=Z[1]==="C"?"\u2303":"\u2325",G=Z[2]??"";return`${X}${G.length===1?G.toUpperCase():G}`}function Aq(J,Y){if(J.includes("/"))return J.split("/").map((G)=>Aq(G,Y)).join("/");let Z=J.toLowerCase();if(Z==="tab")return"tab";let X=kS[Z];if(X)return X;if(/^f\d{1,2}$/.test(Z))return Z.toUpperCase();if(!Y)return J;if(/^[a-z]$/.test(Z))return J.toUpperCase();return J.replace(/[a-z]+/gi,(G)=>G.toUpperCase())}function OG(J,Y="\u2303B"){let Z=J.trim();if(!Z)return Z;let X=/^prefix\s+(.+)$/i.exec(Z);if(X){let q=X[1]??"";return`${Y} ${q.includes("+")?OG(q,Y):Aq(q,!0)}`}let G=Z.split("+");if(G.length===1)return Aq(G[0]??"",!1);let z=G[G.length-1]??"";return`${G.slice(0,-1).map((q)=>SS[q.toLowerCase().trim()]??q).join("")} ${Aq(z,!0)}`}var SS,kS;var GW=S(()=>{SS={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},kS={enter:"\u23CE",return:"\u23CE",esc:"\u238B",escape:"\u238B",space:"\u2423",up:"\u2191",down:"\u2193",left:"\u2190",right:"\u2192",backspace:"\u232B",delete:"\u2326",del:"\u2326",pgup:"\u21DE",pageup:"\u21DE",pgdn:"\u21DF",pagedown:"\u21DF",home:"\u2196",end:"\u2198"}});import{TextAttributes as r4}from"@opentui/core";function IS(J){let Y=new Map,Z=[];for(let X of J){if(!Y.has(X.category))Y.set(X.category,[]),Z.push(X.category);Y.get(X.category).push(X)}return Z.map((X)=>({category:X,rows:Y.get(X)}))}function AG(J={}){let Y=h1(),{theme:Z}=v0(),X=()=>IS(bZ),G=()=>J.onClose?J.onClose():Y.clear(),[z,f]=p("\u2303B");return s1(()=>{c0(["show-options","-g","prefix"]).then(({code:q,stdout:B})=>{if(q!==0)return;let j=Rq(B);if(j)f(j)})}),L1(()=>({bindings:[{key:"?",cmd:G}]})),(()=>{var q=V("box"),B=V("box"),j=V("text"),K=V("text"),H=V("scrollbox"),U=V("box");return W(q,B),W(q,H),Q(q,"paddingLeft",2),Q(q,"paddingRight",2),Q(q,"gap",1),Q(q,"flexShrink",1),W(B,j),W(B,K),Q(B,"flexDirection","row"),Q(B,"justifyContent","space-between"),Q(B,"flexShrink",0),W(j,T("kobe \u2014 keybindings")),W(K,T("esc")),Q(K,"onMouseUp",G),W(H,U),Q(H,"flexShrink",1),Q(H,"flexGrow",1),Q(H,"stickyScroll",!1),Q(U,"paddingBottom",1),Q(U,"gap",1),Q(U,"paddingRight",1),M(U,I(X1,{get each(){return X()},children:(L)=>(()=>{var F=V("box"),D=V("text");return W(F,D),Q(F,"gap",0),M(D,()=>L.category),M(F,I(X1,{get each(){return L.rows},children:(A)=>{let R=A.hint?.keys??A.keys[0]??"\u2014",l=()=>R==="\u2014"?"\u2014":OG(R,z()),g=()=>(A.hint?A.keys:A.keys.slice(1)).map((k)=>OG(k,z()));return(()=>{var k=V("box"),C=V("box"),N=V("text"),_=V("box"),X0=V("text");return W(k,C),W(k,_),Q(k,"flexDirection","row"),Q(k,"gap",2),Q(k,"paddingLeft",1),W(C,N),Q(C,"width",14),M(N,l),W(_,X0),Q(_,"flexGrow",1),M(X0,()=>A.description),M(k,(()=>{var s=Y1(()=>g().length>0);return()=>s()?(()=>{var Y0=V("box"),u=V("text");return W(Y0,u),M(u,()=>`(${g().join(", ")})`),x((Q0)=>Q(u,"fg",Z.textMuted,Q0)),Y0})():null})(),null),x((s)=>{var{primary:Y0,text:u}=Z;return Y0!==s.e&&(s.e=Q(N,"fg",Y0,s.e)),u!==s.t&&(s.t=Q(X0,"fg",u,s.t)),s},{e:void 0,t:void 0}),k})()}}),null),x((A)=>{var R=Z.accent,l=r4.BOLD;return R!==A.e&&(A.e=Q(D,"fg",R,A.e)),l!==A.t&&(A.t=Q(D,"attributes",l,A.t)),A},{e:void 0,t:void 0}),F})()})),x((L)=>{var F=r4.BOLD,D=Z.text,A=Z.textMuted,R={trackOptions:{backgroundColor:Z.backgroundDialog,foregroundColor:Z.borderActive}};return F!==L.e&&(L.e=Q(j,"attributes",F,L.e)),D!==L.t&&(L.t=Q(j,"fg",D,L.t)),A!==L.a&&(L.a=Q(K,"fg",A,L.a)),R!==L.o&&(L.o=Q(H,"verticalScrollbarOptions",R,L.o)),L},{e:void 0,t:void 0,a:void 0,o:void 0}),q})()}var zW=S(()=>{w();w();w();w();w();w();w();w();B1();N1();MG();u1();GW();gJ();uJ();AG.show=(J)=>{J.replace(()=>I(AG,{}))}});import{TextAttributes as NS}from"@opentui/core";function o4(J){let Y=h1(),{theme:Z}=v0(),[X,G]=p(J.currentTitle);function z(){let f=X().trim();if(!f&&!J.allowEmpty)return;J.onSubmit(f),Y.clear()}return(()=>{var f=V("box"),q=V("box"),B=V("text"),j=V("text"),K=V("box"),H=V("text"),U=V("input"),L=V("box"),F=V("text");return W(f,q),W(f,K),W(f,L),Q(f,"paddingLeft",2),Q(f,"paddingRight",2),Q(f,"gap",1),W(q,B),W(q,j),Q(q,"flexDirection","row"),Q(q,"justifyContent","space-between"),M(B,()=>J.dialogTitle??"Rename task"),W(j,T("esc")),Q(j,"onMouseUp",()=>J.onCancel()),W(K,H),W(K,U),Q(K,"gap",0),M(H,()=>J.fieldLabel??"title"),Q(U,"focused",!0),Q(U,"onInput",(D)=>G(yJ(D))),Q(U,"onSubmit",()=>z()),W(L,F),Q(L,"paddingBottom",1),M(F,()=>`enter ${J.submitLabel??"rename"} \xB7 esc cancel`),x((D)=>{var A=NS.BOLD,R=Z.text,l=Z.textMuted,g=Z.accent,k=X(),C=J.placeholder??J.currentTitle,N=Z.textMuted;return A!==D.e&&(D.e=Q(B,"attributes",A,D.e)),R!==D.t&&(D.t=Q(B,"fg",R,D.t)),l!==D.a&&(D.a=Q(j,"fg",l,D.a)),g!==D.o&&(D.o=Q(H,"fg",g,D.o)),k!==D.i&&(D.i=Q(U,"value",k,D.i)),C!==D.n&&(D.n=Q(U,"placeholder",C,D.n)),N!==D.s&&(D.s=Q(F,"fg",N,D.s)),D},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),f})()}var s4=S(()=>{w();w();w();w();w();w();w();B1();u1();uJ();kz()});function bS(J,Y,Z={}){return new Promise((X)=>{J.replace(()=>I(o4,{currentTitle:Y,get dialogTitle(){return Z.dialogTitle},get fieldLabel(){return Z.fieldLabel},get submitLabel(){return Z.submitLabel},get placeholder(){return Z.placeholder},get allowEmpty(){return Z.allowEmpty},onSubmit:(G)=>X(G),onCancel:()=>X(void 0)}),()=>X(void 0))})}var UY;var QW=S(()=>{w();s4();UY={show:bS}});import{TextAttributes as TS}from"@opentui/core";function ES(J){if(!J)return J;return J.charAt(0).toUpperCase()+J.slice(1)}function sY(J){let Y=h1(),{theme:Z}=v0(),[X,G]=NZ({active:J.initialActive??"confirm"});return L1(()=>({bindings:[{key:"return",cmd:()=>{if(X.active==="confirm")J.onConfirm?.();if(X.active==="cancel")J.onCancel?.();Y.clear()}},{key:"left",cmd:()=>G("active",X.active==="confirm"?"cancel":"confirm")},{key:"right",cmd:()=>G("active",X.active==="confirm"?"cancel":"confirm")}]})),(()=>{var z=V("box"),f=V("box"),q=V("text"),B=V("text"),j=V("text"),K=V("box");return W(z,f),W(z,j),W(z,K),Q(z,"paddingLeft",2),Q(z,"paddingRight",2),Q(z,"paddingBottom",1),Q(z,"gap",0),W(f,q),W(f,B),Q(f,"flexDirection","row"),Q(f,"justifyContent","space-between"),M(q,()=>J.title),W(B,T("esc")),Q(B,"onMouseUp",()=>Y.clear()),M(j,()=>J.message),Q(K,"flexDirection","row"),Q(K,"justifyContent","flex-end"),Q(K,"paddingTop",1),M(K,I(X1,{each:["cancel","confirm"],children:(H)=>(()=>{var U=V("box"),L=V("text");return W(U,L),Q(U,"paddingLeft",1),Q(U,"paddingRight",1),Q(U,"onMouseUp",()=>{if(H==="confirm")J.onConfirm?.();if(H==="cancel")J.onCancel?.();Y.clear()}),M(L,()=>ES(H==="cancel"?J.label??H:J.confirmLabel??H)),x((F)=>{var D=H===X.active?Z.primary:void 0,A=H===X.active?Z.selectedListItemText:Z.textMuted;return D!==F.e&&(F.e=Q(U,"backgroundColor",D,F.e)),A!==F.t&&(F.t=Q(L,"fg",A,F.t)),F},{e:void 0,t:void 0}),U})()})),x((H)=>{var U=TS.BOLD,L=Z.text,F=Z.textMuted,D=Z.textMuted;return U!==H.e&&(H.e=Q(q,"attributes",U,H.e)),L!==H.t&&(H.t=Q(q,"fg",L,H.t)),F!==H.a&&(H.a=Q(B,"fg",F,H.a)),D!==H.o&&(H.o=Q(j,"fg",D,H.o)),H},{e:void 0,t:void 0,a:void 0,o:void 0}),z})()}var fW=S(()=>{w();w();w();w();w();w();w();B1();Az();u1();gJ();uJ();sY.show=(J,Y,Z,X,G,z)=>{return new Promise((f)=>{J.replace(()=>I(sY,{title:Y,message:Z,onConfirm:()=>f(!0),onCancel:()=>f(!1),label:X,confirmLabel:G,get initialActive(){return z?.initialActive}}),()=>f(void 0)),J.setSize("small")})}});import{unlinkSync as uS}from"fs";import{join as xS}from"path";function t4(J){return J instanceof QJ}function e4(J,Y){try{J?.destroy()}catch(Z){console.error(`kobe: renderer.destroy() failed during ${Y}:`,Z)}}async function qW(J,Y,Z){if(await sY.show(J,"Reset UI state?","Wipes ~/.config/kobe/state.json and ~/.kobe/tasks.json, then quits kobe \u2014 relaunch for a fresh start with empty Working session / Archive lists. Worktrees on disk and Claude Code session history are NOT touched.","cancel")!==!0)return;Y.clear();try{uS(xS(DY(),".kobe","tasks.json"))}catch(G){if(G.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",G)}e4(Z,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
|
|
223
|
-
`),process.exit(0)}async function
|
|
224
|
-
`),process.exit(0)}var JU=S(()=>{IZ();n1();fW()});function wS(J){return`theme:${J}`}function jW(J){return`accent:${J}`}function hS(J){return`engine:${J}`}function Nz(J){return`surface:${J}`}function HW(J){return[...J.themeNames.map((Y)=>({id:wS(Y),kind:"theme",name:Y})),{id:"transparent",kind:"transparent"},...J.focusAccentSlots.map((Y)=>({id:jW(Y),kind:"focusAccent",slot:Y})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:"zen-keep-tasks",kind:"zenKeepTasks"},{id:Nz("chattab"),kind:"surface",surface:"chattab"},{id:Nz("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function PS(J){return[...J.map((Y)=>({id:hS(Y),kind:"engine",vendor:Y})),{id:"add-engine",kind:"engineAdd"}]}function vS(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function bz(J){return[{id:"dev-reset",kind:"devReset"},...J?[{id:"dev-restart",kind:"devRestartDaemon"}]:[],{id:"remote-projects",kind:"devRemoteProjects"},{id:"auto-status",kind:"devAutoStatus"},{id:"dispatcher",kind:"devDispatcher"}]}function ZU(J,Y){switch(J){case"general":return HW(Y);case"engines":return PS(Y.engineList);case"accounts":case"keys":return[];case"feedback":return vS();case"dev":return bz(Y.hasDaemon)}}function Tz(J,Y){return J.findIndex((Z)=>Z.id===Y)}function Cq(J,Y){return J[Y]}var OX,YU;var WW=S(()=>{OX=[{id:"general",label:"General"},{id:"engines",label:"Engines"},{id:"accounts",label:"Accounts"},{id:"keys",label:"Keybindings"},{id:"feedback",label:"Feedback"},{id:"dev",label:"Dev"}],YU={primary:"Primary (brand accent)",success:"Success (legacy green)",info:"Info (cool blue)"}});import{TextAttributes as $0}from"@opentui/core";function XU(J){let{theme:Y}=v0();return(()=>{var Z=V("box");return Q(Z,"flexDirection","column"),Q(Z,"flexShrink",0),Q(Z,"width",14),Q(Z,"gap",0),M(Z,I(X1,{each:OX,children:(X,G)=>{let z=()=>G()===J.cursor(),f=()=>z()&&J.level()==="sidebar";return(()=>{var q=V("box"),B=V("text");return W(q,B),Q(q,"paddingLeft",1),Q(q,"paddingRight",1),Q(q,"onMouseUp",()=>J.switchSection(X.id)),Q(B,"wrapMode","none"),M(B,()=>X.label),x((j)=>{var K=f()?Y.primary:void 0,H=f()?Y.selectedListItemText:z()?Y.accent:Y.textMuted,U=z()?$0.BOLD:void 0;return K!==j.e&&(j.e=Q(q,"backgroundColor",K,j.e)),H!==j.t&&(j.t=Q(B,"fg",H,j.t)),U!==j.a&&(j.a=Q(B,"attributes",U,j.a)),j},{e:void 0,t:void 0,a:void 0}),q})()}})),Z})()}function GU(J){let Y=v0(),{theme:Z}=Y,X=()=>HW({themeNames:J.themeNames(),focusAccentSlots:MX}),G=(C)=>Tz(X(),C),z=()=>G("transparent"),f=()=>G("toast"),q=()=>G("sound"),B=()=>G("zen-keep-tasks"),j=()=>G(Nz("chattab")),K=()=>G(Nz("taskpanel")),H=()=>G("editor-kind"),U=()=>G("editor-custom"),L=()=>J.bodyRow()===z(),F=()=>J.bodyRow()===f(),D=()=>J.bodyRow()===q(),A=()=>J.bodyRow()===B(),R=()=>J.bodyRow()===j(),l=()=>J.bodyRow()===K(),g=()=>J.bodyRow()===H(),k=()=>J.bodyRow()===U();return(()=>{var C=V("box"),N=V("text"),_=V("text"),X0=V("box"),s=V("box"),Y0=V("text"),u=V("text"),Q0=V("box"),t=V("text"),j0=V("box"),S0=V("text"),$=V("text"),P=V("box"),G0=V("text"),Z0=V("text"),K0=V("box"),h=V("text"),y=T(" Toast"),e=V("box"),V0=V("text"),q0=T(" Sound"),A0=V("box"),I0=V("text"),k0=V("text"),a0=V("box"),v=V("text"),H0=T(" Keep Tasks pane in zen mode"),o=V("box"),R0=V("text"),b0=V("text"),w0=V("box"),N0=V("text"),d=T(" ChatTab (separate page)"),J0=V("box"),F0=V("text"),d0=T(" Task panel (in-pane overlay)"),r0=V("box"),x0=V("text"),e0=V("text"),G1=V("box"),F1=V("text"),a=V("box"),r=V("text");return W(C,N),W(C,_),W(C,X0),W(C,s),W(C,j0),W(C,P),W(C,A0),W(C,o),W(C,r0),Q(C,"flexDirection","column"),Q(C,"gap",1),W(N,T("Theme")),W(_,T("l to enter list \xB7 j/k to highlight \xB7 enter to apply")),Q(X0,"flexDirection","column"),Q(X0,"gap",0),M(X0,I(X1,{get each(){return J.themeNames()},children:(O,L0)=>{let f0=()=>J.level()==="body"&&J.bodyRow()===L0(),n0=()=>O===Y.selected;return(()=>{var M0=V("box"),m0=V("text");return W(M0,m0),Q(M0,"flexDirection","row"),Q(M0,"gap",1),Q(M0,"paddingLeft",1),Q(M0,"paddingRight",1),Q(M0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(L0()),J.setThemeCursor(L0()),J.selectTheme(O)}),Q(m0,"wrapMode","none"),M(m0,()=>n0()?"\u25CF ":" ",null),M(m0,O,null),x((D0)=>{var E0=f0()?Z.primary:void 0,z1=f0()?Z.selectedListItemText:n0()?Z.accent:Z.text,p0=f0()||n0()?$0.BOLD:void 0;return E0!==D0.e&&(D0.e=Q(M0,"backgroundColor",E0,D0.e)),z1!==D0.t&&(D0.t=Q(m0,"fg",z1,D0.t)),p0!==D0.a&&(D0.a=Q(m0,"attributes",p0,D0.a)),D0},{e:void 0,t:void 0,a:void 0}),M0})()}})),W(s,Y0),W(s,u),W(s,Q0),Q(s,"flexDirection","column"),Q(s,"gap",0),Q(s,"paddingTop",1),W(Y0,T("Transparent background")),W(u,T("Drops the renderer's bg fill so the host terminal shows through. `t` toggles.")),Q(u,"wrapMode","word"),W(Q0,t),Q(Q0,"flexDirection","row"),Q(Q0,"paddingLeft",1),Q(Q0,"paddingRight",1),Q(Q0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(z()),J.toggleTransparent()}),Q(t,"wrapMode","none"),M(t,()=>Y.transparentBackground?"[x] on":"[ ] off"),W(j0,S0),W(j0,$),Q(j0,"flexDirection","column"),Q(j0,"gap",0),Q(j0,"paddingTop",1),W(S0,T("Focus accent")),W($,T("Color of focused pane title, \u258C marker, and split borders.")),Q($,"wrapMode","word"),M(j0,I(X1,{each:MX,children:(O)=>{let L0=()=>G(jW(O)),f0=()=>J.level()==="body"&&J.bodyRow()===L0(),n0=()=>Y.focusAccent===O;return(()=>{var M0=V("box"),m0=V("text");return W(M0,m0),Q(M0,"flexDirection","row"),Q(M0,"gap",1),Q(M0,"paddingLeft",1),Q(M0,"paddingRight",1),Q(M0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(L0()),J.selectFocusAccent(O)}),Q(m0,"wrapMode","none"),M(m0,()=>n0()?"\u25CF ":" ",null),M(m0,()=>YU[O],null),x((D0)=>{var E0=f0()?Z.primary:void 0,z1=f0()?Z.selectedListItemText:n0()?Z.focusAccent:Z.text,p0=f0()||n0()?$0.BOLD:void 0;return E0!==D0.e&&(D0.e=Q(M0,"backgroundColor",E0,D0.e)),z1!==D0.t&&(D0.t=Q(m0,"fg",z1,D0.t)),p0!==D0.a&&(D0.a=Q(m0,"attributes",p0,D0.a)),D0},{e:void 0,t:void 0,a:void 0}),M0})()}}),null),W(P,G0),W(P,Z0),W(P,K0),W(P,e),Q(P,"flexDirection","column"),Q(P,"gap",0),Q(P,"paddingTop",1),W(G0,T("Notifications")),W(Z0,T("Fired when a background chat tab finishes or pauses on an approval. Toast = bottom-right popup; Sound = terminal bell + chime. Tab-chip unread dot is always on.")),Q(Z0,"wrapMode","word"),W(K0,h),Q(K0,"flexDirection","row"),Q(K0,"gap",1),Q(K0,"paddingLeft",1),Q(K0,"paddingRight",1),Q(K0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(f()),J.toggleToast()}),W(h,y),Q(h,"wrapMode","none"),M(h,()=>J.toastEnabled()?"[x]":"[ ]",y),W(e,V0),Q(e,"flexDirection","row"),Q(e,"gap",1),Q(e,"paddingLeft",1),Q(e,"paddingRight",1),Q(e,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(q()),J.toggleSound()}),W(V0,q0),Q(V0,"wrapMode","none"),M(V0,()=>J.soundEnabled()?"[x]":"[ ]",q0),W(A0,I0),W(A0,k0),W(A0,a0),Q(A0,"flexDirection","column"),Q(A0,"gap",0),Q(A0,"paddingTop",1),W(I0,T("Zen mode")),W(k0,T("The `zen` chip (above the file list) and `prefix`+space collapse the ChatTab to the engine pane \u2014 hiding the file and terminal panes. Keep this on to leave the Tasks rail visible so you can always get back out.")),Q(k0,"wrapMode","word"),W(a0,v),Q(a0,"flexDirection","row"),Q(a0,"gap",1),Q(a0,"paddingLeft",1),Q(a0,"paddingRight",1),Q(a0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(B()),J.toggleZenKeepsTasks()}),W(v,H0),Q(v,"wrapMode","none"),M(v,()=>J.zenKeepsTasks()?"[x]":"[ ]",H0),W(o,R0),W(o,b0),W(o,w0),W(o,J0),Q(o,"flexDirection","column"),Q(o,"gap",0),Q(o,"paddingTop",1),W(R0,T("Settings page")),W(b0,T("Where Settings and the other full dialogs (new task, rename) open. ChatTab = a dedicated full-window page alongside the engine tabs; Task panel = an overlay inside the left Tasks pane. enter to pick.")),Q(b0,"wrapMode","word"),W(w0,N0),Q(w0,"flexDirection","row"),Q(w0,"gap",1),Q(w0,"paddingLeft",1),Q(w0,"paddingRight",1),Q(w0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(j()),J.selectSurface("chattab")}),W(N0,d),Q(N0,"wrapMode","none"),M(N0,()=>J.settingsSurface()==="chattab"?"[x]":"[ ]",d),W(J0,F0),Q(J0,"flexDirection","row"),Q(J0,"gap",1),Q(J0,"paddingLeft",1),Q(J0,"paddingRight",1),Q(J0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(K()),J.selectSurface("taskpanel")}),W(F0,d0),Q(F0,"wrapMode","none"),M(F0,()=>J.settingsSurface()==="taskpanel"?"[x]":"[ ]",d0),W(r0,x0),W(r0,e0),W(r0,G1),W(r0,a),Q(r0,"flexDirection","column"),Q(r0,"gap",0),Q(r0,"paddingTop",1),W(x0,T("Editor")),W(e0,T("What `e` opens a file with in the file tree (enter stays the read-only preview). `auto` (default) follows $VISUAL / $EDITOR, else auto-detects nvim / vim / emacs / nano. enter on the row below cycles auto / vim / nvim / nano / emacs / custom; if the editor isn't installed it falls back to the preview.")),Q(e0,"wrapMode","word"),W(G1,F1),Q(G1,"flexDirection","row"),Q(G1,"gap",1),Q(G1,"paddingLeft",1),Q(G1,"paddingRight",1),Q(G1,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(H()),J.cycleEditorKind()}),Q(F1,"wrapMode","none"),M(F1,()=>`editor: < ${J.editorKind()} > (enter to change)`),W(a,r),Q(a,"flexDirection","row"),Q(a,"gap",1),Q(a,"paddingLeft",1),Q(a,"paddingRight",1),Q(a,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(U()),J.editEditorCustom()}),Q(r,"wrapMode","none"),M(r,()=>`custom: ${J.editorCustomCommand().trim()||"(unset \u2014 enter to edit)"}`),x((O)=>{var L0=Z.text,f0=$0.BOLD,n0=Z.textMuted,M0=Z.text,m0=$0.BOLD,D0=Z.textMuted,E0=L()?Z.primary:void 0,z1=L()?Z.selectedListItemText:Y.transparentBackground?Z.accent:Z.textMuted,p0=$0.BOLD,_0=Z.text,Z1=$0.BOLD,C1=Z.textMuted,g0=Z.text,c=$0.BOLD,C0=Z.textMuted,A1=F()?Z.primary:void 0,S1=F()?Z.selectedListItemText:J.toastEnabled()?Z.accent:Z.textMuted,H1=$0.BOLD,o0=D()?Z.primary:void 0,v1=D()?Z.selectedListItemText:J.soundEnabled()?Z.accent:Z.textMuted,b=$0.BOLD,W0=Z.text,h0=$0.BOLD,Q1=Z.textMuted,YJ=A()?Z.primary:void 0,qJ=A()?Z.selectedListItemText:J.zenKeepsTasks()?Z.accent:Z.textMuted,VJ=$0.BOLD,bY=Z.text,TY=$0.BOLD,KJ=Z.textMuted,RX=R()?Z.primary:void 0,tY=R()?Z.selectedListItemText:J.settingsSurface()==="chattab"?Z.accent:Z.textMuted,n=$0.BOLD,m=l()?Z.primary:void 0,i=l()?Z.selectedListItemText:J.settingsSurface()==="taskpanel"?Z.accent:Z.textMuted,E=$0.BOLD,O0=Z.text,T0=$0.BOLD,y0=Z.textMuted,P0=g()?Z.primary:void 0,D1=g()?Z.selectedListItemText:Z.accent,V1=$0.BOLD,ZJ=k()?Z.primary:void 0,pJ=k()?Z.selectedListItemText:J.editorKind()==="custom"?Z.text:Z.textMuted;return L0!==O.e&&(O.e=Q(N,"fg",L0,O.e)),f0!==O.t&&(O.t=Q(N,"attributes",f0,O.t)),n0!==O.a&&(O.a=Q(_,"fg",n0,O.a)),M0!==O.o&&(O.o=Q(Y0,"fg",M0,O.o)),m0!==O.i&&(O.i=Q(Y0,"attributes",m0,O.i)),D0!==O.n&&(O.n=Q(u,"fg",D0,O.n)),E0!==O.s&&(O.s=Q(Q0,"backgroundColor",E0,O.s)),z1!==O.h&&(O.h=Q(t,"fg",z1,O.h)),p0!==O.r&&(O.r=Q(t,"attributes",p0,O.r)),_0!==O.d&&(O.d=Q(S0,"fg",_0,O.d)),Z1!==O.l&&(O.l=Q(S0,"attributes",Z1,O.l)),C1!==O.u&&(O.u=Q($,"fg",C1,O.u)),g0!==O.c&&(O.c=Q(G0,"fg",g0,O.c)),c!==O.w&&(O.w=Q(G0,"attributes",c,O.w)),C0!==O.m&&(O.m=Q(Z0,"fg",C0,O.m)),A1!==O.f&&(O.f=Q(K0,"backgroundColor",A1,O.f)),S1!==O.y&&(O.y=Q(h,"fg",S1,O.y)),H1!==O.g&&(O.g=Q(h,"attributes",H1,O.g)),o0!==O.p&&(O.p=Q(e,"backgroundColor",o0,O.p)),v1!==O.b&&(O.b=Q(V0,"fg",v1,O.b)),b!==O.T&&(O.T=Q(V0,"attributes",b,O.T)),W0!==O.A&&(O.A=Q(I0,"fg",W0,O.A)),h0!==O.O&&(O.O=Q(I0,"attributes",h0,O.O)),Q1!==O.I&&(O.I=Q(k0,"fg",Q1,O.I)),YJ!==O.S&&(O.S=Q(a0,"backgroundColor",YJ,O.S)),qJ!==O.W&&(O.W=Q(v,"fg",qJ,O.W)),VJ!==O.C&&(O.C=Q(v,"attributes",VJ,O.C)),bY!==O.B&&(O.B=Q(R0,"fg",bY,O.B)),TY!==O.v&&(O.v=Q(R0,"attributes",TY,O.v)),KJ!==O.k&&(O.k=Q(b0,"fg",KJ,O.k)),RX!==O.x&&(O.x=Q(w0,"backgroundColor",RX,O.x)),tY!==O.j&&(O.j=Q(N0,"fg",tY,O.j)),n!==O.q&&(O.q=Q(N0,"attributes",n,O.q)),m!==O.z&&(O.z=Q(J0,"backgroundColor",m,O.z)),i!==O.P&&(O.P=Q(F0,"fg",i,O.P)),E!==O.H&&(O.H=Q(F0,"attributes",E,O.H)),O0!==O.F&&(O.F=Q(x0,"fg",O0,O.F)),T0!==O.M&&(O.M=Q(x0,"attributes",T0,O.M)),y0!==O.D&&(O.D=Q(e0,"fg",y0,O.D)),P0!==O.R&&(O.R=Q(G1,"backgroundColor",P0,O.R)),D1!==O.E&&(O.E=Q(F1,"fg",D1,O.E)),V1!==O.L&&(O.L=Q(F1,"attributes",V1,O.L)),ZJ!==O.N&&(O.N=Q(a,"backgroundColor",ZJ,O.N)),pJ!==O.G&&(O.G=Q(r,"fg",pJ,O.G)),O},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0,y:void 0,g:void 0,p:void 0,b:void 0,T:void 0,A:void 0,O:void 0,I:void 0,S:void 0,W:void 0,C:void 0,B:void 0,v:void 0,k:void 0,x:void 0,j:void 0,q:void 0,z:void 0,P:void 0,H:void 0,F:void 0,M:void 0,D:void 0,R:void 0,E:void 0,L:void 0,N:void 0,G:void 0}),C})()}function zU(J){let{theme:Y}=v0(),Z=()=>J.vendors.length;return(()=>{var X=V("box"),G=V("text"),z=V("text"),f=V("box"),q=V("box"),B=V("text");return W(X,G),W(X,z),W(X,f),Q(X,"flexDirection","column"),Q(X,"gap",1),W(G,T("Launch command")),W(z,T("The command each engine's task pane runs. Override a built-in when your binary isn't on PATH as `claude` / `codex` (e.g. it's `cl`) or to pass default flags, or add your own engine. \u25CF = default engine for new tasks (also set by Ctrl+Shift+T). enter edit command \xB7 r rename \xB7 x reset/remove \xB7 d set default.")),Q(z,"wrapMode","word"),W(f,q),Q(f,"flexDirection","column"),Q(f,"gap",0),M(f,I(X1,{get each(){return J.vendors},children:(j,K)=>{let H=()=>J.level()==="body"&&J.bodyRow()===K();return(()=>{var U=V("box"),L=V("text"),F=V("text"),D=V("text");return W(U,L),W(U,F),W(U,D),Q(U,"flexDirection","row"),Q(U,"gap",1),Q(U,"paddingLeft",1),Q(U,"paddingRight",1),Q(U,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(K()),J.editEngine(j)}),Q(L,"wrapMode","none"),M(L,()=>J.isDefaultEngine(j)?"\u25CF":" "),Q(F,"wrapMode","none"),M(F,()=>J.displayName(j)),Q(D,"wrapMode","none"),M(D,()=>J.commandText(j),null),M(D,(()=>{var A=Y1(()=>!!J.isDefault(j));return()=>A()?" (default)":J.isCustom(j)?" (custom)":""})(),null),x((A)=>{var R=H()?Y.primary:void 0,l=H()?Y.selectedListItemText:Y.accent,g=$0.BOLD,k=H()?Y.selectedListItemText:Y.text,C=$0.BOLD,N=H()?Y.selectedListItemText:J.isDefault(j)?Y.textMuted:Y.accent;return R!==A.e&&(A.e=Q(U,"backgroundColor",R,A.e)),l!==A.t&&(A.t=Q(L,"fg",l,A.t)),g!==A.a&&(A.a=Q(L,"attributes",g,A.a)),k!==A.o&&(A.o=Q(F,"fg",k,A.o)),C!==A.i&&(A.i=Q(F,"attributes",C,A.i)),N!==A.n&&(A.n=Q(D,"fg",N,A.n)),A},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),U})()}}),q),W(q,B),Q(q,"flexDirection","row"),Q(q,"paddingLeft",1),Q(q,"paddingRight",1),Q(q,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(Z()),J.onAddEngine()}),W(B,T("+ Add engine")),Q(B,"wrapMode","none"),x((j)=>{var K=Y.text,H=$0.BOLD,U=Y.textMuted,L=J.level()==="body"&&J.bodyRow()===Z()?Y.primary:void 0,F=J.level()==="body"&&J.bodyRow()===Z()?Y.selectedListItemText:Y.primary;return K!==j.e&&(j.e=Q(G,"fg",K,j.e)),H!==j.t&&(j.t=Q(G,"attributes",H,j.t)),U!==j.a&&(j.a=Q(z,"fg",U,j.a)),L!==j.o&&(j.o=Q(q,"backgroundColor",L,j.o)),F!==j.i&&(j.i=Q(B,"fg",F,j.i)),j},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),X})()}function QU(J){let{theme:Y}=v0(),Z=(X)=>X.binary.found?`Binary: ${X.binary.path}`:`Binary: ${X.binary.error}`;return(()=>{var X=V("box"),G=V("text"),z=V("text"),f=V("box"),q=V("text"),B=V("box"),j=V("text"),K=V("box"),H=V("text");return W(X,G),W(X,z),W(X,f),W(X,B),W(X,K),Q(X,"flexDirection","column"),Q(X,"gap",1),W(G,T("Accounts")),W(z,T("Read-only view of locally-detected engine accounts. Login flows land here later.")),Q(z,"wrapMode","word"),W(f,q),Q(f,"flexDirection","column"),Q(f,"gap",0),W(q,T("claude-code")),M(f,I(z0,{get when(){return J.claudeStatus()===null},get children(){var U=V("text");return W(U,T("Checking\u2026")),x((L)=>Q(U,"fg",Y.textMuted,L)),U}}),null),M(f,I(z0,{get when(){return J.claudeStatus()},children:(U)=>(()=>{var L=V("box"),F=V("text");return W(L,F),Q(L,"flexDirection","column"),Q(L,"gap",0),Q(F,"wrapMode","word"),M(F,()=>Z(U())),M(L,()=>{let D=U().account;if(D.kind==="oauth"){let A=[D.organization,D.billingType].filter((R)=>!!R).join(" \xB7 ");return(()=>{var R=V("text");return Q(R,"wrapMode","word"),M(R,()=>`\u25CF Logged in: ${D.email}${A?` (${A})`:""}`),x((l)=>Q(R,"fg",Y.success,l)),R})()}return(()=>{var A=V("text");return W(A,T("\u25CB Not logged in")),x((R)=>Q(A,"fg",Y.textMuted,R)),A})()},null),M(L,I(z0,{get when(){return U().accountError},children:(D)=>(()=>{var A=V("text");return Q(A,"wrapMode","word"),M(A,()=>`! ${D()}`),x((R)=>Q(A,"fg",Y.warning,R)),A})()}),null),x((D)=>Q(F,"fg",U().binary.found?Y.textMuted:Y.warning,D)),L})()}),null),W(B,j),Q(B,"flexDirection","column"),Q(B,"gap",0),W(j,T("codex")),M(B,I(z0,{get when(){return J.codexStatus()===null},get children(){var U=V("text");return W(U,T("Checking\u2026")),x((L)=>Q(U,"fg",Y.textMuted,L)),U}}),null),M(B,I(z0,{get when(){return J.codexStatus()},children:(U)=>(()=>{var L=V("box"),F=V("text");return W(L,F),Q(L,"flexDirection","column"),Q(L,"gap",0),Q(F,"wrapMode","word"),M(F,()=>Z(U())),M(L,()=>{let D=U().account;if(D.kind==="chatgpt")return(()=>{var A=V("text");return Q(A,"wrapMode","word"),M(A,()=>`\u25CF ChatGPT login: ${D.email}${D.plan?` (${D.plan})`:""}`),x((R)=>Q(A,"fg",Y.success,R)),A})();if(D.kind==="apikey")return(()=>{var A=V("text");return W(A,T("\u25CF API key configured")),x((R)=>Q(A,"fg",Y.success,R)),A})();return(()=>{var A=V("text");return W(A,T("\u25CB Not logged in")),x((R)=>Q(A,"fg",Y.textMuted,R)),A})()},null),M(L,I(z0,{get when(){return U().accountError},children:(D)=>(()=>{var A=V("text");return Q(A,"wrapMode","word"),M(A,()=>`! ${D()}`),x((R)=>Q(A,"fg",Y.warning,R)),A})()}),null),x((D)=>Q(F,"fg",U().binary.found?Y.textMuted:Y.warning,D)),L})()}),null),W(K,H),Q(K,"flexDirection","column"),Q(K,"gap",0),W(H,T("copilot")),M(K,I(z0,{get when(){return J.copilotStatus()===null},get children(){var U=V("text");return W(U,T("Checking\u2026")),x((L)=>Q(U,"fg",Y.textMuted,L)),U}}),null),M(K,I(z0,{get when(){return J.copilotStatus()},children:(U)=>(()=>{var L=V("box"),F=V("text");return W(L,F),Q(L,"flexDirection","column"),Q(L,"gap",0),Q(F,"wrapMode","word"),M(F,()=>Z(U())),M(L,()=>{let D=U().account;if(D.kind==="token")return(()=>{var A=V("text");return M(A,()=>`\u25CF Token configured (${D.source})`),x((R)=>Q(A,"fg",Y.success,R)),A})();if(D.kind==="oauth")return(()=>{var A=V("text");return W(A,T("\u25CF Copilot login detected")),x((R)=>Q(A,"fg",Y.success,R)),A})();return(()=>{var A=V("text");return W(A,T("\u25CB Not logged in")),x((R)=>Q(A,"fg",Y.textMuted,R)),A})()},null),M(L,I(z0,{get when(){return U().accountError},children:(D)=>(()=>{var A=V("text");return Q(A,"wrapMode","word"),M(A,()=>`! ${D()}`),x((R)=>Q(A,"fg",Y.warning,R)),A})()}),null),x((D)=>Q(F,"fg",U().binary.found?Y.textMuted:Y.warning,D)),L})()}),null),x((U)=>{var L=Y.text,F=$0.BOLD,D=Y.textMuted,A=Y.text,R=$0.BOLD,l=Y.text,g=$0.BOLD,k=Y.text,C=$0.BOLD;return L!==U.e&&(U.e=Q(G,"fg",L,U.e)),F!==U.t&&(U.t=Q(G,"attributes",F,U.t)),D!==U.a&&(U.a=Q(z,"fg",D,U.a)),A!==U.o&&(U.o=Q(q,"fg",A,U.o)),R!==U.i&&(U.i=Q(q,"attributes",R,U.i)),l!==U.n&&(U.n=Q(j,"fg",l,U.n)),g!==U.s&&(U.s=Q(j,"attributes",g,U.s)),k!==U.h&&(U.h=Q(H,"fg",k,U.h)),C!==U.r&&(U.r=Q(H,"attributes",C,U.r)),U},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),X})()}function fU(J){let{theme:Y}=v0(),Z=()=>J.level()==="body"&&J.bodyRow()===0,X=()=>J.level()==="body"&&J.bodyRow()===1,G=()=>J.level()==="body"&&J.bodyRow()===2;return(()=>{var z=V("box"),f=V("text"),q=V("text"),B=V("box"),j=V("box"),K=V("text"),H=V("text"),U=V("box"),L=V("text"),F=V("text"),D=V("box"),A=V("text");return W(z,f),W(z,q),W(z,B),Q(z,"flexDirection","column"),Q(z,"gap",1),W(f,T("Feedback")),W(q,T("Sends a GitHub Discussion to the kobe repo through `gh`. Requires `gh auth login`; category defaults to Feedback.")),Q(q,"wrapMode","word"),W(B,j),W(B,U),W(B,D),Q(B,"flexDirection","column"),Q(B,"gap",0),W(j,K),W(j,H),Q(j,"flexDirection","row"),Q(j,"gap",1),Q(j,"paddingLeft",1),Q(j,"paddingRight",1),Q(j,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(0),J.editTitle()}),W(K,T("title")),Q(H,"wrapMode","none"),M(H,()=>J.title().trim()||"(enter to edit)"),W(U,L),W(U,F),Q(U,"flexDirection","row"),Q(U,"gap",1),Q(U,"paddingLeft",1),Q(U,"paddingRight",1),Q(U,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(1),J.editBody()}),W(L,T("body")),Q(F,"wrapMode","none"),M(F,()=>J.body().trim()||"(enter to edit)"),W(D,A),Q(D,"flexDirection","row"),Q(D,"paddingLeft",1),Q(D,"paddingRight",1),Q(D,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(2),J.submit()}),W(A,T("[enter] Send to GitHub Discussions")),M(z,I(z0,{get when(){return J.status()},get children(){var R=V("text");return Q(R,"wrapMode","word"),M(R,()=>J.status()),x((l)=>Q(R,"fg",J.status().startsWith("error:")?Y.warning:Y.success,l)),R}}),null),x((R)=>{var l=Y.text,g=$0.BOLD,k=Y.textMuted,C=Z()?Y.primary:void 0,N=Z()?Y.selectedListItemText:Y.text,_=$0.BOLD,X0=Z()?Y.selectedListItemText:Y.textMuted,s=X()?Y.primary:void 0,Y0=X()?Y.selectedListItemText:Y.text,u=$0.BOLD,Q0=X()?Y.selectedListItemText:Y.textMuted,t=G()?Y.primary:Y.backgroundElement,j0=G()?Y.selectedListItemText:Y.accent,S0=$0.BOLD;return l!==R.e&&(R.e=Q(f,"fg",l,R.e)),g!==R.t&&(R.t=Q(f,"attributes",g,R.t)),k!==R.a&&(R.a=Q(q,"fg",k,R.a)),C!==R.o&&(R.o=Q(j,"backgroundColor",C,R.o)),N!==R.i&&(R.i=Q(K,"fg",N,R.i)),_!==R.n&&(R.n=Q(K,"attributes",_,R.n)),X0!==R.s&&(R.s=Q(H,"fg",X0,R.s)),s!==R.h&&(R.h=Q(U,"backgroundColor",s,R.h)),Y0!==R.r&&(R.r=Q(L,"fg",Y0,R.r)),u!==R.d&&(R.d=Q(L,"attributes",u,R.d)),Q0!==R.l&&(R.l=Q(F,"fg",Q0,R.l)),t!==R.u&&(R.u=Q(D,"backgroundColor",t,R.u)),j0!==R.c&&(R.c=Q(A,"fg",j0,R.c)),S0!==R.w&&(R.w=Q(A,"attributes",S0,R.w)),R},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0}),z})()}function qU(J){let{theme:Y}=v0(),Z=()=>J.level()==="body"&&J.bodyRow()===0,X=()=>J.level()==="body"&&J.bodyRow()===1,G=()=>Tz(bz(J.hasDaemon),"remote-projects"),z=()=>J.level()==="body"&&J.bodyRow()===G(),f=()=>Tz(bz(J.hasDaemon),"auto-status"),q=()=>J.level()==="body"&&J.bodyRow()===f(),B=()=>Tz(bz(J.hasDaemon),"dispatcher"),j=()=>J.level()==="body"&&J.bodyRow()===B();return(()=>{var K=V("box"),H=V("text"),U=V("text"),L=V("box"),F=V("text"),D=V("text"),A=V("box"),R=V("text"),l=V("text"),g=V("box"),k=V("text"),C=V("text"),N=V("box"),_=V("text"),X0=V("text"),s=V("box"),Y0=V("text");return W(K,H),W(K,U),W(K,L),W(K,D),W(K,A),Q(K,"flexDirection","column"),Q(K,"gap",1),W(H,T("Reset UI state")),W(U,T("Clears ~/.config/kobe/state.json and ~/.kobe/tasks.json, then quits kobe \u2014 relaunch to start fresh. Working session / Archive lists, pane sizes, theme, model picks all reset. Worktrees on disk and Claude Code session history are not touched.")),Q(U,"wrapMode","word"),W(L,F),Q(L,"flexDirection","row"),Q(L,"paddingLeft",1),Q(L,"paddingRight",1),Q(L,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(0),J.confirmReset()}),W(F,T("[enter] Reset")),M(K,I(z0,{get when(){return J.hasDaemon},get children(){var u=V("box"),Q0=V("text"),t=V("text"),j0=V("box"),S0=V("text");return W(u,Q0),W(u,t),W(u,j0),Q(u,"flexDirection","column"),Q(u,"gap",0),Q(u,"paddingTop",1),W(Q0,T("Restart backend")),W(t,T("Stops the kobe daemon and quits this kobe window so the next launch spawns a fresh daemon \u2014 picks up daemon / orchestrator / engine edits without a process kill. Other attached kobe windows will lose their connection too.")),Q(t,"wrapMode","word"),W(j0,S0),Q(j0,"flexDirection","row"),Q(j0,"paddingLeft",1),Q(j0,"paddingRight",1),Q(j0,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(1),J.confirmRestartDaemon()}),W(S0,T("[enter] Restart")),x(($)=>{var P=Y.text,G0=$0.BOLD,Z0=Y.textMuted,K0=X()?Y.primary:Y.backgroundElement,h=X()?Y.selectedListItemText:Y.accent,y=$0.BOLD;return P!==$.e&&($.e=Q(Q0,"fg",P,$.e)),G0!==$.t&&($.t=Q(Q0,"attributes",G0,$.t)),Z0!==$.a&&($.a=Q(t,"fg",Z0,$.a)),K0!==$.o&&($.o=Q(j0,"backgroundColor",K0,$.o)),h!==$.i&&($.i=Q(S0,"fg",h,$.i)),y!==$.n&&($.n=Q(S0,"attributes",y,$.n)),$},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),u}}),D),W(D,T("Daemon wedged or unresponsive? From a shell, run `kobe doctor` to diagnose, or `kobe reset` to stop the daemon + kill sessions (keeps your tasks). Use `kobe reset --hard` only to also wipe the task index + UI state.")),Q(D,"wrapMode","word"),W(A,R),W(A,l),W(A,g),W(A,C),W(A,N),W(A,X0),W(A,s),Q(A,"flexDirection","column"),Q(A,"gap",0),Q(A,"paddingTop",1),W(R,T("Experimental")),W(l,T("Remote projects (SSH): register a project whose git worktrees + engine run on another host over SSH, driven from this local kobe. Unfinished \u2014 file/diff panes still degrade for remote. Enables `kobe add --remote`.")),Q(l,"wrapMode","word"),W(g,k),Q(g,"flexDirection","row"),Q(g,"paddingLeft",1),Q(g,"paddingRight",1),Q(g,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(G()),J.toggleRemoteProjects()}),M(k,()=>J.remoteProjectsEnabled()?"[x] Remote projects (on)":"[ ] Remote projects (off)"),W(C,T("Auto status flow: a backlog task moves to in_progress when its engine starts a turn, and new claude sessions get a system-prompt note telling the agent to set in_review itself when the work is done. Never touches done/canceled.")),Q(C,"wrapMode","word"),W(N,_),Q(N,"flexDirection","row"),Q(N,"paddingLeft",1),Q(N,"paddingRight",1),Q(N,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(f()),J.toggleAutoStatus()}),M(_,()=>J.autoStatusEnabled()?"[x] Auto status flow (on)":"[ ] Auto status flow (off)"),W(X0,T("Field-notes dispatcher: task sessions file one-line gotchas (`kobe api note`), the daemon forwards each to the repo's main session, and that session relays them to the in-flight tasks that benefit (`kobe api dispatch`). Web-hosted sessions receive the relays today.")),Q(X0,"wrapMode","word"),W(s,Y0),Q(s,"flexDirection","row"),Q(s,"paddingLeft",1),Q(s,"paddingRight",1),Q(s,"onMouseUp",()=>{J.setLevel("body"),J.setBodyRow(B()),J.toggleDispatcher()}),M(Y0,()=>J.dispatcherEnabled()?"[x] Field-notes dispatcher (on)":"[ ] Field-notes dispatcher (off)"),x((u)=>{var Q0=Y.text,t=$0.BOLD,j0=Y.textMuted,S0=Z()?Y.primary:Y.backgroundElement,$=Z()?Y.selectedListItemText:Y.warning,P=$0.BOLD,G0=Y.textMuted,Z0=Y.text,K0=$0.BOLD,h=Y.textMuted,y=z()?Y.primary:Y.backgroundElement,e=z()?Y.selectedListItemText:Y.text,V0=J.remoteProjectsEnabled()?$0.BOLD:void 0,q0=Y.textMuted,A0=q()?Y.primary:Y.backgroundElement,I0=q()?Y.selectedListItemText:Y.text,k0=J.autoStatusEnabled()?$0.BOLD:void 0,a0=Y.textMuted,v=j()?Y.primary:Y.backgroundElement,H0=j()?Y.selectedListItemText:Y.text,o=J.dispatcherEnabled()?$0.BOLD:void 0;return Q0!==u.e&&(u.e=Q(H,"fg",Q0,u.e)),t!==u.t&&(u.t=Q(H,"attributes",t,u.t)),j0!==u.a&&(u.a=Q(U,"fg",j0,u.a)),S0!==u.o&&(u.o=Q(L,"backgroundColor",S0,u.o)),$!==u.i&&(u.i=Q(F,"fg",$,u.i)),P!==u.n&&(u.n=Q(F,"attributes",P,u.n)),G0!==u.s&&(u.s=Q(D,"fg",G0,u.s)),Z0!==u.h&&(u.h=Q(R,"fg",Z0,u.h)),K0!==u.r&&(u.r=Q(R,"attributes",K0,u.r)),h!==u.d&&(u.d=Q(l,"fg",h,u.d)),y!==u.l&&(u.l=Q(g,"backgroundColor",y,u.l)),e!==u.u&&(u.u=Q(k,"fg",e,u.u)),V0!==u.c&&(u.c=Q(k,"attributes",V0,u.c)),q0!==u.w&&(u.w=Q(C,"fg",q0,u.w)),A0!==u.m&&(u.m=Q(N,"backgroundColor",A0,u.m)),I0!==u.f&&(u.f=Q(_,"fg",I0,u.f)),k0!==u.y&&(u.y=Q(_,"attributes",k0,u.y)),a0!==u.g&&(u.g=Q(X0,"fg",a0,u.g)),v!==u.p&&(u.p=Q(s,"backgroundColor",v,u.p)),H0!==u.b&&(u.b=Q(Y0,"fg",H0,u.b)),o!==u.T&&(u.T=Q(Y0,"attributes",o,u.T)),u},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0,y:void 0,g:void 0,p:void 0,b:void 0,T:void 0}),K})()}function BU(){let{theme:J}=v0(),Y=g4(),Z=Object.keys(gj).sort();return(()=>{var X=V("box"),G=V("text"),z=V("text"),f=V("box"),q=V("text"),B=V("text"),j=V("text"),K=V("text");return W(X,G),W(X,z),W(X,f),W(X,j),W(X,K),Q(X,"flexDirection","column"),Q(X,"gap",1),W(G,T("Keybindings")),W(z,T("Rebind chords by editing the YAML below, then restart kobe (or respawn the pane). Press F1 anywhere for the live keymap with every binding id.")),Q(z,"wrapMode","word"),W(f,q),W(f,B),Q(f,"flexDirection","column"),Q(f,"gap",0),W(q,T("Config file")),Q(B,"wrapMode","word"),M(B,()=>Y.path,null),M(B,()=>Y.exists?"":" (not created yet)",null),M(X,I(z0,{get when(){return!Y.exists},get children(){var H=V("box"),U=V("text"),L=V("text"),F=V("text"),D=V("text"),A=V("text"),R=V("text"),l=V("text"),g=V("text"),k=V("text"),C=V("text");return W(H,U),W(H,L),W(H,F),W(H,D),W(H,A),W(H,R),W(H,l),W(H,g),W(H,k),W(H,C),Q(H,"flexDirection","column"),Q(H,"gap",0),W(U,T("Example")),W(L,T("bindings:")),W(F,T(" chat.fork.new: ctrl+g # string = one chord")),W(D,T(" sidebar.select: [enter] # list = several chords")),W(A,T(" files.createPR: null # null = unbind")),W(R,T(" tmux.tab.new: ctrl+y # tmux session key (see below)")),W(l,T(" tmux.layout.workspaceSplit: g # prefix g")),W(g,T("darwin: # platform overlay (also: linux)")),W(k,T(" bindings:")),W(C,T(" palette.open: [cmd+p, ctrl+p]")),x((N)=>{var _=J.text,X0=$0.BOLD,s=J.textMuted,Y0=J.textMuted,u=J.textMuted,Q0=J.textMuted,t=J.textMuted,j0=J.textMuted,S0=J.textMuted,$=J.textMuted,P=J.textMuted;return _!==N.e&&(N.e=Q(U,"fg",_,N.e)),X0!==N.t&&(N.t=Q(U,"attributes",X0,N.t)),s!==N.a&&(N.a=Q(L,"fg",s,N.a)),Y0!==N.o&&(N.o=Q(F,"fg",Y0,N.o)),u!==N.i&&(N.i=Q(D,"fg",u,N.i)),Q0!==N.n&&(N.n=Q(A,"fg",Q0,N.n)),t!==N.s&&(N.s=Q(R,"fg",t,N.s)),j0!==N.h&&(N.h=Q(l,"fg",j0,N.h)),S0!==N.r&&(N.r=Q(g,"fg",S0,N.r)),$!==N.d&&(N.d=Q(k,"fg",$,N.d)),P!==N.l&&(N.l=Q(C,"fg",P,N.l)),N},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0}),H}}),j),M(X,I(z0,{get when(){return Y.exists},get children(){var H=V("box"),U=V("text");return W(H,U),Q(H,"flexDirection","column"),Q(H,"gap",0),W(U,T("Overrides applied")),M(H,I(z0,{get when(){return Y.applied.length===0},get children(){var L=V("text");return W(L,T("none")),x((F)=>Q(L,"fg",J.textMuted,F)),L}}),null),M(H,I(X1,{get each(){return Y.applied},children:(L)=>(()=>{var F=V("text");return Q(F,"wrapMode","word"),M(F,()=>`${L.id} \u2192 ${L.keys.length>0?L.keys.join(" / "):"(unbound)"} (default: ${L.defaultKeys.join(" / ")})`),x((D)=>Q(F,"fg",J.text,D)),F})()}),null),x((L)=>{var F=J.text,D=$0.BOLD;return F!==L.e&&(L.e=Q(U,"fg",F,L.e)),D!==L.t&&(L.t=Q(U,"attributes",D,L.t)),L},{e:void 0,t:void 0}),H}}),j),M(X,I(z0,{get when(){return Y.warnings.length>0},get children(){var H=V("box"),U=V("text");return W(H,U),Q(H,"flexDirection","column"),Q(H,"gap",0),W(U,T("Warnings")),M(H,I(X1,{get each(){return Y.warnings},children:(L)=>(()=>{var F=V("text");return Q(F,"wrapMode","word"),M(F,`! ${L}`),x((D)=>Q(F,"fg",J.warning,D)),F})()}),null),x((L)=>{var F=J.warning,D=$0.BOLD;return F!==L.e&&(L.e=Q(U,"fg",F,L.e)),D!==L.t&&(L.t=Q(U,"attributes",D,L.t)),L},{e:void 0,t:void 0}),H}}),j),W(j,T("tmux session keys use the same file: tmux.tab.new (ctrl+t), tmux.tab.prev/next (ctrl+[/]), tmux.tab.close (ctrl+w), tmux.tab.rename (f2), tmux.tab.chooseEngine (ctrl+shift+t), tmux.detach (ctrl+q), tmux.focus (4 chords, left/down/up/right), and prefix layout keys: workspaceSplit (s), workspaceClose (x), workspaceReset (r), tasksToggle (a), opsToggle (o), terminalToggle (z). They apply when a session is (re)built.")),Q(j,"wrapMode","word"),Q(K,"wrapMode","word"),M(K,()=>`Fixed (not rebindable): ${Z.join(", ")}.`),x((H)=>{var U=J.text,L=$0.BOLD,F=J.textMuted,D=J.text,A=$0.BOLD,R=J.textMuted,l=J.textMuted,g=J.textMuted;return U!==H.e&&(H.e=Q(G,"fg",U,H.e)),L!==H.t&&(H.t=Q(G,"attributes",L,H.t)),F!==H.a&&(H.a=Q(z,"fg",F,H.a)),D!==H.o&&(H.o=Q(q,"fg",D,H.o)),A!==H.i&&(H.i=Q(q,"attributes",A,H.i)),R!==H.n&&(H.n=Q(B,"fg",R,H.n)),l!==H.s&&(H.s=Q(j,"fg",l,H.s)),g!==H.h&&(H.h=Q(K,"fg",g,H.h)),H},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),X})()}var jU=S(()=>{w();w();w();w();w();w();w();w();B1();oH();u1();jf();WW()});import{TextAttributes as mS}from"@opentui/core";function cS(J){return J.split(/[-_]+/).filter((Y)=>Y.length>0).map((Y)=>Y.charAt(0).toUpperCase()+Y.slice(1)).join(" ")}function AX(J){let Y=h1(),Z=v0(),X=e1(),{theme:G}=Z,[z,f]=p("sidebar"),[q,B]=p("general"),[j,K]=p(0),[H,U]=p(0),[L,F]=p(""),[D,A]=p(""),[R,l]=p(""),g=U0(()=>Z.all().slice().sort()),[,k]=p(Math.max(0,g().findIndex((c)=>c===Z.selected))),C=t4(J.orchestrator),[N,_]=p(null),[X0,s]=p(null),[Y0,u]=p(null),Q0=!1;s0(()=>{if(q()!=="accounts"||Q0)return;Q0=!0,AQ().then(_),RQ().then(s),CQ().then(u)});function t(){return ZU(q(),{themeNames:g(),focusAccentSlots:MX,engineList:b0(),hasDaemon:C})}function j0(){return t().length}function S0(){return fX(J.kv.get($Y,QX))}function $(c){if(Z.selected===c)return;if(!Z.set(c))return;J.kv.set("activeTheme",c),J.onVisualPrefsChange?.()}function P(c){if(Z.transparentBackground===c)return;Z.setTransparentBackground(c),J.kv.set("transparentBackground",c),J.onVisualPrefsChange?.()}function G0(){P(!Z.transparentBackground)}function Z0(c){if(Z.focusAccent===c)return;Z.setFocusAccent(c),J.kv.set("focusAccent",c),J.onVisualPrefsChange?.()}function K0(c){J.kv.set($Y,c)}function h(){return J.kv.get("notifications.toast.enabled",!0)!==!1}function y(){return J.kv.get("notifications.sound.enabled",!0)!==!1}function e(){J.kv.set("notifications.toast.enabled",!h())}function V0(){J.kv.set("notifications.sound.enabled",!y())}function q0(){return J.kv.get(bf,!0)!==!1}function A0(){J.kv.set(bf,!q0())}function I0(){return J.kv.get("experimental.remoteProjects",!1)===!0}function k0(){J.kv.set("experimental.remoteProjects",!I0())}function a0(){return J.kv.get(YX,!1)===!0}function v(){J.kv.set(YX,!a0())}function H0(){return J.kv.get(ZX,!1)===!0}function o(){J.kv.set(ZX,!H0())}function R0(){let c=J.kv.get("customEngineIds",[]);return Array.isArray(c)?c.filter((C0)=>typeof C0==="string"&&C0.trim().length>0):[]}function b0(){return[...m1,...R0()]}function w0(c){let C0=J.kv.get(fY(c),"");return typeof C0==="string"?C0.trim():""}function N0(c){return w0(c)||eG(c).join(" ")}function d(c){return XJ(c)&&w0(c).length===0&&!F0(c)}function J0(c){let C0=J.kv.get(qY(c),"");return typeof C0==="string"?C0.trim():""}function F0(c){return J0(c).length>0}function d0(c){return J0(c)||Dj[c]||c}let[r0,x0]=p(g1("lastSelectedVendor")??k1);function e0(c){return r0()===c}function G1(c){i1("lastSelectedVendor",c),J.kv.set("lastSelectedVendor",c),x0(c)}async function F1(c){let C0=await UY.show(Y,N0(c),{dialogTitle:`${d0(c)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(C0===void 0)return;J.kv.set(fY(c),C0.trim())}async function a(c){let C0=await UY.show(Y,d0(c),{dialogTitle:`${d0(c)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(C0===void 0)return;J.kv.set(qY(c),C0.trim())}function r(c){if(J.kv.set(fY(c),""),J.kv.set(qY(c),""),!XJ(c))J.kv.set("customEngineIds",R0().filter((C0)=>C0!==c)),U((C0)=>Math.max(0,Math.min(C0,b0().length)))}async function O(){let c=await UY.show(Y,"",{dialogTitle:"Add engine",fieldLabel:"id",submitLabel:"next",placeholder:"lowercase slug, e.g. aider"});if(c===void 0)return;let C0=c.trim().toLowerCase();if(!C0||XJ(C0)||R0().includes(C0))return;let A1=await UY.show(Y,"",{dialogTitle:`Add engine \xB7 ${C0}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(A1===void 0)return;let S1=await UY.show(Y,C0,{dialogTitle:`Add engine \xB7 ${C0}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(J.kv.set("customEngineIds",[...R0(),C0]),A1.trim())J.kv.set(fY(C0),A1.trim());let H1=S1?.trim()??"";J.kv.set(qY(C0),H1&&H1!==C0?H1:cS(C0))}function L0(){if(q()!=="engines"||z()!=="body")return null;let c=Cq(t(),H());return c?.kind==="engine"?c.vendor:null}function f0(){return iX(J.kv.get(lY,rQ))}function n0(){let c=zX.indexOf(f0()),C0=zX[(c+1)%zX.length];if(C0)J.kv.set(lY,C0)}function M0(){let c=J.kv.get(LZ,"");return typeof c==="string"?c:""}async function m0(){let c=await UY.show(Y,M0(),{dialogTitle:"Custom editor command (use {file} for the path)",fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(c===void 0)return;let C0=c.trim();if(J.kv.set(LZ,C0),C0)J.kv.set(lY,"custom")}async function D0(){let c=await UY.show(Y,L(),{dialogTitle:"Feedback title",fieldLabel:"title",submitLabel:"save"});if(c===void 0)return;F(c),l("")}async function E0(){let c=await UY.show(Y,D(),{dialogTitle:"Feedback body",fieldLabel:"body",submitLabel:"save",allowEmpty:!0});if(c===void 0)return;A(c),l("")}async function z1(){l("submitting...");try{let c=WG({title:L(),body:D()});l(`sent: ${c.url}`),F(""),A("")}catch(c){l(`error: ${c instanceof Error?c.message:String(c)}`)}}function p0(){if(z()!=="sidebar"||j0()===0)return;if(f("body"),U(0),q()==="general")k(0)}function _0(c){if(z()==="sidebar"){let S1=(j()+c+OX.length)%OX.length;K(S1);let H1=OX[S1];if(H1)B(H1.id),U(0);return}let C0=j0();if(C0===0)return;let A1=(H()+c+C0)%C0;if(U(A1),Cq(t(),A1)?.kind==="theme")k(A1)}function Z1(c){B(c),K(OX.findIndex((C0)=>C0.id===c)),U(0),f("sidebar")}let C1={theme:(c)=>$(c.name),transparent:()=>G0(),focusAccent:(c)=>Z0(c.slot),toast:()=>e(),sound:()=>V0(),zenKeepTasks:()=>A0(),surface:(c)=>K0(c.surface),editorKind:()=>n0(),editorCustom:()=>void m0(),engine:(c)=>void F1(c.vendor),engineAdd:()=>void O(),feedbackTitle:()=>void D0(),feedbackBody:()=>void E0(),feedbackSend:()=>void z1(),devReset:()=>void qW(Y,J.kv,X),devRestartDaemon:()=>void BW(Y,J.orchestrator,X),devRemoteProjects:()=>k0(),devAutoStatus:()=>v(),devDispatcher:()=>o()};function g0(){let c=Cq(t(),H());if(!c)return;C1[c.kind](c)}return L1(()=>({enabled:!J.standalone||Y.stack.length===0,bindings:[{key:"down",cmd:()=>_0(1)},{key:"up",cmd:()=>_0(-1)},{key:"j",cmd:()=>_0(1)},{key:"k",cmd:()=>_0(-1)},{key:"tab",cmd:()=>_0(1)},{key:"right",cmd:p0},{key:"l",cmd:p0},{key:"left",cmd:()=>f("sidebar")},{key:"h",cmd:()=>f("sidebar")},{key:"return",cmd:()=>{if(z()==="sidebar"){p0();return}g0()}},{key:"t",cmd:G0},{key:"r",cmd:()=>{let c=L0();if(c)a(c)}},{key:"x",cmd:()=>{let c=L0();if(c)r(c)}},{key:"d",cmd:()=>{let c=L0();if(c)G1(c)}}]})),(()=>{var c=V("box"),C0=V("box"),A1=V("text"),S1=V("text"),H1=V("box"),o0=V("box"),v1=V("box"),b=V("text");return W(c,C0),W(c,H1),W(c,v1),Q(c,"paddingLeft",2),Q(c,"paddingRight",2),Q(c,"paddingBottom",1),Q(c,"gap",1),W(C0,A1),W(C0,S1),Q(C0,"flexDirection","row"),Q(C0,"justifyContent","space-between"),W(A1,T("Settings")),W(S1,T("esc")),Q(S1,"onMouseUp",()=>J.onClose()),W(H1,o0),Q(H1,"flexDirection","row"),Q(H1,"gap",2),M(H1,I(XU,{level:z,cursor:j,switchSection:Z1}),o0),Q(o0,"flexGrow",1),Q(o0,"flexShrink",1),Q(o0,"flexDirection","column"),Q(o0,"gap",1),M(o0,I(z0,{get when(){return q()==="general"},get children(){return I(GU,{level:z,bodyRow:H,setLevel:f,setBodyRow:U,themeNames:g,setThemeCursor:k,selectTheme:$,toggleTransparent:G0,selectFocusAccent:Z0,toastEnabled:h,soundEnabled:y,toggleToast:e,toggleSound:V0,zenKeepsTasks:q0,toggleZenKeepsTasks:A0,settingsSurface:S0,selectSurface:K0,editorKind:f0,cycleEditorKind:n0,editorCustomCommand:M0,editEditorCustom:()=>void m0()})}}),null),M(o0,I(z0,{get when(){return q()==="engines"},get children(){return I(zU,{level:z,bodyRow:H,setLevel:f,setBodyRow:U,get vendors(){return b0()},isCustom:(W0)=>!XJ(W0),displayName:d0,commandText:N0,isDefault:d,isDefaultEngine:e0,editEngine:(W0)=>void F1(W0),renameEngine:(W0)=>void a(W0),resetEngine:r,onAddEngine:()=>void O()})}}),null),M(o0,I(z0,{get when(){return q()==="accounts"},get children(){return I(QU,{claudeStatus:N,codexStatus:X0,copilotStatus:Y0})}}),null),M(o0,I(z0,{get when(){return q()==="keys"},get children(){return I(BU,{})}}),null),M(o0,I(z0,{get when(){return q()==="feedback"},get children(){return I(fU,{level:z,bodyRow:H,setLevel:f,setBodyRow:U,title:L,body:D,status:R,editTitle:()=>void D0(),editBody:()=>void E0(),submit:()=>void z1()})}}),null),M(o0,I(z0,{get when(){return q()==="dev"},get children(){return I(qU,{level:z,bodyRow:H,setLevel:f,setBodyRow:U,hasDaemon:C,confirmReset:()=>void qW(Y,J.kv,X),confirmRestartDaemon:()=>void BW(Y,J.orchestrator,X),remoteProjectsEnabled:I0,toggleRemoteProjects:k0,autoStatusEnabled:a0,toggleAutoStatus:v,dispatcherEnabled:H0,toggleDispatcher:o})}}),null),W(v1,b),Q(v1,"paddingTop",0),W(b,T("j/k pick \xB7 h/l switch level \xB7 enter activate \xB7 esc close")),x((W0)=>{var h0=mS.BOLD,Q1=G.text,YJ=G.textMuted,qJ=G.textMuted;return h0!==W0.e&&(W0.e=Q(A1,"attributes",h0,W0.e)),Q1!==W0.t&&(W0.t=Q(A1,"fg",Q1,W0.t)),YJ!==W0.a&&(W0.a=Q(S1,"fg",YJ,W0.a)),qJ!==W0.o&&(W0.o=Q(b,"fg",qJ,W0.o)),W0},{e:void 0,t:void 0,a:void 0,o:void 0}),c})()}var VW=S(()=>{w();w();w();w();w();w();w();w();B1();aZ();bJ();nf();rG();aQ();O1();Pj();SJ();BJ();u1();oQ();gJ();uJ();QW();JU();WW();jU();AX.show=(J,Y,Z)=>{let X=!1;return new Promise((G)=>{J.replace(()=>I(AX,{kv:Y,orchestrator:Z,onVisualPrefsChange:()=>{X=!0},onClose:()=>G({visualPrefsChanged:X})}),()=>G({visualPrefsChanged:X}))})}});import{TextAttributes as dS}from"@opentui/core";function WU(){let{theme:J}=v0(),Y=IY(),Z=Uq(),X=()=>Z.toasts().slice(-HU),G=()=>Math.max(0,Y().width-nS-iS),z=()=>Math.max(0,Y().height-lS-HU-1);return I(z0,{get when(){return Z.toasts().length>0},get children(){var f=V("box");return Q(f,"position","absolute"),Q(f,"zIndex",2500),Q(f,"width",40),Q(f,"flexDirection","column"),Q(f,"gap",0),M(f,I(X1,{get each(){return X()},children:(q)=>{let B=()=>q.kind==="needs_input"?J.warning:q.kind==="error"?J.error:J.success,j=()=>J.selectedListItemText,K=()=>q.kind==="needs_input"?"?":q.kind==="error"?"\u2715":"\u2713";return(()=>{var H=V("box"),U=V("text"),L=V("text");return W(H,U),W(H,L),Q(H,"flexDirection","row"),Q(H,"gap",1),Q(H,"paddingLeft",1),Q(H,"paddingRight",1),Q(H,"onMouseUp",()=>Z.dismiss(q.id)),Q(U,"wrapMode","none"),M(U,K),Q(L,"wrapMode","none"),M(L,()=>q.title),x((F)=>{var D=B(),A=j(),R=dS.BOLD,l=j();return D!==F.e&&(F.e=Q(H,"backgroundColor",D,F.e)),A!==F.t&&(F.t=Q(U,"fg",A,F.t)),R!==F.a&&(F.a=Q(U,"attributes",R,F.a)),l!==F.o&&(F.o=Q(L,"fg",l,F.o)),F},{e:void 0,t:void 0,a:void 0,o:void 0}),H})()}})),x((q)=>{var B=G(),j=z();return B!==q.e&&(q.e=Q(f,"left",B,q.e)),j!==q.t&&(q.t=Q(f,"top",j,q.t)),q},{e:void 0,t:void 0}),f}})}var HU=4,nS=40,iS=2,lS=2;var VU=S(()=>{w();w();w();w();w();w();w();B1();Lq();u1()});import{TextAttributes as $S}from"@opentui/core";function aS(J,Y){return`daemon is ${J?`v${J}`:"an older build"} \u2014 you launched v${Y}. Run \`kobe daemon restart\` then \`kobe reload\``}function KU(J){let{theme:Y}=v0(),Z=()=>Math.max(4,J.width()-2);return I(z0,{get when(){return J.stale()},get children(){var X=V("box"),G=V("text"),z=V("box"),f=V("text"),q=V("box"),B=V("text");return W(X,G),W(X,z),W(X,q),Q(X,"flexDirection","column"),Q(X,"flexShrink",0),Q(X,"paddingLeft",1),Q(X,"paddingRight",1),Q(X,"paddingBottom",1),Q(G,"wrapMode","none"),M(G,()=>"\u2594".repeat(Z())),W(z,f),Q(z,"flexDirection","row"),Q(z,"gap",1),W(f,T("\u26A0 DAEMON OUT OF DATE")),Q(f,"wrapMode","none"),W(q,B),Q(q,"flexDirection","row"),Q(q,"gap",1),Q(B,"wrapMode","word"),M(B,()=>aS(J.daemonVersion(),J.clientVersion)),x((j)=>{var{warning:K,warning:H}=Y,U=$S.BOLD,L=Y.text;return K!==j.e&&(j.e=Q(G,"fg",K,j.e)),H!==j.t&&(j.t=Q(f,"fg",H,j.t)),U!==j.a&&(j.a=Q(f,"attributes",U,j.a)),L!==j.o&&(j.o=Q(B,"fg",L,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),X}})}var UU=S(()=>{w();w();w();w();w();w();w();B1();u1()});function LU(J,Y){return J.find((Z)=>Z.id!==Y&&!Z.archived)}async function pS(J){let Y=J.tasks.find((z)=>z.id===J.taskId);if(!Y)return null;let Z=!Y.archived;try{await J.orch.setArchived(J.taskId,Z)}catch(z){return J.logger.error(`${J.logPrefix} archive failed:`,z),null}if(!Z)return{archived:Z};let X=K1(J.taskId),G=LU(J.tasks,J.taskId);if(await yY(X,G?K1(G.id):void 0).catch((z)=>{J.logger.error(`${J.logPrefix} switch-client failed:`,z)}),J.updateActiveTask)await J.orch.setActiveTask(G?.id??null).catch(()=>{});return await mJ(X).catch((z)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,z)}),{archived:Z,nextTask:G}}async function _S(J){let Y=LU(J.tasks,J.taskId),Z=K1(J.taskId);if(J.switchBeforeKill)await yY(Z,Y?K1(Y.id):void 0).catch((X)=>{J.logger.error(`${J.logPrefix} switch-client failed:`,X)});if(J.updateActiveTask)await J.orch?.setActiveTask(Y?.id??null).catch(()=>{});return await mJ(Z).catch((X)=>{J.logger.error(`${J.logPrefix} kill tmux session failed:`,X)}),{nextTask:Y}}async function DU(J,Y){if(!J.orch)return;let Z=J.tasks().find((G)=>G.id===Y);if(!Z)return;if(!Z.archived){if(!await J.confirm({title:`Archive "${Z.title}"?`,body:"Moves it to Archives and stops its running session. The worktree, branch, and chat history stay \u2014 unarchive to bring it back.",cancelLabel:"cancel",confirmLabel:"archive"}))return}if(!await pS({orch:J.orch,tasks:J.tasks(),taskId:Y,logger:J.logger,logPrefix:J.logPrefix,updateActiveTask:J.updateActiveTask}))return;await J.reload?.()}async function MU(J,Y){if(!J.orch)return;let Z=J.tasks().find((f)=>f.id===Y);if(!Z)return;if(!await J.confirm({title:`Delete "${Z.title}"?`,body:"Removes the task entry and its worktree. The tmux session (if any) is killed.",cancelLabel:"cancel",confirmLabel:"delete"}))return;let G=!1;try{await J.orch.deleteTask(Y),G=!0}catch(f){if((f instanceof Error?f.message:String(f)).includes(zB)){if(await J.confirm({title:`"${Z.title}" has uncommitted changes`,body:"Its worktree has uncommitted or untracked work that will be permanently deleted. Force delete anyway?",cancelLabel:"cancel",confirmLabel:"force delete"}))try{await J.orch.deleteTask(Y,{force:!0}),G=!0}catch(j){J.logger.error(`${J.logPrefix} force delete failed:`,j),J.notifyError?.(`Couldn't delete: ${j instanceof Error?j.message:String(j)}`)}}else J.logger.error(`${J.logPrefix} delete failed:`,f),J.notifyError?.(`Couldn't delete: ${f instanceof Error?f.message:String(f)}`)}if(!G)return;let{nextTask:z}=await _S({orch:J.orch,tasks:J.tasks(),taskId:Y,logger:J.logger,logPrefix:J.logPrefix,switchBeforeKill:J.switchBeforeKill,updateActiveTask:J.updateActiveTask});await J.reload?.(),J.onTaskDeleted?.(Y,z)}async function FU(J,Y){let Z=J.tasks().find((G)=>G.id===Y);if(!Z)return;let X=await J.promptText(Z.title);if(!X||!J.orch)return;try{await J.orch.setTitle(Y,X)}catch(G){J.logger.error(`${J.logPrefix} task.rename failed:`,G),J.notifyError?.(`Couldn't rename task: ${G instanceof Error?G.message:String(G)}`);return}await J.reload?.()}async function OU(J,Y){let Z=J.tasks().find((G)=>G.id===Y);if(!Z||Z.kind==="main")return;let X=await J.promptText(Z.branch,{dialogTitle:"Rename branch",fieldLabel:"branch"});if(!X||!J.orch)return;try{await J.orch.setBranch(Y,X)}catch(G){J.logger.error(`${J.logPrefix} task.setBranch failed:`,G),J.notifyError?.(`Couldn't rename branch: ${G instanceof Error?G.message:String(G)}`);return}await J.reload?.()}async function AU(J,Y){let Z=J.tasks().find((z)=>z.id===Y);if(!Z||!J.orch)return;let X=await mY(),G=eY(X,Z.vendor??k1);try{await J.orch.setVendor(Y,G)}catch(z){J.logger.error(`${J.logPrefix} task.setVendor failed:`,z),J.notifyError?.(`Couldn't switch engine: ${z instanceof Error?z.message:String(z)}`);return}J.notifyInfo?.(`Engine \u2192 ${XX(G)} (applies on reopen)`),await J.reload?.()}async function RU(J){let Y=wJ(),Z=J.cursorRepo()??Y[0]??process.cwd();if(J.openCreateSurface&&await J.openCreateSurface(Z))return;let X=J.lastVendor()??k1,G=await mY();if(G.length===0)J.notifyInfo?.("No engine CLI detected \u2014 install claude or codex, or add one in Settings \u2192 Engines");let z=J.orch,f=await J.promptNewTask(Z,Y,{defaultVendor:X,availableVendors:G,discoverAdoptable:z?(B)=>z.discoverAdoptableWorktrees(B):void 0});if(!f)return;if(J.rememberVendor(f.vendor),xY(f.repo),J.onRepoSaved?.(),!z){J.logger.error(`${J.logPrefix} no daemon; cannot create task`);return}J.notifyInfo?.("Creating task\u2026");let q;try{if(f.mode==="adopt")for(let B of f.adopt)q=(await z.adoptWorktree({repo:f.repo,worktreePath:B.worktreePath,branch:B.branch,vendor:f.vendor})).id;else q=(await z.createTask({repo:f.repo,baseRef:f.baseRef,vendor:f.vendor})).id}catch(B){J.logger.error(`${J.logPrefix} task.create/adopt failed:`,B),J.notifyError?.(`Couldn't create task: ${B instanceof Error?B.message:String(B)}`);return}if(await J.reload?.(),q)J.selectTask?.(q),await J.enterTask?.(q)}var CU=S(()=>{aZ();bJ();qB();O1();SJ();BJ();t1()});import{spawn as rS}from"child_process";import{existsSync as oS}from"fs";import{basename as sS,delimiter as tS,isAbsolute as eS,join as Jk}from"path";function KW(J,Y,Z){if(eS(J))return Z(J);let X=Y.PATH??"";for(let G of X.split(tS)){if(!G)continue;if(Z(Jk(G,J)))return!0}return!1}function Xk(J){let Y=sS(J);if(Y==="code")return"VS Code";if(Y==="cursor")return"Cursor";if(Y==="windsurf")return"Windsurf";if(Y==="zed")return"Zed";return Y||J}function gU(J={}){let Y=J.env??process.env,Z=J.platform??process.platform,X=J.exists??oS,G=Y.KOBE_OPEN_EDITOR?.trim();if(G)return{id:"env",label:Xk(G),command:G,args:[]};for(let z of Yk)if(KW(z.command,Y,X))return{id:z.id,label:z.label,command:z.command,args:[]};if(Z==="darwin"&&KW("open",Y,X)){for(let z of Zk)if(z.paths.some((f)=>X(f)))return{id:z.id,label:z.label,command:"open",args:["-a",z.appName]};return{id:"mac-open",label:"Finder",command:"open",args:[]}}if(Z==="linux"&&KW("xdg-open",Y,X))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function Gk(J,Y){return[Y.command,[...Y.args,J]]}function yU(J,Y,Z={}){if(!J)return!1;let X=Z.spawn??rS,[G,z]=Gk(J,Y);try{let f=X(G,z,{detached:!0,stdio:"ignore"});if(f.pid===void 0)return!1;return f.unref(),!0}catch{return!1}}var Yk,Zk;var SU=S(()=>{Yk=[{id:"code",label:"VS Code",command:"code"},{id:"cursor",label:"Cursor",command:"cursor"},{id:"windsurf",label:"Windsurf",command:"windsurf"},{id:"zed",label:"Zed",command:"zed"}],Zk=[{id:"vscode.app",label:"VS Code",appName:"Visual Studio Code",paths:["/Applications/Visual Studio Code.app"]},{id:"cursor.app",label:"Cursor",appName:"Cursor",paths:["/Applications/Cursor.app","/System/Applications/Cursor.app"]},{id:"windsurf.app",label:"Windsurf",appName:"Windsurf",paths:["/Applications/Windsurf.app"]},{id:"zed.app",label:"Zed",appName:"Zed",paths:["/Applications/Zed.app"]}]});function gq(J){let Y=new Map;function Z(X){let G=Y.get(X);if(!G){let[z,f]=p(J.initial,J.equals?{equals:J.equals}:void 0);G={read:z,write:(q)=>f(()=>q),inFlight:!1,nextAllowedAt:0},Y.set(X,G)}return G}return{read(X){if(!X)return J.initial;return Z(X).read()},poll(X){if(!X)return;let G=Z(X);lQ(G,J,(z)=>J.run(X,z),(z)=>G.write(z))},reset(){Y.clear()}}}var Ez=S(()=>{B1();tG();tG()});import{stat as zk}from"fs/promises";import{join as Qk}from"path";async function jk(J){try{let Y=await zk(Qk(J,".git","HEAD"));return`${Y.mtimeMs}:${Y.size}`}catch{return null}}async function Hk(J,Y,Z=QY){let X=await jk(J);if(X!==null){let q=kU.get(J);if(q&&q.fingerprint===X)return q.value}let G="",z=await Z("git",["symbolic-ref","--short","HEAD"],{cwd:J,env:TJ(),signal:Y}),f=z.status===0?z.stdout.trim():"";if(f&&f!=="HEAD")G=f;else if((await Z("git",["rev-parse","--verify","HEAD"],{cwd:J,env:TJ(),signal:Y})).status===0)G="(detached)";if(X!==null)kU.set(J,{fingerprint:X,value:G});return G}function NU(J){return IU.read(J)}function bU(J){IU.poll(J)}var fk=2000,qk=30000,Bk=1500,kU,IU;var TU=S(()=>{DZ();Ez();kU=new Map;IU=gq({initial:"",timeoutMs:fk,slowRetryMs:qk,minIntervalMs:Bk,run:(J,Y)=>Hk(J,Y)})});function UW(J){let Y=J.scheduleTimeout??((B,j)=>{let K=setTimeout(B,j);return()=>clearTimeout(K)}),Z=!1,X=null,G=()=>{Z=!0,X?.(),X=Y(()=>{Z=!1,X=null},700)},z=()=>{Z=!1,X?.(),X=null},f=(B)=>{let j=J.getFlatIds();if(j.length===0)return;let K=J.getCursor(),H=K<0?0:K,U=Math.min(j.length-1,Math.max(0,H+B));J.setCursor(U)},q=(B)=>{let j=J.getFlatIds();if(j.length===0)return;J.setCursor(Math.min(j.length-1,Math.max(0,B)))};return{moveDown(){z(),f(1)},moveUp(){z(),f(-1)},selectCurrent(){z();let B=J.getFlatIds(),j=J.getCursor();if(j<0||j>=B.length)return;let K=B[j];if(K!==void 0)J.onSelect(K)},pressG(){if(Z)z(),q(0);else G()},pressShiftG(){z(),q(J.getFlatIds().length-1)},isChordArmed(){return Z},disarmChord(){z()}}}function EU(J){let Y=UW({getCursor:()=>J.cursorIndex(),setCursor:(z)=>J.setCursorIndex(z),getFlatIds:()=>J.flatTaskIds(),onSelect:(z)=>J.onSelect(z)}),Z=()=>{let z=J.flatTaskIds(),f=J.cursorIndex();if(f<0||f>=z.length)return;return z[f]},X=()=>J.searchMode?.()??!1,G=()=>J.moveMode?.()??!1;L1(()=>({enabled:J.focused()&&!X(),bindings:TZ({"sidebar.nav":(z,f)=>{let q=(f??0)%2===0;if(G()){let B=Z();if(B===void 0)return;J.onMoveRequest?.(B,q?1:-1);return}if(q)Y.moveDown();else Y.moveUp()},"sidebar.select":()=>{if(G()){J.onMoveModeExit?.();return}Y.selectCurrent()},"sidebar.goto":(z)=>{if(G())return;if(z.shift)Y.pressShiftG();else Y.pressG()},"sidebar.delete":()=>{if(G())return;let z=Z();if(z!==void 0)J.onDeleteRequest?.(z)},"sidebar.archive":()=>{if(G())return;let z=Z();if(z!==void 0)J.onArchiveRequest?.(z)},"sidebar.localMerge":(z)=>{if(!z.shift)return;let f=Z();if(f!==void 0)J.onLocalMergeRequest?.(f)},"sidebar.rename":()=>{if(G())return;let z=Z();if(z!==void 0)J.onRenameRequest?.(z)},"sidebar.pin":(z)=>{if(G())return;if(!z.shift)return;let f=Z();if(f!==void 0)J.onPinRequest?.(f)},"sidebar.search.enter":()=>{if(G())return;J.onSearchEnter?.()},"sidebar.sort":()=>{if(G())return;J.onSortModeToggle?.()},"sidebar.projectFilter":()=>{if(G())return;J.onProjectFilterToggle?.()}})})),L1(()=>({enabled:J.focused()&&G(),bindings:[{key:"escape",cmd:()=>J.onMoveModeExit?.()}]})),L1(()=>({enabled:J.focused(),bindings:TZ({"sidebar.view":(z,f)=>{J.onViewSwitch?.((f??0)%2===0?-1:1)}})})),L1(()=>({enabled:J.focused()&&X(),bindings:TZ({"sidebar.search.nav":(z,f)=>{if((f??0)%2===0)Y.moveDown();else Y.moveUp()},"sidebar.search.submit":()=>{Y.selectCurrent(),J.onSearchExit?.(!0)},"sidebar.search.cancel":()=>J.onSearchExit?.(!1)})}))}var uU=S(()=>{MG();gJ()});function LW(J,Y){if(Y<=0)return"";if(J.length<=Y)return J;return`${J.slice(0,Math.max(0,Y-1))}\u2026`}function DW(J,Y){return` ${LW(J,Math.max(0,Y))}`}function Kk(J){switch(J){case"rate_limited":return{text:"rate limited",tone:"warning"};case"permission_needed":return{text:"needs permission",tone:"warning"};case"error":return{text:"error",tone:"error"};default:return null}}function hU(J){switch(J.prStatus?.checkState){case"passing":return{glyph:"\u2713",tone:"success"};case"failing":return{glyph:"\u2717",tone:"error"};case"pending":return{glyph:"\u2022",tone:"warning"};default:return null}}function Dk(J){if(J.kind==="main")return!1;return J.vendor!==void 0&&!XJ(J.vendor)}function MW(J){let{task:Y}=J,Z=Y.kind==="main",X=Z?J.mainBranch??"":Y.branch,G=Wk[Y.status],z=J.activity?.state,f=z!==void 0,q=Mk(z),B=Kk(z),j=Dk(Y)&&!f,K=J.job!==void 0,H=K||!j&&(z==="running"||J.live||!f&&!Z&&Y.status==="in_progress"),U=RG[J.spinnerFrame]??RG[0],L=K?"primary":j?"textMuted":B?.tone??(H?"primary":q?.tone??G.tone),F=j?Uk:Vk[Y.status],D=K?J.truncateBranch(Lk,J.subtitleBudget):B?J.truncateBranch(B.text,J.subtitleBudget):X.length>0?J.truncateBranch(X,J.subtitleBudget):J.truncateBranch(F,J.subtitleBudget),A=j?xU:q?.glyph??G.glyph,R=j?xU:q?.glyph??"\u2605";return{isMain:Z,titleText:Z?KY(Y.repo):Y.title,subtitleText:D,loading:H,stateGlyph:H?U:A,projectGlyph:H?U:R,tone:L}}function FW(J,Y){if(!J.loading)return J;let Z=RG[Y()%RG.length]??"\u280B";if(Z===J.stateGlyph&&Z===J.projectGlyph)return J;return{...J,stateGlyph:Z,projectGlyph:Z}}function Mk(J){switch(J){case"rate_limited":return{glyph:"\u25F7",tone:"warning"};case"permission_needed":return{glyph:"?",tone:"warning"};case"error":return{glyph:"\u2715",tone:"error"};case"turn_complete":return{glyph:"\u2713",tone:"primary"};default:return null}}var Wk,Vk,RG,wU=100,xU="\xB7",Uk="no activity tracking",Lk="materializing";var PU=S(()=>{BJ();Oq();Wk={done:{glyph:"\u2713",tone:"success"},in_review:{glyph:"\u25D0",tone:"warning"},in_progress:{glyph:"",tone:"primary"},backlog:{glyph:"\u25CB",tone:"textMuted"},canceled:{glyph:"\u2298",tone:"textMuted"},error:{glyph:"\u2715",tone:"error"}},Vk={done:"done",in_review:"in review",in_progress:"working",backlog:"\u2014",canceled:"canceled",error:"error"};RG=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function OW(J){return vU.read(J)}function AW(J){vU.poll(J)}var Fk=4000,Ok=60000,Ak=1500,Rk,vU;var mU=S(()=>{DZ();Ez();fG();Ez();Rk={added:0,deleted:0},vU=gq({initial:Rk,equals:kY,timeoutMs:Fk,slowRetryMs:Ok,minIntervalMs:Ak,run:async(J,Y)=>{let Z=await QY("git",["status","--porcelain=v1"],{cwd:J,env:TJ(),signal:Y});if(Z.status!==0)throw Error("git status failed");return QG(Z.stdout)}})});import{TextAttributes as y1}from"@opentui/core";function dU(J,Y=gk){if(J.length<=Y)return J;return`${J.slice(0,Math.max(0,Y-1))}\u2026`}function yk(J){let Y=0;for(let Z of J)Y+=(Z.codePointAt(0)??0)>=4352?2:1;return Y}function Sk(J,Y){if(Y<=0||J.length<=Y)return J;return`\u2026${J.slice(J.length-Math.max(0,Y-1))}`}function nU(J){let{theme:Y}=v0(),Z=()=>J.focused?J.focused():!0,[X,G]=p("active"),[z,f]=p(!1),[q,B]=p(""),[j,K]=p(null),H=()=>J.projectFilter?.()??j(),U=(d)=>{if(J.onProjectFilterChange)J.onProjectFilterChange(d);else K(d)};function L(){B(""),f(!0),J.onSearchActiveChange?.(!0)}function F(d){f(!1),B(""),J.onSearchActiveChange?.(!1)}s0(()=>{if(!z())return;let d=e1();if(!d)return;let J0=(F0)=>{if(F0.defaultPrevented)return;if(!Z())return;if(F0.ctrl||F0.meta||F0.option)return;if(F0.name==="backspace"){B((x0)=>x0.slice(0,-1));return}let d0=F0.sequence;if(!d0||d0.length!==1)return;let r0=d0.charCodeAt(0);if(r0<32||r0===127)return;B((x0)=>x0+d0)};d.keyInput.on("keypress",J0),P1(()=>d.keyInput.off("keypress",J0))});let[D,A]=p(0),R=setInterval(()=>A((d)=>d+1),Ck);P1(()=>clearInterval(R));let[l,g]=p(0),k=setInterval(()=>g((d)=>(d+1)%RG.length),wU);P1(()=>clearInterval(k));let C=()=>J.sortMode?.()??"default",N=U0(()=>i4(J.tasks(),X())),_=U0(()=>{let d=H();if(!d)return null;let J0=aJ(d);return N().find((F0)=>aJ(F0.repo)===J0)??null}),X0=U0(()=>_()?.repo??null),s=U0(()=>_()?.label??"all"),Y0=U0(()=>{let d=_();return d?d.count:N().reduce((J0,F0)=>J0+F0.count,0)}),u=U0((d)=>a4(d,ZW(J.tasks(),X(),z()?q():"",C(),X0())),[]),Q0=U0(()=>XW(u())),t=U0(()=>$4(u())),j0=U0(()=>t().projectRows),S0=U0(()=>t().taskRows),$=U0(()=>{let d=new Map;for(let J0 of u())d.set(J0.flatIndex,J0);return d}),P=U0(()=>XW(ZW(J.tasks(),X(),"",C(),X0())).length),G0=U0(()=>S0().length>0);s0(()=>{let d=H(),J0=N();if(d!==null&&J0.length>0&&(J0.length<=1||_()===null))U(null)});function Z0(){let d=N();if(d.length<=1){U(null);return}let J0=X0(),F0=J0?aJ(J0):null,d0=F0===null?-1:d.findIndex((x0)=>aJ(x0.repo)===F0),r0=d[d0+1];U(r0?.repo??null)}let K0=()=>J.width?J.width():cU,h=U0(()=>Math.max(6,K0()-9)),y=U0(()=>Math.max(6,K0()-16)),e=IY(),V0=U0(()=>{let d=Math.max(2,Math.min(10,Math.floor(e().height*0.25))),J0=Math.max(2,j0().length*2);return Math.min(d,J0)}),[q0,A0]=p(null),[I0,k0]=p(-1),a0,v,H0,o=new Map;s0(()=>{let d=J.width?J.width():cU,J0=H0;if(!J0)return;J0.width=d,J0.flexShrink=1,J0.minHeight=0}),s0(LJ([I0,u],([d])=>{let J0=$().get(d);if(!J0)return;let F0=J0.task.kind==="main"?a0:v;if(!F0)return;if(F0.viewport.height<=0)return;let d0=o.get(d);if(!d0)return;F0.scrollChildIntoView(d0.id)})),s0(LJ(()=>[J.selectedId(),Q0()],([d,J0])=>{let F0=l1(I0);if(d===null){if(F0===-1&&J0.length>0)k0(0);else if(F0>=J0.length)k0(Math.max(0,J0.length-1));else if(J0.length===0)k0(-1);return}let d0=J0.indexOf(d);if(d0>=0){if(d0!==F0)k0(d0)}else if(J0.length===0)k0(-1);else if(F0<0||F0>=J0.length)k0(J0.length-1)})),s0(LJ(X,()=>{let d=Q0();k0(d.length>0?0:-1)},{defer:!0})),s0(LJ(X0,(d)=>k0(l4(u(),d)),{defer:!0})),s0(LJ([z,q],()=>{if(!z())return;let d=Q0();k0(d.length>0?0:-1)}));function R0(d){let J0=X(),F0=uz.findIndex((x0)=>x0.view===J0);if(F0<0)return;let d0=(F0+d+uz.length)%uz.length,r0=uz[d0];if(r0)G(r0.view)}EU({focused:Z,cursorIndex:I0,setCursorIndex:k0,flatTaskIds:Q0,onSelect:(d)=>{J.onSelect(d),J.onActivate?.(d)},onDeleteRequest:(d)=>J.onDeleteRequest?.(d),onArchiveRequest:(d)=>J.onArchiveRequest?.(d),onLocalMergeRequest:(d)=>J.onLocalMergeRequest?.(d),moveMode:J.moveMode,onMoveRequest:(d,J0)=>J.onMoveRequest?.(d,J0),onMoveModeExit:()=>J.onMoveModeExit?.(),onRenameRequest:(d)=>J.onRenameRequest?.(d),onPinRequest:(d)=>J.onPinRequest?.(d),onViewSwitch:(d)=>R0(d),onSortModeToggle:()=>J.onSortModeToggle?.(),onProjectFilterToggle:()=>Z0(),searchMode:z,onSearchEnter:()=>L(),onSearchExit:(d)=>F(d)});let b0=(d)=>(()=>{var J0=V("box"),F0=V("box"),d0=V("text"),r0=V("text");return W(J0,F0),Q(J0,"flexDirection","column"),Q(J0,"flexShrink",0),M(J0,I(z0,{get when(){return d.topPad},get children(){var x0=V("box"),e0=V("text");return W(x0,e0),Q(x0,"flexShrink",0),W(e0,T(" ")),Q(e0,"wrapMode","none"),x0}}),F0),W(F0,d0),W(F0,r0),Q(F0,"flexDirection","row"),Q(F0,"flexShrink",0),Q(F0,"gap",1),Q(F0,"paddingLeft",1),Q(F0,"paddingRight",1),Q(d0,"wrapMode","none"),M(d0,()=>d.label),Q(r0,"wrapMode","none"),M(r0,()=>"\u2500".repeat(Math.max(2,K0()-10-d.label.length-(d.suffix?.length??0)))),M(F0,I(z0,{get when(){return d.suffix},get children(){var x0=V("text");return Q(x0,"wrapMode","none"),M(x0,()=>d.suffix),x((e0)=>{var G1=Y.info,F1=y1.BOLD;return G1!==e0.e&&(e0.e=Q(x0,"fg",G1,e0.e)),F1!==e0.t&&(e0.t=Q(x0,"attributes",F1,e0.t)),e0},{e:void 0,t:void 0}),x0}}),null),x((x0)=>{var e0=Y.textMuted,G1=y1.BOLD,F1=Y.border;return e0!==x0.e&&(x0.e=Q(d0,"fg",e0,x0.e)),G1!==x0.t&&(x0.t=Q(d0,"attributes",G1,x0.t)),F1!==x0.a&&(x0.a=Q(r0,"fg",F1,x0.a)),x0},{e:void 0,t:void 0,a:void 0}),J0})(),w0=(d)=>{switch(d){case"success":return Y.success;case"warning":return Y.warning;case"primary":return Y.primary;case"error":return Y.error;default:return Y.textMuted}},N0=(d)=>{let J0=d.row.task,F0=d.row.flatIndex,d0=()=>F0===I0(),r0=()=>J0.id===J.selectedId(),x0=U0(()=>{let f0=J.chatRunState?.();if(!f0)return!1;let n0=`${J0.id}:`;for(let[M0,m0]of f0)if(m0==="running"&&M0.startsWith(n0))return!0;return!1}),e0=U0(()=>{let f0=Pf(J.worktreeChanges?.(),J0.worktreePath);if(f0)return f0;if(D(),!J0.archived)AW(J0.worktreePath);return OW(J0.worktreePath)},void 0,{equals:kY}),G1=U0(()=>{return D(),bU(J0.repo),NU(J0.repo)}),F1=U0(()=>MW({task:J0,activity:J.engineState?.().get(J0.id),job:J.taskJobs?.().get(J0.id),live:x0(),spinnerFrame:0,subtitleBudget:y(),truncateBranch:dU,mainBranch:G1()})),a=U0(()=>FW(F1(),l)),r=()=>!a().loading?Y.primary:w0(a().tone),O=()=>d0()?Y.focusAccent:r0()?Y.primary:void 0,L0=()=>d0()||r0()?"\u258C":" ";return(()=>{var f0=V("box"),n0=V("box"),M0=V("box"),m0=V("text"),D0=V("box"),E0=V("text"),z1=V("text"),p0=V("box"),_0=V("text"),Z1=V("box"),C1=V("text");return W(f0,n0),Q(f0,"flexDirection","column"),Q(f0,"gap",0),Q(f0,"paddingBottom",0),W(n0,M0),W(n0,p0),kZ((g0)=>{o.set(F0,g0),P1(()=>{if(o.get(F0)===g0)o.delete(F0)})},n0),Q(n0,"flexDirection","column"),Q(n0,"gap",0),Q(n0,"onMouseUp",()=>{if(J.onSelect(J0.id),J.activateOnClick)J.onActivate?.(J0.id)}),Q(n0,"onMouseOver",(g0)=>A0({task:J0,x:g0.x,y:g0.y})),Q(n0,"onMouseOut",()=>A0((g0)=>g0?.task.id===J0.id?null:g0)),W(M0,m0),W(M0,D0),Q(M0,"flexDirection","row"),Q(M0,"gap",0),Q(m0,"wrapMode","none"),M(m0,L0),W(D0,E0),W(D0,z1),Q(D0,"flexDirection","row"),Q(D0,"flexGrow",1),Q(D0,"paddingRight",1),Q(D0,"gap",0),Q(E0,"wrapMode","none"),M(E0,()=>a().projectGlyph),Q(z1,"wrapMode","none"),Q(z1,"flexGrow",1),M(z1,()=>DW(a().titleText,h())),W(p0,_0),W(p0,Z1),Q(p0,"flexDirection","row"),Q(p0,"gap",0),Q(_0,"wrapMode","none"),M(_0,L0),W(Z1,C1),Q(Z1,"flexDirection","row"),Q(Z1,"flexGrow",1),Q(Z1,"paddingLeft",2),Q(Z1,"paddingRight",1),Q(Z1,"gap",1),Q(C1,"wrapMode","none"),Q(C1,"flexGrow",1),M(C1,()=>a().subtitleText),M(Z1,I(z0,{get when(){return e0().added>0},get children(){var g0=V("text"),c=T("+");return W(g0,c),Q(g0,"wrapMode","none"),M(g0,()=>e0().added,null),x((C0)=>Q(g0,"fg",Y.success,C0)),g0}}),null),M(Z1,I(z0,{get when(){return e0().deleted>0},get children(){var g0=V("text"),c=T("\u2212");return W(g0,c),Q(g0,"wrapMode","none"),M(g0,()=>e0().deleted,null),x((C0)=>Q(g0,"fg",Y.error,C0)),g0}}),null),x((g0)=>{var c=d0()?Y.backgroundElement:void 0,C0=O(),A1=r(),S1=y1.BOLD,H1=Y.text,o0=y1.BOLD,v1=O(),b=Y.textMuted,W0=y1.DIM;return c!==g0.e&&(g0.e=Q(n0,"backgroundColor",c,g0.e)),C0!==g0.t&&(g0.t=Q(m0,"fg",C0,g0.t)),A1!==g0.a&&(g0.a=Q(E0,"fg",A1,g0.a)),S1!==g0.o&&(g0.o=Q(E0,"attributes",S1,g0.o)),H1!==g0.i&&(g0.i=Q(z1,"fg",H1,g0.i)),o0!==g0.n&&(g0.n=Q(z1,"attributes",o0,g0.n)),v1!==g0.s&&(g0.s=Q(_0,"fg",v1,g0.s)),b!==g0.h&&(g0.h=Q(C1,"fg",b,g0.h)),W0!==g0.r&&(g0.r=Q(C1,"attributes",W0,g0.r)),g0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),f0})()};return(()=>{var d=V("box"),J0=V("box"),F0=V("box"),d0=V("text"),r0=V("box"),x0=V("box"),e0=V("text"),G1=V("scrollbox"),F1=V("box");return W(d,J0),W(d,r0),W(d,G1),kZ((a)=>{H0=a},d),Q(d,"flexGrow",1),Q(d,"minHeight",0),Q(d,"flexDirection","column"),Q(d,"paddingTop",1),Q(d,"paddingBottom",1),Q(d,"paddingLeft",0),Q(d,"paddingRight",0),W(J0,F0),Q(J0,"flexDirection","row"),Q(J0,"justifyContent","space-between"),Q(J0,"gap",1),Q(J0,"paddingBottom",1),Q(J0,"paddingLeft",1),Q(J0,"paddingRight",1),W(F0,d0),Q(F0,"flexDirection","row"),Q(F0,"gap",1),W(d0,T("KOBE")),Q(d0,"wrapMode","none"),M(F0,I(z0,{get when(){return J.headerStatus?.()},children:(a)=>(()=>{var r=V("text");return Q(r,"wrapMode","none"),Q(r,"onMouseUp",()=>J.onHeaderStatusClick?.()),M(r,()=>a().label),x((O)=>{var L0=a().emphasize?Y.warning:Y.textMuted,f0=a().emphasize?y1.BOLD:y1.DIM;return L0!==O.e&&(O.e=Q(r,"fg",L0,O.e)),f0!==O.t&&(O.t=Q(r,"attributes",f0,O.t)),O},{e:void 0,t:void 0}),r})()}),null),M(J0,I(z0,{get when(){return J.onAddTask},get children(){var a=V("text");return W(a,T("[+]")),Q(a,"wrapMode","none"),Q(a,"onMouseUp",()=>J.onAddTask?.()),x((r)=>{var O=Y.primary,L0=y1.BOLD;return O!==r.e&&(r.e=Q(a,"fg",O,r.e)),L0!==r.t&&(r.t=Q(a,"attributes",L0,r.t)),r},{e:void 0,t:void 0}),a}}),null),M(d,I(z0,{get when(){return z()},get children(){var a=V("box"),r=V("text"),O=V("text"),L0=V("text");return W(a,r),W(a,O),W(a,L0),Q(a,"flexDirection","row"),Q(a,"gap",0),Q(a,"paddingBottom",1),Q(a,"paddingLeft",1),W(r,T("/")),Q(r,"wrapMode","none"),Q(O,"wrapMode","none"),M(O,q),W(L0,T("\u2588")),Q(L0,"wrapMode","none"),M(a,I(z0,{get when(){return q().length===0},get children(){var f0=V("text"),n0=T(" fuzzy filter");return W(f0,n0),Q(f0,"wrapMode","none"),x((M0)=>Q(f0,"fg",Y.textMuted,M0)),f0}}),null),M(a,I(z0,{get when(){return q().length>0},get children(){var f0=V("text"),n0=T(" "),M0=T("/");return W(f0,n0),W(f0,M0),Q(f0,"wrapMode","none"),M(f0,()=>Q0().length,M0),M(f0,P,null),x((m0)=>Q(f0,"fg",Y.textMuted,m0)),f0}}),null),x((f0)=>{var{info:n0,text:M0,info:m0}=Y,D0=y1.BLINK;return n0!==f0.e&&(f0.e=Q(r,"fg",n0,f0.e)),M0!==f0.t&&(f0.t=Q(O,"fg",M0,f0.t)),m0!==f0.a&&(f0.a=Q(L0,"fg",m0,f0.a)),D0!==f0.o&&(f0.o=Q(L0,"attributes",D0,f0.o)),f0},{e:void 0,t:void 0,a:void 0,o:void 0}),a}}),r0),W(r0,x0),Q(r0,"flexDirection","row"),Q(r0,"justifyContent","space-between"),Q(r0,"gap",1),Q(r0,"paddingBottom",1),Q(r0,"paddingLeft",1),Q(r0,"paddingRight",1),W(x0,e0),Q(x0,"flexDirection","row"),Q(x0,"gap",2),M(x0,I(X1,{each:uz,children:(a)=>{let r=()=>X()===a.view;return(()=>{var O=V("text");return Q(O,"wrapMode","none"),Q(O,"onMouseUp",()=>G(a.view)),M(O,()=>a.label),x((L0)=>{var f0=r()?Y.primary:Y.textMuted,n0=r()?y1.BOLD:void 0;return f0!==L0.e&&(L0.e=Q(O,"fg",f0,L0.e)),n0!==L0.t&&(L0.t=Q(O,"attributes",n0,L0.t)),L0},{e:void 0,t:void 0}),O})()}}),e0),W(e0,T("[/]")),Q(e0,"wrapMode","none"),M(r0,I(z0,{get when(){return J.sortMode},get children(){var a=V("text");return W(a,T("sort")),Q(a,"wrapMode","none"),Q(a,"onMouseUp",()=>J.onSortModeToggle?.()),x((r)=>{var O=Y.textMuted,L0=y1.DIM;return O!==r.e&&(r.e=Q(a,"fg",O,r.e)),L0!==r.t&&(r.t=Q(a,"attributes",L0,r.t)),r},{e:void 0,t:void 0}),a}}),null),M(d,I(z0,{get when(){return N().length>1},get children(){var a=V("box"),r=V("box"),O=V("text"),L0=V("text"),f0=V("text"),n0=T(" ");return W(a,r),W(a,f0),Q(a,"flexDirection","row"),Q(a,"justifyContent","space-between"),Q(a,"gap",1),Q(a,"paddingBottom",1),Q(a,"paddingLeft",1),Q(a,"paddingRight",1),Q(a,"onMouseUp",()=>Z0()),W(r,O),W(r,L0),Q(r,"flexDirection","row"),Q(r,"gap",1),W(O,T("Project")),Q(O,"wrapMode","none"),Q(L0,"wrapMode","none"),M(L0,s),W(f0,n0),Q(f0,"wrapMode","none"),M(f0,Y0,n0),M(f0,()=>Y0()===1?"task":"tasks",null),x((M0)=>{var m0=Y.textMuted,D0=y1.BOLD,E0=X0()?Y.primary:Y.textMuted,z1=X0()?y1.BOLD:void 0,p0=Y.textMuted,_0=y1.DIM;return m0!==M0.e&&(M0.e=Q(O,"fg",m0,M0.e)),D0!==M0.t&&(M0.t=Q(O,"attributes",D0,M0.t)),E0!==M0.a&&(M0.a=Q(L0,"fg",E0,M0.a)),z1!==M0.o&&(M0.o=Q(L0,"attributes",z1,M0.o)),p0!==M0.i&&(M0.i=Q(f0,"fg",p0,M0.i)),_0!==M0.n&&(M0.n=Q(f0,"attributes",_0,M0.n)),M0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),a}}),G1),M(d,I(z0,{get when(){return j0().length>0},get children(){var a=V("box"),r=V("scrollbox"),O=V("box");return W(a,r),Q(a,"flexDirection","column"),Q(a,"flexShrink",0),M(a,I(b0,{label:"PROJECTS"}),r),W(r,O),kZ((L0)=>{a0=L0},r),Q(r,"flexShrink",0),Q(r,"flexGrow",0),Q(r,"minHeight",0),Q(r,"stickyScroll",!1),Q(r,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),Q(O,"flexShrink",0),Q(O,"gap",0),Q(O,"paddingRight",1),M(O,I(X1,{get each(){return j0()},children:(L0)=>I(N0,{row:L0})})),x((L0)=>Q(r,"maxHeight",V0(),L0)),a}}),G1),M(d,I(b0,{label:"TASKS",get suffix(){return Y1(()=>C()==="default")()?void 0:C()},get topPad(){return j0().length>0}}),G1),W(G1,F1),kZ((a)=>{v=a},G1),Q(G1,"flexGrow",1),Q(G1,"minHeight",0),Q(G1,"stickyScroll",!1),Q(G1,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),Q(F1,"flexShrink",0),Q(F1,"gap",0),Q(F1,"paddingRight",1),M(F1,I(X1,{get each(){return S0()},children:(a)=>{let{task:r,flatIndex:O}=a,L0=()=>O===I0(),f0=()=>r.id===J.selectedId(),n0=U0(()=>{let _0=J.chatRunState?.();if(!_0)return!1;let Z1=`${r.id}:`;for(let[C1,g0]of _0)if(g0==="running"&&C1.startsWith(Z1))return!0;return!1}),M0=U0(()=>{let _0=Pf(J.worktreeChanges?.(),r.worktreePath);if(_0)return _0;if(D(),!r.archived)AW(r.worktreePath);return OW(r.worktreePath)},void 0,{equals:kY}),m0=U0(()=>MW({task:r,activity:J.engineState?.().get(r.id),job:J.taskJobs?.().get(r.id),live:n0(),spinnerFrame:0,subtitleBudget:y(),truncateBranch:dU,mainBranch:""})),D0=U0(()=>FW(m0(),l)),E0=()=>w0(D0().tone),z1=()=>L0()?Y.focusAccent:f0()?Y.primary:void 0,p0=()=>L0()||f0()?"\u258C":" ";return(()=>{var _0=V("box"),Z1=V("box"),C1=V("box"),g0=V("text"),c=V("box"),C0=V("text"),A1=V("text"),S1=V("box"),H1=V("text"),o0=V("box"),v1=V("text");return W(_0,Z1),Q(_0,"flexDirection","column"),Q(_0,"gap",0),Q(_0,"paddingBottom",1),W(Z1,C1),W(Z1,S1),kZ((b)=>{o.set(O,b),P1(()=>{if(o.get(O)===b)o.delete(O)})},Z1),Q(Z1,"flexDirection","column"),Q(Z1,"gap",0),Q(Z1,"onMouseUp",()=>{if(J.onSelect(r.id),J.activateOnClick)J.onActivate?.(r.id)}),Q(Z1,"onMouseOver",(b)=>A0({task:r,x:b.x,y:b.y})),Q(Z1,"onMouseOut",()=>A0((b)=>b?.task.id===r.id?null:b)),W(C1,g0),W(C1,c),Q(C1,"flexDirection","row"),Q(C1,"gap",0),Q(g0,"wrapMode","none"),M(g0,p0),W(c,C0),W(c,A1),Q(c,"flexDirection","row"),Q(c,"flexGrow",1),Q(c,"paddingRight",1),Q(c,"gap",0),Q(C0,"wrapMode","none"),M(C0,()=>D0().stateGlyph),Q(A1,"wrapMode","none"),Q(A1,"flexGrow",1),M(A1,()=>DW(D0().titleText,h())),M(c,I(z0,{get when(){return Y1(()=>!!J.moveMode?.())()&&L0()},get children(){var b=V("text");return W(b,T(" move")),Q(b,"wrapMode","none"),x((W0)=>Q(b,"fg",Y.warning,W0)),b}}),null),W(S1,H1),W(S1,o0),Q(S1,"flexDirection","row"),Q(S1,"gap",0),Q(H1,"wrapMode","none"),M(H1,p0),W(o0,v1),Q(o0,"flexDirection","row"),Q(o0,"flexGrow",1),Q(o0,"paddingLeft",2),Q(o0,"paddingRight",1),Q(o0,"gap",1),Q(v1,"wrapMode","none"),Q(v1,"flexGrow",1),M(v1,()=>D0().subtitleText),M(o0,I(z0,{get when(){return r.pinned===!0},get children(){var b=V("text");return W(b,T("\u25B4")),Q(b,"wrapMode","none"),x((W0)=>Q(b,"fg",Y.warning,W0)),b}}),null),M(o0,I(z0,{get when(){return hU(r)},children:(b)=>(()=>{var W0=V("text");return Q(W0,"wrapMode","none"),M(W0,()=>b().glyph),x((h0)=>Q(W0,"fg",w0(b().tone),h0)),W0})()}),null),M(o0,I(z0,{get when(){return M0().added>0},get children(){var b=V("text"),W0=T("+");return W(b,W0),Q(b,"wrapMode","none"),M(b,()=>M0().added,null),x((h0)=>Q(b,"fg",Y.success,h0)),b}}),null),M(o0,I(z0,{get when(){return M0().deleted>0},get children(){var b=V("text"),W0=T("\u2212");return W(b,W0),Q(b,"wrapMode","none"),M(b,()=>M0().deleted,null),x((h0)=>Q(b,"fg",Y.error,h0)),b}}),null),x((b)=>{var W0=L0()?Y.backgroundElement:void 0,h0=z1(),Q1=E0(),YJ=y1.BOLD,qJ=Y.text,VJ=f0()||L0()?y1.BOLD:void 0,bY=z1(),TY=Y.textMuted,KJ=y1.DIM;return W0!==b.e&&(b.e=Q(Z1,"backgroundColor",W0,b.e)),h0!==b.t&&(b.t=Q(g0,"fg",h0,b.t)),Q1!==b.a&&(b.a=Q(C0,"fg",Q1,b.a)),YJ!==b.o&&(b.o=Q(C0,"attributes",YJ,b.o)),qJ!==b.i&&(b.i=Q(A1,"fg",qJ,b.i)),VJ!==b.n&&(b.n=Q(A1,"attributes",VJ,b.n)),bY!==b.s&&(b.s=Q(H1,"fg",bY,b.s)),TY!==b.h&&(b.h=Q(v1,"fg",TY,b.h)),KJ!==b.r&&(b.r=Q(v1,"attributes",KJ,b.r)),b},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),_0})()}}),null),M(F1,I(z0,{get when(){return Q0().length===0},get children(){var a=V("box"),r=V("text");return W(a,r),Q(a,"paddingTop",1),Q(a,"paddingLeft",1),M(r,(()=>{var O=Y1(()=>!!(z()&&q().trim().length>0));return()=>O()?"No matching tasks \u2014 esc to clear.":Y1(()=>!!X0())()?X()==="active"?"No active tasks for this project.":"No archived tasks for this project.":X()==="active"?"No active tasks \u2014 press n or [+] to create one.":"No archived tasks."})()),x((O)=>Q(r,"fg",Y.textMuted,O)),a}}),null),M(F1,I(z0,{get when(){return Y1(()=>!!(X0()&&Q0().length>0&&!G0()))()&&!(z()&&q().trim().length>0)},get children(){var a=V("box"),r=V("text");return W(a,r),Q(a,"paddingTop",1),Q(a,"paddingLeft",1),Q(r,"wrapMode","none"),M(r,()=>X()==="active"?"No active tasks for this project.":"No archived tasks for this project."),x((O)=>{var L0=Y.textMuted,f0=y1.DIM;return L0!==O.e&&(O.e=Q(r,"fg",L0,O.e)),f0!==O.t&&(O.t=Q(r,"attributes",f0,O.t)),O},{e:void 0,t:void 0}),a}}),null),M(F1,I(z0,{get when(){return Y1(()=>X()==="archived")()&&Q0().length>0},get children(){var a=V("box"),r=V("text");return W(a,r),Q(a,"paddingTop",1),Q(a,"paddingLeft",1),W(r,T("a to unarchive")),Q(r,"wrapMode","none"),x((O)=>{var L0=Y.textMuted,f0=y1.DIM;return L0!==O.e&&(O.e=Q(r,"fg",L0,O.e)),f0!==O.t&&(O.t=Q(r,"attributes",f0,O.t)),O},{e:void 0,t:void 0}),a}}),null),M(d,I(z0,{get when(){return J.zenActive?.()},get children(){var a=V("box"),r=V("text");return W(a,r),Q(a,"flexShrink",0),Q(a,"paddingLeft",1),Q(a,"paddingRight",1),Q(a,"paddingTop",1),W(r,T("\u262F ZEN")),Q(r,"wrapMode","none"),x((O)=>{var L0=Y.accent,f0=y1.BOLD;return L0!==O.e&&(O.e=Q(r,"fg",L0,O.e)),f0!==O.t&&(O.t=Q(r,"attributes",f0,O.t)),O},{e:void 0,t:void 0}),a}}),null),M(d,I(z0,{get when(){return q0()},children:(a)=>{let r=U0(()=>{let D0=a().task,E0=[];if(E0.push({text:D0.kind==="main"?KY(D0.repo):D0.title,bold:!0}),D0.branch.length>0)E0.push({text:`\u2387 ${D0.branch}`});if(D0.worktreePath.length>0)E0.push({text:D0.worktreePath,dim:!0});return E0}),O=72,L0=U0(()=>Math.min(68,Math.max(...r().map((D0)=>yk(D0.text))))),f0=U0(()=>L0()+4),n0=U0(()=>r().length+2),M0=U0(()=>Math.max(0,Math.min(a().x+2,e().width-f0()-1))),m0=U0(()=>Math.max(0,Math.min(a().y+1,e().height-n0()-1)));return(()=>{var D0=V("box");return Q(D0,"position","absolute"),Q(D0,"zIndex",2600),Q(D0,"flexDirection","column"),Q(D0,"border",!0),Q(D0,"paddingLeft",1),Q(D0,"paddingRight",1),M(D0,I(X1,{get each(){return r()},children:(E0)=>(()=>{var z1=V("text");return Q(z1,"wrapMode","none"),M(z1,(()=>{var p0=Y1(()=>!!E0.dim);return()=>p0()?Sk(E0.text,L0()):LW(E0.text,L0())})()),x((p0)=>{var _0=E0.dim?Y.textMuted:Y.text,Z1=E0.bold?y1.BOLD:E0.dim?y1.DIM:void 0;return _0!==p0.e&&(p0.e=Q(z1,"fg",_0,p0.e)),Z1!==p0.t&&(p0.t=Q(z1,"attributes",Z1,p0.t)),p0},{e:void 0,t:void 0}),z1})()})),x((E0)=>{var z1=M0(),p0=m0(),_0=f0(),Z1=Y.focusAccent,C1=Y.backgroundElement;return z1!==E0.e&&(E0.e=Q(D0,"left",z1,E0.e)),p0!==E0.t&&(E0.t=Q(D0,"top",p0,E0.t)),_0!==E0.a&&(E0.a=Q(D0,"width",_0,E0.a)),Z1!==E0.o&&(E0.o=Q(D0,"borderColor",Z1,E0.o)),C1!==E0.i&&(E0.i=Q(D0,"backgroundColor",C1,E0.i)),E0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),D0})()}}),null),x((a)=>{var r=Z()?Y.focusAccent:Y.textMuted,O=y1.BOLD,L0=Y.textMuted,f0=y1.DIM;return r!==a.e&&(a.e=Q(d0,"fg",r,a.e)),O!==a.t&&(a.t=Q(d0,"attributes",O,a.t)),L0!==a.a&&(a.a=Q(e0,"fg",L0,a.a)),f0!==a.o&&(a.o=Q(e0,"attributes",f0,a.o)),a},{e:void 0,t:void 0,a:void 0,o:void 0}),d})()}var cU=32,uz,Ck=2000,gk=16;var iU=S(()=>{w();w();w();w();w();w();w();w();w();w();B1();u1();u1();TU();Oq();uU();PU();fG();mU();uz=[{view:"active",label:"Workspace"},{view:"archived",label:"Archives"}]});var _U={};q1(_U,{startTasksPane:()=>Tk,legendRowCap:()=>pU,legendCap:()=>aU});import{existsSync as lU}from"fs";import{stat as kk}from"fs/promises";import{TextAttributes as yq}from"@opentui/core";function RW(J){return!!J&&pz(J)}function $U(J){let Y=J instanceof Error?J.message:String(J);if(/not a git repository/i.test(Y))return"This project isn't a git repo yet \u2014 a task needs a git branch. Run `git init` (+ a first commit) in the project, then open the task. Non-git support is coming.";return`Couldn't create the worktree: ${Y}`}function Nk(J){let{theme:Y}=v0(),Z=h1(),X=FG(),G=Uq(),[z,f]=p(J.tasks().some((v)=>v.id===J.initialTaskId)?J.initialTaskId:J.tasks()[0]?.id??null);function q(v){G.notify({kind:"error",taskId:z()??"",tabId:"",title:v})}function B(v){G.notify({kind:"done",taskId:z()??"",tabId:"",title:v})}let[j,K]=p(!1),[H,U]=p(X.get("activeSortMode")==="recent"?"recent":"default"),L=X.get("tasksPane.projectFilter"),[F,D]=p(typeof L==="string"&&L.length>0?L:null),A=(v)=>{D(v),X.set("tasksPane.projectFilter",v)},[R,l]=p(null),[g,k]=p(!1);{let v=process.env.TMUX_PANE;if(v){let H0=()=>{c0(["show-options","-wqv","-t",v,uX]).then(({code:R0,stdout:b0})=>{k(R0===0&&b0.trim().length>0)})};H0();let o=setInterval(H0,1000);P1(()=>clearInterval(o))}}let C=IY(),N=!J.initialTaskId;s0(()=>{let v=J.orch?.activeTaskSignal()();if(!v)return;if(!N){if(v!==J.initialTaskId)return;N=!0}f(v)}),s0(LJ(()=>J.orch?.uiPrefsSignal()(),(v)=>{if(v&&v.sortMode!==l1(H))U(v.sortMode);if(v&&v.projectFilter!==l1(F))D(v.projectFilter)})),s0(()=>{let v=J.orch?.updateSignal()();if(v)l(v)});let _={orch:J.orch,tasks:()=>J.tasks(),confirm:async(v)=>await sY.show(Z,v.title,v.body,v.cancelLabel,v.confirmLabel)===!0,promptText:(v,H0)=>UY.show(Z,v,H0),logger:console,logPrefix:"[kobe tasks]",notifyError:q,notifyInfo:B,reload:()=>J.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(v,H0)=>{if(z()!==v)return;let o=J.tasks();f(H0?.id??(o.find((R0)=>!R0.archived)??o[0])?.id??null)},promptNewTask:(v,H0,o)=>Bq.show(Z,v,H0,o),cursorRepo:()=>{let v=J.tasks();return(v.find((H0)=>H0.id===z())??v[0])?.repo},lastVendor:()=>g1("lastSelectedVendor"),rememberVendor:(v)=>i1("lastSelectedVendor",v),openCreateSurface:async(v)=>{if(fX(X.get($Y,QX))!=="chattab")return!1;let o=await AJ();if(!o)return!1;return await If(o,v),!0},selectTask:(v)=>f(v),enterTask:(v)=>q0(v)};async function X0(){await RU(_)}async function s(){if(fX(X.get($Y,QX))==="chattab"){let o=await AJ();if(o){await Sf(o);return}}if(!(await AX.show(Z,X,J.orch??void 0)).visualPrefsChanged)return;if(!X.flush())return;try{let o=await AJ();if(o)await GG(o)}catch(o){console.error("[kobe tasks] failed to refresh workspace panes:",o)}}async function Y0(){let v=await AJ();if(v){await kf(v);return}AG.show(Z)}async function u(){if(!R()?.hasUpdate){B(`Already on the latest version (v${i0})`);return}let H0=await AJ();if(!H0)return;await Nf(H0)}async function Q0(v){await DU(_,v)}async function t(v){await MU(_,v)}async function j0(v){await FU(_,v)}async function S0(v){await OU(_,v)}async function $(v){await AU(_,v)}async function P(v){let o=J.tasks().find((b0)=>b0.id===v)?.worktreePath;if(!o||!lU(o)){if(!J.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),q("No daemon running \u2014 can't create the worktree");return}try{o=await J.orch.ensureWorktree(v)}catch(b0){console.error("[kobe tasks] task.ensureWorktree failed:",b0),q($U(b0));return}await J.reload()}if(!o||!lU(o))return;let R0=gU();if(!R0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),q("No editor found \u2014 set KOBE_OPEN_EDITOR (e.g. 'code', 'cursor', 'nvim')");return}if(!yU(o,R0))console.error(`[kobe tasks] failed to open worktree with ${R0.label}`),q(`Couldn't open worktree with ${R0.label}`)}async function G0(){if(!process.env.TMUX_PANE)return;let v=await AJ();if(!v)return;let H0=await cX(v);if(!H0)return;await u0(["select-pane","-t",H0])}async function Z0(v,H0){let o=J.tasks().find((R0)=>R0.id===v);if(!o||o.kind==="main"||!J.orch)return;try{await J.orch.moveTask(v,H0)}catch(R0){console.error("[kobe tasks] task.move failed:",R0),q(`Couldn't move task: ${R0 instanceof Error?R0.message:String(R0)}`);return}f(v),await J.reload()}let[K0,h]=p(X.get("tasksPane.keysCollapsed",!1)===!0),y=(v)=>{h(v),X.set("tasksPane.keysCollapsed",v)};s0(LJ(()=>J.orch?.uiPrefsSignal()(),(v)=>{if(v&&v.keysCollapsed!==l1(K0))h(v.keysCollapsed)}));let[e,V0]=p(!1);L1(()=>({enabled:Z.stack.length===0&&!e(),bindings:TZ({"help.open":()=>void Y0(),"task.new":()=>void X0(),"settings.open.sidebar":()=>void s(),"tasks.update":()=>void u(),"tasks.openWorktree":()=>{let v=z();if(v)P(v)},"tasks.renameBranch":()=>{let v=z();if(v)S0(v)},"tasks.cycleEngine":()=>{let v=z();if(v)$(v)},"tasks.toggleKeys":()=>y(!K0()),"tasks.focusEngine":()=>void G0().catch((v)=>console.error("[kobe tasks] focus engine pane failed:",v))})}));async function q0(v){let H0=K1(v),o=J.tasks().find((J0)=>J0.id===v),R0=await AJ();if(R0&&R0!==H0)await zz(R0);if(await f1(H0)){let J0=await xQ(H0,"@kobe_worktree")||o?.worktreePath||"";if(RW(J0)){let F0=o?.repo?aY(o.repo,J0,{kind:"repo-init"}):void 0;await RZ({name:H0,cwd:J0,command:RJ(o?.vendor),taskId:v,vendor:o?.vendor,repo:o?.repo,launchInit:F0})}await xf(H0),await u0(["switch-client","-t",`=${H0}`]),J.orch?.setActiveTask(v).catch(()=>{});return}let w0=o?.worktreePath;if(!RW(w0)){if(!J.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),q("No daemon running \u2014 can't open this task");return}try{w0=await J.orch.ensureWorktree(v)}catch(J0){console.error("[kobe tasks] task.ensureWorktree failed:",J0),q($U(J0));return}await J.reload()}if(!RW(w0))return;let N0=o?.repo?aY(o.repo,w0,{kind:"repo-init"}):void 0;if(!await RZ({name:H0,cwd:w0,command:RJ(o?.vendor),taskId:v,vendor:o?.vendor,repo:o?.repo,launchInit:N0})){console.error(`[kobe tasks] failed to start session ${H0}`),q("Couldn't start this task's session");return}await xf(H0),await u0(["switch-client","-t",`=${H0}`]),J.orch?.setActiveTask(v).catch(()=>{})}let A0=U0(()=>{let v=R();if(v?.hasUpdate)return{label:`v${v.latest} \u2191`,emphasize:!0};return{label:`v${i0}`,emphasize:!1}}),I0=()=>J.orch?.daemonStaleSignal()()??!1,k0=()=>J.orch?.daemonVersionSignal()()??null,a0=U0(()=>J.tasks().find((v)=>v.id===z())?.kind==="main");return(()=>{var v=V("box"),H0=V("box");return W(v,H0),Q(v,"flexDirection","column"),Q(v,"flexGrow",1),M(v,I(KU,{stale:I0,daemonVersion:k0,clientVersion:i0,width:()=>C().width}),H0),Q(H0,"flexGrow",1),Q(H0,"flexShrink",1),M(H0,I(nU,{get tasks(){return J.tasks},selectedId:z,onSelect:f,onActivate:(o)=>void q0(o),activateOnClick:!0,headerStatus:A0,onHeaderStatusClick:()=>void u(),onAddTask:()=>void X0(),zenActive:g,width:()=>C().width,get engineState(){return Y1(()=>!!J.orch)()?J.orch.engineStateSignal():void 0},get taskJobs(){return Y1(()=>!!J.orch)()?J.orch.taskJobsSignal():void 0},get worktreeChanges(){return J.orch?()=>{let o=J.orch;if(!o||o.connectionStateSignal()()!=="online")return null;return o.worktreeChangesSignal()()}:void 0},onRenameRequest:(o)=>void j0(o),onDeleteRequest:(o)=>void t(o),onArchiveRequest:(o)=>void Q0(o),onLocalMergeRequest:(o)=>{let R0=J.tasks().find((b0)=>b0.id===o);if(!R0||R0.kind==="main")return;f(o),K((b0)=>!b0)},moveMode:j,onMoveRequest:(o,R0)=>void Z0(o,R0),onMoveModeExit:()=>K(!1),sortMode:H,projectFilter:F,onProjectFilterChange:A,onSortModeToggle:()=>{let o=H()==="default"?"recent":"default";U(o),X.set("activeSortMode",o)},focused:()=>Z.stack.length===0,onSearchActiveChange:V0})),M(v,I(bk,{moveMode:j,selectedIsMain:a0,collapsed:K0,onToggleCollapsed:()=>y(!K0())}),null),x((o)=>Q(v,"backgroundColor",Y.background,o)),v})()}function aU(J){let Y=rH(J);if(!Y)return null;let Z=Y.hint?.keys??Y.keys[0];return Z&&Z.length>0?Z:null}function pU(J){let Y=J.map(aU).filter((Z)=>Z!==null);return Y.length>0?Y.join("/"):null}function bk(J){let{theme:Y}=v0(),[Z,X]=p("Prefix");s1(()=>{c0(["show-options","-g","prefix"]).then(({code:U,stdout:L})=>{if(U!==0)return;let F=Rq(L);if(F)X(F)})});let G=()=>{_H();let U=Hf(),L=U.binds,F=[],D=U.focus.filter((R)=>R!==null).map((R)=>R.chord);if(D.length===4&&D.every((R,l)=>R===MZ[l]))F.push({k:"ctrl+hjkl",label:"move panes"});else if(D.length>0)F.push({k:D[0],label:"move panes"});let A=(R,l)=>{let g=l.map((k)=>L[k]?.chord).filter((k)=>!!k);if(g.length>0)F.push({k:`prefix ${g.join("/")}`,label:R})};if(L["tmux.detach"])F.push({k:L["tmux.detach"].chord,label:"tasks\u2192detach"});return A("splits",["tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"]),A("panes",["tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle"]),F},z=()=>{_H();let U=[{ids:["help.open"],label:"full help"},{ids:["task.new"],label:"new task"},{ids:["settings.open.sidebar"],label:"settings"},{ids:["sidebar.select"],label:"open"},{ids:["tasks.focusEngine"],label:"focus engine"},{ids:["tasks.openWorktree"],label:"open wt"},{ids:["sidebar.delete"],label:"delete"},{ids:["sidebar.view"],label:"views"},{ids:["sidebar.projectFilter"],label:"project"}],L=[];for(let F of U){let D=pU(F.ids);if(D===null)continue;L.push({k:D,label:F.label,dimWhenMain:F.dimWhenMain})}return L.push(...G()),L},f=[{k:"j/k",label:"reorder"},{k:"enter/esc",label:"done"}],q=()=>J.moveMode?.()?f:z(),B=18,j=()=>Math.min(B,Math.max(...q().map((U)=>U.label.length))),K=(U)=>U.length<=j()?U:`${U.slice(0,Math.max(0,j()-1))}\u2026`,H=()=>(J.collapsed?.()??!1)&&!(J.moveMode?.()??!1);return(()=>{var U=V("box"),L=V("text");return W(U,L),Q(U,"flexShrink",0),Q(U,"flexDirection","column"),Q(U,"paddingLeft",1),Q(U,"paddingRight",1),Q(U,"paddingTop",1),Q(U,"paddingBottom",1),Q(U,"gap",0),Q(L,"wrapMode","none"),Q(L,"onMouseUp",()=>J.onToggleCollapsed?.()),M(L,()=>H()?"\u2500\u2500 keys ?\u25B8 \u2500\u2500":"\u2500\u2500 keys ?\u25BE \u2500\u2500"),M(U,I(z0,{get when(){return!H()},get children(){return I(X1,{get each(){return q()},children:(F)=>{let D=()=>F.dimWhenMain===!0&&(J.selectedIsMain?.()??!1);return(()=>{var A=V("box"),R=V("box"),l=V("text"),g=T("["),k=T("]"),C=V("box"),N=V("text");return W(A,R),W(A,C),Q(A,"flexDirection","row"),Q(A,"gap",1),Q(A,"justifyContent","space-between"),W(R,l),Q(R,"width",10),Q(R,"flexShrink",0),W(l,g),W(l,k),Q(l,"wrapMode","none"),M(l,()=>OG(F.k,Z()),k),W(C,N),Q(C,"flexShrink",0),Q(N,"wrapMode","none"),M(N,()=>K(F.label)),x((_)=>{var X0=D()?Y.textMuted:Y.accent,s=D()?yq.DIM:yq.BOLD,Y0=j(),u=Y.textMuted,Q0=D()?yq.DIM:void 0;return X0!==_.e&&(_.e=Q(l,"fg",X0,_.e)),s!==_.t&&(_.t=Q(l,"attributes",s,_.t)),Y0!==_.a&&(_.a=Q(C,"width",Y0,_.a)),u!==_.o&&(_.o=Q(N,"fg",u,_.o)),Q0!==_.i&&(_.i=Q(N,"attributes",Q0,_.i)),_},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),A})()}})}}),null),x((F)=>{var D=Y.textMuted,A=yq.DIM;return D!==F.e&&(F.e=Q(L,"fg",D,F.e)),A!==F.t&&(F.t=Q(L,"attributes",A,F.t)),F},{e:void 0,t:void 0}),U})()}async function Tk(J={}){await WJ({logContext:"tasks",providers:{notifications:!0},setup:()=>Ek(J)})}async function Ek(J){let Y=new yX({homeDir:DY()});await Y.load();let[Z,X]=p(Y.list()),G=null;try{let j=await lJ();if(j){let K=new QJ(j);await K.init(),G=K}else vY("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(j){zZ("tasks-boot",j),vY("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let z=()=>G&&G.connectionStateSignal()()==="online"?G.tasksSignal()():Z(),f=async()=>{await Y.load(),X(Y.list())},q="",B=setInterval(()=>{if(G&&G.connectionStateSignal()()==="online")return;(async()=>{let j="missing";try{let K=await kk(Y.filePath);j=`${K.mtimeMs}:${K.size}`}catch{}if(j===q)return;q=j,await f()})().catch(()=>{})},Ik);return{root:()=>[I(Nk,{tasks:z,get initialTaskId(){return J.initialTaskId},orch:G,reload:f}),I(WU,{})],onDestroy:()=>{if(B)clearInterval(B);G?.dispose()}}}var Ik=1500;var rU=S(()=>{w();w();w();w();w();w();w();w();N1();XY();w();$Z();CJ();B1();IZ();bJ();n1();rJ();IG();tX();O1();Wf();jJ();zW();kz();QW();VW();VU();UU();MG();Iz();Lq();u1();GW();uZ();gJ();CU();SU();iU();t1();uJ();fW()});var oU={};q1(oU,{startSettingsHost:()=>xk});function uk(J){let Y=FG(),Z=h1(),{theme:X}=v0(),G=!1,z=!1;async function f(){if(z)return;z=!0;try{if(Y.flush()&&G){let B=await AJ();if(B)await GG(B)}}catch(q){console.error("[kobe settings] failed to refresh workspace panes:",q)}finally{process.exit(0)}}return L1(()=>({enabled:Z.stack.length===0,bindings:[{key:"escape",cmd:f},{key:"q",cmd:f},{key:"ctrl+c",cmd:f}]})),(()=>{var q=V("scrollbox");return Q(q,"flexGrow",1),Q(q,"paddingTop",1),Q(q,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),M(q,I(AX,{kv:Y,get orchestrator(){return J.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{G=!0},onClose:f})),x((B)=>Q(q,"backgroundColor",X.background,B)),q})()}async function xk(){await WJ({setup:async()=>{let J=null;try{let Y=await lJ();if(Y){let Z=new QJ(Y);await Z.init(),J=Z}else console.error("[kobe settings] no daemon running; Restart backend disabled")}catch(Y){console.error("[kobe settings] daemon unavailable; Restart backend disabled:",Y)}return{root:()=>I(uk,{orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var sU=S(()=>{w();w();w();w();w();w();CJ();IZ();VW();Iz();u1();uZ();gJ();t1();uJ()});var tU={};q1(tU,{startHelpHost:()=>hk});function wk(){let J=h1(),{theme:Y}=v0();function Z(){process.exit(0)}return L1(()=>({enabled:J.stack.length===0,bindings:[{key:"escape",cmd:Z},{key:"q",cmd:Z},{key:"f1",cmd:Z},{key:"ctrl+c",cmd:Z}]})),(()=>{var X=V("box");return Q(X,"flexGrow",1),Q(X,"paddingTop",1),M(X,I(AG,{onClose:Z})),x((G)=>Q(X,"backgroundColor",Y.background,G)),X})()}async function hk(){await WJ({providers:{kv:!1,focus:!1},setup:()=>({root:()=>I(wk,{})})})}var eU=S(()=>{w();w();w();w();w();zW();u1();uZ();gJ();uJ()});var JL={};q1(JL,{startUpdateHost:()=>ik});import{spawn as Pk,spawnSync as vk}from"child_process";import{TextAttributes as CG}from"@opentui/core";function mk(J){if(!J)return!1;let Y=process.platform,[Z,X]=Y==="darwin"?["open",[J]]:Y==="win32"?["cmd",["/c","start","",J]]:["xdg-open",[J]];try{return Pk(Z,X,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function ck(J){return J.replace(/\r\n/g,`
|
|
211
|
+
${Nj()}
|
|
212
|
+
`),process.exit(2);if(J==="status"){let Q=gZ(),[H,B]=Rj(),V=!Q.installed?"\u2717 not installed":Q.stale?`\u26A0 out of date (installed ${Q.installedVersion===null?"unstamped":`v${Q.installedVersion}`}, this kobe wants v${Q.currentVersion})`:`\u2713 installed (v${Q.installedVersion})`;process.stdout.write([`kobe skill: ${V}`,` looked in: ${H}`,` ${B}`,Q.installed&&!Q.stale?"":" \u2192 run `kobe skill install` to install / refresh",""].join(`
|
|
213
|
+
`));return}if(J==="command"){process.stdout.write(`${JQ({agent:DU(Y)})}
|
|
214
|
+
`);return}let z=DU(Y),G=gj({agent:z});process.stdout.write(`kobe skill: running \`npx ${G.join(" ")}\`
|
|
215
|
+
`);let q=await Bun.spawn(["npx",...G],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(q!==0)process.stderr.write(`
|
|
216
|
+
kobe skill install failed (npx exited ${q}). Is \`npx\` on PATH and are you online?
|
|
217
|
+
You can run it yourself: ${JQ({agent:z})}
|
|
218
|
+
`),process.exit(q||1);process.stdout.write(`kobe skill: installed.
|
|
219
|
+
`)}var Vk;var MU=C(()=>{YQ();Vk=["install","status","command"]});var bj={};jf(bj,{runHookSubcommand:()=>gk,readTextWithTimeout:()=>gU,parseWorktreeAddPath:()=>CU,ensureGlobalKobeHooks:()=>kk});import{homedir as Uk}from"os";import{join as OU,resolve as AU}from"path";async function gU(f,J=Dk){let Y;try{return await Promise.race([f(),new Promise((z)=>{Y=setTimeout(()=>z(""),J)})])}finally{if(Y!==void 0)clearTimeout(Y)}}async function RU(){try{let f=await gU(()=>Bun.stdin.text());if(!f.trim())return{};let J=JSON.parse(f);return J&&typeof J==="object"&&!Array.isArray(J)?J:{}}catch{return{}}}function Lk(f,J){for(let Y=0;Y<f.length;Y++){if(f[Y]===J)return f[Y+1];if(f[Y].startsWith(`${J}=`))return f[Y].slice(J.length+1)}return}function Fk(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}function Ok(f){let J=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g,z;while((z=Y.exec(f))!==null)J.push(z[1]??z[2]??z[3]??"");return J}function CU(f){let J=Ok(f),Y=new Set(["-b","-B","--reason"]);for(let z=0;z+1<J.length;z++){if(J[z]!=="worktree"||J[z+1]!=="add")continue;let G=z+2;while(G<J.length){let Z=J[G];if(Z==="&&"||Z==="||"||Z===";"||Z==="|"||Z===">"||Z===">>")break;if(Z.startsWith("-")){G+=Y.has(Z)?2:1;continue}return Z}}return}async function Ak(){let f=await RU(),J=Fk(f.tool_input)?f.tool_input:{},Y=typeof J.command==="string"?J.command:"";if(!Y.includes("worktree"))return;let z=CU(Y);if(!z)return;let G=typeof f.cwd==="string"&&f.cwd?f.cwd:process.cwd(),Z=AU(G,z),q=await p1();if(!q)return;try{await q.request("worktree.reconcile",{cwd:G,worktreePath:Z})}finally{q.close()}}async function gk(f){let[J,...Y]=f;if(J==="setup"){await Nk(Y);return}if(J===Mk){try{await Ak()}catch{}return}try{if(!J||!RX(J))return;let z=await RU(),G=Lk(Y,"--task-id"),Z=typeof z.cwd==="string"&&z.cwd?z.cwd:process.cwd(),q;for(let H of kU())if(q=H.activityDetailFromPayload(J,z),q)break;let Q=await p1();if(!Q)return;try{await Q.request("engine.reportEvent",{...G?{taskId:G}:{cwd:Z},kind:J,...q?{detail:q}:{}})}finally{Q.close()}}catch{}}function Rk(){return mf.map((f)=>lH(f)).filter((f)=>f.supportsWorktreeSync())}function kU(){return mf.map((f)=>lH(f)).filter((f)=>f.supportsHooks())}function yj(){return OU(Uk(),".claude","settings.json")}function Ck(f){if(!f||f==="off")return;if(f==="global")return yj();if(f.startsWith("repo:"))return OU(AU(f.slice(5)),".claude","settings.json");return f}async function kk(){try{let f=yj();for(let J of kU())await J.installActivityHooks(f),await J.installWorktreeWatchHook(f);await NU()}catch{}}async function NU(){let f=Rk();if(f.length===0)return;let J=kf(FU),Y=new Set([yj()]),z=Ck(J);if(z)Y.add(z);for(let G of f)for(let Z of Y)await G.removeWorktreeSyncHook(Z);if(J!=="off")af(FU,"off")}async function Nk(f){await NU(),process.stdout.write(["kobe hook setup is deprecated and now a no-op (cleanup only).","","The old external-worktree sync used a global WorktreeCreate hook, which is","a VCS provider hook \u2014 its presence broke `claude --worktree` / EnterWorktree","in every repo. Any hook kobe previously installed has been removed.","","Sync is now automatic: a `claude --worktree` (or any session) started in a","worktree under a repo kobe already tracks is adopted as a task on launch.","To adopt existing worktrees on demand, use the New Task dialog or `kobe adopt`.",""].join(`
|
|
220
|
+
`))}var Dk=500,Mk="worktree-created",FU="externalWorktreeSync";var Sj=C(()=>{y1();aH();CX();gf();K1()});function bU(f){var J;if(f>=55296&&f<=57343||f>1114111)return 65533;return(J=yk.get(f))!==null&&J!==void 0?J:f}var Ij,yk,yU;var SU=C(()=>{yk=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),yU=(Ij=String.fromCodePoint)!==null&&Ij!==void 0?Ij:(f)=>{let J="";if(f>65535)f-=65536,J+=String.fromCharCode(f>>>10&1023|55296),f=56320|f&1023;return J+=String.fromCharCode(f),J}});function IU(f){let J=typeof atob==="function"?atob(f):typeof Buffer.from==="function"?Buffer.from(f,"base64").toString("binary"):new Buffer(f,"base64").toString("binary"),Y=J.length&-2,z=new Uint16Array(Y/2);for(let G=0,Z=0;G<Y;G+=2){let q=J.charCodeAt(G),Q=J.charCodeAt(G+1);z[Z++]=q|Q<<8}return z}var TU;var uU=C(()=>{TU=IU("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWlsN2E6ZHIAAOA12CjdciJlZW4AOGFjAHkARWRjAHkAXGRwAGYAAOA12FzdYwByAADgNdjA3IALQUJFSGFiY2RlZmdoamxtbm9wcnN0dXYAXhxtHHEcdRx5HN8cBx0dHTwd3B3tHfEdAR4EHh0eLB5FHrwewx7hHgkfPR9LH4ABYXJ0AGQcZxxpHHIA8gBvB/IAxQLhIWlsAKAbKeEhcnIAoA4pZ6BmIgCgiyphAHIAAKBiKWMJjRwAAJAcAACVHAAAAAAAAAAAAACZHJwcAACmHKgcrRwAANIc9SF0ZTph7SJwdHl2AKC0KXIAYQDuAFoG4iFkYbtjZwAAoegnZGyhHKMcAKCRKeUAiwYAoIUqdQBvADuAqwCrQHIAgKOQIWJmaGxwc3QAuhy/HMIcxBzHHMoczhxmoOQhcwAAoB8pcwAAoB0p6wCyGnAAAKCrIWwAAKA5KWkAbQAAoHMpbAAAoKIhAKGrKmFl1hzaHGkAbAAAoBkpc6CtKgDgrSoA/oABYWJyAOUc6RztHHIAcgAAoAwpcgBrAACgcicAAWFr8Rz4HGMAAAFla/Yc9xx7YFtgAAFlc/wc/hwAoIspbAAAAWR1Ax0FHQCgjykAoI0pAAJhZXV5Dh0RHRodHB3yIW9uPmEAAWRpFR0YHWkAbAA8YewAowbiAPccO2QAAmNxcnMkHScdLB05HWEAAKA2KXUAbwDyoBwgqhEAAWR1MB00HeghYXIAoGcpcyJoYXIAAKBLKWgAAKCyIQCiZCJmZ3FzRB1FB5Qdnh10AIACYWhscnQATh1WHWUdbB2NHXIicm93AHSgkCFhAOkAzxxhI3Jwb29uAAABZHVeHWId7yF3bgCgvSFwAACgvCHlJGZ0YXJyb3dzAKDHIWkiZ2h0AIABYWhzAHUdex2DHXIicm93APOglCGdBmEAcgBwAG8AbwBuAPMAzgtxAHUAaQBnAGEAcgByAG8A9wBlGugkcmVldGltZXMAoMsi8aFkIk0HAACaHWwAYQBuAPQAXgcAon0qY2Rnc6YdqR2xHbcdYwAAoKgqbwB0AG+gfypyoIEqAKCDKmXg2iIA/nMAAKCTKoACYWRlZ3MAwB3GHcod1h3ZHXAAcAByAG8A+ACmHG8AdAAAoNYicQAAAWdxzx3SHXQA8gBGB2cAdADyAHQcdADyAFMHaQDtAGMHgAFpbHIA4h3mHeod8yFodACgfClvAG8A8gDKBgDgNdgp3UWgdiIAoJEqYQH1Hf4dcgAAAWR1YB35HWygvCEAoGopbABrAACghCVjAHkAWWQAomoiYWNodAweDx4VHhkecgDyAGsdbwByAG4AZQDyAGAW4SFyZACgaylyAGkAAKD6JQABaW8hHiQe5CFvdEBh9SFzdGGgsCPjIWhlAKCwIwACRWFlczMeNR48HkEeAKBoInAAcKCJKvIhb3gAoIkqcaCHKvGghyo0HmkAbQAAoOYiAARhYm5vcHR3elIeXB5fHoUelh6mHqsetB4AAW5yVh5ZHmcAAKDsJ3IAAKD9IXIA6wCwBmcAgAFsbXIAZh52Hnse5SFmdAABYXKIB2weaQBnAGgAdABhAHIAcgBvAPcAkwfhInBzdG8AoPwnaQBnAGgAdABhAHIAcgBvAPcAmgdwI2Fycm93AAABbHKNHpEeZQBmAPQAxhxpImdodAAAoKwhgAFhZmwAnB6fHqIecgAAoIUpAOA12F3ddQBzAACgLSppIm1lcwAAoDQqYQGvHrMecwB0AACgFyLhAIoOZaHKJbkeRhLuIWdlAKDKJWEAcgBsoCgAdAAAoJMpgAJhY2htdADMHs8e1R7bHt0ecgDyAJ0GbwByAG4AZQDyANYWYQByAGSgyyEAoG0pAKAOIHIAaQAAoL8iAANhY2hpcXTrHu8e1QfzHv0eBh/xIXVvAKA5IHIAAOA12MHcbQDloXIi+h4AAPweAKCNKgCgjyoAAWJ19xwBH28AcqAYIACgGiDyIW9rQmEAhDwAO2NkaGlscXJCBhcfxh0gHyQfKB8sHzEfAAFjaRsfHR8AoKYqcgAAoHkqcgBlAOUAkx3tIWVzAKDJIuEhcnIAoHYpdSJlc3QAAKB7KgABUGk1HzkfYQByAACglillocMlAgdfEnIAAAFkdUIfRx9zImhhcgAAoEop6CFhcgCgZikAAWVuTx9WH3IjdG5lcXEAAOBoIgD+xQBUHwAHRGFjZGVmaGlsbm9wc3VuH3Ifoh+rH68ftx+7H74f5h/uH/MfBwj/HwsgxCFvdACgOiIAAmNscHJ5H30fiR+eH3IAO4CvAK9AAAFldIEfgx8AoEImZaAgJ3MAZQAAoCAnc6CmIXQAbwCAoaYhZGx1AJQfmB+cH28AdwDuAHkDZQBmAPQA6gbwAOkO6yFlcgCgriUAAW95ph+qH+0hbWEAoCkqPGThIXNoAKAUIOElc3VyZWRhbmdsZQCgISJyAADgNdgq3W8AAKAnIYABY2RuAMQfyR/bH3IAbwA7gLUAtUBhoiMi0B8AANMf1x9zAPQAKxFpAHIAAKDwKm8AdAA7gLcAt0B1AHMA4qESIh4TAADjH3WgOCIAoCoqYwHqH+0fcAAAoNsq8gB+GnAAbAB1APMACAgAAWRw9x/7H+UhbHMAoKciZgAA4DXYXt0AAWN0AyAHIHIAAOA12MLc8CFvcwCgPiJsobwDECAVIPQiaW1hcACguCJhAPAAEyAADEdMUlZhYmNkZWZnaGlqbG1vcHJzdHV2dzwgRyBmIG0geSCqILgg2iDeIBEhFSEyIUMhTSFQIZwhnyHSIQAiIyKLIrEivyIUIwABZ3RAIEMgAODZIjgD9uBrItIgBwmAAWVsdABNIF8gYiBmAHQAAAFhclMgWCByInJvdwAAoM0h6SRnaHRhcnJvdwCgziEA4NgiOAP24Goi0iBfCekkZ2h0YXJyb3cAoM8hAAFEZHEgdSDhIXNoAKCvIuEhc2gAoK4igAJiY25wdACCIIYgiSCNIKIgbABhAACgByL1IXRlRGFnAADgICLSIACiSSJFaW9wlSCYIJwgniAA4HAqOANkAADgSyI4A3MASWFyAG8A+AAyCnUAcgBhoG4mbADzoG4mmwjzAa8gAACzIHAAO4CgAKBAbQBwAOXgTiI4AyoJgAJhZW91eQDBIMogzSDWINkg8AHGIAAAyCAAoEMqbwBuAEhh5CFpbEZhbgBnAGSgRyJvAHQAAOBtKjgDcAAAoEIqPWThIXNoAKATIACjYCJBYWRxc3jpIO0g+SD+IAIhDCFyAHIAAKDXIXIAAAFocvIg9SBrAACgJClvoJch9wAGD28AdAAA4FAiOAN1AGkA9gC7CAABZWkGIQohYQByAACgKCntAN8I6SFzdPOgBCLlCHIAAOA12CvdAAJFZXN0/wgcISshLiHxoXEiIiEAABMJ8aFxIgAJAAAnIWwAYQBuAPQAEwlpAO0AGQlyoG8iAKBvIoABQWFwADghOyE/IXIA8gBeIHIAcgAAoK4hYQByAACg8ipzogsiSiEAAAAAxwtkoPwiAKD6ImMAeQBaZIADQUVhZGVzdABcIV8hYiFmIWkhkyGWIXIA8gBXIADgZiI4A3IAcgAAoJohcgAAoCUggKFwImZxcwBwIYQhjiF0AAABYXJ1IXohcgByAG8A9wBlIWkAZwBoAHQAYQByAHIAbwD3AD4h8aFwImAhAACKIWwAYQBuAPQAZwlz4H0qOAMAoG4iaQDtAG0JcqBuImkA5aDqIkUJaQDkADoKAAFwdKMhpyFmAADgNdhf3YCBrAA7aW4AriGvIcchrEBuAIChCSJFZHYAtyG6Ib8hAOD5IjgDbwB0AADg9SI4A+EB1gjEIcYhAKD3IgCg9iJpAHagDCLhAagJzyHRIQCg/iIAoP0igAFhb3IA2CHsIfEhcgCAoSYiYXN0AOAh5SHpIWwAbABlAOwAywhsAADg/SrlIADgAiI4A2wiaW50AACgFCrjoYAi9yEAAPohdQDlAJsJY+CvKjgDZaCAIvEAkwkAAkFhaXQHIgoiFyIeInIA8gBsIHIAcgAAoZshY3cRIhQiAOAzKTgDAOCdITgDZyRodGFycm93AACgmyFyAGkA5aDrIr4JgANjaGltcHF1AC8iPCJHIpwhTSJQIloigKGBImNlcgA2Iv0JOSJ1AOUABgoA4DXYw9zvIXJ0bQKdIQAAAABEImEAcgDhAOEhbQBloEEi8aBEIiYKYQDyAMsIcwB1AAABYnBWIlgi5QDUCeUA3wmAAWJjcABgInMieCKAoYQiRWVzAGci7glqIgDgxSo4A2UAdABl4IIi0iBxAPGgiCJoImMAZaCBIvEA/gmAoYUiRWVzAH8iFgqCIgDgxio4A2UAdABl4IMi0iBxAPGgiSKAIgACZ2lscpIilCKaIpwi7AAMCWwAZABlADuA8QDxQOcAWwlpI2FuZ2xlAAABbHKkIqoi5SFmdGWg6iLxAEUJaSJnaHQAZaDrIvEAvgltoL0DAKEjAGVzuCK8InIAbwAAoBYhcAAAoAcggARESGFkZ2lscnMAziLSItYi2iLeIugi7SICIw8j4SFzaACgrSLhIXJyAKAEKXAAAOBNItIg4SFzaACgrCIAAWV04iLlIgDgZSLSIADgPgDSIG4iZmluAACg3imAAUFldADzIvci+iJyAHIAAKACKQDgZCLSIHLgPADSIGkAZQAA4LQi0iAAAUF0BiMKI3IAcgAAoAMp8iFpZQDgtSLSIGkAbQAA4Dwi0iCAAUFhbgAaIx4jKiNyAHIAAKDWIXIAAAFociMjJiNrAACgIylvoJYh9wD/DuUhYXIAoCcpUxJqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVCMAAF4jaSN/I4IjjSOeI8AUAAAAAKYjwCMAANoj3yMAAO8jHiQvJD8kRCQAAWNzVyNsFHUAdABlADuA8wDzQAABaXlhI2cjcgBjoJoiO4D0APRAPmSAAmFiaW9zAHEjdCN3I3EBeiNzAOgAdhTsIWFjUWF2AACgOCrvIWxkAKC8KewhaWdTYQABY3KFI4kjaQByAACgvykA4DXYLN1vA5QjAAAAAJYjAACcI24A22JhAHYAZQA7gPIA8kAAoMEpAAFibaEjjAphAHIAAKC1KQACYWNpdKwjryO6I70jcgDyAFkUAAFpcrMjtiNyAACgvinvIXNzAKC7KW4A5QDZCgCgwCmAAWFlaQDFI8gjyyNjAHIATWFnAGEAyWOAAWNkbgDRI9Qj1iPyIW9uv2MAoLYpdQDzAHgBcABmAADgNdhg3YABYWVsAOQj5yPrI3IAAKC3KXIAcAAAoLkpdQDzAHwBAKMoImFkaW9zdvkj/CMPJBMkFiQbJHIA8gBeFIChXSplZm0AAyQJJAwkcgBvoDQhZgAAoDQhO4CqAKpAO4C6ALpA5yFvZgCgtiJyAACgVipsIm9wZQAAoFcqAKBbKoABY2xvACMkJSQrJPIACCRhAHMAaAA7gPgA+EBsAACgmCJpAGwBMyQ4JGQAZQA7gPUA9UBlAHMAYaCXInMAAKA2Km0AbAA7gPYA9kDiIWFyAKA9I+EKXiQAAHokAAB8JJQkAACYJKkkAAAAALUkEQsAAPAkAAAAAAQleiUAAIMlcgCAoSUiYXN0AGUkbyQBCwCBtgA7bGokayS2QGwAZQDsABgDaQJ1JAAAAAB4JG0AAKDzKgCg/Sp5AD9kcgCAAmNpbXB0AIUkiCSLJJkSjyRuAHQAJWBvAGQALmBpAGwAAKAwIOUhbmsAoDEgcgAA4DXYLd2AAWltbwCdJKAkpCR2oMYD1WNtAGEA9AD+B24AZQAAoA4m9KHAA64kAAC0JGMjaGZvcmsAAKDUItZjAAFhdbgkxCRuAAABY2u9JMIkawBooA8hAKAOIfYAaRpzAACkKwBhYmNkZW1zdNMkIRPXJNsk4STjJOck6yTjIWlyAKAjKmkAcgAAoCIqAAFvdYsW3yQAoCUqAKByKm4AO4CxALFAaQBtAACgJip3AG8AAKAnKoABaXB1APUk+iT+JO4idGludACgFSpmAADgNdhh3W4AZAA7gKMAo0CApHoiRWFjZWlub3N1ABMlFSUYJRslTCVRJVklSSV1JQCgsypwAACgtyp1AOUAPwtjoK8qgKJ6ImFjZW5zACclLSU0JTYlSSVwAHAAcgBvAPgAFyV1AHIAbAB5AGUA8QA/C/EAOAuAAWFlcwA8JUElRSXwInByb3gAoLkqcQBxAACgtSppAG0AAKDoImkA7QBEC20AZQDzoDIgIguAAUVhcwBDJVclRSXwAEAlgAFkZnAATwtfJXElgAFhbHMAZSVpJW0l7CFhcgCgLiPpIW5lAKASI/UhcmYAoBMjdKAdIu8AWQvyIWVsAKCwIgABY2l9JYElcgAA4DXYxdzIY24iY3NwAACgCCAAA2Zpb3BzdZElKxuVJZolnyWkJXIAAOA12C7dcABmAADgNdhi3XIiaW1lAACgVyBjAHIAAOA12MbcgAFhZW8AqiW6JcAldAAAAWVpryW2JXIAbgBpAG8AbgDzABkFbgB0AACgFipzAHQAZaA/APEACRj0AG0LgApBQkhhYmNkZWZoaWxtbm9wcnN0dXgA4yXyJfYl+iVpJpAmpia9JtUm5ib4JlonaCdxJ3UnnietJ7EnyCfiJ+cngAFhcnQA6SXsJe4lcgDyAJkM8gD6AuEhaWwAoBwpYQByAPIA3BVhAHIAAKBkKYADY2RlbnFydAAGJhAmEyYYJiYmKyZaJgABZXUKJg0mAOA9IjEDdABlAFVhaQDjACAN7SJwdHl2AKCzKWcAgKHpJ2RlbAAgJiImJCYAoJIpAKClKeUA9wt1AG8AO4C7ALtAcgAApZIhYWJjZmhscHN0dz0mQCZFJkcmSiZMJk4mUSZVJlgmcAAAoHUpZqDlIXMAAKAgKQCgMylzAACgHinrALka8ACVHmwAAKBFKWkAbQAAoHQpbAAAoKMhAKCdIQABYWleJmImaQBsAACgGilvAG6gNiJhAGwA8wB2C4ABYWJyAG8mciZ2JnIA8gAvEnIAawAAoHMnAAFha3omgSZjAAABZWt/JoAmfWBdYAABZXOFJocmAKCMKWwAAAFkdYwmjiYAoI4pAKCQKQACYWV1eZcmmiajJqUm8iFvbllhAAFkaZ4moSZpAGwAV2HsAA8M4gCAJkBkAAJjbHFzrSawJrUmuiZhAACgNylkImhhcgAAoGkpdQBvAPKgHSCjAWgAAKCzIYABYWNnAMMm0iaUC2wAgKEcIWlwcwDLJs4migxuAOUAoAxhAHIA9ADaC3QAAKCtJYABaWxyANsm3ybjJvMhaHQAoH0pbwBvAPIANgwA4DXYL90AAWFv6ib1JnIAAAFkde8m8SYAoMEhbKDAIQCgbCl2oMED8WOAAWducwD+Jk4nUCdoAHQAAANhaGxyc3QKJxInISc1Jz0nRydyInJvdwB0oJIhYQDpAFYmYSNycG9vbgAAAWR1GiceJ28AdwDuAPAmcAAAoMAh5SFmdAABYWgnJy0ncgByAG8AdwDzAAkMYQByAHAAbwBvAG4A8wATBGklZ2h0YXJyb3dzAACgySFxAHUAaQBnAGEAcgByAG8A9wBZJugkcmVldGltZXMAoMwiZwDaYmkAbgBnAGQAbwB0AHMAZQDxABwYgAFhaG0AYCdjJ2YncgDyAAkMYQDyABMEAKAPIG8idXN0AGGgsSPjIWhlAKCxI+0haWQAoO4qAAJhYnB0fCeGJ4knmScAAW5ygCeDJ2cAAKDtJ3IAAKD+IXIA6wAcDIABYWZsAI8nkieVJ3IAAKCGKQDgNdhj3XUAcwAAoC4qaSJtZXMAAKA1KgABYXCiJ6gncgBnoCkAdAAAoJQp7yJsaW50AKASKmEAcgDyADwnAAJhY2hxuCe8J6EMwCfxIXVvAKA6IHIAAOA12MfcAAFidYAmxCdvAPKgGSCoAYABaGlyAM4n0ifWJ3IAZQDlAE0n7SFlcwCgyiJpAIChuSVlZmwAXAxjEt4n9CFyaQCgzinsInVoYXIAoGgpAKAeIWENBSgJKA0oSyhVKIYoAACLKLAoAAAAAOMo5ygAABApJCkxKW0pcSmHKaYpAACYKgAAAACxKmMidXRlAFthcQB1AO8ABR+ApHsiRWFjZWlucHN5ABwoHignKCooLygyKEEoRihJKACgtCrwASMoAAAlKACguCpvAG4AYWF1AOUAgw1koLAqaQBsAF9hcgBjAF1hgAFFYXMAOCg6KD0oAKC2KnAAAKC6KmkAbQAAoOki7yJsaW50AKATKmkA7QCIDUFkbwB0AGKixSKRFgAAAABTKACgZiqAA0FhY21zdHgAYChkKG8ocyh1KHkogihyAHIAAKDYIXIAAAFocmkoayjrAJAab6CYIfcAzAd0ADuApwCnQGkAO2D3IWFyAKApKW0AAAFpbn4ozQBuAHUA8wDOAHQAAKA2J3IA7+A12DDdIxkAAmFjb3mRKJUonSisKHIAcAAAoG8mAAFoeZkonChjAHkASWRIZHIAdABtAqUoAAAAAKgoaQDkAFsPYQByAGEA7ABsJDuArQCtQAABZ22zKLsobQBhAAChwwNmdroouijCY4CjPCJkZWdsbnByAMgozCjPKNMo1yjaKN4obwB0AACgairxoEMiCw5FoJ4qAKCgKkWgnSoAoJ8qZQAAoEYi7CF1cwCgJCrhIXJyAKByKWEAcgDyAPwMAAJhZWl07Sj8KAEpCCkAAWxz8Sj4KGwAcwBlAHQAbQDpAH8oaABwAACgMyrwImFyc2wAoOQpAAFkbFoPBSllAACgIyNloKoqc6CsKgDgrCoA/oABZmxwABUpGCkfKfQhY3lMZGKgLwBhoMQpcgAAoD8jZgAA4DXYZN1hAAABZHIoKRcDZQBzAHWgYCZpAHQAAKBgJoABY3N1ADYpRilhKQABYXU6KUApcABzoJMiAOCTIgD+cABzoJQiAOCUIgD+dQAAAWJwSylWKQChjyJlcz4NUCllAHQAZaCPIvEAPw0AoZAiZXNIDVspZQB0AGWgkCLxAEkNAKGhJWFmZilbBHIAZQFrKVwEAKChJWEAcgDyAAMNAAJjZW10dyl7KX8pgilyAADgNdjI3HQAbQDuAM4AaQDsAAYpYQByAOYAVw0AAWFyiimOKXIA5qAGJhESAAFhbpIpoylpImdodAAAAWVwmSmgKXAAcwBpAGwAbwDuANkXaADpAKAkcwCvYIACYmNtbnAArin8KY4NJSooKgCkgiJFZGVtbnByc7wpvinCKcgpzCnUKdgp3CkAoMUqbwB0AACgvSpkoIYibwB0AACgwyr1IWx0AKDBKgABRWXQKdIpAKDLKgCgiiLsIXVzAKC/KuEhcnIAoHkpgAFlaXUA4inxKfQpdAAAoYIiZW7oKewpcQDxoIYivSllAHEA8aCKItEpbQAAoMcqAAFicPgp+ikAoNUqAKDTKmMAgKJ7ImFjZW5zAAcqDSoUKhYqRihwAHAAcgBvAPgAIyh1AHIAbAB5AGUA8QCDDfEAfA2AAWFlcwAcKiIqPShwAHAAcgBvAPgAPChxAPEAOShnAACgaiYApoMiMTIzRWRlaGxtbnBzPCo/KkIqRSpHKlIqWCpjKmcqaypzKncqO4C5ALlAO4CyALJAO4CzALNAAKDGKgABb3NLKk4qdAAAoL4qdQBiAACg2CpkoIcibwB0AACgxCpzAAABb3VdKmAqbAAAoMknYgAAoNcq4SFycgCgeyn1IWx0AKDCKgABRWVvKnEqAKDMKgCgiyLsIXVzAKDAKoABZWl1AH0qjCqPKnQAAKGDImVugyqHKnEA8aCHIkYqZQBxAPGgiyJwKm0AAKDIKgABYnCTKpUqAKDUKgCg1iqAAUFhbgCdKqEqrCpyAHIAAKDZIXIAAAFocqYqqCrrAJUab6CZIfcAxQf3IWFyAKAqKWwAaQBnADuA3wDfQOELzyrZKtwq6SrsKvEqAAD1KjQrAAAAAAAAAAAAAEwrbCsAAHErvSsAAAAAAADRK3IC1CoAAAAA2CrnIWV0AKAWI8RjcgDrAOUKgAFhZXkA4SrkKucq8iFvbmVh5CFpbGNhQmRvAPQAIg5sInJlYwAAoBUjcgAA4DXYMd0AAmVpa2/7KhIrKCsuK/IBACsAAAkrZQAAATRm6g0EK28AcgDlAOsNYQBzorgDECsAAAAAEit5AG0A0WMAAWNuFislK2sAAAFhcxsrIStwAHAAcgBvAPgAFw5pAG0AAKA8InMA8AD9DQABYXMsKyEr8AAXDnIAbgA7gP4A/kDsATgrOyswG2QA5QBnAmUAcwCAgdcAO2JkAEMrRCtJK9dAYaCgInIAAKAxKgCgMCqAAWVwcwBRK1MraSvhAAkh4qKkIlsrXysAAAAAYytvAHQAAKA2I2kAcgAAoPEqb+A12GXdcgBrAACg2irhAHgociJpbWUAAKA0IIABYWlwAHYreSu3K2QA5QC+DYADYWRlbXBzdACFK6MrmiunK6wrsCuzK24iZ2xlAACitSVkbHFykCuUK5ornCvvIXduAKC/JeUhZnRloMMl8QACBwCgXCJpImdodABloLkl8QBdDG8AdAAAoOwlaSJudXMAAKA6KuwhdXMAoDkqYgAAoM0p6SFtZQCgOyrlInppdW0AoOIjgAFjaHQAwivKK80rAAFyecYrySsA4DXYydxGZGMAeQBbZPIhb2tnYQABaW/UK9creAD0ANERaCJlYWQAAAFsct4r5ytlAGYAdABhAHIAcgBvAPcAXQbpJGdodGFycm93AKCgIQAJQUhhYmNkZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg")});var B1;var EU=C(()=>{(function(f){f[f.VALUE_LENGTH=49152]="VALUE_LENGTH",f[f.FLAG13=8192]="FLAG13",f[f.BRANCH_LENGTH=8064]="BRANCH_LENGTH",f[f.JUMP_TABLE=127]="JUMP_TABLE"})(B1||(B1={}))});function Tj(f){return f>=uf.ZERO&&f<=uf.NINE}function bk(f){return f>=uf.UPPER_A&&f<=uf.UPPER_F||f>=uf.LOWER_A&&f<=uf.LOWER_F}function Sk(f){return f>=uf.UPPER_A&&f<=uf.UPPER_Z||f>=uf.LOWER_A&&f<=uf.LOWER_Z||Tj(f)}function Ik(f){return f===uf.EQUALS||Sk(f)}class uj{constructor(f,J,Y){this.decodeTree=f,this.emitCodePoint=J,this.errors=Y,this.state=of.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=tJ.Strict,this.runConsumed=0}startEntity(f){this.decodeMode=f,this.state=of.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(f,J){switch(this.state){case of.EntityStart:{if(f.charCodeAt(J)===uf.NUM)return this.state=of.NumericStart,this.consumed+=1,this.stateNumericStart(f,J+1);return this.state=of.NamedEntity,this.stateNamedEntity(f,J)}case of.NumericStart:return this.stateNumericStart(f,J);case of.NumericDecimal:return this.stateNumericDecimal(f,J);case of.NumericHex:return this.stateNumericHex(f,J);case of.NamedEntity:return this.stateNamedEntity(f,J)}}stateNumericStart(f,J){if(J>=f.length)return-1;if((f.charCodeAt(J)|xU)===uf.LOWER_X)return this.state=of.NumericHex,this.consumed+=1,this.stateNumericHex(f,J+1);return this.state=of.NumericDecimal,this.stateNumericDecimal(f,J)}stateNumericHex(f,J){while(J<f.length){let Y=f.charCodeAt(J);if(Tj(Y)||bk(Y)){let z=Y<=uf.NINE?Y-uf.ZERO:(Y|xU)-uf.LOWER_A+10;this.result=this.result*16+z,this.consumed++,J++}else return this.emitNumericEntity(Y,3)}return-1}stateNumericDecimal(f,J){while(J<f.length){let Y=f.charCodeAt(J);if(Tj(Y))this.result=this.result*10+(Y-uf.ZERO),this.consumed++,J++;else return this.emitNumericEntity(Y,2)}return-1}emitNumericEntity(f,J){var Y;if(this.consumed<=J)return(Y=this.errors)===null||Y===void 0||Y.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(f===uf.SEMI)this.consumed+=1;else if(this.decodeMode===tJ.Strict)return 0;if(this.emitCodePoint(bU(this.result),this.consumed),this.errors){if(f!==uf.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(f,J){let{decodeTree:Y}=this,z=Y[this.treeIndex],G=(z&B1.VALUE_LENGTH)>>14;while(J<f.length){if(G===0&&(z&B1.FLAG13)!==0){let q=(z&B1.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let Q=z&B1.JUMP_TABLE;if(f.charCodeAt(J)!==Q)return this.result===0?0:this.emitNotTerminatedNamedEntity();J++,this.excess++,this.runConsumed++}while(this.runConsumed<q){if(J>=f.length)return-1;let Q=this.runConsumed-1,H=Y[this.treeIndex+1+(Q>>1)],B=Q%2===0?H&255:H>>8&255;if(f.charCodeAt(J)!==B)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();J++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(q>>1),z=Y[this.treeIndex],G=(z&B1.VALUE_LENGTH)>>14}if(J>=f.length)break;let Z=f.charCodeAt(J);if(Z===uf.SEMI&&G!==0&&(z&B1.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.treeIndex=uk(Y,z,this.treeIndex+Math.max(1,G),Z),this.treeIndex<0)return this.result===0||this.decodeMode===tJ.Attribute&&(G===0||Ik(Z))?0:this.emitNotTerminatedNamedEntity();if(z=Y[this.treeIndex],G=(z&B1.VALUE_LENGTH)>>14,G!==0){if(Z===uf.SEMI)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.decodeMode!==tJ.Strict&&(z&B1.FLAG13)===0)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}J++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var f;let{result:J,decodeTree:Y}=this,z=(Y[J]&B1.VALUE_LENGTH)>>14;return this.emitNamedEntityData(J,z,this.consumed),(f=this.errors)===null||f===void 0||f.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(f,J,Y){let{decodeTree:z}=this;if(this.emitCodePoint(J===1?z[f]&~(B1.VALUE_LENGTH|B1.FLAG13):z[f+1],Y),J===3)this.emitCodePoint(z[f+2],Y);return Y}end(){var f;switch(this.state){case of.NamedEntity:return this.result!==0&&(this.decodeMode!==tJ.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case of.NumericDecimal:return this.emitNumericEntity(0,2);case of.NumericHex:return this.emitNumericEntity(0,3);case of.NumericStart:return(f=this.errors)===null||f===void 0||f.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case of.EntityStart:return 0}}}function Tk(f){let J="",Y=new uj(f,(z)=>J+=yU(z));return function(G,Z){let q=0,Q=0;while((Q=G.indexOf("&",Q))>=0){J+=G.slice(q,Q),Y.startEntity(Z);let B=Y.write(G,Q+1);if(B<0){q=Q+Y.end();break}q=Q+B,Q=B===0?q+1:q}let H=J+G.slice(q);return J="",H}}function uk(f,J,Y,z){let G=(J&B1.BRANCH_LENGTH)>>7,Z=J&B1.JUMP_TABLE;if(G===0)return Z!==0&&z===Z?Y:-1;if(Z){let B=z-Z;return B<0||B>=G?-1:f[Y+B]-1}let q=G+1>>1,Q=0,H=G-1;while(Q<=H){let B=Q+H>>>1,V=B>>1,U=f[Y+V]>>(B&1)*8&255;if(U<z)Q=B+1;else if(U>z)H=B-1;else return f[Y+q+B]}return-1}function Fz(f,J=tJ.Legacy){return Ek(f,J)}var uf,xU=32,of,tJ,Ek;var wU=C(()=>{SU();uU();EU();(function(f){f[f.NUM=35]="NUM",f[f.SEMI=59]="SEMI",f[f.EQUALS=61]="EQUALS",f[f.ZERO=48]="ZERO",f[f.NINE=57]="NINE",f[f.LOWER_A=97]="LOWER_A",f[f.LOWER_F=102]="LOWER_F",f[f.LOWER_X=120]="LOWER_X",f[f.LOWER_Z=122]="LOWER_Z",f[f.UPPER_A=65]="UPPER_A",f[f.UPPER_F=70]="UPPER_F",f[f.UPPER_Z=90]="UPPER_Z"})(uf||(uf={}));(function(f){f[f.EntityStart=0]="EntityStart",f[f.NumericStart=1]="NumericStart",f[f.NumericDecimal=2]="NumericDecimal",f[f.NumericHex=3]="NumericHex",f[f.NamedEntity=4]="NamedEntity"})(of||(of={}));(function(f){f[f.Legacy=0]="Legacy",f[f.Strict=1]="Strict",f[f.Attribute=2]="Attribute"})(tJ||(tJ={}));Ek=Tk(TU)});var hU,PU;var mU=C(()=>{wU();(function(f){f[f.XML=0]="XML",f[f.HTML=1]="HTML"})(hU||(hU={}));(function(f){f[f.UTF8=0]="UTF8",f[f.ASCII=1]="ASCII",f[f.Extensive=2]="Extensive",f[f.Attribute=3]="Attribute",f[f.Text=4]="Text"})(PU||(PU={}))});import{CliRenderer as wk,createCliRenderer as hk,engine as Pk}from"@opentui/core";import{createTestRenderer as Im}from"@opentui/core/testing";import{ASCIIFontRenderable as vk,BoxRenderable as mk,CodeRenderable as ck,DiffRenderable as nk,InputRenderable as dk,LineNumberRenderable as ik,MarkdownRenderable as lk,ScrollBoxRenderable as ak,SelectRenderable as $k,TabSelectRenderable as rk,TextareaRenderable as pk,TextAttributes as Ej,TextNodeRenderable as _k,TextRenderable as ok}from"@opentui/core";import{engine as Em,Timeline as xm}from"@opentui/core";import{BaseRenderable as aU,createTextAttributes as tk,InputRenderable as xj,InputRenderableEvents as RZ,isTextNodeRenderable as Pj,parseColor as cU,Renderable as ek,RootTextNodeRenderable as fN,ScrollBoxRenderable as JN,SelectRenderable as nU,SelectRenderableEvents as wj,TabSelectRenderable as dU,TabSelectRenderableEvents as hj,TextNodeRenderable as YN,TextRenderable as $U}from"@opentui/core";import{BaseRenderable as jN,isTextNodeRenderable as WN,TextNodeRenderable as VN,TextRenderable as KN,Yoga as lU}from"@opentui/core";import{BoxRenderable as lm,RootRenderable as am}from"@opentui/core";import{TimeToFirstDrawRenderable as MN}from"@opentui/core";import{createSlotRegistry as pm}from"@opentui/core";function GN({createElement:f,createTextNode:J,createSlotNode:Y,isTextNode:z,replaceText:G,insertNode:Z,removeNode:q,setProperty:Q,getParentNode:H,getFirstChild:B,getNextSibling:V}){function j(N,A,R,S){if(R!==void 0&&!S)S=[];if(typeof A!=="function")return U(N,A,S,R);AJ((_)=>U(N,A(),_,R),S)}function U(N,A,R,S,_){while(typeof R==="function")R=R();if(A===R)return R;let z0=typeof A,e=S!==void 0;if(z0==="string"||z0==="number"){if(z0==="number")A=A.toString();if(e){let Y0=R[0];if(Y0&&z(Y0))G(Y0,A);else Y0=J(A);R=M(N,R,S,Y0)}else if(R!==""&&typeof R==="string")G(B(N),R=A);else M(N,R,S,J(A)),R=A}else if(A==null||z0==="boolean")R=M(N,R,S);else if(z0==="function")return AJ(()=>{let Y0=A();while(typeof Y0==="function")Y0=Y0();R=U(N,Y0,R,S)}),()=>R;else if(Array.isArray(A)){let Y0=[];if(L(Y0,A,_))return AJ(()=>R=U(N,Y0,R,S,!0)),()=>R;if(Y0.length===0){let T=M(N,R,S);if(e)return R=T}else if(Array.isArray(R))if(R.length===0)g(N,Y0,S);else O(N,R,Y0);else if(R==null||R==="")g(N,Y0);else O(N,e&&R||[B(N)],Y0);R=Y0}else{if(Array.isArray(R)){if(e)return R=M(N,R,S,A);M(N,R,null,A)}else if(R==null||R===""||!B(N))Z(N,A);else I(N,A,B(N));R=A}return R}function L(N,A,R){let S=!1;for(let _=0,z0=A.length;_<z0;_++){let e=A[_],Y0;if(e==null||e===!0||e===!1);else if(Array.isArray(e))S=L(N,e)||S;else if((Y0=typeof e)==="string"||Y0==="number")N.push(J(e));else if(Y0==="function")if(R){while(typeof e==="function")e=e();S=L(N,Array.isArray(e)?e:[e])||S}else N.push(e),S=!0;else N.push(e)}return S}function O(N,A,R){let S=R.length,_=A.length,z0=S,e=0,Y0=0,T=V(A[_-1]),Q0=null;while(e<_||Y0<z0){if(A[e]===R[Y0]){e++,Y0++;continue}while(A[_-1]===R[z0-1])_--,z0--;if(_===e){let t=z0<S?Y0?V(R[Y0-1]):R[z0-Y0]:T;while(Y0<z0)Z(N,R[Y0++],t)}else if(z0===Y0)while(e<_){if(!Q0||!Q0.has(A[e]))q(N,A[e]);e++}else if(A[e]===R[z0-1]&&R[Y0]===A[_-1]){let t=V(A[--_]);Z(N,R[Y0++],V(A[e++])),Z(N,R[--z0],t),A[_]=R[z0]}else{if(!Q0){Q0=new Map;let V0=Y0;while(V0<z0)Q0.set(R[V0],V0++)}let t=Q0.get(A[e]);if(t!=null)if(Y0<t&&t<z0){let V0=e,C0=1,$;while(++V0<_&&V0<z0){if(($=Q0.get(A[V0]))==null||$!==t+C0)break;C0++}if(C0>t-Y0){let x=A[e];while(Y0<t)Z(N,R[Y0++],x)}else I(N,R[Y0++],A[e++])}else e++;else q(N,A[e++])}}}function M(N,A,R,S){if(R===void 0){let z0;while(z0=B(N))q(N,z0);return S&&Z(N,S),S??""}let _=S||Y();if(A.length){let z0=!1;for(let e=A.length-1;e>=0;e--){let Y0=A[e];if(_!==Y0){let T=H(Y0)===N;if(!z0&&!e)T?I(N,_,Y0):Z(N,_,R);else T&&q(N,Y0)}else z0=!0}}else Z(N,_,R);return[_]}function g(N,A,R){for(let S=0,_=A.length;S<_;S++)Z(N,A[S],R)}function I(N,A,R){Z(N,A,R),q(N,R)}function a(N,A,R={},S){if(A||(A={}),!S)AJ(()=>R.children=U(N,A.children,R.children));return AJ(()=>A.ref&&A.ref(N)),AJ(()=>{for(let _ in A){if(_==="children"||_==="ref")continue;let z0=A[_];if(z0===R[_])continue;Q(N,_,z0,R[_]),R[_]=z0}}),R}return{render(N,A){let R;return aY((S)=>{R=S,j(A,N())}),R},insert:j,spread(N,A,R){if(typeof A==="function")AJ((S)=>a(N,A(),S,R));else a(N,A,void 0,R)},createElement:f,createTextNode:J,insertNode:Z,setProp(N,A,R,S){return Q(N,A,R,S),R},mergeProps:UX,effect:AJ,memo:zN,createComponent:QW,use(N,A,R){return $f(()=>N(A,R))}}}function ZN(f){let J=GN(f);return J.mergeProps=UX,J}function dj(f){if(!XQ.has(f))XQ.set(f,0);let J=XQ.get(f)+1;return XQ.set(f,J),`${f}-${J}`}function XN(f,J,Y){if(sf("Inserting node:",rf(J),"into parent:",rf(f),"with anchor:",rf(Y),J instanceof AG),J instanceof CZ)J.parent=f,J=J.getSlotChild(f);if(Y&&Y instanceof CZ)Y=Y.getSlotChild(f);if(Pj(J)){if(!(f instanceof $U)&&!Pj(f))throw Error(`Orphan text error: "${J.toChunks().map((Z)=>Z.text).join("")}" must have a <text> as a parent: ${f.id} above ${J.id}`)}if(!(f instanceof aU))throw console.error("[INSERT]","Tried to mount a non base renderable"),Error("Tried to mount a non base renderable");if(!Y){f.add(J);return}let z=vj(f),G=z.findIndex((Z)=>Z.id===Y.id);if(G===-1)sf("[INSERT]","Could not find anchor",rf(f),rf(Y),"[children]",...z.map((Z)=>Z.id));f.add(J,G)}function qN(f,J){if(sf("Removing node:",rf(J),"from parent:",rf(f)),J instanceof CZ)J.parent=null,J=J.getSlotChild(f);f.remove(J.id),process.nextTick(()=>{if(J instanceof aU&&!J.parent){J.destroyRecursively();return}})}function QN(f){sf("Creating text node:",f);let J=dj("text-node");if(typeof f==="number")f=f.toString();return AG.fromString(Fz(f),{id:J})}function HN(){let f=dj("slot-node");return sf("Creating slot node",f),new CZ(f)}function iU(f){sf("Getting parent of node:",rf(f));let J=f.parent??void 0;if(J instanceof fN)J=J.textParent??void 0;let Y=J?.parent?.parent?.parent;if(Y instanceof JN&&Y.content===J)J=Y;return J}function DN(f){Object.assign(eU,f)}function LN(){return eU}var nj,Y1=()=>{let f=u1(nj);if(!f)throw Error("No renderer found");return f},sk=(f)=>{let J=Y1();f1(()=>{J.on("resize",f)}),vf(()=>{J.off("resize",f)})},TJ=()=>{let f=Y1(),[J,Y]=r({width:f.width,height:f.height});return sk((G,Z)=>{Y({width:G,height:Z})}),J},zN=(f)=>K0(()=>f()),XQ,sf=(...f)=>{if(process.env.DEBUG)console.log("[Reconciler]",...f)},AG,rf=(f)=>{if(!f)return;return f.id},vj=(f)=>{let J;if(f instanceof $U)J=f.getTextChildren();else J=f.getChildren();return J},BN,E,I0,b,W,E0,D,K,nm,X,rU,uY,ij,pU,_U,CZ,kZ,qQ,mj,cj,oU,sU,tU,UN,eU,FN=(f,J)=>{let Y,z=!1,G=!1,Z=!0,q=!1,Q=f.destroy.bind(f),H=()=>{if(G)return;if(!Y){z=!0;return}G=!0,Y()};f.once("destroy",H),f.destroy=()=>{if(Z){q=!0;return}Q()};try{Y=BN(()=>b(nj.Provider,{get value(){return f},get children(){return b(J,{})}}),f.root)}finally{Z=!1,f.destroy=Q}if(z)H();if(q)Q()},f6=async(f,J={})=>{let Y=J instanceof wk?J:await hk({...J,onDestroy:()=>{J.onDestroy?.()}});Pk.attach(Y),FN(Y,f)};var P=C(()=>{Wf();mU();Wf();Wf();Wf();nj=gJ();XQ=new Map;AG=class AG extends YN{static fromString(f,J={}){let Y=new AG(J);return Y.add(f),Y}};({render:BN,effect:E,memo:I0,createComponent:b,createElement:W,createTextNode:E0,insertNode:D,insert:K,spread:nm,setProp:X,mergeProps:rU,use:uY}=ZN({createElement(f){sf("Creating element:",f);let J=dj(f),Y=u1(nj);if(!Y)throw Error("No renderer found");let z=LN();if(!z[f])throw Error(`[Reconciler] Unknown component type: ${f}`);let G=new z[f](Y,{id:J});return sf("Element created with id:",J),G},createTextNode:QN,createSlotNode:HN,replaceText(f,J){if(sf("Replacing text:",J,"in node:",rf(f)),!(f instanceof AG))return;f.replace(Fz(J),0)},setProperty(f,J,Y,z){if(J.startsWith("on:")){let G=J.slice(3);if(Y)f.on(G,Y);if(z)f.off(G,z);return}if(Pj(f)){if(J==="href"){f.link={url:Y};return}if(J==="style"){f.attributes|=tk(Y),f.fg=Y.fg?cU(Y.fg):f.fg,f.bg=Y.bg?cU(Y.bg):f.bg;return}return}switch(J){case"id":sf("Id mapped",f.id,"=",Y),f[J]=Y;break;case"focused":if(!(f instanceof ek))return;if(Y)f.focus();else f.blur();break;case"onChange":let G=void 0;if(f instanceof nU)G=wj.SELECTION_CHANGED;else if(f instanceof dU)G=hj.SELECTION_CHANGED;else if(f instanceof xj)G=RZ.CHANGE;if(!G)break;if(Y)f.on(G,Y);if(z)f.off(G,z);break;case"onInput":if(f instanceof xj){if(Y)f.on(RZ.INPUT,Y);if(z)f.off(RZ.INPUT,z)}break;case"onSubmit":if(f instanceof xj){if(Y)f.on(RZ.ENTER,Y);if(z)f.off(RZ.ENTER,z)}else f[J]=Y;break;case"onSelect":if(f instanceof nU){if(Y)f.on(wj.ITEM_SELECTED,Y);if(z)f.off(wj.ITEM_SELECTED,z)}else if(f instanceof dU){if(Y)f.on(hj.ITEM_SELECTED,Y);if(z)f.off(hj.ITEM_SELECTED,z)}break;case"style":for(let Z in Y){let q=Y[Z];if(z!==void 0&&q===z[Z])continue;f[Z]=q}break;case"text":case"content":{let Z=typeof Y==="string"?Y:Array.isArray(Y)?Y.join(""):`${Y}`;f[J]=Fz(Z);break}default:f[J]=Y}},isTextNode(f){return f instanceof AG},insertNode:XN,removeNode:qN,getParentNode:iU,getFirstChild(f){sf("Getting first child of node:",rf(f));let J=vj(f)[0];if(!J){sf("No first child found for node:",rf(f));return}return sf("First child found:",rf(J),"for node:",rf(f)),J},getNextSibling(f){sf("Getting next sibling of node:",rf(f));let J=iU(f);if(!J){sf("No parent found for node:",rf(f));return}let Y=vj(J),z=Y.indexOf(f);if(z===-1||z===Y.length-1){sf("No next sibling found for node:",rf(f));return}let G=Y[z+1];if(!G){sf("Next sibling is null for node:",rf(f));return}return sf("Next sibling found:",rf(G),"for node:",rf(f)),G}}));ij=class ij extends jN{constructor(f){super({id:f})}add(f,J){throw Error("Can't add children on an Slot renderable")}getChildren(){return[]}remove(f){}insertBefore(f,J){throw Error("Can't add children on an Slot renderable")}getRenderable(f){return}getChildrenCount(){return 0}requestRender(){}findDescendantById(f){return}};pU=class pU extends VN{slotParent;destroyed=!1;constructor(f,J){super({id:f});this._visible=!1,this.slotParent=J}destroy(){if(this.destroyed)return;this.destroyed=!0,this.slotParent?.destroy(),super.destroy()}};_U=class _U extends ij{yogaNode;slotParent;destroyed=!1;constructor(f,J){super(f);this._visible=!1,this.slotParent=J,this.yogaNode=lU.default.Node.create(),this.yogaNode.setDisplay(lU.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};CZ=class CZ extends ij{layoutNode;textNode;destroyed=!1;constructor(f){super(f);this._visible=!1}getSlotChild(f){if(WN(f)||f instanceof KN){if(!this.textNode)this.textNode=new pU(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new _U(`slot-layout-${this.id}`,this);return this.layoutNode}destroy(){if(this.destroyed)return;if(this.destroyed=!0,this.layoutNode)this.layoutNode.destroy();if(this.textNode)this.textNode.destroy()}};kZ=class kZ extends _k{_ctx;constructor(f,J){super(J);this._ctx=f}};qQ=class qQ extends kZ{constructor(f,J){super(null,f);if(J==="b"||J==="strong")this.attributes=(this.attributes||0)|Ej.BOLD;else if(J==="i"||J==="em")this.attributes=(this.attributes||0)|Ej.ITALIC;else if(J==="u")this.attributes=(this.attributes||0)|Ej.UNDERLINE}};mj=class mj extends qQ{constructor(f){super(f,"b")}};cj=class cj extends qQ{constructor(f){super(f,"i")}};oU=class oU extends qQ{constructor(f){super(f,"u")}};sU=class sU extends kZ{constructor(f,J){super(null,J);this.add()}add(){return super.add(`
|
|
221
|
+
`)}};tU=class tU extends kZ{constructor(f,J){let Y={...J,link:{url:J.href}};super(null,Y)}};UN={box:mk,text:ok,input:dk,select:$k,textarea:pk,ascii_font:vk,tab_select:rk,scrollbox:ak,code:ck,diff:nk,line_number:ik,markdown:lk,span:kZ,strong:mj,b:mj,em:cj,i:cj,u:oU,br:sU,a:tU},eU={...UN};DN({time_to_first_draw:MN})});function ON(f){let J=f?.changes;if(!J||typeof J!=="object"||Array.isArray(J))return null;let Y=new Map;for(let[z,G]of Object.entries(J)){let Z=G;if(typeof Z?.added!=="number"||typeof Z.deleted!=="number")return null;Y.set(z,{added:Z.added,deleted:Z.deleted})}return Y}function AN(f,J){if(f.size!==J.size)return!1;for(let[Y,z]of f){let G=J.get(Y);if(!G||!IJ(z,G))return!1}return!0}class j1{client;tasksAcc;setTasks;activeTaskAcc;setActiveTaskSig;updateAcc;setUpdateSig;daemonVersionAcc;setDaemonVersionSig;engineStateAcc;setEngineStateSig;taskJobsAcc;setTaskJobsSig;worktreeChangesAcc;setWorktreeChangesSig;uiPrefsAcc;setUiPrefsSig;keybindingsRevAcc;setKeybindingsRevSig;connectionStateAcc;setConnectionState;ensureReachable;role;channels;subscribesTasks;reconnecting=!1;constructor(f,J={}){this.client=f;let[Y,z]=r([]),[G,Z]=r(null),[q,Q]=r(null),[H,B]=r(null),[V,j]=r(new Map),[U,L]=r(new Map),[O,M]=r(null),[g,I]=r(null),[a,N]=r(null),[A,R]=r("online");this.tasksAcc=Y,this.setTasks=(S)=>z(()=>S),this.activeTaskAcc=G,this.setActiveTaskSig=(S)=>Z(()=>S),this.updateAcc=q,this.setUpdateSig=(S)=>Q(()=>S),this.daemonVersionAcc=H,this.setDaemonVersionSig=(S)=>B(()=>S),this.engineStateAcc=V,this.setEngineStateSig=(S)=>j(()=>S),this.taskJobsAcc=U,this.setTaskJobsSig=(S)=>L(()=>S),this.worktreeChangesAcc=O,this.setWorktreeChangesSig=(S)=>M(()=>S),this.uiPrefsAcc=g,this.setUiPrefsSig=(S)=>I(()=>S),this.keybindingsRevAcc=a,this.setKeybindingsRevSig=(S)=>N(()=>S),this.connectionStateAcc=A,this.setConnectionState=(S)=>R(()=>S),this.ensureReachable=J.ensureReachable??UG,this.role=J.role??"pane",this.channels=J.channels,this.subscribesTasks=!J.channels||J.channels.includes("task.snapshot"),this.client.on("*",(S)=>this.handleEvent(S.name,S.payload)),this.client.onLifecycle("close",()=>{if(this.setConnectionState("disconnected"),this.role==="pane")nJ("orch","daemon socket closed \u2014 starting non-spawning reconnect loop"),this.reconnectLoop()})}async reconnectLoop(){if(this.reconnecting)return;this.reconnecting=!0;let f=500,J=0;while(!this.client.isDisposed){if(await new Promise((Y)=>setTimeout(Y,f)),this.client.isDisposed)break;J++;try{await this.init(),nJ("orch",`reconnected and re-subscribed after ${J} attempt(s) \u2014 task list re-synced`),this.reconnecting=!1;return}catch(Y){if(J===1||J%10===0)BY("orch-reconnect",Y);f=Math.min(f*2,3000)}}this.reconnecting=!1}async init(){let f=await this.client.request("hello",{protocolVersion:c1,minProtocolVersion:HY}),J=typeof f.protocolVersion==="number"?f.protocolVersion:c1,Y=typeof f.minProtocolVersion==="number"?f.minProtocolVersion:J;if(!FX({localVersion:c1,localMin:HY,remoteVersion:J,remoteMin:Y}))throw Error(`kobe daemon is protocol v${J} (min v${Y}); this client is v${c1} (min v${HY}). Restart the daemon (\`kobe daemon restart\`) or upgrade kobe.`);if(this.setDaemonVersionSig(typeof f.kobeVersion==="string"?f.kobeVersion:null),f.tasks&&this.subscribesTasks)this.setTasks(f.tasks.map(NZ));if(await this.client.subscribe({role:this.role,channels:this.channels}),f.capabilities?.includes("worktree.changes")){if(this.worktreeChangesAcc()===null)this.setWorktreeChangesSig(new Map)}else this.setWorktreeChangesSig(null);this.setConnectionState("online"),nJ("orch",`subscribed as ${this.role} (${this.tasksAcc().length} tasks)`)}connectionStateSignal(){return this.connectionStateAcc}async manualReconnect(){this.client.forceDisconnect(),await this.ensureReachable(),await this.init()}dispose(){this.client.close()}tasksSignal(){return this.tasksAcc}activeTaskSignal(){return this.activeTaskAcc}updateSignal(){return this.updateAcc}daemonVersionSignal(){return this.daemonVersionAcc}daemonStaleSignal(){return()=>FW(this.daemonVersionAcc()??void 0,o0)}engineStateSignal(){return this.engineStateAcc}taskJobsSignal(){return this.taskJobsAcc}worktreeChangesSignal(){return this.worktreeChangesAcc}uiPrefsSignal(){return this.uiPrefsAcc}keybindingsRevSignal(){return this.keybindingsRevAcc}listTasks(){return this.tasksAcc()}getTask(f){return this.tasksAcc().find((J)=>J.id===f)}subscribeTasks(f){try{f(this.listTasks())}catch(Y){console.error("[kobe RemoteOrchestrator] task listener threw on subscribe:",Y)}let J=!0;return aY((Y)=>{return ff(()=>{let z=this.tasksAcc();if(J){J=!1;return}try{f(z)}catch(G){console.error("[kobe RemoteOrchestrator] task listener threw:",G)}}),Y})}async createTask(f){let{modelEffort:J,...Y}=f,z=await this.client.request("task.create",{...Y,effort:J});return NZ(z.task)}async ensureMainTask(f){let J=await this.client.request("task.ensureMain",{repo:f});return NZ(J.task)}async ensureWorktree(f){return(await this.client.request("task.ensureWorktree",{taskId:String(f)})).worktreePath}async setTitle(f,J){await this.client.request("task.rename",{taskId:String(f),title:J})}async setBranch(f,J){await this.client.request("task.setBranch",{taskId:String(f),branch:J})}async setVendor(f,J){await this.client.request("task.setVendor",{taskId:String(f),vendor:J})}async setPinned(f,J){await this.client.request("task.pin",{taskId:String(f),pinned:J})}async moveTask(f,J){await this.client.request("task.move",{taskId:String(f),direction:J<0?"up":"down"})}async setArchived(f,J){await this.client.request("task.archive",{taskId:String(f),archived:J})}async setStatus(f,J){await this.client.request("task.status",{taskId:String(f),status:J})}async deleteTask(f,J){await this.client.request("task.delete",{taskId:String(f),force:J?.force})}async discoverAdoptableWorktrees(f){return(await this.client.request("worktree.discoverAdoptable",{repo:f})).worktrees}async adoptWorktree(f){let J=await this.client.request("worktree.adopt",f);return NZ(J.task)}async setActiveTask(f){await this.client.request("task.setActive",{taskId:f===null?null:String(f)})}handleEvent(f,J){if(f==="task.snapshot"){let Y=J?.tasks;if(Array.isArray(Y))this.setTasks(Y.map(NZ)),this.pruneEngineState(Y),this.pruneTaskJobs(Y);return}if(f==="active-task"){let Y=J?.taskId;this.setActiveTaskSig(typeof Y==="string"?Y:null);return}if(f==="update"){let Y=J?.info;this.setUpdateSig(Y??null);return}if(f==="engine-state"){let Y=J;if(typeof Y?.taskId!=="string"||typeof Y.state!=="string")return;let z=new Map(this.engineStateAcc());if(Y.state==="idle")z.delete(Y.taskId);else z.set(Y.taskId,{state:Y.state,detail:Y.detail,at:typeof Y.at==="number"?Y.at:0});this.setEngineStateSig(z);return}if(f==="task.jobs"){let Y=J;if(typeof Y?.taskId!=="string"||Y.kind!=="ensureWorktree")return;let z=this.taskJobsAcc();if(Y.phase==="running"){let G=new Map(z);G.set(Y.taskId,{kind:Y.kind}),this.setTaskJobsSig(G);return}if((Y.phase==="done"||Y.phase==="error")&&z.has(Y.taskId)){let G=new Map(z);G.delete(Y.taskId),this.setTaskJobsSig(G)}return}if(f==="worktree.changes"){let Y=ON(J);if(!Y)return;let z=this.worktreeChangesAcc();if(z&&AN(z,Y))return;this.setWorktreeChangesSig(Y);return}if(f==="ui-prefs"){let Y=J;if(typeof Y?.theme!=="string")return;this.setUiPrefsSig({theme:Y.theme,transparentBackground:Y.transparentBackground===!0,focusAccent:typeof Y.focusAccent==="string"?Y.focusAccent:null,locale:typeof Y.locale==="string"?Y.locale:"",sortMode:Y.sortMode==="recent"?"recent":"default",keysCollapsed:Y.keysCollapsed===!0,projectFilter:typeof Y.projectFilter==="string"&&Y.projectFilter.length>0?Y.projectFilter:null});return}if(f==="keybindings"){let Y=J;if(typeof Y?.rev!=="number")return;this.setKeybindingsRevSig(Y.rev);return}}pruneEngineState(f){let J=this.engineStateAcc();if(J.size===0)return;let Y=new Set(f.map((G)=>G.id)),z=null;for(let G of J.keys()){if(Y.has(G))continue;if(!z)z=new Map(J);z.delete(G)}if(z)this.setEngineStateSig(z)}pruneTaskJobs(f){let J=this.taskJobsAcc();if(J.size===0)return;let Y=new Set(f.map((G)=>G.id)),z=null;for(let G of J.keys()){if(Y.has(G))continue;if(!z)z=new Map(J);z.delete(G)}if(z)this.setTaskJobsSig(z)}}function NZ(f){return{id:hG(f.id),title:f.title,repo:f.repo,branch:f.branch,worktreePath:f.worktreePath,kind:f.kind,status:f.status,archived:f.archived,pinned:f.pinned,vendor:f.vendor,prStatus:f.prStatus,modelEffort:f.modelEffort,createdAt:f.createdAt,updatedAt:f.updatedAt}}var EY=C(()=>{_Y();y1();rY();Wf();WG();S1();U1()});function z6(f){let J=f[JJ];if(!J){if(Object.defineProperty(f,JJ,{value:J=new Proxy(f,CN)}),!Array.isArray(f)){let Y=Object.keys(f),z=Object.getOwnPropertyDescriptors(f),G=Object.getPrototypeOf(f),Z=G!==null&&f!==null&&typeof f==="object"&&!Array.isArray(f)&&G!==Object.prototype;if(Z){let q=Object.getOwnPropertyDescriptors(G);Y.push(...Object.keys(q)),Object.assign(z,q)}for(let q=0,Q=Y.length;q<Q;q++){let H=Y[q];if(Z&&H==="constructor")continue;if(z[H].get)Object.defineProperty(f,H,{configurable:!0,enumerable:z[H].enumerable,get:z[H].get.bind(J)})}}}return J}function QQ(f){let J;return f!=null&&typeof f==="object"&&(f[JJ]||!(J=Object.getPrototypeOf(f))||J===Object.prototype||Array.isArray(f))}function bZ(f,J=new Set){let Y,z,G,Z;if(Y=f!=null&&f[lj])return Y;if(!QQ(f)||J.has(f))return f;if(Array.isArray(f)){if(Object.isFrozen(f))f=f.slice(0);else J.add(f);for(let q=0,Q=f.length;q<Q;q++)if(G=f[q],(z=bZ(G,J))!==G)f[q]=z}else{if(Object.isFrozen(f))f=Object.assign({},f);else J.add(f);let q=Object.keys(f),Q=Object.getOwnPropertyDescriptors(f);for(let H=0,B=q.length;H<B;H++){if(Z=q[H],Q[Z].get)continue;if(G=f[Z],(z=bZ(G,J))!==G)f[Z]=z}}return f}function HQ(f,J){let Y=f[J];if(!Y)Object.defineProperty(f,J,{value:Y=Object.create(null)});return Y}function SZ(f,J,Y){if(f[J])return f[J];let[z,G]=r(Y,{equals:!1,internal:!0});return z.$=G,f[J]=z}function gN(f,J){let Y=Reflect.getOwnPropertyDescriptor(f,J);if(!Y||Y.get||!Y.configurable||J===JJ||J===gG)return Y;return delete Y.value,delete Y.writable,Y.get=()=>f[JJ][J],Y}function G6(f){VX()&&SZ(HQ(f,gG),Y6)()}function RN(f){return G6(f),Reflect.ownKeys(f)}function BQ(f,J,Y,z=!1){if(J==="__proto__"){console.warn('Refusing to set "__proto__" on a store.');return}if(!z&&f[J]===Y)return;let G=f[J],Z=f.length;if(J6.onStoreNodeUpdate&&J6.onStoreNodeUpdate(f,J,Y,G),Y===void 0){if(delete f[J],f[eJ]&&f[eJ][J]&&G!==void 0)f[eJ][J].$()}else if(f[J]=Y,f[eJ]&&f[eJ][J]&&G===void 0)f[eJ][J].$();let q=HQ(f,gG),Q;if(Q=SZ(q,J,G))Q.$(()=>Y);if(Array.isArray(f)&&f.length!==Z){for(let H=f.length;H<Z;H++)(Q=q[H])&&Q.$();(Q=SZ(q,"length",Z))&&Q.$(f.length)}(Q=q[Y6])&&Q.$()}function Z6(f,J){let Y=Object.keys(J);for(let z=0;z<Y.length;z+=1){let G=Y[z];if(X6(G))continue;BQ(f,G,J[G])}}function X6(f){return f==="__proto__"||f==="constructor"||f==="prototype"}function kN(f,J){if(typeof J==="function")J=J(f);if(J=bZ(J),Array.isArray(J)){if(f===J)return;let Y=0,z=J.length;for(;Y<z;Y++){let G=J[Y];if(f[Y]!==G)BQ(f,Y,G)}BQ(f,"length",z)}else Z6(f,J)}function yZ(f,J,Y=[]){let z,G=f;if(J.length>1){z=J.shift();let q=typeof z,Q=Array.isArray(f);if(q==="string"&&(z==="__proto__"||J.length>1&&X6(z))){console.warn(`Refusing to traverse unsafe key "${z}" on a store.`);return}if(Array.isArray(z)){for(let H=0;H<z.length;H++)yZ(f,[z[H]].concat(J),Y);return}else if(Q&&q==="function"){for(let H=0;H<f.length;H++)if(z(f[H],H))yZ(f,[H].concat(J),Y);return}else if(Q&&q==="object"){let{from:H=0,to:B=f.length-1,by:V=1}=z;for(let j=H;j<=B;j+=V)yZ(f,[j].concat(J),Y);return}else if(J.length>1){yZ(f[z],J,[z].concat(Y));return}G=f[z],Y=[z].concat(Y)}let Z=J[0];if(typeof Z==="function"){if(Z=Z(G,Y),Z===G)return}if(z===void 0&&Z==null)return;if(Z=bZ(Z),z===void 0||QQ(G)&&QQ(Z)&&!Array.isArray(Z))Z6(G,Z);else BQ(f,z,Z)}function uJ(...[f,J]){let Y=bZ(f||{}),z=Array.isArray(Y);if(typeof Y!=="object"&&typeof Y!=="function")throw Error(`Unexpected type ${typeof Y} received when initializing 'createStore'. Expected an object.`);let G=z6(Y);HW.registerGraph({value:Y,name:J&&J.name});function Z(...q){WX(()=>{z&&q.length===1?kN(Y,q[0]):yZ(Y,q)})}return[G,Z]}var lj,gG,eJ,Y6,J6,CN,Zc;var RG=C(()=>{Wf();lj=Symbol("store-raw"),gG=Symbol("store-node"),eJ=Symbol("store-has"),Y6=Symbol("store-self"),J6={onStoreNodeUpdate:null};CN={get(f,J,Y){if(J===lj)return f;if(J===JJ)return Y;if(J===HX)return G6(f),Y;let z=HQ(f,gG),G=z[J],Z=G?G():f[J];if(J===gG||J===eJ||J==="__proto__")return Z;if(!G){let q=Object.getOwnPropertyDescriptor(f,J);if(VX()&&(typeof Z!=="function"||f.hasOwnProperty(J))&&!(q&&q.get))Z=SZ(z,J,Z)()}return QQ(Z)?z6(Z):Z},has(f,J){if(J===lj||J===JJ||J===HX||J===gG||J===eJ||J==="__proto__")return!0;return VX()&&SZ(HQ(f,eJ),J)(),J in f},set(){return console.warn("Cannot mutate a Store directly"),!0},deleteProperty(){return console.warn("Cannot mutate a Store directly"),!0},ownKeys:RN,getOwnPropertyDescriptor:gN};Zc=Symbol("store-root")});function jQ(f){let J=gJ();return{provider:(Y)=>{let z=f.init(Y);return b(X0,{get when(){return z.ready===void 0||z.ready===!0},get children(){return b(J.Provider,{value:z,get children(){return Y.children}})}})},use(){let Y=u1(J);if(!Y)throw Error(`${f.name} context must be used within a context provider`);return Y}}}var aj=C(()=>{P();P();Wf()});import{RGBA as Oz}from"@opentui/core";function yN(){return Object.keys(z1.themes)}function IZ(f){return Boolean(z1.themes[f])}function rj(f,J){if(!f)return!1;if(!J||typeof J!=="object"||!J.theme)return!1;return Az("themes",{...z1.themes,[f]:J}),!0}function $j(f,J="dark"){let Y=f.defs??{};function z(H,B=[]){if(typeof H==="string"){if(H==="transparent"||H==="none")return Oz.fromInts(0,0,0,0);if(H.startsWith("#"))return Oz.fromHex(H);if(B.includes(H))return Oz.fromInts(0,0,0);let V=Y[H]??f.theme[H];if(V===void 0)return Oz.fromInts(0,0,0);return z(V,[...B,H])}return z(H[J],B)}let G={};for(let[H,B]of Object.entries(f.theme))G[H]=z(B);let Z=G.text??Oz.fromHex("#ffffff"),q=G.background??Oz.fromHex("#000000");return{...{primary:G.primary??Z,secondary:G.secondary??Z,accent:G.accent??G.primary??Z,error:G.error??Z,warning:G.warning??Z,success:G.success??Z,info:G.info??Z,text:Z,textMuted:G.textMuted??Z,background:q,backgroundPanel:G.backgroundPanel??q,backgroundElement:G.backgroundElement??q,backgroundMenu:G.backgroundMenu??G.backgroundElement??q,backgroundDialog:G.backgroundDialog??G.backgroundPanel??q,border:G.border??Z,borderActive:G.borderActive??G.border??Z,borderSubtle:G.borderSubtle??G.border??Z,diffAdded:G.diffAdded??G.success??Z,diffRemoved:G.diffRemoved??G.error??Z,diffContext:G.diffContext??G.textMuted??Z,diffHunkHeader:G.diffHunkHeader??G.textMuted??Z,diffAddedBg:G.diffAddedBg??q,diffRemovedBg:G.diffRemovedBg??q,selectedListItemText:G.selectedListItemText??q},...G}}var NN,gz,z1,Az,d0,q6;var Ef=C(()=>{P();Wf();RG();aj();qq();Qq();Hq();Bq();jq();Wq();Vq();NN={claude:oz,conductor:sz,nord:ez,opencode:fG,dracula:tz,tokyonight:YG,"osaka-jade":JG},gz=["primary","success","info"],[z1,Az]=uJ({themes:{...NN},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:d0,provider:q6}=jQ({name:"Theme",init:(f)=>{if(f.mode)Az("mode",f.mode);if(f.theme&&IZ(f.theme))Az("active",f.theme);let J=Y1(),Y=K0(()=>{let G=z1.themes[z1.active];if(G)return $j(G,z1.mode);let Z=z1.themes.claude??z1.themes.opencode??Object.values(z1.themes)[0];if(!Z)return $j({theme:{background:"#000000",text:"#ffffff"}},z1.mode);return $j(Z,z1.mode)}),z=K0(()=>{let G=Y(),Z=G[z1.focusAccent]??G.primary,q={...G,focusAccent:Z};if(!z1.transparentBackground)return q;let Q=Oz.fromInts(0,0,0,0);return{...q,background:Q,backgroundPanel:Q}});return ff(()=>{J?.setBackgroundColor(z().background)}),{theme:new Proxy({},{get(G,Z){let q=z();return q[Z]??q.text}}),get selected(){return z1.active},get transparentBackground(){return z1.transparentBackground},get focusAccent(){return z1.focusAccent},mode(){return z1.mode},set(G){if(!IZ(G))return!1;return Az("active",G),!0},setMode(G){Az("mode",G)},setTransparentBackground(G){Az("transparentBackground",G)},setFocusAccent(G){Az("focusAccent",G)},all(){return yN()},has(G){return IZ(G)}}}}))});var Q6,H6;var B6=C(()=>{Q6={cancel:"Cancel",confirm:"Confirm",rename:{defaultTitle:"Rename task",defaultFieldLabel:"title",footerHint:"enter {submitLabel} \xB7 esc cancel",defaultSubmitLabel:"rename"}},H6={cancel:"\u53D6\u6D88",confirm:"\u786E\u8BA4",rename:{defaultTitle:"\u91CD\u547D\u540D\u4EFB\u52A1",defaultFieldLabel:"\u540D\u79F0",footerHint:"enter {submitLabel} \xB7 esc \u53D6\u6D88",defaultSubmitLabel:"\u91CD\u547D\u540D"}}});var j6,W6;var V6=C(()=>{j6={tabs:{all:"All",changes:"Changes"},actions:{zen:"zen",createPR:"create PR"},legend:{changes:"M modified \xB7 A added \xB7 D deleted \xB7 ? untracked"},empty:{noTask:"(no task \u2014 press n to create)",noFiles:"(empty worktree)",noChanges:"(no changes \u2014 clean worktree)"},error:{retryHint:"press r to retry",notGitRepo:"not a git repository",pathMissing:"worktree path is missing",permissionDenied:"permission denied",gitNotInstalled:"git is not installed",gitFailed:"git command failed"},footer:{openHint:"\u21B5 open"}},W6={tabs:{all:"\u5168\u90E8",changes:"\u6539\u52A8"},actions:{zen:"\u4E13\u6CE8\u6A21\u5F0F",createPR:"\u521B\u5EFA PR"},legend:{changes:"M \u5DF2\u4FEE\u6539 \xB7 A \u5DF2\u6DFB\u52A0 \xB7 D \u5DF2\u5220\u9664 \xB7 ? \u672A\u8DDF\u8E2A"},empty:{noTask:"\uFF08\u6682\u65E0\u4EFB\u52A1 \u2014 \u6309 n \u521B\u5EFA\uFF09",noFiles:"\uFF08worktree \u4E3A\u7A7A\uFF09",noChanges:"\uFF08\u65E0\u6539\u52A8 \u2014 worktree \u5E72\u51C0\uFF09"},error:{retryHint:"\u6309 r \u91CD\u8BD5",notGitRepo:"\u4E0D\u662F git \u4ED3\u5E93",pathMissing:"worktree \u8DEF\u5F84\u4E0D\u5B58\u5728",permissionDenied:"\u6743\u9650\u4E0D\u8DB3",gitNotInstalled:"\u672A\u5B89\u88C5 git",gitFailed:"git \u547D\u4EE4\u5931\u8D25"},footer:{openHint:"\u21B5 \u6253\u5F00"}}});var K6,U6;var D6=C(()=>{K6={title:"kobe \u2014 keybindings",esc:"esc"},U6={title:"kobe \u2014 \u5FEB\u6377\u952E",esc:"esc"}});var L6,M6;var F6=C(()=>{L6={category:{Global:"Global",Sidebar:"Sidebar",Workspace:"Workspace",Navigation:"Navigation","Tasks pane":"Tasks pane","Workspace (tmux)":"Workspace (tmux)",Files:"Files",Terminal:"Terminal",Dialog:"Dialog"},desc:{"help.open":"Show keybindings help","task.new":"New task","task.openEditor":"Open active task worktree in editor","settings.open":"Open settings","settings.open.sidebar":"Open settings","app.quit":"Quit (with confirm)","focus.sidebar":"Back to sidebar (tasks)","focus.numeric":"Jump to pane (h=sidebar, j=workspace, k=files, l=terminal)","chat.interrupt":"Interrupt current turn (esc while streaming)","sidebar.nav":"Move cursor up/down","sidebar.select":"Open the selected task","sidebar.goto":"Top / bottom of list (gg or shift-G)","sidebar.rename":"Rename task","sidebar.archive":"Toggle archive","sidebar.localMerge":"Local merge task into parent repo (Shift+M)","sidebar.pin":"Pin / unpin task at top (Shift+P)","sidebar.view":"Switch view (Working session \u2194 Archives)","sidebar.sort":"Switch task sort (default \u2194 recent)","sidebar.projectFilter":"Cycle task project filter","sidebar.delete":"Delete task (with confirm)","sidebar.search.enter":"Search tasks (fuzzy filter)","sidebar.search.nav":"Move highlight in search results","sidebar.search.submit":"Select search match and exit search","sidebar.search.cancel":"Cancel search (restore prior selection)","tasks.openWorktree":"Open selected task's worktree in your editor","tasks.renameBranch":"Rename the selected task's git branch","tasks.cycleEngine":"Cycle engine vendor (claude \u2194 codex \u2194 \u2026) \u2014 applies on reopen","tasks.update":"Open the update page (when a new version is available)","tasks.focusEngine":"Focus the engine pane of the current window","tasks.toggleKeys":"Collapse / expand the keys legend","tmux.quickTask":"Quick new task (tmux prefix, then f)","tmux.engineTab":"Open the engine in a new tab (tmux prefix, then t)","tmux.layout.workspaceSplit":"Add a temporary workspace split (tmux prefix, then s)","tmux.layout.workspaceClose":"Close the focused temporary workspace split (tmux prefix, then x)","tmux.layout.workspaceReset":"Close all temporary workspace splits (tmux prefix, then r)","tmux.layout.tasksToggle":"Hide / restore the Tasks pane (tmux prefix, then a)","tmux.layout.opsToggle":"Toggle the file/Ops pane (tmux prefix, then o)","tmux.layout.terminalToggle":"Hide / restore the terminal pane (tmux prefix, then z)","tmux.layout.zenToggle":"Zen mode \u2014 collapse to the engine pane (tmux prefix, then space)","chat.send":"Send message (composer)","chat.newline":"Newline in composer","chat.cycle-mode":"Cycle permission mode (composer)","chat.steer":"Steer (interrupt + send) \u2014 mid-stream only","chat.tab.new":"New chat tab","chat.fork.new":"Quick-fork: create child task seeded with current repo/branch/model","chat.session.resume":"Resume a prior session in this task's worktree","chat.tab.close":"Close chat tab","chat.tab.rename":"Rename active chat tab","chat.tab.cycle-next":"Next chat tab","chat.tab.cycle-prev":"Previous chat tab","chat.question.nav":"Move highlight in question picker","chat.question.toggle":"Toggle highlighted option in question picker","chat.question.submit":"Advance / submit question picker","chat.question.pick-number":"Pick option by number in question picker","files.nav":"Move cursor up/down","files.hierarchy":"Collapse / expand tree level","files.open":"Open file in nvim (diff vs HEAD when changed)","files.tab":"Switch tab (cycle All / Changes)","files.refresh":"Refresh","files.openExternal":"Open file in system default app (audio / video / pdf preview)","files.mention":"Inject @<path> mention into the engine pane","files.createPR":"Create PR from the current task","terminal.scroll-up":"Scroll scrollback up","terminal.scroll-down":"Scroll scrollback down","terminal.reset":"Reset terminal \u2014 kill the current shell and respawn","dialog.cancel":"Close the top dialog (esc)","dialog.newtask.tab.cycle":"Switch New Task tab (Existing / New Repo)"}},M6={category:{Global:"\u5168\u5C40",Sidebar:"\u4FA7\u8FB9\u680F",Workspace:"\u5DE5\u4F5C\u533A",Navigation:"\u5BFC\u822A","Tasks pane":"\u4EFB\u52A1\u9762\u677F","Workspace (tmux)":"\u5DE5\u4F5C\u533A\uFF08tmux\uFF09",Files:"\u6587\u4EF6",Terminal:"\u7EC8\u7AEF",Dialog:"\u5BF9\u8BDD\u6846"},desc:{"help.open":"\u663E\u793A\u5FEB\u6377\u952E\u5E2E\u52A9","task.new":"\u65B0\u5EFA\u4EFB\u52A1","task.openEditor":"\u5728\u7F16\u8F91\u5668\u4E2D\u6253\u5F00\u5F53\u524D\u4EFB\u52A1\u7684 worktree","settings.open":"\u6253\u5F00\u8BBE\u7F6E","settings.open.sidebar":"\u6253\u5F00\u8BBE\u7F6E","app.quit":"\u9000\u51FA\uFF08\u9700\u786E\u8BA4\uFF09","focus.sidebar":"\u8FD4\u56DE\u4FA7\u8FB9\u680F\uFF08\u4EFB\u52A1\u5217\u8868\uFF09","focus.numeric":"\u8DF3\u8F6C\u5230\u9762\u677F\uFF08h=\u4FA7\u8FB9\u680F\uFF0Cj=\u5DE5\u4F5C\u533A\uFF0Ck=\u6587\u4EF6\uFF0Cl=\u7EC8\u7AEF\uFF09","chat.interrupt":"\u4E2D\u65AD\u5F53\u524D\u8F6E\u6B21\uFF08\u6D41\u5F0F\u8F93\u51FA\u4E2D\u6309 esc\uFF09","sidebar.nav":"\u4E0A\u4E0B\u79FB\u52A8\u5149\u6807","sidebar.select":"\u6253\u5F00\u9009\u4E2D\u7684\u4EFB\u52A1","sidebar.goto":"\u8DF3\u5230\u5217\u8868\u9876\u90E8 / \u5E95\u90E8\uFF08gg \u6216 shift-G\uFF09","sidebar.rename":"\u91CD\u547D\u540D\u4EFB\u52A1","sidebar.archive":"\u5207\u6362\u5F52\u6863\u72B6\u6001","sidebar.localMerge":"\u5C06\u4EFB\u52A1\u672C\u5730\u5408\u5E76\u5230\u7236\u4ED3\u5E93\uFF08Shift+M\uFF09","sidebar.pin":"\u7F6E\u9876 / \u53D6\u6D88\u7F6E\u9876\u4EFB\u52A1\uFF08Shift+P\uFF09","sidebar.view":"\u5207\u6362\u89C6\u56FE\uFF08\u5DE5\u4F5C\u4F1A\u8BDD \u2194 \u5F52\u6863\uFF09","sidebar.sort":"\u5207\u6362\u4EFB\u52A1\u6392\u5E8F\u65B9\u5F0F\uFF08\u9ED8\u8BA4 \u2194 \u6700\u8FD1\uFF09","sidebar.projectFilter":"\u5FAA\u73AF\u5207\u6362\u4EFB\u52A1\u9879\u76EE\u7B5B\u9009","sidebar.delete":"\u5220\u9664\u4EFB\u52A1\uFF08\u9700\u786E\u8BA4\uFF09","sidebar.search.enter":"\u641C\u7D22\u4EFB\u52A1\uFF08\u6A21\u7CCA\u8FC7\u6EE4\uFF09","sidebar.search.nav":"\u5728\u641C\u7D22\u7ED3\u679C\u4E2D\u79FB\u52A8\u9AD8\u4EAE","sidebar.search.submit":"\u9009\u4E2D\u641C\u7D22\u5339\u914D\u9879\u5E76\u9000\u51FA\u641C\u7D22","sidebar.search.cancel":"\u53D6\u6D88\u641C\u7D22\uFF08\u6062\u590D\u4E4B\u524D\u7684\u9009\u4E2D\u9879\uFF09","tasks.openWorktree":"\u5728\u7F16\u8F91\u5668\u4E2D\u6253\u5F00\u9009\u4E2D\u4EFB\u52A1\u7684 worktree","tasks.renameBranch":"\u91CD\u547D\u540D\u9009\u4E2D\u4EFB\u52A1\u7684 git \u5206\u652F","tasks.cycleEngine":"\u5FAA\u73AF\u5207\u6362\u5F15\u64CE\u5382\u5546\uFF08claude \u2194 codex \u2194 \u2026\uFF09\u2014\u2014\u91CD\u65B0\u6253\u5F00\u540E\u751F\u6548","tasks.update":"\u6253\u5F00\u66F4\u65B0\u9875\u9762\uFF08\u6709\u65B0\u7248\u672C\u65F6\uFF09","tasks.focusEngine":"\u805A\u7126\u5F53\u524D\u7A97\u53E3\u7684\u5F15\u64CE\u9762\u677F","tasks.toggleKeys":"\u6298\u53E0 / \u5C55\u5F00\u5FEB\u6377\u952E\u8BF4\u660E","tmux.quickTask":"\u5FEB\u901F\u65B0\u5EFA\u4EFB\u52A1\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 f\uFF09","tmux.engineTab":"\u5728\u65B0\u6807\u7B7E\u9875\u4E2D\u6253\u5F00\u5F15\u64CE\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 t\uFF09","tmux.layout.workspaceSplit":"\u6DFB\u52A0\u4E34\u65F6\u5DE5\u4F5C\u533A\u5206\u5C4F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 s\uFF09","tmux.layout.workspaceClose":"\u5173\u95ED\u5F53\u524D\u805A\u7126\u7684\u4E34\u65F6\u5DE5\u4F5C\u533A\u5206\u5C4F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 x\uFF09","tmux.layout.workspaceReset":"\u5173\u95ED\u6240\u6709\u4E34\u65F6\u5DE5\u4F5C\u533A\u5206\u5C4F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 r\uFF09","tmux.layout.tasksToggle":"\u9690\u85CF / \u6062\u590D\u4EFB\u52A1\u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 a\uFF09","tmux.layout.opsToggle":"\u5207\u6362\u6587\u4EF6/Ops \u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 o\uFF09","tmux.layout.terminalToggle":"\u9690\u85CF / \u6062\u590D\u7EC8\u7AEF\u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 z\uFF09","tmux.layout.zenToggle":"\u4E13\u6CE8\u6A21\u5F0F\u2014\u2014\u6298\u53E0\u5230\u5F15\u64CE\u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 space\uFF09","chat.send":"\u53D1\u9001\u6D88\u606F\uFF08\u8F93\u5165\u6846\uFF09","chat.newline":"\u5728\u8F93\u5165\u6846\u4E2D\u6362\u884C","chat.cycle-mode":"\u5FAA\u73AF\u5207\u6362\u6743\u9650\u6A21\u5F0F\uFF08\u8F93\u5165\u6846\uFF09","chat.steer":"\u5F15\u5BFC\uFF08\u4E2D\u65AD\u5E76\u53D1\u9001\uFF09\u2014\u2014\u4EC5\u9650\u6D41\u5F0F\u8F93\u51FA\u4E2D","chat.tab.new":"\u65B0\u5EFA\u804A\u5929\u6807\u7B7E\u9875","chat.fork.new":"\u5FEB\u901F\u6D3E\u751F\uFF1A\u4EE5\u5F53\u524D\u4ED3\u5E93/\u5206\u652F/\u6A21\u578B\u521B\u5EFA\u5B50\u4EFB\u52A1","chat.session.resume":"\u5728\u6B64\u4EFB\u52A1\u7684 worktree \u4E2D\u6062\u590D\u4E4B\u524D\u7684\u4F1A\u8BDD","chat.tab.close":"\u5173\u95ED\u804A\u5929\u6807\u7B7E\u9875","chat.tab.rename":"\u91CD\u547D\u540D\u5F53\u524D\u804A\u5929\u6807\u7B7E\u9875","chat.tab.cycle-next":"\u4E0B\u4E00\u4E2A\u804A\u5929\u6807\u7B7E\u9875","chat.tab.cycle-prev":"\u4E0A\u4E00\u4E2A\u804A\u5929\u6807\u7B7E\u9875","chat.question.nav":"\u5728\u63D0\u95EE\u9009\u62E9\u5668\u4E2D\u79FB\u52A8\u9AD8\u4EAE","chat.question.toggle":"\u5728\u63D0\u95EE\u9009\u62E9\u5668\u4E2D\u5207\u6362\u9AD8\u4EAE\u9009\u9879","chat.question.submit":"\u63A8\u8FDB / \u63D0\u4EA4\u63D0\u95EE\u9009\u62E9\u5668","chat.question.pick-number":"\u5728\u63D0\u95EE\u9009\u62E9\u5668\u4E2D\u6309\u6570\u5B57\u9009\u62E9\u9009\u9879","files.nav":"\u4E0A\u4E0B\u79FB\u52A8\u5149\u6807","files.hierarchy":"\u6298\u53E0 / \u5C55\u5F00\u6811\u5C42\u7EA7","files.open":"\u5728 nvim \u4E2D\u6253\u5F00\u6587\u4EF6\uFF08\u6709\u53D8\u66F4\u65F6\u663E\u793A\u4E0E HEAD \u7684\u5DEE\u5F02\uFF09","files.tab":"\u5207\u6362\u6807\u7B7E\u9875\uFF08\u5FAA\u73AF \u5168\u90E8 / \u53D8\u66F4\uFF09","files.refresh":"\u5237\u65B0","files.openExternal":"\u5728\u7CFB\u7EDF\u9ED8\u8BA4\u5E94\u7528\u4E2D\u6253\u5F00\u6587\u4EF6\uFF08\u97F3\u9891 / \u89C6\u9891 / pdf \u9884\u89C8\uFF09","files.mention":"\u5C06 @<path> \u63D0\u53CA\u6CE8\u5165\u5F15\u64CE\u9762\u677F","files.createPR":"\u4ECE\u5F53\u524D\u4EFB\u52A1\u521B\u5EFA PR","terminal.scroll-up":"\u5411\u4E0A\u6EDA\u52A8\u56DE\u6EDA","terminal.scroll-down":"\u5411\u4E0B\u6EDA\u52A8\u56DE\u6EDA","terminal.reset":"\u91CD\u7F6E\u7EC8\u7AEF\u2014\u2014\u5173\u95ED\u5F53\u524D shell \u5E76\u91CD\u65B0\u542F\u52A8","dialog.cancel":"\u5173\u95ED\u9876\u5C42\u5BF9\u8BDD\u6846\uFF08esc\uFF09","dialog.newtask.tab.cycle":"\u5207\u6362\u65B0\u5EFA\u4EFB\u52A1\u6807\u7B7E\u9875\uFF08\u73B0\u6709\u4ED3\u5E93 / \u65B0\u4ED3\u5E93\uFF09"}}});var O6,A6;var g6=C(()=>{O6={title:"New task",tabs:{existing:"For Existing",clone:"For New Repo",adopt:"Adopt Worktree"},field:{engine:"engine",repo:"repo",fromBranch:"from branch",gitUrl:"git url",parentDir:"parent dir",folderName:"folder name",baseBranch:"base branch",adoptFilter:"filter (path glob)"},placeholder:{folderName:"auto from url",adoptFilter:"* \u2014 type e.g. feature-* to narrow"},hint:{engineCycle:"ctrl+e",remembered:"(remembered \u2014 next clone defaults to this dir)",currentDir:"(current dir)",noBranchesFound:"(no local branches found \u2014 typed text will be used as ref)",noMatchBranch:"(no match \u2014 typed text will be used as ref)",scanningWorktrees:"scanning worktrees\u2026",legend:"\u2191\u2193 pick \xB7 tab next field \xB7 \u2190\u2192 switch \xB7 enter done \xB7 esc cancel"},picker:{moreAbove:"\u2191 {count} more",moreBelow:"\u2193 {count} more"},adopt:{repoLine:"repo: {path}",repoNone:"(none)",noUnlinked:"no unlinked worktrees \u2014 every git worktree here is already a task",noMatch:"no worktrees match the filter",hintSelected:"{count} selected \xB7 enter toggles \xB7 ctrl+a all \xB7 Create imports",hintDefault:"enter toggles \xB7 ctrl+a all \xB7 Create imports the highlighted row"},clone:{progressFallback:"Cloning\u2026",progressInto:"Cloning into {target}\u2026"},button:{create:"[ Create ]",createFocused:"\u25B8 [ Create ]",cloning:"[ Cloning\u2026 ]"},error:{gitUrlRequired:"git URL is required",gitUrlInvalid:"does not look like a git URL: {url}",folderRequired:"folder name is required",folderHasSeparator:"folder name cannot contain path separators",parentRequired:"parent directory is required",parentNotFound:"parent directory does not exist: {path}",parentNotDir:"not a directory: {path}",targetExists:"target already exists: {path}",cloneFailed:"git clone failed: {error}",noAdoptable:"no adoptable worktrees to import"}},A6={title:"\u65B0\u5EFA\u4EFB\u52A1",tabs:{existing:"\u5DF2\u6709\u4ED3\u5E93",clone:"\u514B\u9686\u65B0\u4ED3\u5E93",adopt:"\u63A5\u7BA1 Worktree"},field:{engine:"\u5F15\u64CE",repo:"\u4ED3\u5E93",fromBranch:"\u57FA\u51C6\u5206\u652F",gitUrl:"git \u5730\u5740",parentDir:"\u7236\u76EE\u5F55",folderName:"\u6587\u4EF6\u5939\u540D",baseBranch:"\u57FA\u51C6\u5206\u652F",adoptFilter:"\u8FC7\u6EE4\uFF08\u8DEF\u5F84 glob\uFF09"},placeholder:{folderName:"\u81EA\u52A8\u4ECE\u5730\u5740\u63A8\u5BFC",adoptFilter:"* \u2014 \u8F93\u5165\u5982 feature-* \u6765\u7F29\u5C0F\u8303\u56F4"},hint:{engineCycle:"ctrl+e",remembered:"\uFF08\u5DF2\u8BB0\u4F4F \u2014 \u4E0B\u6B21\u514B\u9686\u9ED8\u8BA4\u4F7F\u7528\u6B64\u76EE\u5F55\uFF09",currentDir:"\uFF08\u5F53\u524D\u76EE\u5F55\uFF09",noBranchesFound:"\uFF08\u672A\u627E\u5230\u672C\u5730\u5206\u652F \u2014 \u5C06\u76F4\u63A5\u4F7F\u7528\u8F93\u5165\u6587\u672C\u4F5C\u4E3A ref\uFF09",noMatchBranch:"\uFF08\u65E0\u5339\u914D \u2014 \u5C06\u76F4\u63A5\u4F7F\u7528\u8F93\u5165\u6587\u672C\u4F5C\u4E3A ref\uFF09",scanningWorktrees:"\u6B63\u5728\u626B\u63CF worktree\u2026",legend:"\u2191\u2193 \u9009\u62E9 \xB7 tab \u4E0B\u4E00\u5B57\u6BB5 \xB7 \u2190\u2192 \u5207\u6362 \xB7 enter \u786E\u8BA4 \xB7 esc \u53D6\u6D88"},picker:{moreAbove:"\u2191 \u8FD8\u6709 {count} \u9879",moreBelow:"\u2193 \u8FD8\u6709 {count} \u9879"},adopt:{repoLine:"\u4ED3\u5E93\uFF1A{path}",repoNone:"\uFF08\u65E0\uFF09",noUnlinked:"\u6CA1\u6709\u672A\u5173\u8054\u7684 worktree \u2014 \u6B64\u4ED3\u5E93\u6240\u6709 git worktree \u5747\u5DF2\u662F\u4EFB\u52A1",noMatch:"\u6CA1\u6709 worktree \u5339\u914D\u6B64\u8FC7\u6EE4\u6761\u4EF6",hintSelected:"\u5DF2\u9009 {count} \u9879 \xB7 enter \u5207\u6362\u9009\u4E2D \xB7 ctrl+a \u5168\u9009 \xB7 \u521B\u5EFA \u5BFC\u5165",hintDefault:"enter \u5207\u6362\u9009\u4E2D \xB7 ctrl+a \u5168\u9009 \xB7 \u521B\u5EFA \u5C06\u5BFC\u5165\u9AD8\u4EAE\u884C"},clone:{progressFallback:"\u514B\u9686\u4E2D\u2026",progressInto:"\u6B63\u5728\u514B\u9686\u5230 {target}\u2026"},button:{create:"[ \u521B\u5EFA ]",createFocused:"\u25B8 [ \u521B\u5EFA ]",cloning:"[ \u514B\u9686\u4E2D\u2026 ]"},error:{gitUrlRequired:"git \u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A",gitUrlInvalid:"\u4E0D\u50CF\u662F\u6709\u6548\u7684 git \u5730\u5740\uFF1A{url}",folderRequired:"\u6587\u4EF6\u5939\u540D\u4E0D\u80FD\u4E3A\u7A7A",folderHasSeparator:"\u6587\u4EF6\u5939\u540D\u4E0D\u80FD\u5305\u542B\u8DEF\u5F84\u5206\u9694\u7B26",parentRequired:"\u7236\u76EE\u5F55\u4E0D\u80FD\u4E3A\u7A7A",parentNotFound:"\u7236\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A{path}",parentNotDir:"\u4E0D\u662F\u76EE\u5F55\uFF1A{path}",targetExists:"\u76EE\u6807\u8DEF\u5F84\u5DF2\u5B58\u5728\uFF1A{path}",cloneFailed:"git clone \u5931\u8D25\uFF1A{error}",noAdoptable:"\u6CA1\u6709\u53EF\u63A5\u7BA1\u7684 worktree"}}});var R6,C6;var k6=C(()=>{R6={badge:{newActivity:"\u25CF new"},preview:{diffVsHead:"diff vs HEAD",file:"file",closeHint:"\xB7 q to close",loading:"loading\u2026"}},C6={badge:{newActivity:"\u25CF \u65B0\u52A8\u6001"},preview:{diffVsHead:"\u4E0E HEAD \u5BF9\u6BD4",file:"\u6587\u4EF6",closeHint:"\xB7 q \u5173\u95ED",loading:"\u52A0\u8F7D\u4E2D\u2026"}}});var N6,y6;var b6=C(()=>{N6={title:"Quick task \xB7 {repoLabel}",esc:"esc",promptLabel:"prompt",promptPlaceholder:"what should this task do?",engineLabel:"engine",branchLabel:"branch",legend:"enter create \xB7 tab field \xB7 ctrl+e engine \xB7 esc cancel"},y6={title:"\u5FEB\u901F\u4EFB\u52A1 \xB7 {repoLabel}",esc:"esc",promptLabel:"\u63D0\u793A\u8BCD",promptPlaceholder:"\u8FD9\u4E2A\u4EFB\u52A1\u8981\u505A\u4EC0\u4E48\uFF1F",engineLabel:"\u5F15\u64CE",branchLabel:"\u5206\u652F",legend:"enter \u521B\u5EFA \xB7 tab \u5207\u6362\u5B57\u6BB5 \xB7 ctrl+e \u5207\u6362\u5F15\u64CE \xB7 esc \u53D6\u6D88"}});var S6,I6;var T6=C(()=>{S6={title:"Settings",esc:"esc",nav:{default:"j/k pick \xB7 h/l switch level \xB7 enter activate \xB7 esc close",feedback:"tab next field \xB7 enter send \xB7 esc close"},sections:{general:"General",engines:"Engines",accounts:"Accounts",keys:"Keybindings",feedback:"Feedback",dev:"Dev"},general:{theme:"Theme",themeHint:"l to enter list \xB7 j/k to highlight \xB7 enter to apply",language:"Language",languageHint:"Display language for kobe's UI. l to enter list \xB7 j/k to highlight \xB7 enter to apply.",transparent:"Transparent background",transparentHint:"Drops the renderer's bg fill so the host terminal shows through. `t` toggles.",on:"[x] on",off:"[ ] off",focusAccent:"Focus accent",focusAccentHint:"Color of focused pane title, \u258C marker, and split borders.",accentPrimary:"Primary (brand accent)",accentSuccess:"Success (legacy green)",accentInfo:"Info (cool blue)",notifications:"Notifications",notificationsHint:"Fired when a background chat tab finishes or pauses on an approval. Toast = bottom-right popup; Sound = terminal bell + chime. Tab-chip unread dot is always on.",toast:"Toast",sound:"Sound",zen:"Zen mode",zenHint:"The `zen` chip (above the file list) and `prefix`+space collapse the ChatTab to the engine pane \u2014 hiding the file and terminal panes. Keep this on to leave the Tasks rail visible so you can always get back out.",zenKeepTasks:"Keep Tasks pane in zen mode",surface:"Settings page",surfaceHint:"Where Settings and the other full dialogs (new task, rename) open. ChatTab = a dedicated full-window page alongside the engine tabs; Task panel = an overlay inside the left Tasks pane. enter to pick.",surfaceChattab:"ChatTab (separate page)",surfaceTaskpanel:"Task panel (in-pane overlay)",editor:"Editor",editorHint:"What `e` opens a file with in the file tree (enter stays the read-only preview). `auto` (default) follows $VISUAL / $EDITOR, else auto-detects nvim / vim / emacs / nano. enter on the row below cycles auto / vim / nvim / nano / emacs / custom; if the editor isn't installed it falls back to the preview.",editorRow:"editor: < {kind} > (enter to change)",editorCustom:"custom: {cmd}",editorCustomUnset:"(unset \u2014 enter to edit)"},engines:{title:"Launch command",hint:"The command each engine's task pane runs. Override a built-in when your binary isn't on PATH as `claude` / `codex` (e.g. it's `cl`) or to pass default flags, or add your own engine. \u25CF = default engine for new tasks (also set by Ctrl+Shift+T). enter edit command \xB7 r rename \xB7 x reset/remove \xB7 d set default.",defaultTag:" (default)",customTag:" (custom)",addEngine:"+ Add engine"},accounts:{title:"Accounts",hint:"Read-only view of locally-detected engine accounts. Login flows land here later.",checking:"Checking\u2026",notLoggedIn:"\u25CB Not logged in",loggedIn:"\u25CF Logged in: {email}",apiKeyConfigured:"\u25CF API key configured",chatgptLogin:"\u25CF ChatGPT login: {email}",tokenConfigured:"\u25CF Token configured ({source})",copilotDetected:"\u25CF Copilot login detected"},keybindings:{title:"Keybindings",hint:"Rebind chords by editing the YAML below, then restart kobe (or respawn the pane). Press F1 anywhere for the live keymap with every binding id.",configFile:"Config file",notCreated:" (not created yet)",example:"Example",overridesApplied:"Overrides applied",none:"none",warnings:"Warnings"},feedback:{title:"Feedback",hint:"Sends a GitHub Discussion to the kobe repo through `gh`. Requires `gh auth login`; category defaults to Feedback.",titleLabel:"title",titlePlaceholder:"Short summary",descriptionLabel:"description",descriptionPlaceholder:"What happened? (enter sends)",send:"[enter] Send to GitHub Discussions"},dev:{reset:"Reset UI state",resetHint:"Clears ~/.config/kobe/state.json and ~/.kobe/tasks.json, then quits kobe \u2014 relaunch to start fresh. Working session / Archive lists, pane sizes, theme, model picks all reset. Worktrees on disk and Claude Code session history are not touched.",resetButton:"[enter] Reset",restart:"Restart backend",restartHint:"Stops the kobe daemon and quits this kobe window so the next launch spawns a fresh daemon \u2014 picks up daemon / orchestrator / engine edits without a process kill. Other attached kobe windows will lose their connection too.",restartButton:"[enter] Restart",doctorHint:"Daemon wedged or unresponsive? From a shell, run `kobe doctor` to diagnose, or `kobe reset` to stop the daemon + kill sessions (keeps your tasks). Use `kobe reset --hard` only to also wipe the task index + UI state.",experimental:"Experimental",remoteHint:"Remote projects (SSH): register a project whose git worktrees + engine run on another host over SSH, driven from this local kobe. Unfinished \u2014 file/diff panes still degrade for remote. Enables `kobe add --remote`.",remoteOn:"[x] Remote projects (on)",remoteOff:"[ ] Remote projects (off)",autoStatusHint:"Auto status flow: a backlog task moves to in_progress when its engine starts a turn, and new claude sessions get a system-prompt note telling the agent to set in_review itself when the work is done. Never touches done/canceled.",autoStatusOn:"[x] Auto status flow (on)",autoStatusOff:"[ ] Auto status flow (off)",dispatcherHint:"Field-notes dispatcher: task sessions file one-line gotchas (`kobe api note`), the daemon forwards each to the repo's main session, and that session relays them to the in-flight tasks that benefit (`kobe api dispatch`). Web-hosted sessions receive the relays today.",dispatcherOn:"[x] Field-notes dispatcher (on)",dispatcherOff:"[ ] Field-notes dispatcher (off)"}},I6={title:"\u8BBE\u7F6E",esc:"esc",nav:{default:"j/k \u9009\u62E9 \xB7 h/l \u5207\u6362\u5C42\u7EA7 \xB7 enter \u786E\u8BA4 \xB7 esc \u5173\u95ED",feedback:"tab \u4E0B\u4E00\u9879 \xB7 enter \u53D1\u9001 \xB7 esc \u5173\u95ED"},sections:{general:"\u901A\u7528",engines:"\u5F15\u64CE",accounts:"\u8D26\u6237",keys:"\u5FEB\u6377\u952E",feedback:"\u53CD\u9988",dev:"\u5F00\u53D1"},general:{theme:"\u4E3B\u9898",themeHint:"l \u8FDB\u5165\u5217\u8868 \xB7 j/k \u9AD8\u4EAE \xB7 enter \u5E94\u7528",language:"\u8BED\u8A00",languageHint:"kobe \u754C\u9762\u7684\u663E\u793A\u8BED\u8A00\u3002l \u8FDB\u5165\u5217\u8868 \xB7 j/k \u9AD8\u4EAE \xB7 enter \u5E94\u7528\u3002",transparent:"\u900F\u660E\u80CC\u666F",transparentHint:"\u53BB\u6389\u6E32\u67D3\u5668\u7684\u80CC\u666F\u586B\u5145\uFF0C\u8BA9\u5BBF\u4E3B\u7EC8\u7AEF\u900F\u51FA\u6765\u3002\u6309 `t` \u5207\u6362\u3002",on:"[x] \u5F00",off:"[ ] \u5173",focusAccent:"\u805A\u7126\u5F3A\u8C03\u8272",focusAccentHint:"\u805A\u7126\u9762\u677F\u6807\u9898\u3001\u258C \u6807\u8BB0\u548C\u5206\u9694\u8FB9\u6846\u7684\u989C\u8272\u3002",accentPrimary:"\u4E3B\u8272\uFF08\u54C1\u724C\u5F3A\u8C03\u8272\uFF09",accentSuccess:"\u6210\u529F\u8272\uFF08\u4F20\u7EDF\u7EFF\uFF09",accentInfo:"\u4FE1\u606F\u8272\uFF08\u51B7\u84DD\uFF09",notifications:"\u901A\u77E5",notificationsHint:"\u540E\u53F0\u804A\u5929\u9875\u5B8C\u6210\u6216\u5728\u5BA1\u6279\u5904\u6682\u505C\u65F6\u89E6\u53D1\u3002Toast = \u53F3\u4E0B\u89D2\u5F39\u7A97\uFF1BSound = \u7EC8\u7AEF\u54CD\u94C3 + \u63D0\u793A\u97F3\u3002\u6807\u7B7E\u4E0A\u7684\u672A\u8BFB\u5706\u70B9\u59CB\u7EC8\u5F00\u542F\u3002",toast:"Toast \u5F39\u7A97",sound:"\u58F0\u97F3",zen:"\u7985\u6A21\u5F0F",zenHint:"`zen` \u6807\u8BB0\uFF08\u6587\u4EF6\u5217\u8868\u4E0A\u65B9\uFF09\u548C `prefix`+\u7A7A\u683C \u4F1A\u628A ChatTab \u6536\u8D77\u5230\u5F15\u64CE\u9762\u677F\u2014\u2014\u9690\u85CF\u6587\u4EF6\u4E0E\u7EC8\u7AEF\u9762\u677F\u3002\u4FDD\u6301\u5F00\u542F\u53EF\u8BA9 Tasks \u4FA7\u680F\u59CB\u7EC8\u53EF\u89C1\uFF0C\u65B9\u4FBF\u968F\u65F6\u9000\u51FA\u3002",zenKeepTasks:"\u7985\u6A21\u5F0F\u4E0B\u4FDD\u7559 Tasks \u9762\u677F",surface:"\u8BBE\u7F6E\u9875\u9762",surfaceHint:"\u8BBE\u7F6E\u53CA\u5176\u4ED6\u5B8C\u6574\u5BF9\u8BDD\u6846\uFF08\u65B0\u5EFA\u4EFB\u52A1\u3001\u91CD\u547D\u540D\uFF09\u7684\u6253\u5F00\u4F4D\u7F6E\u3002ChatTab = \u4E0E\u5F15\u64CE\u6807\u7B7E\u5E76\u5217\u7684\u72EC\u7ACB\u6574\u7A97\u9875\u9762\uFF1BTask panel = \u5DE6\u4FA7 Tasks \u9762\u677F\u5185\u7684\u6D6E\u5C42\u3002enter \u9009\u62E9\u3002",surfaceChattab:"ChatTab\uFF08\u72EC\u7ACB\u9875\u9762\uFF09",surfaceTaskpanel:"Task panel\uFF08\u9762\u677F\u5185\u6D6E\u5C42\uFF09",editor:"\u7F16\u8F91\u5668",editorHint:"\u6587\u4EF6\u6811\u91CC\u6309 `e` \u7528\u4EC0\u4E48\u6253\u5F00\u6587\u4EF6\uFF08enter \u4ECD\u662F\u53EA\u8BFB\u9884\u89C8\uFF09\u3002`auto`\uFF08\u9ED8\u8BA4\uFF09\u8DDF\u968F $VISUAL / $EDITOR\uFF0C\u5426\u5219\u81EA\u52A8\u63A2\u6D4B nvim / vim / emacs / nano\u3002\u5728\u4E0B\u65B9\u4E00\u884C\u6309 enter \u5728 auto / vim / nvim / nano / emacs / custom \u95F4\u5FAA\u73AF\uFF1B\u7F16\u8F91\u5668\u672A\u5B89\u88C5\u65F6\u56DE\u9000\u5230\u9884\u89C8\u3002",editorRow:"\u7F16\u8F91\u5668: < {kind} > (enter \u5207\u6362)",editorCustom:"\u81EA\u5B9A\u4E49: {cmd}",editorCustomUnset:"(\u672A\u8BBE\u7F6E \u2014 enter \u7F16\u8F91)"},engines:{title:"\u542F\u52A8\u547D\u4EE4",hint:"\u6BCF\u4E2A\u5F15\u64CE\u7684\u4EFB\u52A1\u9762\u677F\u8FD0\u884C\u7684\u547D\u4EE4\u3002\u5F53\u4E8C\u8FDB\u5236\u6587\u4EF6\u4E0D\u5728 PATH \u4E0A\u7684 `claude` / `codex` \u540D\u4E0B\uFF08\u6BD4\u5982\u53EB `cl`\uFF09\u3001\u8981\u4F20\u9ED8\u8BA4\u53C2\u6570\uFF0C\u6216\u8981\u6DFB\u52A0\u81EA\u5DF1\u7684\u5F15\u64CE\u65F6\uFF0C\u53EF\u8986\u76D6\u5185\u7F6E\u9879\u3002\u25CF = \u65B0\u4EFB\u52A1\u7684\u9ED8\u8BA4\u5F15\u64CE\uFF08\u4E5F\u53EF\u7528 Ctrl+Shift+T \u8BBE\u7F6E\uFF09\u3002enter \u7F16\u8F91\u547D\u4EE4 \xB7 r \u91CD\u547D\u540D \xB7 x \u91CD\u7F6E/\u79FB\u9664 \xB7 d \u8BBE\u4E3A\u9ED8\u8BA4\u3002",defaultTag:" (\u9ED8\u8BA4)",customTag:" (\u81EA\u5B9A\u4E49)",addEngine:"+ \u6DFB\u52A0\u5F15\u64CE"},accounts:{title:"\u8D26\u6237",hint:"\u672C\u5730\u63A2\u6D4B\u5230\u7684\u5F15\u64CE\u8D26\u6237\u7684\u53EA\u8BFB\u89C6\u56FE\u3002\u767B\u5F55\u6D41\u7A0B\u7A0D\u540E\u4F1A\u63A5\u5165\u8FD9\u91CC\u3002",checking:"\u68C0\u67E5\u4E2D\u2026",notLoggedIn:"\u25CB \u672A\u767B\u5F55",loggedIn:"\u25CF \u5DF2\u767B\u5F55: {email}",apiKeyConfigured:"\u25CF \u5DF2\u914D\u7F6E API key",chatgptLogin:"\u25CF ChatGPT \u767B\u5F55: {email}",tokenConfigured:"\u25CF \u5DF2\u914D\u7F6E Token ({source})",copilotDetected:"\u25CF \u68C0\u6D4B\u5230 Copilot \u767B\u5F55"},keybindings:{title:"\u5FEB\u6377\u952E",hint:"\u7F16\u8F91\u4E0B\u9762\u7684 YAML \u6765\u91CD\u7ED1\u5B9A\u6309\u952E\uFF0C\u7136\u540E\u91CD\u542F kobe\uFF08\u6216\u91CD\u5EFA\u9762\u677F\uFF09\u3002\u4EFB\u610F\u4F4D\u7F6E\u6309 F1 \u67E5\u770B\u5E26\u6BCF\u4E2A\u7ED1\u5B9A id \u7684\u5B9E\u65F6\u952E\u4F4D\u8868\u3002",configFile:"\u914D\u7F6E\u6587\u4EF6",notCreated:" (\u5C1A\u672A\u521B\u5EFA)",example:"\u793A\u4F8B",overridesApplied:"\u5DF2\u5E94\u7528\u7684\u8986\u76D6",none:"\u65E0",warnings:"\u8B66\u544A"},feedback:{title:"\u53CD\u9988",hint:"\u901A\u8FC7 `gh` \u5411 kobe \u4ED3\u5E93\u53D1\u4E00\u6761 GitHub Discussion\u3002\u9700\u8981 `gh auth login`\uFF1B\u5206\u7C7B\u9ED8\u8BA4\u4E3A Feedback\u3002",titleLabel:"\u6807\u9898",titlePlaceholder:"\u7B80\u77ED\u6982\u62EC",descriptionLabel:"\u63CF\u8FF0",descriptionPlaceholder:"\u53D1\u751F\u4E86\u4EC0\u4E48\uFF1F(enter \u53D1\u9001)",send:"[enter] \u53D1\u9001\u5230 GitHub Discussions"},dev:{reset:"\u91CD\u7F6E UI \u72B6\u6001",resetHint:"\u6E05\u7A7A ~/.config/kobe/state.json \u548C ~/.kobe/tasks.json\uFF0C\u7136\u540E\u9000\u51FA kobe\u2014\u2014\u91CD\u65B0\u542F\u52A8\u5373\u53EF\u4ECE\u5934\u5F00\u59CB\u3002\u5DE5\u4F5C\u4F1A\u8BDD / \u5F52\u6863\u5217\u8868\u3001\u9762\u677F\u5C3A\u5BF8\u3001\u4E3B\u9898\u3001\u6A21\u578B\u9009\u62E9\u90FD\u4F1A\u91CD\u7F6E\u3002\u78C1\u76D8\u4E0A\u7684 worktree \u548C Claude Code \u4F1A\u8BDD\u5386\u53F2\u4E0D\u53D7\u5F71\u54CD\u3002",resetButton:"[enter] \u91CD\u7F6E",restart:"\u91CD\u542F\u540E\u7AEF",restartHint:"\u505C\u6B62 kobe daemon \u5E76\u9000\u51FA\u5F53\u524D kobe \u7A97\u53E3\uFF0C\u4E0B\u6B21\u542F\u52A8\u4F1A\u62C9\u8D77\u4E00\u4E2A\u5168\u65B0\u7684 daemon\u2014\u2014\u65E0\u9700\u6740\u8FDB\u7A0B\u5373\u53EF\u5E94\u7528 daemon / orchestrator / engine \u7684\u6539\u52A8\u3002\u5176\u4ED6\u5DF2\u8FDE\u63A5\u7684 kobe \u7A97\u53E3\u4E5F\u4F1A\u65AD\u5F00\u8FDE\u63A5\u3002",restartButton:"[enter] \u91CD\u542F",doctorHint:"daemon \u5361\u4F4F\u6216\u65E0\u54CD\u5E94\uFF1F\u5728 shell \u91CC\u8FD0\u884C `kobe doctor` \u8BCA\u65AD\uFF0C\u6216 `kobe reset` \u505C\u6B62 daemon + \u6740\u6389\u4F1A\u8BDD\uFF08\u4FDD\u7559\u4F60\u7684\u4EFB\u52A1\uFF09\u3002\u53EA\u6709\u8981\u540C\u65F6\u6E05\u7A7A\u4EFB\u52A1\u7D22\u5F15 + UI \u72B6\u6001\u65F6\u624D\u7528 `kobe reset --hard`\u3002",experimental:"\u5B9E\u9A8C\u6027",remoteHint:"\u8FDC\u7A0B\u9879\u76EE\uFF08SSH\uFF09\uFF1A\u6CE8\u518C\u4E00\u4E2A git worktree + \u5F15\u64CE\u90FD\u901A\u8FC7 SSH \u8DD1\u5728\u53E6\u4E00\u53F0\u4E3B\u673A\u4E0A\u3001\u7531\u672C\u5730 kobe \u9A71\u52A8\u7684\u9879\u76EE\u3002\u5C1A\u672A\u5B8C\u6210\u2014\u2014\u6587\u4EF6/diff \u9762\u677F\u5BF9\u8FDC\u7A0B\u4ECD\u4F1A\u964D\u7EA7\u3002\u542F\u7528 `kobe add --remote`\u3002",remoteOn:"[x] \u8FDC\u7A0B\u9879\u76EE (\u5F00)",remoteOff:"[ ] \u8FDC\u7A0B\u9879\u76EE (\u5173)",autoStatusHint:"\u81EA\u52A8\u72B6\u6001\u6D41\u8F6C\uFF1Abacklog \u4EFB\u52A1\u5728\u5176\u5F15\u64CE\u5F00\u59CB\u4E00\u8F6E\u65F6\u79FB\u5230 in_progress\uFF0C\u65B0\u7684 claude \u4F1A\u8BDD\u4F1A\u62FF\u5230\u4E00\u6761\u7CFB\u7EDF\u63D0\u793A\uFF0C\u544A\u8BC9 agent \u5B8C\u6210\u540E\u81EA\u884C\u8BBE\u4E3A in_review\u3002\u7EDD\u4E0D\u89E6\u78B0 done/canceled\u3002",autoStatusOn:"[x] \u81EA\u52A8\u72B6\u6001\u6D41\u8F6C (\u5F00)",autoStatusOff:"[ ] \u81EA\u52A8\u72B6\u6001\u6D41\u8F6C (\u5173)",dispatcherHint:"\u73B0\u573A\u7B14\u8BB0\u8C03\u5EA6\u5668\uFF1A\u4EFB\u52A1\u4F1A\u8BDD\u63D0\u4EA4\u4E00\u884C\u7ECF\u9A8C\uFF08`kobe api note`\uFF09\uFF0Cdaemon \u5C06\u6BCF\u6761\u8F6C\u53D1\u7ED9\u4ED3\u5E93\u7684\u4E3B\u4F1A\u8BDD\uFF0C\u4E3B\u4F1A\u8BDD\u518D\u628A\u5B83\u4EEC\u8F6C\u8FBE\u7ED9\u80FD\u53D7\u76CA\u7684\u8FDB\u884C\u4E2D\u4EFB\u52A1\uFF08`kobe api dispatch`\uFF09\u3002\u76EE\u524D\u7531 Web \u6258\u7BA1\u7684\u4F1A\u8BDD\u4F1A\u6536\u5230\u8F6C\u8FBE\u3002",dispatcherOn:"[x] \u73B0\u573A\u7B14\u8BB0\u8C03\u5EA6\u5668 (\u5F00)",dispatcherOff:"[ ] \u73B0\u573A\u7B14\u8BB0\u8C03\u5EA6\u5668 (\u5173)"}}});var u6,E6;var x6=C(()=>{u6={view:{workspace:"Workspace",archives:"Archives"},header:{projects:"PROJECTS",tasks:"TASKS"},search:{placeholder:"fuzzy filter"},sort:"sort",project:{label:"Project",taskSingular:"task",taskPlural:"tasks"},moveChip:" move",empty:{noMatchSearch:"No matching tasks \u2014 esc to clear.",noActiveProject:"No active tasks for this project.",noArchivedProject:"No archived tasks for this project.",noActive:"No active tasks \u2014 press n or [+] to create one.",noArchived:"No archived tasks."},archiveHint:"a to unarchive",status:{done:"done",inReview:"in review",working:"working",backlog:"\u2014",canceled:"canceled",error:"error"},activity:{rateLimited:"rate limited",permissionNeeded:"needs permission",error:"error"},subtitle:{noTracking:"no activity tracking",materializing:"materializing"},hints:{headerFolded:"\u2500\u2500 keys ?\u25B8 \u2500\u2500",headerUnfolded:"\u2500\u2500 keys ?\u25BE \u2500\u2500",fullHelp:"full help",newTask:"new task",settings:"settings",open:"open",focusEngine:"focus engine",openWorktree:"open wt",delete:"delete",views:"views",project:"project",movePanes:"move panes",detach:"tasks\u2192detach",splits:"splits",panes:"panes",reorder:"reorder",done:"done"},toast:{noDaemonWorktree:"No daemon running \u2014 can't create the worktree",noDaemonOpen:"No daemon running \u2014 can't open this task",noEditor:"No editor found \u2014 set KOBE_OPEN_EDITOR (e.g. 'code', 'cursor', 'nvim')",openWorktreeFailed:"Couldn't open worktree with {label}",sessionStartFailed:"Couldn't start this task's session",moveTaskFailed:"Couldn't move task: {message}",alreadyLatest:"Already on the latest version (v{version})",worktreeErrorNotGit:"This project isn't a git repo yet \u2014 a task needs a git branch. Run `git init` (+ a first commit) in the project, then open the task. Non-git support is coming.",worktreeErrorGeneric:"Couldn't create the worktree: {message}"}},E6={view:{workspace:"\u5DE5\u4F5C\u533A",archives:"\u5F52\u6863"},header:{projects:"\u9879\u76EE",tasks:"\u4EFB\u52A1"},search:{placeholder:"\u6A21\u7CCA\u641C\u7D22"},sort:"\u6392\u5E8F",project:{label:"\u9879\u76EE",taskSingular:"\u4E2A\u4EFB\u52A1",taskPlural:"\u4E2A\u4EFB\u52A1"},moveChip:" \u79FB\u52A8",empty:{noMatchSearch:"\u65E0\u5339\u914D\u4EFB\u52A1\u2014\u2014\u6309 esc \u6E05\u9664\u3002",noActiveProject:"\u8BE5\u9879\u76EE\u6682\u65E0\u6D3B\u8DC3\u4EFB\u52A1\u3002",noArchivedProject:"\u8BE5\u9879\u76EE\u6682\u65E0\u5F52\u6863\u4EFB\u52A1\u3002",noActive:"\u6682\u65E0\u6D3B\u8DC3\u4EFB\u52A1\u2014\u2014\u6309 n \u6216 [+] \u65B0\u5EFA\u3002",noArchived:"\u6682\u65E0\u5F52\u6863\u4EFB\u52A1\u3002"},archiveHint:"a \u53D6\u6D88\u5F52\u6863",status:{done:"\u5DF2\u5B8C\u6210",inReview:"\u5BA1\u6838\u4E2D",working:"\u8FDB\u884C\u4E2D",backlog:"\u2014",canceled:"\u5DF2\u53D6\u6D88",error:"\u9519\u8BEF"},activity:{rateLimited:"\u8BF7\u6C42\u53D7\u9650",permissionNeeded:"\u7B49\u5F85\u6388\u6743",error:"\u9519\u8BEF"},subtitle:{noTracking:"\u4E0D\u8DDF\u8E2A\u6D3B\u52A8",materializing:"\u6B63\u5728\u521B\u5EFA worktree"},hints:{headerFolded:"\u2500\u2500 \u5FEB\u6377\u952E ?\u25B8 \u2500\u2500",headerUnfolded:"\u2500\u2500 \u5FEB\u6377\u952E ?\u25BE \u2500\u2500",fullHelp:"\u5B8C\u6574\u5E2E\u52A9",newTask:"\u65B0\u5EFA\u4EFB\u52A1",settings:"\u8BBE\u7F6E",open:"\u6253\u5F00",focusEngine:"\u805A\u7126\u5F15\u64CE",openWorktree:"\u6253\u5F00 worktree",delete:"\u5220\u9664",views:"\u89C6\u56FE",project:"\u9879\u76EE",movePanes:"\u79FB\u52A8\u9762\u677F",detach:"\u4EFB\u52A1\u2192\u5206\u79BB",splits:"\u5206\u5272",panes:"\u9762\u677F",reorder:"\u91CD\u65B0\u6392\u5E8F",done:"\u5B8C\u6210"},toast:{noDaemonWorktree:"\u5B88\u62A4\u8FDB\u7A0B\u672A\u8FD0\u884C\u2014\u2014\u65E0\u6CD5\u521B\u5EFA worktree",noDaemonOpen:"\u5B88\u62A4\u8FDB\u7A0B\u672A\u8FD0\u884C\u2014\u2014\u65E0\u6CD5\u6253\u5F00\u6B64\u4EFB\u52A1",noEditor:"\u672A\u627E\u5230\u7F16\u8F91\u5668\u2014\u2014\u8BF7\u8BBE\u7F6E KOBE_OPEN_EDITOR\uFF08\u5982 'code'\u3001'cursor'\u3001'nvim'\uFF09",openWorktreeFailed:"\u65E0\u6CD5\u7528 {label} \u6253\u5F00 worktree",sessionStartFailed:"\u65E0\u6CD5\u542F\u52A8\u6B64\u4EFB\u52A1\u7684\u4F1A\u8BDD",moveTaskFailed:"\u65E0\u6CD5\u79FB\u52A8\u4EFB\u52A1\uFF1A{message}",alreadyLatest:"\u5DF2\u662F\u6700\u65B0\u7248\u672C\uFF08v{version}\uFF09",worktreeErrorNotGit:"\u8BE5\u9879\u76EE\u5C1A\u975E git \u4ED3\u5E93\u2014\u2014\u4EFB\u52A1\u9700\u8981 git \u5206\u652F\u3002\u8BF7\u5728\u9879\u76EE\u4E2D\u6267\u884C `git init`\uFF08+ \u9996\u6B21\u63D0\u4EA4\uFF09\u540E\u518D\u6253\u5F00\u4EFB\u52A1\u3002\u975E git \u9879\u76EE\u7684\u652F\u6301\u5373\u5C06\u63A8\u51FA\u3002",worktreeErrorGeneric:"\u65E0\u6CD5\u521B\u5EFA worktree\uFF1A{message}"}}});var w6,h6;var P6=C(()=>{w6={pageTitle:"KOBE UPDATE",current:"current",latest:"latest",releaseUrlUnavailable:"release URL unavailable",statusReleaseOpened:"Opened release page in your browser.",statusReleaseError:"Could not open release URL.",statusRunningUpdater:"Leaving the TUI page and running the updater in this tmux window...",loadingNotes:"Loading release notes...",notesUnavailable:"Release notes are unavailable. Use Open release to view the GitHub release page.",changesSectionHeader:"\u2500\u2500 changes from v{from} to v{to} \u2500\u2500",updateComplete:"kobe update complete. Relaunch kobe to use the new version.",updateFailed:"kobe update failed with exit code {code}.",pressAnyKey:"Press any key to close this update window.",actions:{updateNow:"Update now",openRelease:"Open release",close:"Close",closeDetail:"return to the previous tmux window"},skew:{title:"\u26A0 DAEMON OUT OF DATE",olderBuild:"an older build",hint:"daemon is {daemon} \u2014 you launched v{clientVersion}. Run `kobe daemon restart` then `kobe reload`"}},h6={pageTitle:"KOBE \u66F4\u65B0",current:"\u5F53\u524D",latest:"\u6700\u65B0",releaseUrlUnavailable:"\u53D1\u5E03\u94FE\u63A5\u4E0D\u53EF\u7528",statusReleaseOpened:"\u5DF2\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u53D1\u5E03\u8BF4\u660E\u9875\u9762\u3002",statusReleaseError:"\u65E0\u6CD5\u6253\u5F00\u53D1\u5E03\u94FE\u63A5\u3002",statusRunningUpdater:"\u6B63\u5728\u79BB\u5F00 TUI \u9875\u9762\uFF0C\u5E76\u5728\u6B64 tmux \u7A97\u53E3\u4E2D\u8FD0\u884C\u66F4\u65B0\u7A0B\u5E8F\u2026\u2026",loadingNotes:"\u6B63\u5728\u52A0\u8F7D\u53D1\u5E03\u8BF4\u660E\u2026\u2026",notesUnavailable:"\u53D1\u5E03\u8BF4\u660E\u4E0D\u53EF\u7528\u3002\u8BF7\u4F7F\u7528\u300C\u6253\u5F00\u53D1\u5E03\u9875\u300D\u67E5\u770B GitHub \u53D1\u5E03\u9875\u9762\u3002",changesSectionHeader:"\u2500\u2500 v{from} \u81F3 v{to} \u7684\u53D8\u66F4 \u2500\u2500",updateComplete:"kobe \u66F4\u65B0\u5B8C\u6210\u3002\u8BF7\u91CD\u65B0\u542F\u52A8 kobe \u4EE5\u4F7F\u7528\u65B0\u7248\u672C\u3002",updateFailed:"kobe \u66F4\u65B0\u5931\u8D25\uFF0C\u9000\u51FA\u7801\u4E3A {code}\u3002",pressAnyKey:"\u6309\u4EFB\u610F\u952E\u5173\u95ED\u6B64\u66F4\u65B0\u7A97\u53E3\u3002",actions:{updateNow:"\u7ACB\u5373\u66F4\u65B0",openRelease:"\u6253\u5F00\u53D1\u5E03\u9875",close:"\u5173\u95ED",closeDetail:"\u8FD4\u56DE\u4E0A\u4E00\u4E2A tmux \u7A97\u53E3"},skew:{title:"\u26A0 DAEMON \u7248\u672C\u4E0D\u4E00\u81F4",olderBuild:"\u65E7\u7248\u672C\u6784\u5EFA",hint:"daemon \u8FD0\u884C\u7684\u662F {daemon}\uFF0C\u800C\u4F60\u542F\u52A8\u7684\u662F v{clientVersion}\u3002\u8BF7\u8FD0\u884C `kobe daemon restart` \u518D\u8FD0\u884C `kobe reload`"}}});function TZ(f){return typeof f==="string"&&Rz.some((J)=>J.id===f)}var bN,SN,Rz,CG,kG="en";var NG=C(()=>{B6();V6();D6();F6();g6();k6();b6();T6();x6();P6();bN={settings:S6,tasks:u6,files:j6,newTask:O6,ops:R6,update:w6,quickTask:N6,help:K6,common:Q6,keys:L6},SN={settings:I6,tasks:E6,files:W6,newTask:A6,ops:C6,update:h6,quickTask:y6,help:U6,common:H6,keys:M6},Rz=[{id:"en",label:"English"},{id:"zh",label:"\u4E2D\u6587"}],CG={en:bN,zh:SN}});function uZ(f){if(CG[f])IN("lang",f)}function _j(){return pj.lang}function v6(f,J){let Y=f;for(let z of J.split("."))if(Y&&typeof Y==="object"&&z in Y)Y=Y[z];else return;return typeof Y==="string"?Y:void 0}function TN(f,J){if(!J)return f;return f.replace(/\{(\w+)\}/g,(Y,z)=>(z in J)?String(J[z]):Y)}function F(f,J){let Y=pj.lang,z=v6(CG[Y],f)??v6(CG.en,f)??f;return TN(z,J)}function oj(f,J){let Y=pj.lang,z=(G)=>{return G.keys[f]?.[J]};return z(CG[Y])??z(CG.en)??J}var pj,IN;var G1=C(()=>{RG();NG();NG();[pj,IN]=uJ({lang:kG})});function uN(f){let J=[],Y=f.name;if(Y)J.push(Y);if(Y==="return")J.push("enter");if(Y==="enter")J.push("return");let z=[];if(f.ctrl)z.push("ctrl");if(f.meta)z.push("cmd");if(f.option)z.push("alt");if(f.shift&&Y&&Y.length>1)z.push("shift");if(z.length===0)return J;let G=`${z.join("+")}+`;return J.map((Z)=>G+Z)}function sj(f,J){if(J.defaultPrevented)return!1;let Y=uN(J);for(let z=f.length-1;z>=0;z--){let G=f[z];if(!G)continue;let Z=G.config();if(Z.enabled===!1)continue;let q=Z.bindings.find((Q)=>Y.includes(Q.key));if(q)return q.cmd(J,q.slot),J.preventDefault(),!0}return!1}function xN(){if(tj)return;let f=Y1();if(!f)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");tj=f.keyInput,m6=(J)=>{sj(WQ,J)},tj.on("keypress",m6)}function Df(f){xN();let J=EN++,Y={config:f,id:J};ff(()=>{f()}),WQ.push(Y),vf(()=>{let z=WQ.findIndex((G)=>G.id===J);if(z>=0)WQ.splice(z,1)})}var EN=1,WQ,tj=null,m6=null;var b1=C(()=>{P();Wf();WQ=[]});import{RGBA as c6}from"@opentui/core";function PN(f){let J=TJ(),Y=d0(),{theme:z}=Y,G=Y1(),Z=!1,q=()=>{if(f.size==="xlarge")return 140;if(f.size==="large")return 110;if(f.size==="small")return 50;return 80},Q=2,H=()=>Math.max(8,J().height-Q*2);return(()=>{var B=W("box"),V=W("box");return D(B,V),X(B,"onMouseDown",()=>{Z=!!G?.getSelection()}),X(B,"onMouseUp",()=>{if(Z){Z=!1;return}f.onClose?.()}),X(B,"alignItems","center"),X(B,"justifyContent","center"),X(B,"position","absolute"),X(B,"zIndex",3000),X(B,"left",0),X(B,"top",0),X(V,"onMouseUp",(j)=>{Z=!1,j.stopPropagation()}),X(V,"flexShrink",1),X(V,"flexGrow",0),X(V,"paddingTop",1),K(V,()=>f.children),E((j)=>{var U=J().width,L=J().height,O=Y.transparentBackground?hN:wN,M=q(),g=J().width-2,I=H(),a=z.backgroundDialog;return U!==j.e&&(j.e=X(B,"width",U,j.e)),L!==j.t&&(j.t=X(B,"height",L,j.t)),O!==j.a&&(j.a=X(B,"backgroundColor",O,j.a)),M!==j.o&&(j.o=X(V,"width",M,j.o)),g!==j.i&&(j.i=X(V,"maxWidth",g,j.i)),I!==j.n&&(j.n=X(V,"maxHeight",I,j.n)),a!==j.s&&(j.s=X(V,"backgroundColor",a,j.s)),j},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),B})()}function vN(){let[f,J]=uJ({stack:[],size:"medium"}),Y=Y1(),z=null;function G(){setTimeout(()=>{if(!z)return;if(z.isDestroyed)return;function Z(Q){for(let H of Q.getChildren()){if(H===z)return!0;if(Z(H))return!0}return!1}let q=Y?.root;if(!q)return;if(!Z(q))return;z.focus()},1)}return Df(()=>({enabled:f.stack.length>0&&!Y?.getSelection()?.getSelectedText(),bindings:[{key:"escape",cmd:()=>{if(Y?.getSelection())Y.clearSelection();f.stack.at(-1)?.onClose?.(),J("stack",f.stack.slice(0,-1)),G()}},{key:"ctrl+c",cmd:()=>{if(Y?.getSelection())Y.clearSelection();f.stack.at(-1)?.onClose?.(),J("stack",f.stack.slice(0,-1)),G()}}]})),{clear(){for(let Z of f.stack)Z.onClose?.();WX(()=>{J("size","medium"),J("stack",[])}),G()},replace(Z,q){if(f.stack.length===0)z=Y?.currentFocusedRenderable??null,z?.blur();for(let Q of f.stack)Q.onClose?.();J("size","medium"),J("stack",[{element:Z,onClose:q}])},push(Z,q){if(f.stack.length===0)z=Y?.currentFocusedRenderable??null,z?.blur();J("stack",[...f.stack,{element:Z,onClose:q}])},pop(){if(f.stack.at(-1)?.onClose?.(),J("stack",f.stack.slice(0,-1)),f.stack.length===0)G()},get stack(){return f.stack},get size(){return f.size},setSize(Z){J("size",Z)}}}function d6(f){let J=vN();return b(n6.Provider,{value:J,get children(){return[I0(()=>f.children),(()=>{var Y=W("box");return X(Y,"position","absolute"),X(Y,"zIndex",3000),K(Y,b(X0,{get when(){return J.stack.length},get children(){return b(PN,{onClose:()=>J.clear(),get size(){return J.size},get children(){return J.stack.at(-1).element()}})}})),Y})()]}})}function Pf(){let f=u1(n6);if(!f)throw Error("useDialog must be used within a DialogProvider");return f}var wN,hN,n6;var h1=C(()=>{P();P();P();P();P();P();P();P();Wf();RG();Ef();b1();wN=c6.fromInts(0,0,0,128),hN=c6.fromInts(0,0,0,64);n6=gJ()});import{spawnSync as ej}from"child_process";import*as l6 from"fs";function i6(f){return`This folder isn't a git repository yet, and a task needs a git branch to work in. To fix it, turn ${f} into a repo: git init && git add -A && git commit -m "init" \u2014 then create the task again. (Working in non-git folders is coming soon.)`}function a6(f){let J=f.trim();if(!J)return"repo path is required";let Y;try{Y=l6.statSync(J)}catch{return`path does not exist: ${J}`}if(!Y.isDirectory())return`not a directory: ${J}`;try{if(ej("git",["rev-parse","--git-dir"],{cwd:J,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return i6(J)}catch{return i6(J)}return null}function EZ(f){if(!f)return null;try{let J=ej("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:f,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]});if(J.status!==0)return null;let Y=J.stdout.trim();if(!Y||Y==="HEAD")return null;return Y}catch{return null}}function $6(f){if(!f)return[];try{let J=ej("git",["for-each-ref","--format=%(refname:short)","refs/heads/"],{cwd:f,encoding:"utf-8",timeout:2000});if(J.status!==0)return[];return J.stdout.split(`
|
|
222
|
+
`).map((Y)=>Y.trim()).filter(Boolean).sort((Y,z)=>{let G=(Q)=>Q==="main"?0:Q==="master"?1:Q==="develop"?2:3,Z=G(Y),q=G(z);if(Z!==q)return Z-q;return Y.localeCompare(z)})}catch{return[]}}var LJ="main";var VQ=()=>{};import*as r6 from"fs";import*as KQ from"os";function W1(f){if(f==="~")return KQ.homedir();if(f.startsWith("~/"))return KQ.homedir()+f.slice(1);return f}function f8(f){if(!f)return{base:"",filter:""};let Y=W1(f==="~"?"~/":f);if(Y.endsWith("/"))return{base:Y,filter:""};let z=Y.lastIndexOf("/");if(z===-1)return{base:"",filter:Y};return{base:Y.slice(0,z+1),filter:Y.slice(z+1)}}function J8(f){if(!f)return[];try{let J=r6.readdirSync(f,{withFileTypes:!0}),Y=[];for(let z of J)if(z.isDirectory())Y.push(z.name);return Y.sort((z,G)=>z.localeCompare(G))}catch{return[]}}function Y8(f,J){let Y=J.toLowerCase(),G=Y.startsWith(".")?f:f.filter((Z)=>!Z.startsWith("."));if(!Y)return G;return G.filter((Z)=>Z.toLowerCase().startsWith(Y))}function xZ(f,J,Y){let z=J+Y;if(f.startsWith("~")){let G=KQ.homedir();if(z===G)return"~";if(z.startsWith(`${G}/`))return`~${z.slice(G.length)}`}return z}var UQ=()=>{};import{spawn as mN}from"child_process";import*as Cz from"fs";import*as wZ from"path";function p6(f){let J=f.trim().replace(/\/+$/,"");if(!J)return"";let Y=J.lastIndexOf("/"),z=J.lastIndexOf(":"),G=Math.max(Y,z);return(G>=0?J.slice(G+1):J).replace(/\.git$/i,"")}function _6(f){let J=f.trim();if(!J)return F("newTask.error.gitUrlRequired");let Y=J.includes("://"),z=J.includes("@")&&J.includes(":"),G=J.includes("/");if(!Y&&!z&&!G)return F("newTask.error.gitUrlInvalid",{url:J});return null}function o6(f,J){let Y=J.trim();if(!Y)return F("newTask.error.folderRequired");if(Y.includes("/")||Y.includes("\\"))return F("newTask.error.folderHasSeparator");let z=f.trim();if(!z)return F("newTask.error.parentRequired");let G=W1(z),Z;try{Z=Cz.statSync(G)}catch{return F("newTask.error.parentNotFound",{path:G})}if(!Z.isDirectory())return F("newTask.error.parentNotDir",{path:G});let q=wZ.join(G,Y);if(Cz.existsSync(q))return F("newTask.error.targetExists",{path:q});return null}function s6(f,J){return wZ.join(W1(f.trim()),J.trim())}function t6(f,J){let Y=J.trim();if(!Y)return J;let z=W1(f.trim());if(!z)return J;try{if(!Cz.statSync(z).isDirectory())return J}catch{return J}if(!Cz.existsSync(wZ.join(z,Y)))return Y;for(let G=2;G<1000;G++){let Z=`${Y}-${G}`;if(!Cz.existsSync(wZ.join(z,Z)))return Z}return Y}function e6(f,J,Y){return new Promise((z)=>{let G="";try{let Z=mN("git",["clone","--progress",f,J],{stdio:["ignore","ignore","pipe"]});Z.stderr?.setEncoding("utf-8"),Z.stderr?.on("data",(q)=>{if(G+=q,Y){let Q=q.split(/[\r\n]+/).filter((B)=>B.trim().length>0),H=Q[Q.length-1];if(H)Y(H)}}),Z.on("error",(q)=>{z({ok:!1,error:q.message})}),Z.on("close",(q)=>{if(q===0){z({ok:!0,path:J});return}let Q=G.split(/[\r\n]+/).filter((H)=>H.trim().length>0).pop()??`git clone exited with ${q}`;z({ok:!1,error:Q})})}catch(Z){z({ok:!1,error:Z instanceof Error?Z.message:String(Z)})}})}var f4=C(()=>{G1();UQ()});function DQ(f){if(f==="existing")return"clone";if(f==="clone")return"adopt";return"existing"}function J4(f){if(f==="existing")return"adopt";if(f==="clone")return"existing";return"clone"}function Y4(f,J){let Y=f.trim();if(J.includes(Y))return"saved";if(Y.startsWith("~"))return"browse";if(Y.includes("/"))return"browse";return"saved"}function Z1(f){return f.replace(/[\r\n]+/g,"")}function z8(f,J="existing"){if(f==="confirm")return"tabs";if(f==="tabs")return"engine";if(f==="engine")return G8(J);if(J==="clone"){if(f==="cloneUrl")return"cloneParent";if(f==="cloneParent")return"cloneFolder";if(f==="cloneFolder")return"cloneBaseRef";if(f==="cloneBaseRef")return"confirm";return"cloneUrl"}if(J==="adopt")return f==="adoptFilter"?"confirm":"adoptFilter";if(f==="repo")return"baseRef";if(f==="baseRef")return"confirm";return"repo"}function G8(f){if(f==="clone")return"cloneUrl";if(f==="adopt")return"adoptFilter";return"repo"}function z4(f,J){let Y=J.trim();if(!Y)return f;return f.filter((z)=>rZ(Y,z.path))}function G4(f,J){let Y=new Set,z=[];for(let G of[f,...J]){let Z=G.trim();if(!Z||Y.has(Z))continue;Y.add(Z),z.push(Z)}return z}function Z4(f,J){let Y=J.trim().toLowerCase();if(!Y)return f;return f.filter((z)=>z.toLowerCase().includes(Y))}function X4(f,J){let Y=J.trim().toLowerCase();if(!Y)return f;return f.filter((z)=>z.toLowerCase().includes(Y))}function hZ(f,J,Y=cN){let z=f.length;if(z<=Y)return{items:f,start:0,total:z};let G=Math.floor(Y/2),Z=Math.max(0,J-G);if(Z+Y>z)Z=z-Y;return{items:f.slice(Z,Z+Y),start:Z,total:z}}function EJ(f,J){if(J<=0)return 0;return Math.max(0,Math.min(J-1,f))}function q4(f,J,Y){let z=J[Y];if(z)return z;return f.trim()||LJ}var cN=8;var Z8=C(()=>{hQ();VQ()});import{TextAttributes as _1}from"@opentui/core";function Q4(f){let J=Pf(),{theme:Y}=d0(),[z,G]=r("existing"),Z=()=>{let y=f.availableVendors;return y&&y.length>0?y:mf},q=(()=>{let y=Z(),A0=f.defaultVendor??"claude";return y.includes(A0)?A0:y[0]??"claude"})(),[Q,H]=r(q),[B,V]=r("tabs"),[j,U]=r(f.defaultRepo),[L,O]=r(EZ(W1(f.defaultRepo.trim()))??LJ),[M,g]=r(!1),[I,a]=r(""),[N,A]=r(f.defaultCloneParent?.trim()?f.defaultCloneParent:"~/"),[R,S]=r(""),[_,z0]=r(!1),[e,Y0]=r(LJ),[T,Q0]=r(!1),[t,V0]=r(""),C0=K0(()=>G4(f.defaultRepo,f.savedRepos)),$=K0(()=>Y4(j(),C0())),x=K0(()=>f8(j())),f0=K0(()=>J8(x().base)),u=K0(()=>Y8(f0(),x().filter)),G0=K0(()=>Z4(C0(),j())),w=K0(()=>$()==="browse"?u():G0()),[n,q0]=r(0),W0=K0(()=>hZ(w(),n())),[H0,k0]=r(!1),x0=K0(()=>$6(W1(j().trim()))),y0=K0(()=>X4(x0(),L())),[Gf,m]=r(0),L0=K0(()=>hZ(y0(),Gf())),s=K0(()=>f8(N())),R0=K0(()=>J8(s().base)),i0=K0(()=>Y8(R0(),s().filter)),[$0,w0]=r(0),v=K0(()=>hZ(i0(),$0())),[J0,M0]=r(!1),[_0,e0]=r(""),[T0,Xf]=r(0),[Qf,Rf]=r(new Set),[o]=jX(()=>z()==="adopt"?W1(j().trim()):null,async(y)=>f.discoverAdoptable?await f.discoverAdoptable(y):[]),p=K0(()=>z4(o()??[],_0())),Z0=K0(()=>hZ(p().map((y)=>y.path),T0())),D0=K0(()=>{let y=Z0();return p().slice(y.start,y.start+y.items.length)});ff(()=>{p(),Xf((y)=>EJ(y,p().length))});function j0(y){Rf((A0)=>{let m0=new Set(A0);if(m0.has(y))m0.delete(y);else m0.add(y);return m0})}function k(){let y=p()[T0()];if(y)j0(y.path)}ff(()=>{y0(),m(0)}),ff(()=>{let y=W1(j().trim());if(!y)return;if(M())return;let A0=EZ(y);if(A0)O(A0)}),ff(()=>{w(),q0(0)}),ff(()=>{i0(),w0(0)}),ff(()=>{let y=I(),A0=N();if(_())return;let m0=p6(y);S(t6(A0,m0))});let[N0,p0]=r(null);ff(()=>{j(),I(),N(),R(),_0(),p0(null)});function b0(){let y=W1(j().trim());if(!y)return;let A0=a6(y);if(A0){p0(A0),V("repo");return}let m0=L().trim()||LJ;f.onSubmit({repo:y,baseRef:m0,vendor:Q()}),J.clear()}async function U0(){if(T())return;let y=_6(I());if(y){p0(y),V("cloneUrl");return}let A0=o6(N(),R());if(A0){p0(A0),V(R().trim()?"cloneParent":"cloneFolder");return}let m0=s6(N(),R());Q0(!0),V0(F("newTask.clone.progressInto",{target:m0}));let u0=await e6(I().trim(),m0,(tf)=>{V0(tf)});if(Q0(!1),!u0.ok){p0(F("newTask.error.cloneFailed",{error:u0.error})),V("cloneUrl");return}let X1=e().trim()||LJ,V1=W1(N().trim());f.onSubmit({repo:u0.path,baseRef:X1,vendor:Q(),cloned:{parentDir:V1}}),J.clear()}function h0(){let y=p();if(y.length===0){p0(F("newTask.error.noAdoptable"));return}let A0=Qf(),m0=A0.size>0?y.filter((u0)=>A0.has(u0.path)):y.slice(T0(),T0()+1);if(m0.length===0)return;f.onSubmit({mode:"adopt",repo:W1(j().trim()),vendor:Q(),adopt:m0.map((u0)=>({worktreePath:u0.path,branch:u0.branch}))}),J.clear()}function O0(){if(z()==="clone"){U0();return}if(z()==="adopt"){h0();return}b0()}function r0(y){if(T())return;if(y===z())return;G(y),V(G8(y)),p0(null)}function l0(y){if(T())return;let A0=y===1?DQ(z()):J4(z());if(A0===z())return;G(A0),p0(null),V("tabs")}function Yf(y){H((A0)=>y===1?GY(Z(),A0):PQ(Z(),A0))}function S0(){if(!j().trim()&&$()==="saved"){let A0=w()[0];if(A0){U(A0),V("baseRef");return}}if($()==="browse"){let m0=u()[n()],u0=x();if(m0){U(xZ(j(),u0.base,m0)),q0(0),k0(!0),V("baseRef");return}V("baseRef");return}let y=w()[n()];if(y){U(y),V("baseRef");return}V("baseRef")}function xf(y){let m0=w()[y];if(!m0)return;if($()==="browse"){let u0=x();U(xZ(j(),u0.base,m0)),q0(y),k0(!0),V("baseRef");return}U(m0),q0(y),V("baseRef")}function df(){let A0=i0()[$0()],m0=s();if(A0){A(xZ(N(),m0.base,A0)),w0(0),M0(!0),V("cloneFolder");return}V("cloneFolder")}function d(y){let m0=i0()[y];if(!m0)return;let u0=s();A(xZ(N(),u0.base,m0)),w0(y),M0(!0),V("cloneFolder")}let g0=()=>{let y=p();if(y.length===0)return;let A0=y.every((m0)=>Qf().has(m0.path));Rf(A0?new Set:new Set(y.map((m0)=>m0.path)))};Df(()=>({bindings:[{key:"tab",cmd:()=>V((y)=>z8(y,z()))},{key:"ctrl+]",cmd:()=>r0(DQ(z()))},{key:"ctrl+[",cmd:()=>r0(DQ(z()))},{key:"ctrl+e",cmd:()=>H((y)=>GY(Z(),y))},{key:"up",cmd:()=>{if(T())return;if(z()==="existing"&&B()==="repo"){let y=w();if(y.length===0)return;q0(EJ(n()-1,y.length));return}if(z()==="existing"&&B()==="baseRef"){let y=y0();if(y.length===0)return;m(EJ(Gf()-1,y.length));return}if(z()==="clone"&&B()==="cloneParent"){let y=i0();if(y.length===0)return;w0(EJ($0()-1,y.length));return}if(z()==="adopt"){let y=p();if(y.length===0)return;Xf(EJ(T0()-1,y.length))}}},{key:"down",cmd:()=>{if(T())return;if(z()==="existing"&&B()==="repo"){let y=w();if(y.length===0)return;q0(EJ(n()+1,y.length));return}if(z()==="existing"&&B()==="baseRef"){let y=y0();if(y.length===0)return;m(EJ(Gf()+1,y.length));return}if(z()==="clone"&&B()==="cloneParent"){let y=i0();if(y.length===0)return;w0(EJ($0()+1,y.length));return}if(z()==="adopt"){let y=p();if(y.length===0)return;Xf(EJ(T0()+1,y.length))}}},...B()==="tabs"||B()==="engine"?[{key:"left",cmd:()=>B()==="tabs"?l0(-1):Yf(-1)},{key:"right",cmd:()=>B()==="tabs"?l0(1):Yf(1)},{key:"return",cmd:()=>V((y)=>z8(y,z()))}]:[],...z()==="adopt"?[{key:"ctrl+a",cmd:g0}]:[]]})),Df(()=>({enabled:B()==="confirm"&&!T(),bindings:[{key:"return",cmd:()=>O0()}]}));let Kf=(y)=>B()===y?Y.primary:Y.textMuted,qf=(y)=>B()===y?_1.BOLD|_1.UNDERLINE:void 0,Of=(y,A0)=>y?A0?_1.BOLD|_1.UNDERLINE:_1.BOLD:void 0;return(()=>{var y=W("box"),A0=W("box"),m0=W("text"),u0=W("box"),X1=W("box"),V1=W("text"),tf=W("box"),P1=W("box"),xJ=W("text"),M1=W("box"),yz=W("text"),YY=W("text");return D(y,A0),D(y,u0),D(y,M1),X(y,"paddingLeft",2),X(y,"paddingRight",2),X(y,"gap",0),D(A0,m0),X(A0,"flexDirection","row"),K(m0,()=>F("newTask.title")),D(u0,X1),X(u0,"gap",1),X(u0,"paddingTop",1),X(u0,"paddingBottom",1),K(u0,()=>{let c=()=>B()==="tabs",i=(l)=>l?Y.primary:Y.textMuted;return(()=>{var l=W("box"),h=W("text"),c0=W("text"),P0=W("text");return D(l,h),D(l,c0),D(l,P0),X(l,"flexDirection","row"),X(l,"gap",2),X(h,"onMouseUp",()=>r0("existing")),K(h,(()=>{var F0=I0(()=>z()==="existing");return()=>F0()?`\u25B8 ${F("newTask.tabs.existing")}`:` ${F("newTask.tabs.existing")}`})()),X(c0,"onMouseUp",()=>r0("clone")),K(c0,(()=>{var F0=I0(()=>z()==="clone");return()=>F0()?`\u25B8 ${F("newTask.tabs.clone")}`:` ${F("newTask.tabs.clone")}`})()),X(P0,"onMouseUp",()=>r0("adopt")),K(P0,(()=>{var F0=I0(()=>z()==="adopt");return()=>F0()?`\u25B8 ${F("newTask.tabs.adopt")}`:` ${F("newTask.tabs.adopt")}`})()),E((F0)=>{var n0=i(z()==="existing"),Hf=Of(z()==="existing",c()),Lf=i(z()==="clone"),q1=Of(z()==="clone",c()),s1=i(z()==="adopt"),zY=Of(z()==="adopt",c());return n0!==F0.e&&(F0.e=X(h,"fg",n0,F0.e)),Hf!==F0.t&&(F0.t=X(h,"attributes",Hf,F0.t)),Lf!==F0.a&&(F0.a=X(c0,"fg",Lf,F0.a)),q1!==F0.o&&(F0.o=X(c0,"attributes",q1,F0.o)),s1!==F0.i&&(F0.i=X(P0,"fg",s1,F0.i)),zY!==F0.n&&(F0.n=X(P0,"attributes",zY,F0.n)),F0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),l})()},X1),D(X1,V1),D(X1,tf),X(X1,"gap",0),K(V1,()=>F("newTask.field.engine")),D(tf,P1),D(tf,xJ),X(tf,"flexDirection","row"),X(tf,"gap",2),K(tf,b(Zf,{get each(){return Z()},children:(c)=>{let i=()=>Q()===c;return(()=>{var l=W("text");return X(l,"onMouseUp",()=>H(c)),K(l,()=>i()?"\u25B8 ":" ",null),K(l,c,null),E((h)=>{var c0=i()?Y.primary:Y.textMuted,P0=i()?_1.BOLD:void 0;return c0!==h.e&&(h.e=X(l,"fg",c0,h.e)),P0!==h.t&&(h.t=X(l,"attributes",P0,h.t)),h},{e:void 0,t:void 0}),l})()}}),P1),X(P1,"flexGrow",1),K(xJ,()=>F("newTask.hint.engineCycle")),K(u0,b(X0,{get when(){return z()==="existing"},get children(){return[(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),K(i,()=>F("newTask.field.repo")),X(l,"onInput",(h)=>{k0(!1),U(Z1(h))}),X(l,"onSubmit",()=>{if(!j().trim())return;S0()}),E((h)=>{var c0=Kf("repo"),P0=qf("repo"),F0=j(),n0=f.defaultRepo,Hf=B()==="repo";return c0!==h.e&&(h.e=X(i,"fg",c0,h.e)),P0!==h.t&&(h.t=X(i,"attributes",P0,h.t)),F0!==h.a&&(h.a=X(l,"value",F0,h.a)),n0!==h.o&&(h.o=X(l,"placeholder",n0,h.o)),Hf!==h.i&&(h.i=X(l,"focused",Hf,h.i)),h},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),c})(),b(X0,{get when(){return I0(()=>B()==="repo"&&w().length>0)()&&!H0()},get children(){var c=W("box");return X(c,"gap",0),X(c,"paddingLeft",2),K(c,b(X0,{get when(){return W0().start>0},get children(){var i=W("text");return X(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:W0().start})),E((l)=>X(i,"fg",Y.textMuted,l)),i}}),null),K(c,b(Zf,{get each(){return W0().items},children:(i,l)=>{let h=()=>W0().start+l(),c0=()=>h()===n(),P0=()=>$()==="saved"&&i===f.defaultRepo,F0=()=>$()==="saved"&&j().trim()===i,n0=()=>$()==="browse"?"/":"",Hf=()=>P0()?` ${F("newTask.hint.currentDir")}`:"";return(()=>{var Lf=W("text");return X(Lf,"wrapMode","none"),X(Lf,"onMouseUp",()=>xf(h())),K(Lf,()=>c0()?"\u25B8 ":" ",null),K(Lf,i,null),K(Lf,n0,null),K(Lf,Hf,null),E((q1)=>{var s1=c0()?Y.primary:F0()?Y.accent:Y.textMuted,zY=c0()?_1.BOLD:void 0;return s1!==q1.e&&(q1.e=X(Lf,"fg",s1,q1.e)),zY!==q1.t&&(q1.t=X(Lf,"attributes",zY,q1.t)),q1},{e:void 0,t:void 0}),Lf})()}}),null),K(c,b(X0,{get when(){return W0().start+W0().items.length<W0().total},get children(){var i=W("text");return X(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:W0().total-W0().start-W0().items.length})),E((l)=>X(i,"fg",Y.textMuted,l)),i}}),null),c}}),(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),K(i,()=>F("newTask.field.fromBranch")),X(l,"placeholder",LJ),X(l,"onInput",(h)=>{g(!0),O(Z1(h))}),X(l,"onSubmit",()=>{O(q4(L(),y0(),Gf())),g(!0),b0()}),E((h)=>{var c0=Kf("baseRef"),P0=qf("baseRef"),F0=L(),n0=B()==="baseRef";return c0!==h.e&&(h.e=X(i,"fg",c0,h.e)),P0!==h.t&&(h.t=X(i,"attributes",P0,h.t)),F0!==h.a&&(h.a=X(l,"value",F0,h.a)),n0!==h.o&&(h.o=X(l,"focused",n0,h.o)),h},{e:void 0,t:void 0,a:void 0,o:void 0}),c})(),b(X0,{get when(){return I0(()=>B()==="baseRef"&&y0().length===0)()&&N0()==null},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"gap",0),X(c,"paddingLeft",2),X(c,"paddingBottom",1),X(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>x0().length===0);return()=>l()?F("newTask.hint.noBranchesFound"):F("newTask.hint.noMatchBranch")})()),E((l)=>X(i,"fg",Y.textMuted,l)),c}}),b(X0,{get when(){return I0(()=>B()==="baseRef")()&&y0().length>0},get children(){var c=W("box");return X(c,"gap",0),X(c,"paddingLeft",2),X(c,"paddingBottom",1),K(c,b(X0,{get when(){return L0().start>0},get children(){var i=W("text");return X(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:L0().start})),E((l)=>X(i,"fg",Y.textMuted,l)),i}}),null),K(c,b(Zf,{get each(){return L0().items},children:(i,l)=>{let h=()=>L0().start+l(),c0=()=>h()===Gf(),P0=()=>L().trim()===i;return(()=>{var F0=W("text");return X(F0,"wrapMode","none"),X(F0,"onMouseUp",()=>{O(i),g(!0),m(h()),V("confirm")}),K(F0,()=>c0()?"\u25B8 ":" ",null),K(F0,i,null),E((n0)=>{var Hf=c0()?Y.primary:P0()?Y.accent:Y.textMuted,Lf=c0()?_1.BOLD:void 0;return Hf!==n0.e&&(n0.e=X(F0,"fg",Hf,n0.e)),Lf!==n0.t&&(n0.t=X(F0,"attributes",Lf,n0.t)),n0},{e:void 0,t:void 0}),F0})()}}),null),K(c,b(X0,{get when(){return L0().start+L0().items.length<L0().total},get children(){var i=W("text");return X(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:L0().total-L0().start-L0().items.length})),E((l)=>X(i,"fg",Y.textMuted,l)),i}}),null),c}})]}}),null),K(u0,b(X0,{get when(){return z()==="clone"},get children(){return[(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),K(i,()=>F("newTask.field.gitUrl")),X(l,"placeholder","https://github.com/user/repo.git"),X(l,"onInput",(h)=>a(Z1(h))),X(l,"onSubmit",()=>{if(!I().trim())return;V("cloneParent")}),E((h)=>{var c0=Kf("cloneUrl"),P0=qf("cloneUrl"),F0=I(),n0=B()==="cloneUrl";return c0!==h.e&&(h.e=X(i,"fg",c0,h.e)),P0!==h.t&&(h.t=X(i,"attributes",P0,h.t)),F0!==h.a&&(h.a=X(l,"value",F0,h.a)),n0!==h.o&&(h.o=X(l,"focused",n0,h.o)),h},{e:void 0,t:void 0,a:void 0,o:void 0}),c})(),(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),K(i,()=>F("newTask.field.parentDir")),X(l,"placeholder","~/"),X(l,"onInput",(h)=>{M0(!1),A(Z1(h))}),X(l,"onSubmit",()=>df()),E((h)=>{var c0=Kf("cloneParent"),P0=qf("cloneParent"),F0=N(),n0=B()==="cloneParent";return c0!==h.e&&(h.e=X(i,"fg",c0,h.e)),P0!==h.t&&(h.t=X(i,"attributes",P0,h.t)),F0!==h.a&&(h.a=X(l,"value",F0,h.a)),n0!==h.o&&(h.o=X(l,"focused",n0,h.o)),h},{e:void 0,t:void 0,a:void 0,o:void 0}),c})(),b(X0,{get when(){return B()==="cloneParent"},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"paddingLeft",2),X(i,"wrapMode","none"),K(i,()=>F("newTask.hint.remembered")),E((l)=>X(i,"fg",Y.textMuted,l)),c}}),b(X0,{get when(){return I0(()=>B()==="cloneParent"&&i0().length>0)()&&!J0()},get children(){var c=W("box");return X(c,"gap",0),X(c,"paddingLeft",2),K(c,b(X0,{get when(){return v().start>0},get children(){var i=W("text");return X(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:v().start})),E((l)=>X(i,"fg",Y.textMuted,l)),i}}),null),K(c,b(Zf,{get each(){return v().items},children:(i,l)=>{let h=()=>v().start+l(),c0=()=>h()===$0();return(()=>{var P0=W("text"),F0=E0("/");return D(P0,F0),X(P0,"wrapMode","none"),X(P0,"onMouseUp",()=>d(h())),K(P0,()=>c0()?"\u25B8 ":" ",F0),K(P0,i,F0),E((n0)=>{var Hf=c0()?Y.primary:Y.textMuted,Lf=c0()?_1.BOLD:void 0;return Hf!==n0.e&&(n0.e=X(P0,"fg",Hf,n0.e)),Lf!==n0.t&&(n0.t=X(P0,"attributes",Lf,n0.t)),n0},{e:void 0,t:void 0}),P0})()}}),null),K(c,b(X0,{get when(){return v().start+v().items.length<v().total},get children(){var i=W("text");return X(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:v().total-v().start-v().items.length})),E((l)=>X(i,"fg",Y.textMuted,l)),i}}),null),c}}),(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),K(i,()=>F("newTask.field.folderName")),X(l,"onInput",(h)=>{z0(!0),S(Z1(h))}),X(l,"onSubmit",()=>V("cloneBaseRef")),E((h)=>{var c0=Kf("cloneFolder"),P0=qf("cloneFolder"),F0=R(),n0=F("newTask.placeholder.folderName"),Hf=B()==="cloneFolder";return c0!==h.e&&(h.e=X(i,"fg",c0,h.e)),P0!==h.t&&(h.t=X(i,"attributes",P0,h.t)),F0!==h.a&&(h.a=X(l,"value",F0,h.a)),n0!==h.o&&(h.o=X(l,"placeholder",n0,h.o)),Hf!==h.i&&(h.i=X(l,"focused",Hf,h.i)),h},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),c})(),(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),K(i,()=>F("newTask.field.baseBranch")),X(l,"placeholder",LJ),X(l,"onInput",(h)=>Y0(Z1(h))),X(l,"onSubmit",()=>void U0()),E((h)=>{var c0=Kf("cloneBaseRef"),P0=qf("cloneBaseRef"),F0=e(),n0=B()==="cloneBaseRef";return c0!==h.e&&(h.e=X(i,"fg",c0,h.e)),P0!==h.t&&(h.t=X(i,"attributes",P0,h.t)),F0!==h.a&&(h.a=X(l,"value",F0,h.a)),n0!==h.o&&(h.o=X(l,"focused",n0,h.o)),h},{e:void 0,t:void 0,a:void 0,o:void 0}),c})(),b(X0,{get when(){return T()},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"gap",0),X(c,"paddingLeft",2),X(i,"wrapMode","none"),K(i,()=>t()||F("newTask.clone.progressFallback")),E((l)=>X(i,"fg",Y.textMuted,l)),c}})]}}),null),K(u0,b(X0,{get when(){return z()==="adopt"},get children(){return[(()=>{var c=W("box"),i=W("text"),l=W("input");return D(c,i),D(c,l),X(c,"gap",0),K(i,()=>F("newTask.field.adoptFilter")),X(l,"onInput",(h)=>e0(Z1(h))),X(l,"onSubmit",()=>k()),E((h)=>{var c0=Kf("adoptFilter"),P0=qf("adoptFilter"),F0=_0(),n0=F("newTask.placeholder.adoptFilter"),Hf=B()==="adoptFilter";return c0!==h.e&&(h.e=X(i,"fg",c0,h.e)),P0!==h.t&&(h.t=X(i,"attributes",P0,h.t)),F0!==h.a&&(h.a=X(l,"value",F0,h.a)),n0!==h.o&&(h.o=X(l,"placeholder",n0,h.o)),Hf!==h.i&&(h.i=X(l,"focused",Hf,h.i)),h},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),c})(),(()=>{var c=W("box"),i=W("text");return D(c,i),X(c,"paddingLeft",2),X(i,"wrapMode","none"),K(i,()=>F("newTask.adopt.repoLine",{path:W1(j().trim())||F("newTask.adopt.repoNone")})),E((l)=>X(i,"fg",Y.textMuted,l)),c})(),b(X0,{get when(){return o.loading},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"paddingLeft",2),X(i,"wrapMode","none"),K(i,()=>F("newTask.hint.scanningWorktrees")),E((l)=>X(i,"fg",Y.textMuted,l)),c}}),b(X0,{get when(){return I0(()=>!o.loading)()&&p().length===0},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"paddingLeft",2),X(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>(o()??[]).length===0);return()=>l()?F("newTask.adopt.noUnlinked"):F("newTask.adopt.noMatch")})()),E((l)=>X(i,"fg",Y.textMuted,l)),c}}),b(X0,{get when(){return p().length>0},get children(){var c=W("box"),i=W("text");return D(c,i),X(c,"gap",0),X(c,"paddingLeft",2),K(c,b(X0,{get when(){return Z0().start>0},get children(){var l=W("text");return X(l,"wrapMode","none"),K(l,()=>F("newTask.picker.moreAbove",{count:Z0().start})),E((h)=>X(l,"fg",Y.textMuted,h)),l}}),i),K(c,b(Zf,{get each(){return D0()},children:(l,h)=>{let c0=()=>Z0().start+h(),P0=()=>c0()===T0(),F0=()=>Qf().has(l.path),n0=()=>[l.dirty?"dirty":"",l.kobeManaged?"":"external"].filter(Boolean).join(",");return(()=>{var Hf=W("text");return X(Hf,"wrapMode","none"),X(Hf,"onMouseUp",()=>{Xf(c0()),j0(l.path)}),K(Hf,()=>P0()?"\u25B8 ":" ",null),K(Hf,()=>F0()?"[x] ":"[ ] ",null),K(Hf,()=>l.branch,null),K(Hf,(()=>{var Lf=I0(()=>!!n0());return()=>Lf()?` (${n0()})`:""})(),null),E((Lf)=>{var q1=P0()?Y.primary:F0()?Y.accent:Y.textMuted,s1=P0()?_1.BOLD:void 0;return q1!==Lf.e&&(Lf.e=X(Hf,"fg",q1,Lf.e)),s1!==Lf.t&&(Lf.t=X(Hf,"attributes",s1,Lf.t)),Lf},{e:void 0,t:void 0}),Hf})()}}),i),K(c,b(X0,{get when(){return Z0().start+Z0().items.length<Z0().total},get children(){var l=W("text");return X(l,"wrapMode","none"),K(l,()=>F("newTask.picker.moreBelow",{count:Z0().total-Z0().start-Z0().items.length})),E((h)=>X(l,"fg",Y.textMuted,h)),l}}),i),X(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>Qf().size>0);return()=>l()?F("newTask.adopt.hintSelected",{count:Qf().size}):F("newTask.adopt.hintDefault")})()),E((l)=>X(i,"fg",Y.textMuted,l)),c}})]}}),null),K(u0,b(X0,{get when(){return N0()},get children(){var c=W("text"),i=E0("\u203B ");return D(c,i),X(c,"wrapMode","word"),K(c,N0,null),E((l)=>X(c,"fg",Y.error,l)),c}}),null),D(M1,yz),D(M1,YY),X(M1,"flexDirection","row"),X(M1,"justifyContent","space-between"),X(M1,"alignItems","center"),X(M1,"paddingTop",1),X(M1,"paddingBottom",1),K(yz,()=>F("newTask.hint.legend")),X(YY,"onMouseUp",()=>O0()),K(YY,(()=>{var c=I0(()=>!!T());return()=>c()?F("newTask.button.cloning"):I0(()=>B()==="confirm")()?F("newTask.button.createFocused"):F("newTask.button.create")})()),E((c)=>{var i=_1.BOLD,l=Y.text,h=Kf("engine"),c0=qf("engine"),P0=Y.textMuted,F0=Y.textMuted,n0=B()==="confirm"?Y.primary:Y.text,Hf=B()==="confirm"?_1.BOLD:void 0;return i!==c.e&&(c.e=X(m0,"attributes",i,c.e)),l!==c.t&&(c.t=X(m0,"fg",l,c.t)),h!==c.a&&(c.a=X(V1,"fg",h,c.a)),c0!==c.o&&(c.o=X(V1,"attributes",c0,c.o)),P0!==c.i&&(c.i=X(xJ,"fg",P0,c.i)),F0!==c.n&&(c.n=X(yz,"fg",F0,c.n)),n0!==c.s&&(c.s=X(YY,"fg",n0,c.s)),Hf!==c.h&&(c.h=X(YY,"attributes",Hf,c.h)),c},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),y})()}var H4=C(()=>{P();P();P();P();P();P();P();P();G1();K1();Wf();Ef();VQ();b1();UQ();h1();f4();Z8()});function nN(f,J,Y,z){return new Promise((G)=>{f.replace(()=>b(Q4,{defaultRepo:J,savedRepos:Y,get defaultCloneParent(){return z?.defaultCloneParent},get defaultVendor(){return z?.defaultVendor},get availableVendors(){return z?.availableVendors},get discoverAdoptable(){return z?.discoverAdoptable},onSubmit:(Z)=>G(Z),onCancel:()=>G(void 0)}),()=>G(void 0)),f.setSize("medium")})}var LQ;var yG=C(()=>{P();H4();Z8();LQ={show:nN}});function B4(f,J){return[{key:"tab",cmd:()=>J.cycleField(1)},{key:"shift+tab",cmd:()=>J.cycleField(-1)},{key:"ctrl+e",cmd:()=>J.stepEngine(1)},...f==="engine"?[{key:"left",cmd:()=>J.stepEngine(-1)},{key:"right",cmd:()=>J.stepEngine(1)},{key:"return",cmd:()=>J.commit()}]:[]]}import{TextAttributes as j4}from"@opentui/core";function dN(f){let J=Pf(),{theme:Y}=d0(),[z,G]=r("prompt"),[Z,q]=r(""),[Q,H]=r(f.defaultVendor),[B,V]=r(f.defaultBaseRef);function j(M){let g=MQ.indexOf(z());G(MQ[(g+M+MQ.length)%MQ.length]??"prompt")}function U(M){let g=f.engines;if(g.length===0)return;if(M>0){H((a)=>GY(g,a));return}let I=Math.max(0,g.indexOf(Q()));H(g[(I-1+g.length)%g.length]??Q())}function L(){let M=Z().trim();if(!M){G("prompt");return}f.onSubmit({prompt:M,vendor:Q(),baseRef:B().trim()||f.defaultBaseRef}),J.clear()}Df(()=>({enabled:!0,bindings:B4(z(),{cycleField:j,stepEngine:U,commit:L})}));let O=(M)=>z()===M?Y.accent:Y.textMuted;return(()=>{var M=W("box"),g=W("box"),I=W("text"),a=W("text"),N=W("box"),A=W("text"),R=W("input"),S=W("box"),_=W("text"),z0=W("box"),e=W("text"),Y0=W("input"),T=W("box"),Q0=W("text");return D(M,g),D(M,N),D(M,S),D(M,z0),D(M,T),X(M,"paddingLeft",2),X(M,"paddingRight",2),X(M,"gap",1),D(g,I),D(g,a),X(g,"flexDirection","row"),X(g,"justifyContent","space-between"),K(I,()=>F("quickTask.title",{repoLabel:f.repoLabel})),X(a,"onMouseUp",()=>f.onCancel()),K(a,()=>F("quickTask.esc")),D(N,A),D(N,R),X(N,"gap",0),K(A,()=>F("quickTask.promptLabel")),X(R,"onInput",(t)=>q(Z1(t))),X(R,"onSubmit",()=>L()),D(S,_),X(S,"flexDirection","row"),X(S,"gap",2),K(_,()=>F("quickTask.engineLabel")),K(S,b(Zf,{get each(){return f.engines},children:(t)=>(()=>{var V0=W("text");return X(V0,"onMouseUp",()=>{H(t),G("engine")}),K(V0,()=>f.engineLabel(t)),E((C0)=>{var $=Q()===t?Y.primary:Y.textMuted,x=Q()===t?j4.BOLD:void 0;return $!==C0.e&&(C0.e=X(V0,"fg",$,C0.e)),x!==C0.t&&(C0.t=X(V0,"attributes",x,C0.t)),C0},{e:void 0,t:void 0}),V0})()}),null),D(z0,e),D(z0,Y0),X(z0,"gap",0),K(e,()=>F("quickTask.branchLabel")),X(Y0,"onInput",(t)=>V(Z1(t))),X(Y0,"onSubmit",()=>L()),D(T,Q0),X(T,"paddingBottom",1),K(Q0,()=>F("quickTask.legend")),E((t)=>{var V0=j4.BOLD,C0=Y.text,$=Y.textMuted,x=O("prompt"),f0=Z(),u=F("quickTask.promptPlaceholder"),G0=z()==="prompt",w=O("engine"),n=O("branch"),q0=B(),W0=f.defaultBaseRef,H0=z()==="branch",k0=Y.textMuted;return V0!==t.e&&(t.e=X(I,"attributes",V0,t.e)),C0!==t.t&&(t.t=X(I,"fg",C0,t.t)),$!==t.a&&(t.a=X(a,"fg",$,t.a)),x!==t.o&&(t.o=X(A,"fg",x,t.o)),f0!==t.i&&(t.i=X(R,"value",f0,t.i)),u!==t.n&&(t.n=X(R,"placeholder",u,t.n)),G0!==t.s&&(t.s=X(R,"focused",G0,t.s)),w!==t.h&&(t.h=X(_,"fg",w,t.h)),n!==t.r&&(t.r=X(e,"fg",n,t.r)),q0!==t.d&&(t.d=X(Y0,"value",q0,t.d)),W0!==t.l&&(t.l=X(Y0,"placeholder",W0,t.l)),H0!==t.u&&(t.u=X(Y0,"focused",H0,t.u)),k0!==t.c&&(t.c=X(Q0,"fg",k0,t.c)),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0}),M})()}function iN(f,J){return new Promise((Y)=>{f.replace(()=>b(dN,rU(J,{onSubmit:(z)=>Y(z),onCancel:()=>Y(void 0)})),()=>Y(void 0)),f.setSize("medium")})}var MQ,W4;var V4=C(()=>{P();P();P();P();P();P();P();Wf();K1();Ef();G1();b1();h1();yG();MQ=["prompt","engine","branch"];W4={show:iN}});async function K4(f={}){let J=f.logTag??"orch-connect",Y=f.connect??p1,z=null;try{let G=await Y();if(!G)return nJ(J,"no daemon running \u2014 caller degrades"),null;return z=new j1(G,{...f.orchestratorOptions,channels:f.channels}),await z.init(),z}catch(G){return BY(J,G),z?.dispose(),null}}var U4=C(()=>{_Y();y1();EY()});function D4(f){let[J,Y]=r(f.initial??"sidebar"),[z,G]=r(0),Z=Y1();function q(j){if(G((L)=>L+1),J()===j)return;let U=Z?.currentFocusedRenderable;if(U&&!U.isDestroyed)try{U.blur()}catch{}Y(j)}function Q(j){let L=(FQ.indexOf(J())+j+FQ.length)%FQ.length;q(FQ[L])}let H=new Map;function B(j){let U=H.get(j);if(!U)U=()=>J()===j,H.set(j,U);return U}let V={focused:J,is:B,setFocused:q,cycle:Q,refocusTick:z};return b(lN.Provider,{value:V,get children(){return f.children}})}var FQ,lN;var L4=C(()=>{P();P();Wf();FQ=["sidebar","workspace","files","terminal"],lN=gJ(null)});function M4(){for(let f of xY){let J=aN.get(f.id);if(!J)continue;let Y=f;Y.keys=[...J.keys],Y.hint=J.hint?{...J.hint}:void 0}}function F4(){$N((f)=>f+1)}function q8(f){return rN.get(f)}function pN(f){return q8(f)?.keys??[]}function wY(f){let J=[];for(let Y in f){let z=f[Y];if(!z)continue;let G=pN(Y);if(G.length===0){console.warn(`[kobe/keybindings] bindByIds: id="${Y}" has no chords (or doesn't exist in KobeKeymap)`);continue}G.forEach((Z,q)=>J.push({key:Z,cmd:z,slot:q}))}return J}var xY,aN,X8,$N,rN;var bG=C(()=>{Wf();xY=[{id:"help.open",scope:"global",keys:["f1"],category:"Global",description:"Show keybindings help",hint:{keys:"F1",label:"help",pin:"right"}},{id:"task.new",scope:"sidebar",keys:["n"],category:"Sidebar",description:"New task",hint:{keys:"n",label:"new"}},{id:"task.openEditor",scope:"global",keys:["ctrl+o"],category:"Global",description:"Open active task worktree in editor"},{id:"settings.open",scope:"global",keys:["ctrl+,"],category:"Global",description:"Open settings"},{id:"settings.open.sidebar",scope:"sidebar",keys:["s"],category:"Sidebar",description:"Open settings",hint:{keys:"s",label:"settings",status:!1}},{id:"app.quit",scope:"sidebar",keys:["q"],category:"Sidebar",description:"Quit (with confirm)",hint:{keys:"q",label:"quit",status:!1}},{id:"focus.sidebar",scope:"workspace",keys:["ctrl+q"],category:"Workspace",description:"Back to sidebar (tasks)",hint:{keys:"ctrl+q",label:"tasks"}},{id:"focus.numeric",scope:"global",keys:["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],category:"Navigation",description:"Jump to pane (h=sidebar, j=workspace, k=files, l=terminal)",hint:{keys:"ctrl+hjkl",label:"focus",pin:"right",status:!1}},{id:"chat.interrupt",scope:"workspace",keys:[],category:"Workspace",description:"Interrupt current turn (esc while streaming)"},{id:"sidebar.nav",scope:"sidebar",keys:["j","k","down","up"],category:"Sidebar",description:"Move cursor up/down",hint:{keys:"j/k",label:"nav"}},{id:"sidebar.select",scope:"sidebar",keys:["return"],category:"Sidebar",description:"Open the selected task",hint:{keys:"enter",label:"select"}},{id:"sidebar.goto",scope:"sidebar",keys:["g"],category:"Sidebar",description:"Top / bottom of list (gg or shift-G)"},{id:"sidebar.rename",scope:"sidebar",keys:["r"],category:"Sidebar",description:"Rename task",hint:{keys:"r",label:"rename",status:!1}},{id:"sidebar.archive",scope:"sidebar",keys:["a"],category:"Sidebar",description:"Toggle archive",hint:{keys:"a",label:"archive",status:!1}},{id:"sidebar.localMerge",scope:"sidebar",keys:["m"],category:"Sidebar",description:"Local merge task into parent repo (Shift+M)",hint:{keys:"M",label:"merge",status:!1}},{id:"sidebar.pin",scope:"sidebar",keys:["p"],category:"Sidebar",description:"Pin / unpin task at top (Shift+P)",hint:{keys:"P",label:"pin",status:!1}},{id:"sidebar.view",scope:"sidebar",keys:["[","]"],category:"Sidebar",description:"Switch view (Working session \u2194 Archives)",hint:{keys:"[/]",label:"view",status:!1}},{id:"sidebar.sort",scope:"sidebar",keys:["t"],category:"Sidebar",description:"Switch task sort (default \u2194 recent)",hint:{keys:"t",label:"sort",status:!1}},{id:"sidebar.projectFilter",scope:"sidebar",keys:["ctrl+p"],category:"Sidebar",description:"Cycle task project filter",hint:{keys:"ctrl+p",label:"project",status:!1}},{id:"sidebar.delete",scope:"sidebar",keys:["d"],category:"Sidebar",description:"Delete task (with confirm)",hint:{keys:"d",label:"delete",status:!1}},{id:"sidebar.search.enter",scope:"sidebar",keys:["/"],category:"Sidebar",description:"Search tasks (fuzzy filter)",hint:{keys:"/",label:"search"}},{id:"sidebar.search.nav",scope:"sidebar",keys:["down","up"],category:"Sidebar",description:"Move highlight in search results"},{id:"sidebar.search.submit",scope:"sidebar",keys:["return"],category:"Sidebar",description:"Select search match and exit search"},{id:"sidebar.search.cancel",scope:"sidebar",keys:["escape"],category:"Sidebar",description:"Cancel search (restore prior selection)"},{id:"tasks.openWorktree",scope:"sidebar",keys:["o"],category:"Tasks pane",description:"Open selected task's worktree in your editor",hint:{keys:"o",label:"open wt",status:!1}},{id:"tasks.renameBranch",scope:"sidebar",keys:["b"],category:"Tasks pane",description:"Rename the selected task's git branch",hint:{keys:"b",label:"branch",status:!1}},{id:"tasks.cycleEngine",scope:"sidebar",keys:["v"],category:"Tasks pane",description:"Cycle engine vendor (claude \u2194 codex \u2194 \u2026) \u2014 applies on reopen",hint:{keys:"v",label:"engine",status:!1}},{id:"tasks.update",scope:"sidebar",keys:["u"],category:"Tasks pane",description:"Open the update page (when a new version is available)",hint:{keys:"u",label:"update",status:!1}},{id:"tasks.focusEngine",scope:"sidebar",keys:["right"],category:"Tasks pane",description:"Focus the engine pane of the current window",hint:{keys:"\u2192",label:"engine",status:!1}},{id:"tasks.toggleKeys",scope:"sidebar",keys:["?"],category:"Tasks pane",description:"Collapse / expand the keys legend",hint:{keys:"?",label:"fold keys",status:!1}},{id:"tmux.quickTask",scope:"global",keys:[],category:"Workspace (tmux)",description:"Quick new task (tmux prefix, then f)",hint:{keys:"prefix f",label:"new task",status:!1}},{id:"tmux.engineTab",scope:"global",keys:[],category:"Workspace (tmux)",description:"Open the engine in a new tab (tmux prefix, then t)",hint:{keys:"prefix t",label:"engine tab",status:!1}},{id:"tmux.layout.workspaceSplit",scope:"global",keys:[],category:"Workspace (tmux)",description:"Add a temporary workspace split (tmux prefix, then s)",hint:{keys:"prefix s",label:"split",status:!1}},{id:"tmux.layout.workspaceClose",scope:"global",keys:[],category:"Workspace (tmux)",description:"Close the focused temporary workspace split (tmux prefix, then x)",hint:{keys:"prefix x",label:"close split",status:!1}},{id:"tmux.layout.workspaceReset",scope:"global",keys:[],category:"Workspace (tmux)",description:"Close all temporary workspace splits (tmux prefix, then r)",hint:{keys:"prefix r",label:"reset splits",status:!1}},{id:"tmux.layout.tasksToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Hide / restore the Tasks pane (tmux prefix, then a)",hint:{keys:"prefix a",label:"tasks pane",status:!1}},{id:"tmux.layout.opsToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Toggle the file/Ops pane (tmux prefix, then o)",hint:{keys:"prefix o",label:"file pane",status:!1}},{id:"tmux.layout.terminalToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Hide / restore the terminal pane (tmux prefix, then z)",hint:{keys:"prefix z",label:"terminal",status:!1}},{id:"tmux.layout.zenToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Zen mode \u2014 collapse to the engine pane (tmux prefix, then space)",hint:{keys:"prefix space",label:"zen",status:!1}},{id:"chat.send",scope:"workspace",keys:[],category:"Workspace",description:"Send message (composer)",hint:{keys:"enter",label:"send"}},{id:"chat.newline",scope:"workspace",keys:[],category:"Workspace",description:"Newline in composer",hint:{keys:"shift+enter",label:"newline"}},{id:"chat.cycle-mode",scope:"workspace",keys:[],category:"Workspace",description:"Cycle permission mode (composer)",hint:{keys:"shift+tab",label:"mode"}},{id:"chat.steer",scope:"workspace",keys:[],category:"Workspace",description:"Steer (interrupt + send) \u2014 mid-stream only",hint:{keys:"ctrl+enter",label:"steer",status:!1}},{id:"chat.tab.new",scope:"workspace",keys:["ctrl+t"],category:"Workspace",description:"New chat tab",hint:{keys:"ctrl+t",label:"new tab"}},{id:"chat.fork.new",scope:"workspace",keys:["ctrl+f"],category:"Workspace",description:"Quick-fork: create child task seeded with current repo/branch/model",hint:{keys:"ctrl+f",label:"fork"}},{id:"chat.session.resume",scope:"workspace",keys:["ctrl+y"],category:"Workspace",description:"Resume a prior session in this task's worktree",hint:{keys:"ctrl+y",label:"resume",status:!1}},{id:"chat.tab.close",scope:"workspace",keys:["ctrl+w"],category:"Workspace",description:"Close chat tab",hint:{keys:"ctrl+w",label:"close tab",status:!1}},{id:"chat.tab.rename",scope:"workspace",keys:["f2"],category:"Workspace",description:"Rename active chat tab",hint:{keys:"f2",label:"rename tab",status:!1}},{id:"chat.tab.cycle-next",scope:"workspace",keys:["ctrl+]"],category:"Workspace",description:"Next chat tab",hint:{keys:"ctrl+]",label:"next tab",status:!1}},{id:"chat.tab.cycle-prev",scope:"workspace",keys:["ctrl+["],category:"Workspace",description:"Previous chat tab",hint:{keys:"ctrl+[",label:"prev tab",status:!1}},{id:"chat.question.nav",scope:"workspace",keys:["j","k","down","up"],category:"Workspace",description:"Move highlight in question picker",hint:{keys:"j/k",label:"pick",status:!1}},{id:"chat.question.toggle",scope:"workspace",keys:["space"],category:"Workspace",description:"Toggle highlighted option in question picker",hint:{keys:"space",label:"toggle",status:!1}},{id:"chat.question.submit",scope:"workspace",keys:["return"],category:"Workspace",description:"Advance / submit question picker",hint:{keys:"enter",label:"submit",status:!1}},{id:"chat.question.pick-number",scope:"workspace",keys:["1","2","3","4","5","6","7","8","9"],category:"Workspace",description:"Pick option by number in question picker",hint:{keys:"1-9",label:"pick",status:!1}},{id:"files.nav",scope:"files",keys:["j","k","down","up"],category:"Files",description:"Move cursor up/down",hint:{keys:"j/k",label:"nav"}},{id:"files.hierarchy",scope:"files",keys:["h","l","left","right"],category:"Files",description:"Collapse / expand tree level",hint:{keys:"h/l",label:"level"}},{id:"files.open",scope:"files",keys:["return"],category:"Files",description:"Open file in nvim (diff vs HEAD when changed)",hint:{keys:"enter",label:"open"}},{id:"files.tab",scope:"files",keys:["[","]"],category:"Files",description:"Switch tab (cycle All / Changes)",hint:{keys:"[/]",label:"tab",status:!1}},{id:"files.refresh",scope:"files",keys:["r"],category:"Files",description:"Refresh",hint:{keys:"r",label:"refresh",status:!1}},{id:"files.openExternal",scope:"files",keys:["o"],category:"Files",description:"Open file in system default app (audio / video / pdf preview)",hint:{keys:"o",label:"open external",status:!1}},{id:"files.mention",scope:"files",keys:["a"],category:"Files",description:"Inject @<path> mention into the engine pane",hint:{keys:"a",label:"@mention"}},{id:"files.createPR",scope:"files",keys:["p"],category:"Files",description:"Create PR from the current task",hint:{keys:"p",label:"create PR"}},{id:"terminal.scroll-up",scope:"terminal",keys:["ctrl+pageup"],category:"Terminal",description:"Scroll scrollback up",hint:{keys:"ctrl+pgup",label:"scroll",status:!1}},{id:"terminal.scroll-down",scope:"terminal",keys:["ctrl+pagedown"],category:"Terminal",description:"Scroll scrollback down"},{id:"terminal.reset",scope:"terminal",keys:["f5"],category:"Terminal",description:"Reset terminal \u2014 kill the current shell and respawn",hint:{keys:"f5",label:"reset"}},{id:"dialog.cancel",scope:"global",keys:[],category:"Dialog",description:"Close the top dialog (esc)"},{id:"dialog.newtask.tab.cycle",scope:"global",keys:[],category:"Dialog",description:"Switch New Task tab (Existing / New Repo)",hint:{keys:"ctrl+[/]",label:"tab"}}],aN=new Map(xY.map((f)=>[f.id,{keys:[...f.keys],hint:f.hint?{...f.hint}:void 0}]));[X8,$N]=r(0);rN=new Map(xY.map((f)=>[f.id,f]))});function OQ(){if(hY)return hY;let f=Dq();if(!f.exists)return hY={path:f.path,exists:!1,applied:[],warnings:[]},hY;let J=[...f.warnings],Y=Mq(f.doc,process.platform,{chordOptsFor:wB});J.push(...Y.warnings);let z=Y.entries.filter((Q)=>Q.id.startsWith("tmux.")),G=Y.entries.filter((Q)=>!Q.id.startsWith("tmux.")),Z=m7(xY,G);J.push(...Z.warnings);let q=[...Z.applied];if(z.length>0){let Q=xB(z);J.push(...Q.warnings);for(let H of Q.overridden){if(H===SJ){q.push({id:H,keys:Q.focus.map((j)=>j?.chord??"").filter((j)=>j!==""),defaultKeys:RY});continue}let B=Q.binds[H];q.push({id:H,keys:B?[B.chord]:[],defaultKeys:[Kz[H]]});let V=xY.find((j)=>j.id===H);if(V?.hint)V.hint.keys=B?`${ZG(H)?"prefix ":""}${B.chord}`:"\u2014"}}for(let Q of J)console.warn(`[kobe/keybindings] ${Q}`);return hY={path:f.path,exists:!0,applied:q,warnings:J},hY}function O4(){return hY??OQ()}function A4(){hY=null,v7(),i7(),M4();let f=OQ();return F4(),f}var hY=null;var Q8=C(()=>{uB();Aq();Fq();bG()});var _N=250,SG,g4;var PZ=C(()=>{RG();lY();aj();({use:SG,provider:g4}=jQ({name:"KV",init:()=>{let[f,J]=uJ(cf()),Y=new Set,z=null;function G(Q){if(Y.size===0)return!0;try{let H={};for(let B of Y)H[B]=f[B];return iY(H),Y.clear(),!0}catch(H){return console.error(`[kobe] kv ${Q} failed:`,H),!1}}function Z(){if(z)clearTimeout(z);z=setTimeout(()=>{z=null,G("write")},_N)}let q={get ready(){return!0},get store(){return f},signal(Q,H){if(f[Q]===void 0)J(Q,H);return[()=>q.get(Q),(B)=>q.set(Q,B)]},get(Q,H){return f[Q]??H},set(Q,H){J(Q,H),Y.add(Q),Z()},flush(){if(z)clearTimeout(z),z=null;return G("flush")},clear(){for(let Q of Object.keys(f))J(Q,void 0);if(z)clearTimeout(z),z=null;Y.clear();try{U9({})}catch(Q){console.error("[kobe] kv clear write failed:",Q)}}};return q}}))});var AQ="../pulse-n3cq1btw.wav";var R4=()=>{};import{existsSync as sN,mkdirSync as tN}from"fs";import{tmpdir as eN}from"os";import{basename as fy,isAbsolute as Jy,join as H8,resolve as Yy}from"path";function Gy(f,J,Y){if(f==="ffplay")return[f,"-autoexit","-nodisp","-af",`volume=${Y}`,J];if(f==="mpv")return[f,"--no-video","--audio-display=no","--volume",String(Math.round(Y*100)),J];if(f==="mpg123"||f==="mpg321")return[f,"-g",String(Math.round(Y*100)),J];if(f==="mplayer")return[f,"-vo","null","-volume",String(Math.round(Y*100)),J];if(f==="afplay"||f==="omxplayer"||f==="aplay"||f==="cmdmp3")return[f,J];if(f==="play")return[f,"-v",String(Y),J];if(f==="cvlc")return[f,`--gain=${Y}`,"--play-and-exit",J];return[f,"-c",`(New-Object Media.SoundPlayer '${J.replace(/'/g,"''")}').PlaySync()`]}function Zy(){if(gQ!==void 0)return gQ;let J=(process.env.PATH??"").split(":").filter(Boolean);return gQ=zy.find((Y)=>J.some((z)=>sN(H8(z,Y))))??null,gQ}async function Xy(){return N4??=(async()=>{tN(k4,{recursive:!0});let f=H8(k4,fy(C4)),J=Bun.file(f);if(await J.exists())return f;return await Bun.write(J,Bun.file(C4)),f})(),N4}function y4(f=0.4){let J=Zy();if(!J)return;Xy().then((Y)=>{try{Bun.spawn(Gy(J,Y,f),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var C4,k4,zy,gQ,N4;var b4=C(()=>{R4();C4=Jy(AQ)?AQ:Yy(import.meta.dir,AQ),k4=H8(eN(),"kobe-sfx"),zy=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function S4(f,J){return`${f}:${J}`}function T4(f){let J=SG(),[Y,z]=r([]),[G,Z]=r(new Map),q=0;function Q(j){if(Z((U)=>{let L=new Map(U),O=S4(j.taskId,j.tabId),M=U.get(O);if(M==="needs_input"||M==="error")return U;return L.set(O,j.kind),L}),J.get("notifications.sound.enabled",!0)!==!1){try{process.stdout.write("\x07")}catch{}y4()}if(J.get("notifications.toast.enabled",!0)!==!1){let U=++q,L={id:U,kind:j.kind,taskId:j.taskId,tabId:j.tabId,title:j.title};z((O)=>[...O,L]),setTimeout(()=>H(U),qy)}}function H(j){z((U)=>U.filter((L)=>L.id!==j))}function B(j,U){Z((L)=>{let O=S4(j,U);if(!L.has(O))return L;let M=new Map(L);return M.delete(O),M})}let V={toasts:Y,unread:G,notify:Q,dismiss:H,markRead:B};return b(I4.Provider,{value:V,get children(){return f.children}})}function RQ(){let f=u1(I4);if(!f)throw Error("useNotifications must be used within a NotificationsProvider");return f}var qy=4500,I4;var CQ=C(()=>{P();Wf();b4();PZ();I4=gJ()});function B8(f,J){if(typeof J.theme==="string"&&J.theme.length>0&&J.theme!==f.selectedTheme()){if(!f.hasTheme(J.theme))f.reloadUserThemes();if(f.hasTheme(J.theme))f.setTheme(J.theme)}if(typeof J.transparentBackground==="boolean"&&J.transparentBackground!==f.transparentBackground())f.setTransparentBackground(J.transparentBackground);if(J.focusAccent===null||typeof J.focusAccent==="string"){let Y=Hy(J.focusAccent);if(Y&&Y!==f.focusAccent())f.setFocusAccent(Y)}}function Hy(f){if(f===null)return"primary";return Qy.includes(f)?f:null}var Qy;var u4=C(()=>{Qy=["primary","success","info"]});import{readFileSync as By}from"fs";function E4(f){try{let J=JSON.parse(By(v1(),"utf8")),Y=typeof J.activeTheme==="string"&&IZ(J.activeTheme)?J.activeTheme:f,z=J.transparentBackground===!0,G=typeof J.focusAccent==="string"&&gz.includes(J.focusAccent)?J.focusAccent:null,Z=TZ(J[kQ])?J[kQ]:kG;return{theme:Y,transparent:z,focusAccent:G,locale:Z}}catch{return{theme:f,transparent:!1,focusAccent:null,locale:kG}}}var kQ="locale";var j8=C(()=>{lf();Ef();NG()});function Wy(f){if(f)gX(f);OQ();for(let{name:J,theme:Y}of VZ())rj(J,Y)}function Vy(f){let J={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return f?{...J,onDestroy:f}:J}function Ky(f){let J=()=>f.children,Y=()=>f.notifications?b(T4,{get children(){return J()}}):J(),z=()=>b(d6,{get children(){return Y()}}),G=()=>f.focus?b(D4,{initial:"sidebar",get children(){return z()}}):z(),Z=()=>f.kv?b(g4,{get children(){return G()}}):G();return b(q6,{mode:"dark",get theme(){return f.theme},get children(){return Z()}})}function Uy(f){let J=d0(),Y={selectedTheme:()=>J.selected,hasTheme:(Q)=>J.has(Q),setTheme:(Q)=>J.set(Q),reloadUserThemes:()=>{for(let{name:Q,theme:H}of VZ())rj(Q,H)},transparentBackground:()=>J.transparentBackground,setTransparentBackground:(Q)=>J.setTransparentBackground(Q),focusAccent:()=>J.focusAccent,setFocusAccent:(Q)=>J.setFocusAccent(Q)};B8(Y,{theme:f.boot.theme,transparentBackground:f.boot.transparent,focusAccent:f.boot.focusAccent}),uZ(f.boot.locale);let[z,G]=r(null),Z=!1;f1(()=>{(async()=>{let Q=await K4({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!Q)return;if(Z){Q.dispose();return}G(Q)})()}),ff(()=>{let Q=z()?.uiPrefsSignal()();if(!Q)return;if(B8(Y,Q),TZ(Q.locale))uZ(Q.locale)});let q=null;return ff(()=>{let Q=z()?.keybindingsRevSignal()();if(Q==null)return;if(q===null||Q===q){q=Q;return}q=Q,A4()}),vf(()=>{Z=!0,z()?.dispose()}),null}async function L1(f){Wy(f.logContext);let J=E4(jy),Y=await f.setup(J),z=f.providers?.kv??!0,G=f.providers?.focus??!0,Z=f.providers?.notifications??!1;await f6(()=>b(Ky,{get theme(){return J.theme},kv:z,focus:G,notifications:Z,get children(){return[b(Uy,{boot:J}),I0(()=>Y.root())]}}),Vy(Y.onDestroy))}var jy="claude";var PY=C(()=>{P();P();P();_Y();Wf();U4();L4();Q8();PZ();CQ();Ef();kq();G1();h1();u4();j8()});async function W8(f,J,Y,z,G={}){let Z=Mf(J.id);if(await Bf(Z))return!0;let q=J.worktreePath;if(!q)q=await f.ensureWorktree(J.id);if(!q)throw Error(`task ${J.id} has no worktree`);let{ensureSession:Q}=await Promise.resolve().then(() => (J1(),r1)),{resolveEngineLaunchInit:H}=await Promise.resolve().then(() => (zG(),TB)),B=H(Y,q,{kind:G.includeInitPrompt?"repo-init":"none"});if(!await Q({name:Z,cwd:q,command:N1(z),taskId:J.id,vendor:z,repo:Y,launchInit:B}))throw Error(`failed to start tmux session for ${J.id}`);return!1}async function NQ(f,J,Y,z,G={}){await W8(f,J,Y,z,G),await f.setActiveTask(J.id).catch(()=>{});let{prepareWindowForSwitch:Z}=await Promise.resolve().then(() => (J1(),r1));await Z(Mf(J.id)),await v0(["switch-client","-t",`=${Mf(J.id)}`])}var V8=C(()=>{E1();Sf()});var x4={};jf(x4,{startNewTaskHost:()=>Dy,NewTaskPage:()=>yQ});function yQ(f){let{theme:J}=d0(),Y=Pf();f1(()=>{z()});async function z(){let G=m1(),Z=f.defaultRepo||G[0]||process.cwd(),q=kf("lastSelectedVendor")??yf,Q=await dJ(),H=f.orchestrator,B=await LQ.show(Y,Z,G,{defaultVendor:q,availableVendors:Q,discoverAdoptable:H?(j)=>H.discoverAdoptableWorktrees(j):void 0});if(!B)process.exit(0);if(af("lastSelectedVendor",B.vendor),PJ(B.repo),!H)console.error("[kobe new-task] no daemon; cannot create task"),process.exit(1);let V;try{if(B.mode==="adopt")for(let j of B.adopt)V=await H.adoptWorktree({repo:B.repo,worktreePath:j.worktreePath,branch:j.branch,vendor:B.vendor});else V=await H.createTask({repo:B.repo,baseRef:B.baseRef,vendor:B.vendor})}catch(j){console.error("[kobe new-task] task.create/adopt failed:",j),process.exit(1)}if(V)try{await NQ(H,V,B.repo,B.vendor,{includeInitPrompt:B.mode!=="adopt"})}catch(j){console.error("[kobe new-task] auto-enter failed:",j)}process.exit(0)}return(()=>{var G=W("box");return X(G,"flexDirection","column"),X(G,"flexGrow",1),E((Z)=>X(G,"backgroundColor",J.background,Z)),G})()}async function Dy(f){await L1({setup:async()=>{let J=null;try{let Y=await UJ(),z=new j1(Y);await z.init(),J=z}catch(Y){console.error("[kobe new-task] daemon unavailable; cannot create task:",Y)}return{root:()=>b(yQ,{get defaultRepo(){return f.defaultRepo},orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var K8=C(()=>{P();P();P();P();y1();Wf();EY();oY();gf();S1();yG();Ef();PY();V8();h1()});function bQ(f,J,Y,z,G={}){if(f.length===0)return J;let Z=new Map;for(let H of f)Z.set(Y(H),H);let q=f.length===J.length,Q=Array(J.length);for(let H=0;H<J.length;H++){let B=J[H],V=Z.get(Y(B));if(V&&z(V,B)&&(!G.samePosition||f[H]===V)){if(Q[H]=V,q&&f[H]!==V)q=!1}else Q[H]=B,q=!1}return q?f:Q}function w4(f,J){if(!f)return!0;let Y=f.toLowerCase(),z=J.toLowerCase(),G=0;for(let Z=0;Z<z.length&&G<Y.length;Z++)if(z.charCodeAt(Z)===Y.charCodeAt(G))G++;return G===Y.length}function Ly(f,J){let Y=J==="archived";return f.filter((z)=>z.archived===Y)}function U8(f,J,Y,z="default",G){let Z=Ly(f,J),q=Y?.trim()??"",Q=G?o1(G):null,H=q?Z.filter((M)=>w4(q,`${M.title} ${MJ(M.repo)}`)):Z,B=[],V=[],j=[],U=new Set;for(let M of H){if(M.kind==="main"){let g=o1(M.repo);if(U.has(g))continue;U.add(g),B.push(M);continue}if(Q&&o1(M.repo)!==Q)continue;if(M.pinned===!0)V.push(M);else j.push(M)}if(B.sort((M,g)=>MJ(M.repo).localeCompare(MJ(g.repo))),z==="recent")V.sort(h4),j.sort(h4);let L=[],O=0;for(let M of B)L.push({kind:"task",task:M,flatIndex:O}),O++;for(let M of V)L.push({kind:"task",task:M,flatIndex:O}),O++;for(let M of j)L.push({kind:"task",task:M,flatIndex:O}),O++;return L}function h4(f,J){let Y=P4(J)-P4(f);if(Y!==0)return Y;return String(J.id).localeCompare(String(f.id))}function P4(f){let J=Date.parse(f.updatedAt||f.createdAt);return Number.isFinite(J)?J:0}function MJ(f){let J=f.split("/").filter(Boolean);return J[J.length-1]??f}function o1(f){return f.trim().replace(/[\\/]+$/,"")||f}function My(f,J){let Y=MJ(f);if(!J.some((G)=>G!==f&&MJ(G)===Y))return Y;return f.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function v4(f,J){let Y=J==="archived",z=new Map;for(let Z of f){let q=o1(Z.repo),Q=z.get(q)??{repo:Z.repo,count:0};if(Z.kind==="main")Q.repo=Z.repo;else if(Z.archived===Y)Q.count+=1;z.set(q,Q)}let G=[...z.values()].map((Z)=>Z.repo);return[...z.values()].map((Z)=>({repo:Z.repo,label:My(Z.repo,G),count:Z.count})).sort((Z,q)=>Z.label.localeCompare(q.label))}function m4(f,J){if(f.length===0)return-1;if(!J)return f[0]?.flatIndex??-1;let Y=o1(J),z=f.find((Z)=>Z.task.kind!=="main"&&o1(Z.task.repo)===Y);if(z)return z.flatIndex;return f.find((Z)=>Z.task.kind==="main"&&o1(Z.task.repo)===Y)?.flatIndex??f[0]?.flatIndex??-1}function D8(f){return f.map((J)=>J.task.id)}function c4(f){let J=[],Y=[];for(let z of f)if(z.task.kind==="main")J.push(z);else Y.push(z);return{projectRows:J,taskRows:Y}}function Fy(f,J){return f===J||f.id===J.id&&f.kind===J.kind&&f.title===J.title&&f.repo===J.repo&&f.branch===J.branch&&f.worktreePath===J.worktreePath&&f.status===J.status&&f.archived===J.archived&&f.pinned===J.pinned&&f.vendor===J.vendor}function n4(f,J){return bQ(f,J,(Y)=>Y.task.id,(Y,z)=>Y.flatIndex===z.flatIndex&&Fy(Y.task,z.task),{samePosition:!0})}var SQ=()=>{};var d4={};jf(d4,{startQuickTaskHost:()=>Ry});async function Oy(f,J){let Y,z;if(J){let j=await C1(J,["@kobe_task","@kobe_worktree"]);Y=j["@kobe_task"]||void 0,z=j["@kobe_worktree"]||void 0}let G=(Y?f?.getTask(Y)?.repo:void 0)??m1()[0],Z=G??z??process.cwd();if(!G)return{ctx:null,fallbackRepo:Z};let q=await dJ(),Q=kf("lastSelectedVendor")??yf,H=q.length===0||q.includes(Q)?Q:q[0]??Q,B=EZ(W1(G))??LJ,V=q.length>0?q:[H];return{ctx:{repo:G,vendor:H,baseRef:B,engines:V},fallbackRepo:Z}}async function Ay(f,J,Y,z,G){let Z=await W8(f,J,Y,z),q=Mf(J.id),{pane:Q}=await jZ(q,!Z);if(Q)await WZ(Q,G)}function gy(f){let{theme:J}=d0(),Y=Pf();f1(()=>{z()});async function z(){let G=f.ctx,Z=await W4.show(Y,{repoLabel:MJ(G.repo),engines:G.engines,defaultVendor:G.vendor,defaultBaseRef:G.baseRef,engineLabel:qz});if(Z===void 0)process.exit(0);af("lastSelectedVendor",Z.vendor),PJ(G.repo);let q=f.orchestrator;if(!q)console.error("[kobe quick-task] no daemon; cannot create task"),process.exit(1);try{let Q=await q.createTask({repo:G.repo,baseRef:Z.baseRef,vendor:Z.vendor});await Ay(q,Q,G.repo,Z.vendor,Z.prompt),await NQ(q,Q,G.repo,Z.vendor)}catch(Q){console.error("[kobe quick-task] task.create/deliver failed:",Q),process.exit(1)}process.exit(0)}return(()=>{var G=W("box");return X(G,"flexDirection","column"),X(G,"flexGrow",1),E((Z)=>X(G,"backgroundColor",J.background,Z)),G})()}async function Ry(f){await L1({setup:async()=>{let J=null;try{let G=await UJ(),Z=new j1(G);await Z.init(),J=Z}catch(G){console.error("[kobe quick-task] daemon unavailable; cannot create task:",G)}let{ctx:Y,fallbackRepo:z}=await Oy(J,f.session);return{root:()=>Y?b(gy,{ctx:Y,orchestrator:J}):b(yQ,{defaultRepo:z,orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var i4=C(()=>{P();P();P();P();y1();Wf();EY();oY();E1();gf();Sf();gq();S1();V4();Ef();VQ();PY();UQ();V8();K8();SQ();h1()});function TQ(f){let J=f.trim().split(/\s+/).pop()??"",Y=/^([CM])-(.+)$/.exec(J);if(!Y)return null;let z=Y[1]==="C"?"\u2303":"\u2325",G=Y[2]??"";return`${z}${G.length===1?G.toUpperCase():G}`}function IQ(f,J){if(f.includes("/"))return f.split("/").map((G)=>IQ(G,J)).join("/");let Y=f.toLowerCase();if(Y==="tab")return"tab";let z=ky[Y];if(z)return z;if(/^f\d{1,2}$/.test(Y))return Y.toUpperCase();if(!J)return f;if(/^[a-z]$/.test(Y))return f.toUpperCase();return f.replace(/[a-z]+/gi,(G)=>G.toUpperCase())}function IG(f,J="\u2303B"){let Y=f.trim();if(!Y)return Y;let z=/^prefix\s+(.+)$/i.exec(Y);if(z){let Q=z[1]??"";return`${J} ${Q.includes("+")?IG(Q,J):IQ(Q,!0)}`}let G=Y.split("+");if(G.length===1)return IQ(G[0]??"",!1);let Z=G[G.length-1]??"";return`${G.slice(0,-1).map((Q)=>Cy[Q.toLowerCase().trim()]??Q).join("")} ${IQ(Z,!0)}`}var Cy,ky;var L8=C(()=>{Cy={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},ky={enter:"\u23CE",return:"\u23CE",esc:"\u238B",escape:"\u238B",space:"\u2423",up:"\u2191",down:"\u2193",left:"\u2190",right:"\u2192",backspace:"\u232B",delete:"\u2326",del:"\u2326",pgup:"\u21DE",pageup:"\u21DE",pgdn:"\u21DF",pagedown:"\u21DF",home:"\u2196",end:"\u2198"}});import{TextAttributes as l4}from"@opentui/core";function Ny(f){let J=new Map,Y=[];for(let z of f){if(!J.has(z.category))J.set(z.category,[]),Y.push(z.category);J.get(z.category).push(z)}return Y.map((z)=>({category:z,rows:J.get(z)}))}function TG(f={}){let J=Pf(),{theme:Y}=d0(),z=()=>Ny(xY),G=()=>f.onClose?f.onClose():J.clear(),[Z,q]=r("\u2303B");return f1(()=>{a0(["show-options","-g","prefix"]).then(({code:Q,stdout:H})=>{if(Q!==0)return;let B=TQ(H);if(B)q(B)})}),Df(()=>({bindings:[{key:"?",cmd:G}]})),(()=>{var Q=W("box"),H=W("box"),B=W("text"),V=W("text"),j=W("scrollbox"),U=W("box");return D(Q,H),D(Q,j),X(Q,"paddingLeft",2),X(Q,"paddingRight",2),X(Q,"gap",1),X(Q,"flexShrink",1),D(H,B),D(H,V),X(H,"flexDirection","row"),X(H,"justifyContent","space-between"),X(H,"flexShrink",0),K(B,()=>F("help.title")),X(V,"onMouseUp",G),K(V,()=>F("help.esc")),D(j,U),X(j,"flexShrink",1),X(j,"flexGrow",1),X(j,"stickyScroll",!1),X(U,"paddingBottom",1),X(U,"gap",1),X(U,"paddingRight",1),K(U,b(Zf,{get each(){return z()},children:(L)=>(()=>{var O=W("box"),M=W("text");return D(O,M),X(O,"gap",0),K(M,()=>oj("category",L.category)),K(O,b(Zf,{get each(){return L.rows},children:(g)=>{let I=g.hint?.keys??g.keys[0]??"\u2014",a=()=>I==="\u2014"?"\u2014":IG(I,Z()),N=()=>(g.hint?g.keys:g.keys.slice(1)).map((A)=>IG(A,Z()));return(()=>{var A=W("box"),R=W("box"),S=W("text"),_=W("box"),z0=W("text");return D(A,R),D(A,_),X(A,"flexDirection","row"),X(A,"gap",2),X(A,"paddingLeft",1),D(R,S),X(R,"width",14),K(S,a),D(_,z0),X(_,"flexGrow",1),K(z0,()=>oj("desc",g.id)),K(A,(()=>{var e=I0(()=>N().length>0);return()=>e()?(()=>{var Y0=W("box"),T=W("text");return D(Y0,T),K(T,()=>`(${N().join(", ")})`),E((Q0)=>X(T,"fg",Y.textMuted,Q0)),Y0})():null})(),null),E((e)=>{var{primary:Y0,text:T}=Y;return Y0!==e.e&&(e.e=X(S,"fg",Y0,e.e)),T!==e.t&&(e.t=X(z0,"fg",T,e.t)),e},{e:void 0,t:void 0}),A})()}}),null),E((g)=>{var I=Y.accent,a=l4.BOLD;return I!==g.e&&(g.e=X(M,"fg",I,g.e)),a!==g.t&&(g.t=X(M,"attributes",a,g.t)),g},{e:void 0,t:void 0}),O})()})),E((L)=>{var O=l4.BOLD,M=Y.text,g=Y.textMuted,I={trackOptions:{backgroundColor:Y.backgroundDialog,foregroundColor:Y.borderActive}};return O!==L.e&&(L.e=X(B,"attributes",O,L.e)),M!==L.t&&(L.t=X(B,"fg",M,L.t)),g!==L.a&&(L.a=X(V,"fg",g,L.a)),I!==L.o&&(L.o=X(j,"verticalScrollbarOptions",I,L.o)),L},{e:void 0,t:void 0,a:void 0,o:void 0}),Q})()}var M8=C(()=>{P();P();P();P();P();P();P();Wf();Sf();bG();Ef();G1();L8();b1();h1();TG.show=(f)=>{f.replace(()=>b(TG,{}))}});import{TextAttributes as yy}from"@opentui/core";function a4(f){let J=Pf(),{theme:Y}=d0(),[z,G]=r(f.currentTitle);function Z(){let q=z().trim();if(!q&&!f.allowEmpty)return;f.onSubmit(q),J.clear()}return(()=>{var q=W("box"),Q=W("box"),H=W("text"),B=W("text"),V=W("box"),j=W("text"),U=W("input"),L=W("box"),O=W("text");return D(q,Q),D(q,V),D(q,L),X(q,"paddingLeft",2),X(q,"paddingRight",2),X(q,"gap",1),D(Q,H),D(Q,B),X(Q,"flexDirection","row"),X(Q,"justifyContent","space-between"),K(H,()=>f.dialogTitle??F("common.rename.defaultTitle")),D(B,E0("esc")),X(B,"onMouseUp",()=>f.onCancel()),D(V,j),D(V,U),X(V,"gap",0),K(j,()=>f.fieldLabel??F("common.rename.defaultFieldLabel")),X(U,"focused",!0),X(U,"onInput",(M)=>G(Z1(M))),X(U,"onSubmit",()=>Z()),D(L,O),X(L,"paddingBottom",1),K(O,()=>F("common.rename.footerHint",{submitLabel:f.submitLabel??F("common.rename.defaultSubmitLabel")})),E((M)=>{var g=yy.BOLD,I=Y.text,a=Y.textMuted,N=Y.accent,A=z(),R=f.placeholder??f.currentTitle,S=Y.textMuted;return g!==M.e&&(M.e=X(H,"attributes",g,M.e)),I!==M.t&&(M.t=X(H,"fg",I,M.t)),a!==M.a&&(M.a=X(B,"fg",a,M.a)),N!==M.o&&(M.o=X(j,"fg",N,M.o)),A!==M.i&&(M.i=X(U,"value",A,M.i)),R!==M.n&&(M.n=X(U,"placeholder",R,M.n)),S!==M.s&&(M.s=X(O,"fg",S,M.s)),M},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),q})()}var $4=C(()=>{P();P();P();P();P();P();P();G1();Wf();Ef();h1();yG()});function by(f,J,Y={}){return new Promise((z)=>{f.replace(()=>b(a4,{currentTitle:J,get dialogTitle(){return Y.dialogTitle},get fieldLabel(){return Y.fieldLabel},get submitLabel(){return Y.submitLabel},get placeholder(){return Y.placeholder},get allowEmpty(){return Y.allowEmpty},onSubmit:(G)=>z(G),onCancel:()=>z(void 0)}),()=>z(void 0))})}var fY;var F8=C(()=>{P();$4();fY={show:by}});import{TextAttributes as Sy}from"@opentui/core";function Iy(f){if(!f)return f;return f.charAt(0).toUpperCase()+f.slice(1)}function JY(f){let J=Pf(),{theme:Y}=d0(),[z,G]=uJ({active:f.initialActive??"confirm"});return Df(()=>({bindings:[{key:"return",cmd:()=>{if(z.active==="confirm")f.onConfirm?.();if(z.active==="cancel")f.onCancel?.();J.clear()}},{key:"left",cmd:()=>G("active",z.active==="confirm"?"cancel":"confirm")},{key:"right",cmd:()=>G("active",z.active==="confirm"?"cancel":"confirm")}]})),(()=>{var Z=W("box"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("box");return D(Z,q),D(Z,B),D(Z,V),X(Z,"paddingLeft",2),X(Z,"paddingRight",2),X(Z,"paddingBottom",1),X(Z,"gap",0),D(q,Q),D(q,H),X(q,"flexDirection","row"),X(q,"justifyContent","space-between"),K(Q,()=>f.title),D(H,E0("esc")),X(H,"onMouseUp",()=>J.clear()),K(B,()=>f.message),X(V,"flexDirection","row"),X(V,"justifyContent","flex-end"),X(V,"paddingTop",1),K(V,b(Zf,{each:["cancel","confirm"],children:(j)=>(()=>{var U=W("box"),L=W("text");return D(U,L),X(U,"paddingLeft",1),X(U,"paddingRight",1),X(U,"onMouseUp",()=>{if(j==="confirm")f.onConfirm?.();if(j==="cancel")f.onCancel?.();J.clear()}),K(L,()=>Iy(j==="cancel"?f.label??F("common.cancel"):f.confirmLabel??F("common.confirm"))),E((O)=>{var M=j===z.active?Y.primary:void 0,g=j===z.active?Y.selectedListItemText:Y.textMuted;return M!==O.e&&(O.e=X(U,"backgroundColor",M,O.e)),g!==O.t&&(O.t=X(L,"fg",g,O.t)),O},{e:void 0,t:void 0}),U})()})),E((j)=>{var U=Sy.BOLD,L=Y.text,O=Y.textMuted,M=Y.textMuted;return U!==j.e&&(j.e=X(Q,"attributes",U,j.e)),L!==j.t&&(j.t=X(Q,"fg",L,j.t)),O!==j.a&&(j.a=X(H,"fg",O,j.a)),M!==j.o&&(j.o=X(B,"fg",M,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),Z})()}var O8=C(()=>{P();P();P();P();P();P();P();G1();Wf();RG();Ef();b1();h1();JY.show=(f,J,Y,z,G,Z)=>{return new Promise((q)=>{f.replace(()=>b(JY,{title:J,message:Y,onConfirm:()=>q(!0),onCancel:()=>q(!1),label:z,confirmLabel:G,get initialActive(){return Z?.initialActive}}),()=>q(void 0)),f.setSize("small")})}});import{unlinkSync as Ty}from"fs";import{join as uy}from"path";function r4(f){return f instanceof j1}function p4(f,J){try{f?.destroy()}catch(Y){console.error(`kobe: renderer.destroy() failed during ${J}:`,Y)}}async function A8(f,J,Y){if(await JY.show(f,"Reset UI state?","Wipes ~/.config/kobe/state.json and ~/.kobe/tasks.json, then quits kobe \u2014 relaunch for a fresh start with empty Working session / Archive lists. Worktrees on disk and Claude Code session history are NOT touched.","cancel")!==!0)return;J.clear();try{Ty(uy(OJ(),".kobe","tasks.json"))}catch(G){if(G.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",G)}p4(Y,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
|
|
223
|
+
`),process.exit(0)}async function g8(f,J,Y){if(!(J instanceof j1))return;if(await JY.show(f,"Restart backend?","Quits this kobe window. Relaunch to (re)spawn the daemon. Any other attached windows keep their connection. In v0.6 the daemon's RPC surface shrank to task CRUD + subscribe, so a graceful daemon.stop RPC is no longer plumbed through the client \u2014 quit + relaunch is the path.","cancel")!==!0)return;p4(Y,"daemon restart"),process.stderr.write(`kobe: window closed. Relaunch kobe to start fresh.
|
|
224
|
+
`),process.exit(0)}var _4=C(()=>{EY();lf();O8()});function Ey(f){return`theme:${f}`}function R8(f){return`language:${f}`}function C8(f){return`accent:${f}`}function xy(f){return`engine:${f}`}function vZ(f){return`surface:${f}`}function k8(f){return[...f.themeNames.map((J)=>({id:Ey(J),kind:"theme",name:J})),...Rz.map((J)=>({id:R8(J.id),kind:"language",locale:J.id})),{id:"transparent",kind:"transparent"},...f.focusAccentSlots.map((J)=>({id:C8(J),kind:"focusAccent",slot:J})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:"zen-keep-tasks",kind:"zenKeepTasks"},{id:vZ("chattab"),kind:"surface",surface:"chattab"},{id:vZ("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function wy(f){return[...f.map((J)=>({id:xy(J),kind:"engine",vendor:J})),{id:"add-engine",kind:"engineAdd"}]}function hy(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function mZ(f){return[{id:"dev-reset",kind:"devReset"},...f?[{id:"dev-restart",kind:"devRestartDaemon"}]:[],{id:"remote-projects",kind:"devRemoteProjects"},{id:"auto-status",kind:"devAutoStatus"},{id:"dispatcher",kind:"devDispatcher"}]}function o4(f,J){switch(f){case"general":return k8(J);case"engines":return wy(J.engineList);case"accounts":case"keys":return[];case"feedback":return hy();case"dev":return mZ(J.hasDaemon)}}function cZ(f,J){return f.findIndex((Y)=>Y.id===J)}function uQ(f,J){return f[J]}var kz;var N8=C(()=>{NG();kz=[{id:"general",label:"General"},{id:"engines",label:"Engines"},{id:"accounts",label:"Accounts"},{id:"keys",label:"Keybindings"},{id:"feedback",label:"Feedback"},{id:"dev",label:"Dev"}]});import{TextAttributes as t0}from"@opentui/core";function s4(f){let{theme:J}=d0();return(()=>{var Y=W("box");return X(Y,"flexDirection","column"),X(Y,"flexShrink",0),X(Y,"width",14),X(Y,"gap",1),K(Y,b(Zf,{each:kz,children:(z,G)=>{let Z=()=>G()===f.cursor(),q=()=>Z()&&f.level()==="sidebar";return(()=>{var Q=W("box"),H=W("text");return D(Q,H),X(Q,"paddingLeft",1),X(Q,"paddingRight",1),X(Q,"onMouseUp",()=>f.switchSection(z.id)),X(H,"wrapMode","none"),K(H,()=>F(`settings.sections.${z.id}`)),E((B)=>{var V=q()?J.primary:void 0,j=q()?J.selectedListItemText:Z()?J.accent:J.textMuted,U=Z()?t0.BOLD:void 0;return V!==B.e&&(B.e=X(Q,"backgroundColor",V,B.e)),j!==B.t&&(B.t=X(H,"fg",j,B.t)),U!==B.a&&(B.a=X(H,"attributes",U,B.a)),B},{e:void 0,t:void 0,a:void 0}),Q})()}})),Y})()}function t4(f){let J=d0(),{theme:Y}=J,z=()=>k8({themeNames:f.themeNames(),focusAccentSlots:gz}),G=(R)=>cZ(z(),R),Z=()=>G("transparent"),q=()=>G("toast"),Q=()=>G("sound"),H=()=>G("zen-keep-tasks"),B=()=>G(vZ("chattab")),V=()=>G(vZ("taskpanel")),j=()=>G("editor-kind"),U=()=>G("editor-custom"),L=()=>f.bodyRow()===Z(),O=()=>f.bodyRow()===q(),M=()=>f.bodyRow()===Q(),g=()=>f.bodyRow()===H(),I=()=>f.bodyRow()===B(),a=()=>f.bodyRow()===V(),N=()=>f.bodyRow()===j(),A=()=>f.bodyRow()===U();return(()=>{var R=W("box"),S=W("text"),_=W("text"),z0=W("box"),e=W("box"),Y0=W("text"),T=W("text"),Q0=W("box"),t=W("text"),V0=W("text"),C0=W("box"),$=W("text"),x=W("box"),f0=W("text"),u=W("text"),G0=W("box"),w=W("text"),n=W("text"),q0=W("box"),W0=W("text"),H0=E0(" "),k0=W("box"),x0=W("text"),y0=E0(" "),Gf=W("box"),m=W("text"),L0=W("text"),s=W("box"),R0=W("text"),i0=E0(" "),$0=W("box"),w0=W("text"),v=W("text"),J0=W("box"),M0=W("text"),_0=E0(" "),e0=W("box"),T0=W("text"),Xf=E0(" "),Qf=W("box"),Rf=W("text"),o=W("text"),p=W("box"),Z0=W("text"),D0=W("box"),j0=W("text");return D(R,S),D(R,_),D(R,z0),D(R,e),D(R,Q0),D(R,x),D(R,G0),D(R,Gf),D(R,$0),D(R,Qf),X(R,"flexDirection","column"),X(R,"gap",1),K(S,()=>F("settings.general.theme")),K(_,()=>F("settings.general.themeHint")),X(z0,"flexDirection","column"),X(z0,"gap",0),K(z0,b(Zf,{get each(){return f.themeNames()},children:(k,N0)=>{let p0=()=>f.level()==="body"&&f.bodyRow()===N0(),b0=()=>k===J.selected;return(()=>{var U0=W("box"),h0=W("text");return D(U0,h0),X(U0,"flexDirection","row"),X(U0,"gap",1),X(U0,"paddingLeft",1),X(U0,"paddingRight",1),X(U0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(N0()),f.setThemeCursor(N0()),f.selectTheme(k)}),X(h0,"wrapMode","none"),K(h0,()=>b0()?"\u25CF ":" ",null),K(h0,k,null),E((O0)=>{var r0=p0()?Y.primary:void 0,l0=p0()?Y.selectedListItemText:b0()?Y.accent:Y.text,Yf=p0()||b0()?t0.BOLD:void 0;return r0!==O0.e&&(O0.e=X(U0,"backgroundColor",r0,O0.e)),l0!==O0.t&&(O0.t=X(h0,"fg",l0,O0.t)),Yf!==O0.a&&(O0.a=X(h0,"attributes",Yf,O0.a)),O0},{e:void 0,t:void 0,a:void 0}),U0})()}})),D(e,Y0),D(e,T),X(e,"flexDirection","column"),X(e,"gap",0),X(e,"paddingTop",1),K(Y0,()=>F("settings.general.language")),X(T,"wrapMode","word"),K(T,()=>F("settings.general.languageHint")),K(e,b(Zf,{each:Rz,children:(k)=>{let N0=()=>G(R8(k.id)),p0=()=>f.level()==="body"&&f.bodyRow()===N0(),b0=()=>f.currentLocale()===k.id;return(()=>{var U0=W("box"),h0=W("text");return D(U0,h0),X(U0,"flexDirection","row"),X(U0,"gap",1),X(U0,"paddingLeft",1),X(U0,"paddingRight",1),X(U0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(N0()),f.selectLanguage(k.id)}),X(h0,"wrapMode","none"),K(h0,()=>b0()?"\u25CF ":" ",null),K(h0,()=>k.label,null),E((O0)=>{var r0=p0()?Y.primary:void 0,l0=p0()?Y.selectedListItemText:b0()?Y.accent:Y.text,Yf=p0()||b0()?t0.BOLD:void 0;return r0!==O0.e&&(O0.e=X(U0,"backgroundColor",r0,O0.e)),l0!==O0.t&&(O0.t=X(h0,"fg",l0,O0.t)),Yf!==O0.a&&(O0.a=X(h0,"attributes",Yf,O0.a)),O0},{e:void 0,t:void 0,a:void 0}),U0})()}}),null),D(Q0,t),D(Q0,V0),D(Q0,C0),X(Q0,"flexDirection","column"),X(Q0,"gap",0),X(Q0,"paddingTop",1),K(t,()=>F("settings.general.transparent")),X(V0,"wrapMode","word"),K(V0,()=>F("settings.general.transparentHint")),D(C0,$),X(C0,"flexDirection","row"),X(C0,"paddingLeft",1),X(C0,"paddingRight",1),X(C0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Z()),f.toggleTransparent()}),X($,"wrapMode","none"),K($,(()=>{var k=I0(()=>!!J.transparentBackground);return()=>k()?F("settings.general.on"):F("settings.general.off")})()),D(x,f0),D(x,u),X(x,"flexDirection","column"),X(x,"gap",0),X(x,"paddingTop",1),K(f0,()=>F("settings.general.focusAccent")),X(u,"wrapMode","word"),K(u,()=>F("settings.general.focusAccentHint")),K(x,b(Zf,{each:gz,children:(k)=>{let N0=()=>G(C8(k)),p0=()=>f.level()==="body"&&f.bodyRow()===N0(),b0=()=>J.focusAccent===k;return(()=>{var U0=W("box"),h0=W("text");return D(U0,h0),X(U0,"flexDirection","row"),X(U0,"gap",1),X(U0,"paddingLeft",1),X(U0,"paddingRight",1),X(U0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(N0()),f.selectFocusAccent(k)}),X(h0,"wrapMode","none"),K(h0,()=>b0()?"\u25CF ":" ",null),K(h0,()=>F(`settings.general.accent${k.charAt(0).toUpperCase()}${k.slice(1)}`),null),E((O0)=>{var r0=p0()?Y.primary:void 0,l0=p0()?Y.selectedListItemText:b0()?Y.focusAccent:Y.text,Yf=p0()||b0()?t0.BOLD:void 0;return r0!==O0.e&&(O0.e=X(U0,"backgroundColor",r0,O0.e)),l0!==O0.t&&(O0.t=X(h0,"fg",l0,O0.t)),Yf!==O0.a&&(O0.a=X(h0,"attributes",Yf,O0.a)),O0},{e:void 0,t:void 0,a:void 0}),U0})()}}),null),D(G0,w),D(G0,n),D(G0,q0),D(G0,k0),X(G0,"flexDirection","column"),X(G0,"gap",0),X(G0,"paddingTop",1),K(w,()=>F("settings.general.notifications")),X(n,"wrapMode","word"),K(n,()=>F("settings.general.notificationsHint")),D(q0,W0),X(q0,"flexDirection","row"),X(q0,"gap",1),X(q0,"paddingLeft",1),X(q0,"paddingRight",1),X(q0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(q()),f.toggleToast()}),D(W0,H0),X(W0,"wrapMode","none"),K(W0,()=>f.toastEnabled()?"[x]":"[ ]",H0),K(W0,()=>F("settings.general.toast"),null),D(k0,x0),X(k0,"flexDirection","row"),X(k0,"gap",1),X(k0,"paddingLeft",1),X(k0,"paddingRight",1),X(k0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Q()),f.toggleSound()}),D(x0,y0),X(x0,"wrapMode","none"),K(x0,()=>f.soundEnabled()?"[x]":"[ ]",y0),K(x0,()=>F("settings.general.sound"),null),D(Gf,m),D(Gf,L0),D(Gf,s),X(Gf,"flexDirection","column"),X(Gf,"gap",0),X(Gf,"paddingTop",1),K(m,()=>F("settings.general.zen")),X(L0,"wrapMode","word"),K(L0,()=>F("settings.general.zenHint")),D(s,R0),X(s,"flexDirection","row"),X(s,"gap",1),X(s,"paddingLeft",1),X(s,"paddingRight",1),X(s,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(H()),f.toggleZenKeepsTasks()}),D(R0,i0),X(R0,"wrapMode","none"),K(R0,()=>f.zenKeepsTasks()?"[x]":"[ ]",i0),K(R0,()=>F("settings.general.zenKeepTasks"),null),D($0,w0),D($0,v),D($0,J0),D($0,e0),X($0,"flexDirection","column"),X($0,"gap",0),X($0,"paddingTop",1),K(w0,()=>F("settings.general.surface")),X(v,"wrapMode","word"),K(v,()=>F("settings.general.surfaceHint")),D(J0,M0),X(J0,"flexDirection","row"),X(J0,"gap",1),X(J0,"paddingLeft",1),X(J0,"paddingRight",1),X(J0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(B()),f.selectSurface("chattab")}),D(M0,_0),X(M0,"wrapMode","none"),K(M0,()=>f.settingsSurface()==="chattab"?"[x]":"[ ]",_0),K(M0,()=>F("settings.general.surfaceChattab"),null),D(e0,T0),X(e0,"flexDirection","row"),X(e0,"gap",1),X(e0,"paddingLeft",1),X(e0,"paddingRight",1),X(e0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(V()),f.selectSurface("taskpanel")}),D(T0,Xf),X(T0,"wrapMode","none"),K(T0,()=>f.settingsSurface()==="taskpanel"?"[x]":"[ ]",Xf),K(T0,()=>F("settings.general.surfaceTaskpanel"),null),D(Qf,Rf),D(Qf,o),D(Qf,p),D(Qf,D0),X(Qf,"flexDirection","column"),X(Qf,"gap",0),X(Qf,"paddingTop",1),K(Rf,()=>F("settings.general.editor")),X(o,"wrapMode","word"),K(o,()=>F("settings.general.editorHint")),D(p,Z0),X(p,"flexDirection","row"),X(p,"gap",1),X(p,"paddingLeft",1),X(p,"paddingRight",1),X(p,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(j()),f.cycleEditorKind()}),X(Z0,"wrapMode","none"),K(Z0,()=>F("settings.general.editorRow",{kind:f.editorKind()})),D(D0,j0),X(D0,"flexDirection","row"),X(D0,"gap",1),X(D0,"paddingLeft",1),X(D0,"paddingRight",1),X(D0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(U()),f.editEditorCustom()}),X(j0,"wrapMode","none"),K(j0,()=>F("settings.general.editorCustom",{cmd:f.editorCustomCommand().trim()||F("settings.general.editorCustomUnset")})),E((k)=>{var N0=Y.text,p0=t0.BOLD,b0=Y.textMuted,U0=Y.text,h0=t0.BOLD,O0=Y.textMuted,r0=Y.text,l0=t0.BOLD,Yf=Y.textMuted,S0=L()?Y.primary:void 0,xf=L()?Y.selectedListItemText:J.transparentBackground?Y.accent:Y.textMuted,df=t0.BOLD,d=Y.text,g0=t0.BOLD,Kf=Y.textMuted,qf=Y.text,Of=t0.BOLD,y=Y.textMuted,A0=O()?Y.primary:void 0,m0=O()?Y.selectedListItemText:f.toastEnabled()?Y.accent:Y.textMuted,u0=t0.BOLD,X1=M()?Y.primary:void 0,V1=M()?Y.selectedListItemText:f.soundEnabled()?Y.accent:Y.textMuted,tf=t0.BOLD,P1=Y.text,xJ=t0.BOLD,M1=Y.textMuted,yz=g()?Y.primary:void 0,YY=g()?Y.selectedListItemText:f.zenKeepsTasks()?Y.accent:Y.textMuted,c=t0.BOLD,i=Y.text,l=t0.BOLD,h=Y.textMuted,c0=I()?Y.primary:void 0,P0=I()?Y.selectedListItemText:f.settingsSurface()==="chattab"?Y.accent:Y.textMuted,F0=t0.BOLD,n0=a()?Y.primary:void 0,Hf=a()?Y.selectedListItemText:f.settingsSurface()==="taskpanel"?Y.accent:Y.textMuted,Lf=t0.BOLD,q1=Y.text,s1=t0.BOLD,zY=Y.textMuted,p8=N()?Y.primary:void 0,_8=N()?Y.selectedListItemText:Y.accent,o8=t0.BOLD,s8=A()?Y.primary:void 0,t8=A()?Y.selectedListItemText:f.editorKind()==="custom"?Y.text:Y.textMuted;return N0!==k.e&&(k.e=X(S,"fg",N0,k.e)),p0!==k.t&&(k.t=X(S,"attributes",p0,k.t)),b0!==k.a&&(k.a=X(_,"fg",b0,k.a)),U0!==k.o&&(k.o=X(Y0,"fg",U0,k.o)),h0!==k.i&&(k.i=X(Y0,"attributes",h0,k.i)),O0!==k.n&&(k.n=X(T,"fg",O0,k.n)),r0!==k.s&&(k.s=X(t,"fg",r0,k.s)),l0!==k.h&&(k.h=X(t,"attributes",l0,k.h)),Yf!==k.r&&(k.r=X(V0,"fg",Yf,k.r)),S0!==k.d&&(k.d=X(C0,"backgroundColor",S0,k.d)),xf!==k.l&&(k.l=X($,"fg",xf,k.l)),df!==k.u&&(k.u=X($,"attributes",df,k.u)),d!==k.c&&(k.c=X(f0,"fg",d,k.c)),g0!==k.w&&(k.w=X(f0,"attributes",g0,k.w)),Kf!==k.m&&(k.m=X(u,"fg",Kf,k.m)),qf!==k.f&&(k.f=X(w,"fg",qf,k.f)),Of!==k.y&&(k.y=X(w,"attributes",Of,k.y)),y!==k.g&&(k.g=X(n,"fg",y,k.g)),A0!==k.p&&(k.p=X(q0,"backgroundColor",A0,k.p)),m0!==k.b&&(k.b=X(W0,"fg",m0,k.b)),u0!==k.T&&(k.T=X(W0,"attributes",u0,k.T)),X1!==k.A&&(k.A=X(k0,"backgroundColor",X1,k.A)),V1!==k.O&&(k.O=X(x0,"fg",V1,k.O)),tf!==k.I&&(k.I=X(x0,"attributes",tf,k.I)),P1!==k.S&&(k.S=X(m,"fg",P1,k.S)),xJ!==k.W&&(k.W=X(m,"attributes",xJ,k.W)),M1!==k.C&&(k.C=X(L0,"fg",M1,k.C)),yz!==k.B&&(k.B=X(s,"backgroundColor",yz,k.B)),YY!==k.v&&(k.v=X(R0,"fg",YY,k.v)),c!==k.k&&(k.k=X(R0,"attributes",c,k.k)),i!==k.x&&(k.x=X(w0,"fg",i,k.x)),l!==k.j&&(k.j=X(w0,"attributes",l,k.j)),h!==k.q&&(k.q=X(v,"fg",h,k.q)),c0!==k.z&&(k.z=X(J0,"backgroundColor",c0,k.z)),P0!==k.P&&(k.P=X(M0,"fg",P0,k.P)),F0!==k.H&&(k.H=X(M0,"attributes",F0,k.H)),n0!==k.F&&(k.F=X(e0,"backgroundColor",n0,k.F)),Hf!==k.M&&(k.M=X(T0,"fg",Hf,k.M)),Lf!==k.D&&(k.D=X(T0,"attributes",Lf,k.D)),q1!==k.R&&(k.R=X(Rf,"fg",q1,k.R)),s1!==k.E&&(k.E=X(Rf,"attributes",s1,k.E)),zY!==k.L&&(k.L=X(o,"fg",zY,k.L)),p8!==k.N&&(k.N=X(p,"backgroundColor",p8,k.N)),_8!==k.G&&(k.G=X(Z0,"fg",_8,k.G)),o8!==k.U&&(k.U=X(Z0,"attributes",o8,k.U)),s8!==k.K&&(k.K=X(D0,"backgroundColor",s8,k.K)),t8!==k.V&&(k.V=X(j0,"fg",t8,k.V)),k},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0,y:void 0,g:void 0,p:void 0,b:void 0,T:void 0,A:void 0,O:void 0,I:void 0,S:void 0,W:void 0,C:void 0,B:void 0,v:void 0,k:void 0,x:void 0,j:void 0,q:void 0,z:void 0,P:void 0,H:void 0,F:void 0,M:void 0,D:void 0,R:void 0,E:void 0,L:void 0,N:void 0,G:void 0,U:void 0,K:void 0,V:void 0}),R})()}function e4(f){let{theme:J}=d0(),Y=()=>f.vendors.length;return(()=>{var z=W("box"),G=W("text"),Z=W("text"),q=W("box"),Q=W("box"),H=W("text");return D(z,G),D(z,Z),D(z,q),X(z,"flexDirection","column"),X(z,"gap",1),K(G,()=>F("settings.engines.title")),X(Z,"wrapMode","word"),K(Z,()=>F("settings.engines.hint")),D(q,Q),X(q,"flexDirection","column"),X(q,"gap",0),K(q,b(Zf,{get each(){return f.vendors},children:(B,V)=>{let j=()=>f.level()==="body"&&f.bodyRow()===V();return(()=>{var U=W("box"),L=W("text"),O=W("text"),M=W("text");return D(U,L),D(U,O),D(U,M),X(U,"flexDirection","row"),X(U,"gap",1),X(U,"paddingLeft",1),X(U,"paddingRight",1),X(U,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(V()),f.editEngine(B)}),X(L,"wrapMode","none"),K(L,()=>f.isDefaultEngine(B)?"\u25CF":" "),X(O,"wrapMode","none"),K(O,()=>f.displayName(B)),X(M,"wrapMode","none"),K(M,()=>f.commandText(B),null),K(M,(()=>{var g=I0(()=>!!f.isDefault(B));return()=>g()?F("settings.engines.defaultTag"):I0(()=>!!f.isCustom(B))()?F("settings.engines.customTag"):""})(),null),E((g)=>{var I=j()?J.primary:void 0,a=j()?J.selectedListItemText:J.accent,N=t0.BOLD,A=j()?J.selectedListItemText:J.text,R=t0.BOLD,S=j()?J.selectedListItemText:f.isDefault(B)?J.textMuted:J.accent;return I!==g.e&&(g.e=X(U,"backgroundColor",I,g.e)),a!==g.t&&(g.t=X(L,"fg",a,g.t)),N!==g.a&&(g.a=X(L,"attributes",N,g.a)),A!==g.o&&(g.o=X(O,"fg",A,g.o)),R!==g.i&&(g.i=X(O,"attributes",R,g.i)),S!==g.n&&(g.n=X(M,"fg",S,g.n)),g},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),U})()}}),Q),D(Q,H),X(Q,"flexDirection","row"),X(Q,"paddingLeft",1),X(Q,"paddingRight",1),X(Q,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Y()),f.onAddEngine()}),X(H,"wrapMode","none"),K(H,()=>F("settings.engines.addEngine")),E((B)=>{var V=J.text,j=t0.BOLD,U=J.textMuted,L=f.level()==="body"&&f.bodyRow()===Y()?J.primary:void 0,O=f.level()==="body"&&f.bodyRow()===Y()?J.selectedListItemText:J.primary;return V!==B.e&&(B.e=X(G,"fg",V,B.e)),j!==B.t&&(B.t=X(G,"attributes",j,B.t)),U!==B.a&&(B.a=X(Z,"fg",U,B.a)),L!==B.o&&(B.o=X(Q,"backgroundColor",L,B.o)),O!==B.i&&(B.i=X(H,"fg",O,B.i)),B},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),z})()}function fD(f){let{theme:J}=d0(),Y=(z)=>z.binary.found?`Binary: ${z.binary.path}`:`Binary: ${z.binary.error}`;return(()=>{var z=W("box"),G=W("text"),Z=W("text"),q=W("box"),Q=W("text"),H=W("box"),B=W("text"),V=W("box"),j=W("text");return D(z,G),D(z,Z),D(z,q),D(z,H),D(z,V),X(z,"flexDirection","column"),X(z,"gap",1),K(G,()=>F("settings.accounts.title")),X(Z,"wrapMode","word"),K(Z,()=>F("settings.accounts.hint")),D(q,Q),X(q,"flexDirection","column"),X(q,"gap",0),D(Q,E0("claude-code")),K(q,b(X0,{get when(){return f.claudeStatus()===null},get children(){var U=W("text");return K(U,()=>F("settings.accounts.checking")),E((L)=>X(U,"fg",J.textMuted,L)),U}}),null),K(q,b(X0,{get when(){return f.claudeStatus()},children:(U)=>(()=>{var L=W("box"),O=W("text");return D(L,O),X(L,"flexDirection","column"),X(L,"gap",0),X(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="oauth"){let g=[M.organization,M.billingType].filter((I)=>!!I).join(" \xB7 ");return(()=>{var I=W("text");return X(I,"wrapMode","word"),K(I,()=>F("settings.accounts.loggedIn",{email:M.email}),null),K(I,g?` (${g})`:"",null),E((a)=>X(I,"fg",J.success,a)),I})()}return(()=>{var g=W("text");return K(g,()=>F("settings.accounts.notLoggedIn")),E((I)=>X(g,"fg",J.textMuted,I)),g})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var g=W("text");return X(g,"wrapMode","word"),K(g,()=>`! ${M()}`),E((I)=>X(g,"fg",J.warning,I)),g})()}),null),E((M)=>X(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),D(H,B),X(H,"flexDirection","column"),X(H,"gap",0),D(B,E0("codex")),K(H,b(X0,{get when(){return f.codexStatus()===null},get children(){var U=W("text");return K(U,()=>F("settings.accounts.checking")),E((L)=>X(U,"fg",J.textMuted,L)),U}}),null),K(H,b(X0,{get when(){return f.codexStatus()},children:(U)=>(()=>{var L=W("box"),O=W("text");return D(L,O),X(L,"flexDirection","column"),X(L,"gap",0),X(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="chatgpt")return(()=>{var g=W("text");return X(g,"wrapMode","word"),K(g,()=>F("settings.accounts.chatgptLogin",{email:M.email}),null),K(g,(()=>{var I=I0(()=>!!M.plan);return()=>I()?` (${M.plan})`:""})(),null),E((I)=>X(g,"fg",J.success,I)),g})();if(M.kind==="apikey")return(()=>{var g=W("text");return K(g,()=>F("settings.accounts.apiKeyConfigured")),E((I)=>X(g,"fg",J.success,I)),g})();return(()=>{var g=W("text");return K(g,()=>F("settings.accounts.notLoggedIn")),E((I)=>X(g,"fg",J.textMuted,I)),g})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var g=W("text");return X(g,"wrapMode","word"),K(g,()=>`! ${M()}`),E((I)=>X(g,"fg",J.warning,I)),g})()}),null),E((M)=>X(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),D(V,j),X(V,"flexDirection","column"),X(V,"gap",0),D(j,E0("copilot")),K(V,b(X0,{get when(){return f.copilotStatus()===null},get children(){var U=W("text");return K(U,()=>F("settings.accounts.checking")),E((L)=>X(U,"fg",J.textMuted,L)),U}}),null),K(V,b(X0,{get when(){return f.copilotStatus()},children:(U)=>(()=>{var L=W("box"),O=W("text");return D(L,O),X(L,"flexDirection","column"),X(L,"gap",0),X(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="token")return(()=>{var g=W("text");return K(g,()=>F("settings.accounts.tokenConfigured",{source:M.source})),E((I)=>X(g,"fg",J.success,I)),g})();if(M.kind==="oauth")return(()=>{var g=W("text");return K(g,()=>F("settings.accounts.copilotDetected")),E((I)=>X(g,"fg",J.success,I)),g})();return(()=>{var g=W("text");return K(g,()=>F("settings.accounts.notLoggedIn")),E((I)=>X(g,"fg",J.textMuted,I)),g})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var g=W("text");return X(g,"wrapMode","word"),K(g,()=>`! ${M()}`),E((I)=>X(g,"fg",J.warning,I)),g})()}),null),E((M)=>X(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),E((U)=>{var L=J.text,O=t0.BOLD,M=J.textMuted,g=J.text,I=t0.BOLD,a=J.text,N=t0.BOLD,A=J.text,R=t0.BOLD;return L!==U.e&&(U.e=X(G,"fg",L,U.e)),O!==U.t&&(U.t=X(G,"attributes",O,U.t)),M!==U.a&&(U.a=X(Z,"fg",M,U.a)),g!==U.o&&(U.o=X(Q,"fg",g,U.o)),I!==U.i&&(U.i=X(Q,"attributes",I,U.i)),a!==U.n&&(U.n=X(B,"fg",a,U.n)),N!==U.s&&(U.s=X(B,"attributes",N,U.s)),A!==U.h&&(U.h=X(j,"fg",A,U.h)),R!==U.r&&(U.r=X(j,"attributes",R,U.r)),U},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),z})()}function JD(f){let{theme:J}=d0(),Y=()=>f.level()==="body",z=()=>Y()&&f.bodyRow()===0,G=()=>Y()&&f.bodyRow()===1,Z=()=>Y()&&f.bodyRow()===2,q=(H)=>H?J.primary:J.textMuted,Q=(H)=>H?t0.BOLD|t0.UNDERLINE:void 0;return(()=>{var H=W("box"),B=W("text"),V=W("text"),j=W("box"),U=W("box"),L=W("text"),O=W("input"),M=W("box"),g=W("text"),I=W("input"),a=W("box"),N=W("text");return D(H,B),D(H,V),D(H,j),X(H,"flexDirection","column"),X(H,"gap",1),K(B,()=>F("settings.feedback.title")),X(V,"wrapMode","word"),K(V,()=>F("settings.feedback.hint")),D(j,U),D(j,M),D(j,a),X(j,"flexDirection","column"),X(j,"gap",1),D(U,L),D(U,O),X(U,"gap",0),K(L,()=>F("settings.feedback.titleLabel")),X(O,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(0)}),X(O,"onInput",(A)=>f.setTitle(Z1(A))),X(O,"onSubmit",()=>f.onTitleSubmit()),D(M,g),D(M,I),X(M,"gap",0),K(g,()=>F("settings.feedback.descriptionLabel")),X(I,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(1)}),X(I,"onInput",(A)=>f.setBody(Z1(A))),X(I,"onSubmit",()=>f.onBodySubmit()),D(a,N),X(a,"flexDirection","row"),X(a,"paddingLeft",1),X(a,"paddingRight",1),X(a,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(2),f.submit()}),K(N,()=>F("settings.feedback.send")),K(H,b(X0,{get when(){return f.status()},get children(){var A=W("text");return X(A,"wrapMode","word"),K(A,()=>f.status()),E((R)=>X(A,"fg",f.status().startsWith("error:")?J.warning:J.success,R)),A}}),null),E((A)=>{var R=J.text,S=t0.BOLD,_=J.textMuted,z0=q(z()),e=Q(z()),Y0=f.title(),T=F("settings.feedback.titlePlaceholder"),Q0=z(),t=q(G()),V0=Q(G()),C0=f.body(),$=F("settings.feedback.descriptionPlaceholder"),x=G(),f0=Z()?J.primary:J.backgroundElement,u=Z()?J.selectedListItemText:J.accent,G0=t0.BOLD;return R!==A.e&&(A.e=X(B,"fg",R,A.e)),S!==A.t&&(A.t=X(B,"attributes",S,A.t)),_!==A.a&&(A.a=X(V,"fg",_,A.a)),z0!==A.o&&(A.o=X(L,"fg",z0,A.o)),e!==A.i&&(A.i=X(L,"attributes",e,A.i)),Y0!==A.n&&(A.n=X(O,"value",Y0,A.n)),T!==A.s&&(A.s=X(O,"placeholder",T,A.s)),Q0!==A.h&&(A.h=X(O,"focused",Q0,A.h)),t!==A.r&&(A.r=X(g,"fg",t,A.r)),V0!==A.d&&(A.d=X(g,"attributes",V0,A.d)),C0!==A.l&&(A.l=X(I,"value",C0,A.l)),$!==A.u&&(A.u=X(I,"placeholder",$,A.u)),x!==A.c&&(A.c=X(I,"focused",x,A.c)),f0!==A.w&&(A.w=X(a,"backgroundColor",f0,A.w)),u!==A.m&&(A.m=X(N,"fg",u,A.m)),G0!==A.f&&(A.f=X(N,"attributes",G0,A.f)),A},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0}),H})()}function YD(f){let{theme:J}=d0(),Y=()=>f.level()==="body"&&f.bodyRow()===0,z=()=>f.level()==="body"&&f.bodyRow()===1,G=()=>cZ(mZ(f.hasDaemon),"remote-projects"),Z=()=>f.level()==="body"&&f.bodyRow()===G(),q=()=>cZ(mZ(f.hasDaemon),"auto-status"),Q=()=>f.level()==="body"&&f.bodyRow()===q(),H=()=>cZ(mZ(f.hasDaemon),"dispatcher"),B=()=>f.level()==="body"&&f.bodyRow()===H();return(()=>{var V=W("box"),j=W("text"),U=W("text"),L=W("box"),O=W("text"),M=W("text"),g=W("box"),I=W("text"),a=W("text"),N=W("box"),A=W("text"),R=W("text"),S=W("box"),_=W("text"),z0=W("text"),e=W("box"),Y0=W("text");return D(V,j),D(V,U),D(V,L),D(V,M),D(V,g),X(V,"flexDirection","column"),X(V,"gap",1),K(j,()=>F("settings.dev.reset")),X(U,"wrapMode","word"),K(U,()=>F("settings.dev.resetHint")),D(L,O),X(L,"flexDirection","row"),X(L,"paddingLeft",1),X(L,"paddingRight",1),X(L,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(0),f.confirmReset()}),K(O,()=>F("settings.dev.resetButton")),K(V,b(X0,{get when(){return f.hasDaemon},get children(){var T=W("box"),Q0=W("text"),t=W("text"),V0=W("box"),C0=W("text");return D(T,Q0),D(T,t),D(T,V0),X(T,"flexDirection","column"),X(T,"gap",0),X(T,"paddingTop",1),K(Q0,()=>F("settings.dev.restart")),X(t,"wrapMode","word"),K(t,()=>F("settings.dev.restartHint")),D(V0,C0),X(V0,"flexDirection","row"),X(V0,"paddingLeft",1),X(V0,"paddingRight",1),X(V0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(1),f.confirmRestartDaemon()}),K(C0,()=>F("settings.dev.restartButton")),E(($)=>{var x=J.text,f0=t0.BOLD,u=J.textMuted,G0=z()?J.primary:J.backgroundElement,w=z()?J.selectedListItemText:J.accent,n=t0.BOLD;return x!==$.e&&($.e=X(Q0,"fg",x,$.e)),f0!==$.t&&($.t=X(Q0,"attributes",f0,$.t)),u!==$.a&&($.a=X(t,"fg",u,$.a)),G0!==$.o&&($.o=X(V0,"backgroundColor",G0,$.o)),w!==$.i&&($.i=X(C0,"fg",w,$.i)),n!==$.n&&($.n=X(C0,"attributes",n,$.n)),$},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),T}}),M),X(M,"wrapMode","word"),K(M,()=>F("settings.dev.doctorHint")),D(g,I),D(g,a),D(g,N),D(g,R),D(g,S),D(g,z0),D(g,e),X(g,"flexDirection","column"),X(g,"gap",0),X(g,"paddingTop",1),K(I,()=>F("settings.dev.experimental")),X(a,"wrapMode","word"),K(a,()=>F("settings.dev.remoteHint")),D(N,A),X(N,"flexDirection","row"),X(N,"paddingLeft",1),X(N,"paddingRight",1),X(N,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(G()),f.toggleRemoteProjects()}),K(A,(()=>{var T=I0(()=>!!f.remoteProjectsEnabled());return()=>T()?F("settings.dev.remoteOn"):F("settings.dev.remoteOff")})()),X(R,"wrapMode","word"),K(R,()=>F("settings.dev.autoStatusHint")),D(S,_),X(S,"flexDirection","row"),X(S,"paddingLeft",1),X(S,"paddingRight",1),X(S,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(q()),f.toggleAutoStatus()}),K(_,(()=>{var T=I0(()=>!!f.autoStatusEnabled());return()=>T()?F("settings.dev.autoStatusOn"):F("settings.dev.autoStatusOff")})()),X(z0,"wrapMode","word"),K(z0,()=>F("settings.dev.dispatcherHint")),D(e,Y0),X(e,"flexDirection","row"),X(e,"paddingLeft",1),X(e,"paddingRight",1),X(e,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(H()),f.toggleDispatcher()}),K(Y0,(()=>{var T=I0(()=>!!f.dispatcherEnabled());return()=>T()?F("settings.dev.dispatcherOn"):F("settings.dev.dispatcherOff")})()),E((T)=>{var Q0=J.text,t=t0.BOLD,V0=J.textMuted,C0=Y()?J.primary:J.backgroundElement,$=Y()?J.selectedListItemText:J.warning,x=t0.BOLD,f0=J.textMuted,u=J.text,G0=t0.BOLD,w=J.textMuted,n=Z()?J.primary:J.backgroundElement,q0=Z()?J.selectedListItemText:J.text,W0=f.remoteProjectsEnabled()?t0.BOLD:void 0,H0=J.textMuted,k0=Q()?J.primary:J.backgroundElement,x0=Q()?J.selectedListItemText:J.text,y0=f.autoStatusEnabled()?t0.BOLD:void 0,Gf=J.textMuted,m=B()?J.primary:J.backgroundElement,L0=B()?J.selectedListItemText:J.text,s=f.dispatcherEnabled()?t0.BOLD:void 0;return Q0!==T.e&&(T.e=X(j,"fg",Q0,T.e)),t!==T.t&&(T.t=X(j,"attributes",t,T.t)),V0!==T.a&&(T.a=X(U,"fg",V0,T.a)),C0!==T.o&&(T.o=X(L,"backgroundColor",C0,T.o)),$!==T.i&&(T.i=X(O,"fg",$,T.i)),x!==T.n&&(T.n=X(O,"attributes",x,T.n)),f0!==T.s&&(T.s=X(M,"fg",f0,T.s)),u!==T.h&&(T.h=X(I,"fg",u,T.h)),G0!==T.r&&(T.r=X(I,"attributes",G0,T.r)),w!==T.d&&(T.d=X(a,"fg",w,T.d)),n!==T.l&&(T.l=X(N,"backgroundColor",n,T.l)),q0!==T.u&&(T.u=X(A,"fg",q0,T.u)),W0!==T.c&&(T.c=X(A,"attributes",W0,T.c)),H0!==T.w&&(T.w=X(R,"fg",H0,T.w)),k0!==T.m&&(T.m=X(S,"backgroundColor",k0,T.m)),x0!==T.f&&(T.f=X(_,"fg",x0,T.f)),y0!==T.y&&(T.y=X(_,"attributes",y0,T.y)),Gf!==T.g&&(T.g=X(z0,"fg",Gf,T.g)),m!==T.p&&(T.p=X(e,"backgroundColor",m,T.p)),L0!==T.b&&(T.b=X(Y0,"fg",L0,T.b)),s!==T.T&&(T.T=X(Y0,"attributes",s,T.T)),T},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0,y:void 0,g:void 0,p:void 0,b:void 0,T:void 0}),V})()}function zD(){let{theme:f}=d0(),J=O4(),Y=Object.keys(EB).sort();return(()=>{var z=W("box"),G=W("text"),Z=W("text"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("text");return D(z,G),D(z,Z),D(z,q),D(z,B),D(z,V),X(z,"flexDirection","column"),X(z,"gap",1),K(G,()=>F("settings.keybindings.title")),X(Z,"wrapMode","word"),K(Z,()=>F("settings.keybindings.hint")),D(q,Q),D(q,H),X(q,"flexDirection","column"),X(q,"gap",0),K(Q,()=>F("settings.keybindings.configFile")),X(H,"wrapMode","word"),K(H,()=>J.path,null),K(H,(()=>{var j=I0(()=>!!J.exists);return()=>j()?"":F("settings.keybindings.notCreated")})(),null),K(z,b(X0,{get when(){return!J.exists},get children(){var j=W("box"),U=W("text"),L=W("text"),O=W("text"),M=W("text"),g=W("text"),I=W("text"),a=W("text"),N=W("text"),A=W("text"),R=W("text");return D(j,U),D(j,L),D(j,O),D(j,M),D(j,g),D(j,I),D(j,a),D(j,N),D(j,A),D(j,R),X(j,"flexDirection","column"),X(j,"gap",0),K(U,()=>F("settings.keybindings.example")),D(L,E0("bindings:")),D(O,E0(" chat.fork.new: ctrl+g # string = one chord")),D(M,E0(" sidebar.select: [enter] # list = several chords")),D(g,E0(" files.createPR: null # null = unbind")),D(I,E0(" tmux.tab.new: ctrl+y # tmux session key (see below)")),D(a,E0(" tmux.layout.workspaceSplit: g # prefix g")),D(N,E0("darwin: # platform overlay (also: linux)")),D(A,E0(" bindings:")),D(R,E0(" palette.open: [cmd+p, ctrl+p]")),E((S)=>{var _=f.text,z0=t0.BOLD,e=f.textMuted,Y0=f.textMuted,T=f.textMuted,Q0=f.textMuted,t=f.textMuted,V0=f.textMuted,C0=f.textMuted,$=f.textMuted,x=f.textMuted;return _!==S.e&&(S.e=X(U,"fg",_,S.e)),z0!==S.t&&(S.t=X(U,"attributes",z0,S.t)),e!==S.a&&(S.a=X(L,"fg",e,S.a)),Y0!==S.o&&(S.o=X(O,"fg",Y0,S.o)),T!==S.i&&(S.i=X(M,"fg",T,S.i)),Q0!==S.n&&(S.n=X(g,"fg",Q0,S.n)),t!==S.s&&(S.s=X(I,"fg",t,S.s)),V0!==S.h&&(S.h=X(a,"fg",V0,S.h)),C0!==S.r&&(S.r=X(N,"fg",C0,S.r)),$!==S.d&&(S.d=X(A,"fg",$,S.d)),x!==S.l&&(S.l=X(R,"fg",x,S.l)),S},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0}),j}}),B),K(z,b(X0,{get when(){return J.exists},get children(){var j=W("box"),U=W("text");return D(j,U),X(j,"flexDirection","column"),X(j,"gap",0),K(U,()=>F("settings.keybindings.overridesApplied")),K(j,b(X0,{get when(){return J.applied.length===0},get children(){var L=W("text");return K(L,()=>F("settings.keybindings.none")),E((O)=>X(L,"fg",f.textMuted,O)),L}}),null),K(j,b(Zf,{get each(){return J.applied},children:(L)=>(()=>{var O=W("text");return X(O,"wrapMode","word"),K(O,()=>`${L.id} \u2192 ${L.keys.length>0?L.keys.join(" / "):"(unbound)"} (default: ${L.defaultKeys.join(" / ")})`),E((M)=>X(O,"fg",f.text,M)),O})()}),null),E((L)=>{var O=f.text,M=t0.BOLD;return O!==L.e&&(L.e=X(U,"fg",O,L.e)),M!==L.t&&(L.t=X(U,"attributes",M,L.t)),L},{e:void 0,t:void 0}),j}}),B),K(z,b(X0,{get when(){return J.warnings.length>0},get children(){var j=W("box"),U=W("text");return D(j,U),X(j,"flexDirection","column"),X(j,"gap",0),K(U,()=>F("settings.keybindings.warnings")),K(j,b(Zf,{get each(){return J.warnings},children:(L)=>(()=>{var O=W("text");return X(O,"wrapMode","word"),K(O,`! ${L}`),E((M)=>X(O,"fg",f.warning,M)),O})()}),null),E((L)=>{var O=f.warning,M=t0.BOLD;return O!==L.e&&(L.e=X(U,"fg",O,L.e)),M!==L.t&&(L.t=X(U,"attributes",M,L.t)),L},{e:void 0,t:void 0}),j}}),B),D(B,E0("tmux session keys use the same file: tmux.tab.new (ctrl+t), tmux.tab.prev/next (ctrl+[/]), tmux.tab.close (ctrl+w), tmux.tab.rename (f2), tmux.tab.chooseEngine (ctrl+shift+t), tmux.detach (ctrl+q), tmux.focus (4 chords, left/down/up/right), and prefix layout keys: workspaceSplit (s), workspaceClose (x), workspaceReset (r), tasksToggle (a), opsToggle (o), terminalToggle (z). They apply when a session is (re)built.")),X(B,"wrapMode","word"),X(V,"wrapMode","word"),K(V,()=>`Fixed (not rebindable): ${Y.join(", ")}.`),E((j)=>{var U=f.text,L=t0.BOLD,O=f.textMuted,M=f.text,g=t0.BOLD,I=f.textMuted,a=f.textMuted,N=f.textMuted;return U!==j.e&&(j.e=X(G,"fg",U,j.e)),L!==j.t&&(j.t=X(G,"attributes",L,j.t)),O!==j.a&&(j.a=X(Z,"fg",O,j.a)),M!==j.o&&(j.o=X(Q,"fg",M,j.o)),g!==j.i&&(j.i=X(Q,"attributes",g,j.i)),I!==j.n&&(j.n=X(H,"fg",I,j.n)),a!==j.s&&(j.s=X(B,"fg",a,j.s)),N!==j.h&&(j.h=X(V,"fg",N,j.h)),j},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),z})()}var GD=C(()=>{P();P();P();P();P();P();P();P();Wf();Q8();Ef();G1();NG();Fq();yG();N8()});import{TextAttributes as Py}from"@opentui/core";function vy(f){return f.split(/[-_]+/).filter((J)=>J.length>0).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function Nz(f){let J=Pf(),Y=d0(),z=Y1(),{theme:G}=Y,[Z,q]=r("sidebar"),[Q,H]=r("general"),[B,V]=r(0),[j,U]=r(0),[L,O]=r(""),[M,g]=r(""),[I,a]=r(""),N=K0(()=>Y.all().slice().sort()),[,A]=r(Math.max(0,N().findIndex((d)=>d===Y.selected))),R=r4(f.orchestrator),[S,_]=r(null),[z0,e]=r(null),[Y0,T]=r(null),Q0=!1;ff(()=>{if(Q()!=="accounts"||Q0)return;Q0=!0,IX().then(_),TX().then(e),uX().then(T)});function t(){return o4(Q(),{themeNames:N(),focusAccentSlots:gz,engineList:w0(),hasDaemon:R})}function V0(){return t().length}function C0(){return jz(f.kv.get(pJ,Bz))}function $(d){if(Y.selected===d)return;if(!Y.set(d))return;f.kv.set("activeTheme",d),f.onVisualPrefsChange?.()}function x(){return _j()}function f0(d){if(_j()===d)return;uZ(d),f.kv.set(kQ,d),f.onVisualPrefsChange?.()}function u(d){if(Y.transparentBackground===d)return;Y.setTransparentBackground(d),f.kv.set("transparentBackground",d),f.onVisualPrefsChange?.()}function G0(){u(!Y.transparentBackground)}function w(d){if(Y.focusAccent===d)return;Y.setFocusAccent(d),f.kv.set("focusAccent",d),f.onVisualPrefsChange?.()}function n(d){f.kv.set(pJ,d)}function q0(){return f.kv.get("notifications.toast.enabled",!0)!==!1}function W0(){return f.kv.get("notifications.sound.enabled",!0)!==!1}function H0(){f.kv.set("notifications.toast.enabled",!q0())}function k0(){f.kv.set("notifications.sound.enabled",!W0())}function x0(){return f.kv.get(mq,!0)!==!1}function y0(){f.kv.set(mq,!x0())}function Gf(){return f.kv.get("experimental.remoteProjects",!1)===!0}function m(){f.kv.set("experimental.remoteProjects",!Gf())}function L0(){return f.kv.get(Zz,!1)===!0}function s(){f.kv.set(Zz,!L0())}function R0(){return f.kv.get(Xz,!1)===!0}function i0(){f.kv.set(Xz,!R0())}function $0(){let d=f.kv.get("customEngineIds",[]);return Array.isArray(d)?d.filter((g0)=>typeof g0==="string"&&g0.trim().length>0):[]}function w0(){return[...mf,...$0()]}function v(d){let g0=f.kv.get(jJ(d),"");return typeof g0==="string"?g0.trim():""}function J0(d){return v(d)||QZ(d).join(" ")}function M0(d){return Q1(d)&&v(d).length===0&&!e0(d)}function _0(d){let g0=f.kv.get(WJ(d),"");return typeof g0==="string"?g0.trim():""}function e0(d){return _0(d).length>0}function T0(d){return _0(d)||NB[d]||d}let[Xf,Qf]=r(kf("lastSelectedVendor")??yf);function Rf(d){return Xf()===d}function o(d){af("lastSelectedVendor",d),f.kv.set("lastSelectedVendor",d),Qf(d)}async function p(d){let g0=await fY.show(J,J0(d),{dialogTitle:`${T0(d)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(g0===void 0)return;f.kv.set(jJ(d),g0.trim())}async function Z0(d){let g0=await fY.show(J,T0(d),{dialogTitle:`${T0(d)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(g0===void 0)return;f.kv.set(WJ(d),g0.trim())}function D0(d){if(f.kv.set(jJ(d),""),f.kv.set(WJ(d),""),!Q1(d))f.kv.set("customEngineIds",$0().filter((g0)=>g0!==d)),U((g0)=>Math.max(0,Math.min(g0,w0().length)))}async function j0(){let d=await fY.show(J,"",{dialogTitle:"Add engine",fieldLabel:"id",submitLabel:"next",placeholder:"lowercase slug, e.g. aider"});if(d===void 0)return;let g0=d.trim().toLowerCase();if(!g0||Q1(g0)||$0().includes(g0))return;let Kf=await fY.show(J,"",{dialogTitle:`Add engine \xB7 ${g0}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(Kf===void 0)return;let qf=await fY.show(J,g0,{dialogTitle:`Add engine \xB7 ${g0}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(f.kv.set("customEngineIds",[...$0(),g0]),Kf.trim())f.kv.set(jJ(g0),Kf.trim());let Of=qf?.trim()??"";f.kv.set(WJ(g0),Of&&Of!==g0?Of:vy(g0))}function k(){if(Q()!=="engines"||Z()!=="body")return null;let d=uQ(t(),j());return d?.kind==="engine"?d.vendor:null}function N0(){return pz(f.kv.get(rJ,Gq))}function p0(){let d=Hz.indexOf(N0()),g0=Hz[(d+1)%Hz.length];if(g0)f.kv.set(rJ,g0)}function b0(){let d=f.kv.get(AY,"");return typeof d==="string"?d:""}async function U0(){let d=await fY.show(J,b0(),{dialogTitle:"Custom editor command (use {file} for the path)",fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(d===void 0)return;let g0=d.trim();if(f.kv.set(AY,g0),g0)f.kv.set(rJ,"custom")}async function h0(){a("submitting...");try{let d=LG({title:L(),body:M()});a(`sent: ${d.url}`),O(""),g(""),U(0)}catch(d){a(`error: ${d instanceof Error?d.message:String(d)}`)}}let O0=()=>Q()==="feedback"&&Z()==="body";function r0(d){let g0=j()+d;if(g0<0||g0>2){q("sidebar");return}U(g0)}function l0(){if(Z()!=="sidebar"||V0()===0)return;if(q("body"),U(0),Q()==="general")A(0)}function Yf(d){if(Z()==="sidebar"){let qf=(B()+d+kz.length)%kz.length;V(qf);let Of=kz[qf];if(Of)H(Of.id),U(0);return}let g0=V0();if(g0===0)return;let Kf=(j()+d+g0)%g0;if(U(Kf),uQ(t(),Kf)?.kind==="theme")A(Kf)}function S0(d){H(d),V(kz.findIndex((g0)=>g0.id===d)),U(0),q("sidebar")}let xf={theme:(d)=>$(d.name),language:(d)=>f0(d.locale),transparent:()=>G0(),focusAccent:(d)=>w(d.slot),toast:()=>H0(),sound:()=>k0(),zenKeepTasks:()=>y0(),surface:(d)=>n(d.surface),editorKind:()=>p0(),editorCustom:()=>void U0(),engine:(d)=>void p(d.vendor),engineAdd:()=>void j0(),feedbackTitle:()=>U(0),feedbackBody:()=>U(1),feedbackSend:()=>void h0(),devReset:()=>void A8(J,f.kv,z),devRestartDaemon:()=>void g8(J,f.orchestrator,z),devRemoteProjects:()=>m(),devAutoStatus:()=>s(),devDispatcher:()=>i0()};function df(){let d=uQ(t(),j());if(!d)return;xf[d.kind](d)}return Df(()=>({enabled:(!f.standalone||J.stack.length===0)&&!O0(),bindings:[{key:"down",cmd:()=>Yf(1)},{key:"up",cmd:()=>Yf(-1)},{key:"j",cmd:()=>Yf(1)},{key:"k",cmd:()=>Yf(-1)},{key:"tab",cmd:()=>Yf(1)},{key:"right",cmd:l0},{key:"l",cmd:l0},{key:"left",cmd:()=>q("sidebar")},{key:"h",cmd:()=>q("sidebar")},{key:"return",cmd:()=>{if(Z()==="sidebar"){l0();return}df()}},{key:"t",cmd:G0},{key:"r",cmd:()=>{let d=k();if(d)Z0(d)}},{key:"x",cmd:()=>{let d=k();if(d)D0(d)}},{key:"d",cmd:()=>{let d=k();if(d)o(d)}}]})),Df(()=>({enabled:O0(),bindings:[{key:"tab",cmd:()=>r0(1)},{key:"shift+tab",cmd:()=>r0(-1)}]})),Df(()=>({enabled:O0()&&j()===2,bindings:[{key:"return",cmd:()=>void h0()}]})),(()=>{var d=W("box"),g0=W("box"),Kf=W("text"),qf=W("text"),Of=W("box"),y=W("box"),A0=W("box"),m0=W("text");return D(d,g0),D(d,Of),D(d,A0),X(d,"paddingLeft",2),X(d,"paddingRight",2),X(d,"paddingBottom",1),X(d,"gap",1),D(g0,Kf),D(g0,qf),X(g0,"flexDirection","row"),X(g0,"justifyContent","space-between"),K(Kf,()=>F("settings.title")),X(qf,"onMouseUp",()=>f.onClose()),K(qf,()=>F("settings.esc")),D(Of,y),X(Of,"flexDirection","row"),X(Of,"gap",2),K(Of,b(s4,{level:Z,cursor:B,switchSection:S0}),y),X(y,"flexGrow",1),X(y,"flexShrink",1),X(y,"flexDirection","column"),X(y,"gap",1),K(y,b(X0,{get when(){return Q()==="general"},get children(){return b(t4,{level:Z,bodyRow:j,setLevel:q,setBodyRow:U,themeNames:N,setThemeCursor:A,selectTheme:$,currentLocale:x,selectLanguage:f0,toggleTransparent:G0,selectFocusAccent:w,toastEnabled:q0,soundEnabled:W0,toggleToast:H0,toggleSound:k0,zenKeepsTasks:x0,toggleZenKeepsTasks:y0,settingsSurface:C0,selectSurface:n,editorKind:N0,cycleEditorKind:p0,editorCustomCommand:b0,editEditorCustom:()=>void U0()})}}),null),K(y,b(X0,{get when(){return Q()==="engines"},get children(){return b(e4,{level:Z,bodyRow:j,setLevel:q,setBodyRow:U,get vendors(){return w0()},isCustom:(u0)=>!Q1(u0),displayName:T0,commandText:J0,isDefault:M0,isDefaultEngine:Rf,editEngine:(u0)=>void p(u0),renameEngine:(u0)=>void Z0(u0),resetEngine:D0,onAddEngine:()=>void j0()})}}),null),K(y,b(X0,{get when(){return Q()==="accounts"},get children(){return b(fD,{claudeStatus:S,codexStatus:z0,copilotStatus:Y0})}}),null),K(y,b(X0,{get when(){return Q()==="keys"},get children(){return b(zD,{})}}),null),K(y,b(X0,{get when(){return Q()==="feedback"},get children(){return b(JD,{level:Z,bodyRow:j,setLevel:q,setBodyRow:U,title:L,setTitle:(u0)=>{O(u0),a("")},body:M,setBody:(u0)=>{g(u0),a("")},status:I,onTitleSubmit:()=>U(1),onBodySubmit:()=>void h0(),submit:()=>void h0()})}}),null),K(y,b(X0,{get when(){return Q()==="dev"},get children(){return b(YD,{level:Z,bodyRow:j,setLevel:q,setBodyRow:U,hasDaemon:R,confirmReset:()=>void A8(J,f.kv,z),confirmRestartDaemon:()=>void g8(J,f.orchestrator,z),remoteProjectsEnabled:Gf,toggleRemoteProjects:m,autoStatusEnabled:L0,toggleAutoStatus:s,dispatcherEnabled:R0,toggleDispatcher:i0})}}),null),D(A0,m0),X(A0,"paddingTop",0),K(m0,(()=>{var u0=I0(()=>!!O0());return()=>u0()?F("settings.nav.feedback"):F("settings.nav.default")})()),E((u0)=>{var X1=Py.BOLD,V1=G.text,tf=G.textMuted,P1=G.textMuted;return X1!==u0.e&&(u0.e=X(Kf,"attributes",X1,u0.e)),V1!==u0.t&&(u0.t=X(Kf,"fg",V1,u0.t)),tf!==u0.a&&(u0.a=X(qf,"fg",tf,u0.a)),P1!==u0.o&&(u0.o=X(m0,"fg",P1,u0.o)),u0},{e:void 0,t:void 0,a:void 0,o:void 0}),d})()}var y8=C(()=>{P();P();P();P();P();P();P();P();Wf();oY();E1();sq();GZ();Jq();gf();$B();S1();K1();Ef();G1();Zq();b1();j8();h1();F8();_4();N8();GD();Nz.show=(f,J,Y)=>{let z=!1;return new Promise((G)=>{f.replace(()=>b(Nz,{kv:J,orchestrator:Y,onVisualPrefsChange:()=>{z=!0},onClose:()=>G({visualPrefsChanged:z})}),()=>G({visualPrefsChanged:z}))})}});import{TextAttributes as my}from"@opentui/core";function XD(){let{theme:f}=d0(),J=TJ(),Y=RQ(),z=()=>Y.toasts().slice(-ZD),G=()=>Math.max(0,J().width-cy-ny),Z=()=>Math.max(0,J().height-dy-ZD-1);return b(X0,{get when(){return Y.toasts().length>0},get children(){var q=W("box");return X(q,"position","absolute"),X(q,"zIndex",2500),X(q,"width",40),X(q,"flexDirection","column"),X(q,"gap",0),K(q,b(Zf,{get each(){return z()},children:(Q)=>{let H=()=>Q.kind==="needs_input"?f.warning:Q.kind==="error"?f.error:f.success,B=()=>f.selectedListItemText,V=()=>Q.kind==="needs_input"?"?":Q.kind==="error"?"\u2715":"\u2713";return(()=>{var j=W("box"),U=W("text"),L=W("text");return D(j,U),D(j,L),X(j,"flexDirection","row"),X(j,"gap",1),X(j,"paddingLeft",1),X(j,"paddingRight",1),X(j,"onMouseUp",()=>Y.dismiss(Q.id)),X(U,"wrapMode","none"),K(U,V),X(L,"wrapMode","none"),K(L,()=>Q.title),E((O)=>{var M=H(),g=B(),I=my.BOLD,a=B();return M!==O.e&&(O.e=X(j,"backgroundColor",M,O.e)),g!==O.t&&(O.t=X(U,"fg",g,O.t)),I!==O.a&&(O.a=X(U,"attributes",I,O.a)),a!==O.o&&(O.o=X(L,"fg",a,O.o)),O},{e:void 0,t:void 0,a:void 0,o:void 0}),j})()}})),E((Q)=>{var H=G(),B=Z();return H!==Q.e&&(Q.e=X(q,"left",H,Q.e)),B!==Q.t&&(Q.t=X(q,"top",B,Q.t)),Q},{e:void 0,t:void 0}),q}})}var ZD=4,cy=40,ny=2,dy=2;var qD=C(()=>{P();P();P();P();P();P();P();Wf();CQ();Ef()});import{TextAttributes as iy}from"@opentui/core";function ly(f,J){let Y=f?`v${f}`:F("update.skew.olderBuild");return F("update.skew.hint",{daemon:Y,clientVersion:J})}function QD(f){let{theme:J}=d0(),Y=()=>Math.max(4,f.width()-2);return b(X0,{get when(){return f.stale()},get children(){var z=W("box"),G=W("text"),Z=W("box"),q=W("text"),Q=W("box"),H=W("text");return D(z,G),D(z,Z),D(z,Q),X(z,"flexDirection","column"),X(z,"flexShrink",0),X(z,"paddingLeft",1),X(z,"paddingRight",1),X(z,"paddingBottom",1),X(G,"wrapMode","none"),K(G,()=>"\u2594".repeat(Y())),D(Z,q),X(Z,"flexDirection","row"),X(Z,"gap",1),X(q,"wrapMode","none"),K(q,()=>F("update.skew.title")),D(Q,H),X(Q,"flexDirection","row"),X(Q,"gap",1),X(H,"wrapMode","word"),K(H,()=>ly(f.daemonVersion(),f.clientVersion)),E((B)=>{var{warning:V,warning:j}=J,U=iy.BOLD,L=J.text;return V!==B.e&&(B.e=X(G,"fg",V,B.e)),j!==B.t&&(B.t=X(q,"fg",j,B.t)),U!==B.a&&(B.a=X(q,"attributes",U,B.a)),L!==B.o&&(B.o=X(H,"fg",L,B.o)),B},{e:void 0,t:void 0,a:void 0,o:void 0}),z}})}var HD=C(()=>{P();P();P();P();P();P();Wf();Ef();G1()});function BD(f,J){return f.find((Y)=>Y.id!==J&&!Y.archived)}async function ay(f){let J=f.tasks.find((Z)=>Z.id===f.taskId);if(!J)return null;let Y=!J.archived;try{await f.orch.setArchived(f.taskId,Y)}catch(Z){return f.logger.error(`${f.logPrefix} archive failed:`,Z),null}if(!Y)return{archived:Y};let z=Mf(f.taskId),G=BD(f.tasks,f.taskId);if(await bJ(z,G?Mf(G.id):void 0).catch((Z)=>{f.logger.error(`${f.logPrefix} switch-client failed:`,Z)}),f.updateActiveTask)await f.orch.setActiveTask(G?.id??null).catch(()=>{});return await i1(z).catch((Z)=>{f.logger.error(`${f.logPrefix} kill tmux session failed:`,Z)}),{archived:Y,nextTask:G}}async function $y(f){let J=BD(f.tasks,f.taskId),Y=Mf(f.taskId);if(f.switchBeforeKill)await bJ(Y,J?Mf(J.id):void 0).catch((z)=>{f.logger.error(`${f.logPrefix} switch-client failed:`,z)});if(f.updateActiveTask)await f.orch?.setActiveTask(J?.id??null).catch(()=>{});return await i1(Y).catch((z)=>{f.logger.error(`${f.logPrefix} kill tmux session failed:`,z)}),{nextTask:J}}async function jD(f,J){if(!f.orch)return;let Y=f.tasks().find((G)=>G.id===J);if(!Y)return;if(!Y.archived){if(!await f.confirm({title:`Archive "${Y.title}"?`,body:"Moves it to Archives and stops its running session. The worktree, branch, and chat history stay \u2014 unarchive to bring it back.",cancelLabel:"cancel",confirmLabel:"archive"}))return}if(!await ay({orch:f.orch,tasks:f.tasks(),taskId:J,logger:f.logger,logPrefix:f.logPrefix,updateActiveTask:f.updateActiveTask}))return;await f.reload?.()}async function WD(f,J){if(!f.orch)return;let Y=f.tasks().find((q)=>q.id===J);if(!Y)return;if(!await f.confirm({title:`Delete "${Y.title}"?`,body:"Removes the task entry and its worktree. The tmux session (if any) is killed.",cancelLabel:"cancel",confirmLabel:"delete"}))return;let G=!1;try{await f.orch.deleteTask(J),G=!0}catch(q){if((q instanceof Error?q.message:String(q)).includes(KH)){if(await f.confirm({title:`"${Y.title}" has uncommitted changes`,body:"Its worktree has uncommitted or untracked work that will be permanently deleted. Force delete anyway?",cancelLabel:"cancel",confirmLabel:"force delete"}))try{await f.orch.deleteTask(J,{force:!0}),G=!0}catch(B){f.logger.error(`${f.logPrefix} force delete failed:`,B),f.notifyError?.(`Couldn't delete: ${B instanceof Error?B.message:String(B)}`)}}else f.logger.error(`${f.logPrefix} delete failed:`,q),f.notifyError?.(`Couldn't delete: ${q instanceof Error?q.message:String(q)}`)}if(!G)return;let{nextTask:Z}=await $y({orch:f.orch,tasks:f.tasks(),taskId:J,logger:f.logger,logPrefix:f.logPrefix,switchBeforeKill:f.switchBeforeKill,updateActiveTask:f.updateActiveTask});await f.reload?.(),f.onTaskDeleted?.(J,Z)}async function VD(f,J){let Y=f.tasks().find((G)=>G.id===J);if(!Y)return;let z=await f.promptText(Y.title);if(!z||!f.orch)return;try{await f.orch.setTitle(J,z)}catch(G){f.logger.error(`${f.logPrefix} task.rename failed:`,G),f.notifyError?.(`Couldn't rename task: ${G instanceof Error?G.message:String(G)}`);return}await f.reload?.()}async function KD(f,J){let Y=f.tasks().find((G)=>G.id===J);if(!Y||Y.kind==="main")return;let z=await f.promptText(Y.branch,{dialogTitle:"Rename branch",fieldLabel:"branch"});if(!z||!f.orch)return;try{await f.orch.setBranch(J,z)}catch(G){f.logger.error(`${f.logPrefix} task.setBranch failed:`,G),f.notifyError?.(`Couldn't rename branch: ${G instanceof Error?G.message:String(G)}`);return}await f.reload?.()}async function UD(f,J){let Y=f.tasks().find((Z)=>Z.id===J);if(!Y||!f.orch)return;let z=await dJ(),G=GY(z,Y.vendor??yf);try{await f.orch.setVendor(J,G)}catch(Z){f.logger.error(`${f.logPrefix} task.setVendor failed:`,Z),f.notifyError?.(`Couldn't switch engine: ${Z instanceof Error?Z.message:String(Z)}`);return}f.notifyInfo?.(`Engine \u2192 ${qz(G)} (applies on reopen)`),await f.reload?.()}async function DD(f){let J=m1(),Y=f.cursorRepo()??J[0]??process.cwd();if(f.openCreateSurface&&await f.openCreateSurface(Y))return;let z=f.lastVendor()??yf,G=await dJ();if(G.length===0)f.notifyInfo?.("No engine CLI detected \u2014 install claude or codex, or add one in Settings \u2192 Engines");let Z=f.orch,q=await f.promptNewTask(Y,J,{defaultVendor:z,availableVendors:G,discoverAdoptable:Z?(H)=>Z.discoverAdoptableWorktrees(H):void 0});if(!q)return;if(f.rememberVendor(q.vendor),PJ(q.repo),f.onRepoSaved?.(),!Z){f.logger.error(`${f.logPrefix} no daemon; cannot create task`);return}f.notifyInfo?.("Creating task\u2026");let Q;try{if(q.mode==="adopt")for(let H of q.adopt)Q=(await Z.adoptWorktree({repo:q.repo,worktreePath:H.worktreePath,branch:H.branch,vendor:q.vendor})).id;else Q=(await Z.createTask({repo:q.repo,baseRef:q.baseRef,vendor:q.vendor})).id}catch(H){f.logger.error(`${f.logPrefix} task.create/adopt failed:`,H),f.notifyError?.(`Couldn't create task: ${H instanceof Error?H.message:String(H)}`);return}if(await f.reload?.(),Q)f.selectTask?.(Q),await f.enterTask?.(Q)}var LD=C(()=>{oY();E1();LH();gf();S1();K1();J1()});import{spawn as ry}from"child_process";import{existsSync as py}from"fs";import{basename as _y,delimiter as oy,isAbsolute as sy,join as ty}from"path";function b8(f,J,Y){if(sy(f))return Y(f);let z=J.PATH??"";for(let G of z.split(oy)){if(!G)continue;if(Y(ty(G,f)))return!0}return!1}function Jb(f){let J=_y(f);if(J==="code")return"VS Code";if(J==="cursor")return"Cursor";if(J==="windsurf")return"Windsurf";if(J==="zed")return"Zed";return J||f}function MD(f={}){let J=f.env??process.env,Y=f.platform??process.platform,z=f.exists??py,G=J.KOBE_OPEN_EDITOR?.trim();if(G)return{id:"env",label:Jb(G),command:G,args:[]};for(let Z of ey)if(b8(Z.command,J,z))return{id:Z.id,label:Z.label,command:Z.command,args:[]};if(Y==="darwin"&&b8("open",J,z)){for(let Z of fb)if(Z.paths.some((q)=>z(q)))return{id:Z.id,label:Z.label,command:"open",args:["-a",Z.appName]};return{id:"mac-open",label:"Finder",command:"open",args:[]}}if(Y==="linux"&&b8("xdg-open",J,z))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function Yb(f,J){return[J.command,[...J.args,f]]}function FD(f,J,Y={}){if(!f)return!1;let z=Y.spawn??ry,[G,Z]=Yb(f,J);try{let q=z(G,Z,{detached:!0,stdio:"ignore"});if(q.pid===void 0)return!1;return q.unref(),!0}catch{return!1}}var ey,fb;var OD=C(()=>{ey=[{id:"code",label:"VS Code",command:"code"},{id:"cursor",label:"Cursor",command:"cursor"},{id:"windsurf",label:"Windsurf",command:"windsurf"},{id:"zed",label:"Zed",command:"zed"}],fb=[{id:"vscode.app",label:"VS Code",appName:"Visual Studio Code",paths:["/Applications/Visual Studio Code.app"]},{id:"cursor.app",label:"Cursor",appName:"Cursor",paths:["/Applications/Cursor.app","/System/Applications/Cursor.app"]},{id:"windsurf.app",label:"Windsurf",appName:"Windsurf",paths:["/Applications/Windsurf.app"]},{id:"zed.app",label:"Zed",appName:"Zed",paths:["/Applications/Zed.app"]}]});function EQ(f){let J=new Map;function Y(z){let G=J.get(z);if(!G){let[Z,q]=r(f.initial,f.equals?{equals:f.equals}:void 0);G={read:Z,write:(Q)=>q(()=>Q),inFlight:!1,nextAllowedAt:0},J.set(z,G)}return G}return{read(z){if(!z)return f.initial;return Y(z).read()},poll(z){if(!z)return;let G=Y(z);eX(G,f,(Z)=>f.run(z,Z),(Z)=>G.write(Z))},reset(){J.clear()}}}var nZ=C(()=>{Wf();qZ();qZ()});import{stat as zb}from"fs/promises";import{join as Gb}from"path";async function Qb(f){try{let J=await zb(Gb(f,".git","HEAD"));return`${J.mtimeMs}:${J.size}`}catch{return null}}async function Hb(f,J,Y=BJ){let z=await Qb(f);if(z!==null){let Q=AD.get(f);if(Q&&Q.fingerprint===z)return Q.value}let G="",Z=await Y("git",["symbolic-ref","--short","HEAD"],{cwd:f,env:x1(),signal:J}),q=Z.status===0?Z.stdout.trim():"";if(q&&q!=="HEAD")G=q;else if((await Y("git",["rev-parse","--verify","HEAD"],{cwd:f,env:x1(),signal:J})).status===0)G="(detached)";if(z!==null)AD.set(f,{fingerprint:z,value:G});return G}function RD(f){return gD.read(f)}function CD(f){gD.poll(f)}var Zb=2000,Xb=30000,qb=1500,AD,gD;var kD=C(()=>{gY();nZ();AD=new Map;gD=EQ({initial:"",timeoutMs:Zb,slowRetryMs:Xb,minIntervalMs:qb,run:(f,J)=>Hb(f,J)})});function S8(f){let J=f.scheduleTimeout??((H,B)=>{let V=setTimeout(H,B);return()=>clearTimeout(V)}),Y=!1,z=null,G=()=>{Y=!0,z?.(),z=J(()=>{Y=!1,z=null},700)},Z=()=>{Y=!1,z?.(),z=null},q=(H)=>{let B=f.getFlatIds();if(B.length===0)return;let V=f.getCursor(),j=V<0?0:V,U=Math.min(B.length-1,Math.max(0,j+H));f.setCursor(U)},Q=(H)=>{let B=f.getFlatIds();if(B.length===0)return;f.setCursor(Math.min(B.length-1,Math.max(0,H)))};return{moveDown(){Z(),q(1)},moveUp(){Z(),q(-1)},selectCurrent(){Z();let H=f.getFlatIds(),B=f.getCursor();if(B<0||B>=H.length)return;let V=H[B];if(V!==void 0)f.onSelect(V)},pressG(){if(Y)Z(),Q(0);else G()},pressShiftG(){Z(),Q(f.getFlatIds().length-1)},isChordArmed(){return Y},disarmChord(){Z()}}}function ND(f){let J=S8({getCursor:()=>f.cursorIndex(),setCursor:(Z)=>f.setCursorIndex(Z),getFlatIds:()=>f.flatTaskIds(),onSelect:(Z)=>f.onSelect(Z)}),Y=()=>{let Z=f.flatTaskIds(),q=f.cursorIndex();if(q<0||q>=Z.length)return;return Z[q]},z=()=>f.searchMode?.()??!1,G=()=>f.moveMode?.()??!1;Df(()=>({enabled:f.focused()&&!z(),bindings:wY({"sidebar.nav":(Z,q)=>{let Q=(q??0)%2===0;if(G()){let H=Y();if(H===void 0)return;f.onMoveRequest?.(H,Q?1:-1);return}if(Q)J.moveDown();else J.moveUp()},"sidebar.select":()=>{if(G()){f.onMoveModeExit?.();return}J.selectCurrent()},"sidebar.goto":(Z)=>{if(G())return;if(Z.shift)J.pressShiftG();else J.pressG()},"sidebar.delete":()=>{if(G())return;let Z=Y();if(Z!==void 0)f.onDeleteRequest?.(Z)},"sidebar.archive":()=>{if(G())return;let Z=Y();if(Z!==void 0)f.onArchiveRequest?.(Z)},"sidebar.localMerge":(Z)=>{if(!Z.shift)return;let q=Y();if(q!==void 0)f.onLocalMergeRequest?.(q)},"sidebar.rename":()=>{if(G())return;let Z=Y();if(Z!==void 0)f.onRenameRequest?.(Z)},"sidebar.pin":(Z)=>{if(G())return;if(!Z.shift)return;let q=Y();if(q!==void 0)f.onPinRequest?.(q)},"sidebar.search.enter":()=>{if(G())return;f.onSearchEnter?.()},"sidebar.sort":()=>{if(G())return;f.onSortModeToggle?.()},"sidebar.projectFilter":()=>{if(G())return;f.onProjectFilterToggle?.()}})})),Df(()=>({enabled:f.focused()&&G(),bindings:[{key:"escape",cmd:()=>f.onMoveModeExit?.()}]})),Df(()=>({enabled:f.focused(),bindings:wY({"sidebar.view":(Z,q)=>{f.onViewSwitch?.((q??0)%2===0?-1:1)}})})),Df(()=>({enabled:f.focused()&&z(),bindings:wY({"sidebar.search.nav":(Z,q)=>{if((q??0)%2===0)J.moveDown();else J.moveUp()},"sidebar.search.submit":()=>{J.selectCurrent(),f.onSearchExit?.(!0)},"sidebar.search.cancel":()=>f.onSearchExit?.(!1)})}))}var yD=C(()=>{bG();b1()});function I8(f,J){if(J<=0)return"";if(f.length<=J)return f;return`${f.slice(0,Math.max(0,J-1))}\u2026`}function T8(f,J){return` ${I8(f,Math.max(0,J))}`}function jb(f){switch(f){case"done":return F("tasks.status.done");case"in_review":return F("tasks.status.inReview");case"in_progress":return F("tasks.status.working");case"backlog":return F("tasks.status.backlog");case"canceled":return F("tasks.status.canceled");case"error":return F("tasks.status.error")}}function Wb(f){switch(f){case"rate_limited":return{text:F("tasks.activity.rateLimited"),tone:"warning"};case"permission_needed":return{text:F("tasks.activity.permissionNeeded"),tone:"warning"};case"error":return{text:F("tasks.activity.error"),tone:"error"};default:return null}}function ID(f){switch(f.prStatus?.checkState){case"passing":return{glyph:"\u2713",tone:"success"};case"failing":return{glyph:"\u2717",tone:"error"};case"pending":return{glyph:"\u2022",tone:"warning"};default:return null}}function Vb(){return F("tasks.subtitle.noTracking")}function Kb(){return F("tasks.subtitle.materializing")}function Ub(f){if(f.kind==="main")return!1;return f.vendor!==void 0&&!Q1(f.vendor)}function u8(f){let{task:J}=f,Y=J.kind==="main",z=Y?f.mainBranch??"":J.branch,G=Bb[J.status],Z=f.activity?.state,q=Z!==void 0,Q=Db(Z),H=Wb(Z),B=Ub(J)&&!q,V=f.job!==void 0,j=V||!B&&(Z==="running"||f.live||!q&&!Y&&J.status==="in_progress"),U=uG[f.spinnerFrame]??uG[0],L=V?"primary":B?"textMuted":H?.tone??(j?"primary":Q?.tone??G.tone),O=B?Vb():jb(J.status),M=V?f.truncateBranch(Kb(),f.subtitleBudget):H?f.truncateBranch(H.text,f.subtitleBudget):z.length>0?f.truncateBranch(z,f.subtitleBudget):f.truncateBranch(O,f.subtitleBudget),g=B?bD:Q?.glyph??G.glyph,I=B?bD:Q?.glyph??"\u2605";return{isMain:Y,titleText:Y?MJ(J.repo):J.title,subtitleText:M,loading:j,stateGlyph:j?U:g,projectGlyph:j?U:I,tone:L}}function E8(f,J){if(!f.loading)return f;let Y=uG[J()%uG.length]??"\u280B";if(Y===f.stateGlyph&&Y===f.projectGlyph)return f;return{...f,stateGlyph:Y,projectGlyph:Y}}function Db(f){switch(f){case"rate_limited":return{glyph:"\u25F7",tone:"warning"};case"permission_needed":return{glyph:"?",tone:"warning"};case"error":return{glyph:"\u2715",tone:"error"};case"turn_complete":return{glyph:"\u2713",tone:"primary"};default:return null}}var Bb,uG,SD=100,bD="\xB7";var TD=C(()=>{G1();K1();SQ();Bb={done:{glyph:"\u2713",tone:"success"},in_review:{glyph:"\u25D0",tone:"warning"},in_progress:{glyph:"",tone:"primary"},backlog:{glyph:"\u25CB",tone:"textMuted"},canceled:{glyph:"\u2298",tone:"textMuted"},error:{glyph:"\u2715",tone:"error"}};uG=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function x8(f){return uD.read(f)}function w8(f){uD.poll(f)}var Lb=4000,Mb=60000,Fb=1500,Ob,uD;var ED=C(()=>{gY();nZ();WG();nZ();Ob={added:0,deleted:0},uD=EQ({initial:Ob,equals:IJ,timeoutMs:Lb,slowRetryMs:Mb,minIntervalMs:Fb,run:async(f,J)=>{let Y=await BJ("git",["status","--porcelain=v1"],{cwd:f,env:x1(),signal:J});if(Y.status!==0)throw Error("git status failed");return jG(Y.stdout)}})});import{TextAttributes as Nf}from"@opentui/core";function Ab(f){switch(f){case"active":return F("tasks.view.workspace");case"archived":return F("tasks.view.archives")}}function wD(f,J=Rb){if(f.length<=J)return f;return`${f.slice(0,Math.max(0,J-1))}\u2026`}function Cb(f){let J=0;for(let Y of f)J+=(Y.codePointAt(0)??0)>=4352?2:1;return J}function kb(f,J){if(J<=0||f.length<=J)return f;return`\u2026${f.slice(f.length-Math.max(0,J-1))}`}function hD(f){let{theme:J}=d0(),Y=()=>f.focused?f.focused():!0,[z,G]=r("active"),[Z,q]=r(!1),[Q,H]=r(""),[B,V]=r(null),j=()=>f.projectFilter?.()??B(),U=(v)=>{if(f.onProjectFilterChange)f.onProjectFilterChange(v);else V(v)};function L(){H(""),q(!0),f.onSearchActiveChange?.(!0)}function O(v){q(!1),H(""),f.onSearchActiveChange?.(!1)}ff(()=>{if(!Z())return;let v=Y1();if(!v)return;let J0=(M0)=>{if(M0.defaultPrevented)return;if(!Y())return;if(M0.ctrl||M0.meta||M0.option)return;if(M0.name==="backspace"){H((T0)=>T0.slice(0,-1));return}let _0=M0.sequence;if(!_0||_0.length!==1)return;let e0=_0.charCodeAt(0);if(e0<32||e0===127)return;H((T0)=>T0+_0)};v.keyInput.on("keypress",J0),vf(()=>v.keyInput.off("keypress",J0))});let[M,g]=r(0),I=setInterval(()=>g((v)=>v+1),gb);vf(()=>clearInterval(I));let[a,N]=r(0),A=setInterval(()=>N((v)=>(v+1)%uG.length),SD);vf(()=>clearInterval(A));let R=()=>f.sortMode?.()??"default",S=K0(()=>v4(f.tasks(),z())),_=K0(()=>{let v=j();if(!v)return null;let J0=o1(v);return S().find((M0)=>o1(M0.repo)===J0)??null}),z0=K0(()=>_()?.repo??null),e=K0(()=>_()?.label??"all"),Y0=K0(()=>{let v=_();return v?v.count:S().reduce((J0,M0)=>J0+M0.count,0)}),T=K0((v)=>n4(v,U8(f.tasks(),z(),Z()?Q():"",R(),z0())),[]),Q0=K0(()=>D8(T())),t=K0(()=>c4(T())),V0=K0(()=>t().projectRows),C0=K0(()=>t().taskRows),$=K0(()=>{let v=new Map;for(let J0 of T())v.set(J0.flatIndex,J0);return v}),x=K0(()=>D8(U8(f.tasks(),z(),"",R(),z0())).length),f0=K0(()=>C0().length>0);ff(()=>{let v=j(),J0=S();if(v!==null&&J0.length>0&&(J0.length<=1||_()===null))U(null)});function u(){let v=S();if(v.length<=1){U(null);return}let J0=z0(),M0=J0?o1(J0):null,_0=M0===null?-1:v.findIndex((T0)=>o1(T0.repo)===M0),e0=v[_0+1];U(e0?.repo??null)}let G0=()=>f.width?f.width():xD,w=K0(()=>Math.max(6,G0()-9)),n=K0(()=>Math.max(6,G0()-16)),q0=TJ(),W0=K0(()=>{let v=Math.max(2,Math.min(10,Math.floor(q0().height*0.25))),J0=Math.max(2,V0().length*2);return Math.min(v,J0)}),[H0,k0]=r(null),[x0,y0]=r(-1),Gf,m,L0,s=new Map;ff(()=>{let v=f.width?f.width():xD,J0=L0;if(!J0)return;J0.width=v,J0.flexShrink=1,J0.minHeight=0}),ff(O1([x0,T],([v])=>{let J0=$().get(v);if(!J0)return;let M0=J0.task.kind==="main"?Gf:m;if(!M0)return;if(M0.viewport.height<=0)return;let _0=s.get(v);if(!_0)return;M0.scrollChildIntoView(_0.id)})),ff(O1(()=>[f.selectedId(),Q0()],([v,J0])=>{let M0=$f(x0);if(v===null){if(M0===-1&&J0.length>0)y0(0);else if(M0>=J0.length)y0(Math.max(0,J0.length-1));else if(J0.length===0)y0(-1);return}let _0=J0.indexOf(v);if(_0>=0){if(_0!==M0)y0(_0)}else if(J0.length===0)y0(-1);else if(M0<0||M0>=J0.length)y0(J0.length-1)})),ff(O1(z,()=>{let v=Q0();y0(v.length>0?0:-1)},{defer:!0})),ff(O1(z0,(v)=>y0(m4(T(),v)),{defer:!0})),ff(O1([Z,Q],()=>{if(!Z())return;let v=Q0();y0(v.length>0?0:-1)}));function R0(v){let J0=z(),M0=dZ.findIndex((T0)=>T0.view===J0);if(M0<0)return;let _0=(M0+v+dZ.length)%dZ.length,e0=dZ[_0];if(e0)G(e0.view)}ND({focused:Y,cursorIndex:x0,setCursorIndex:y0,flatTaskIds:Q0,onSelect:(v)=>{f.onSelect(v),f.onActivate?.(v)},onDeleteRequest:(v)=>f.onDeleteRequest?.(v),onArchiveRequest:(v)=>f.onArchiveRequest?.(v),onLocalMergeRequest:(v)=>f.onLocalMergeRequest?.(v),moveMode:f.moveMode,onMoveRequest:(v,J0)=>f.onMoveRequest?.(v,J0),onMoveModeExit:()=>f.onMoveModeExit?.(),onRenameRequest:(v)=>f.onRenameRequest?.(v),onPinRequest:(v)=>f.onPinRequest?.(v),onViewSwitch:(v)=>R0(v),onSortModeToggle:()=>f.onSortModeToggle?.(),onProjectFilterToggle:()=>u(),searchMode:Z,onSearchEnter:()=>L(),onSearchExit:(v)=>O(v)});let i0=(v)=>(()=>{var J0=W("box"),M0=W("box"),_0=W("text"),e0=W("text");return D(J0,M0),X(J0,"flexDirection","column"),X(J0,"flexShrink",0),K(J0,b(X0,{get when(){return v.topPad},get children(){var T0=W("box"),Xf=W("text");return D(T0,Xf),X(T0,"flexShrink",0),D(Xf,E0(" ")),X(Xf,"wrapMode","none"),T0}}),M0),D(M0,_0),D(M0,e0),X(M0,"flexDirection","row"),X(M0,"flexShrink",0),X(M0,"gap",1),X(M0,"paddingLeft",1),X(M0,"paddingRight",1),X(_0,"wrapMode","none"),K(_0,()=>v.label),X(e0,"wrapMode","none"),K(e0,()=>"\u2500".repeat(Math.max(2,G0()-10-v.label.length-(v.suffix?.length??0)))),K(M0,b(X0,{get when(){return v.suffix},get children(){var T0=W("text");return X(T0,"wrapMode","none"),K(T0,()=>v.suffix),E((Xf)=>{var Qf=J.info,Rf=Nf.BOLD;return Qf!==Xf.e&&(Xf.e=X(T0,"fg",Qf,Xf.e)),Rf!==Xf.t&&(Xf.t=X(T0,"attributes",Rf,Xf.t)),Xf},{e:void 0,t:void 0}),T0}}),null),E((T0)=>{var Xf=J.textMuted,Qf=Nf.BOLD,Rf=J.border;return Xf!==T0.e&&(T0.e=X(_0,"fg",Xf,T0.e)),Qf!==T0.t&&(T0.t=X(_0,"attributes",Qf,T0.t)),Rf!==T0.a&&(T0.a=X(e0,"fg",Rf,T0.a)),T0},{e:void 0,t:void 0,a:void 0}),J0})(),$0=(v)=>{switch(v){case"success":return J.success;case"warning":return J.warning;case"primary":return J.primary;case"error":return J.error;default:return J.textMuted}},w0=(v)=>{let J0=v.row.task,M0=v.row.flatIndex,_0=()=>M0===x0(),e0=()=>J0.id===f.selectedId(),T0=K0(()=>{let j0=f.chatRunState?.();if(!j0)return!1;let k=`${J0.id}:`;for(let[N0,p0]of j0)if(p0==="running"&&N0.startsWith(k))return!0;return!1}),Xf=K0(()=>{let j0=$q(f.worktreeChanges?.(),J0.worktreePath);if(j0)return j0;if(M(),!J0.archived)w8(J0.worktreePath);return x8(J0.worktreePath)},void 0,{equals:IJ}),Qf=K0(()=>{return M(),CD(J0.repo),RD(J0.repo)}),Rf=K0(()=>u8({task:J0,activity:f.engineState?.().get(J0.id),job:f.taskJobs?.().get(J0.id),live:T0(),spinnerFrame:0,subtitleBudget:n(),truncateBranch:wD,mainBranch:Qf()})),o=K0(()=>E8(Rf(),a)),p=()=>!o().loading?J.primary:$0(o().tone),Z0=()=>_0()?J.focusAccent:e0()?J.primary:void 0,D0=()=>_0()||e0()?"\u258C":" ";return(()=>{var j0=W("box"),k=W("box"),N0=W("box"),p0=W("text"),b0=W("box"),U0=W("text"),h0=W("text"),O0=W("box"),r0=W("text"),l0=W("box"),Yf=W("text");return D(j0,k),X(j0,"flexDirection","column"),X(j0,"gap",0),X(j0,"paddingBottom",0),D(k,N0),D(k,O0),uY((S0)=>{s.set(M0,S0),vf(()=>{if(s.get(M0)===S0)s.delete(M0)})},k),X(k,"flexDirection","column"),X(k,"gap",0),X(k,"onMouseUp",()=>{if(f.onSelect(J0.id),f.activateOnClick)f.onActivate?.(J0.id)}),X(k,"onMouseOver",(S0)=>k0({task:J0,x:S0.x,y:S0.y})),X(k,"onMouseOut",()=>k0((S0)=>S0?.task.id===J0.id?null:S0)),D(N0,p0),D(N0,b0),X(N0,"flexDirection","row"),X(N0,"gap",0),X(p0,"wrapMode","none"),K(p0,D0),D(b0,U0),D(b0,h0),X(b0,"flexDirection","row"),X(b0,"flexGrow",1),X(b0,"paddingRight",1),X(b0,"gap",0),X(U0,"wrapMode","none"),K(U0,()=>o().projectGlyph),X(h0,"wrapMode","none"),X(h0,"flexGrow",1),K(h0,()=>T8(o().titleText,w())),D(O0,r0),D(O0,l0),X(O0,"flexDirection","row"),X(O0,"gap",0),X(r0,"wrapMode","none"),K(r0,D0),D(l0,Yf),X(l0,"flexDirection","row"),X(l0,"flexGrow",1),X(l0,"paddingLeft",2),X(l0,"paddingRight",1),X(l0,"gap",1),X(Yf,"wrapMode","none"),X(Yf,"flexGrow",1),K(Yf,()=>o().subtitleText),K(l0,b(X0,{get when(){return Xf().added>0},get children(){var S0=W("text"),xf=E0("+");return D(S0,xf),X(S0,"wrapMode","none"),K(S0,()=>Xf().added,null),E((df)=>X(S0,"fg",J.success,df)),S0}}),null),K(l0,b(X0,{get when(){return Xf().deleted>0},get children(){var S0=W("text"),xf=E0("\u2212");return D(S0,xf),X(S0,"wrapMode","none"),K(S0,()=>Xf().deleted,null),E((df)=>X(S0,"fg",J.error,df)),S0}}),null),E((S0)=>{var xf=_0()?J.backgroundElement:void 0,df=Z0(),d=p(),g0=Nf.BOLD,Kf=J.text,qf=Nf.BOLD,Of=Z0(),y=J.textMuted,A0=Nf.DIM;return xf!==S0.e&&(S0.e=X(k,"backgroundColor",xf,S0.e)),df!==S0.t&&(S0.t=X(p0,"fg",df,S0.t)),d!==S0.a&&(S0.a=X(U0,"fg",d,S0.a)),g0!==S0.o&&(S0.o=X(U0,"attributes",g0,S0.o)),Kf!==S0.i&&(S0.i=X(h0,"fg",Kf,S0.i)),qf!==S0.n&&(S0.n=X(h0,"attributes",qf,S0.n)),Of!==S0.s&&(S0.s=X(r0,"fg",Of,S0.s)),y!==S0.h&&(S0.h=X(Yf,"fg",y,S0.h)),A0!==S0.r&&(S0.r=X(Yf,"attributes",A0,S0.r)),S0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),j0})()};return(()=>{var v=W("box"),J0=W("box"),M0=W("box"),_0=W("text"),e0=W("box"),T0=W("box"),Xf=W("text"),Qf=W("scrollbox"),Rf=W("box");return D(v,J0),D(v,e0),D(v,Qf),uY((o)=>{L0=o},v),X(v,"flexGrow",1),X(v,"minHeight",0),X(v,"flexDirection","column"),X(v,"paddingTop",1),X(v,"paddingBottom",1),X(v,"paddingLeft",0),X(v,"paddingRight",0),D(J0,M0),X(J0,"flexDirection","row"),X(J0,"justifyContent","space-between"),X(J0,"gap",1),X(J0,"paddingBottom",1),X(J0,"paddingLeft",1),X(J0,"paddingRight",1),D(M0,_0),X(M0,"flexDirection","row"),X(M0,"gap",1),D(_0,E0("KOBE")),X(_0,"wrapMode","none"),K(M0,b(X0,{get when(){return f.headerStatus?.()},children:(o)=>(()=>{var p=W("text");return X(p,"wrapMode","none"),X(p,"onMouseUp",()=>f.onHeaderStatusClick?.()),K(p,()=>o().label),E((Z0)=>{var D0=o().emphasize?J.warning:J.textMuted,j0=o().emphasize?Nf.BOLD:Nf.DIM;return D0!==Z0.e&&(Z0.e=X(p,"fg",D0,Z0.e)),j0!==Z0.t&&(Z0.t=X(p,"attributes",j0,Z0.t)),Z0},{e:void 0,t:void 0}),p})()}),null),K(J0,b(X0,{get when(){return f.onAddTask},get children(){var o=W("text");return D(o,E0("[+]")),X(o,"wrapMode","none"),X(o,"onMouseUp",()=>f.onAddTask?.()),E((p)=>{var Z0=J.primary,D0=Nf.BOLD;return Z0!==p.e&&(p.e=X(o,"fg",Z0,p.e)),D0!==p.t&&(p.t=X(o,"attributes",D0,p.t)),p},{e:void 0,t:void 0}),o}}),null),K(v,b(X0,{get when(){return Z()},get children(){var o=W("box"),p=W("text"),Z0=W("text"),D0=W("text");return D(o,p),D(o,Z0),D(o,D0),X(o,"flexDirection","row"),X(o,"gap",0),X(o,"paddingBottom",1),X(o,"paddingLeft",1),D(p,E0("/")),X(p,"wrapMode","none"),X(Z0,"wrapMode","none"),K(Z0,Q),D(D0,E0("\u2588")),X(D0,"wrapMode","none"),K(o,b(X0,{get when(){return Q().length===0},get children(){var j0=W("text"),k=E0(" ");return D(j0,k),X(j0,"wrapMode","none"),K(j0,()=>F("tasks.search.placeholder"),null),E((N0)=>X(j0,"fg",J.textMuted,N0)),j0}}),null),K(o,b(X0,{get when(){return Q().length>0},get children(){var j0=W("text"),k=E0(" "),N0=E0("/");return D(j0,k),D(j0,N0),X(j0,"wrapMode","none"),K(j0,()=>Q0().length,N0),K(j0,x,null),E((p0)=>X(j0,"fg",J.textMuted,p0)),j0}}),null),E((j0)=>{var{info:k,text:N0,info:p0}=J,b0=Nf.BLINK;return k!==j0.e&&(j0.e=X(p,"fg",k,j0.e)),N0!==j0.t&&(j0.t=X(Z0,"fg",N0,j0.t)),p0!==j0.a&&(j0.a=X(D0,"fg",p0,j0.a)),b0!==j0.o&&(j0.o=X(D0,"attributes",b0,j0.o)),j0},{e:void 0,t:void 0,a:void 0,o:void 0}),o}}),e0),D(e0,T0),X(e0,"flexDirection","row"),X(e0,"justifyContent","space-between"),X(e0,"gap",1),X(e0,"paddingBottom",1),X(e0,"paddingLeft",1),X(e0,"paddingRight",1),D(T0,Xf),X(T0,"flexDirection","row"),X(T0,"gap",2),K(T0,b(Zf,{each:dZ,children:(o)=>{let p=()=>z()===o.view;return(()=>{var Z0=W("text");return X(Z0,"wrapMode","none"),X(Z0,"onMouseUp",()=>G(o.view)),K(Z0,()=>Ab(o.view)),E((D0)=>{var j0=p()?J.primary:J.textMuted,k=p()?Nf.BOLD:void 0;return j0!==D0.e&&(D0.e=X(Z0,"fg",j0,D0.e)),k!==D0.t&&(D0.t=X(Z0,"attributes",k,D0.t)),D0},{e:void 0,t:void 0}),Z0})()}}),Xf),D(Xf,E0("[/]")),X(Xf,"wrapMode","none"),K(e0,b(X0,{get when(){return f.sortMode},get children(){var o=W("text");return X(o,"wrapMode","none"),X(o,"onMouseUp",()=>f.onSortModeToggle?.()),K(o,()=>F("tasks.sort")),E((p)=>{var Z0=J.textMuted,D0=Nf.DIM;return Z0!==p.e&&(p.e=X(o,"fg",Z0,p.e)),D0!==p.t&&(p.t=X(o,"attributes",D0,p.t)),p},{e:void 0,t:void 0}),o}}),null),K(v,b(X0,{get when(){return S().length>1},get children(){var o=W("box"),p=W("box"),Z0=W("text"),D0=W("text"),j0=W("text"),k=E0(" ");return D(o,p),D(o,j0),X(o,"flexDirection","row"),X(o,"justifyContent","space-between"),X(o,"gap",1),X(o,"paddingBottom",1),X(o,"paddingLeft",1),X(o,"paddingRight",1),X(o,"onMouseUp",()=>u()),D(p,Z0),D(p,D0),X(p,"flexDirection","row"),X(p,"gap",1),X(Z0,"wrapMode","none"),K(Z0,()=>F("tasks.project.label")),X(D0,"wrapMode","none"),K(D0,e),D(j0,k),X(j0,"wrapMode","none"),K(j0,Y0,k),K(j0,(()=>{var N0=I0(()=>Y0()===1);return()=>N0()?F("tasks.project.taskSingular"):F("tasks.project.taskPlural")})(),null),E((N0)=>{var p0=J.textMuted,b0=Nf.BOLD,U0=z0()?J.primary:J.textMuted,h0=z0()?Nf.BOLD:void 0,O0=J.textMuted,r0=Nf.DIM;return p0!==N0.e&&(N0.e=X(Z0,"fg",p0,N0.e)),b0!==N0.t&&(N0.t=X(Z0,"attributes",b0,N0.t)),U0!==N0.a&&(N0.a=X(D0,"fg",U0,N0.a)),h0!==N0.o&&(N0.o=X(D0,"attributes",h0,N0.o)),O0!==N0.i&&(N0.i=X(j0,"fg",O0,N0.i)),r0!==N0.n&&(N0.n=X(j0,"attributes",r0,N0.n)),N0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),o}}),Qf),K(v,b(X0,{get when(){return V0().length>0},get children(){var o=W("box"),p=W("scrollbox"),Z0=W("box");return D(o,p),X(o,"flexDirection","column"),X(o,"flexShrink",0),K(o,b(i0,{get label(){return F("tasks.header.projects")}}),p),D(p,Z0),uY((D0)=>{Gf=D0},p),X(p,"flexShrink",0),X(p,"flexGrow",0),X(p,"minHeight",0),X(p,"stickyScroll",!1),X(p,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),X(Z0,"flexShrink",0),X(Z0,"gap",0),X(Z0,"paddingRight",1),K(Z0,b(Zf,{get each(){return V0()},children:(D0)=>b(w0,{row:D0})})),E((D0)=>X(p,"maxHeight",W0(),D0)),o}}),Qf),K(v,b(i0,{get label(){return F("tasks.header.tasks")},get suffix(){return I0(()=>R()==="default")()?void 0:R()},get topPad(){return V0().length>0}}),Qf),D(Qf,Rf),uY((o)=>{m=o},Qf),X(Qf,"flexGrow",1),X(Qf,"minHeight",0),X(Qf,"stickyScroll",!1),X(Qf,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),X(Rf,"flexShrink",0),X(Rf,"gap",0),X(Rf,"paddingRight",1),K(Rf,b(Zf,{get each(){return C0()},children:(o)=>{let{task:p,flatIndex:Z0}=o,D0=()=>Z0===x0(),j0=()=>p.id===f.selectedId(),k=K0(()=>{let r0=f.chatRunState?.();if(!r0)return!1;let l0=`${p.id}:`;for(let[Yf,S0]of r0)if(S0==="running"&&Yf.startsWith(l0))return!0;return!1}),N0=K0(()=>{let r0=$q(f.worktreeChanges?.(),p.worktreePath);if(r0)return r0;if(M(),!p.archived)w8(p.worktreePath);return x8(p.worktreePath)},void 0,{equals:IJ}),p0=K0(()=>u8({task:p,activity:f.engineState?.().get(p.id),job:f.taskJobs?.().get(p.id),live:k(),spinnerFrame:0,subtitleBudget:n(),truncateBranch:wD,mainBranch:""})),b0=K0(()=>E8(p0(),a)),U0=()=>$0(b0().tone),h0=()=>D0()?J.focusAccent:j0()?J.primary:void 0,O0=()=>D0()||j0()?"\u258C":" ";return(()=>{var r0=W("box"),l0=W("box"),Yf=W("box"),S0=W("text"),xf=W("box"),df=W("text"),d=W("text"),g0=W("box"),Kf=W("text"),qf=W("box"),Of=W("text");return D(r0,l0),X(r0,"flexDirection","column"),X(r0,"gap",0),X(r0,"paddingBottom",1),D(l0,Yf),D(l0,g0),uY((y)=>{s.set(Z0,y),vf(()=>{if(s.get(Z0)===y)s.delete(Z0)})},l0),X(l0,"flexDirection","column"),X(l0,"gap",0),X(l0,"onMouseUp",()=>{if(f.onSelect(p.id),f.activateOnClick)f.onActivate?.(p.id)}),X(l0,"onMouseOver",(y)=>k0({task:p,x:y.x,y:y.y})),X(l0,"onMouseOut",()=>k0((y)=>y?.task.id===p.id?null:y)),D(Yf,S0),D(Yf,xf),X(Yf,"flexDirection","row"),X(Yf,"gap",0),X(S0,"wrapMode","none"),K(S0,O0),D(xf,df),D(xf,d),X(xf,"flexDirection","row"),X(xf,"flexGrow",1),X(xf,"paddingRight",1),X(xf,"gap",0),X(df,"wrapMode","none"),K(df,()=>b0().stateGlyph),X(d,"wrapMode","none"),X(d,"flexGrow",1),K(d,()=>T8(b0().titleText,w())),K(xf,b(X0,{get when(){return I0(()=>!!f.moveMode?.())()&&D0()},get children(){var y=W("text");return X(y,"wrapMode","none"),K(y,()=>F("tasks.moveChip")),E((A0)=>X(y,"fg",J.warning,A0)),y}}),null),D(g0,Kf),D(g0,qf),X(g0,"flexDirection","row"),X(g0,"gap",0),X(Kf,"wrapMode","none"),K(Kf,O0),D(qf,Of),X(qf,"flexDirection","row"),X(qf,"flexGrow",1),X(qf,"paddingLeft",2),X(qf,"paddingRight",1),X(qf,"gap",1),X(Of,"wrapMode","none"),X(Of,"flexGrow",1),K(Of,()=>b0().subtitleText),K(qf,b(X0,{get when(){return p.pinned===!0},get children(){var y=W("text");return D(y,E0("\u25B4")),X(y,"wrapMode","none"),E((A0)=>X(y,"fg",J.warning,A0)),y}}),null),K(qf,b(X0,{get when(){return ID(p)},children:(y)=>(()=>{var A0=W("text");return X(A0,"wrapMode","none"),K(A0,()=>y().glyph),E((m0)=>X(A0,"fg",$0(y().tone),m0)),A0})()}),null),K(qf,b(X0,{get when(){return N0().added>0},get children(){var y=W("text"),A0=E0("+");return D(y,A0),X(y,"wrapMode","none"),K(y,()=>N0().added,null),E((m0)=>X(y,"fg",J.success,m0)),y}}),null),K(qf,b(X0,{get when(){return N0().deleted>0},get children(){var y=W("text"),A0=E0("\u2212");return D(y,A0),X(y,"wrapMode","none"),K(y,()=>N0().deleted,null),E((m0)=>X(y,"fg",J.error,m0)),y}}),null),E((y)=>{var A0=D0()?J.backgroundElement:void 0,m0=h0(),u0=U0(),X1=Nf.BOLD,V1=J.text,tf=j0()||D0()?Nf.BOLD:void 0,P1=h0(),xJ=J.textMuted,M1=Nf.DIM;return A0!==y.e&&(y.e=X(l0,"backgroundColor",A0,y.e)),m0!==y.t&&(y.t=X(S0,"fg",m0,y.t)),u0!==y.a&&(y.a=X(df,"fg",u0,y.a)),X1!==y.o&&(y.o=X(df,"attributes",X1,y.o)),V1!==y.i&&(y.i=X(d,"fg",V1,y.i)),tf!==y.n&&(y.n=X(d,"attributes",tf,y.n)),P1!==y.s&&(y.s=X(Kf,"fg",P1,y.s)),xJ!==y.h&&(y.h=X(Of,"fg",xJ,y.h)),M1!==y.r&&(y.r=X(Of,"attributes",M1,y.r)),y},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),r0})()}}),null),K(Rf,b(X0,{get when(){return Q0().length===0},get children(){var o=W("box"),p=W("text");return D(o,p),X(o,"paddingTop",1),X(o,"paddingLeft",1),K(p,(()=>{var Z0=I0(()=>!!(Z()&&Q().trim().length>0));return()=>Z0()?F("tasks.empty.noMatchSearch"):I0(()=>!!z0())()?I0(()=>z()==="active")()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject"):I0(()=>z()==="active")()?F("tasks.empty.noActive"):F("tasks.empty.noArchived")})()),E((Z0)=>X(p,"fg",J.textMuted,Z0)),o}}),null),K(Rf,b(X0,{get when(){return I0(()=>!!(z0()&&Q0().length>0&&!f0()))()&&!(Z()&&Q().trim().length>0)},get children(){var o=W("box"),p=W("text");return D(o,p),X(o,"paddingTop",1),X(o,"paddingLeft",1),X(p,"wrapMode","none"),K(p,(()=>{var Z0=I0(()=>z()==="active");return()=>Z0()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject")})()),E((Z0)=>{var D0=J.textMuted,j0=Nf.DIM;return D0!==Z0.e&&(Z0.e=X(p,"fg",D0,Z0.e)),j0!==Z0.t&&(Z0.t=X(p,"attributes",j0,Z0.t)),Z0},{e:void 0,t:void 0}),o}}),null),K(Rf,b(X0,{get when(){return I0(()=>z()==="archived")()&&Q0().length>0},get children(){var o=W("box"),p=W("text");return D(o,p),X(o,"paddingTop",1),X(o,"paddingLeft",1),X(p,"wrapMode","none"),K(p,()=>F("tasks.archiveHint")),E((Z0)=>{var D0=J.textMuted,j0=Nf.DIM;return D0!==Z0.e&&(Z0.e=X(p,"fg",D0,Z0.e)),j0!==Z0.t&&(Z0.t=X(p,"attributes",j0,Z0.t)),Z0},{e:void 0,t:void 0}),o}}),null),K(v,b(X0,{get when(){return f.zenActive?.()},get children(){var o=W("box"),p=W("text");return D(o,p),X(o,"flexShrink",0),X(o,"paddingLeft",1),X(o,"paddingRight",1),X(o,"paddingTop",1),D(p,E0("\u262F ZEN")),X(p,"wrapMode","none"),E((Z0)=>{var D0=J.accent,j0=Nf.BOLD;return D0!==Z0.e&&(Z0.e=X(p,"fg",D0,Z0.e)),j0!==Z0.t&&(Z0.t=X(p,"attributes",j0,Z0.t)),Z0},{e:void 0,t:void 0}),o}}),null),K(v,b(X0,{get when(){return H0()},children:(o)=>{let p=K0(()=>{let b0=o().task,U0=[];if(U0.push({text:b0.kind==="main"?MJ(b0.repo):b0.title,bold:!0}),b0.branch.length>0)U0.push({text:`\u2387 ${b0.branch}`});if(b0.worktreePath.length>0)U0.push({text:b0.worktreePath,dim:!0});return U0}),Z0=72,D0=K0(()=>Math.min(68,Math.max(...p().map((b0)=>Cb(b0.text))))),j0=K0(()=>D0()+4),k=K0(()=>p().length+2),N0=K0(()=>Math.max(0,Math.min(o().x+2,q0().width-j0()-1))),p0=K0(()=>Math.max(0,Math.min(o().y+1,q0().height-k()-1)));return(()=>{var b0=W("box");return X(b0,"position","absolute"),X(b0,"zIndex",2600),X(b0,"flexDirection","column"),X(b0,"border",!0),X(b0,"paddingLeft",1),X(b0,"paddingRight",1),K(b0,b(Zf,{get each(){return p()},children:(U0)=>(()=>{var h0=W("text");return X(h0,"wrapMode","none"),K(h0,(()=>{var O0=I0(()=>!!U0.dim);return()=>O0()?kb(U0.text,D0()):I8(U0.text,D0())})()),E((O0)=>{var r0=U0.dim?J.textMuted:J.text,l0=U0.bold?Nf.BOLD:U0.dim?Nf.DIM:void 0;return r0!==O0.e&&(O0.e=X(h0,"fg",r0,O0.e)),l0!==O0.t&&(O0.t=X(h0,"attributes",l0,O0.t)),O0},{e:void 0,t:void 0}),h0})()})),E((U0)=>{var h0=N0(),O0=p0(),r0=j0(),l0=J.focusAccent,Yf=J.backgroundElement;return h0!==U0.e&&(U0.e=X(b0,"left",h0,U0.e)),O0!==U0.t&&(U0.t=X(b0,"top",O0,U0.t)),r0!==U0.a&&(U0.a=X(b0,"width",r0,U0.a)),l0!==U0.o&&(U0.o=X(b0,"borderColor",l0,U0.o)),Yf!==U0.i&&(U0.i=X(b0,"backgroundColor",Yf,U0.i)),U0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),b0})()}}),null),E((o)=>{var p=Y()?J.focusAccent:J.textMuted,Z0=Nf.BOLD,D0=J.textMuted,j0=Nf.DIM;return p!==o.e&&(o.e=X(_0,"fg",p,o.e)),Z0!==o.t&&(o.t=X(_0,"attributes",Z0,o.t)),D0!==o.a&&(o.a=X(Xf,"fg",D0,o.a)),j0!==o.o&&(o.o=X(Xf,"attributes",j0,o.o)),o},{e:void 0,t:void 0,a:void 0,o:void 0}),v})()}var xD=32,dZ,gb=2000,Rb=16;var PD=C(()=>{P();P();P();P();P();P();P();P();P();G1();P();Wf();Ef();Ef();kD();SQ();yD();TD();WG();ED();dZ=[{view:"active"},{view:"archived"}]});var dD={};jf(dD,{startTasksPane:()=>Ib,legendRowCap:()=>nD,legendCap:()=>cD});import{existsSync as vD}from"fs";import{stat as Nb}from"fs/promises";import{TextAttributes as xQ}from"@opentui/core";function h8(f){return!!f&&YX(f)}function mD(f){let J=f instanceof Error?f.message:String(f);if(/not a git repository/i.test(J))return F("tasks.toast.worktreeErrorNotGit");return F("tasks.toast.worktreeErrorGeneric",{message:J})}function bb(f){let{theme:J}=d0(),Y=Pf(),z=SG(),G=RQ(),[Z,q]=r(f.tasks().some((m)=>m.id===f.initialTaskId)?f.initialTaskId:f.tasks()[0]?.id??null);function Q(m){G.notify({kind:"error",taskId:Z()??"",tabId:"",title:m})}function H(m){G.notify({kind:"done",taskId:Z()??"",tabId:"",title:m})}let[B,V]=r(!1),[j,U]=r(z.get("activeSortMode")==="recent"?"recent":"default"),L=z.get("tasksPane.projectFilter"),[O,M]=r(typeof L==="string"&&L.length>0?L:null),g=(m)=>{M(m),z.set("tasksPane.projectFilter",m)},[I,a]=r(null),[N,A]=r(!1);{let m=process.env.TMUX_PANE;if(m){let L0=()=>{a0(["show-options","-wqv","-t",m,vz]).then(({code:R0,stdout:i0})=>{A(R0===0&&i0.trim().length>0)})};L0();let s=setInterval(L0,1000);vf(()=>clearInterval(s))}}let R=TJ(),S=!f.initialTaskId;ff(()=>{let m=f.orch?.activeTaskSignal()();if(!m)return;if(!S){if(m!==f.initialTaskId)return;S=!0}q(m)}),ff(O1(()=>f.orch?.uiPrefsSignal()(),(m)=>{if(m&&m.sortMode!==$f(j))U(m.sortMode);if(m&&m.projectFilter!==$f(O))M(m.projectFilter)})),ff(()=>{let m=f.orch?.updateSignal()();if(m)a(m)});let _={orch:f.orch,tasks:()=>f.tasks(),confirm:async(m)=>await JY.show(Y,m.title,m.body,m.cancelLabel,m.confirmLabel)===!0,promptText:(m,L0)=>fY.show(Y,m,L0),logger:console,logPrefix:"[kobe tasks]",notifyError:Q,notifyInfo:H,reload:()=>f.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(m,L0)=>{if(Z()!==m)return;let s=f.tasks();q(L0?.id??(s.find((R0)=>!R0.archived)??s[0])?.id??null)},promptNewTask:(m,L0,s)=>LQ.show(Y,m,L0,s),cursorRepo:()=>{let m=f.tasks();return(m.find((L0)=>L0.id===Z())??m[0])?.repo},lastVendor:()=>kf("lastSelectedVendor"),rememberVendor:(m)=>af("lastSelectedVendor",m),openCreateSurface:async(m)=>{if(jz(z.get(pJ,Bz))!=="chattab")return!1;let s=await k1();if(!s)return!1;return await Pq(s,m),!0},selectTask:(m)=>q(m),enterTask:(m)=>H0(m)};async function z0(){await DD(_)}async function e(){if(jz(z.get(pJ,Bz))==="chattab"){let s=await k1();if(s){await wq(s);return}}if(!(await Nz.show(Y,z,f.orch??void 0)).visualPrefsChanged)return;if(!z.flush())return;try{let s=await k1();if(s)await HG(s)}catch(s){console.error("[kobe tasks] failed to refresh workspace panes:",s)}}async function Y0(){let m=await k1();if(m){await hq(m);return}TG.show(Y)}async function T(){if(!I()?.hasUpdate){H(F("tasks.toast.alreadyLatest",{version:o0}));return}let L0=await k1();if(!L0)return;await vq(L0)}async function Q0(m){await jD(_,m)}async function t(m){await WD(_,m)}async function V0(m){await VD(_,m)}async function C0(m){await KD(_,m)}async function $(m){await UD(_,m)}async function x(m){let s=f.tasks().find((i0)=>i0.id===m)?.worktreePath;if(!s||!vD(s)){if(!f.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),Q(F("tasks.toast.noDaemonWorktree"));return}try{s=await f.orch.ensureWorktree(m)}catch(i0){console.error("[kobe tasks] task.ensureWorktree failed:",i0),Q(mD(i0));return}await f.reload()}if(!s||!vD(s))return;let R0=MD();if(!R0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),Q(F("tasks.toast.noEditor"));return}if(!FD(s,R0))console.error(`[kobe tasks] failed to open worktree with ${R0.label}`),Q(F("tasks.toast.openWorktreeFailed",{label:R0.label}))}async function f0(){if(!process.env.TMUX_PANE)return;let m=await k1();if(!m)return;let L0=await az(m);if(!L0)return;await v0(["select-pane","-t",L0])}async function u(m,L0){let s=f.tasks().find((R0)=>R0.id===m);if(!s||s.kind==="main"||!f.orch)return;try{await f.orch.moveTask(m,L0)}catch(R0){console.error("[kobe tasks] task.move failed:",R0),Q(F("tasks.toast.moveTaskFailed",{message:R0 instanceof Error?R0.message:String(R0)}));return}q(m),await f.reload()}let[G0,w]=r(z.get("tasksPane.keysCollapsed",!1)===!0),n=(m)=>{w(m),z.set("tasksPane.keysCollapsed",m)};ff(O1(()=>f.orch?.uiPrefsSignal()(),(m)=>{if(m&&m.keysCollapsed!==$f(G0))w(m.keysCollapsed)}));let[q0,W0]=r(!1);Df(()=>({enabled:Y.stack.length===0&&!q0(),bindings:wY({"help.open":()=>void Y0(),"task.new":()=>void z0(),"settings.open.sidebar":()=>void e(),"tasks.update":()=>void T(),"tasks.openWorktree":()=>{let m=Z();if(m)x(m)},"tasks.renameBranch":()=>{let m=Z();if(m)C0(m)},"tasks.cycleEngine":()=>{let m=Z();if(m)$(m)},"tasks.toggleKeys":()=>n(!G0()),"tasks.focusEngine":()=>void f0().catch((m)=>console.error("[kobe tasks] focus engine pane failed:",m))})}));async function H0(m){let L0=Mf(m),s=f.tasks().find((J0)=>J0.id===m),R0=await k1();if(R0&&R0!==L0)await KZ(R0);if(await Bf(L0)){let J0=await iX(L0,"@kobe_worktree")||s?.worktreePath||"";if(h8(J0)){let M0=s?.repo?_J(s.repo,J0,{kind:"repo-init"}):void 0;await yY({name:L0,cwd:J0,command:N1(s?.vendor),taskId:m,vendor:s?.vendor,repo:s?.repo,launchInit:M0})}await iq(L0),await v0(["switch-client","-t",`=${L0}`]),f.orch?.setActiveTask(m).catch(()=>{});return}let $0=s?.worktreePath;if(!h8($0)){if(!f.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),Q(F("tasks.toast.noDaemonOpen"));return}try{$0=await f.orch.ensureWorktree(m)}catch(J0){console.error("[kobe tasks] task.ensureWorktree failed:",J0),Q(mD(J0));return}await f.reload()}if(!h8($0))return;let w0=s?.repo?_J(s.repo,$0,{kind:"repo-init"}):void 0;if(!await yY({name:L0,cwd:$0,command:N1(s?.vendor),taskId:m,vendor:s?.vendor,repo:s?.repo,launchInit:w0})){console.error(`[kobe tasks] failed to start session ${L0}`),Q(F("tasks.toast.sessionStartFailed"));return}await iq(L0),await v0(["switch-client","-t",`=${L0}`]),f.orch?.setActiveTask(m).catch(()=>{})}let k0=K0(()=>{let m=I();if(m?.hasUpdate)return{label:`v${m.latest} \u2191`,emphasize:!0};return{label:`v${o0}`,emphasize:!1}}),x0=()=>f.orch?.daemonStaleSignal()()??!1,y0=()=>f.orch?.daemonVersionSignal()()??null,Gf=K0(()=>f.tasks().find((m)=>m.id===Z())?.kind==="main");return(()=>{var m=W("box"),L0=W("box");return D(m,L0),X(m,"flexDirection","column"),X(m,"flexGrow",1),K(m,b(QD,{stale:x0,daemonVersion:y0,clientVersion:o0,width:()=>R().width}),L0),X(L0,"flexGrow",1),X(L0,"flexShrink",1),K(L0,b(hD,{get tasks(){return f.tasks},selectedId:Z,onSelect:q,onActivate:(s)=>void H0(s),activateOnClick:!0,headerStatus:k0,onHeaderStatusClick:()=>void T(),onAddTask:()=>void z0(),zenActive:N,width:()=>R().width,get engineState(){return I0(()=>!!f.orch)()?f.orch.engineStateSignal():void 0},get taskJobs(){return I0(()=>!!f.orch)()?f.orch.taskJobsSignal():void 0},get worktreeChanges(){return f.orch?()=>{let s=f.orch;if(!s||s.connectionStateSignal()()!=="online")return null;return s.worktreeChangesSignal()()}:void 0},onRenameRequest:(s)=>void V0(s),onDeleteRequest:(s)=>void t(s),onArchiveRequest:(s)=>void Q0(s),onLocalMergeRequest:(s)=>{let R0=f.tasks().find((i0)=>i0.id===s);if(!R0||R0.kind==="main")return;q(s),V((i0)=>!i0)},moveMode:B,onMoveRequest:(s,R0)=>void u(s,R0),onMoveModeExit:()=>V(!1),sortMode:j,projectFilter:O,onProjectFilterChange:g,onSortModeToggle:()=>{let s=j()==="default"?"recent":"default";U(s),z.set("activeSortMode",s)},focused:()=>Y.stack.length===0,onSearchActiveChange:W0})),K(m,b(Sb,{moveMode:B,selectedIsMain:Gf,collapsed:G0,onToggleCollapsed:()=>n(!G0())}),null),E((s)=>X(m,"backgroundColor",J.background,s)),m})()}function cD(f){let J=q8(f);if(!J)return null;let Y=J.hint?.keys??J.keys[0];return Y&&Y.length>0?Y:null}function nD(f){let J=f.map(cD).filter((Y)=>Y!==null);return J.length>0?J.join("/"):null}function Sb(f){let{theme:J}=d0(),[Y,z]=r("Prefix");f1(()=>{a0(["show-options","-g","prefix"]).then(({code:U,stdout:L})=>{if(U!==0)return;let O=TQ(L);if(O)z(O)})});let G=()=>{X8();let U=Oq(),L=U.binds,O=[],M=U.focus.filter((I)=>I!==null).map((I)=>I.chord);if(M.length===4&&M.every((I,a)=>I===RY[a]))O.push({k:"ctrl+hjkl",label:F("tasks.hints.movePanes")});else if(M.length>0)O.push({k:M[0],label:F("tasks.hints.movePanes")});let g=(I,a)=>{let N=a.map((A)=>L[A]?.chord).filter((A)=>!!A);if(N.length>0)O.push({k:`prefix ${N.join("/")}`,label:I})};if(L["tmux.detach"])O.push({k:L["tmux.detach"].chord,label:F("tasks.hints.detach")});return g(F("tasks.hints.splits"),["tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"]),g(F("tasks.hints.panes"),["tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle"]),O},Z=()=>{X8();let U=[{ids:["help.open"],label:F("tasks.hints.fullHelp")},{ids:["task.new"],label:F("tasks.hints.newTask")},{ids:["settings.open.sidebar"],label:F("tasks.hints.settings")},{ids:["sidebar.select"],label:F("tasks.hints.open")},{ids:["tasks.focusEngine"],label:F("tasks.hints.focusEngine")},{ids:["tasks.openWorktree"],label:F("tasks.hints.openWorktree")},{ids:["sidebar.delete"],label:F("tasks.hints.delete")},{ids:["sidebar.view"],label:F("tasks.hints.views")},{ids:["sidebar.projectFilter"],label:F("tasks.hints.project")}],L=[];for(let O of U){let M=nD(O.ids);if(M===null)continue;L.push({k:M,label:O.label,dimWhenMain:O.dimWhenMain})}return L.push(...G()),L},q=()=>[{k:"j/k",label:F("tasks.hints.reorder")},{k:"enter/esc",label:F("tasks.hints.done")}],Q=()=>f.moveMode?.()?q():Z(),H=18,B=()=>Math.min(H,Math.max(...Q().map((U)=>U.label.length))),V=(U)=>U.length<=B()?U:`${U.slice(0,Math.max(0,B()-1))}\u2026`,j=()=>(f.collapsed?.()??!1)&&!(f.moveMode?.()??!1);return(()=>{var U=W("box"),L=W("text");return D(U,L),X(U,"flexShrink",0),X(U,"flexDirection","column"),X(U,"paddingLeft",1),X(U,"paddingRight",1),X(U,"paddingTop",1),X(U,"paddingBottom",1),X(U,"gap",0),X(L,"wrapMode","none"),X(L,"onMouseUp",()=>f.onToggleCollapsed?.()),K(L,(()=>{var O=I0(()=>!!j());return()=>O()?F("tasks.hints.headerFolded"):F("tasks.hints.headerUnfolded")})()),K(U,b(X0,{get when(){return!j()},get children(){return b(Zf,{get each(){return Q()},children:(O)=>{let M=()=>O.dimWhenMain===!0&&(f.selectedIsMain?.()??!1);return(()=>{var g=W("box"),I=W("box"),a=W("text"),N=E0("["),A=E0("]"),R=W("box"),S=W("text");return D(g,I),D(g,R),X(g,"flexDirection","row"),X(g,"gap",1),X(g,"justifyContent","space-between"),D(I,a),X(I,"width",10),X(I,"flexShrink",0),D(a,N),D(a,A),X(a,"wrapMode","none"),K(a,()=>IG(O.k,Y()),A),D(R,S),X(R,"flexShrink",0),X(S,"wrapMode","none"),K(S,()=>V(O.label)),E((_)=>{var z0=M()?J.textMuted:J.accent,e=M()?xQ.DIM:xQ.BOLD,Y0=B(),T=J.textMuted,Q0=M()?xQ.DIM:void 0;return z0!==_.e&&(_.e=X(a,"fg",z0,_.e)),e!==_.t&&(_.t=X(a,"attributes",e,_.t)),Y0!==_.a&&(_.a=X(R,"width",Y0,_.a)),T!==_.o&&(_.o=X(S,"fg",T,_.o)),Q0!==_.i&&(_.i=X(S,"attributes",Q0,_.i)),_},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),g})()}})}}),null),E((O)=>{var M=J.textMuted,g=xQ.DIM;return M!==O.e&&(O.e=X(L,"fg",M,O.e)),g!==O.t&&(O.t=X(L,"attributes",g,O.t)),O},{e:void 0,t:void 0}),U})()}async function Ib(f={}){await L1({logContext:"tasks",providers:{notifications:!0},setup:()=>Tb(f)})}async function Tb(f){let J=new Iz({homeDir:OJ()});await J.load();let[Y,z]=r(J.list()),G=null;try{let B=await p1();if(B){let V=new j1(B);await V.init(),G=V}else nJ("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(B){BY("tasks-boot",B),nJ("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let Z=()=>G&&G.connectionStateSignal()()==="online"?G.tasksSignal()():Y(),q=async()=>{await J.load(),z(J.list())},Q="",H=setInterval(()=>{if(G&&G.connectionStateSignal()()==="online")return;(async()=>{let B="missing";try{let V=await Nb(J.filePath);B=`${V.mtimeMs}:${V.size}`}catch{}if(B===Q)return;Q=B,await q()})().catch(()=>{})},yb);return{root:()=>[b(bb,{tasks:Z,get initialTaskId(){return f.initialTaskId},orch:G,reload:q}),b(XD,{})],onDestroy:()=>{if(H)clearInterval(H);G?.dispose()}}}var yb=1500;var iD=C(()=>{P();P();P();P();P();P();P();P();Sf();qJ();G1();P();_Y();y1();Wf();EY();E1();lf();e1();PG();zG();gf();Aq();U1();M8();yG();F8();y8();qD();HD();bG();PZ();CQ();Ef();L8();PY();b1();LD();OD();PD();J1();h1();O8()});var lD={};jf(lD,{startSettingsHost:()=>Eb});function ub(f){let J=SG(),Y=Pf(),{theme:z}=d0(),G=!1,Z=!1;async function q(){if(Z)return;Z=!0;try{if(J.flush()&&G){let H=await k1();if(H)await HG(H)}}catch(Q){console.error("[kobe settings] failed to refresh workspace panes:",Q)}finally{process.exit(0)}}return Df(()=>({enabled:Y.stack.length===0,bindings:[{key:"escape",cmd:q},{key:"q",cmd:q},{key:"ctrl+c",cmd:q}]})),(()=>{var Q=W("scrollbox");return X(Q,"flexGrow",1),X(Q,"paddingTop",1),X(Q,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),K(Q,b(Nz,{kv:J,get orchestrator(){return f.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{G=!0},onClose:q})),E((H)=>X(Q,"backgroundColor",z.background,H)),Q})()}async function Eb(){await L1({setup:async()=>{let f=null;try{let J=await p1();if(J){let Y=new j1(J);await Y.init(),f=Y}else console.error("[kobe settings] no daemon running; Restart backend disabled")}catch(J){console.error("[kobe settings] daemon unavailable; Restart backend disabled:",J)}return{root:()=>b(ub,{orchestrator:f}),onDestroy:()=>{f?.dispose()}}}})}var aD=C(()=>{P();P();P();P();P();P();y1();EY();y8();PZ();Ef();PY();b1();J1();h1()});var $D={};jf($D,{startHelpHost:()=>wb});function xb(){let f=Pf(),{theme:J}=d0();function Y(){process.exit(0)}return Df(()=>({enabled:f.stack.length===0,bindings:[{key:"escape",cmd:Y},{key:"q",cmd:Y},{key:"f1",cmd:Y},{key:"ctrl+c",cmd:Y}]})),(()=>{var z=W("box");return X(z,"flexGrow",1),X(z,"paddingTop",1),K(z,b(TG,{onClose:Y})),E((G)=>X(z,"backgroundColor",J.background,G)),z})()}async function wb(){await L1({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(xb,{})})})}var rD=C(()=>{P();P();P();P();P();M8();Ef();PY();b1();h1()});var pD={};jf(pD,{startUpdateHost:()=>db});import{spawn as hb,spawnSync as Pb}from"child_process";import{TextAttributes as EG}from"@opentui/core";function vb(f){if(!f)return!1;let J=process.platform,[Y,z]=J==="darwin"?["open",[f]]:J==="win32"?["cmd",["/c","start","",f]]:["xdg-open",[f]];try{return hb(Y,z,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function mb(f){return f.replace(/\r\n/g,`
|
|
225
225
|
`).split(`
|
|
226
|
-
`).map((
|
|
227
|
-
kobe ${
|
|
228
|
-
`),process.stdout.write(`running: ${
|
|
226
|
+
`).map((J)=>J.trim()).filter(Boolean)}function cb(){if(!process.stdin.isTTY)return Promise.resolve();return new Promise((f)=>{let J=process.stdin,Y=()=>{J.off("data",Y),J.setRawMode?.(!1),J.pause(),f()};J.setRawMode?.(!0),J.resume(),J.once("data",Y)})}function nb(){let{theme:f}=d0(),J=Y1(),[Y,z]=r(null),[G,Z]=r([]),[q,Q]=r(!0),[H,B]=r("update"),[V,j]=r(null),U=K0(()=>Y()?.latest??o0),L=K0(()=>G()[0]?.url??iQ(U())),O=K0(()=>[{id:"update",key:"U",label:F("update.actions.updateNow"),detail:wJ},{id:"release",key:"R",label:F("update.actions.openRelease"),detail:L()??F("update.releaseUrlUnavailable")},{id:"close",key:"Q",label:F("update.actions.close"),detail:F("update.actions.closeDetail")}]);f1(()=>{M()});async function M(){let N=await xG({force:!0});z(N);let A=N?.latest??o0,R=await dQ({current:o0,latest:A});Z(R),Q(!1)}function g(N){let A=O().map((_)=>_.id),S=(A.indexOf(H())+N+A.length)%A.length;B(A[S]??"update")}function I(N=H()){if(N==="close")process.exit(0);if(N==="release"){j(vb(L())?F("update.statusReleaseOpened"):F("update.statusReleaseError"));return}a()}async function a(){j(F("update.statusRunningUpdater")),await new Promise((R)=>setTimeout(R,30)),J?.destroy(),process.stdout.write(`
|
|
227
|
+
kobe ${o0} -> latest
|
|
228
|
+
`),process.stdout.write(`running: ${wJ}
|
|
229
229
|
|
|
230
|
-
`);let
|
|
231
|
-
kobe update: failed to start updater: ${
|
|
232
|
-
`);process.stdout.write(
|
|
233
|
-
|
|
230
|
+
`);let N=Pb("sh",["-c",wJ],{stdio:"inherit"}),A=N.status??(N.error?1:0);if(N.error)process.stderr.write(`
|
|
231
|
+
kobe update: failed to start updater: ${N.error.message}
|
|
232
|
+
`);process.stdout.write(A===0?`
|
|
233
|
+
${F("update.updateComplete")}
|
|
234
234
|
`:`
|
|
235
|
-
|
|
236
|
-
`),process.stdout.write("
|
|
237
|
-
`)}function
|
|
238
|
-
`).map((G)=>G.replace(/\r$/,"")),
|
|
239
|
-
`).map((
|
|
240
|
-
`).map((X)=>X.replace(/\r$/,"")),Z=[];for(let X of Y){if(X.length<4)continue;let G=X[0],z=X[1],f=X[2];if(G===void 0||z===void 0||f!==" ")continue;let q=X.slice(3),B;if(G==="?"&&z==="?")B="?";else{let j=z!==" "?z:G;if(j==="M"||j==="A"||j==="D"||j==="R"||j==="C"||j==="U")B=j;else continue}if(B==="R"){let j=q.indexOf(" -> ");if(j>=0)q=q.slice(j+4)}if(q.length===0)continue;if(q.endsWith("/"))continue;Z.push({path:q,status:B})}return Z}var SW=S(()=>{sQ()});function kW(J){L1(()=>({enabled:J.focused(),bindings:TZ({"files.nav":(Y,Z)=>{if((Z??0)%2===0)J.moveDown();else J.moveUp()},"files.hierarchy":(Y,Z)=>{if((Z??0)%2===0)J.collapseOrParent();else J.expandOrDescend()},"files.tab":(Y,Z)=>{let X=J.currentTab(),G=xz.indexOf(X);if(G<0)return;let z=(Z??0)%2===0?-1:1,f=xz[(G+z+xz.length)%xz.length];if(f)J.setTab(f)},"files.open":()=>J.openCurrent(),"files.mention":()=>J.mentionCurrent?.(),"files.createPR":()=>J.createPR?.(),"files.openExternal":()=>J.openExternal(),"files.refresh":()=>J.refresh()})}))}var xz;var IW=S(()=>{MG();gJ();xz=["all","changes"]});import{spawn as WL}from"child_process";import{existsSync as tk}from"fs";import{platform as ek}from"os";function VL(J){if(!J)return;let Y=ek();if(Y==="linux"){if(tk("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){wz("wslview",[J],()=>{let Z=WL("wslpath",["-w",J],{stdio:["ignore","pipe","ignore"]}),X="";Z.stdout?.on("data",(G)=>{X+=G.toString()}),Z.on("close",(G)=>{if(G===0)wz("explorer.exe",[X.trim()])})});return}wz("xdg-open",[J]);return}if(Y==="darwin"){wz("open",[J]);return}if(Y==="win32"){wz("cmd.exe",["/c","start","",J]);return}}function wz(J,Y,Z){try{let X=WL(J,Y,{stdio:"ignore",detached:!0});X.on("error",()=>Z?.()),X.unref()}catch{Z?.()}}var KL=()=>{};function NW(J,Y,Z,X){for(let G of J.children)if(G.isDir){let z=Y.has(G.path);if(X.push({kind:"dir",path:G.path,name:G.name,depth:Z,expanded:z,hasChildren:G.children.length>0}),z)NW(G,Y,Z+1,X)}else X.push({kind:"file",path:G.path,name:G.name,depth:Z})}function UL(J,Y){if(Y<=0)return J;let Z=[...J];if(Z.length<=Y)return J;return`\u2026${Z.slice(Z.length-Math.max(0,Y-1)).join("")}`}function LL(J){return J.map((Y)=>({kind:"status",path:Y.path,status:Y.status,added:Y.added,deleted:Y.deleted}))}function JI(J){return`${J.kind}\x00${J.path}`}function YI(J,Y){if(J.kind!==Y.kind||J.path!==Y.path)return!1;switch(J.kind){case"file":{let Z=Y;return J.name===Z.name&&J.depth===Z.depth}case"dir":{let Z=Y;return J.name===Z.name&&J.depth===Z.depth&&J.expanded===Z.expanded&&J.hasChildren===Z.hasChildren}case"status":{let Z=Y;return J.status===Z.status&&J.added===Z.added&&J.deleted===Z.deleted}}}function DL(J,Y){return Fq(J,Y,JI,YI)}function ML(J,Y){if(J===Y)return!0;if(J==null||Y==null)return!1;if(J.length!==Y.length)return!1;for(let Z=0;Z<J.length;Z++)if(J[Z]!==Y[Z])return!1;return!0}function FL(J,Y){if(J===Y)return!0;if(J==null||Y==null)return!1;if(J.length!==Y.length)return!1;for(let Z=0;Z<J.length;Z++){let X=J[Z],G=Y[Z];if(X.path!==G.path||X.status!==G.status||X.added!==G.added||X.deleted!==G.deleted)return!1}return!0}var OL=()=>{};import{watch as ZI}from"fs";import{TextAttributes as hz}from"@opentui/core";function XI(J){switch(J){case"M":return"warning";case"A":return"success";case"D":return"error";case"?":return"textMuted";case"R":case"C":case"U":return"info"}}function zI(J){let Y=J.toLowerCase();if(Y.includes("not a git repository"))return"not a git repository";if(Y.includes("does not exist")||Y.includes("enoent"))return"worktree path is missing";if(Y.includes("permission denied")||Y.includes("eacces"))return"permission denied";if(Y.includes("git: not found")||Y.includes("command not found"))return"git is not installed";let Z=J.indexOf(": ");if(Z>=0&&J.startsWith("git "))return J.slice(Z+2).trim()||"git command failed";return J.trim()||"git command failed"}function bW(J){let{theme:Y}=v0(),Z=IY(),X=()=>J.focused?J.focused():!0,[G,z]=p("all"),[f,q]=p(0),[B,j]=p(0),[K,H]=p(null,{equals:ML}),[U,L]=p(null,{equals:FL}),[F,D]=p(null),[A,R]=p(new Set),l=0;async function g(P,G0){let Z0=++l;if(G0==null){H(null),L(null),D(null);return}D(null);try{if(P==="all"){let K0=await gW(G0);if(Z0!==l||J.worktreePath()!==G0)return;H(K0)}else if(P==="changes"){let K0=await yW(G0);if(Z0!==l||J.worktreePath()!==G0)return;L(K0)}}catch(K0){let h=K0 instanceof Error?K0.message:String(K0);if(Z0===l&&J.worktreePath()===G0)D(h)}}s0(LJ(J.worktreePath,async(P)=>{H(null),L(null),D(null),q(0),R(new Set),await g(G(),P)})),s0(LJ(J.worktreePath,(P)=>{if(P==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let G0=null,Z0=null;try{Z0=ZI(P,{recursive:!0},(K0,h)=>{if(h==null)return;let y=h.toString();if(y===".git"||y.startsWith(".git/")||y.startsWith(".git\\"))return;if(y.startsWith("node_modules/")||y.startsWith("node_modules\\"))return;if(G0!=null)clearTimeout(G0);G0=setTimeout(()=>{G0=null,j((e)=>e+1)},500)}),Z0.on("error",()=>{})}catch{}P1(()=>{if(G0!=null)clearTimeout(G0);if(Z0!=null)Z0.close()})})),s0(LJ([G,B],async([P,G0])=>{let Z0=J.worktreePath();if(Z0==null)return;q(0);let h=B()>0;if(P==="all"){if(K()==null||h)await g("all",Z0)}else if(P==="changes"){if(U()==null||h)await g("changes",Z0)}}));let k=U0(()=>{let P=K();if(P==null)return null;return BL(P)}),C=U0((P)=>{let G0=[];if(G()==="all"){let Z0=k();if(Z0!=null)NW(Z0,A(),0,G0)}else if(G()==="changes"){let Z0=U();if(Z0!=null)G0.push(...LL(Z0))}return DL(P??[],G0)},[]),N=U0(()=>{let P=0,G0=0;for(let Z0 of C()){if(Z0.kind!=="status")continue;if(Z0.added!=null)P=Math.max(P,String(Z0.added).length+1);if(Z0.deleted!=null)G0=Math.max(G0,String(Z0.deleted).length+1)}return{added:P,deleted:G0}}),_=U0(()=>{let P=N(),G0=(P.added>0?P.added+1:0)+(P.deleted>0?P.deleted+1:0);return Math.max(8,Z().width-6-G0)});function X0(){let P=C();if(P.length===0)return;q(Math.min(f()+1,P.length-1))}function s(){if(C().length===0)return;q(Math.max(f()-1,0))}function Y0(){let P=C(),G0=f(),Z0=P[G0];if(!Z0)return;if(Z0.kind!=="dir")return;if(!Z0.expanded&&Z0.hasChildren)R((K0)=>{let h=new Set(K0);return h.add(Z0.path),h});else if(Z0.expanded){if(G0+1<P.length)q(G0+1)}}function u(){if(G()!=="all")return;let P=C(),G0=f(),Z0=P[G0];if(!Z0)return;if(Z0.kind==="dir"&&Z0.expanded){R((h)=>{let y=new Set(h);return y.delete(Z0.path),y});return}if(Z0.kind!=="dir"&&Z0.kind!=="file")return;let K0=Z0.depth-1;if(K0<0)return;for(let h=G0-1;h>=0;h--){let y=P[h];if(!y)continue;if(y.kind==="dir"&&y.depth===K0){q(h);return}}}function Q0(){let P=C(),G0=f();if(G0<0||G0>=P.length)return;let Z0=P[G0];if(!Z0)return;if(Z0.kind==="dir"){R((K0)=>{let h=new Set(K0);if(h.has(Z0.path))h.delete(Z0.path);else h.add(Z0.path);return h});return}J.onOpenFile(Z0.path)}function t(){let P=C(),G0=f();if(G0<0||G0>=P.length)return;let Z0=P[G0];if(!Z0||Z0.kind==="dir")return;J.onMention?.(Z0.path)}function j0(){j((P)=>P+1),J.onRefresh?.()}function S0(){let P=C(),G0=f();if(G0<0||G0>=P.length)return;let Z0=P[G0];if(!Z0||Z0.kind==="dir")return;let K0=J.worktreePath();if(!K0)return;let h=`${K0}/${Z0.path}`;VL(h)}kW({focused:X,moveDown:X0,moveUp:s,setTab:(P)=>z(P),currentTab:G,openCurrent:Q0,mentionCurrent:t,createPR:J.onCreatePR,openExternal:S0,refresh:j0,expandOrDescend:Y0,collapseOrParent:u});let $;return s0(LJ([f,C],([P,G0])=>{if(!$)return;if(G0.length===0)return;let Z0=$.scrollTop,K0=$.viewport.height;if(K0<=0)return;if(P<Z0)$.scrollTo({x:0,y:P});else if(P>=Z0+K0)$.scrollTo({x:0,y:P-K0+1})})),(()=>{var P=V("box"),G0=V("box"),Z0=V("box"),K0=V("scrollbox");return W(P,G0),W(P,K0),Q(P,"flexDirection","column"),Q(P,"flexGrow",1),Q(P,"paddingTop",1),Q(P,"paddingBottom",1),Q(P,"paddingLeft",0),Q(P,"paddingRight",0),M(P,I(z0,{get when(){return J.onZenToggle||J.onCreatePR},get children(){var h=V("box");return Q(h,"flexDirection","row"),Q(h,"justifyContent","flex-end"),Q(h,"gap",2),Q(h,"paddingBottom",1),Q(h,"flexShrink",0),M(h,I(z0,{get when(){return J.onZenToggle},get children(){var y=V("box"),e=V("text"),V0=V("text");return W(y,e),W(y,V0),Q(y,"flexDirection","row"),Q(y,"gap",1),Q(y,"onMouseUp",()=>J.onZenToggle?.()),W(e,T("\u262F")),Q(e,"wrapMode","none"),W(V0,T("zen")),Q(V0,"wrapMode","none"),x((q0)=>{var A0=Y.accent,I0=hz.BOLD,k0=Y.text;return A0!==q0.e&&(q0.e=Q(e,"fg",A0,q0.e)),I0!==q0.t&&(q0.t=Q(e,"attributes",I0,q0.t)),k0!==q0.a&&(q0.a=Q(V0,"fg",k0,q0.a)),q0},{e:void 0,t:void 0,a:void 0}),y}}),null),M(h,I(z0,{get when(){return J.onCreatePR},get children(){var y=V("box"),e=V("text"),V0=V("text");return W(y,e),W(y,V0),Q(y,"flexDirection","row"),Q(y,"gap",1),Q(y,"onMouseUp",()=>J.onCreatePR?.()),W(e,T("[P]")),Q(e,"wrapMode","none"),W(V0,T("create PR")),Q(V0,"wrapMode","none"),x((q0)=>{var A0=Y.accent,I0=hz.BOLD,k0=Y.text;return A0!==q0.e&&(q0.e=Q(e,"fg",A0,q0.e)),I0!==q0.t&&(q0.t=Q(e,"attributes",I0,q0.t)),k0!==q0.a&&(q0.a=Q(V0,"fg",k0,q0.a)),q0},{e:void 0,t:void 0,a:void 0}),y}}),null),h}}),G0),W(G0,Z0),Q(G0,"flexDirection","row"),Q(G0,"justifyContent","space-between"),Q(G0,"paddingBottom",0),Q(G0,"flexShrink",0),Q(Z0,"flexDirection","row"),Q(Z0,"gap",2),M(Z0,I(X1,{each:GI,children:(h)=>{let y=()=>G()===h;return(()=>{var e=V("text");return Q(e,"wrapMode","none"),Q(e,"onMouseUp",()=>z(h)),M(e,()=>QI[h]),x((V0)=>{var q0=y()?Y.primary:Y.textMuted,A0=y()?hz.BOLD:void 0;return q0!==V0.e&&(V0.e=Q(e,"fg",q0,V0.e)),A0!==V0.t&&(V0.t=Q(e,"attributes",A0,V0.t)),V0},{e:void 0,t:void 0}),e})()}})),M(G0,I(z0,{get when(){return J.cornerBadge?.()},children:(h)=>(()=>{var y=V("text");return Q(y,"wrapMode","none"),M(y,()=>h().text),x((e)=>{var V0=h().active?Y.accent:Y.textMuted,q0=h().active?hz.BOLD:void 0;return V0!==e.e&&(e.e=Q(y,"fg",V0,e.e)),q0!==e.t&&(e.t=Q(y,"attributes",q0,e.t)),e},{e:void 0,t:void 0}),y})()}),null),M(P,I(z0,{get when(){return G()==="changes"},get children(){var h=V("box"),y=V("text");return W(h,y),Q(h,"flexDirection","column"),Q(h,"paddingBottom",1),Q(h,"flexShrink",0),Q(h,"gap",0),W(y,T("M modified \xB7 A added \xB7 D deleted \xB7 ? untracked")),Q(y,"wrapMode","none"),x((e)=>Q(y,"fg",Y.textMuted,e)),h}}),K0),M(P,I(z0,{get when(){return G()!=="changes"},get children(){var h=V("box");return Q(h,"flexDirection","row"),Q(h,"paddingBottom",1),Q(h,"flexShrink",0),h}}),K0),kZ((h)=>{$=h},K0),Q(K0,"flexGrow",1),Q(K0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),M(K0,I(z0,{get when(){return J.worktreePath()==null},get children(){var h=V("box"),y=V("text");return W(h,y),Q(h,"paddingTop",1),Q(h,"paddingLeft",1),W(y,T("(no task \u2014 press n to create)")),x((e)=>Q(y,"fg",Y.textMuted,e)),h}}),null),M(K0,I(z0,{get when(){return Y1(()=>J.worktreePath()!=null)()&&F()!=null},get children(){var h=V("box"),y=V("text"),e=V("text");return W(h,y),W(h,e),Q(h,"paddingTop",1),Q(h,"paddingLeft",1),Q(h,"flexDirection","column"),Q(h,"gap",0),Q(y,"wrapMode","word"),M(y,()=>zI(F()??"")),W(e,T("press r to retry")),Q(e,"wrapMode","word"),x((V0)=>{var{error:q0,textMuted:A0}=Y;return q0!==V0.e&&(V0.e=Q(y,"fg",q0,V0.e)),A0!==V0.t&&(V0.t=Q(e,"fg",A0,V0.t)),V0},{e:void 0,t:void 0}),h}}),null),M(K0,I(z0,{get when(){return Y1(()=>J.worktreePath()!=null&&F()==null&&C().length===0)()&&(G()==="all"&&K()!=null||G()==="changes"&&U()!=null)},get children(){var h=V("box"),y=V("text");return W(h,y),Q(h,"paddingTop",1),Q(h,"paddingLeft",1),M(y,()=>G()==="all"?"(empty worktree)":"(no changes \u2014 clean worktree)"),x((e)=>Q(y,"fg",Y.textMuted,e)),h}}),null),M(K0,I(z0,{get when(){return Y1(()=>J.worktreePath()!=null&&F()==null)()&&C().length>0},get children(){var h=V("box");return Q(h,"flexShrink",0),Q(h,"gap",0),Q(h,"paddingRight",1),M(h,I(X1,{get each(){return C()},children:(y,e)=>{let V0=()=>e()===f(),q0=(()=>{var o=V("text");return Q(o,"wrapMode","none"),M(o,()=>V0()?"\u258C":" "),x((R0)=>Q(o,"fg",V0()?Y.focusAccent:void 0,R0)),o})(),A0=()=>V0()?Y.backgroundElement:void 0;if(y.kind==="dir"){let o=" ".repeat(y.depth),R0=y.expanded?"\u25BE":"\u25B8";return(()=>{var b0=V("box"),w0=V("box"),N0=V("text");return W(b0,w0),Q(b0,"flexDirection","row"),Q(b0,"gap",0),Q(b0,"onMouseUp",()=>{q(e()),R((d)=>{let J0=new Set(d);if(J0.has(y.path))J0.delete(y.path);else J0.add(y.path);return J0})}),M(b0,q0,w0),W(w0,N0),Q(w0,"flexGrow",1),Q(w0,"paddingRight",1),Q(N0,"wrapMode","none"),M(N0,()=>`${o}${R0} ${y.name}/`),x((d)=>{var J0=A0(),F0=Y.textMuted,d0=hz.BOLD;return J0!==d.e&&(d.e=Q(b0,"backgroundColor",J0,d.e)),F0!==d.t&&(d.t=Q(N0,"fg",F0,d.t)),d0!==d.a&&(d.a=Q(N0,"attributes",d0,d.a)),d},{e:void 0,t:void 0,a:void 0}),b0})()}if(y.kind==="file"){let o=" ".repeat(y.depth);return(()=>{var R0=V("box"),b0=V("box"),w0=V("text");return W(R0,b0),Q(R0,"flexDirection","row"),Q(R0,"gap",0),Q(R0,"onMouseUp",()=>{q(e()),J.onOpenFile(y.path)}),M(R0,q0,b0),W(b0,w0),Q(b0,"flexGrow",1),Q(b0,"paddingRight",1),Q(w0,"wrapMode","none"),M(w0,()=>`${o} ${y.name}`),x((N0)=>{var d=A0(),J0=Y.text;return d!==N0.e&&(N0.e=Q(R0,"backgroundColor",d,N0.e)),J0!==N0.t&&(N0.t=Q(w0,"fg",J0,N0.t)),N0},{e:void 0,t:void 0}),R0})()}let I0=XI(y.status),k0=()=>{switch(I0){case"success":return Y.success;case"warning":return Y.warning;case"error":return Y.error;case"info":return Y.info;default:return Y.textMuted}},a0=N(),v=y.added==null?" ".repeat(a0.added):`+${y.added}`.padStart(a0.added),H0=y.deleted==null?" ".repeat(a0.deleted):`-${y.deleted}`.padStart(a0.deleted);return(()=>{var o=V("box"),R0=V("box"),b0=V("text"),w0=V("text");return W(o,R0),Q(o,"flexDirection","row"),Q(o,"gap",0),Q(o,"onMouseUp",()=>{q(e()),J.onOpenFile(y.path)}),M(o,q0,R0),W(R0,b0),W(R0,w0),Q(R0,"flexDirection","row"),Q(R0,"flexGrow",1),Q(R0,"gap",1),Q(R0,"paddingRight",1),Q(b0,"wrapMode","none"),M(b0,()=>y.status),Q(w0,"wrapMode","none"),Q(w0,"flexGrow",1),M(w0,()=>UL(y.path,_())),M(R0,I(z0,{get when(){return a0.added>0},get children(){var N0=V("text");return Q(N0,"wrapMode","none"),M(N0,v),x((d)=>Q(N0,"fg",Y.success,d)),N0}}),null),M(R0,I(z0,{get when(){return a0.deleted>0},get children(){var N0=V("text");return Q(N0,"wrapMode","none"),M(N0,H0),x((d)=>Q(N0,"fg",Y.error,d)),N0}}),null),x((N0)=>{var d=A0(),J0=k0(),F0=Y.text;return d!==N0.e&&(N0.e=Q(o,"backgroundColor",d,N0.e)),J0!==N0.t&&(N0.t=Q(b0,"fg",J0,N0.t)),F0!==N0.a&&(N0.a=Q(w0,"fg",F0,N0.a)),N0},{e:void 0,t:void 0,a:void 0}),o})()}})),h}}),null),M(P,I(z0,{get when(){return J.worktreePath()!=null},get children(){var h=V("box"),y=V("text");return W(h,y),Q(h,"flexDirection","row"),Q(h,"paddingTop",1),Q(h,"flexShrink",0),W(y,T("\u21B5 open")),Q(y,"wrapMode","none"),x((e)=>Q(y,"fg",Y.textMuted,e)),h}}),null),P})()}var GI,QI;var AL=S(()=>{w();w();w();w();w();w();w();w();w();w();B1();u1();SW();IW();KL();OL();GI=["all","changes"];QI={all:"All",changes:"Changes"}});var RL=S(()=>{AL();SW();IW()});import{promises as fI}from"fs";import qI from"path";async function Sq(J,Y){let Z=new AbortController,X=setTimeout(()=>Z.abort(),BI);try{let G=await QY("git",Y,{cwd:J,env:TJ(),signal:Z.signal});if(Z.signal.aborted)return null;if(G.status!==0)return null;return G.stdout.trim()}finally{clearTimeout(X)}}async function jI(J){return await Sq(J,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function HI(J){let Y=await Sq(J,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!Y)return"main";return Y.startsWith("origin/")?Y.slice(7):Y}async function WI(J){let Y=await Sq(J,["rev-parse","--abbrev-ref","@{u}"]);return Y!==null&&Y.length>0}async function VI(J){let Y=await Sq(J,["status","--porcelain"]);if(!Y)return 0;return Y.split(`
|
|
241
|
-
`).filter((
|
|
235
|
+
${F("update.updateFailed",{code:String(A)})}
|
|
236
|
+
`),process.stdout.write(F("update.pressAnyKey")),await cb(),process.exit(A)}return Df(()=>({bindings:[{key:"up",cmd:()=>g(-1)},{key:"down",cmd:()=>g(1)},{key:"k",cmd:()=>g(-1)},{key:"j",cmd:()=>g(1)},{key:"return",cmd:()=>I()},{key:"u",cmd:()=>I("update")},{key:"r",cmd:()=>I("release")},{key:"q",cmd:()=>I("close")},{key:"escape",cmd:()=>I("close")},{key:"ctrl+c",cmd:()=>I("close")}]})),(()=>{var N=W("box"),A=W("box"),R=W("text"),S=W("text"),_=W("box"),z0=W("text"),e=W("text"),Y0=E0("v"),T=W("text"),Q0=W("text"),t=E0("v"),V0=W("box"),C0=W("box"),$=W("text"),x=W("scrollbox"),f0=W("box");return D(N,A),D(N,_),D(N,V0),D(N,C0),D(N,x),X(N,"flexDirection","column"),X(N,"flexGrow",1),X(N,"paddingTop",1),X(N,"paddingLeft",2),X(N,"paddingRight",2),D(A,R),D(A,S),X(A,"flexDirection","row"),X(A,"justifyContent","space-between"),X(A,"flexShrink",0),X(R,"wrapMode","none"),K(R,()=>F("update.pageTitle")),D(S,E0("q / esc")),X(S,"wrapMode","none"),X(S,"onMouseUp",()=>I("close")),D(_,z0),D(_,e),D(_,T),D(_,Q0),X(_,"flexDirection","row"),X(_,"gap",2),X(_,"flexShrink",0),X(_,"paddingTop",1),X(z0,"wrapMode","none"),K(z0,()=>F("update.current")),D(e,Y0),X(e,"wrapMode","none"),K(e,o0,null),X(T,"wrapMode","none"),K(T,()=>F("update.latest")),D(Q0,t),X(Q0,"wrapMode","none"),K(Q0,U,null),X(V0,"flexDirection","column"),X(V0,"flexShrink",0),X(V0,"paddingTop",1),X(V0,"gap",0),K(V0,b(Zf,{get each(){return O()},children:(u)=>(()=>{var G0=W("box"),w=W("box"),n=W("text"),q0=E0("["),W0=E0("]"),H0=W("box"),k0=W("text"),x0=W("text");return D(G0,w),D(G0,H0),D(G0,x0),X(G0,"flexDirection","row"),X(G0,"gap",1),X(G0,"paddingLeft",1),X(G0,"paddingRight",1),X(G0,"onMouseUp",()=>I(u.id)),D(w,n),X(w,"width",4),X(w,"flexShrink",0),D(n,q0),D(n,W0),X(n,"wrapMode","none"),K(n,()=>u.key,W0),D(H0,k0),X(H0,"width",14),X(H0,"flexShrink",0),X(k0,"wrapMode","none"),K(k0,()=>u.label),X(x0,"wrapMode","word"),K(x0,()=>u.detail),E((y0)=>{var Gf=H()===u.id?f.primary:void 0,m=H()===u.id?f.selectedListItemText:f.accent,L0=EG.BOLD,s=H()===u.id?f.selectedListItemText:f.text,R0=H()===u.id?f.selectedListItemText:f.textMuted;return Gf!==y0.e&&(y0.e=X(G0,"backgroundColor",Gf,y0.e)),m!==y0.t&&(y0.t=X(n,"fg",m,y0.t)),L0!==y0.a&&(y0.a=X(n,"attributes",L0,y0.a)),s!==y0.o&&(y0.o=X(k0,"fg",s,y0.o)),R0!==y0.i&&(y0.i=X(x0,"fg",R0,y0.i)),y0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),G0})()})),K(N,b(X0,{get when(){return V()},get children(){var u=W("text");return X(u,"wrapMode","word"),K(u,V),E((G0)=>X(u,"fg",f.info,G0)),u}}),C0),D(C0,$),X(C0,"flexShrink",0),X(C0,"paddingTop",1),X($,"wrapMode","none"),K($,()=>F("update.changesSectionHeader",{from:o0,to:U()})),D(x,f0),X(x,"flexGrow",1),X(x,"flexShrink",1),X(x,"stickyScroll",!1),X(f0,"flexDirection","column"),X(f0,"paddingRight",1),X(f0,"paddingBottom",1),X(f0,"gap",0),K(f0,b(X0,{get when(){return q()},get children(){var u=W("text");return K(u,()=>F("update.loadingNotes")),E((G0)=>X(u,"fg",f.textMuted,G0)),u}}),null),K(f0,b(X0,{get when(){return I0(()=>!q())()&&G().length===0},get children(){var u=W("text");return X(u,"wrapMode","word"),K(u,()=>F("update.notesUnavailable")),E((G0)=>X(u,"fg",f.textMuted,G0)),u}}),null),K(f0,b(Zf,{get each(){return G()},children:(u)=>(()=>{var G0=W("box"),w=W("text"),n=E0("v");return D(G0,w),X(G0,"flexDirection","column"),X(G0,"paddingBottom",1),X(G0,"gap",0),D(w,n),X(w,"wrapMode","none"),K(w,()=>u.version,null),K(G0,b(Zf,{get each(){return mb(u.body)},children:(q0)=>(()=>{var W0=W("text");return X(W0,"wrapMode","word"),K(W0,q0),E((H0)=>X(W0,"fg",f.textMuted,H0)),W0})()}),null),E((q0)=>{var W0=f.text,H0=EG.BOLD;return W0!==q0.e&&(q0.e=X(w,"fg",W0,q0.e)),H0!==q0.t&&(q0.t=X(w,"attributes",H0,q0.t)),q0},{e:void 0,t:void 0}),G0})()}),null),E((u)=>{var{background:G0,text:w}=f,n=EG.BOLD,q0=f.textMuted,W0=f.textMuted,H0=f.text,k0=EG.BOLD,x0=f.textMuted,y0=Y()?.hasUpdate?f.warning:f.success,Gf=EG.BOLD,m=f.textMuted,L0=EG.DIM,s={trackOptions:{backgroundColor:f.background,foregroundColor:f.borderActive}};return G0!==u.e&&(u.e=X(N,"backgroundColor",G0,u.e)),w!==u.t&&(u.t=X(R,"fg",w,u.t)),n!==u.a&&(u.a=X(R,"attributes",n,u.a)),q0!==u.o&&(u.o=X(S,"fg",q0,u.o)),W0!==u.i&&(u.i=X(z0,"fg",W0,u.i)),H0!==u.n&&(u.n=X(e,"fg",H0,u.n)),k0!==u.s&&(u.s=X(e,"attributes",k0,u.s)),x0!==u.h&&(u.h=X(T,"fg",x0,u.h)),y0!==u.r&&(u.r=X(Q0,"fg",y0,u.r)),Gf!==u.d&&(u.d=X(Q0,"attributes",Gf,u.d)),m!==u.l&&(u.l=X($,"fg",m,u.l)),L0!==u.u&&(u.u=X($,"attributes",L0,u.u)),s!==u.c&&(u.c=X(x,"verticalScrollbarOptions",s,u.c)),u},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0}),N})()}async function db(){await L1({setup:()=>({root:()=>b(nb,{})})})}var _D=C(()=>{P();P();P();P();P();P();P();P();P();Wf();U1();Ef();G1();PY();b1()});async function oD(f,J){if(!J)return 0;return pf(f).history.latestTranscriptMtimeForWorktree(J)}var sD=C(()=>{UY()});function ib(f){return f.trim().split(/\s+/)[0]??""}function eD(f,J,Y,z){let G=zf(Y);if(f==="vim")return{bin:"vim",command:`vim ${G}`};if(f==="nvim")return{bin:"nvim",command:`nvim ${G}`};if(f==="nano")return{bin:"nano",command:`nano ${G}`};if(f==="emacs")return{bin:"emacs",command:`emacs ${G}`};let Z=(J.trim()||(z??"").trim()).trim();if(!Z)return null;let q=ib(Z);if(!q)return null;let Q=Z.includes(tD)?Z.split(tD).join(G):`${Z} ${G}`;return{bin:q,command:Q}}function lb(f,J,Y){let z=zf(J);return["f=$(mktemp 2>/dev/null)",`if [ -n "$f" ] && git show ${zf(`HEAD:./${Y}`)} > "$f" 2>/dev/null; then`,` ${f} -d "$f" ${z} -c 'setlocal nomodifiable' -c 'wincmd l'; r=$?`,"else",` ${f} ${z}; r=$?`,"fi",'rm -f "$f" 2>/dev/null; exit $r'].join(`
|
|
237
|
+
`)}function ab(f,J){let Y=f.endsWith("/")?f:`${f}/`;return J.startsWith(Y)?J.slice(Y.length):null}async function $b(f){let J=pz(kf(rJ)),Y=kf(AY)??"",z=(process.env.VISUAL??process.env.EDITOR??"").trim();if(J!=="auto")return eD(J,Y,f,z);if(z)return eD("custom","",f,z);let G=zf(f);for(let Z of G7)if(await fL(Z))return{bin:Z,command:`${Z} ${G}`};return null}async function fL(f){try{return await Bun.spawn(["sh","-c",`command -v ${zf(f)} >/dev/null 2>&1`],{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function rb(f,J){try{return await Bun.spawn(["git","diff","--quiet","HEAD","--",J],{cwd:f,stdin:"ignore",stdout:"ignore",stderr:"ignore",env:x1()}).exited===1}catch{return!1}}async function JL(f,J,Y){let z=await $b(Y);if(!z)return!1;if(!await fL(z.bin))return!1;let G=await pb(z,J,Y);return await HJ(f,{cwd:J,command:G,name:_b(Y)}),!0}async function pb(f,J,Y){let{bin:z,command:G}=f;if(z!=="nvim"&&z!=="vim")return G;if(G!==`${z} ${zf(Y)}`)return G;let Z=ab(J,Y);if(!Z)return G;if(!await rb(J,Z))return G;return lb(z,Y,Z)}function _b(f){let J=f.slice(f.lastIndexOf("/")+1).trim();return J.length>0?J:"edit"}var tD="{file}";var YL=C(()=>{gY();gf();Zq();Sf();qJ()});async function P8(f,J){if(!J)throw Error("git(): cwd is required");let Y=await _z(J,f),z=Y.status??-1;if(z!==0){let G=(Y.stderr??"").trim(),Z=(Y.stdout??"").trim();throw Error(`git ${f.join(" ")} (cwd=${J}) exited with code ${z}: ${G||Z||"(no output)"}`)}return Y.stdout??""}async function v8(f){let Y=(await P8(["ls-files","--cached","--others","--exclude-standard","--full-name"],f)).split(`
|
|
238
|
+
`).map((G)=>G.replace(/\r$/,"")),z=new Set;for(let G of Y)if(G.length>0)z.add(G);return Array.from(z).sort()}async function m8(f){let J=await P8(["status","--porcelain","--untracked-files=all"],f),Y=ZL(J),z=null;try{let G=await P8(["diff","--no-color","--numstat","HEAD"],f);z=new Map(ob(G).map((Z)=>[Z.path,{added:Z.added,deleted:Z.deleted}]))}catch{z=new Map}return Y.map((G)=>{let Z=z?.get(G.path);if(Z)return{...G,added:Z.added,deleted:Z.deleted};return G})}function ob(f){let J=f.split(`
|
|
239
|
+
`).map((z)=>z.replace(/\r$/,"")),Y=[];for(let z of J){if(z.length===0)continue;let G=z.indexOf("\t");if(G<0)continue;let Z=z.indexOf("\t",G+1);if(Z<0)continue;let q=z.slice(0,G),Q=z.slice(G+1,Z),H=z.slice(Z+1),B=H.indexOf(" -> ");if(B>=0)H=H.slice(B+4);let V=q==="-"?null:Number.parseInt(q,10),j=Q==="-"?null:Number.parseInt(Q,10);if(H.length===0)continue;Y.push({path:H,added:Number.isNaN(V)?null:V,deleted:Number.isNaN(j)?null:j})}return Y}function zL(f){let J={name:"",path:"",isDir:!0,children:[]};for(let Y of f){if(!Y)continue;let z=Y.split("/").filter((Z)=>Z.length>0);if(z.length===0)continue;let G=J;for(let Z=0;Z<z.length;Z++){let q=z[Z],H=Z!==z.length-1,B=G.children.find((V)=>V.name===q&&V.isDir===H);if(!B)B={name:q,path:z.slice(0,Z+1).join("/"),isDir:H,children:[]},G.children.push(B);G=B}}return GL(J),J}function GL(f){f.children.sort((J,Y)=>{if(J.isDir!==Y.isDir)return J.isDir?-1:1;return J.name.localeCompare(Y.name)});for(let J of f.children)GL(J)}function ZL(f){let J=f.split(`
|
|
240
|
+
`).map((z)=>z.replace(/\r$/,"")),Y=[];for(let z of J){if(z.length<4)continue;let G=z[0],Z=z[1],q=z[2];if(G===void 0||Z===void 0||q!==" ")continue;let Q=z.slice(3),H;if(G==="?"&&Z==="?")H="?";else{let B=Z!==" "?Z:G;if(B==="M"||B==="A"||B==="D"||B==="R"||B==="C"||B==="U")H=B;else continue}if(H==="R"){let B=Q.indexOf(" -> ");if(B>=0)Q=Q.slice(B+4)}if(Q.length===0)continue;if(Q.endsWith("/"))continue;Y.push({path:Q,status:H})}return Y}var c8=C(()=>{Xq()});function n8(f){Df(()=>({enabled:f.focused(),bindings:wY({"files.nav":(J,Y)=>{if((Y??0)%2===0)f.moveDown();else f.moveUp()},"files.hierarchy":(J,Y)=>{if((Y??0)%2===0)f.collapseOrParent();else f.expandOrDescend()},"files.tab":(J,Y)=>{let z=f.currentTab(),G=iZ.indexOf(z);if(G<0)return;let Z=(Y??0)%2===0?-1:1,q=iZ[(G+Z+iZ.length)%iZ.length];if(q)f.setTab(q)},"files.open":()=>f.openCurrent(),"files.mention":()=>f.mentionCurrent?.(),"files.createPR":()=>f.createPR?.(),"files.openExternal":()=>f.openExternal(),"files.refresh":()=>f.refresh()})}))}var iZ;var d8=C(()=>{bG();b1();iZ=["all","changes"]});import{spawn as XL}from"child_process";import{existsSync as sb}from"fs";import{platform as tb}from"os";function qL(f){if(!f)return;let J=tb();if(J==="linux"){if(sb("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){lZ("wslview",[f],()=>{let Y=XL("wslpath",["-w",f],{stdio:["ignore","pipe","ignore"]}),z="";Y.stdout?.on("data",(G)=>{z+=G.toString()}),Y.on("close",(G)=>{if(G===0)lZ("explorer.exe",[z.trim()])})});return}lZ("xdg-open",[f]);return}if(J==="darwin"){lZ("open",[f]);return}if(J==="win32"){lZ("cmd.exe",["/c","start","",f]);return}}function lZ(f,J,Y){try{let z=XL(f,J,{stdio:"ignore",detached:!0});z.on("error",()=>Y?.()),z.unref()}catch{Y?.()}}var QL=()=>{};function i8(f,J,Y,z){for(let G of f.children)if(G.isDir){let Z=J.has(G.path);if(z.push({kind:"dir",path:G.path,name:G.name,depth:Y,expanded:Z,hasChildren:G.children.length>0}),Z)i8(G,J,Y+1,z)}else z.push({kind:"file",path:G.path,name:G.name,depth:Y})}function HL(f,J){if(J<=0)return f;let Y=[...f];if(Y.length<=J)return f;return`\u2026${Y.slice(Y.length-Math.max(0,J-1)).join("")}`}function BL(f){return f.map((J)=>({kind:"status",path:J.path,status:J.status,added:J.added,deleted:J.deleted}))}function eb(f){return`${f.kind}\x00${f.path}`}function fS(f,J){if(f.kind!==J.kind||f.path!==J.path)return!1;switch(f.kind){case"file":{let Y=J;return f.name===Y.name&&f.depth===Y.depth}case"dir":{let Y=J;return f.name===Y.name&&f.depth===Y.depth&&f.expanded===Y.expanded&&f.hasChildren===Y.hasChildren}case"status":{let Y=J;return f.status===Y.status&&f.added===Y.added&&f.deleted===Y.deleted}}}function jL(f,J){return bQ(f,J,eb,fS)}function WL(f,J){if(f===J)return!0;if(f==null||J==null)return!1;if(f.length!==J.length)return!1;for(let Y=0;Y<f.length;Y++)if(f[Y]!==J[Y])return!1;return!0}function VL(f,J){if(f===J)return!0;if(f==null||J==null)return!1;if(f.length!==J.length)return!1;for(let Y=0;Y<f.length;Y++){let z=f[Y],G=J[Y];if(z.path!==G.path||z.status!==G.status||z.added!==G.added||z.deleted!==G.deleted)return!1}return!0}var KL=()=>{};import{watch as JS}from"fs";import{TextAttributes as aZ}from"@opentui/core";function YS(f){switch(f){case"M":return"warning";case"A":return"success";case"D":return"error";case"?":return"textMuted";case"R":case"C":case"U":return"info"}}function GS(f){let J=f.toLowerCase();if(J.includes("not a git repository"))return F("files.error.notGitRepo");if(J.includes("does not exist")||J.includes("enoent"))return F("files.error.pathMissing");if(J.includes("permission denied")||J.includes("eacces"))return F("files.error.permissionDenied");if(J.includes("git: not found")||J.includes("command not found"))return F("files.error.gitNotInstalled");let Y=f.indexOf(": ");if(Y>=0&&f.startsWith("git "))return f.slice(Y+2).trim()||F("files.error.gitFailed");return f.trim()||F("files.error.gitFailed")}function ZS(f){switch(f){case"all":return F("files.tabs.all");case"changes":return F("files.tabs.changes")}}function l8(f){let{theme:J}=d0(),Y=TJ(),z=()=>f.focused?f.focused():!0,[G,Z]=r("all"),[q,Q]=r(0),[H,B]=r(0),[V,j]=r(null,{equals:WL}),[U,L]=r(null,{equals:VL}),[O,M]=r(null),[g,I]=r(new Set),a=0;async function N(x,f0){let u=++a;if(f0==null){j(null),L(null),M(null);return}M(null);try{if(x==="all"){let G0=await v8(f0);if(u!==a||f.worktreePath()!==f0)return;j(G0)}else if(x==="changes"){let G0=await m8(f0);if(u!==a||f.worktreePath()!==f0)return;L(G0)}}catch(G0){let w=G0 instanceof Error?G0.message:String(G0);if(u===a&&f.worktreePath()===f0)M(w)}}ff(O1(f.worktreePath,async(x)=>{j(null),L(null),M(null),Q(0),I(new Set),await N(G(),x)})),ff(O1(f.worktreePath,(x)=>{if(x==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let f0=null,u=null;try{u=JS(x,{recursive:!0},(G0,w)=>{if(w==null)return;let n=w.toString();if(n===".git"||n.startsWith(".git/")||n.startsWith(".git\\"))return;if(n.startsWith("node_modules/")||n.startsWith("node_modules\\"))return;if(f0!=null)clearTimeout(f0);f0=setTimeout(()=>{f0=null,B((q0)=>q0+1)},500)}),u.on("error",()=>{})}catch{}vf(()=>{if(f0!=null)clearTimeout(f0);if(u!=null)u.close()})})),ff(O1([G,H],async([x,f0])=>{let u=f.worktreePath();if(u==null)return;Q(0);let w=H()>0;if(x==="all"){if(V()==null||w)await N("all",u)}else if(x==="changes"){if(U()==null||w)await N("changes",u)}}));let A=K0(()=>{let x=V();if(x==null)return null;return zL(x)}),R=K0((x)=>{let f0=[];if(G()==="all"){let u=A();if(u!=null)i8(u,g(),0,f0)}else if(G()==="changes"){let u=U();if(u!=null)f0.push(...BL(u))}return jL(x??[],f0)},[]),S=K0(()=>{let x=0,f0=0;for(let u of R()){if(u.kind!=="status")continue;if(u.added!=null)x=Math.max(x,String(u.added).length+1);if(u.deleted!=null)f0=Math.max(f0,String(u.deleted).length+1)}return{added:x,deleted:f0}}),_=K0(()=>{let x=S(),f0=(x.added>0?x.added+1:0)+(x.deleted>0?x.deleted+1:0);return Math.max(8,Y().width-6-f0)});function z0(){let x=R();if(x.length===0)return;Q(Math.min(q()+1,x.length-1))}function e(){if(R().length===0)return;Q(Math.max(q()-1,0))}function Y0(){let x=R(),f0=q(),u=x[f0];if(!u)return;if(u.kind!=="dir")return;if(!u.expanded&&u.hasChildren)I((G0)=>{let w=new Set(G0);return w.add(u.path),w});else if(u.expanded){if(f0+1<x.length)Q(f0+1)}}function T(){if(G()!=="all")return;let x=R(),f0=q(),u=x[f0];if(!u)return;if(u.kind==="dir"&&u.expanded){I((w)=>{let n=new Set(w);return n.delete(u.path),n});return}if(u.kind!=="dir"&&u.kind!=="file")return;let G0=u.depth-1;if(G0<0)return;for(let w=f0-1;w>=0;w--){let n=x[w];if(!n)continue;if(n.kind==="dir"&&n.depth===G0){Q(w);return}}}function Q0(){let x=R(),f0=q();if(f0<0||f0>=x.length)return;let u=x[f0];if(!u)return;if(u.kind==="dir"){I((G0)=>{let w=new Set(G0);if(w.has(u.path))w.delete(u.path);else w.add(u.path);return w});return}f.onOpenFile(u.path)}function t(){let x=R(),f0=q();if(f0<0||f0>=x.length)return;let u=x[f0];if(!u||u.kind==="dir")return;f.onMention?.(u.path)}function V0(){B((x)=>x+1),f.onRefresh?.()}function C0(){let x=R(),f0=q();if(f0<0||f0>=x.length)return;let u=x[f0];if(!u||u.kind==="dir")return;let G0=f.worktreePath();if(!G0)return;let w=`${G0}/${u.path}`;qL(w)}n8({focused:z,moveDown:z0,moveUp:e,setTab:(x)=>Z(x),currentTab:G,openCurrent:Q0,mentionCurrent:t,createPR:f.onCreatePR,openExternal:C0,refresh:V0,expandOrDescend:Y0,collapseOrParent:T});let $;return ff(O1([q,R],([x,f0])=>{if(!$)return;if(f0.length===0)return;let u=$.scrollTop,G0=$.viewport.height;if(G0<=0)return;if(x<u)$.scrollTo({x:0,y:x});else if(x>=u+G0)$.scrollTo({x:0,y:x-G0+1})})),(()=>{var x=W("box"),f0=W("box"),u=W("box"),G0=W("scrollbox");return D(x,f0),D(x,G0),X(x,"flexDirection","column"),X(x,"flexGrow",1),X(x,"paddingTop",1),X(x,"paddingBottom",1),X(x,"paddingLeft",0),X(x,"paddingRight",0),K(x,b(X0,{get when(){return f.onZenToggle||f.onCreatePR},get children(){var w=W("box");return X(w,"flexDirection","row"),X(w,"justifyContent","flex-end"),X(w,"gap",2),X(w,"paddingBottom",1),X(w,"flexShrink",0),K(w,b(X0,{get when(){return f.onZenToggle},get children(){var n=W("box"),q0=W("text"),W0=W("text");return D(n,q0),D(n,W0),X(n,"flexDirection","row"),X(n,"gap",1),X(n,"onMouseUp",()=>f.onZenToggle?.()),D(q0,E0("\u262F")),X(q0,"wrapMode","none"),X(W0,"wrapMode","none"),K(W0,()=>F("files.actions.zen")),E((H0)=>{var k0=J.accent,x0=aZ.BOLD,y0=J.text;return k0!==H0.e&&(H0.e=X(q0,"fg",k0,H0.e)),x0!==H0.t&&(H0.t=X(q0,"attributes",x0,H0.t)),y0!==H0.a&&(H0.a=X(W0,"fg",y0,H0.a)),H0},{e:void 0,t:void 0,a:void 0}),n}}),null),K(w,b(X0,{get when(){return f.onCreatePR},get children(){var n=W("box"),q0=W("text"),W0=W("text");return D(n,q0),D(n,W0),X(n,"flexDirection","row"),X(n,"gap",1),X(n,"onMouseUp",()=>f.onCreatePR?.()),D(q0,E0("[P]")),X(q0,"wrapMode","none"),X(W0,"wrapMode","none"),K(W0,()=>F("files.actions.createPR")),E((H0)=>{var k0=J.accent,x0=aZ.BOLD,y0=J.text;return k0!==H0.e&&(H0.e=X(q0,"fg",k0,H0.e)),x0!==H0.t&&(H0.t=X(q0,"attributes",x0,H0.t)),y0!==H0.a&&(H0.a=X(W0,"fg",y0,H0.a)),H0},{e:void 0,t:void 0,a:void 0}),n}}),null),w}}),f0),D(f0,u),X(f0,"flexDirection","row"),X(f0,"justifyContent","space-between"),X(f0,"paddingBottom",0),X(f0,"flexShrink",0),X(u,"flexDirection","row"),X(u,"gap",2),K(u,b(Zf,{each:zS,children:(w)=>{let n=()=>G()===w;return(()=>{var q0=W("text");return X(q0,"wrapMode","none"),X(q0,"onMouseUp",()=>Z(w)),K(q0,()=>ZS(w)),E((W0)=>{var H0=n()?J.primary:J.textMuted,k0=n()?aZ.BOLD:void 0;return H0!==W0.e&&(W0.e=X(q0,"fg",H0,W0.e)),k0!==W0.t&&(W0.t=X(q0,"attributes",k0,W0.t)),W0},{e:void 0,t:void 0}),q0})()}})),K(f0,b(X0,{get when(){return f.cornerBadge?.()},children:(w)=>(()=>{var n=W("text");return X(n,"wrapMode","none"),K(n,()=>w().text),E((q0)=>{var W0=w().active?J.accent:J.textMuted,H0=w().active?aZ.BOLD:void 0;return W0!==q0.e&&(q0.e=X(n,"fg",W0,q0.e)),H0!==q0.t&&(q0.t=X(n,"attributes",H0,q0.t)),q0},{e:void 0,t:void 0}),n})()}),null),K(x,b(X0,{get when(){return G()==="changes"},get children(){var w=W("box"),n=W("text");return D(w,n),X(w,"flexDirection","column"),X(w,"paddingBottom",1),X(w,"flexShrink",0),X(w,"gap",0),X(n,"wrapMode","none"),K(n,()=>F("files.legend.changes")),E((q0)=>X(n,"fg",J.textMuted,q0)),w}}),G0),K(x,b(X0,{get when(){return G()!=="changes"},get children(){var w=W("box");return X(w,"flexDirection","row"),X(w,"paddingBottom",1),X(w,"flexShrink",0),w}}),G0),uY((w)=>{$=w},G0),X(G0,"flexGrow",1),X(G0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),K(G0,b(X0,{get when(){return f.worktreePath()==null},get children(){var w=W("box"),n=W("text");return D(w,n),X(w,"paddingTop",1),X(w,"paddingLeft",1),K(n,()=>F("files.empty.noTask")),E((q0)=>X(n,"fg",J.textMuted,q0)),w}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null)()&&O()!=null},get children(){var w=W("box"),n=W("text"),q0=W("text");return D(w,n),D(w,q0),X(w,"paddingTop",1),X(w,"paddingLeft",1),X(w,"flexDirection","column"),X(w,"gap",0),X(n,"wrapMode","word"),K(n,()=>GS(O()??"")),X(q0,"wrapMode","word"),K(q0,()=>F("files.error.retryHint")),E((W0)=>{var{error:H0,textMuted:k0}=J;return H0!==W0.e&&(W0.e=X(n,"fg",H0,W0.e)),k0!==W0.t&&(W0.t=X(q0,"fg",k0,W0.t)),W0},{e:void 0,t:void 0}),w}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null&&O()==null&&R().length===0)()&&(G()==="all"&&V()!=null||G()==="changes"&&U()!=null)},get children(){var w=W("box"),n=W("text");return D(w,n),X(w,"paddingTop",1),X(w,"paddingLeft",1),K(n,(()=>{var q0=I0(()=>G()==="all");return()=>q0()?F("files.empty.noFiles"):F("files.empty.noChanges")})()),E((q0)=>X(n,"fg",J.textMuted,q0)),w}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null&&O()==null)()&&R().length>0},get children(){var w=W("box");return X(w,"flexShrink",0),X(w,"gap",0),X(w,"paddingRight",1),K(w,b(Zf,{get each(){return R()},children:(n,q0)=>{let W0=()=>q0()===q(),H0=(()=>{var s=W("text");return X(s,"wrapMode","none"),K(s,()=>W0()?"\u258C":" "),E((R0)=>X(s,"fg",W0()?J.focusAccent:void 0,R0)),s})(),k0=()=>W0()?J.backgroundElement:void 0;if(n.kind==="dir"){let s=" ".repeat(n.depth),R0=n.expanded?"\u25BE":"\u25B8";return(()=>{var i0=W("box"),$0=W("box"),w0=W("text");return D(i0,$0),X(i0,"flexDirection","row"),X(i0,"gap",0),X(i0,"onMouseUp",()=>{Q(q0()),I((v)=>{let J0=new Set(v);if(J0.has(n.path))J0.delete(n.path);else J0.add(n.path);return J0})}),K(i0,H0,$0),D($0,w0),X($0,"flexGrow",1),X($0,"paddingRight",1),X(w0,"wrapMode","none"),K(w0,()=>`${s}${R0} ${n.name}/`),E((v)=>{var J0=k0(),M0=J.textMuted,_0=aZ.BOLD;return J0!==v.e&&(v.e=X(i0,"backgroundColor",J0,v.e)),M0!==v.t&&(v.t=X(w0,"fg",M0,v.t)),_0!==v.a&&(v.a=X(w0,"attributes",_0,v.a)),v},{e:void 0,t:void 0,a:void 0}),i0})()}if(n.kind==="file"){let s=" ".repeat(n.depth);return(()=>{var R0=W("box"),i0=W("box"),$0=W("text");return D(R0,i0),X(R0,"flexDirection","row"),X(R0,"gap",0),X(R0,"onMouseUp",()=>{Q(q0()),f.onOpenFile(n.path)}),K(R0,H0,i0),D(i0,$0),X(i0,"flexGrow",1),X(i0,"paddingRight",1),X($0,"wrapMode","none"),K($0,()=>`${s} ${n.name}`),E((w0)=>{var v=k0(),J0=J.text;return v!==w0.e&&(w0.e=X(R0,"backgroundColor",v,w0.e)),J0!==w0.t&&(w0.t=X($0,"fg",J0,w0.t)),w0},{e:void 0,t:void 0}),R0})()}let x0=YS(n.status),y0=()=>{switch(x0){case"success":return J.success;case"warning":return J.warning;case"error":return J.error;case"info":return J.info;default:return J.textMuted}},Gf=S(),m=n.added==null?" ".repeat(Gf.added):`+${n.added}`.padStart(Gf.added),L0=n.deleted==null?" ".repeat(Gf.deleted):`-${n.deleted}`.padStart(Gf.deleted);return(()=>{var s=W("box"),R0=W("box"),i0=W("text"),$0=W("text");return D(s,R0),X(s,"flexDirection","row"),X(s,"gap",0),X(s,"onMouseUp",()=>{Q(q0()),f.onOpenFile(n.path)}),K(s,H0,R0),D(R0,i0),D(R0,$0),X(R0,"flexDirection","row"),X(R0,"flexGrow",1),X(R0,"gap",1),X(R0,"paddingRight",1),X(i0,"wrapMode","none"),K(i0,()=>n.status),X($0,"wrapMode","none"),X($0,"flexGrow",1),K($0,()=>HL(n.path,_())),K(R0,b(X0,{get when(){return Gf.added>0},get children(){var w0=W("text");return X(w0,"wrapMode","none"),K(w0,m),E((v)=>X(w0,"fg",J.success,v)),w0}}),null),K(R0,b(X0,{get when(){return Gf.deleted>0},get children(){var w0=W("text");return X(w0,"wrapMode","none"),K(w0,L0),E((v)=>X(w0,"fg",J.error,v)),w0}}),null),E((w0)=>{var v=k0(),J0=y0(),M0=J.text;return v!==w0.e&&(w0.e=X(s,"backgroundColor",v,w0.e)),J0!==w0.t&&(w0.t=X(i0,"fg",J0,w0.t)),M0!==w0.a&&(w0.a=X($0,"fg",M0,w0.a)),w0},{e:void 0,t:void 0,a:void 0}),s})()}})),w}}),null),K(x,b(X0,{get when(){return f.worktreePath()!=null},get children(){var w=W("box"),n=W("text");return D(w,n),X(w,"flexDirection","row"),X(w,"paddingTop",1),X(w,"flexShrink",0),X(n,"wrapMode","none"),K(n,()=>F("files.footer.openHint")),E((q0)=>X(n,"fg",J.textMuted,q0)),w}}),null),x})()}var zS;var UL=C(()=>{P();P();P();P();P();P();P();P();P();G1();P();Wf();Ef();c8();d8();QL();KL();zS=["all","changes"]});var DL=C(()=>{UL();c8();d8()});import{promises as XS}from"fs";import qS from"path";async function wQ(f,J){let Y=new AbortController,z=setTimeout(()=>Y.abort(),QS);try{let G=await BJ("git",J,{cwd:f,env:x1(),signal:Y.signal});if(Y.signal.aborted)return null;if(G.status!==0)return null;return G.stdout.trim()}finally{clearTimeout(z)}}async function HS(f){return await wQ(f,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function BS(f){let J=await wQ(f,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!J)return"main";return J.startsWith("origin/")?J.slice(7):J}async function jS(f){let J=await wQ(f,["rev-parse","--abbrev-ref","@{u}"]);return J!==null&&J.length>0}async function WS(f){let J=await wQ(f,["status","--porcelain"]);if(!J)return 0;return J.split(`
|
|
241
|
+
`).filter((Y)=>Y.length>0).length}async function VS(f){let[J,Y,z,G]=await Promise.all([HS(f),BS(f),jS(f),WS(f)]);return{branch:J,targetBranch:Y,hasUpstream:z,dirtyCount:G}}function KS(f){if(f<=0)return"There are no uncommitted changes.";if(f===1)return"There is 1 uncommitted change.";return`There are ${f} uncommitted changes.`}function US(f){return f?"The current branch tracks an upstream.":"There is no upstream branch yet."}function DS(f,J){let Y={branch:J.branch,targetBranch:J.targetBranch,dirtyCountSentence:KS(J.dirtyCount),upstreamSentence:US(J.hasUpstream)};return f.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(z,G)=>Object.hasOwn(Y,G)?Y[G]:z)}async function LS(f){let J=qS.join(f,".kobe","pr-instructions.md");try{let Y=await XS.readFile(J,"utf8");return Y.length>0?Y:LL}catch{return LL}}async function ML(f){let[J,Y]=await Promise.all([LS(f),VS(f)]);return DS(J,Y)}var QS=5000,LL=`The user likes the current state of the code.
|
|
242
242
|
|
|
243
243
|
{{dirtyCountSentence}}
|
|
244
244
|
The current branch is {{branch}}.
|
|
@@ -255,21 +255,21 @@ Follow these steps to create a PR:
|
|
|
255
255
|
- Push to origin.
|
|
256
256
|
- Use \`gh pr create --base {{targetBranch}}\` to create a PR onto the target branch. Keep the title under 80 characters. Keep the description under five sentences. Describe not just changes made in this session but ALL changes since the branch diverged from the target.
|
|
257
257
|
|
|
258
|
-
If any of these steps fail, ask the user for help.`;var
|
|
259
|
-
`)}var
|
|
258
|
+
If any of these steps fail, ask the user for help.`;var FL=C(()=>{gY();nZ()});var a8={};jf(a8,{startOpsPreview:()=>ES,startOpsHost:()=>yS,nextActivityPollDelay:()=>gL});import{createHash as MS}from"crypto";import{SyntaxStyle as FS}from"@opentui/core";function gL(f,J){if(J<AS)return AL;return Math.min(f*2,OS)}function kS(f){let{theme:J}=d0(),[Y,z]=r(0),[G,Z]=r(0),q=!1;f1(()=>{let M=!1,g,I=AL,a=0,N=0;async function A(){try{let R=await oD(f.vendor,f.worktree);if(M)return;if(!q)q=!0,z(R),N=R;if(R>N)N=R,a=0;else a++;Z(R)}catch{a++}finally{if(!M)I=gL(I,a),g=setTimeout(()=>void A(),I)}}A(),vf(()=>{if(M=!0,g)clearTimeout(g)})});let Q=()=>q&&G()>Y(),H=()=>Q()?{text:F("ops.badge.newActivity"),active:!0}:null;function B(){z(G())}f1(()=>{if(!f.targetPane)return;let M=gV(f.vendor),g=!1,I=null,a="",N=!1,A=0,R=null;async function S(Y0){if(Y0===R)return;R=Y0,await LY(f.targetPane,CS,Y0)}async function _(){try{a=OL(await $z(f.targetPane,80)),I=(await M.latestCompletion(f.worktree))?.id??null,await S(M.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function z0(){try{let Y0=OL(await $z(f.targetPane,80));if(g)return;if(Y0!==a)a=Y0,N=!0,A=0,await S(M.supportsCompletionMarkers()?"running":"unknown");else if(N)A++;if(!M.supportsCompletionMarkers()||!N||A<RS)return;let T=await M.latestCompletion(f.worktree);if(g||!T||T.id===I)return;I=T.id,N=!1,A=0,await S("done")}catch{}}_();let e=setInterval(()=>void z0(),gS);vf(()=>{g=!0,clearInterval(e)})});function V(M){if(!f.taskId)return;HJ(Mf(f.taskId),{cwd:f.worktree,command:tW({worktree:f.worktree,relPath:M,cliInvocation:Cf()}),name:NS(M)})}function j(M){if(!f.taskId){V(M);return}let g=`${f.worktree}/${M}`;JL(Mf(f.taskId),f.worktree,g).then((I)=>{if(!I)V(M)})}function U(M){if(!f.targetPane)return;aX(f.targetPane,`@${M} `)}async function L(){if(!f.targetPane)return;let M=await ML(f.worktree);await aX(f.targetPane,M),await YZ(f.targetPane,"Enter")}function O(){if(!f.taskId)return;let M=Mf(f.taskId),g=Cf(),I=`${_f()}${g1(g)} layout --session ${zf(M)} --action zen-toggle`;v0(["run-shell","-b",I])}return(()=>{var M=W("box");return X(M,"flexDirection","column"),X(M,"flexGrow",1),K(M,b(l8,{worktreePath:()=>f.worktree,focused:()=>!0,onOpenFile:j,onMention:U,onCreatePR:()=>void L(),get onZenToggle(){return f.taskId?O:void 0},cornerBadge:H,onRefresh:B})),E((g)=>X(M,"backgroundColor",J.background,g)),M})()}function NS(f){let J=f.lastIndexOf("/");return J>=0?f.slice(J+1):f}function OL(f){return MS("sha1").update(f).digest("hex")}async function yS(f){await L1({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(kS,f)})})}function bS(f){switch(f.slice(f.lastIndexOf(".")+1).toLowerCase()){case"ts":case"tsx":case"mts":case"cts":return"typescript";case"js":case"jsx":case"mjs":case"cjs":return"javascript";case"md":case"markdown":return"markdown";default:return}}async function SS(f,J){let Y=await _z(f,["diff","HEAD","--",J]);return Y.status===0?Y.stdout:""}async function IS(f,J){return await Z7(f,J)??""}function TS(f){let J={fg:f.primary},Y={fg:f.success},z={fg:f.info},G={fg:f.warning},Z={fg:f.accent},q={fg:f.textMuted,italic:!0},Q={fg:f.textMuted},H={fg:f.text};return FS.fromStyles({keyword:J,"keyword.function":J,"keyword.return":J,"keyword.import":J,"keyword.exception":J,"keyword.conditional":J,"keyword.repeat":J,"keyword.operator":J,"keyword.modifier":J,"keyword.type":J,string:Y,"string.escape":Y,"string.regexp":Y,"string.special":Y,"character.special":Y,comment:q,"comment.documentation":q,function:z,"function.call":z,"function.method":z,"function.builtin":z,constructor:z,type:G,"type.builtin":G,constant:Z,"constant.builtin":Z,boolean:Z,number:Z,operator:Q,"punctuation.bracket":Q,"punctuation.delimiter":Q,"punctuation.special":Q,variable:H,"variable.member":H,"variable.parameter":H,"variable.builtin":Z,property:H,attribute:G,label:H,module:H})}function uS(f){let{theme:J}=d0(),Y=TS(J),z=bS(f.relPath),[G]=jX(()=>f.relPath,async(Z)=>{let q=await SS(f.worktree,Z);if(q.trim().length>0)return{kind:"diff",text:q};return{kind:"code",text:await IS(f.worktree,Z)}});return Df(()=>({bindings:[{key:"q",cmd:()=>process.exit(0)},{key:"escape",cmd:()=>process.exit(0)},{key:"ctrl+c",cmd:()=>process.exit(0)}]})),(()=>{var Z=W("box"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("box");return D(Z,q),D(Z,V),X(Z,"flexDirection","column"),X(Z,"flexGrow",1),D(q,Q),D(q,H),D(q,B),X(q,"flexDirection","row"),X(q,"gap",1),X(q,"paddingLeft",1),X(q,"paddingRight",1),K(Q,()=>f.relPath),K(H,(()=>{var j=I0(()=>G()?.kind==="diff");return()=>j()?F("ops.preview.diffVsHead"):F("ops.preview.file")})()),K(B,()=>F("ops.preview.closeHint")),X(V,"flexGrow",1),K(V,b(X0,{get when(){return G()},get fallback(){return(()=>{var j=W("text");return K(j,()=>F("ops.preview.loading")),E((U)=>X(j,"fg",J.textMuted,U)),j})()},children:(j)=>b(X0,{get when(){return j().kind==="diff"},get fallback(){return(()=>{var U=W("code");return X(U,"filetype",z),X(U,"syntaxStyle",Y),E((L)=>X(U,"content",j().text,L)),U})()},get children(){var U=W("diff");return X(U,"view","unified"),X(U,"filetype",z),X(U,"syntaxStyle",Y),X(U,"showLineNumbers",!0),E((L)=>X(U,"diff",j().text,L)),U}})})),E((j)=>{var{background:U,accent:L,textMuted:O,textMuted:M}=J;return U!==j.e&&(j.e=X(Z,"backgroundColor",U,j.e)),L!==j.t&&(j.t=X(Q,"fg",L,j.t)),O!==j.a&&(j.a=X(H,"fg",O,j.a)),M!==j.o&&(j.o=X(B,"fg",M,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),Z})()}async function ES(f){await L1({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(uS,f)})})}var AL=2500,OS=20000,AS=3,gS=1500,RS=2,CS="@kobe_tab_state";var $8=C(()=>{P();P();P();P();P();P();P();iJ();pH();sD();Sf();YL();qJ();Xq();Wf();Ef();G1();PY();b1();DL();zz();FL()});var NL={};jf(NL,{startDirectTmux:()=>wS,chooseInitialTask:()=>kL});import{resolve as RL}from"path";function kL(f,J={}){let Y=(q)=>q?f.find((Q)=>Q.id===q):void 0,z=Y(J.activeTaskId);if(z)return z;let G=Y(J.persistedTaskId);if(G)return G;if(J.cwdRepo){let q=f.find((Q)=>Q.kind==="main"&&Q.repo===J.cwdRepo);if(q)return q}let Z=f.filter((q)=>!q.archived);return Z.find((q)=>q.pinned)??Z[0]??f[0]}async function CL(f){if(f.length===0)return null;try{return await Bun.spawn(f,{stdin:"inherit",stdout:"inherit",stderr:"inherit",env:process.env}).exited}catch{return null}}async function xS(f){_Q();let J=[...m1()];if(J.length===0)J=[PJ(RL(process.cwd())).path];for(let Y of J)try{await f.ensureMainTask(Y)}catch(z){console.error(`[kobe] ensureMainTask failed for ${Y}:`,z)}return J[0]??RL(process.cwd())}async function wS(){if(gX("gui"),Promise.resolve().then(() => (Sj(),bj)).then((Y)=>Y.ensureGlobalKobeHooks()),!await NJ()){console.error("kobe: tmux not found on PATH \u2014 install tmux to use kobe 0.6 direct mode"),process.exitCode=1;return}let f=await UJ(),J=new j1(f,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=f.socketPath,await J.init();let Y=await xS(J),z=kL(J.listTasks(),{activeTaskId:J.activeTaskSignal()(),persistedTaskId:kf("lastSelectedTaskId"),cwdRepo:Y});if(!z){let V=await $X();if(await Dz(),await dq(V),await CL(iz(V))===null)console.error("kobe: failed to attach to the kobe-home session"),process.exitCode=1;return}let G=z.worktreePath||await J.ensureWorktree(z.id),Z=Mf(z.id);await J.setActiveTask(z.id).catch(()=>{}),af("lastSelectedTaskId",z.id);let q=_J(z.repo,G,{kind:"repo-init"});if(!await yY({name:Z,cwd:G,command:N1(z.vendor),taskId:z.id,vendor:z.vendor,repo:z.repo,launchInit:q})){console.error(`kobe: tmux session ${Z} failed to start (check the daemon log)`),process.exitCode=1;return}await Dz(),await dq(Z);let H=await CL(iz(Z));if(H===null){console.error(`kobe: failed to attach to tmux session ${Z}`),process.exitCode=1;return}if(H!==0&&!await Bf(Z)){console.error(`kobe: tmux session ${Z} ended unexpectedly (attach exited ${H})`),process.exitCode=H;return}let B=J.getTask(z.id);if(B&&B.title===RJ&&B.worktreePath)try{let V=await cz(B.worktreePath,B.vendor);if(V)await J.setTitle(B.id,V)}catch(V){console.error("[kobe] auto-title failed:",V)}}finally{J.dispose()}}var yL=C(()=>{_Y();y1();EY();E1();dX();iG();zG();gf();Sf();Nq();J1()});var bL={};jf(bL,{startTui:()=>hS});async function hS(){YU();let{startDirectTmux:f}=await Promise.resolve().then(() => (yL(),NL));await f()}var SL=C(()=>{YQ()});hQ();K1();import{resolve as uL}from"path";U1();function q9(){return[`kobe ${o0}`,"","Usage: kobe [command] [options]","","Run with no command to launch the TUI.","","Commands:"," web [options] Launch the browser dashboard"," add [path] Save a repo path for the new-task picker"," adopt [glob] Import existing git worktrees as tasks"," export [--csv|--json] Print the task list (json/csv/table; daemon-free)"," repo <verb> Per-repo init script + first prompt (show|set|unset)"," api <verb> Scriptable RPC surface for agents (see `kobe api --help`)"," daemon <verb> Manage the daemon (start|stop|status|restart)"," theme <verb> Manage user themes (list|add|remove)"," skill <verb> Install the kobe agent skill (install|status|command)"," feedback Send feedback to GitHub Discussions"," update [target] Self-update kobe"," doctor Diagnose daemon / tmux / state (read-only)"," reset [--hard] Recover a wedged install"," reload Restart Tasks/Ops panes in place (engine untouched)"," kill-sessions Tear down kobe's tmux server (dev reset)","","Options:"," -v, --version Print version"," -h, --help Print this help"].join(`
|
|
259
|
+
`)}var IL=`Usage: kobe add [path]
|
|
260
260
|
kobe add --remote --host <host> --user <user> --path <basePath> [--port N] [--key <path> | --password]
|
|
261
261
|
|
|
262
262
|
Save a repo for the new-task picker. With --remote, register an SSH-backed
|
|
263
263
|
project whose worktrees + engine run on <host> under <basePath>.
|
|
264
|
-
`;async function
|
|
264
|
+
`;async function PS(f){let J=f[0];if(J==="--help"||J==="-h"||J==="help"){process.stdout.write(IL);return}if(J==="--remote"){let{runAddRemote:Z}=await Promise.resolve().then(() => (C9(),R9));await Z(f.slice(1));return}if(J?.startsWith("-"))process.stderr.write(`kobe add: unknown flag "${J}"
|
|
265
265
|
|
|
266
|
-
${
|
|
267
|
-
`);function
|
|
266
|
+
${IL}`),process.exit(2);let Y=uL(process.cwd(),J&&J.length>0?J:"."),{addSavedRepo:z}=await Promise.resolve().then(() => (gf(),ZY)),G=z(Y);if(G.added)console.log(`added ${G.path} (${G.total} saved repo${G.total===1?"":"s"} total)`);else console.log(`already saved: ${G.path}`);await vS(G.path)}async function vS(f){let J=await EL(),Y;try{Y=await J.discoverAdoptableWorktrees(f)}catch(z){console.error(`(skipped worktree scan: ${z instanceof Error?z.message:String(z)})`);return}if(Y.length===0)return;console.log(`scanning ${f}: ${Y.length} unlinked worktree(s) \u2192 importing`),await xL(J,f,Y,mY(void 0))}async function EL(){let{TaskIndexStore:f}=await Promise.resolve().then(() => (PG(),JH)),{GitWorktreeManager:J}=await Promise.resolve().then(() => (ZH(),r9)),{Orchestrator:Y}=await Promise.resolve().then(() => (iG(),MW)),z=new f;return await z.load(),new Y({store:z,worktrees:new J})}async function xL(f,J,Y,z){let{connectIfRunning:G}=await Promise.resolve().then(() => (y1(),aB)),Z=await G();try{for(let q of Y){let Q=Z?(await Z.request("worktree.adopt",{repo:J,worktreePath:q.path,branch:q.branch,vendor:z})).task:await f.adoptWorktree({repo:J,worktreePath:q.path,branch:q.branch,vendor:z});console.log(` adopted ${q.branch} \u2192 task ${Q.id} (${Q.title})`)}}finally{Z?.close()}}var wL=["Usage: kobe adopt [glob] [--repo <path>] [--vendor <v>] [--yes]","","Import existing git worktrees in a repo as kobe tasks.","No glob \u2192 dry-run listing. With a glob \u2192 list matches; --yes adopts them.","","Options:"," --repo <path> Repo to scan (default: current directory)"," --vendor <v> Engine vendor for adopted tasks"," -y, --yes Actually adopt the matched worktrees"," -h, --help Print this help",""].join(`
|
|
267
|
+
`);function r8(f){process.stderr.write(`kobe adopt: ${f}
|
|
268
268
|
|
|
269
|
-
${
|
|
270
|
-
`),process.exit(2)}async function
|
|
271
|
-
`);return}if(L==="--repo"){if(
|
|
272
|
-
pass a path glob to adopt, e.g. kobe adopt '${
|
|
273
|
-
no worktrees match glob ${JSON.stringify(
|
|
274
|
-
${
|
|
275
|
-
`)}function
|
|
269
|
+
${wL}
|
|
270
|
+
`),process.exit(2)}async function mS(f){let J,Y,z,G=!1;for(let U=0;U<f.length;U++){let L=f[U];if(L==="--help"||L==="-h"||L==="help"){process.stdout.write(`${wL}
|
|
271
|
+
`);return}if(L==="--repo"){if(Y=f[++U],Y===void 0)r8("--repo requires a value")}else if(L==="--vendor"){if(z=f[++U],z===void 0)r8("--vendor requires a value")}else if(L==="--yes"||L==="-y")G=!0;else if(L&&!L.startsWith("-")&&J===void 0)J=L;else r8(`unexpected argument "${L}"`)}let{resolveRepoRoot:Z}=await Promise.resolve().then(() => (gf(),ZY)),q=Z(uL(process.cwd(),Y&&Y.length>0?Y:".")),Q=mY(z),H=await EL(),B=await H.discoverAdoptableWorktrees(q);if(B.length===0){console.log(`no adoptable worktrees for ${q} \u2014 every git worktree here is already a task`);return}let V=(U)=>!J||rZ(J,U.path);console.log(`adoptable worktrees in ${q}:`);for(let U of B){let L=J?V(U)?"*":" ":"-",O=[U.dirty?"dirty":"",U.kobeManaged?"":"external"].filter(Boolean).join(",");console.log(` ${L} ${U.branch} ${U.path}${O?` (${O})`:""}`)}if(!J){console.log(`
|
|
272
|
+
pass a path glob to adopt, e.g. kobe adopt '${q}/*' --yes`);return}let j=B.filter(V);if(j.length===0){console.log(`
|
|
273
|
+
no worktrees match glob ${JSON.stringify(J)}`);return}if(!G){console.log(`
|
|
274
|
+
${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await xL(H,q,j,Q),console.log(`done \u2014 adopted ${j.length} worktree(s)`)}function TL(f){f.write(`${q9()}
|
|
275
|
+
`)}function FJ(f){let J={};for(let Y=0;Y<f.length;Y++){let z=f[Y],G=f[Y+1];if(G===void 0)continue;if(z==="--task-id")J.taskId=G,Y++;else if(z==="--worktree")J.worktree=G,Y++;else if(z==="--target-pane")J.targetPane=G,Y++;else if(z==="--vendor")J.vendor=G,Y++;else if(z==="--preview")J.preview=G,Y++;else if(z==="--session")J.session=G,Y++;else if(z==="--repo")J.repo=G,Y++;else if(z==="--initial-task-id")J.initialTaskId=G,Y++;else if(z==="--action")J.action=G,Y++;else if(z==="--window")J.windowId=G,Y++;else if(z==="--cols")J.cols=G,Y++;else if(z==="--rows")J.rows=G,Y++;else if(z==="--status")J.status=G,Y++;else if(z==="--client")J.client=G,Y++}return J}async function cS(){let[,,...f]=process.argv,[J,...Y]=f;if(J==="--version"||J==="-v"||J==="version"){let{CURRENT_VERSION:G}=await Promise.resolve().then(() => (U1(),X9));console.log(`kobe ${G}`);return}if(J==="--help"||J==="-h"||J==="help"){TL(process.stdout);return}if(J==="add"){await PS(Y);return}if(J==="adopt"){await mS(Y);return}if(J==="export"){let{runExportSubcommand:G}=await Promise.resolve().then(() => (WK(),jK));await G(Y);return}if(J==="repo"){let{runRepoSubcommand:G}=await Promise.resolve().then(() => (DK(),UK));await G(Y);return}if(J==="api"){let{runApiSubcommand:G}=await Promise.resolve().then(() => (EK(),uK));await G(Y);return}if(J==="update"){let{runUpdateSubcommand:G}=await Promise.resolve().then(() => (vK(),PK));await G(Y);return}if(J==="theme"){let{runThemeSubcommand:G}=await Promise.resolve().then(() => (iK(),dK));await G(Y);return}if(J==="feedback"){let{runFeedbackSubcommand:G}=await Promise.resolve().then(() => (pK(),rK));await G(Y);return}if(J==="daemon"){let{runDaemonSubcommand:G}=await Promise.resolve().then(() => (eK(),tK));await G(Y);return}if(J==="doctor"){let{runDoctorSubcommand:G}=await Promise.resolve().then(() => (GQ(),zQ));await G(Y);return}if(J==="web"){let{runWebSubcommand:G}=await Promise.resolve().then(() => (UU(),KU));await G(Y);return}if(J==="reset"){let{runResetSubcommand:G}=await Promise.resolve().then(() => (GQ(),zQ));await G(Y);return}if(J==="reload"){let{runReloadSubcommand:G}=await Promise.resolve().then(() => (GQ(),zQ));await G(Y);return}if(J==="skill"){let{runSkillSubcommand:G}=await Promise.resolve().then(() => (MU(),LU));await G(Y);return}if(J==="hook"){let{runHookSubcommand:G}=await Promise.resolve().then(() => (Sj(),bj));await G(Y);return}if(J==="new-chattab"){let G=FJ(Y),Z=G.session;if(!Z)console.error("kobe new-chattab: --session <name> is required"),process.exit(2);let{windowIsSurface:q}=await Promise.resolve().then(() => (Sf(),zZ));if(await q(Z))return;let Q;if(G.vendor!==void 0){let B=G.vendor.trim(),{getCustomEngineIds:V}=await Promise.resolve().then(() => (gf(),ZY)),{isBuiltinVendor:j}=await Promise.resolve().then(() => (K1(),e8));if(!(j(B)||V().includes(B))){let O=[...mf,...V()].join(", "),M=`kobe: unknown engine '${B}' (known: ${O})`,{runTmux:g}=await Promise.resolve().then(() => (Sf(),zZ));await g(["display-message","-t",Z,M]),console.error(M),process.exit(2)}Q=B;let{setPersistedString:L}=await Promise.resolve().then(() => (gf(),ZY));L("lastSelectedVendor",Q)}let{newChatTab:H}=await Promise.resolve().then(() => (J1(),r1));await H(Z,Q);return}if(J==="kill-sessions"){let{runTmux:G,KOBE_TMUX_SOCKET:Z}=await Promise.resolve().then(() => (Sf(),zZ)),q=await G(["kill-server"]);console.log(q===0?`kobe: killed all tmux sessions on the \`${Z}\` socket`:`kobe: no tmux sessions to kill on the \`${Z}\` socket`);return}if(J==="quick-create"){let Z=FJ(Y).session;if(!Z)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:q}=await Promise.resolve().then(() => (J1(),r1));await q(Z);return}if(J==="focus-tasks"){let G=FJ(Y),Z=G.session;if(!Z)console.error("kobe focus-tasks: --session <name> is required"),process.exit(2);let{windowIsSurface:q}=await Promise.resolve().then(() => (Sf(),zZ));if(G.windowId&&await q(G.windowId))return;let{selectTasksPane:Q}=await Promise.resolve().then(() => (J1(),r1));await Q(Z,{windowId:G.windowId});return}if(J==="heal-layout"){let Z=FJ(Y).session;if(!Z)console.error("kobe heal-layout: --session <name> is required"),process.exit(2);let{healSessionLayout:q}=await Promise.resolve().then(() => (J1(),r1)),{coalesceLayoutWork:Q}=await Promise.resolve().then(() => (qG(),yq));await Q(Z,"heal",()=>q(Z));return}if(J==="resync-window"){let G=FJ(Y),Z=G.session;if(!Z)console.error("kobe resync-window: --session <name> is required"),process.exit(2);let q=Number.parseInt(G.cols??"",10),Q=Number.parseInt(G.rows??"",10),H=Number.isInteger(q)&&q>0&&Number.isInteger(Q)&&Q>0?{columns:q,rows:Q}:null,{resyncWindowToClient:B}=await Promise.resolve().then(() => (J1(),r1)),{coalesceLayoutWork:V}=await Promise.resolve().then(() => (qG(),yq));await V(Z,"resync",()=>B(Z,{size:H,status:G.status,clientName:G.client}));return}if(J==="capture-layout"){let Z=FJ(Y).session;if(!Z)console.error("kobe capture-layout: --session <name> is required"),process.exit(2);let{captureGlobalLayoutOnDrag:q}=await Promise.resolve().then(() => (J1(),r1)),{coalesceLayoutWork:Q,genAgeMs:H,RESIZE_GUARD_MS:B}=await Promise.resolve().then(() => (qG(),yq));await Q(Z,"capture",async()=>{if(H(Z,"resize")<B)return;await q(Z)});return}if(J==="layout"){let G=FJ(Y),Z=G.session;if(!Z)console.error("kobe layout: --session <name> is required"),process.exit(2);let q=G.action;if(!q||!new Set(["workspace-split","workspace-close","workspace-reset","tasks-toggle","tasks-restore","ops-toggle","terminal-toggle","zen-toggle","chat-tab-close"]).has(q))console.error("kobe layout: --action must be one of workspace-split, workspace-close, workspace-reset, tasks-toggle, tasks-restore, ops-toggle, terminal-toggle, zen-toggle, chat-tab-close"),process.exit(2);let{runLayoutAction:H}=await Promise.resolve().then(() => (J1(),r1));await H(Z,q,{windowId:G.windowId});return}if(J==="quick-task"){let G=FJ(Y),{startQuickTaskHost:Z}=await Promise.resolve().then(() => (i4(),d4));await Z({session:G.session});return}if(J==="tasks"){let G=FJ(Y),{startTasksPane:Z}=await Promise.resolve().then(() => (iD(),dD));await Z({initialTaskId:G.initialTaskId});return}if(J==="settings"){let{startSettingsHost:G}=await Promise.resolve().then(() => (aD(),lD));await G();return}if(J==="help-page"){let{startHelpHost:G}=await Promise.resolve().then(() => (rD(),$D));await G();return}if(J==="new-task"){let G=FJ(Y),{startNewTaskHost:Z}=await Promise.resolve().then(() => (K8(),x4));await Z({defaultRepo:G.repo});return}if(J==="update-page"){let{startUpdateHost:G}=await Promise.resolve().then(() => (_D(),pD));await G();return}if(J==="ops"){let G=FJ(Y);if(!G.worktree)console.error("kobe ops: --worktree <path> is required"),process.exit(2);if(G.preview){let{startOpsPreview:q}=await Promise.resolve().then(() => ($8(),a8));await q({worktree:G.worktree,relPath:G.preview});return}let{startOpsHost:Z}=await Promise.resolve().then(() => ($8(),a8));await Z({taskId:G.taskId??"",worktree:G.worktree,targetPane:G.targetPane??null,vendor:mY(G.vendor)});return}if(J!==void 0)console.error(`kobe: unknown command '${J}'`),TL(process.stderr),process.exit(2);let{startTui:z}=await Promise.resolve().then(() => (SL(),bL));await z()}cS().catch((f)=>{console.error("kobe failed to start:",f),process.exit(1)});
|