@sma1lboy/kobe 0.7.37 → 0.7.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +188 -187
- package/package.json +2 -1
package/dist/cli/index.js
CHANGED
|
@@ -1,103 +1,104 @@
|
|
|
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 nL=Object.defineProperty;var dL=(f)=>f;function iL(f,J){this[f]=dL.bind(null,J)}var jf=(f,J)=>{for(var Y in J)nL(f,Y,{get:J[Y],enumerable:!0,configurable:!0,set:iL.bind(J,Y)})};var k=(f,J)=>()=>(f&&(J=f(f=0)),J);var pX=import.meta.require;import{basename as lL}from"path";function aL(f){let J="";for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="*")if(f[Y+1]==="*")J+=".*",Y++;else J+="[^/]*";else if(z==="?")J+="[^/]";else if(z&&"\\^$.|+()[]{}".includes(z))J+=`\\${z}`;else J+=z}return new RegExp(`^${J}$`)}function _X(f,J){let Y;try{Y=aL(f)}catch{return!1}return Y.test(J)||Y.test(lL(J))}var vQ=()=>{};var f9={};jf(f9,{prevVendorWithin:()=>mQ,nextVendorWithin:()=>ZY,nextVendor:()=>$L,isBuiltinVendor:()=>Q1,coerceVendorId:()=>iY,BUILTIN_VENDORS:()=>dY,ALL_VENDORS:()=>cf});function Q1(f){return f==="claude"||f==="codex"||f==="copilot"}function $L(f){let J=cf.indexOf(f);return cf[(J+1)%cf.length]??cf[0]}function ZY(f,J){if(f.length===0)return J;let Y=f.indexOf(J);return f[(Y+1)%f.length]??f[0]??J}function mQ(f,J){if(f.length===0)return J;let Y=f.indexOf(J);if(Y<0)return f[f.length-1]??J;return f[(Y-1+f.length)%f.length]??J}function iY(f){let J=f?.trim();return J&&J.length>0?J:"claude"}var dY,cf;var K1=k(()=>{dY=["claude","codex","copilot"],cf=[...dY]});var oX;var J9=k(()=>{oX={$schema:"https://json.schemastore.org/package.json",name:"@sma1lboy/kobe",version:"0.7.39",description:"TUI orchestrator for Claude Code (codename)",type:"module",packageManager:"bun@1.3.13",bin:{kobe:"dist/cli/index.js"},files:["dist/cli","dist/web-ui","dist/*.wav","README.md","LICENSE"],publishConfig:{access:"public"},repository:{type:"git",url:"git+https://github.com/Sma1lboy/kobe.git"},homepage:"https://github.com/Sma1lboy/kobe#readme",bugs:{url:"https://github.com/Sma1lboy/kobe/issues"},engines:{bun:">=1.3.11"},scripts:{dev:"env KOBE_DEV=1 bun --preload @opentui/solid/preload --conditions=browser ./src/cli/index.ts","dev:sandbox":"mkdir -p .dev-sandbox/home && env KOBE_DEV=1 KOBE_HOME_DIR=$PWD/.dev-sandbox/home KOBE_TMUX_SOCKET=kobe-sandbox bun --preload @opentui/solid/preload --conditions=browser ./src/cli/index.ts","dev:sandbox:reset":"env KOBE_TMUX_SOCKET=kobe-sandbox bun ./src/cli/index.ts kill-sessions","dev:version":"bash ../../scripts/dev-version.sh",build:"bun run scripts/build.ts","build:with-web":"bun run build",compile:"bun run scripts/compile.ts",typecheck:"tsc --noEmit","check-i18n":"bun run scripts/check-i18n.ts",test:"bun run test:fast && bun run test:socket","test:fast":"vitest run --passWithNoTests","test:socket":"KOBE_INCLUDE_SOCKET=1 vitest run test/daemon --pool forks --minWorkers=1 --maxWorkers=1 --passWithNoTests","test:behavior":"KOBE_INCLUDE_BEHAVIOR=1 vitest run test/behavior --passWithNoTests",bench:"vitest bench --run",lint:"biome check .",knip:"knip-bun",postinstall:"bun run scripts/check-preview-deps.ts || true",prepublishOnly:"bun run typecheck && bun run build"},"//":"biome.json + bunfig.toml live at the monorepo root since they apply repo-wide; bun.lock also lives at root (workspace-shared).",dependencies:{"@ansi-tools/parser":"^1.0.15","@opentui/core":"0.2.4","@opentui/solid":"0.2.4",ws:"^8.18.0","solid-js":"1.9.13"},devDependencies:{"@biomejs/biome":"1.9.4","@sma1lboy/kobe-daemon":"0.7.11","@tsconfig/bun":"1.0.10","@types/bun":"1.3.14","@types/node":"25.6.2",knip:"^6.14.2","kobe-web":"workspace:*","node-pty":"^1.1.0",typescript:"5.8.2",vitest:"2.1.9"},trustedDependencies:[]}});import{createHash as Y9}from"crypto";import{homedir as pL}from"os";import{join as lY}from"path";function z9(){return process.env.KOBE_DEV==="1"}function OJ(){return process.env.KOBE_HOME_DIR??pL()}function ef(){return lY(OJ(),".kobe")}function m1(){return lY(OJ(),".config","kobe","state.json")}function _L(){return lY(ef(),"settings")}function G9(){return lY(_L(),"keybindings.yaml")}function cQ(){return lY(ef(),"issue-assets")}function sX(f,J,Y){let z=Y9("sha1").update(`${J}@${f}:${Y??22}`).digest("hex").slice(0,16);return lY(ef(),"ssh",`${z}.sock`)}function X9(f){let J=Y9("sha1").update(f).digest("hex").slice(0,16);return lY(ef(),"worktree-init",J)}var lf=()=>{};var q9={};jf(q9,{repoSlug:()=>aY,releasePageUrl:()=>aQ,recommendedGlobalInstallCommand:()=>iQ,isNewerSemver:()=>nQ,fetchReleaseSummaries:()=>tL,fetchReleaseNotesRange:()=>lQ,fetchReleaseNotes:()=>sL,compareSemver:()=>tX,checkLatestVersion:()=>wG,UPDATE_SCRIPT_URL:()=>eX,UPDATE_COMMAND:()=>hJ,PACKAGE_NAME:()=>dQ,CURRENT_VERSION:()=>s0});function aY(){let f=oX.repository?.url;if(!f)return null;let J=f.match(/github\.com[:/]([^/]+)\/([^/.]+)/);if(!J||!J[1]||!J[2])return null;return`${J[1]}/${J[2]}`}function iQ(){return`npm install -g ${dQ}@latest`}async function oL(f){let J=new AbortController,Y=setTimeout(()=>J.abort(),fZ);try{let z=f.replace("/","%2F"),G=await fetch(`https://registry.npmjs.org/${z}/latest`,{signal:J.signal,headers:{accept:"application/json"}});if(!G.ok)return null;let X=await G.json();if(typeof X.version!=="string")return null;return X.version}catch{return null}finally{clearTimeout(Y)}}function nQ(f,J){return tX(f,J)>0}function tX(f,J){let Y=(X)=>X.split("-")[0]??X,z=Y(f).split(".").map((X)=>Number.parseInt(X,10)),G=Y(J).split(".").map((X)=>Number.parseInt(X,10));for(let X=0;X<3;X++){let q=z[X]??0,Q=G[X]??0;if(Number.isNaN(q)||Number.isNaN(Q))return 0;if(q>Q)return 1;if(q<Q)return-1}return 0}async function wG(f={}){let J=process.env.KOBE_FAKE_UPDATE;if(J)return{current:s0,latest:J,hasUpdate:nQ(J,s0)};if(z9()&&!f.force)return null;let Y=await oL(dQ);if(!Y)return null;return{current:s0,latest:Y,hasUpdate:nQ(Y,s0)}}function Z9(f){if(typeof f!=="string")return null;return f.match(/^v(\d+\.\d+\.\d+)$/)?.[1]??null}async function sL(f){let J=aY();if(!J)return null;let Y=`v${f}`,z=new AbortController,G=setTimeout(()=>z.abort(),fZ);try{let X=await fetch(`https://api.github.com/repos/${J}/releases/tags/${Y}`,{signal:z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!X.ok)return null;let q=await X.json();if(typeof q.body!=="string"||typeof q.html_url!=="string")return null;return{body:q.body,url:q.html_url,version:f}}catch{return null}finally{clearTimeout(G)}}async function lQ(f){let J=aY();if(!J)return[];let Y=f.limit??100,z=new AbortController,G=setTimeout(()=>z.abort(),fZ);try{let X=await fetch(`https://api.github.com/repos/${J}/releases?per_page=${Y}`,{signal:z.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!X.ok)return[];let q=await X.json();if(!Array.isArray(q))return[];return q.map((Q)=>{let H=Z9(Q.tag_name);if(!H||typeof Q.html_url!=="string"||typeof Q.body!=="string")return null;if(tX(H,f.current)<=0)return null;if(tX(H,f.latest)>0)return null;return{version:H,url:Q.html_url,body:Q.body}}).filter((Q)=>Q!==null)}catch{return[]}finally{clearTimeout(G)}}async function tL(f=12){let J=aY();if(!J)return[];let Y=new AbortController,z=setTimeout(()=>Y.abort(),fZ);try{let G=await fetch(`https://api.github.com/repos/${J}/releases?per_page=${f}`,{signal:Y.signal,headers:{accept:"application/vnd.github+json","x-github-api-version":"2022-11-28"}});if(!G.ok)return[];let X=await G.json();if(!Array.isArray(X))return[];return X.map((q)=>{let Q=Z9(q.tag_name);if(!Q||typeof q.html_url!=="string")return null;return{version:Q,url:q.html_url}}).filter((q)=>q!==null)}catch{return[]}finally{clearTimeout(z)}}function aQ(f){let J=aY();if(!J)return null;return`https://github.com/${J}/releases/tag/v${f}`}var s0,dQ,eX="https://raw.githubusercontent.com/Sma1lboy/kobe/main/scripts/update.sh",hJ,fZ=3000;var U1=k(()=>{J9();lf();s0=oX.version,dQ=oX.name;hJ=`curl -fsSL ${eX} | sh`});import{spawn as eL,spawnSync as fM}from"child_process";import{existsSync as H9}from"fs";import{mkdir as JM,readFile as YM,readdir as zM}from"fs/promises";function $Y(f){return`'${f.replace(/'/g,"'\\''")}'`}function GM(f){return/^[A-Za-z0-9_@%+=:,./-]+$/.test(f)?f:$Y(f)}function j9(f){return f.map($Y).join(" ")}function XM(f,J){let Y=j9(f);return J?`cd ${$Y(J)} && ${Y}`:Y}function ZM(f){if(!f)return"";let J=Object.entries(f).filter(([Y])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(Y));if(J.length===0)return"";return`${J.map(([Y,z])=>`${Y}=${$Y(z)}`).join(" ")} `}function hG(f,J={}){let Y=["ssh"];if(J.tty)Y.push("-tt");if(J.batch)Y.push("-o","BatchMode=yes");if(Y.push("-o","ControlMaster=auto","-o",`ControlPath=${f.controlPath}`,"-o","ControlPersist=300"),Y.push("-o","StrictHostKeyChecking=accept-new"),f.port)Y.push("-p",String(f.port));if(f.auth.kind==="key"&&f.auth.keyPath)Y.push("-i",f.auth.keyPath);return Y.push(`${f.user}@${f.host}`),Y}function W9(f,J={}){return new Promise((Y)=>{let[z,...G]=f,X="",q="",Q=!1,H=(V)=>{if(Q)return;Q=!0,Y({stdout:X,stderr:q,exitCode:V})},B;try{B=eL(z??"",G,{cwd:J.cwd,env:J.env,shell:!1,signal:J.signal})}catch{H(-1);return}B.stdout?.setEncoding("utf8"),B.stdout?.on("data",(V)=>{X+=V}),B.stderr?.setEncoding("utf8"),B.stderr?.on("data",(V)=>{q+=V}),B.on("error",()=>H(-1)),B.on("close",(V)=>H(V??-1))})}class JZ{isRemote=!1;run(f,J={}){return W9(f,{cwd:J.cwd,env:J.env?{...process.env,...J.env}:process.env,signal:J.signal})}async exists(f){return H9(f)}existsSync(f){return H9(f)}async mkdirp(f){await JM(f,{recursive:!0})}async readFile(f){try{return await YM(f,"utf8")}catch{return null}}async readdir(f){try{return await zM(f)}catch{return[]}}wrapCommand(f){return f}ensureReady(){}}class uz{spec;spawn;isRemote=!0;masterUp=!1;spawnAsync;constructor(f,J=B9,Y){this.spec=f;this.spawn=J;this.spawnAsync=Y??(this.spawn===B9?qM:async(z,G)=>this.spawn(z,G))}ensureReady(){if(this.masterUp)return;if(this.spawn([...hG(this.spec,{batch:!0}),"-O","check"]).exitCode===0){this.masterUp=!0;return}let J=[...hG(this.spec,{batch:this.spec.auth.kind!=="password"}),"-fN"];if(this.spec.auth.kind==="password"){let Y=this.spec.auth.getPassword();if(Y!=null){this.spawn(["sshpass","-e",...J],{SSHPASS:Y}),this.masterUp=!0;return}}this.spawn(J),this.masterUp=!0}async run(f,J={}){this.ensureReady();let Y=`${ZM(J.env)}${j9(f)}`,z=J.cwd?`cd ${$Y(J.cwd)} && ${Y}`:Y;return this.spawnAsync([...hG(this.spec,{batch:!0}),z],void 0,{signal:J.signal})}async exists(f){return(await this.run(["test","-e",f])).exitCode===0}existsSync(f){return this.ensureReady(),this.spawn([...hG(this.spec,{batch:!0}),XM(["test","-e",f])]).exitCode===0}async mkdirp(f){await this.run(["mkdir","-p",f])}async readFile(f){let J=await this.run(["cat",f]);return J.exitCode===0?J.stdout:null}async readdir(f){let J=await this.run(["ls","-1A",f]);if(J.exitCode!==0)return[];return J.stdout.split(`
|
|
4
|
+
`).filter((Y)=>Y.length>0)}wrapCommand(f,J={}){let Y=J.cwd?`cd ${$Y(J.cwd)} && ${f}`:f;return`${hG(this.spec,{tty:J.tty}).map(GM).join(" ")} ${$Y(Y)}`}}var B9=(f,J)=>{let[Y,...z]=f,G=fM(Y??"",z,{env:J?{...process.env,...J}:process.env,encoding:"utf8",shell:!1});return{stdout:G.stdout??"",stderr:G.stderr??"",exitCode:G.status??-1}},qM=(f,J,Y)=>W9(f,{env:J?{...process.env,...J}:process.env,signal:Y?.signal});var $Q=()=>{};import{spawnSync as QM}from"child_process";import{platform as HM}from"os";function V9(f,J,Y){return{service:BM,account:Y?`${J}@${f}:${Y}`:`${J}@${f}`}}function pQ(f=rQ){return f.platform()==="darwin"}function K9(f,J,Y=rQ){if(Y.platform()!=="darwin")return!1;let{exitCode:z}=Y.run(["security","add-generic-password","-U","-s",f.service,"-a",f.account,"-w",J]);return z===0}function YZ(f,J=rQ){if(J.platform()!=="darwin")return null;let{stdout:Y,exitCode:z}=J.run(["security","find-generic-password","-s",f.service,"-a",f.account,"-w"]);if(z!==0)return null;return Y.replace(/\n$/,"")}var rQ,BM="kobe-remote-ssh";var _Q=k(()=>{rQ={run(f){let[J,...Y]=f,z=QM(J??"",Y,{encoding:"utf8",shell:!1});return{stdout:z.stdout??"",exitCode:z.status??-1}},platform(){return HM()}}});import{mkdirSync as jM,readFileSync as WM,renameSync as VM,writeFileSync as KM}from"fs";import{dirname as UM}from"path";function nf(){try{let f=WM(m1(),"utf8"),J=JSON.parse(f);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return{}}function U9(f){let J=m1();jM(UM(J),{recursive:!0});let Y=`${J}.tmp`;KM(Y,JSON.stringify(f,null,2),"utf8"),VM(Y,J)}function Ez(f){let J=nf();if(f(J)!==!1)U9(J);return J}function rY(f){return Ez((J)=>{for(let[Y,z]of Object.entries(f))if(z===void 0)delete J[Y];else J[Y]=z;return})}function D9(f){U9(f)}var pY=k(()=>{lf()});var qY={};jf(qY,{statePath:()=>LM,setRepoInitOverride:()=>MM,setPersistedString:()=>af,resolveRepoRoot:()=>PJ,resolveMainRepoRoot:()=>DM,removeSavedRepo:()=>FM,remoteRepoKey:()=>A9,normalizeSavedRepos:()=>sQ,isRemoteRepoKey:()=>D1,isRemoteProjectsEnabled:()=>eQ,getSavedRepos:()=>c1,getRepoInitOverride:()=>tQ,getRemoteRepos:()=>JH,getRemoteRepoConfig:()=>mJ,getPersistedString:()=>kf,getCustomEngineIds:()=>oQ,addSavedRepo:()=>vJ,addRemoteRepo:()=>YH});import{spawnSync as M9}from"child_process";import{realpathSync as L9}from"fs";function PJ(f){if(D1(f))return f;let J=M9("git",["rev-parse","--show-toplevel"],{cwd:f,encoding:"utf8",shell:!1});if(J.status!==0)return f;let Y=(J.stdout??"").trim();if(!Y)return f;try{if(L9(f)===L9(Y))return f}catch{}return Y}function DM(f){if(D1(f))return f;let J=M9("git",["worktree","list","--porcelain"],{cwd:f,encoding:"utf8",shell:!1});if(J.status!==0)return PJ(f);return(J.stdout??"").split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim()||PJ(f)}function LM(){return m1()}function zZ(f){let J=f.savedRepos;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string")}function c1(){return zZ(nf())}function kf(f){let J=nf()[f];return typeof J==="string"?J:void 0}function af(f,J){rY({[f]:J})}function oQ(){let f=nf().customEngineIds;if(!Array.isArray(f))return[];return f.filter((J)=>typeof J==="string"&&J.trim().length>0)}function vJ(f){let J=PJ(f),Y={added:!1,path:J,total:0};return Ez((z)=>{let G=zZ(z);if(G.includes(J))return Y={added:!1,path:J,total:G.length},!1;z.savedRepos=[...G,J],Y={added:!0,path:J,total:G.length+1};return}),Y}function sQ(){let f=c1(),J=new Set,Y=[],z=!1;for(let G of f){let X=PJ(G);if(X!==G)z=!0;if(J.has(X)){z=!0;continue}J.add(X),Y.push(X)}if(!z)return;rY({savedRepos:Y})}function F9(f){let J=f.repoConfigs;if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function O9(f){if(!f||typeof f!=="object")return{};let J=f;return{initScript:typeof J.initScript==="string"&&J.initScript.length>0?J.initScript:void 0,initPrompt:typeof J.initPrompt==="string"&&J.initPrompt.length>0?J.initPrompt:void 0}}function tQ(f){return O9(F9(nf())[PJ(f)])}function MM(f,J){let Y=PJ(f),z={};return Ez((G)=>{let X={...F9(G)},q=O9(X[Y]),Q=J.initScript===void 0?q.initScript:J.initScript||void 0,H=J.initPrompt===void 0?q.initPrompt:J.initPrompt||void 0;if(z={...Q?{initScript:Q}:{},...H?{initPrompt:H}:{}},!z.initScript&&!z.initPrompt){let{[Y]:B,...V}=X;G.repoConfigs=V}else X[Y]=z,G.repoConfigs=X;return}),z}function FM(f){let J={removed:!1,path:f,total:0};return Ez((Y)=>{let z=zZ(Y);if(!z.includes(f))return J={removed:!1,path:f,total:z.length},!1;Y.savedRepos=z.filter((G)=>G!==f),J={removed:!0,path:f,total:z.length-1};return}),J}function D1(f){return f.startsWith("ssh://")}function eQ(){return nf()["experimental.remoteProjects"]===!0}function A9(f,J,Y){return Y?`ssh://${J}@${f}:${Y}`:`ssh://${J}@${f}`}function fH(f){let J=f.remoteRepos;if(!J||typeof J!=="object"||Array.isArray(J))return{};return J}function mJ(f){return fH(nf())[f]??null}function JH(){return fH(nf())}function YH(f){let J=A9(f.host,f.user,f.port),Y=!1;return Ez((z)=>{let G={...fH(z)};G[J]=f,z.remoteRepos=G;let X=zZ(z);if(Y=!X.includes(J),Y)z.savedRepos=[...X,J];return}),{key:J,added:Y}}var gf=k(()=>{lf();pY()});var C9={};jf(C9,{runAddRemote:()=>gM,parseRemoteFlags:()=>R9});import{createInterface as OM}from"readline";function R9(f){let J={};for(let Y=0;Y<f.length;Y++){let z=f[Y];switch(z){case"--host":J.host=f[++Y];break;case"--user":J.user=f[++Y];break;case"--path":J.path=f[++Y];break;case"--port":{let G=Number(f[++Y]);if(!Number.isInteger(G)||G<=0)t1(`invalid --port "${f[Y]}"`);J.port=G;break}case"--key":{let G=f[Y+1];if(G&&!G.startsWith("-"))J.key={present:!0,path:G},Y++;else J.key={present:!0};break}case"--password":J.password=!0;break;case"--help":case"-h":process.stdout.write(g9),process.exit(0);break;default:t1(`unknown flag "${z}"`)}}return J}function t1(f){process.stderr.write(`kobe add --remote: ${f}
|
|
5
5
|
|
|
6
|
-
${
|
|
7
|
-
`),
|
|
6
|
+
${g9}`),process.exit(2)}async function AM(f){let J=OM({input:process.stdin,output:process.stdout,terminal:!0}),Y=process.stdout,z=!1,G=Y._writeToOutput?.bind(Y);return Y._writeToOutput=(X)=>{if(!z||!G)process.stdout.write(X)},process.stdout.write(f),z=!0,new Promise((X)=>{J.question("",(q)=>{if(z=!1,G)Y._writeToOutput=G;process.stdout.write(`
|
|
7
|
+
`),J.close(),X(q)})})}async function gM(f){if(!eQ())t1("remote projects are experimental and disabled \u2014 enable Settings \u2192 Dev \u2192 Experimental \u2192 Remote projects first");let J=R9(f);if(!J.host)t1("--host is required");if(!J.user)t1("--user is required");if(!J.path)t1("--path (remote base path) is required");if(J.key&&J.password)t1("choose ONE of --key or --password, not both");if(!J.key&&!J.password)t1("an auth method is required: --key [path] or --password");let Y;if(J.password){if(!pQ())t1("--password needs the macOS keychain (unsupported on this platform)");let X=V9(J.host,J.user,J.port),q=await AM(`Password for ${J.user}@${J.host}: `);if(q.length===0)t1("empty password");if(!K9(X,q))t1("failed to store the password in the keychain");Y={kind:"password",keychainRef:X}}else Y={kind:"key",keyPath:J.key?.path};let{key:z,added:G}=YH({host:J.host,user:J.user,port:J.port,basePath:J.path,auth:Y});console.log(G?`added remote project ${z} (base ${J.path})`:`updated remote project ${z} (base ${J.path})`),await RM(J,Y)}async function RM(f,J){if(J.kind==="password"&&!pQ())return;let Y=J.kind==="key"?{kind:"key",keyPath:J.keyPath}:{kind:"password",getPassword:()=>YZ(J.keychainRef)},z={host:f.host,user:f.user,port:f.port,auth:Y,controlPath:sX(f.host,f.user,f.port)};process.stdout.write("checking connection\u2026 ");try{if((await new uz(z).run(["test","-d",f.path])).exitCode===0)console.log("ok");else console.log(`reachable, but base path "${f.path}" is not a directory (you can create it later)`)}catch(G){console.log(`could not connect (${G instanceof Error?G.message:String(G)})`),console.log("the project is saved; fix the host/credentials and it will connect on first use.")}}var g9;var k9=k(()=>{lf();$Q();_Q();gf();g9=`Usage: kobe add --remote --host <host> --user <user> --path <basePath>
|
|
8
8
|
[--port N] [--key [path] | --password]
|
|
9
9
|
|
|
10
10
|
Register an SSH-backed project. Worktrees + the engine run on <host> under
|
|
11
11
|
<basePath>. Choose ONE auth: --key [path] (ssh-agent when path omitted) or
|
|
12
12
|
`+`--password (prompted, stored in the OS keychain \u2014 never in state.json).
|
|
13
|
-
`});function
|
|
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 N9(f){return typeof f==="string"&&CM.includes(f)}var PG=(f)=>f,Sf="claude",CM;var S1=k(()=>{CM=["backlog","in_progress","in_review","done","canceled","error"]});function kM(f,J){let Y="",z=f;for(let G=J-1;G>=0;G--){let X=z%32;Y="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[X]+Y,z=(z-X)/32}return Y}function S9(f){let J=new Uint8Array(f);crypto.getRandomValues(J);let Y=Array(f);for(let z=0;z<f;z++)Y[z]=(J[z]??0)&31;return Y}function NM(f){for(let J=f.length-1;J>=0;J--){let Y=f[J]??0;if(Y<31)return f[J]=Y+1,!0;f[J]=0}return!1}function yM(f){let J="";for(let Y of f)J+="0123456789ABCDEFGHJKMNPQRSTVWXYZ"[Y]??"0";return J}function I9(f=Date.now()){let J;if(f===y9){let Y=b9.slice();if(!NM(Y))J=S9(16);else J=Y}else J=S9(16);return y9=f,b9=J,kM(f,10)+yM(J)}var y9=-1,b9;var T9=k(()=>{b9=Array(16).fill(0)});var zH={};jf(zH,{TaskIndexStore:()=>xz});import{mkdir as bM,open as SM,readFile as IM,rename as TM,unlink as u9}from"fs/promises";import{homedir as uM}from"os";import{dirname as EM,join as E9}from"path";class xz{homeDir;kobeDir;path;tmpPath;cache={version:QY,tasks:[]};loaded=!1;listeners=new Set;saveChain=Promise.resolve();constructor(f={}){this.homeDir=f.homeDir??uM(),this.kobeDir=E9(this.homeDir,".kobe"),this.path=E9(this.kobeDir,"tasks.json"),this.tmpPath=`${this.path}.tmp`}subscribe(f){if(this.listeners.add(f),this.loaded)try{f(this.cache.tasks.slice())}catch(J){console.error("[kobe TaskIndexStore] listener threw on subscribe:",J)}return()=>{this.listeners.delete(f)}}get filePath(){return this.path}get stateDir(){return this.kobeDir}async load(){let f;try{f=await IM(this.path,"utf8")}catch(Y){if(Y.code==="ENOENT")return this.cache={version:QY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot();throw Y}let J;try{J=JSON.parse(f)}catch(Y){return console.warn(`[kobe] tasks.json at ${this.path} is corrupted (${Y.message}); recovering with empty index. The stale file is left in place.`),this.cache={version:QY,tasks:[]},this.loaded=!0,this.notifyListeners(),this.snapshot()}return this.cache=xM(J,this.path),this.loaded=!0,this.notifyListeners(),this.snapshot()}async save(){this.assertLoaded();let f=this.saveChain.then(()=>this.doSave());return this.saveChain=f.catch(()=>{}),f}async doSave(){await bM(EM(this.path),{recursive:!0});let f=this.snapshot(),J=`${JSON.stringify(f,null,2)}
|
|
14
|
+
`,Y=await SM(this.tmpPath,"w",420);try{await Y.writeFile(J,"utf8"),await Y.sync()}finally{await Y.close()}await TM(this.tmpPath,this.path)}get(f){return this.assertLoaded(),this.cache.tasks.find((J)=>J.id===f)}list(){return this.assertLoaded(),this.cache.tasks.slice()}async create(f){this.assertLoaded();let J=new Date().toISOString(),Y={archived:!1,vendor:f.vendor??Sf,...f,id:PG(I9()),createdAt:J,updatedAt:J};return this.cache.tasks.push(Y),await this.save(),this.notifyListeners(),Y}async update(f,J){this.assertLoaded();let Y=this.cache.tasks.findIndex((H)=>H.id===f);if(Y<0)throw Error(`task not found: ${f}`);let z=this.cache.tasks[Y];if(!z)throw Error(`task not found: ${f}`);let{id:G,createdAt:X,...q}=J,Q={...z,...q,id:z.id,createdAt:z.createdAt,updatedAt:new Date().toISOString()};return this.cache.tasks[Y]=Q,await this.save(),this.notifyListeners(),Q}async move(f,J,Y){this.assertLoaded();let z=this.cache.tasks.find((L)=>L.id===f);if(!z)throw Error(`task not found: ${f}`);let G=Y?.length?Y:this.cache.tasks.map((L)=>L.id),X=G.indexOf(String(f));if(X<0)throw Error(`task not movable in current group: ${f}`);let q=G[X+J];if(!q)return z;let Q=this.cache.tasks.findIndex((L)=>L.id===f),H=this.cache.tasks.findIndex((L)=>L.id===q);if(Q<0||H<0||Q===H)return z;let[B]=this.cache.tasks.splice(Q,1);if(!B)return z;let V=Q<H?H-1:H,j=J>0?V+1:V,U={...B,updatedAt:new Date().toISOString()};return this.cache.tasks.splice(j,0,U),await this.save(),this.notifyListeners(),U}async reorder(f){this.assertLoaded();let J=f.map((G)=>{let X=this.cache.tasks.findIndex((Q)=>Q.id===G.id);if(!(X>=0?this.cache.tasks[X]:void 0))throw Error(`task not found: ${G.id}`);return{idx:X,position:G.position}}),Y=!1,z=new Map;for(let{idx:G,position:X}of J){let q=this.cache.tasks[G];if(!q||q.position===X)continue;if(!z.has(G))z.set(G,q);this.cache.tasks[G]={...q,position:X},Y=!0}if(!Y)return;try{await this.save()}catch(G){for(let[X,q]of z)this.cache.tasks[X]=q;throw G}this.notifyListeners()}async archive(f,J="done"){return this.update(f,{status:J})}async remove(f){this.assertLoaded();let J=this.cache.tasks.findIndex((Y)=>Y.id===f);if(J<0)return;this.cache.tasks.splice(J,1),await this.save(),this.notifyListeners()}async _unlinkForTests(){try{await u9(this.path)}catch(f){if(f.code!=="ENOENT")throw f}try{await u9(this.tmpPath)}catch(f){if(f.code!=="ENOENT")throw f}this.cache={version:QY,tasks:[]},this.loaded=!1}assertLoaded(){if(!this.loaded)throw Error("TaskIndexStore: call load() before any other method")}snapshot(){return{version:QY,tasks:this.cache.tasks.slice()}}notifyListeners(){if(this.listeners.size===0)return;let f=this.cache.tasks.slice();for(let J of this.listeners)try{J(f)}catch(Y){console.error("[kobe TaskIndexStore] listener threw on notify:",Y)}}}function xM(f,J){if(!f||typeof f!=="object"||Array.isArray(f))return console.warn(`[kobe] tasks.json at ${J} is not an object; recovering with empty index.`),{version:QY,tasks:[]};let Y=f,z=Y.version;if(z!==void 0&&z!==1&&z!==2&&z!==3)return console.warn(`[kobe] tasks.json at ${J} has unsupported version=${String(z)}; recovering with empty index.`),{version:QY,tasks:[]};let G=Array.isArray(Y.tasks)?Y.tasks:[],X=[];for(let q of G){let Q=wM(q);if(Q)X.push(Q);else console.warn(`[kobe] dropping malformed task entry from ${J}: ${JSON.stringify(q)}`)}return{version:QY,tasks:X}}function wM(f){if(!f||typeof f!=="object")return null;let J=f;if(typeof J.id!=="string"||typeof J.title!=="string"||typeof J.repo!=="string"||typeof J.branch!=="string"||typeof J.worktreePath!=="string"||typeof J.status!=="string"||typeof J.createdAt!=="string"||typeof J.updatedAt!=="string")return null;if(!cM(J.status))return null;let Y=typeof J.archived==="boolean"?J.archived:!1,z=J.kind==="main"?"main":"task",G=z==="main"?J.status==="in_progress"||J.status==="done"?"backlog":J.status:J.status==="done"&&!Y?"in_progress":J.status;return{id:PG(J.id),title:J.title,repo:J.repo,branch:J.branch,worktreePath:J.worktreePath,status:G,archived:Y,pinned:typeof J.pinned==="boolean"?J.pinned:!1,kind:z,vendor:iY(typeof J.vendor==="string"?J.vendor:void 0),prStatus:hM(J.prStatus),...typeof J.position==="number"&&Number.isFinite(J.position)?{position:J.position}:{},...typeof J.modelEffort==="string"&&J.modelEffort.length>0?{modelEffort:J.modelEffort}:{},createdAt:J.createdAt,updatedAt:J.updatedAt}}function hM(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let J=f;if(!PM(J.provider)||!vM(J.lifecycle)||!mM(J.checkState))return;return{provider:J.provider,lifecycle:J.lifecycle,checkState:J.checkState,...typeof J.number==="number"&&Number.isFinite(J.number)?{number:J.number}:{},...typeof J.url==="string"?{url:J.url}:{},...typeof J.title==="string"?{title:J.title}:{},...typeof J.baseRef==="string"?{baseRef:J.baseRef}:{},...typeof J.headRef==="string"?{headRef:J.headRef}:{},...typeof J.reviewDecision==="string"?{reviewDecision:J.reviewDecision}:{},...typeof J.mergeable==="string"?{mergeable:J.mergeable}:{},...typeof J.lastCheckedAt==="string"?{lastCheckedAt:J.lastCheckedAt}:{},...typeof J.lastError==="string"?{lastError:J.lastError}:{}}}function PM(f){return f==="github"||f==="gitlab"||f==="bitbucket"||f==="unknown"}function vM(f){return f==="creating"||f==="open"||f==="ready_to_merge"||f==="merged"||f==="closed"||f==="unknown"}function mM(f){return f==="none"||f==="pending"||f==="passing"||f==="failing"||f==="unknown"}function cM(f){return f==="backlog"||f==="in_progress"||f==="in_review"||f==="done"||f==="canceled"||f==="error"}var QY=3;var vG=k(()=>{S1();K1();T9()});function x9(f){let J=f.auth,Y=J.kind==="key"?{kind:"key",keyPath:J.keyPath}:{kind:"password",getPassword:()=>YZ(J.keychainRef)};return{host:f.host,user:f.user,port:f.port,auth:Y,controlPath:sX(f.host,f.user,f.port)}}function wz(f){let J=mJ(f);if(!J)return new JZ;return new uz(x9(J))}function cJ(f){for(let J of Object.values(JH()))if(f===J.basePath||f.startsWith(`${J.basePath}/`))return new uz(x9(J));return new JZ}function w9(f){return f&&D1(f)?f:void 0}function GZ(f){let J=cJ(f);return J.isRemote||J.existsSync(f)}function If(f){return cJ(f).isRemote?OJ():f}var e1=k(()=>{lf();gf();$Q();_Q()});var XZ;var h9=k(()=>{XZ=class XZ extends Error{args;cwd;exitCode;stdout;stderr;constructor(f,J,Y){super(`git ${f.join(" ")} (cwd=${J}) exited with code ${Y.exitCode}: ${Y.stderr.trim()||Y.stdout.trim()}`);this.name="GitCommandError",this.args=f,this.cwd=J,this.exitCode=Y.exitCode,this.stdout=Y.stdout,this.stderr=Y.stderr}}});import{createHash as nM}from"crypto";import v9 from"fs";import I1 from"path";function m9(f){if(!I1.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return I1.join(ef(),dM,rM(f))}function c9(f){if(!I1.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[m9(f),...aM.map((J)=>I1.join(f,J))]}function n9(f,J){if(!J||/[/\\\0]/.test(J))throw Error(`worktreePathFor: invalid slug: ${JSON.stringify(J)}`);return I1.join(m9(f),J)}async function d9(f){if(D1(f)){let Y=mJ(f)?.basePath;if(!Y)return[];return wz(f).readdir(l9(Y))}let J=new Set;for(let Y of c9(f))try{for(let z of v9.readdirSync(Y,{withFileTypes:!0}))if(z.isDirectory())J.add(z.name)}catch{}return[...J]}function GH(f,J){if(!I1.isAbsolute(f)||!I1.isAbsolute(J))return null;let Y=P9(J);for(let z of c9(f)){let G=P9(z),X=I1.relative(G,Y);if(X!==""&&!X.startsWith("..")&&!I1.isAbsolute(X))return z}return null}function i9(f,J){return GH(f,J)!==null}function l9(f){return`${$M(f)}/.kobe/worktrees`}function a9(f,J){if(!J||/[/\\\0]/.test(J))throw Error(`remoteWorktreePathFor: invalid slug: ${JSON.stringify(J)}`);return`${l9(f)}/${J}`}function $M(f){return f.length>1&&f.endsWith("/")?f.replace(/\/+$/,""):f}function P9(f){try{return v9.realpathSync(f)}catch{return I1.resolve(f)}}function rM(f){let Y=(I1.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=nM("sha1").update(I1.resolve(f)).digest("hex").slice(0,12);return`${Y}-${z}`}var dM="worktrees",iM=".kobe/worktrees",lM=".claude/worktrees",aM;var XH=k(()=>{lf();e1();gf();aM=[iM,lM]});var p9={};jf(p9,{GitWorktreeManager:()=>ZZ});import r9 from"fs";import fJ from"path";class ZZ{execDeps;constructor(f=pM){this.execDeps=f}ctxFor(f){let J=this.execDeps.remoteBasePath(f);return J?{exec:this.execDeps.execForRepo(f),dir:J,remote:!0}:{exec:this.execDeps.execForRepo(f),dir:f,remote:!1}}async runGit(f,J,Y){if(!Y.cwd)throw Error("runGit(): cwd is required; refusing to inherit from process.cwd()");let z=await f.run(["git",...J],{cwd:Y.cwd,env:Y.env}),G={stdout:z.stdout,stderr:z.stderr,exitCode:z.exitCode};if(G.exitCode!==0&&!Y.allowFail)throw new XZ(J,Y.cwd,G);return G}async create(f,J,Y,z){let G=this.ctxFor(f);if(HY("repo",G.dir),HY("path",Y),!J)throw Error("create(): branch must be a non-empty string");if(await G.exec.exists(Y)){let H=await this.tryDescribe(G,Y);if(H){if(H.branch!==J)throw Error(`worktree at ${Y} is on branch '${H.branch}', refusing to hijack to '${J}'`);return H}throw Error(`create(): ${Y} exists but is not a registered git worktree`)}await G.exec.mkdirp(fJ.dirname(Y));let q=await this.branchExists(G,J)?["worktree","add",Y,J]:z?["worktree","add","-b",J,Y,z]:["worktree","add","-b",J,Y];await this.runGit(G.exec,q,{cwd:G.dir});let Q=await this.tryDescribe(G,Y);if(!Q)throw Error(`create(): git reported success but ${Y} is not a worktree`);if(Q.branch!==J)throw Error(`create(): post-condition failed \u2014 expected branch '${J}' at ${Y}, got '${Q.branch}'`);return Q}async createForTask(f){let J=this.execDeps.remoteBasePath(f.repo),Y=J?a9(J,f.slug):n9(f.repo,f.slug);return this.create(f.repo,f.branch,Y,f.baseRef)}async remove(f,J){HY("path",f);let Y=this.execDeps.execForPath(f),z=J?.force===!0;if(!await Y.exists(f)){let q=await this.findRepoFor(Y,f);if(q)await this.runGit(Y,["worktree","prune"],{cwd:q,allowFail:!0});return}let G=await this.findRepoFor(Y,f);if(!G)throw Error(`remove(): ${f} is not a git worktree`);if(!z){if(await this.isDirty(f))throw Error(`remove(): refusing to remove dirty worktree at ${f} (pass { force: true } to override)`)}let X=z?["worktree","remove","--force",f]:["worktree","remove",f];await this.runGit(Y,X,{cwd:G}),await this.runGit(Y,["worktree","prune"],{cwd:G,allowFail:!0})}async list(f){let J=this.ctxFor(f);HY("repo",J.dir);let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),z=ZH(Y.stdout),G=[];for(let X of z){if(!X.path)continue;let q=J.remote?$9(J.dir,X.path):GH(f,X.path);if(!q)continue;if(!X.branch||X.detached)continue;let Q=mG(q),H=mG(X.path),B=fJ.relative(Q,H),V=fJ.join(q,B),j=await this.isDirty(X.path);G.push({path:V,branch:X.branch,head:X.head??"",dirty:j})}return G}async listAll(f){let J=this.ctxFor(f);HY("repo",J.dir);let Y=await this.runGit(J.exec,["worktree","list","--porcelain"],{cwd:J.dir}),z=ZH(Y.stdout),G=J.remote?J.dir:mG(J.dir),X=[];for(let q of z){if(!q.path)continue;if(q.bare)continue;if(!q.branch||q.detached)continue;if((J.remote?q.path:mG(q.path))===G)continue;let Q=await this.isDirty(q.path);X.push({path:q.path,branch:q.branch,head:q.head??"",dirty:Q,kobeManaged:J.remote?$9(J.dir,q.path)!==null:i9(f,q.path),lastActivityMs:await this.lastActivityMs(J.exec,q.path)})}return X.sort((q,Q)=>Q.lastActivityMs-q.lastActivityMs),X}async lastActivityMs(f,J){try{let Y=await this.runGit(f,["log","-1","--format=%ct"],{cwd:J}),z=Number.parseInt(Y.stdout.trim(),10);if(Number.isFinite(z)&&z>0)return z*1000}catch{}if(!f.isRemote)try{return r9.statSync(J).mtimeMs}catch{}return 0}async isDirty(f){HY("path",f);let J=this.execDeps.execForPath(f);return(await this.runGit(J,["status","--porcelain"],{cwd:f})).stdout.length>0}async currentBranch(f){HY("path",f);let J=this.execDeps.execForPath(f),z=(await this.runGit(J,["rev-parse","--abbrev-ref","HEAD"],{cwd:f})).stdout.trim();if(!z||z==="HEAD")throw Error(`currentBranch(): ${f} is in detached-HEAD state`);return z}async renameBranch(f,J,Y){if(HY("path",f),J===Y)return;let z=this.execDeps.execForPath(f),G=await this.findRepoFor(z,f);if(!G)throw Error(`renameBranch(): ${f} is not a git worktree`);await this.runGit(z,["branch","-m",J,Y],{cwd:G})}async tryDescribe(f,J){let Y=await this.runGit(f.exec,["worktree","list","--porcelain"],{cwd:f.dir}),z=ZH(Y.stdout),G=(Q)=>f.remote?Q:mG(Q),X=G(J),q=z.find((Q)=>Q.path&&G(Q.path)===X);if(!q||!q.path||!q.branch||q.detached)return null;return{path:J,branch:q.branch,head:q.head??"",dirty:await this.isDirty(q.path)}}async branchExists(f,J){let Y=`refs/heads/${J}`;return(await this.runGit(f.exec,["show-ref","--verify","--quiet",Y],{cwd:f.dir,allowFail:!0})).exitCode===0}async findRepoFor(f,J){try{let Y=await this.runGit(f,["rev-parse","--git-common-dir"],{cwd:J,allowFail:!0});if(Y.exitCode!==0)return null;let z=Y.stdout.trim();if(!z)return null;let G=fJ.isAbsolute(z)?z:fJ.resolve(J,z);return fJ.basename(G)===".git"?fJ.dirname(G):G}catch(Y){if(Y instanceof XZ)return null;throw Y}}}function ZH(f){let J=[],Y=null;for(let z of f.split(`
|
|
15
|
+
`)){let G=z.replace(/\r$/,"");if(G===""){if(Y)J.push(Y);Y=null;continue}if(!Y)Y={};if(G.startsWith("worktree "))Y.path=G.slice(9);else if(G.startsWith("HEAD "))Y.head=G.slice(5);else if(G.startsWith("branch ")){let X=G.slice(7);Y.branch=X.startsWith("refs/heads/")?X.slice(11):X}else if(G==="detached")Y.detached=!0;else if(G==="bare")Y.bare=!0}if(Y)J.push(Y);return J}function $9(f,J){let Y=`${f.replace(/\/+$/,"")}/.kobe/worktrees`;return J===Y||J.startsWith(`${Y}/`)?Y:null}function HY(f,J){if(!J||!fJ.isAbsolute(J))throw Error(`${f} must be an absolute path, got: ${JSON.stringify(J)}`)}function mG(f){try{return r9.realpathSync(f)}catch{return fJ.resolve(f)}}var pM;var qH=k(()=>{e1();gf();h9();XH();pM={execForRepo:wz,execForPath:cJ,remoteBasePath(f){return mJ(f)?.basePath??null}}});function _9(f){let J=String(f),Y=J.length-1;return hf.context.id+(Y?String.fromCharCode(96+Y):"")+J}function BH(f){hf.context=f}function _M(){return{...hf.context,id:hf.getNextContextId(),count:0}}function _Y(f,J){let Y=Kf,z=e0,G=f.length===0,X=J===void 0?z:J,q=G?{owned:null,cleanups:null,context:null,owner:null}:{owned:null,cleanups:null,context:X?X.context:null,owner:X},Q=G?()=>f(()=>{throw Error("Dispose method must be an explicit argument to createRoot function")}):()=>f(()=>$f(()=>BY(q)));YJ.afterCreateOwner&&YJ.afterCreateOwner(q),e0=q,Kf=null;try{return F1(Q,!0)}finally{Kf=Y,e0=z}}function r(f,J){J=J?Object.assign({},HZ,J):HZ;let Y={value:f,observers:null,observerSlots:null,comparator:J.equals||void 0};{if(J.name)Y.name=J.name;if(J.internal)Y.internal=!0;else if(GW(Y),YJ.afterCreateSignal)YJ.afterCreateSignal(Y)}let z=(G)=>{if(typeof G==="function")if(j0&&j0.running&&j0.sources.has(Y))G=G(Y.tValue);else G=G(Y.value);return WH(Y,G)};return[XW.bind(Y),z]}function s9(f,J,Y){let z=iG(f,J,!0,T1,Y);if(Pz&&j0&&j0.running)df.push(z);else oY(z)}function AJ(f,J,Y){let z=iG(f,J,!1,T1,Y);if(Pz&&j0&&j0.running)df.push(z);else oY(z)}function zf(f,J,Y){zW=qF;let z=iG(f,J,!1,T1,Y),G=nG&&u1(nG);if(G)z.suspense=G;if(!Y||!Y.render)z.user=!0;H1?H1.push(z):oY(z)}function U0(f,J,Y){Y=Y?Object.assign({},HZ,Y):HZ;let z=iG(f,J,!0,0,Y);if(z.observers=null,z.observerSlots=null,z.comparator=Y.equals||void 0,Pz&&j0&&j0.running)z.tState=T1,df.push(z);else oY(z);return XW.bind(z)}function JF(f){return f&&typeof f==="object"&&"then"in f}function VZ(f,J,Y){let z,G,X;if(typeof J==="function")z=f,G=J,X=Y||{};else z=!0,G=f,X=J||{};let q=null,Q=QH,H=null,B=!1,V=!1,j="initialValue"in X,U=typeof z==="function"&&U0(z),L=new Set,[O,M]=(X.storage||r)(X.initialValue),[R,S]=r(void 0),[a,N]=r(void 0,{equals:!1}),[g,C]=r(j?"ready":"unresolved");if(hf.context){if(H=hf.getNextContextId(),X.ssrLoadFrom==="initial")Q=X.initialValue;else if(hf.load&&hf.has(H))Q=hf.load(H)}function y(T,Q0,p,D0){if(q===T){if(q=null,D0!==void 0&&(j=!0),(T===Q||Q0===Q)&&X.onHydrated)queueMicrotask(()=>X.onHydrated(D0,{value:Q0}));if(Q=QH,j0&&T&&B)j0.promises.delete(T),B=!1,F1(()=>{j0.running=!0,_(Q0,p)},!1);else _(Q0,p)}return Q0}function _(T,Q0){F1(()=>{if(Q0===void 0)M(()=>T);C(Q0!==void 0?"errored":j?"ready":"unresolved"),S(Q0);for(let p of L.keys())p.decrement();L.clear()},!1)}function z0(){let T=nG&&u1(nG),Q0=O(),p=R();if(p!==void 0&&!q)throw p;if(Kf&&!Kf.user&&T)s9(()=>{if(a(),q){if(T.resolved&&j0&&B)j0.promises.add(q);else if(!L.has(T))T.increment(),L.add(T)}});return Q0}function t(T=!0){if(T!==!1&&V)return;V=!1;let Q0=U?U():z;if(B=j0&&j0.running,Q0==null||Q0===!1){y(q,$f(O));return}if(j0&&q)j0.promises.delete(q);let p,D0=Q!==QH?Q:$f(()=>{try{return G(Q0,{value:O(),refetching:T})}catch(g0){p=g0}});if(p!==void 0){y(q,void 0,QZ(p),Q0);return}else if(!JF(D0))return y(q,D0,void 0,Q0),D0;if(q=D0,"v"in D0){if(D0.s===1)y(q,D0.v,void 0,Q0);else y(q,void 0,QZ(D0.v),Q0);return D0}return V=!0,queueMicrotask(()=>V=!1),F1(()=>{C(j?"refreshing":"pending"),N()},!1),D0.then((g0)=>y(D0,g0,void 0,Q0),(g0)=>y(D0,void 0,QZ(g0),Q0))}Object.defineProperties(z0,{state:{get:()=>g()},error:{get:()=>R()},loading:{get(){let T=g();return T==="pending"||T==="refreshing"}},latest:{get(){if(!j)return z0();let T=R();if(T&&!q)throw T;return O()}}});let Y0=e0;if(U)s9(()=>(Y0=e0,t(!1)));else t(!1);return[z0,{refetch:(T)=>YF(Y0,()=>t(T)),mutate:M}]}function KZ(f){return F1(f,!1)}function $f(f){if(!hz&&Kf===null)return f();let J=Kf;Kf=null;try{if(hz)return hz.untrack(f);return f()}finally{Kf=J}}function O1(f,J,Y){let z=Array.isArray(f),G,X=Y&&Y.defer;return(q)=>{let Q;if(z){Q=Array(f.length);for(let B=0;B<f.length;B++)Q[B]=f[B]()}else Q=f();if(X)return X=!1,q;let H=$f(()=>J(Q,G,q));return G=Q,H}}function f1(f){zf(()=>$f(f))}function mf(f){if(e0===null)console.warn("cleanups created outside a `createRoot` or `render` will never be run");else if(e0.cleanups===null)e0.cleanups=[f];else e0.cleanups.push(f);return f}function UZ(){return Kf}function YF(f,J){let Y=e0,z=Kf;e0=f,Kf=null;try{return F1(J,!0)}catch(G){DZ(G)}finally{e0=Y,Kf=z}}function zF(f){if(j0&&j0.running)return f(),j0.done;let J=Kf,Y=e0;return Promise.resolve().then(()=>{Kf=J,e0=Y;let z;if(Pz||nG)z=j0||(j0={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),z.done||(z.done=new Promise((G)=>z.resolve=G)),z.running=!0;return F1(f,!1),Kf=e0=null,z?z.done:void 0})}function e9(f,J){let Y=iG(()=>$f(()=>{return Object.assign(f,{[eM]:!0}),f(J)}),void 0,!0,0);return Y.props=J,Y.observers=null,Y.observerSlots=null,Y.name=f.name,Y.component=f,oY(Y),Y.tValue!==void 0?Y.tValue:Y.value}function GW(f){if(e0){if(e0.sourceMap)e0.sourceMap.push(f);else e0.sourceMap=[f];f.graph=e0}if(YJ.afterRegisterGraph)YJ.afterRegisterGraph(f)}function gJ(f,J){let Y=Symbol("context");return{id:Y,Provider:QF(Y,J),defaultValue:f}}function u1(f){let J;return e0&&e0.context&&(J=e0.context[f.id])!==void 0?J:f.defaultValue}function GF(f){let J=U0(f),Y=U0(()=>jH(J()),void 0,{name:"children"});return Y.toArray=()=>{let z=Y();return Array.isArray(z)?z:z!=null?[z]:[]},Y}function XW(){let f=j0&&j0.running;if(this.sources&&(f?this.tState:this.state))if((f?this.tState:this.state)===T1)oY(this);else{let J=df;df=null,F1(()=>BZ(this),!1),df=J}if(Kf){let J=this.observers;if(!J||J[J.length-1]!==Kf){let Y=J?J.length:0;if(!Kf.sources)Kf.sources=[this],Kf.sourceSlots=[Y];else Kf.sources.push(this),Kf.sourceSlots.push(Y);if(!J)this.observers=[Kf],this.observerSlots=[Kf.sources.length-1];else J.push(Kf),this.observerSlots.push(Kf.sources.length-1)}}if(f&&j0.sources.has(this))return this.tValue;return this.value}function WH(f,J,Y){let z=j0&&j0.running&&j0.sources.has(f)?f.tValue:f.value;if(!f.comparator||!f.comparator(z,J)){if(j0){let G=j0.running;if(G||!Y&&j0.sources.has(f))j0.sources.add(f),f.tValue=J;if(!G)f.value=J}else f.value=J;if(f.observers&&f.observers.length)F1(()=>{for(let G=0;G<f.observers.length;G+=1){let X=f.observers[G],q=j0&&j0.running;if(q&&j0.disposed.has(X))continue;if(q?!X.tState:!X.state){if(X.pure)df.push(X);else H1.push(X);if(X.observers)qW(X)}if(!q)X.state=T1;else X.tState=T1}if(df.length>1e6){if(df=[],oM)throw Error("Potential Infinite Loop Detected.");throw Error()}},!1)}return J}function oY(f){if(!f.fn)return;BY(f);let J=WZ;if(fW(f,j0&&j0.running&&j0.sources.has(f)?f.tValue:f.value,J),j0&&!j0.running&&j0.sources.has(f))queueMicrotask(()=>{F1(()=>{j0&&(j0.running=!0),Kf=e0=f,fW(f,f.tValue,J),Kf=e0=null},!1)})}function fW(f,J,Y){let z,G=e0,X=Kf;Kf=e0=f;try{z=f.fn(J)}catch(q){if(f.pure)if(j0&&j0.running)f.tState=T1,f.tOwned&&f.tOwned.forEach(BY),f.tOwned=void 0;else f.state=T1,f.owned&&f.owned.forEach(BY),f.owned=null;return f.updatedAt=Y+1,DZ(q)}finally{Kf=X,e0=G}if(!f.updatedAt||f.updatedAt<=Y){if(f.updatedAt!=null&&"observers"in f)WH(f,z,!0);else if(j0&&j0.running&&f.pure){if(!j0.sources.has(f))f.value=z;j0.sources.add(f),f.tValue=z}else f.value=z;f.updatedAt=Y}}function iG(f,J,Y,z=T1,G){let X={fn:f,state:z,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:J,owner:e0,context:e0?e0.context:null,pure:Y};if(j0&&j0.running)X.state=0,X.tState=z;if(e0===null)console.warn("computations created outside a `createRoot` or `render` will never be disposed");else if(e0!==fF)if(j0&&j0.running&&e0.pure)if(!e0.tOwned)e0.tOwned=[X];else e0.tOwned.push(X);else if(!e0.owned)e0.owned=[X];else e0.owned.push(X);if(G&&G.name)X.name=G.name;if(hz&&X.fn){let q=X.fn,[Q,H]=r(void 0,{equals:!1}),B=hz.factory(q,H);mf(()=>B.dispose());let V,j=()=>zF(H).then(()=>{if(V)V.dispose(),V=void 0});X.fn=(U)=>{if(Q(),j0&&j0.running){if(!V)V=hz.factory(q,j);return V.track(U)}return B.track(U)}}return YJ.afterCreateOwner&&YJ.afterCreateOwner(X),X}function dG(f){let J=j0&&j0.running;if((J?f.tState:f.state)===0)return;if((J?f.tState:f.state)===cG)return BZ(f);if(f.suspense&&$f(f.suspense.inFallback))return f.suspense.effects.push(f);let Y=[f];while((f=f.owner)&&(!f.updatedAt||f.updatedAt<WZ)){if(J&&j0.disposed.has(f))return;if(J?f.tState:f.state)Y.push(f)}for(let z=Y.length-1;z>=0;z--){if(f=Y[z],J){let G=f,X=Y[z+1];while((G=G.owner)&&G!==X)if(j0.disposed.has(G))return}if((J?f.tState:f.state)===T1)oY(f);else if((J?f.tState:f.state)===cG){let G=df;df=null,F1(()=>BZ(f,Y[0]),!1),df=G}}}function F1(f,J){if(df)return f();let Y=!1;if(!J)df=[];if(H1)Y=!0;else H1=[];WZ++;try{let z=f();return XF(Y),z}catch(z){if(!Y)H1=null;df=null,DZ(z)}}function XF(f){if(df){if(Pz&&j0&&j0.running)ZF(df);else ZW(df);df=null}if(f)return;let J;if(j0){if(!j0.promises.size&&!j0.queue.size){let{sources:z,disposed:G}=j0;H1.push.apply(H1,j0.effects),J=j0.resolve;for(let X of H1)"tState"in X&&(X.state=X.tState),delete X.tState;j0=null,F1(()=>{for(let X of G)BY(X);for(let X of z){if(X.value=X.tValue,X.owned)for(let q=0,Q=X.owned.length;q<Q;q++)BY(X.owned[q]);if(X.tOwned)X.owned=X.tOwned;delete X.tValue,delete X.tOwned,X.tState=0}t9(!1)},!1)}else if(j0.running){j0.running=!1,j0.effects.push.apply(j0.effects,H1),H1=null,t9(!0);return}}let Y=H1;if(H1=null,Y.length)F1(()=>zW(Y),!1);else YJ.afterUpdate&&YJ.afterUpdate();if(J)J()}function ZW(f){for(let J=0;J<f.length;J++)dG(f[J])}function ZF(f){for(let J=0;J<f.length;J++){let Y=f[J],z=j0.queue;if(!z.has(Y))z.add(Y),Pz(()=>{z.delete(Y),F1(()=>{j0.running=!0,dG(Y)},!1),j0&&(j0.running=!1)})}}function qF(f){let J,Y=0;for(J=0;J<f.length;J++){let z=f[J];if(!z.user)dG(z);else f[Y++]=z}if(hf.context){if(hf.count){hf.effects||(hf.effects=[]),hf.effects.push(...f.slice(0,Y));return}BH()}if(hf.effects&&(hf.done||!hf.count))f=[...hf.effects,...f],Y+=hf.effects.length,delete hf.effects;for(J=0;J<Y;J++)dG(f[J])}function BZ(f,J){let Y=j0&&j0.running;if(Y)f.tState=0;else f.state=0;for(let z=0;z<f.sources.length;z+=1){let G=f.sources[z];if(G.sources){let X=Y?G.tState:G.state;if(X===T1){if(G!==J&&(!G.updatedAt||G.updatedAt<WZ))dG(G)}else if(X===cG)BZ(G,J)}}}function qW(f){let J=j0&&j0.running;for(let Y=0;Y<f.observers.length;Y+=1){let z=f.observers[Y];if(J?!z.tState:!z.state){if(J)z.tState=cG;else z.state=cG;if(z.pure)df.push(z);else H1.push(z);z.observers&&qW(z)}}}function BY(f){let J;if(f.sources)while(f.sources.length){let Y=f.sources.pop(),z=f.sourceSlots.pop(),G=Y.observers;if(G&&G.length){let X=G.pop(),q=Y.observerSlots.pop();if(z<G.length)X.sourceSlots[q]=z,G[z]=X,Y.observerSlots[z]=q}}if(f.tOwned){for(J=f.tOwned.length-1;J>=0;J--)BY(f.tOwned[J]);delete f.tOwned}if(j0&&j0.running&&f.pure)QW(f,!0);else if(f.owned){for(J=f.owned.length-1;J>=0;J--)BY(f.owned[J]);f.owned=null}if(f.cleanups){for(J=f.cleanups.length-1;J>=0;J--)f.cleanups[J]();f.cleanups=null}if(j0&&j0.running)f.tState=0;else f.state=0;delete f.sourceMap}function QW(f,J){if(!J)f.tState=0,j0.disposed.add(f);if(f.owned)for(let Y=0;Y<f.owned.length;Y++)QW(f.owned[Y])}function QZ(f){if(f instanceof Error)return f;return Error(typeof f==="string"?f:"Unknown error",{cause:f})}function JW(f,J,Y){try{for(let z of J)z(f)}catch(z){DZ(z,Y&&Y.owner||null)}}function DZ(f,J=e0){let Y=o9&&J&&J.context&&J.context[o9],z=QZ(f);if(!Y)throw z;if(H1)H1.push({fn(){JW(z,Y,J)},state:T1});else JW(z,Y,J)}function jH(f){if(typeof f==="function"&&!f.length)return jH(f());if(Array.isArray(f)){let J=[];for(let Y=0;Y<f.length;Y++){let z=jH(f[Y]);if(Array.isArray(z))if(z.length<32768)J.push.apply(J,z);else for(let G=0;G<z.length;G++)J.push(z[G]);else J.push(z)}return J}return f}function QF(f,J){return function(z){let G;return AJ(()=>G=$f(()=>{return e0.context={...e0.context,[f]:z.value},GF(()=>z.children)}),void 0,J),G}}function YW(f){for(let J=0;J<f.length;J++)f[J]()}function BF(f,J,Y={}){let z=[],G=[],X=[],q=0,Q=J.length>1?[]:null;return mf(()=>YW(X)),()=>{let H=f()||[],B=H.length,V,j;return H[jZ],$f(()=>{let L,O,M,R,S,a,N,g,C;if(B===0){if(q!==0)YW(X),X=[],z=[],G=[],q=0,Q&&(Q=[]);if(Y.fallback)z=[HF],G[0]=_Y((y)=>{return X[0]=y,Y.fallback()}),q=1}else if(q===0){G=Array(B);for(j=0;j<B;j++)z[j]=H[j],G[j]=_Y(U);q=B}else{M=Array(B),R=Array(B),Q&&(S=Array(B));for(a=0,N=Math.min(q,B);a<N&&z[a]===H[a];a++);for(N=q-1,g=B-1;N>=a&&g>=a&&z[N]===H[g];N--,g--)M[g]=G[N],R[g]=X[N],Q&&(S[g]=Q[N]);L=new Map,O=Array(g+1);for(j=g;j>=a;j--)C=H[j],V=L.get(C),O[j]=V===void 0?-1:V,L.set(C,j);for(V=a;V<=N;V++)if(C=z[V],j=L.get(C),j!==void 0&&j!==-1)M[j]=G[V],R[j]=X[V],Q&&(S[j]=Q[V]),j=O[j],L.set(C,j);else X[V]();for(j=a;j<B;j++)if(j in M){if(G[j]=M[j],X[j]=R[j],Q)Q[j]=S[j],Q[j](j)}else G[j]=_Y(U);G=G.slice(0,q=B),z=H.slice(0)}return G});function U(L){if(X[j]=L,Q){let[O,M]=r(j,{name:"index"});return Q[j]=M,J(H[j],O)}return J(H[j])}}}function HW(f,J){if(jF){if(hf.context){let Y=hf.context;BH(_M());let z=e9(f,J||{});return BH(Y),z}}return e9(f,J||{})}function qZ(){return!0}function HH(f){return!(f=typeof f==="function"?f():f)?{}:f}function VF(){for(let f=0,J=this.length;f<J;++f){let Y=this[f]();if(Y!==void 0)return Y}}function LZ(...f){let J=!1;for(let q=0;q<f.length;q++){let Q=f[q];J=J||!!Q&&JJ in Q,f[q]=typeof Q==="function"?(J=!0,U0(Q)):Q}if(tM&&J)return new Proxy({get(q){for(let Q=f.length-1;Q>=0;Q--){let H=HH(f[Q])[q];if(H!==void 0)return H}},has(q){for(let Q=f.length-1;Q>=0;Q--)if(q in HH(f[Q]))return!0;return!1},keys(){let q=[];for(let Q=0;Q<f.length;Q++)q.push(...Object.keys(HH(f[Q])));return[...new Set(q)]}},WF);let Y={},z=Object.create(null);for(let q=f.length-1;q>=0;q--){let Q=f[q];if(!Q)continue;let H=Object.getOwnPropertyNames(Q);for(let B=H.length-1;B>=0;B--){let V=H[B];if(V==="__proto__"||V==="constructor")continue;let j=Object.getOwnPropertyDescriptor(Q,V);if(!z[V])z[V]=j.get?{enumerable:!0,configurable:!0,get:VF.bind(Y[V]=[j.get.bind(Q)])}:j.value!==void 0?j:void 0;else{let U=Y[V];if(U){if(j.get)U.push(j.get.bind(Q));else if(j.value!==void 0)U.push(()=>j.value)}}}}let G={},X=Object.keys(z);for(let q=X.length-1;q>=0;q--){let Q=X[q],H=z[Q];if(H&&H.get)Object.defineProperty(G,Q,H);else G[Q]=H?H.value:void 0}return G}function Zf(f){let J="fallback"in f&&{fallback:()=>f.fallback};return U0(BF(()=>f.each,f.children,J||void 0),void 0,{name:"value"})}function X0(f){let J=f.keyed,Y=U0(()=>f.when,void 0,{name:"condition value"}),z=J?Y:U0(Y,void 0,{equals:(G,X)=>!G===!X,name:"condition"});return U0(()=>{let G=z();if(G){let X=f.children;return typeof X==="function"&&X.length>0?$f(()=>X(J?G:()=>{if(!$f(z))throw KF("Show");return Y()})):X}return f.fallback},void 0,{name:"value"})}var hf,oM=!0,sM=(f,J)=>f===J,JJ,tM,jZ,eM,HZ,o9=null,zW,T1=1,cG=2,fF,QH,e0=null,j0=null,Pz=null,hz=null,Kf=null,df=null,H1=null,WZ=0,YJ,eI,t9,nG,HF,jF=!1,WF,KF=(f)=>`Attempting to access a stale value from <${f}> that could possibly be undefined. This may occur because you are reading the accessor returned from the component at a time where it has already been unmounted. We recommend cleaning up any stale timers or async, or reading from the initial condition.`,BW;var Wf=k(()=>{hf={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return _9(this.context.count)},getNextContextId(){return _9(this.context.count++)}};JJ=Symbol("solid-proxy"),tM=typeof Proxy==="function",jZ=Symbol("solid-track"),eM=Symbol("solid-dev-component"),HZ={equals:sM},zW=ZW,fF={},QH={},YJ={afterUpdate:null,afterCreateOwner:null,afterCreateSignal:null,afterRegisterGraph:null};[eI,t9]=r(!1);HF=Symbol("fallback");WF={get(f,J,Y){if(J===JJ)return Y;return f.get(J)},has(f,J){if(J===JJ)return!0;return f.has(J)},set:qZ,deleteProperty:qZ,getOwnPropertyDescriptor(f,J){return{configurable:!0,enumerable:!0,get(){return f.get(J)},set:qZ,deleteProperty:qZ}},ownKeys(f){return f.keys()}};BW={hooks:YJ,writeSignal:WH,registerGraph:GW};if(globalThis)if(!globalThis.Solid$$)globalThis.Solid$$=!0;else console.warn("You appear to have multiple instances of Solid. This can lead to unexpected behavior.")});function UF(f,J){switch((f??"").toUpperCase()){case"MERGED":return"merged";case"CLOSED":return"closed";case"OPEN":return(J??"").toUpperCase()==="APPROVED"?"ready_to_merge":"open";default:return"unknown"}}function DF(f){let J=(f.status??"").toUpperCase(),Y=(f.conclusion??"").toUpperCase(),z=(f.state??"").toUpperCase();if(J&&J!=="COMPLETED")return"pending";if(Y){if(Y==="SUCCESS"||Y==="NEUTRAL"||Y==="SKIPPED")return"passing";return"failing"}if(z==="SUCCESS")return"passing";if(z==="PENDING"||z==="EXPECTED")return"pending";if(z==="FAILURE"||z==="ERROR")return"failing";return"unknown"}function LF(f){if(!f||f.length===0)return"none";let J=!1,Y=!1;for(let z of f){let G=DF(z);if(G==="failing")return"failing";if(G==="pending")J=!0;else if(G==="passing")Y=!0}if(J)return"pending";if(Y)return"passing";return"unknown"}function WW(f,J){if(!f||typeof f.number!=="number")return null;return{provider:"github",lifecycle:UF(f.state,f.reviewDecision),checkState:LF(f.statusCheckRollup),number:f.number,url:f.url,title:f.title,baseRef:f.baseRefName,headRef:f.headRefName,reviewDecision:f.reviewDecision||void 0,mergeable:f.mergeable||void 0,lastCheckedAt:J}}function MZ(f,J){if(f===J)return!0;if(!f||!J)return!1;return f.provider===J.provider&&f.lifecycle===J.lifecycle&&f.checkState===J.checkState&&f.number===J.number&&f.url===J.url&&f.title===J.title&&f.baseRef===J.baseRef&&f.headRef===J.headRef&&f.reviewDecision===J.reviewDecision&&f.mergeable===J.mergeable}var jW="number,url,title,state,baseRefName,headRefName,reviewDecision,mergeable,statusCheckRollup";var VH,KH,UH,DH="DIRTY_WORKTREE",LH,MH;var FH=k(()=>{VH=class VH extends Error{from;to;taskId;constructor(f,J,Y){super(`illegal transition for task ${Y}: ${f} -> ${J}`);this.from=f;this.to=J;this.taskId=Y;this.name="IllegalTransitionError"}};KH=class KH extends Error{constructor(f){super(`task not found: ${f}`);this.name="TaskNotFoundError"}};UH=class UH extends Error{constructor(){super("cannot delete a main task; remove the repo from saved repos instead");this.name="CannotDeleteMainTaskError"}};LH=class LH extends Error{taskId;constructor(f){super(`${DH}: task ${f} worktree has uncommitted or untracked changes`);this.taskId=f;this.name="DirtyWorktreeError"}};MH=class MH extends Error{taskId;cause;constructor(f,J){super(`failed to remove worktree for task ${f}: ${J instanceof Error?J.message:String(J)}`);this.taskId=f;this.cause=J;this.name="WorktreeRemoveFailedError"}}});function VW(f){if(typeof f!=="string")return"";let J=f.replace(/\s+/g," ").trim();if(J.length===0)return"";let Y=[...J];if(Y.length<=40)return J;return`${Y.slice(0,40).join("")}\u2026`}function FZ(f,J){let Y=f.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,32),z=J.slice(-6).toLowerCase();return`kobe/${Y||"task"}-${z}`}var KW;var UW=k(()=>{KW=["aardvark","addax","adder","agouti","albatross","alpaca","anaconda","anchovy","anglerfish","anole","anteater","antelope","ape","argali","armadillo","avocet","axolotl","baboon","badger","banteng","barracuda","basilisk","bass","bat","beagle","bear","beaver","bee","beetle","beluga","betta","bison","blackbird","blenny","bluebird","bluegill","boar","bobcat","bonito","bovid","buffalo","bullfrog","bunting","bushbuck","butterfly","buzzard","caiman","camel","canary","capybara","caracal","cardinal","caribou","carp","cassowary","caterpillar","catfish","chameleon","chamois","char","cheetah","chickadee","chimp","chinchilla","chipmunk","chough","cicada","civet","clam","clownfish","cobra","cockatoo","condor","coot","copperhead","coral","cormorant","cougar","coyote","crab","crane","crawfish","crayfish","cricket","crocodile","crow","cuckoo","curlew","cuttlefish","deer","dikdik","dingo","dolphin","donkey","dormouse","dotterel","dove","dragonfly","dromedary","duck","dugong","dunlin","eagle","echidna","eel","egret","eider","eland","elephant","elk","emu","ermine","falcon","fawn","ferret","finch","firefly","flamingo","flounder","fox","frog","gadwall","gannet","gaur","gazelle","gecko","gemsbok","gerbil","gharial","gibbon","gnu","goat","goby","godwit","goldfish","goose","gopher","goral","gorilla","goshawk","grackle","grasshopper","grayling","grebe","grouse","guanaco","guillemot","guineafowl","guppy","halibut","hammerhead","hamster","hare","harrier","hartebeest","hawk","hedgehog","heron","herring","hippo","hornbill","hornet","horse","hummingbird","hyena","ibex","ibis","iguana","impala","indri","jacana","jackal","jaguar","jay","jellyfish","jerboa","junco","kakapo","kangaroo","kestrel","killdeer","kingfisher","kinglet","kite","kiwi","koala","kookaburra","krait","krill","kudu","ladybug","lamprey","langur","lapwing","lark","lemming","lemur","leopard","limpet","lion","lionfish","lizard","llama","lobster","locust","loon","lorikeet","loris","lynx","macaque","macaw","mackerel","magpie","mallard","mamba","mammoth","manatee","mandrill","manta","mantis","marlin","marmoset","marmot","marten","meerkat","merganser","mink","minnow","mole","mongoose","monitor","monkey","moose","moth","mouflon","mouse","mudpuppy","mule","muntjac","musk","muskox","muskrat","mussel","mustang","narwhal","newt","nightingale","numbat","nuthatch","nyala","ocelot","octopus","okapi","opossum","orangutan","orca","oriole","oryx","osprey","ostrich","otter","owl","oyster","oystercatcher","paca","panda","pangolin","panther","parakeet","parrot","parrotfish","partridge","peafowl","pelican","penguin","perch","petrel","pheasant","pigeon","pika","pike","pintail","pipefish","platypus","plover","pollock","pony","porcupine","porpoise","possum","ptarmigan","puffin","puma","pupfish","python","quail","quetzal","quokka","quoll","rabbit","raccoon","rail","rat","rattler","raven","ray","redpoll","reindeer","remora","rhino","roadrunner","robin","rook","sable","sailfish","salamander","salmon","sandpiper","sardine","scallop","scaup","scorpion","seahorse","seal","serval","shark","shearwater","shrew","shrike","shrimp","siskin","sitatunga","skate","skink","skua","skunk","sloth","smelt","snail","snipe","solenodon","sparrow","spider","springbok","squid","squirrel","starfish","starling","stilt","stingray","stoat","stork","sunbird","sunfish","swallow","swan","swift","swordfish","tahr","takin","tamarin","tanager","tapir","tarantula","tarpon","tarsier","teal","tenrec","terrapin","tern","tetra","thrasher","thrush","tiger","toad","tortoise","toucan","treecreeper","treefrog","trout","tuatara","tuna","turkey","turtle","urchin","urial","vicuna","viper","vole","vulture","wagtail","wallaby","walleye","walrus","warbler","warthog","waterbuck","weasel","wildebeest","wolf","wolverine","wombat","woodcock","woodpecker","wrasse","wren","yak","zebra","zebu","zorilla"]});class OH{activeSlugs;random;pool;pendingByRepo=new Map;chain=Promise.resolve();constructor(f,J={}){this.activeSlugs=f;if(this.random=J.random??Math.random,this.pool=J.pool??KW,this.pool.length===0)throw Error("SlugAllocator: animal pool cannot be empty")}async allocate(f){let J=this.chain,Y;this.chain=new Promise((z)=>{Y=z}),await J;try{return await this.pickLocked(f)}finally{Y()}}commit(f,J){this.deletePending(f,J)}cancel(f,J){this.deletePending(f,J)}async pickLocked(f){let J=await this.occupiedSlugs(f),Y=this.pool.filter((G)=>!J.has(G));if(Y.length>0){let G=Y[Math.floor(this.random()*Y.length)];return this.addPending(f,G),G}let z=this.pool[Math.floor(this.random()*this.pool.length)];for(let G=2;;G++){let X=`${z}-v${G}`;if(!J.has(X))return this.addPending(f,X),X}}async occupiedSlugs(f){let J=new Set(this.pendingByRepo.get(f)??[]);for(let Y of this.activeSlugs(f))if(Y)J.add(Y);for(let Y of await d9(f))J.add(Y);return J}addPending(f,J){let Y=this.pendingByRepo.get(f);if(!Y)Y=new Set,this.pendingByRepo.set(f,Y);Y.add(J)}deletePending(f,J){let Y=this.pendingByRepo.get(f);if(!Y)return;if(Y.delete(J),Y.size===0)this.pendingByRepo.delete(f)}}var DW=k(()=>{UW();XH()});var FW={};jf(FW,{PLACEHOLDER_TASK_TITLE:()=>RJ,Orchestrator:()=>OZ});import{realpathSync as MF}from"fs";import{basename as FF,resolve as OF}from"path";function LW(f){return mJ(f)?.basePath??f}class OZ{store;worktrees;slugs;tasksAcc;setTasks;activeTaskAcc;setActiveTaskSig;unsubscribeStore;worktreeLocks=new Map;mainTaskLocks=new Map;constructor(f){this.store=f.store,this.worktrees=f.worktrees,this.slugs=new OH((X)=>this.store.list().filter((q)=>q.repo===X&&q.kind!=="main").map((q)=>{return q.worktreePath.match(/([^/\\]+)[/\\]*$/)?.[1]??""}).filter((q)=>q.length>0));let[J,Y]=r(this.store.list());this.tasksAcc=J,this.setTasks=(X)=>Y(()=>X);let[z,G]=r(null);this.activeTaskAcc=z,this.setActiveTaskSig=(X)=>G(()=>X),this.unsubscribeStore=this.store.subscribe((X)=>{this.setTasks(X.slice())})}async init(){}activeTaskSignal(){return this.activeTaskAcc}async setActiveTask(f){let J=f===null?null:String(f);if(this.setActiveTaskSig(J),J&&this.store.get(J))await this.store.update(J,{})}tasksSignal(){return this.tasksAcc}subscribeTasks(f){return this.store.subscribe(f)}dispose(){this.unsubscribeStore()}listTasks(){return this.store.list()}getTask(f){return this.store.get(f)}async createTask(f){if(!f.repo)throw Error("createTask: repo is required");let J=(f.title??RJ).trim()||RJ,Y=await this.store.create({repo:f.repo,title:J,branch:f.branch??"",worktreePath:"",status:"backlog",kind:"task",vendor:f.vendor??Sf,...f.modelEffort?{modelEffort:f.modelEffort}:{}});if(f.baseRef)this.pendingBaseRefs.set(Y.id,f.baseRef);return Y}async ensureMainTask(f){let{repo:J,key:Y}=MW(f),z=this.store.list().find((q)=>q.kind==="main"&&MW(q.repo).key===Y);if(z)return z;let G=this.mainTaskLocks.get(Y);if(G)return G;let X=(async()=>{return await this.store.create({repo:J,title:AF(J),branch:"",worktreePath:LW(J),status:"backlog",kind:"main",vendor:Sf})})();this.mainTaskLocks.set(Y,X);try{return await X}finally{this.mainTaskLocks.delete(Y)}}async ensureWorktree(f){let J=this.requireTask(f);if(J.kind==="main")return LW(J.repo);if(J.worktreePath)return J.worktreePath;let Y=this.worktreeLocks.get(J.id);if(Y)return await Y,this.requireTask(J.id).worktreePath;let z=(async()=>{let X=await this.slugs.allocate(J.repo);try{let q=J.branch||FZ(J.title,J.id),Q=this.pendingBaseRefs.get(J.id),H=await this.worktrees.createForTask({repo:J.repo,slug:X,branch:q,baseRef:Q});this.slugs.commit(J.repo,X),this.pendingBaseRefs.delete(J.id),await this.store.update(J.id,{worktreePath:H.path,branch:q})}catch(q){throw this.slugs.cancel(J.repo,X),q}})();this.worktreeLocks.set(J.id,z);try{await z}finally{this.worktreeLocks.delete(J.id)}return this.requireTask(J.id).worktreePath}async setTitle(f,J){let Y=J.trim();if(!Y)throw Error("setTitle: title is required (empty or whitespace-only rejected)");let z=this.requireTask(f);if(z.title===Y)return;await this.store.update(z.id,{title:Y}),await this.followBranchToTitle(z,Y)}async followBranchToTitle(f,J){if(f.kind==="main"||!f.worktreePath)return;if(f.branch!==FZ(RJ,f.id))return;let Y=FZ(J,f.id);if(Y===f.branch)return;try{await this.setBranch(f.id,Y)}catch(z){console.error(`[kobe] follow-branch-to-title failed for ${f.id}:`,z)}}async setBranch(f,J){let Y=J.trim();if(!Y)throw Error("setBranch: branch is required (empty or whitespace-only rejected)");let z=this.requireTask(f);if(z.kind==="main")throw Error("setBranch: a main task tracks the repo's own branch; rename it with git directly");if(z.branch===Y)return;if(z.worktreePath)await this.worktrees.renameBranch(z.worktreePath,z.branch,Y);await this.store.update(z.id,{branch:Y})}async setVendor(f,J){let Y=this.requireTask(f);if(Y.vendor===J)return;await this.store.update(Y.id,{vendor:J})}async setPinned(f,J){let Y=this.requireTask(f);if(Y.kind==="main")return;let z=J??!Y.pinned;if((Y.pinned??!1)===z)return;await this.store.update(Y.id,{pinned:z})}async moveTask(f,J){let Y=this.requireTask(f);if(Y.kind==="main")return;let z=this.store.list().filter((G)=>(G.kind??"task")!=="main"&&G.archived===Y.archived&&(G.pinned??!1)===(Y.pinned??!1)).map((G)=>String(G.id));await this.store.move(Y.id,J,z)}async setArchived(f,J){let Y=this.requireTask(f);if(Y.kind==="main")return;let z=J??!Y.archived;if(Y.archived===z)return;await this.store.update(Y.id,{archived:z})}async reorderTasks(f){if(f.length===0)return;for(let J of f){if(this.requireTask(J.taskId).kind==="main")throw Error(`cannot reorder a main task: ${J.taskId}`);if(!Number.isFinite(J.position))throw Error(`position must be a finite number: ${J.taskId}`)}await this.store.reorder(f.map((J)=>({id:J.taskId,position:J.position})))}async setStatus(f,J){let Y=this.requireTask(f);if(Y.status===J)return;if(Y.status==="done"&&J==="error"||Y.status==="error"&&J==="done")throw new VH(Y.status,J,Y.id);await this.store.update(Y.id,{status:J})}async setPRStatus(f,J){let Y=this.requireTask(f);if(MZ(Y.prStatus,J??void 0))return;await this.store.update(Y.id,{prStatus:J??void 0})}async deleteTask(f,J){let Y=this.store.get(f);if(!Y)return;if(Y.kind==="main")throw new UH;let z=J?.force===!0;if(Y.worktreePath){if(!z){let G=!1;try{G=await this.worktrees.isDirty(Y.worktreePath)}catch{}if(G)throw new LH(Y.id)}try{await this.worktrees.remove(Y.worktreePath,{force:z})}catch(G){throw new MH(Y.id,G)}}await this.store.remove(Y.id),this.pendingBaseRefs.delete(Y.id),this.worktreeLocks.delete(Y.id)}async discoverAdoptableWorktrees(f){if(!f)throw Error("discoverAdoptableWorktrees: repo is required");let J=await this.worktrees.listAll(f),Y=new Set(this.store.list().filter((z)=>z.worktreePath).map((z)=>vz(z.worktreePath)));return J.filter((z)=>!Y.has(vz(z.path)))}async adoptWorktree(f){if(!f.repo)throw Error("adoptWorktree: repo is required");if(!f.worktreePath)throw Error("adoptWorktree: worktreePath is required");let J=vz(f.worktreePath),Y=this.adoptLocks.get(J);if(Y)return Y;let z=this.adoptWorktreeLocked(f,J);this.adoptLocks.set(J,z);try{return await z}finally{this.adoptLocks.delete(J)}}async adoptWorktreeLocked(f,J){let Y=this.store.list().find((Q)=>Q.worktreePath&&vz(Q.worktreePath)===J);if(Y){if(f.ifExists==="return")return Y;throw Error(`adoptWorktree: ${f.worktreePath} is already adopted as a task`)}let G=(await this.worktrees.listAll(f.repo)).find((Q)=>vz(Q.path)===J);if(!G)throw Error(`adoptWorktree: ${f.worktreePath} is not an adoptable git worktree of ${f.repo} (unknown, detached, or the main checkout)`);let X=f.branch?.trim()||G.branch,q=(f.title??FF(G.path)).trim()||RJ;return this.store.create({repo:f.repo,title:q,branch:X,worktreePath:G.path,status:"backlog",kind:"task",vendor:f.vendor??Sf})}pendingBaseRefs=new Map;adoptLocks=new Map;requireTask(f){let J=this.store.get(f);if(!J)throw new KH(String(f));return J}}function AF(f){let J=f.split(/[/\\]/).filter(Boolean);return J.length>0?J[J.length-1]??f:f}function MW(f){let J=PJ(f);return{repo:J,key:D1(J)?J:vz(J)}}function vz(f){try{return MF(f)}catch{return OF(f)}}var RJ="(new task)";var lG=k(()=>{Wf();gf();S1();FH();DW()});function AZ(f){return f.remoteVersion>=f.localMin&&f.localVersion>=f.remoteMin}function OW(f,J){if(!f)return!1;return f!==J}function RF(f){return typeof f==="string"&&gF.has(f)}function AW(f){if(!Array.isArray(f))return null;let J=new Set;for(let Y of f)if(RF(Y))J.add(Y);return J.size>0?J:null}function zJ(f){return{id:f.id,title:f.title,repo:f.repo,branch:f.branch,worktreePath:f.worktreePath,kind:f.kind??"task",status:f.status,archived:f.archived,pinned:f.pinned??!1,vendor:f.vendor,prStatus:f.prStatus,position:f.position,modelEffort:f.modelEffort,createdAt:f.createdAt,updatedAt:f.updatedAt}}function aG(f){return`${JSON.stringify(f)}
|
|
16
|
+
`}var n1=3,jY=2,AH,gF;var sY=k(()=>{AH=["task.snapshot","issue.snapshot","active-task","update","engine-state","ui-prefs","keybindings","task.jobs","worktree.changes","session.deliver"],gF=new Set(AH)});import{createHash as CF}from"crypto";import{homedir as gZ,tmpdir as kF}from"os";import{join as tY}from"path";function NF(f){return CF("sha1").update(f).digest("hex").slice(0,8)}function RH(f,J,Y,z){if(Buffer.byteLength(f,"utf8")<=gH)return f;let G=NF(J),X=z===void 0?"":`-${z}`,q=tY(kF(),`kobe-${G}-${Y}${X}.sock`);if(Buffer.byteLength(q,"utf8")<=gH)return q;throw Error(`kobe socket path exceeds ${gH} bytes even after fallback: ${q}`)}function CJ(f){let J=process.env.KOBE_DAEMON_SOCKET_PATH;if(J&&J.length>0)return J;let Y=f??process.env.KOBE_HOME_DIR;if(Y&&Y.length>0)return RH(tY(Y,".kobe","daemon.sock"),Y,"daemon");let z=process.env.XDG_RUNTIME_DIR;if(z&&z.length>0)return RH(tY(z,"kobe.sock"),z,"daemon");let G=gZ();return RH(tY(G,".kobe","daemon.sock"),G,"daemon")}function nJ(f=process.env.KOBE_HOME_DIR??gZ()){let J=process.env.KOBE_DAEMON_PID_PATH;if(J&&J.length>0)return J;return tY(f,".kobe","daemon.pid")}function RZ(f=process.env.KOBE_HOME_DIR??gZ()){return tY(f,".kobe","daemon.log")}function gW(f=process.env.KOBE_HOME_DIR??gZ()){return tY(f,".kobe","client.log")}var gH=100;var mz=()=>{};import{appendFile as RW,mkdir as yF}from"fs/promises";import{dirname as bF}from"path";function CZ(f){NW=f}function SF(f){if(f instanceof Error)return{message:f.message,stack:f.stack};let J;try{J=typeof f==="string"?f:JSON.stringify(f)}catch{J=String(f)}return{message:J}}function yW(f,J,Y=new Date){return`[${Y.toISOString()}] client ${NW} [${f}] pid=${process.pid}: ${J}
|
|
17
|
+
`}function IF(){if(CW)return;CW=!0;try{process.stderr.write(`[kobe] client log write failed; continuing without it
|
|
18
|
+
`)}catch{}}function bW(f){let J=gW();kW=kW.then(async()=>{try{await RW(J,f)}catch(Y){if(Y?.code==="ENOENT")await yF(bF(J),{recursive:!0}),await RW(J,f);else throw Y}}).catch(()=>IF())}function dJ(f,J){bW(yW(f,J))}function WY(f,J){let Y=SF(J);bW(yW(f,Y.stack??Y.message))}var NW="client",CW=!1,kW;var eY=k(()=>{mz();kW=Promise.resolve()});import{connect as TF}from"net";import{StringDecoder as uF}from"string_decoder";class d1{socketPath;socket=null;buffer="";nextId=1;pending=new Map;handlers=new Map;lifecycleHandlers=new Map;connecting=null;disposed=!1;constructor(f){this.socketPath=f}connect(){if(this.socket)return Promise.resolve();if(this.disposed)return Promise.reject(Error("daemon client disposed"));if(this.connecting)return this.connecting;let f=this.openSocket();this.connecting=f;let J=()=>{if(this.connecting===f)this.connecting=null};return f.then(J,J),f}get isDisposed(){return this.disposed}close(){this.disposed=!0,this.socket?.end(),this.socket=null,this.failPending()}forceDisconnect(){let f=this.socket;if(!f)return;this.socket=null,f.destroy(),this.failPending()}failPending(){if(this.pending.size===0)return;let f=Error("daemon connection closed");for(let J of this.pending.values())J.reject(f);this.pending.clear()}on(f,J){let Y=this.handlers.get(f);if(!Y)Y=new Set,this.handlers.set(f,Y);return Y.add(J),()=>{if(Y?.delete(J),Y?.size===0)this.handlers.delete(f)}}onChannel(f,J){return this.on(f,(Y)=>J(Y.payload))}subscribe(f={}){let J={};if(f.channels)J.channels=f.channels;if(f.role)J.role=f.role;return this.request("subscribe",J)}onLifecycle(f,J){let Y=this.lifecycleHandlers.get(f);if(!Y)Y=new Set,this.lifecycleHandlers.set(f,Y);return Y.add(J),()=>{if(Y?.delete(J),Y?.size===0)this.lifecycleHandlers.delete(f)}}async request(f,J){await this.connect();let Y=this.socket;if(!Y)throw Error("daemon connection is not open");let z=String(this.nextId++),G=new Promise((X,q)=>{this.pending.set(z,{resolve:(Q)=>X(Q),reject:q})});return Y.write(aG({type:"request",id:z,name:f,payload:J})),G}openSocket(){return new Promise((f,J)=>{let Y=TF(this.socketPath);this.socket=Y;let z=()=>{Y.off("error",G),f()},G=(q)=>{if(Y.off("connect",z),this.socket===Y)this.socket=null;J(q)};Y.once("connect",z),Y.once("error",G);let X=new uF("utf8");this.buffer="",Y.on("data",(q)=>this.onData(X.write(q))),Y.on("close",()=>this.onSocketClose(Y))})}onSocketClose(f){if(this.socket!==f)return;this.socket=null,this.failPending(),this.emitLifecycle("close")}emitLifecycle(f){for(let J of this.lifecycleHandlers.get(f)??[])try{J()}catch(Y){console.error(`[kobe] lifecycle handler for "${f}" threw:`,Y)}}onData(f){this.buffer+=f;let J=this.buffer.indexOf(`
|
|
19
|
+
`);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){WY("client-frame",z);return}if(J.type==="event"){this.emit(J);return}if(J.type!=="response")return;let Y=this.pending.get(J.id);if(!Y)return;if(this.pending.delete(J.id),J.error){let z=Error(J.error.message);if(J.error.name)z.name=J.error.name;Y.reject(z)}else Y.resolve(J.payload)}emit(f){for(let J of this.handlers.get(f.name)??[])J(f);for(let J of this.handlers.get("*")??[])J(f)}}var $G=k(()=>{sY();eY()});function kZ(f){return EF.includes(f)}function SW(f,J,Y){switch(J){case"session-start":case"session-end":return"idle";case"turn-start":return"running";case"turn-complete":return"turn_complete";case"turn-failed":return Y?.failure==="rate_limit"||Y?.failure==="billing"?"rate_limited":"error";case"awaiting-input":return Y?.waiting==="permission"?"permission_needed":"running"}}var EF;var NZ=k(()=>{EF=["session-start","turn-start","turn-complete","turn-failed","awaiting-input","session-end"]});function xF(){let f=process.env.KOBE_ENGINE_STATE_TTL_MS;if(f===void 0)return IW;let J=Number(f);return Number.isFinite(J)&&J>0?J:IW}class CH{bus;staleMs;now;activity=new Map;constructor(f,J=xF(),Y=()=>Date.now()){this.bus=f;this.staleMs=J;this.now=Y}report(f,J,Y){let z=this.activity.get(f);if(z?.lapse)clearTimeout(z.lapse);let G=SW(z?.state,J,Y),X=this.now(),q={state:G,detail:Y,at:X};if(G!=="idle"&&G!=="turn_complete")q.lapse=setTimeout(()=>{let Q=this.activity.get(f);if(Q&&Q.at===X)this.publishIdle(f)},this.staleMs),q.lapse.unref?.();this.activity.set(f,q),this.bus.publish("engine-state",this.payload(f,q))}clearTask(f){let J=this.activity.get(f);if(J?.lapse)clearTimeout(J.lapse);if(this.activity.delete(f),J)this.bus.publish("engine-state",{taskId:f,state:"idle",at:this.now()})}snapshotByTask(){let f={};for(let[J,Y]of this.activity)f[J]=this.payload(J,Y);return f}currentNonIdle(){let f=[];for(let[J,Y]of this.activity)if(Y.state!=="idle")f.push(this.payload(J,Y));return f}close(){for(let f of this.activity.values())if(f.lapse)clearTimeout(f.lapse);this.activity.clear()}publishIdle(f){let J={state:"idle",at:this.now()};this.activity.set(f,J),this.bus.publish("engine-state",this.payload(f,J))}payload(f,J){return{taskId:f,state:J.state,...J.detail?{detail:J.detail}:{},at:J.at}}}var IW=600000;var TW=k(()=>{NZ()});import{spawnSync as wF}from"child_process";import{existsSync as hF,statSync as PF}from"fs";import{homedir as vF}from"os";import rG from"path";async function uW(f=mF){let J=[],Y=(B)=>{if(!B)return;return J.push(B),f.fileExists(B)?B:void 0},z=f.which("claude");if(z){if(J.push(`which:${z}`),f.fileExists(z))return z}let G=f.home(),X=Y(rG.join(G,".claude","local","claude"));if(X)return X;let q=f.env("NVM_BIN");if(q){let B=Y(rG.join(q,"claude"));if(B)return B}let Q=rG.join(G,".nvm","versions","node"),H=f.readdir(Q).sort().reverse();for(let B of H){let V=Y(rG.join(Q,B,"bin","claude"));if(V)return V}for(let B of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude","/bin/claude"]){let V=Y(B);if(V)return V}for(let B of[".local/bin/claude",".npm-global/bin/claude",".yarn/bin/claude",".bun/bin/claude","bin/claude"]){let V=Y(rG.join(G,B));if(V)return V}throw new yZ(J)}var yZ,mF;var EW=k(()=>{yZ=class yZ extends Error{checkedPaths;constructor(f){super(`Claude Code binary not found. Checked: ${f.join(", ")}. Ensure 'claude' is on PATH, or install at ~/.claude/local/claude.`);this.name="ClaudeBinaryNotFoundError",this.checkedPaths=f}};mF={fileExists(f){try{return PF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return vF()},which(f){let J=process.platform==="win32"?"where":"which",Y=wF(J,[f],{encoding:"utf8"});if(Y.status!==0)return;let z=Y.stdout.split(`
|
|
21
|
+
`).map((G)=>G.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("claude:")&&z.includes("aliased to")){let G=z.split("aliased to")[1]?.trim();return G&&hF(G)?G:void 0}return z},readdir(f){try{return pX("fs").readdirSync(f)}catch{return[]}}}});import{spawnSync as cF}from"child_process";import{existsSync as nF,statSync as dF}from"fs";import{homedir as iF}from"os";import xW from"path";async function wW(f=lF){let J=[],Y=(q)=>{if(!q)return;return J.push(q),f.fileExists(q)?q:void 0},z=f.which("codex");if(z){if(J.push(`which:${z}`),f.fileExists(z))return z}let G=f.home();for(let q of["/opt/homebrew/bin/codex","/usr/local/bin/codex","/usr/bin/codex","/bin/codex"]){let Q=Y(q);if(Q)return Q}let X=f.env("NVM_BIN");if(X){let q=Y(xW.join(X,"codex"));if(q)return q}for(let q of[".local/bin/codex",".bun/bin/codex","bin/codex"]){let Q=Y(xW.join(G,q));if(Q)return Q}throw new bZ(J)}var bZ,lF;var hW=k(()=>{bZ=class bZ extends Error{checkedPaths;constructor(f){super(`Codex CLI binary not found. Checked: ${f.join(", ")}. Ensure 'codex' is on PATH (e.g. \`brew install codex\` or the official installer).`);this.name="CodexBinaryNotFoundError",this.checkedPaths=f}};lF={fileExists(f){try{return dF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return iF()},which(f){let J=process.platform==="win32"?"where":"which",Y=cF(J,[f],{encoding:"utf8"});if(Y.status!==0)return;let z=Y.stdout.split(`
|
|
22
|
+
`).map((G)=>G.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("codex:")&&z.includes("aliased to")){let G=z.split("aliased to")[1]?.trim();return G&&nF(G)?G:void 0}return z},readdir(f){try{return pX("fs").readdirSync(f)}catch{return[]}}}});import{spawnSync as aF}from"child_process";import{existsSync as $F,statSync as rF}from"fs";import{homedir as pF}from"os";import VY from"path";async function PW(f=_F){let J=[],Y=(V)=>{if(!V)return;return J.push(V),f.fileExists(V)?V:void 0},z=f.which("copilot");if(z){if(J.push(`which:${z}`),f.fileExists(z))return z}let G=f.platform()==="win32"?["copilot.exe","copilot.cmd","copilot"]:["copilot"],X=(V)=>{if(!V)return;for(let j of G){let U=Y(VY.join(V,j));if(U)return U}return};for(let V of["/opt/homebrew/bin","/usr/local/bin","/usr/bin","/bin"]){let j=X(V);if(j)return j}let q=f.env("NVM_BIN"),Q=X(q);if(Q)return Q;let H=f.home(),B=[VY.join(H,".npm-global/bin"),VY.join(H,".local/bin"),VY.join(H,".bun/bin"),VY.join(H,"bin")];if(f.platform()==="win32"){let V=f.env("APPDATA"),j=f.env("LOCALAPPDATA");if(B.unshift(VY.join(H,"AppData/Roaming/npm")),V)B.unshift(VY.join(V,"npm"));if(j)B.unshift(VY.join(j,"npm"))}for(let V of B){let j=X(V);if(j)return j}throw new SZ(J)}var SZ,_F;var vW=k(()=>{SZ=class SZ extends Error{checkedPaths;constructor(f){super(`GitHub Copilot CLI binary not found. Checked: ${f.join(", ")}. Ensure 'copilot' is on PATH (for example \`npm install -g @github/copilot\` or \`brew install copilot-cli\`).`);this.name="CopilotBinaryNotFoundError",this.checkedPaths=f}};_F={fileExists(f){try{return rF(f).isFile()}catch{return!1}},env(f){return process.env[f]},home(){return pF()},which(f){let J=process.platform==="win32"?"where":"which",Y=aF(J,[f],{encoding:"utf8"});if(Y.status!==0)return;let z=Y.stdout.split(`
|
|
23
|
+
`).map((G)=>G.trim()).filter(Boolean)[0];if(!z)return;if(z.startsWith("copilot:")&&z.includes("aliased to")){let G=z.split("aliased to")[1]?.trim();return G&&$F(G)?G:void 0}return z},platform(){return process.platform}}});import{readFileSync as oF,statSync as sF}from"fs";import{homedir as tF}from"os";import KY from"path";function eF(f,J){let Y=f("CLAUDE_CONFIG_DIR")?.trim();if(Y)return KY.join(Y,".claude.json");return KY.join(J,".claude.json")}function f3(f,J){let z=f("CODEX_HOME")?.trim()??KY.join(J,".codex");return KY.join(z,"auth.json")}function J3(f,J){let z=f("COPILOT_HOME")?.trim()??KY.join(J,".copilot");return KY.join(z,"config.json")}function Y3(f){let J=f.split(".");if(J.length!==3)return null;let Y=J[1];if(!Y)return null;let z=Y.replace(/-/g,"+").replace(/_/g,"/"),G=z+"=".repeat((4-z.length%4)%4);try{let X=Buffer.from(G,"base64").toString("utf8"),q=JSON.parse(X);return typeof q==="object"&&q!==null?q:null}catch{return null}}async function TZ(f){try{return{found:!0,path:await f()}}catch(J){if(J instanceof yZ||J instanceof bZ||J instanceof SZ)return{found:!1,error:"not found on PATH"};return{found:!1,error:J instanceof Error?J.message:String(J)}}}async function mW(f){return(await Promise.all([["claude",()=>f.findClaudeBinary()],["codex",()=>f.findCodexBinary()],["copilot",()=>f.findCopilotBinary()]].map(async([z,G])=>(await TZ(G)).found?z:null))).filter((z)=>z!==null)}function z3(f=cz){if(f!==cz)return mW(f);if(IZ)return IZ;let J=mW(f).catch((Y)=>{throw IZ=null,Y});return IZ=J,J}async function iJ(f=cz){return[...await z3(f),...oQ()]}async function uZ(f=cz){let J=await TZ(()=>f.findClaudeBinary()),Y=eF(f.env,f.home()),z;try{z=f.readFile(Y)}catch(H){return{binary:J,account:{kind:"none"},accountError:`read ${Y}: ${H instanceof Error?H.message:String(H)}`}}if(z===null)return{binary:J,account:{kind:"none"}};let G;try{G=JSON.parse(z)}catch(H){return{binary:J,account:{kind:"none"},accountError:`parse ${Y}: ${H instanceof Error?H.message:String(H)}`}}let X=G?.oauthAccount;if(!X||typeof X!=="object")return{binary:J,account:{kind:"none"}};let q=X,Q=typeof q.emailAddress==="string"?q.emailAddress:void 0;if(!Q)return{binary:J,account:{kind:"none"}};return{binary:J,account:{kind:"oauth",email:Q,organization:typeof q.organizationName==="string"?q.organizationName:void 0,displayName:typeof q.displayName==="string"?q.displayName:void 0,billingType:typeof q.billingType==="string"?q.billingType:void 0}}}async function EZ(f=cz){let J=await TZ(()=>f.findCodexBinary()),Y=f3(f.env,f.home()),z;try{z=f.readFile(Y)}catch(B){return{binary:J,account:{kind:"none"},accountError:`read ${Y}: ${B instanceof Error?B.message:String(B)}`}}if(z===null)return{binary:J,account:{kind:"none"}};let G;try{G=JSON.parse(z)}catch(B){return{binary:J,account:{kind:"none"},accountError:`parse ${Y}: ${B instanceof Error?B.message:String(B)}`}}let X=G??{},q=X.tokens,Q=typeof q?.id_token==="string"?q.id_token:void 0;if(Q){let B=Y3(Q);if(!B)return{binary:J,account:{kind:"none"},accountError:"codex id_token: malformed JWT"};let V=typeof B.email==="string"?B.email:void 0,j=B["https://api.openai.com/auth"],U=typeof j==="object"&&j!==null&&!Array.isArray(j)?j:void 0,L=typeof U?.chatgpt_plan_type==="string"?U.chatgpt_plan_type:void 0;if(V)return{binary:J,account:{kind:"chatgpt",email:V,plan:L}};return{binary:J,account:{kind:"none"},accountError:"codex id_token: no email claim"}}let H=X.OPENAI_API_KEY;if(typeof H==="string"&&H.length>0)return{binary:J,account:{kind:"apikey"}};return{binary:J,account:{kind:"none"}}}async function xZ(f=cz){let J=await TZ(()=>f.findCopilotBinary());for(let X of["COPILOT_GITHUB_TOKEN","GH_TOKEN","GITHUB_TOKEN"])if(f.env(X)?.trim())return{binary:J,account:{kind:"token",source:X}};let Y=J3(f.env,f.home()),z;try{z=f.readFile(Y)}catch(X){return{binary:J,account:{kind:"none"},accountError:`read ${Y}: ${X instanceof Error?X.message:String(X)}`}}if(z===null)return{binary:J,account:{kind:"none"}};let G;try{G=JSON.parse(z)}catch(X){return{binary:J,account:{kind:"none"},accountError:`parse ${Y}: ${X instanceof Error?X.message:String(X)}`}}if(!kH(G))return{binary:J,account:{kind:"none"}};if(cW(G,["github_token","oauth_token","access_token","token","selectedUser","currentUser","user"]))return{binary:J,account:{kind:"oauth"}};return{binary:J,account:{kind:"none"}}}function kH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function cW(f,J,Y=0){if(Y>4||!kH(f))return!1;for(let[z,G]of Object.entries(f)){if(J.includes(z)&&typeof G==="string"&&G.length>0)return!0;if(kH(G)&&cW(G,J,Y+1))return!0}return!1}var cz,IZ=null;var fz=k(()=>{gf();EW();hW();vW();cz={readFile(f){try{sF(f)}catch(J){if(J.code==="ENOENT")return null;throw J}return oF(f,"utf8")},env(f){return process.env[f]},home(){return tF()},findClaudeBinary(){return uW()},findCodexBinary(){return wW()},findCopilotBinary(){return PW()}}});function nW(f){if(typeof f==="string")return f.length>0?[{type:"text",text:f}]:[];if(!Array.isArray(f))return[];let J=[];for(let Y of f){if(typeof Y==="string"){if(Y.length>0)J.push({type:"text",text:Y});continue}if(!Y||typeof Y!=="object")continue;let z=Y;if(z.type==="text"&&typeof z.text==="string"){J.push({type:"text",text:z.text});continue}if(z.type==="tool_use"){J.push({type:"tool_call",callId:typeof z.id==="string"?z.id:"",name:typeof z.name==="string"?z.name:"",input:z.input});continue}if(z.type==="tool_result"){J.push({type:"tool_result",callId:typeof z.tool_use_id==="string"?z.tool_use_id:"",output:z.content,isError:z.is_error===!0});continue}if(z.type==="thinking"&&typeof z.thinking==="string")J.push({type:"thinking",text:z.thinking})}return J}function dW(f){return f.isMeta===!0||f.isCompactSummary===!0}function iW(f){if(f.length===0)return!1;for(let J of f){if(J.type!=="text")return!1;let Y=J.text.trim();if(!Y.startsWith("<command-name>")&&!Y.startsWith("<command-message>")&&!Y.startsWith("<local-command"))return!1}return!0}import{appendFile as qu,mkdir as Qu,readFile as G3,readdir as NH,stat as X3,unlink as Hu,writeFile as Bu}from"fs/promises";import{homedir as lW}from"os";import wZ from"path";function q3(f){return f.replace(/[/.]/g,"-")}async function pG(f){if(!f)return[];let J=wZ.join(lW(),".claude","projects",q3(f)),Y;try{Y=await NH(J)}catch{return[]}let z=[];for(let G of Y){if(!G.endsWith(".jsonl"))continue;let X=wZ.join(J,G),q=0;try{q=(await X3(X)).mtimeMs}catch{}z.push({sessionId:G.slice(0,-6),path:X,mtimeMs:q})}return z.sort((G,X)=>X.mtimeMs-G.mtimeMs),z}async function aW(f){return(await pG(f))[0]?.mtimeMs??0}async function $W(f,J=Z3){let Y=J.projectsDir(),z=await J.readdir(Y);for(let G of z){let X=wZ.join(Y,G,`${f}.jsonl`),q;try{q=await J.readFile(X)}catch{continue}return Q3(H3(q,f))}return[]}function Q3(f){return f.map((J,Y)=>({msg:J,idx:Y})).sort((J,Y)=>{if(J.msg.timestamp<Y.msg.timestamp)return-1;if(J.msg.timestamp>Y.msg.timestamp)return 1;return J.idx-Y.idx}).map((J)=>J.msg)}function H3(f,J){let Y=[];for(let z of f.split(`
|
|
24
|
+
`)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!yH(X))continue;let q=B3(X,J);if(q)Y.push(q)}return Y}function B3(f,J){if(dW(f))return null;let Y=yH(f.message)?f.message:f,z=Y.role;if(z!=="user"&&z!=="assistant"&&z!=="system")return null;if(!("content"in Y))return null;let G=nW(Y.content);if(z==="user"&&iW(G))return null;let X=typeof f.timestamp==="string"?f.timestamp:new Date().toISOString(),q=typeof f.sessionId==="string"?f.sessionId:J,Q=j3(Y.usage);return Q?{role:z,blocks:G,timestamp:X,sessionId:q,usage:Q}:{role:z,blocks:G,timestamp:X,sessionId:q}}function j3(f){if(!yH(f))return;let J=typeof f.input_tokens==="number"?f.input_tokens:void 0,Y=typeof f.output_tokens==="number"?f.output_tokens:void 0;if(J===void 0||Y===void 0)return;let z=typeof f.cache_read_input_tokens==="number"?f.cache_read_input_tokens:void 0,G=typeof f.cache_creation_input_tokens==="number"?f.cache_creation_input_tokens:void 0;return{input_tokens:J,output_tokens:Y,...z!==void 0?{cache_read_input_tokens:z}:{},...G!==void 0?{cache_creation_input_tokens:G}:{}}}function yH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var Z3;var bH=k(()=>{Z3={projectsDir(){return wZ.join(lW(),".claude","projects")},async readdir(f){try{return await NH(f)}catch{return[]}},async readFile(f){return await G3(f,"utf8")},async pathExists(f){try{return await NH(f),!0}catch{return!1}}}});import{fileURLToPath as pW}from"url";function Cf(){if(import.meta.url.endsWith(".js"))return["kobe"];let J=pW(new URL("./index.ts",import.meta.url)),Y=pW(import.meta.resolve("@opentui/solid/preload"));return[process.execPath,"--preload",Y,"--conditions=browser",J]}var lJ=()=>{};function SH(f,J={}){if(J.bareSafe&&W3.test(f))return f;return`'${f.replace(/'/g,"'\\''")}'`}function hZ(f,J={}){return f.map((Y)=>SH(Y,J)).join(" ")}var W3;var IH=k(()=>{W3=/^[A-Za-z0-9_/.:=-]+$/});function sG(f){return`kobe-hidden-${f.replace(/[^A-Za-z0-9_-]/g,"")||"session"}`}function oW(f){let J=Number.parseInt(f.replace(/^@/,""),10);return Number.isFinite(J)&&J>=0?1000+J:1000}function zz(f){if(!Number.isFinite(f))return Jz;return Math.max(V3,Math.min(K3,Math.round(f)))}function rJ(f){if(!Number.isFinite(f))return null;return Math.max(U3,Math.min(D3,Math.round(f)))}function Xf(f){return SH(f)}function g1(f){return hZ(f)}function R1(f){return`${f}; __rc=$?; [ "$__rc" -ne 0 ] && printf '${"\\n \u26A0 Engine exited (code %s). Check Settings \u2192 Engines, fix the launch command, then press R to relaunch.\\n\\n"}' "$__rc"; exec "\${SHELL:-/bin/sh}"`}function TH(f){return`'${f.replace(/'/g,"'\\''")}'`}function sW(){return`clear; printf ${TH("\\n No task selected\\n\\n Press N to create a task, or pick one on the left.\\n\\n")}; exec "\${SHELL:-/bin/sh}"`}function tW(f,J){let Y=R1(f),z=J?.initScript?.trim();if(!z)return Y;let G=["{",z,"}"].join(`
|
|
25
|
+
`);if(J?.markerPath){let X=TH(J.markerPath),q=TH(L3(J.markerPath));return[`if [ ! -f ${X} ]; then`,G,`if [ $? -eq 0 ]; then mkdir -p ${q} && : > ${X}; fi`,"fi",Y].join(`
|
|
26
|
+
`)}return[G,Y].join(`
|
|
27
|
+
`)}function L3(f){let J=f.lastIndexOf("/");return J<=0?".":f.slice(0,J)}function _W(f){return`cd ${Xf(f)} && while :; do clear; printf "\\033[1m# %s\\033[0m\\n\\n" ${Xf(f)}; git status --short --branch 2>/dev/null | sed 's/^/ /' || true; printf "\\n"; if command -v lsd >/dev/null 2>&1; then lsd --tree --git -I node_modules -I .git --depth 2 .; elif command -v eza >/dev/null 2>&1; then eza --tree --git -L 2 -I 'node_modules|.git' .; elif command -v tree >/dev/null 2>&1; then tree -L 2 -I 'node_modules|.git'; else ls -la; fi; sleep 2; done`}function eW(f){let J=Xf(f.worktree),Y=Xf(f.relPath),z=f.cliInvocation.map(Xf).join(" "),G=`cd ${J} && if ! git diff --quiet HEAD -- ${Y} 2>/dev/null; then git diff HEAD -- ${Y} | { delta --paging=always 2>/dev/null || less -R; }; else bat --style=plain --paging=always ${Y} 2>/dev/null || \${PAGER:-less} ${Y} 2>/dev/null || cat ${Y}; fi`;return`${z} ops --worktree ${J} --preview ${Y} || { ${G}; }`}function fV(f){return`${g1([...f.cliInvocation,"update-page"])}`}function JV(f){let J=f.opener??"open";return[`tmux -L ${Xf(f.tmuxSocket)} capture-pane -Jp -t '#{pane_id}' -S -500`,`grep -oiE 'https?://[^ "'\\''()<>]+'`,"awk '!seen[$0]++'","{ command -v fzf >/dev/null && fzf --reverse || tail -1; }",`xargs -I{} ${J} {}`].join(" | ")}function DY(f,J={}){let Y=[...f,"tasks"];if(J.initialTaskId)Y.push("--initial-task-id",J.initialTaskId);return g1(Y)}function nz(f){if(f.taskId&&f.claudePaneId){let J=f.cliInvocation.map(Xf).join(" "),Y=f.vendor?` --vendor ${Xf(f.vendor)}`:"";return`KOBE_FILETREE_WATCH=1 ${J} ops --task-id ${Xf(f.taskId)} --worktree ${Xf(f.cwd)} --target-pane ${Xf(f.claudePaneId)}${Y} || { ${_W(f.cwd)}; }`}return _W(f.cwd)}var Jz=32,i1="tasks",Yz="claude",GJ="ops",XJ="shell",_G="workspace_aux",uH=4,ZJ="@kobe_hidden_shell_pane",A1="@kobe_hidden_tasks_pane",UY="@kobe_zen_panes",oG="@kobe_zen",aJ="@kobe_tasks_width",V3=16,K3=120,PZ=60,tG=50,Gz="@kobe_right_width_pct",$J="@kobe_ops_height_pct",U3=10,D3=90;var qJ=k(()=>{IH()});import{mkdir as M3,readFile as F3,writeFile as O3}from"fs/promises";import{dirname as A3}from"path";function g3(f){if(typeof f!=="string")return"other";if(f==="rate_limit"||f==="overloaded")return"rate_limit";if(f==="billing_error")return"billing";return"other"}function kJ(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}async function C3(f){try{let J=JSON.parse(await F3(f,"utf8"));return kJ(J)?J:{}}catch{return{}}}function k3(f){if(!kJ(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>kJ(J)&&typeof J.command==="string"&&J.command.includes(EH))}function N3(f){if(!kJ(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>kJ(J)&&typeof J.command==="string"&&R3.some((Y)=>J.command.includes(Y)))}function y3(f,J){let{hooks:Y,...z}=f,{WorktreeCreate:G,...X}=kJ(Y)?Y:{},Q=(Array.isArray(G)?G:[]).filter((B)=>!k3(B));if(J!==null)Q.push({hooks:[{type:"command",command:J}]});let H={...X};if(Q.length>0)H.WorktreeCreate=Q;return Object.keys(H).length>0?{...z,hooks:H}:{...z}}function b3(f=Cf()){let J={};for(let{event:Y,matcher:z,verb:G}of vZ){let q={hooks:[{type:"command",command:g1([...f,"hook",G])}]};if(z)q.matcher=z;J[Y]=[q]}return J}function YV(f,J,Y=Cf()){let{hooks:z,...G}=f,X=kJ(z)?{...z}:{},q=J?b3(Y):{};for(let{event:Q}of vZ){let B=(Array.isArray(X[Q])?X[Q]:[]).filter((V)=>!N3(V));if(J&&Array.isArray(q[Q]))B.push(...q[Q]);if(B.length>0)X[Q]=B;else delete X[Q]}return Object.keys(X).length>0?{...G,hooks:X}:{...G}}function S3(f=Cf()){return{PostToolUse:[{matcher:"Bash",hooks:[{type:"command",command:g1([...f,"hook",EH])}]}]}}function I3(f){if(!kJ(f)||!Array.isArray(f.hooks))return!1;return f.hooks.some((J)=>kJ(J)&&typeof J.command==="string"&&J.command.includes(EH))}function zV(f,J,Y=Cf()){let{hooks:z,...G}=f,X=kJ(z)?{...z}:{},q="PostToolUse",H=(Array.isArray(X.PostToolUse)?X.PostToolUse:[]).filter((B)=>!I3(B));if(J)H.push(...S3(Y).PostToolUse);if(H.length>0)X.PostToolUse=H;else delete X.PostToolUse;return Object.keys(X).length>0?{...G,hooks:X}:{...G}}class xH{vendor="claude";supportsHooks(){return!0}activityDetailFromPayload(f,J){if(f==="turn-failed")return{failure:g3(J.error_type)};if(f==="awaiting-input")return{waiting:"permission"};return}supportsWorktreeSync(){return!0}async installActivityHooks(f){await this.editSettings(f,(J)=>YV(J,!0))}async removeActivityHooks(f){await this.editSettings(f,(J)=>YV(J,!1))}async removeWorktreeSyncHook(f){await this.editSettings(f,(J)=>y3(J,null))}async installWorktreeWatchHook(f){await this.editSettings(f,(J)=>zV(J,!0))}async removeWorktreeWatchHook(f){await this.editSettings(f,(J)=>zV(J,!1))}async editSettings(f,J){try{let Y=await C3(f),z=J(Y);if(JSON.stringify(z)===JSON.stringify(Y))return;await M3(A3(f),{recursive:!0}),await O3(f,`${JSON.stringify(z,null,2)}
|
|
28
|
+
`)}catch{}}}var vZ,Cu,R3,EH="worktree-created";var GV=k(()=>{lJ();qJ();vZ=[{event:"SessionStart",verb:"session-start"},{event:"UserPromptSubmit",verb:"turn-start"},{event:"Stop",verb:"turn-complete"},{event:"StopFailure",verb:"turn-failed"},{event:"Notification",matcher:"permission_prompt",verb:"awaiting-input"},{event:"SessionEnd",verb:"session-end"}],Cu=vZ.map((f)=>f.event);R3=vZ.map((f)=>g1(["hook",f.verb]))});function wH(f){if(typeof f==="string")return f.length>0?[{type:"text",text:f}]:[];if(!Array.isArray(f))return[];let J=[];for(let Y of f){if(typeof Y==="string"){if(Y.length>0)J.push({type:"text",text:Y});continue}if(!T3(Y))continue;let z=typeof Y.type==="string"?Y.type:void 0;if(z==="input_text"||z==="output_text"){let G=typeof Y.text==="string"?Y.text:"";if(G.length>0)J.push({type:"text",text:G});continue}if(z)J.push({type:"text",text:`[codex: ${z}]`})}return J}function T3(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function XV(f){if(f.length===0)return!1;for(let J of f){if(J.type!=="text")return!1;let Y=(J.text??"").trim();if(!u3(Y)&&!E3(Y))return!1}return!0}function u3(f){return f.startsWith("<environment_context>")&&f.endsWith("</environment_context>")}function E3(f){return f.startsWith("# AGENTS.md instructions for ")&&f.includes(`
|
|
29
29
|
<INSTRUCTIONS>
|
|
30
|
-
`)&&
|
|
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 qV(f,J={}){let Y=hH(f.input_tokens,0),z=hH(f.cached_input_tokens,0),G=hH(f.output_tokens,0),X=Math.max(0,Y-z);if(Y<=0&&G<=0&&z<=0)return;return{input_tokens:X,output_tokens:G,...z>0?{cache_read_input_tokens:z}:{},...x3(J.contextWindowTokens)?{context_window_tokens:J.contextWindowTokens}:{}}}function hH(f,J){return typeof f==="number"&&Number.isFinite(f)?f:J}function x3(f){return typeof f==="number"&&Number.isFinite(f)&&f>0}import{readFile as w3,readdir as h3,stat as P3,unlink as Tu}from"fs/promises";import{homedir as v3}from"os";import Xz from"path";async function cH(f=Zz){let J=f.sessionsDir(),Y=(await f.readdir(J)).sort().reverse(),z=[];for(let G of Y){let X=Xz.join(J,G),q=(await f.readdir(X)).sort().reverse();for(let Q of q){let H=Xz.join(X,Q),B=(await f.readdir(H)).sort().reverse();for(let V of B){let j=Xz.join(H,V),U=(await f.readdir(j)).filter((L)=>L.startsWith("rollout-")&&L.endsWith(".jsonl"));U.sort().reverse();for(let L of U)z.push(Xz.join(j,L))}}}return z}async function m3(f,J=Zz){if(!f)return;let Y=f.toLowerCase(),z=await cH(J);for(let G of z)if(Xz.basename(G).match(jV)?.[1]?.toLowerCase()===Y)return G;return}function c3(f){for(let J of f.split(`
|
|
31
|
+
`)){let Y=J.trim();if(!Y)continue;try{let z=JSON.parse(Y);if(z.type==="session_meta")return z.payload?.cwd??""}catch{}return""}return""}async function WV(f,J){let Y=QV.get(J);if(!Y)Y=new Map,QV.set(J,Y);let z=Y.get(f);if(z!==void 0)return z;let G;try{G=await J.readFile(f)}catch{return null}let X=c3(G);if(X)Y.set(f,X);return X}async function VV(f,J=Zz){if(!f)return[];let Y=await cH(J),z=[],G=0;for(let X of Y){if(G>=n3)break;if(G++,await WV(X,J)!==f)continue;let q=Xz.basename(X).match(jV)?.[1];if(q)z.push(q)}return z.reverse()}async function nH(f,J=Zz){if(!f)return null;let Y=await cH(J),z=0;for(let G of Y){if(z>=d3)break;if(z++,await WV(G,J)!==f)continue;try{return{path:G,mtimeMs:(await J.stat(G)).mtimeMs}}catch{}}return null}async function KV(f,J=Zz){return(await nH(f,J))?.mtimeMs??0}async function UV(f,J=Zz){return(await i3(f,J)).messages}async function i3(f,J=Zz){let Y=await m3(f,J);if(!Y)return{messages:[]};let z;try{z=await J.readFile(Y)}catch{return{messages:[]}}let G=l3(a3(z,f)),X=o3(z);return{messages:G,...X?{usageMetrics:X}:{}}}function l3(f){return f.map((J,Y)=>({msg:J,idx:Y})).sort((J,Y)=>{if(J.msg.timestamp<Y.msg.timestamp)return-1;if(J.msg.timestamp>Y.msg.timestamp)return 1;return J.idx-Y.idx}).map((J)=>J.msg)}function a3(f,J){let Y=[];for(let z of f.split(`
|
|
32
|
+
`)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!eG(X))continue;if(X.type!=="response_item")continue;let q=eG(X.payload)?X.payload:void 0;if(!q)continue;let Q=typeof X.timestamp==="string"?X.timestamp:new Date().toISOString(),H=$3(q,Q,J);if(H)Y.push(H)}return Y}function $3(f,J,Y){if(f.type==="message"){let z=f.role;if(z!=="user"&&z!=="assistant"&&z!=="system")return;let G=wH(f.content);if(z==="user"&&XV(G))return;return{role:z,blocks:G,timestamp:J,sessionId:Y}}if(f.type==="reasoning")return r3(f,J,Y);if(f.type==="function_call")return PH(f,J,Y,{name:mH(f.name,"function_call"),input:vH(f.arguments)});if(f.type==="custom_tool_call")return PH(f,J,Y,{name:mH(f.name,"custom_tool_call"),input:vH(f.input)});if(f.type==="tool_search_call")return PH(f,J,Y,{name:"tool_search_call",input:mZ(f,["type","call_id","status"])});if(f.type==="function_call_output"||f.type==="custom_tool_call_output")return HV(f,J,Y,vH(f.output));if(f.type==="tool_search_output")return HV(f,J,Y,mZ(f,["type","call_id"]));if(f.type==="web_search_call"||f.type==="image_generation_call"||f.type==="local_shell_call")return p3(f,J,Y);return}function r3(f,J,Y){let z=_3(f);if(z.length===0)return;return{role:"assistant",blocks:[{type:"thinking",text:z}],timestamp:J,sessionId:Y}}function PH(f,J,Y,z){let G=typeof f.call_id==="string"?f.call_id:void 0;if(!G)return;return{role:"assistant",blocks:[{type:"tool_call",callId:G,name:z.name,input:z.input}],timestamp:J,sessionId:Y}}function HV(f,J,Y,z){let G=typeof f.call_id==="string"?f.call_id:void 0;if(!G)return;return{role:"user",blocks:[{type:"tool_result",callId:G,output:z,isError:!1}],timestamp:J,sessionId:Y}}function p3(f,J,Y){let z=typeof f.type==="string"?f.type:"tool",G=typeof f.call_id==="string"&&f.call_id.length>0?f.call_id:`${z}:${J}`,X=mH(f.name,z),q=mZ(f,["type","call_id","status"]),Q=mZ(f,["type","call_id"]);return{role:"assistant",timestamp:J,sessionId:Y,blocks:[{type:"tool_call",callId:G,name:X,input:q},{type:"tool_result",callId:G,output:Q,isError:!1}]}}function _3(f){let J=BV(f.content);if(J.length>0)return J;let Y=typeof f.text==="string"?f.text:"";if(Y.length>0)return Y;return BV(f.summary)}function BV(f){if(typeof f==="string")return f;if(!Array.isArray(f))return"";let J=[];for(let Y of f){if(typeof Y==="string"){J.push(Y);continue}if(!eG(Y))continue;let z=typeof Y.text==="string"?Y.text:"";if(z.length>0)J.push(z)}return J.join("")}function mZ(f,J){let Y={};for(let[z,G]of Object.entries(f))if(!J.includes(z))Y[z]=G;return Y}function mH(f,J){return typeof f==="string"&&f.length>0?f:J}function vH(f){if(typeof f!=="string")return f;try{return JSON.parse(f)}catch{return f}}function o3(f){let J,Y=null;for(let z of f.split(`
|
|
33
|
+
`)){let G=z.trim();if(!G)continue;let X;try{X=JSON.parse(G)}catch{continue}if(!eG(X))continue;let q=typeof X.timestamp==="string"?s3(X.timestamp):null;if(X.type==="response_item")continue;if(X.type!=="turn.completed")continue;let Q=eG(X.usage)?X.usage:void 0;if(!Q)continue;let H=qV(Q);if(!H)continue;if(q!==null&&(Y===null||q>Y))Y=q,J=H;else if(Y===null)J=H}return J}function s3(f){let J=new Date(f).getTime();return Number.isFinite(J)?J:null}function eG(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var Zz,jV,QV,n3=200,d3=12;var dH=k(()=>{ZV();Zz={sessionsDir(){return Xz.join(v3(),".codex","sessions")},async readdir(f){try{return await h3(f)}catch{return[]}},async readFile(f){return await w3(f,"utf8")},stat:P3};jV=/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.jsonl$/i;QV=new WeakMap});function LV(f){if(!cZ(f))return;let J=cZ(f.modelMetrics)?f.modelMetrics:void 0;if(!J)return;let Y=0,z=0,G=0;for(let q of Object.values(J)){if(!cZ(q)||!cZ(q.usage))continue;Y+=nZ(q.usage.inputTokens,0),z+=nZ(q.usage.outputTokens,0),G+=nZ(q.usage.cacheReadTokens,0)}let X=nZ(f.currentTokens,0);if(Y===0&&z===0&&G===0&&X===0)return;return{input_tokens:Y,output_tokens:z,...G>0?{cache_read_input_tokens:G}:{},...X>0?{context_tokens:X}:{}}}function cZ(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function nZ(f,J){return typeof f==="number"&&Number.isFinite(f)?f:J}import{readFile as t3,readdir as e3,rm as fO,stat as JO}from"fs/promises";import{homedir as YO}from"os";import LY from"path";async function lH(f=qz){let J=LY.join(f.copilotDir(),"session-state");return(await f.readdir(J)).map((z)=>LY.join(J,z))}async function MV(f,J=qz){let Y=[];for(let z of await lH(J)){let G=await aH(z,J);if(G.cwd!==f)continue;Y.push({id:G.id??LY.basename(z),updatedAt:G.updatedAt??""})}return Y.sort((z,G)=>z.updatedAt.localeCompare(G.updatedAt)).map((z)=>z.id)}async function FV(f,J=qz){if(!f)return 0;let Y=0;for(let z of await lH(J)){if((await aH(z,J)).cwd!==f)continue;try{let{mtimeMs:X}=await J.stat(LY.join(z,"events.jsonl"));if(X>Y)Y=X}catch{}}return Y}async function zO(f,J=qz){let Y=await GO(f,J);if(!Y)return{messages:[]};let z=await J.readFile(LY.join(Y,"events.jsonl")).catch(()=>""),G=ZO(z,f);return{messages:G.messages,...G.usageMetrics?{usageMetrics:G.usageMetrics}:{}}}async function OV(f,J=qz){return(await zO(f,J)).messages}async function GO(f,J=qz){for(let Y of await lH(J)){if(LY.basename(Y)===f)return Y;let z=await aH(Y,J);if(z.id===f||z.name?.toLowerCase()===f.toLowerCase())return Y}return}async function aH(f,J=qz){let Y=await J.readFile(LY.join(f,"workspace.yaml")).catch(()=>"");return XO(Y)}function XO(f){let J={};for(let Y of f.split(`
|
|
34
|
+
`)){let z=Y.match(/^([A-Za-z_]+):\s*(.*)$/);if(!z)continue;let G=z[1],X=z[2]??"";if(X.startsWith('"')&&X.endsWith('"'))X=X.slice(1,-1).replace(/\\"/g,'"');J[G]=X}return{id:J.id,cwd:J.cwd,name:J.name,updatedAt:J.updated_at,createdAt:J.created_at}}function ZO(f,J){let Y=[],z=new Map,G=J,X,q=null;for(let Q of f.split(`
|
|
35
|
+
`)){let H=Q.trim();if(!H)continue;let B;try{B=JSON.parse(H)}catch{continue}if(!iH(B)||typeof B.type!=="string")continue;let V=typeof B.timestamp==="string"?B.timestamp:new Date().toISOString(),j=iH(B.data)?B.data:{};if(B.type==="session.start"){let U=typeof j.sessionId==="string"?j.sessionId:void 0;if(U)G=U;continue}if(B.type==="user.message"){let U=typeof j.content==="string"?j.content:"";if(!U)continue;if(!q)q=Buffer.from(U.slice(0,qO),"utf8").toString("utf8");Y.push({role:"user",blocks:[{type:"text",text:U}],timestamp:V,sessionId:G});continue}if(B.type==="assistant.message"){let U=[],L=typeof j.content==="string"?j.content:"";if(L)U.push({type:"text",text:L});let O=Array.isArray(j.toolRequests)?j.toolRequests:[];for(let M of O){if(!iH(M))continue;let R=typeof M.id==="string"?M.id:typeof M.toolCallId==="string"?M.toolCallId:"tool",S=typeof M.name==="string"?M.name:typeof M.toolName==="string"?M.toolName:"tool";U.push({type:"tool_call",callId:R,name:S,input:M.arguments??{}})}if(U.length>0)Y.push({role:"assistant",blocks:U,timestamp:V,sessionId:G});continue}if(B.type==="tool.execution_start"){let U=typeof j.toolCallId==="string"?j.toolCallId:void 0,L=typeof j.toolName==="string"?j.toolName:"tool";if(U)z.set(U,L);continue}if(B.type==="tool.execution_complete"){let U=typeof j.toolCallId==="string"?j.toolCallId:void 0;if(!U)continue;let L=z.get(U)??(typeof j.toolName==="string"?j.toolName:"tool"),O=j.result??(j.success===!1?{success:!1}:void 0);Y.push({role:"assistant",blocks:[{type:"tool_result",callId:U,output:O,isError:j.success===!1}],timestamp:V,sessionId:G});continue}if(B.type==="session.shutdown")X=LV(j)}return{messages:Y,usageMetrics:X,firstUserMessage:q}}function iH(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var qz,qO=200;var AV=k(()=>{qz={copilotDir(){let f=process.env.COPILOT_HOME?.trim();if(f)return f;return LY.join(YO(),".copilot")},async readdir(f){try{return await e3(f)}catch{return[]}},async readFile(f){return await t3(f,"utf8")},stat:JO,async rm(f){await fO(f,{recursive:!0,force:!0})}}});function $H(f){return pf(f).createHookAdapter()}class fX{vendor;constructor(f){this.vendor=f}supportsHooks(){return!1}activityDetailFromPayload(){return}async installActivityHooks(){}async removeActivityHooks(){}supportsWorktreeSync(){return!1}async removeWorktreeSyncHook(){}async installWorktreeWatchHook(){}async removeWorktreeWatchHook(){}}var rH=k(()=>{MY()});import{readFile as gV}from"fs/promises";class dZ{supportsCompletionMarkers(){return!0}}function RV(f){return pf(f).createTurnDetector()}function jO(f,J="claude",Y=0){let z=null,G=0;for(let X of f.split(`
|
|
36
|
+
`)){G++;let q=CV(X);if(!q)continue;let Q=NV(q.message)?q.message:q;if(Q.role!=="assistant")continue;if(!("content"in Q))continue;let H=kV(q,Y),B={id:`claude:${J}:${H}:${G}`,timestampMs:H,source:"claude"};if(!z||B.timestampMs>=z.timestampMs)z=B}return z}function WO(f,J="codex"){let Y=null,z=0;for(let G of f.split(`
|
|
37
|
+
`)){z++;let X=CV(G);if(!X||X.type!=="turn.completed")continue;let q=kV(X,0),Q={id:`codex:${J}:${q}:${z}`,timestampMs:q,source:"codex"};if(!Y||Q.timestampMs>=Y.timestampMs)Y=Q}return Y}function CV(f){let J=f.trim();if(!J)return null;try{let Y=JSON.parse(J);return NV(Y)?Y:null}catch{return null}}function kV(f,J){let Y=typeof f.timestamp==="string"?Date.parse(f.timestamp):Number.NaN;return Number.isFinite(Y)?Y:J}function NV(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}var HO,pH,BO,_H,iZ;var oH=k(()=>{bH();dH();MY();HO={listSessionFiles:(f)=>pG(f),readFile:(f)=>gV(f,"utf8")};pH=class pH extends dZ{deps;vendor="claude";cache=new Map;constructor(f=HO){super();this.deps=f}async latestCompletion(f){let J=await this.deps.listSessionFiles(f),Y=null,z=new Map;for(let G of J.slice(0,4)){let X=this.cache.get(G.path),q;if(X&&G.mtimeMs>0&&X.mtimeMs===G.mtimeMs)q=X.marker;else{let Q=await this.deps.readFile(G.path).catch(()=>"");q=jO(Q,G.path,G.mtimeMs)}if(z.set(G.path,{mtimeMs:G.mtimeMs,marker:q}),q&&(!Y||q.timestampMs>Y.timestampMs))Y=q}return this.cache=z,Y}};BO={findLatestRollout:(f)=>nH(f),readFile:(f)=>gV(f,"utf8")};_H=class _H extends dZ{deps;vendor="codex";cache=null;constructor(f=BO){super();this.deps=f}async latestCompletion(f){if(!f)return null;let J=await this.deps.findLatestRollout(f);if(!J)return null;if(this.cache&&this.cache.path===J.path&&J.mtimeMs>0&&this.cache.mtimeMs===J.mtimeMs)return this.cache.marker;let Y=await this.deps.readFile(J.path).catch(()=>"");if(!Y)return null;let z=WO(Y,J.path);return this.cache={path:J.path,mtimeMs:J.mtimeMs,marker:z},z}};iZ=class iZ extends dZ{vendor;constructor(f){super();this.vendor=f}supportsCompletionMarkers(){return!1}async latestCompletion(){return null}}});function MO(f){return{vendor:f,builtin:!1,displayName:f,defaultCommand:[f],history:VO,detectAccount:async()=>({binary:{found:!1,error:"custom engine: kobe has no account detector for it"},account:{kind:"none"}}),createHookAdapter:()=>new fX(f),createTurnDetector:()=>new iZ(f)}}function pf(f){return Q1(f)?LO[f]:MO(f)}var VO,KO,UO,DO,LO;var MY=k(()=>{K1();fz();bH();GV();dH();AV();rH();oH();VO={async listSessionIdsForWorktree(){return[]},async readHistory(){return[]},async latestTranscriptMtimeForWorktree(){return 0}},KO={async listSessionIdsForWorktree(f){return[...await pG(f)].sort((Y,z)=>Y.mtimeMs-z.mtimeMs).map((Y)=>Y.sessionId)},readHistory:(f)=>$W(f),latestTranscriptMtimeForWorktree:(f)=>aW(f)},UO={listSessionIdsForWorktree:(f)=>VV(f),readHistory:(f)=>UV(f),latestTranscriptMtimeForWorktree:(f)=>KV(f)},DO={listSessionIdsForWorktree:(f)=>MV(f),readHistory:(f)=>OV(f),latestTranscriptMtimeForWorktree:(f)=>FV(f)},LO={claude:{vendor:"claude",builtin:!0,displayName:"Claude",defaultCommand:["claude"],history:KO,detectAccount:(f)=>uZ(f),createHookAdapter:()=>new xH,createTurnDetector:()=>new pH},codex:{vendor:"codex",builtin:!0,displayName:"Codex",defaultCommand:["codex"],effortLevels:["none","low","medium","high","xhigh"],history:UO,detectAccount:(f)=>EZ(f),createHookAdapter:()=>new fX("codex"),createTurnDetector:()=>new _H},copilot:{vendor:"copilot",builtin:!0,displayName:"Copilot",defaultCommand:["copilot"],history:DO,detectAccount:(f)=>xZ(f),createHookAdapter:()=>new fX("copilot"),createTurnDetector:()=>new iZ("copilot")}}});function yV(f){let J=f.find((G)=>G.role==="user");if(!J)return"";let Y=J.blocks.filter((G)=>G.type==="text").map((G)=>G.text).join(" "),z=VW(Y);return z.length>0?Buffer.from(z,"utf8").toString("utf8"):z}async function dz(f,J=Sf){if(!f)return"";let{history:Y}=pf(J),z=await Y.listSessionIdsForWorktree(f);for(let G of z.slice(0,FO)){let X=yV(await Y.readHistory(G));if(X)return X}return""}async function bV(f,J){if(!J)return"";try{return yV(await pf(f).history.readHistory(J))}catch{return""}}var FO=8;var lZ=k(()=>{MY();S1()});function iz(f,J,Y){if(!J)return f;let z=wz(J);return z.ensureReady(),z.wrapCommand(f,{tty:!0,cwd:Y})}function _f(){let f=[];for(let J of["KOBE_HOME_DIR","KOBE_DAEMON_SOCKET_PATH","KOBE_TMUX_SOCKET"]){let Y=process.env[J];if(Y&&Y.length>0)f.push(`${J}=${Xf(Y)}`)}return f.length>0?`${f.join(" ")} `:""}var JX="@kobe_remote";var Qz=k(()=>{e1();qJ()});var XX={};jf(XX,{windowIsSurface:()=>kO,windowCount:()=>gO,tmuxSessionName:()=>Lf,tmuxCommandSequence:()=>tH,tmuxAvailable:()=>NJ,tmuxArgs:()=>Hz,tagPaneRole:()=>TV,tagClaudePane:()=>CO,switchClientBeforeKill:()=>bJ,setWindowOption:()=>AY,setSessionOption:()=>FY,sessionExists:()=>Hf,sendKeys:()=>$Z,sendKeyName:()=>GX,runTmuxSequenceCapturing:()=>YX,runTmuxSequence:()=>Pf,runTmuxCapturing:()=>d0,runTmux:()=>h0,paneIdByRole:()=>fB,newWindow:()=>HJ,killSession:()=>l1,globalTasksPaneWidth:()=>aZ,getSessionOptions:()=>C1,getSessionOption:()=>Bz,getServerOptions:()=>OY,getServerOption:()=>IV,ensureFallbackSession:()=>rZ,currentSessionName:()=>k1,claudePaneIdStrict:()=>$z,claudePaneId:()=>JB,capturePaneById:()=>rz,attachArgv:()=>az,SURFACE_WINDOW_OPTION:()=>YB,PANE_ROLE_OPTION:()=>zX,KOBE_TMUX_SOCKET:()=>QJ,KOBE_HOME_SESSION:()=>uV,CLAUDE_ROLE_OPTION:()=>RO,CHAT_TAB_SESSION_ID_OPTION:()=>yJ});import{homedir as OO}from"os";function Hz(...f){return["tmux","-L",QJ,...f]}function Lf(f){return`kobe-${f.replace(/[^A-Za-z0-9_-]/g,"")}`}function az(f){return Hz("attach-session","-t",`=${f}`)}async function sH(f){if(!f)return"";try{return await new Response(f).text()}catch{return""}}async function h0(f){try{let J=Bun.spawn(Hz(...f),{stdin:"ignore",cwd:lz,stdout:"ignore",stderr:"pipe"}),[Y,z]=await Promise.all([sH(J.stderr),J.exited]);if(z!==0&&Y.trim().length>0)console.error(`[kobe tmux] ${f.join(" ")} (${z}): ${Y.trim()}`);return z}catch{return 1}}async function AO(f){try{return await Bun.spawn(Hz(...f),{stdin:"ignore",cwd:lz,stdout:"ignore",stderr:"ignore"}).exited}catch{return 1}}function tH(f){let J=[];for(let Y of f){if(Y.length===0)continue;if(J.length>0)J.push(";");J.push(...Y)}return J}async function Pf(f){let J=tH(f);return J.length===0?0:h0(J)}async function d0(f){try{let J=Bun.spawn(Hz(...f),{stdin:"ignore",cwd:lz,stdout:"pipe",stderr:"pipe"}),[Y,z,G]=await Promise.all([sH(J.stdout),sH(J.stderr),J.exited]);if(G!==0&&z.trim().length>0)console.error(`[kobe tmux] ${f.join(" ")} (${G}): ${z.trim()}`);return{code:G,stdout:Y}}catch{return{code:1,stdout:""}}}async function YX(f){let J=tH(f);return J.length===0?{code:0,stdout:""}:d0(J)}async function NJ(){try{return await Bun.spawn(["tmux","-V"],{stdin:"ignore",cwd:lz,stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function Hf(f){return await AO(["has-session","-t",`=${f}`])===0}async function gO(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return 0;return Y.split(`
|
|
38
|
+
`).filter((z)=>z.trim().length>0).length}async function FY(f,J,Y){await h0(["set-option","-t",f,J,Y])}async function Bz(f,J){let{code:Y,stdout:z}=await d0(["show-options","-v","-t",f,J]);return Y===0?z.trim():""}async function C1(f,J){let Y=Object.fromEntries(J.map((X)=>[X,void 0])),{code:z,stdout:G}=await YX(J.map((X)=>["show-options","-q","-t",f,X]));if(z!==0)return Y;for(let X of G.split(`
|
|
39
|
+
`)){let q=X.indexOf(" ");if(q<=0)continue;let Q=X.slice(0,q);if(Q in Y)Y[Q]=X.slice(q+1).trim()}return Y}async function IV(f){let{code:J,stdout:Y}=await d0(["show-options","-sqv",f]);return J===0?Y.trim():""}async function OY(f){let J=Object.fromEntries(f.map((G)=>[G,void 0])),{code:Y,stdout:z}=await YX(f.map((G)=>["show-options","-sq",G]));if(Y!==0)return J;for(let G of z.split(`
|
|
40
|
+
`)){let X=G.indexOf(" ");if(X<=0)continue;let q=G.slice(0,X);if(q in J)J[q]=G.slice(X+1).trim()}return J}async function aZ(){let f=await IV(aJ),J=Number.parseInt(f,10);return Number.isFinite(J)&&J>0?zz(J):Jz}async function TV(f,J){await h0(["set-option","-p","-t",f,zX,J])}async function AY(f,J,Y){await h0(["set-window-option","-t",f,J,Y])}async function CO(f){await TV(f,eH)}async function fB(f,J,Y=!1){let{code:z,stdout:G}=await d0(["list-panes","-t",`=${f}`,"-F",`#{pane_id} #{${zX}}`]);if(z!==0)return"";let X="";for(let q of G.split(`
|
|
41
|
+
`)){let[Q,H]=q.split("\t");if(!Q)continue;if(!X)X=Q.trim();if(H?.trim()===J)return Q.trim()}return Y?X:""}async function JB(f){return fB(f,eH,!0)}async function $z(f){return fB(f,eH,!1)}async function rz(f,J){if(!f)return"";let Y=["capture-pane","-t",f,"-p"];if(typeof J==="number"&&J>0)Y.push("-S",String(-J));let{code:z,stdout:G}=await d0(Y);return z===0?G:""}async function $Z(f,J){await h0(["send-keys","-t",f,"-l","--",J])}async function GX(f,J){await h0(["send-keys","-t",f,J])}async function HJ(f,J){let Y=["new-window","-t",`=${f}`,"-c",J.cwd];if(J.name)Y.push("-n",J.name);if(J.surface){Y.push("-P","-F","#{window_id}"),Y.push(J.command);let{code:z,stdout:G}=await d0(Y),X=G.trim();if(z===0&&X)await AY(X,YB,"1");return}Y.push(J.command),await h0(Y)}async function kO(f){let{code:J,stdout:Y}=await d0(["display-message","-t",f,"-p",`#{${YB}}`]);return J===0&&Y.trim()==="1"}async function k1(){let f=["display-message","-p"],J=process.env.TMUX_PANE;if(J&&J.length>0)f.push("-t",J);f.push("#{session_name}");let{code:Y,stdout:z}=await d0(f),G=z.trim();return Y===0&&G.length>0?G:null}async function l1(f){if(!f.startsWith("kobe-hidden-")){let J=sG(f);if(await Hf(J))await h0(["kill-session","-t",`=${J}`])}if(await Hf(f))await h0(["kill-session","-t",`=${f}`])}async function rZ(){let f=uV;if(await Hf(f)){if(await Bz(f,SV)==="tasks")return f;await h0(["kill-session","-t",`=${f}`])}let Y=(await d0(["new-session","-d","-s",f,"-c",lz,"-x","220","-y","50","-P","-F","#{pane_id}",sW()])).stdout.trim();if(Y){let z=await aZ(),X=(await d0(["split-window","-h","-b","-t",Y,"-l",`${z}`,"-c",lz,"-P","-F","#{pane_id}",R1(_f()+DY(Cf()))])).stdout.trim();if(X)await Pf([["set-option","-p","-t",X,zX,"tasks"],["select-pane","-t",X]])}return await FY(f,SV,"tasks"),f}async function bJ(f,J){if(await k1()!==f)return;if(J&&J!==f&&await Hf(J)){await h0(["switch-client","-t",`=${J}`]);return}let z=await rZ();await h0(["switch-client","-t",`=${z}`])}var QJ,lz,zX="@kobe_role",RO,eH="claude",yJ="@kobe_session_id",YB="@kobe_surface",uV="kobe-home",SV="@kobe_home";var Tf=k(()=>{lJ();Qz();qJ();QJ=process.env.KOBE_TMUX_SOCKET?.trim()||"kobe";lz=OO()||"/";RO=zX});async function NO(f,J=EV){let{code:Y,stdout:z}=await J.capture(["list-windows","-t",`=${f}`,"-F",`#{window_index} #{automatic-rename} #{${yJ}}`]);if(Y!==0)return[];let G=[];for(let X of z.split(`
|
|
42
|
+
`)){let[q,Q,H]=X.split("\t"),B=Number.parseInt((q??"").trim(),10);if(!Number.isInteger(B))continue;G.push({index:B,sessionId:H?.trim()??"",autoRename:Q?.trim()??""})}return G}async function yO(f,J,Y){let{code:z,stdout:G}=await Y.capture(["show-window-options","-t",`=${f}:${J}`,"automatic-rename"]);return z===0&&/\boff\b/.test(G)}async function bO(f){let{code:J,stdout:Y}=await f.capture(["show-window-options","-g","automatic-rename"]);return J===0&&/\boff\b/.test(Y)}async function SO(f,J,Y,z){return await z.run(["rename-window","-t",`=${f}:${J}`,"--",Y])===0}async function xV(f,J=IO){let Y=0,z=null,G=async(X,q)=>{if(q.autoRename==="1")return!1;if(q.autoRename==="0"){if(z===null)z=await bO(J.runner);if(!z)return!0}return yO(X,q.index,J.runner)};for(let X of f.listTasks()){if(X.archived||X.kind==="main"||!X.worktreePath)continue;let q=Lf(X.id),Q=await NO(q,J.runner);if(Q.length===0)continue;let H=Q.reduce((V,j)=>Math.min(V,j.index),Number.POSITIVE_INFINITY),B=X.vendor??Sf;for(let V of Q)try{if(await G(q,V))continue;let j=V.sessionId?await J.titleFromSessionId(B,V.sessionId):V.index===H?await J.titleFromWorktree(X.worktreePath,B):"";if(j&&await SO(q,V.index,j,J.runner))Y++}catch{}}return Y}var EV,IO;var wV=k(()=>{lZ();Tf();S1();EV={capture:d0,run:h0};IO={runner:EV,titleFromSessionId:bV,titleFromWorktree:dz}});function PV(f){if(f instanceof Error)return f;let J;try{J=typeof f==="string"?f:JSON.stringify(f)}catch{J=String(f)}return Error(J)}function hV(f,J,Y=new Date){let z=PV(J);return`[${Y.toISOString()}] daemon ${f}: ${z.stack??`${z.name}: ${z.message}`}
|
|
43
|
+
`}function TO(f,J,Y=new Date){let z=PV(J);return`[${Y.toISOString()}] daemon error [${f}]: ${z.stack??`${z.name}: ${z.message}`}
|
|
44
|
+
`}function uf(f,J){process.stderr.write(TO(f,J))}function uO(f,J,Y=new Date){return`[${Y.toISOString()}] daemon [${f}]: ${J}
|
|
45
|
+
`}function gY(f,J){process.stderr.write(uO(f,J))}function vV(f=(J)=>process.stderr.write(J)){if(zB||GB)return;zB=(J)=>f(hV("unhandledRejection",J)),GB=(J)=>f(hV("uncaughtException",J)),process.on("unhandledRejection",zB),process.on("uncaughtException",GB)}var zB,GB;async function EO(f,J=dz){let Y=[];for(let z of f.listTasks()){if(z.archived||z.title!==RJ||!z.worktreePath)continue;try{let G=await J(z.worktreePath,z.vendor??Sf);if(!G)continue;let X=f.getTask(z.id);if(!X||X.title!==RJ)continue;await f.setTitle(z.id,G),Y.push({id:z.id,title:G})}catch(G){uf("auto-title-poller",G)}}return Y}function mV(f,J=XB,Y){if(J<=0)return()=>{};let z=!1,X=setInterval(()=>{if(Y&&!Y())return;if(z)return;z=!0,EO(f).then(()=>xV(f)).catch((q)=>uf("auto-title-poller",q)).finally(()=>{z=!1})},J);return X.unref?.(),()=>clearInterval(X)}var XB=4000;var cV=k(()=>{lZ();lG();wV();S1()});class ZB{last=new Map;sinks=new Set;publish(f,J){this.last.set(f,J);let Y={channel:f,payload:J};for(let z of this.sinks)z(Y)}snapshot(){return[...this.last].map(([f,J])=>({channel:f,payload:J}))}onPublish(f){return this.sinks.add(f),()=>{this.sinks.delete(f)}}}function pZ(){return nf()[jz]===!0}var jz="experimental.autoStatus";var ZX=k(()=>{pY()});async function nV(f,J,Y=pZ){if(!Y())return"skipped";let z=f.getTask(J);if(!z)return"skipped";if((z.kind??"task")==="main"||z.archived)return"skipped";if(z.status!=="backlog")return"skipped";return await f.setStatus(J,"in_progress"),"moved"}var dV=k(()=>{ZX()});import{createHash as xO}from"crypto";import{homedir as wO}from"os";import CY from"path";function cO(){return CY.join(process.env.KOBE_HOME_DIR??wO(),".kobe")}function nO(f){let Y=(CY.basename(f)||"repo").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"repo",z=xO("sha1").update(CY.resolve(f)).digest("hex").slice(0,12);return`${Y}-${z}`}function dO(f){if(!CY.isAbsolute(f))throw Error(`worktreeRootFor: repo must be an absolute path, got: ${f}`);return CY.join(cO(),hO,nO(f))}function iO(f){if(!CY.isAbsolute(f))throw Error(`managedWorktreeRootsFor: repo must be an absolute path, got: ${f}`);return[dO(f),...mO.map((J)=>CY.join(f,J))]}function RY(f){return f.length>1&&f.endsWith("/")?f.slice(0,-1):f}function iV(f,J){return J===f||J.startsWith(`${f}/`)}function lV(f,J){let Y=RY(J),z,G=-1;for(let X of f){if(!X.worktreePath)continue;let q=RY(X.worktreePath);if(iV(q,Y)&&q.length>G)G=q.length,z=X.id}return z}function qB(f,J){let Y=RY(J),z,G=-1;for(let X of f){if(!X.repo)continue;let q=RY(X.repo);if(iV(q,Y)&&q.length>G)G=q.length,z=q}return z}function aV(f,J){let Y=RY(J),z=new Set,G=new Set;for(let X of f){if(X.repo)z.add(RY(X.repo));if(X.worktreePath)G.add(RY(X.worktreePath))}for(let X of z)for(let q of iO(X).map(RY)){let Q=`${q}/`;if(!Y.startsWith(Q))continue;let B=Y.slice(Q.length).split("/")[0];if(!B)continue;let V=`${Q}${B}`;if(G.has(V))return;return{repo:X,worktreePath:V}}return}var hO="worktrees",PO=".kobe/worktrees",vO=".claude/worktrees",mO;var $V=k(()=>{mO=[PO,vO]});function BB(f){return{message:f instanceof Error?f.message:String(f),name:f instanceof Error?f.name:void 0}}async function qX(f,J,Y,z){let G=f.get(J);if(!G)throw Error(`unknown daemon request: ${J}`);return G.handle(jB(Y),z)}function QX(){return new Map([{name:"hello",handle(J,Y){let z=typeof J.protocolVersion==="number"?J.protocolVersion:n1,G=typeof J.minProtocolVersion==="number"?J.minProtocolVersion:z;if(!AZ({localVersion:n1,localMin:jY,remoteVersion:z,remoteMin:G}))throw Error(`daemon is protocol v${n1} (min v${jY}); this client is v${z} (min v${G}). Upgrade your kobe.`);return{protocolVersion:n1,minProtocolVersion:jY,kobeVersion:s0,capabilities:[...AH],daemonPid:Y.daemon.pid,clientId:Y.clientId,tasks:Y.orch.listTasks().map(zJ)}}},{name:"daemon.status",handle(J,Y){return{daemonPid:Y.daemon.pid,kobeVersion:s0,uptimeMs:Date.now()-Y.daemon.startedAt.getTime(),startedAt:Y.daemon.startedAt.toISOString(),attachedClients:Y.daemon.guiCount(),taskCount:Y.orch.listTasks().length,socketPath:Y.daemon.socketPath,webPort:Y.daemon.webPort??null}}},{name:"daemon.stop",async handle(J,Y){return await Y.daemon.stopSoon(),{}}},{name:"task.list",handle(J,Y){return{tasks:Y.orch.listTasks().map(zJ)}}},{name:"task.get",handle(J,Y){let z=Of(J,"taskId"),G=Y.orch.getTask(z);if(!G)throw Error(`task not found: ${z}`);return{task:zJ(G)}}},{name:"task.create",async handle(J,Y){let z=Of(J,"repo"),G=await Y.orch.createTask({repo:z,title:a1(J,"title"),branch:a1(J,"branch"),baseRef:a1(J,"baseRef"),vendor:HB(J,"vendor"),modelEffort:a1(J,"effort")});return{taskId:G.id,task:zJ(G)}}},{name:"task.archive",async handle(J,Y){let z=Of(J,"taskId");return await Y.orch.setArchived(z,QB(J,"archived")),{}}},{name:"task.rename",async handle(J,Y){let z=Of(J,"taskId");return await Y.orch.setTitle(z,Of(J,"title")),{}}},{name:"task.setBranch",async handle(J,Y){let z=Of(J,"taskId");return await Y.orch.setBranch(z,Of(J,"branch")),{}}},{name:"task.setVendor",async handle(J,Y){let z=Of(J,"taskId"),G=HB(J,"vendor");if(!G)throw Error("task.setVendor: vendor is required");return await Y.orch.setVendor(z,G),{}}},{name:"task.delete",async handle(J,Y){let z=Of(J,"taskId");return await Y.orch.deleteTask(z,{force:QB(J,"force")}),Y.activity.clearTask(z),{}}},{name:"task.pin",async handle(J,Y){let z=Of(J,"taskId");return await Y.orch.setPinned(z,QB(J,"pinned")),{}}},{name:"task.move",async handle(J,Y){let z=Of(J,"taskId"),G=Of(J,"direction");if(G!=="up"&&G!=="down")throw Error("direction must be up or down");return await Y.orch.moveTask(z,G==="up"?-1:1),{}}},{name:"task.status",async handle(J,Y){let z=Of(J,"taskId"),G=Of(J,"status");if(!N9(G))throw Error("status must be a TaskStatus");let X=G==="done"?Y.orch.getTask(z):void 0,q=X?.status;if(await Y.orch.setStatus(z,G),G==="done"&&q!=="done"&&X)try{let Q=await Y.issues.mirrorTaskDone(X.repo,z);if(Q)Y.bus.publish("issue.snapshot",Q)}catch(Q){uf("issue-done-mirror",Q)}return{}}},{name:"task.reorder",async handle(J,Y){let z=J.moves;if(!Array.isArray(z)||z.length===0)throw Error("moves must be a non-empty array");if(z.length>500)throw Error("too many moves in one task.reorder batch (max 500)");let G=z.map((X)=>{if(typeof X!=="object"||X===null)throw Error("each move needs taskId and position");let q=X,Q=Of(q,"taskId"),H=q.position;if(typeof H!=="number"||!Number.isFinite(H))throw Error("position must be a finite number");return{taskId:Q,position:H}});return await Y.orch.reorderTasks(G),{}}},{name:"task.ensureMain",async handle(J,Y){let z=Of(J,"repo"),G=await Y.orch.ensureMainTask(z);return{task:zJ(G)}}},{name:"task.ensureWorktree",async handle(J,Y){let z=Of(J,"taskId");Y.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"running"});try{let G=await Y.orch.ensureWorktree(z);return Y.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"done"}),{worktreePath:G}}catch(G){throw Y.bus.publish("task.jobs",{taskId:z,kind:"ensureWorktree",phase:"error",error:G instanceof Error?G.message:String(G)}),G}}},{name:"worktree.discoverAdoptable",async handle(J,Y){let z=Of(J,"repo");return{worktrees:await Y.orch.discoverAdoptableWorktrees(z)}}},{name:"worktree.adopt",async handle(J,Y){let z=await Y.orch.adoptWorktree({repo:Of(J,"repo"),worktreePath:Of(J,"worktreePath"),branch:a1(J,"branch"),vendor:HB(J,"vendor"),title:a1(J,"title"),ifExists:a1(J,"ifExists")==="return"?"return":"error"});return{task:zJ(z)}}},{name:"worktree.reconcile",async handle(J,Y){let z=Of(J,"cwd"),G=Of(J,"worktreePath"),X=qB(Y.orch.listTasks(),z)??qB(Y.orch.listTasks(),G);if(!X)return{adopted:!1};try{return{adopted:!0,taskId:(await Y.orch.adoptWorktree({repo:X,worktreePath:G,ifExists:"return"})).id}}catch(q){return uf("worktree-created",q),{adopted:!1}}}},{name:"task.setActive",async handle(J,Y){let z=a1(J,"taskId")??null;return await Y.orch.setActiveTask(z),Y.bus.publish("active-task",{taskId:z}),{}}},{name:"issue.list",async handle(J,Y){return Y.issues.list(Of(J,"repoRoot"))}},{name:"issue.mutate",async handle(J,Y){let z=await Y.issues.mutate(Of(J,"repoRoot"),J.op);return Y.bus.publish("issue.snapshot",z),z}},{name:"session.deliver",async handle(J,Y){let z=Of(J,"taskId"),G=Of(J,"text"),X=a1(J,"source");if(X!==void 0&&X!=="note"&&X!=="dispatcher")throw Error('source must be "note" or "dispatcher"');if(!Y.orch.getTask(z))throw Error(`task not found: ${z}`);return Y.bus.publish("session.deliver",{taskId:z,text:G,at:Date.now(),source:X??"dispatcher"}),{ok:!0}}},{name:"note.file",async handle(J,Y){let z=Of(J,"taskId"),G=Of(J,"text"),X=Y.orch.getTask(z);if(!X)throw Error(`task not found: ${z}`);let q=Y.orch.listTasks().find((H)=>(H.kind??"task")==="main"&&H.repo===X.repo&&!H.archived);if(!q||q.id===X.id)return{ok:!0,routed:!1};let Q=X.title||X.branch||z;return Y.bus.publish("session.deliver",{taskId:q.id,text:`[KOBE FIELD NOTE] from "${Q}" (task ${z}): ${G}`,at:Date.now(),source:"note"}),{ok:!0,routed:!0}}},{name:"engine.reportEvent",async handle(J,Y){let z=Of(J,"kind");if(!kZ(z))throw Error(`unknown engine event kind: ${z}`);let G=a1(J,"taskId"),X=a1(J,"cwd");if(!G&&X&&z==="session-start"){let H=aV(Y.orch.listTasks(),X);if(H)try{await Y.orch.adoptWorktree({repo:H.repo,worktreePath:H.worktreePath,ifExists:"return"})}catch(B){uf("worktree-autosync",B)}}let q=G??(X?lV(Y.orch.listTasks(),X):void 0);if(!q)return{};let Q=lO(J);if(Y.activity.report(q,z,Q),z==="turn-start")nV(Y.orch,q).then((H)=>{if(H==="moved")console.log(`[status-rules] task ${q} auto-moved backlog \u2192 in_progress`)}).catch((H)=>uf("status-rules",H));return{}}}].map((J)=>[J.name,J]))}function jB(f){if(!f||typeof f!=="object"||Array.isArray(f))return{};return f}function Of(f,J){let Y=f[J];if(typeof Y!=="string"||Y.length===0)throw Error(`${J} is required`);return Y}function a1(f,J){let Y=f[J];if(Y===void 0||Y===null||Y==="")return;if(typeof Y!=="string")throw Error(`${J} must be a string`);return Y}function QB(f,J){let Y=f[J];if(Y===void 0||Y===null)return;if(typeof Y!=="boolean")throw Error(`${J} must be a boolean`);return Y}function HB(f,J){let Y=a1(f,J);return Y&&Y.trim().length>0?Y:void 0}function lO(f){let J=f.detail;if(!J||typeof J!=="object"||Array.isArray(J))return;let Y=J,z={};if(Y.failure==="rate_limit"||Y.failure==="billing"||Y.failure==="other")z.failure=Y.failure;if(Y.waiting==="permission"||Y.waiting==="input")z.waiting=Y.waiting;if(typeof Y.note==="string")z.note=Y.note;return Object.keys(z).length>0?z:void 0}var _Z=k(()=>{NZ();dV();S1();U1();$V();sY()});import{execFile as aO}from"child_process";import{mkdir as $O,readFile as rO,realpath as rV,rename as pO,stat as _O,writeFile as oO}from"fs/promises";import{homedir as sO}from"os";import{dirname as tO,isAbsolute as eO,join as fA,resolve as pV}from"path";import{promisify as JA}from"util";function YA(f){return(f instanceof Error?f.message:String(f)).includes("not a git repository")}function sZ(f=process.env.KOBE_HOME_DIR??sO()){return fA(f,".kobe","issues.json")}function oV(f){return typeof f==="string"&&_V.includes(f)}function zA(f){if(f===null||typeof f!=="object"||Array.isArray(f))return null;let J=f;if(typeof J.id!=="number")return null;return{id:J.id,title:typeof J.title==="string"?J.title:"(untitled)",status:oV(J.status)?J.status:"open",created:typeof J.created==="string"?J.created:"",body:typeof J.body==="string"?J.body:"",taskId:typeof J.taskId==="string"?J.taskId:void 0}}function GA(){return{version:1,repos:{}}}function XA(){let f=new Date,J=String(f.getMonth()+1).padStart(2,"0"),Y=String(f.getDate()).padStart(2,"0");return`${f.getFullYear()}-${J}-${Y}`}async function ZA(f){let{stdout:J}=await LB("git",["-C",f,"rev-parse","--git-common-dir"]),Y=J.trim();return rV(eO(Y)?Y:pV(f,Y))}async function qA(f){let{stdout:J}=await LB("git",["-C",f,"rev-parse","--show-toplevel"]);return J.trim()}async function QA(f){let{stdout:J}=await LB("git",["-C",f,"worktree","list","--porcelain"]),Y=J.split(/\r?\n/).find((z)=>z.startsWith("worktree "))?.slice(9).trim();return Y?rV(Y):qA(f)}async function WB(f){if(typeof f!=="string"||f.length===0)throw Error("repoRoot is required");let J=pV(f);if(!(await _O(J).catch(()=>null))?.isDirectory())throw Error("repoRoot does not exist");try{let[z,G]=await Promise.all([QA(J),ZA(J)]);return{repoRoot:z,repoKey:G}}catch(z){if(YA(z))throw Error("repoRoot is not a git repository");throw z}}async function VB(f){try{let J=JSON.parse(await rO(f,"utf8")),Y={};if(J.repos&&typeof J.repos==="object")for(let[z,G]of Object.entries(J.repos)){if(!G||typeof G!=="object")continue;let X=G;Y[z]={repoRoot:typeof X.repoRoot==="string"?X.repoRoot:"",nextId:typeof X.nextId==="number"?X.nextId:1,issues:Array.isArray(X.issues)?X.issues.map(zA).filter((q)=>q!==null):[]}}return{version:1,repos:Y}}catch(J){if(J.code==="ENOENT")return GA();throw J}}async function KB(f,J){await $O(tO(f),{recursive:!0});let Y=`${f}.tmp`;await oO(Y,`${JSON.stringify(J,null,2)}
|
|
46
|
+
`,"utf8"),await pO(Y,f)}function UB(f,J){return{repoRoot:f,exists:J!==null,nextId:J?.nextId??1,issues:J?.issues??[]}}async function DB(f,J){let z=(oZ.get(f)??Promise.resolve()).then(J),G=z.then(()=>{return},()=>{return});return oZ.set(f,G),G.then(()=>{if(oZ.get(f)===G)oZ.delete(f)}),z}class tZ{path;constructor(f=sZ()){this.path=f}async list(f){let{repoRoot:J,repoKey:Y}=await WB(f);return DB(this.path,async()=>{let z=await VB(this.path),G=z.repos[Y]??null;if(G&&G.repoRoot!==J)G.repoRoot=J,await KB(this.path,z);return UB(J,G)})}async mirrorTaskDone(f,J){let{repoRoot:Y,repoKey:z}=await WB(f);if(!J)return null;return DB(this.path,async()=>{let G=await VB(this.path),X=G.repos[z];if(!X)return null;let q=X.issues.find((Q)=>Q.taskId===J);if(!q||q.status==="done")return null;return q.status="done",X.repoRoot=Y,await KB(this.path,G),UB(Y,X)})}async mutate(f,J){let{repoRoot:Y,repoKey:z}=await WB(f);if(!J||typeof J!=="object"||Array.isArray(J)||typeof J.type!=="string")throw Error("missing op");return DB(this.path,async()=>{let G=await VB(this.path),X=G.repos[z];if(!X)X={repoRoot:Y,nextId:1,issues:[]},G.repos[z]=X;X.repoRoot=Y;let q=J;if(q.type==="create"){if(typeof q.title!=="string"||q.title.trim().length===0)throw Error("create requires a non-empty title");if(q.body!==void 0&&typeof q.body!=="string")throw Error("body must be a string");X.issues=[{id:X.nextId,title:q.title,status:"open",created:XA(),body:typeof q.body==="string"?q.body:""},...X.issues],X.nextId+=1}else if(q.type==="setStatus"){if(typeof q.id!=="number")throw Error("setStatus requires a numeric id");if(!oV(q.status))throw Error(`invalid status: must be one of ${_V.join(", ")}`);let Q=X.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);Q.status=q.status}else if(q.type==="update"){if(typeof q.id!=="number")throw Error("update requires a numeric id");if(q.title!==void 0&&(typeof q.title!=="string"||q.title.trim().length===0))throw Error("title must be a non-empty string");if(q.body!==void 0&&typeof q.body!=="string")throw Error("body must be a string");let Q=X.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);if(typeof q.title==="string")Q.title=q.title;if(typeof q.body==="string")Q.body=q.body}else if(q.type==="link"){if(typeof q.id!=="number")throw Error("link requires a numeric id");if(typeof q.taskId!=="string"||q.taskId.length===0)throw Error("link requires a non-empty taskId");let Q=X.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);Q.taskId=q.taskId}else if(q.type==="unlink"){if(typeof q.id!=="number")throw Error("unlink requires a numeric id");let Q=X.issues.find((H)=>H.id===q.id);if(!Q)throw Error(`no issue #${q.id}`);Q.taskId=void 0}else if(q.type==="delete"){if(typeof q.id!=="number")throw Error("delete requires a numeric id");let Q=X.issues.filter((H)=>H.id!==q.id);if(Q.length===X.issues.length)throw Error(`no issue #${q.id}`);X.issues=Q}else throw Error(`unknown op type: ${q.type}`);return await KB(this.path,G),UB(Y,X)})}}var LB,_V,oZ;var MB=k(()=>{LB=JA(aO),_V=["open","doing","hold","done"];oZ=new Map});import{mkdirSync as HA,watch as BA}from"fs";import{basename as jA,dirname as WA}from"path";function eZ(f){if(f.debounceMs<=0)return()=>{};let J=WA(f.filePath),Y=new Set([jA(f.filePath),...f.matchBasenames??[]]),z=null,G=null,X=null,q=()=>{try{f.onTrigger()}catch(H){f.onError(H)}},Q=()=>{if(z)clearTimeout(z);z=setTimeout(()=>{z=null,q()},f.debounceMs),z.unref?.()};try{HA(J,{recursive:!0}),X=BA(J,(H,B)=>{let V=B===null?null:String(B);if(V!==null&&!Y.has(V))return;Q()}),X.on("error",f.onError)}catch(H){f.onError(H)}if(f.pollMs&&f.pollMs>0)G=setInterval(q,f.pollMs),G.unref?.();return()=>{if(z)clearTimeout(z),z=null;if(G)clearInterval(G),G=null;X?.close(),X=null}}var FB=()=>{};import{homedir as VA}from"os";import{basename as KA,join as UA}from"path";function AB(f=process.env.KOBE_HOME_DIR??VA()){return UA(f,".kobe","settings","keybindings.yaml")}function sV(f,J={}){let Y=J.debounceMs??OB;if(Y<=0)return()=>{};let z=J.path??AB(),G=KA(z),X=G.replace(/\.yaml$/,".yml"),q=0;return f.publish("keybindings",{rev:q}),eZ({filePath:z,matchBasenames:[G,X],debounceMs:Y,onTrigger:()=>{try{q+=1,f.publish("keybindings",{rev:q})}catch(H){uf("keybindings-watcher",H)}},onError:(H)=>uf("keybindings-watcher",H)})}var OB=200;var tV=k(()=>{FB()});class gB{clients;idleGraceMs;onIdleStop;schedule;log;cancelIdle=null;stopping=!1;constructor(f){this.clients=f.clients,this.idleGraceMs=f.idleGraceMs,this.onIdleStop=f.onIdleStop,this.schedule=f.schedule??DA,this.log=f.log??gY}guiCount(){let f=0;for(let J of this.clients())if(J.holdsLifetime)f++;return f}hasSubscribers(){for(let f of this.clients())if(f.subscribed)return!0;return!1}isStopping(){return this.stopping}markStopping(){this.stopping=!0,this.clearIdle()}guiAttached(){this.clearIdle()}clientDisconnected(f){if(f)this.maybeArm()}clearIdle(){if(this.cancelIdle)this.cancelIdle(),this.cancelIdle=null}maybeArm(){if(this.stopping||this.guiCount()>0)return;this.clearIdle(),this.log("idle",`last gui gone \u2014 arming ${this.idleGraceMs}ms idle-stop grace`),this.cancelIdle=this.schedule(()=>{if(this.cancelIdle=null,this.stopping||this.guiCount()>0)return;this.log("idle","grace elapsed with no gui \u2014 self-stopping"),this.onIdleStop()},this.idleGraceMs)}}var DA=(f,J)=>{let Y=setTimeout(f,J);return Y.unref?.(),()=>clearTimeout(Y)};var eV=()=>{};import{spawn as LA}from"child_process";function RB(f,J,Y,z){if(Y)return f+z.slowRetryMs;return J+Math.max(z.minIntervalMs,(J-f)*5)}function CB(f,J){return!f.inFlight&&J>=f.nextAllowedAt}function fq(f,J,Y,z){let G=Date.now();if(!CB(f,G))return!1;f.inFlight=!0;let X=new AbortController,q=setTimeout(()=>X.abort(),J.timeoutMs);return(async()=>{let Q,H=!1;try{Q=await Y(X.signal),H=!0}catch{}clearTimeout(q);let B=X.signal.aborted;if(f.nextAllowedAt=RB(G,Date.now(),B,J),f.inFlight=!1,H&&!B)z(Q)})(),!0}function BJ(f,J,Y){return new Promise((z)=>{let G="",X=!1,q=(H)=>{if(X)return;X=!0,z({status:H,stdout:G})},Q=LA(f,J.slice(),{cwd:Y.cwd,stdio:["ignore","pipe","ignore"],env:Y.env,signal:Y.signal,killSignal:"SIGKILL"});Q.stdout?.on("data",(H)=>{G+=String(H)}),Q.on("error",()=>q(null)),Q.on("close",(H)=>q(H))})}var HX=()=>{};function gA(f){if(f.archived)return!1;if(f.kind==="main")return!1;if(!f.branch||!f.worktreePath)return!1;if(D1(f.repo)||D1(f.worktreePath))return!1;return!0}async function RA(f,J){let Y=J.tickMs??Jq,z=[];for(let G of f.listTasks()){if(!gA(G)){J.schedule.delete(G.id);continue}let X=J.schedule.get(G.id)??0;if(J.now<X)continue;try{let q=await J.run(G.worktreePath,G.branch);if(q.kind==="empty"){J.schedule.set(G.id,J.now+MA);continue}let Q=WW(q.view,J.at),H=f.getTask(G.id);if(!H){J.schedule.delete(G.id);continue}if(!MZ(H.prStatus,Q??void 0))await f.setPRStatus(G.id,Q),z.push(G.id);let B=Q?.lifecycle==="merged"||Q?.lifecycle==="closed";J.schedule.set(G.id,J.now+(B?FA:Y))}catch(q){uf("pr-status-poller",q),J.schedule.set(G.id,J.now+Y)}}return z}function f7(f,J=Jq,Y,z=AA){if(J<=0)return()=>{};let G=new Map,X=!1,Q=setInterval(()=>{if(Y&&!Y())return;if(X)return;X=!0,RA(f,{run:z,now:Date.now(),at:new Date().toISOString(),schedule:G,tickMs:J}).catch((H)=>uf("pr-status-poller",H)).finally(()=>{X=!1})},J);return Q.unref?.(),()=>clearInterval(Q)}var Jq=30000,MA=300000,FA=600000,OA=1e4,AA=async(f,J)=>{let Y=new AbortController,z=setTimeout(()=>Y.abort(),OA);try{let G=await BJ("gh",["pr","view",J,"--json",jW],{cwd:f,signal:Y.signal});if(G.status!==0)return{kind:"empty"};let X=JSON.parse(G.stdout);return typeof X.number==="number"?{kind:"pr",view:X}:{kind:"empty"}}catch{return{kind:"empty"}}finally{clearTimeout(z)}};var J7=k(()=>{HX();gf()});import{readFileSync as CA}from"fs";import{homedir as kA}from"os";import{basename as NA,join as yA}from"path";function NB(f=process.env.KOBE_HOME_DIR??kA()){return yA(f,".config","kobe","state.json")}function Y7(f){let J={};try{let B=JSON.parse(CA(f,"utf8"));if(B&&typeof B==="object"&&!Array.isArray(B))J=B}catch{}let Y=typeof J.activeTheme==="string"&&J.activeTheme.length>0?J.activeTheme:"claude",z=J.transparentBackground===!0,G=typeof J.focusAccent==="string"&&SA.includes(J.focusAccent)?J.focusAccent:null,X=J.activeSortMode==="recent"?"recent":"default",q=J["tasksPane.keysCollapsed"]===!0,Q=typeof J["tasksPane.projectFilter"]==="string"&&J["tasksPane.projectFilter"].length>0?J["tasksPane.projectFilter"]:null,H=typeof J.locale==="string"&&J.locale.length>0?J.locale:"en";return{theme:Y,transparentBackground:z,focusAccent:G,locale:H,sortMode:X,keysCollapsed:q,projectFilter:Q}}function IA(f,J){return f.theme===J.theme&&f.transparentBackground===J.transparentBackground&&f.focusAccent===J.focusAccent&&f.locale===J.locale&&f.sortMode===J.sortMode&&f.keysCollapsed===J.keysCollapsed&&f.projectFilter===J.projectFilter}function z7(f,J={}){let Y=J.debounceMs??kB;if(Y<=0)return()=>{};let z=J.pollMs??bA,G=J.statePath??NB(),X=NA(G),q=Y7(G);return f.publish("ui-prefs",q),eZ({filePath:G,matchBasenames:[X],debounceMs:Y,pollMs:z,onTrigger:()=>{try{let H=Y7(G);if(IA(q,H))return;q=H,f.publish("ui-prefs",H)}catch(H){uf("ui-prefs-watcher",H)}},onError:(H)=>uf("ui-prefs-watcher",H)})}var kB=200,bA=250,SA;var G7=k(()=>{FB();SA=["primary","success","info"]});function yB(){return nf()[Wz]===!0}var Wz="experimental.dispatcher";var Yq=k(()=>{pY()});import{randomUUID as TA}from"crypto";function jJ(f){return`engineCommand.${f}`}function WJ(f){return`engineName.${f}`}function Vz(f){return kf(WJ(f))?.trim()||bB[f]||f}function BX(f){return pf(f??"claude").defaultCommand}function uA(f){let J=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g;for(let z=Y.exec(f);z!==null;z=Y.exec(f))J.push(z[1]??z[2]??z[3]??"");return J}function N1(f,J){let Y=f??"claude",z=kf(jJ(Y))?.trim(),G=(()=>{if(z){let X=uA(z);if(X.length>0)return X}return BX(Y)})();return EA(G,Y,J)}function EA(f,J,Y){let z=Y?.trim();if(!z)return f;let G=J??"claude";if(!pf(G).effortLevels?.includes(z))return f;if(G==="codex")return[...f,"-c",`model_reasoning_effort=${z}`];return f}function pz(f,J){if((J??"claude")!=="claude")return{argv:f,sessionId:null};if(f.some((z)=>xA.has(z)))return{argv:f,sessionId:null};let Y=TA();return{argv:[...f,"--session-id",Y],sessionId:Y}}function Kz(){let f=(J)=>/^[A-Za-z0-9_/.:=-]+$/.test(J)?J:`'${J.replace(/'/g,"'\\''")}'`;try{return[...Cf(),"api"].map(f).join(" ")}catch{return"kobe api"}}function wA(f,J=Kz()){return[`You are running inside kobe (a local multi-session task manager) as task ${f}.`,"kobe tracks a lifecycle status for this task on a board.","When you have COMPLETED the work requested in this session and verified it, report it by running:",` ${J} set-status --task-id ${f} --status in_review`,"Run it only when the work is genuinely done \u2014 never while you are asking the user a question, waiting for input, or mid-task.","Never set any other status value; everything beyond in_review is the user's decision."].join(`
|
|
47
|
+
`)}function hA(f,J=Kz()){return["kobe shares hard-won discoveries between its parallel sessions as one-line field notes.","When you RESOLVE a non-obvious, repo-level gotcha (a build flag, a flaky test, an environment quirk, an API trap), file it:",` ${J} note --task-id ${f} --text "<one line: the verified conclusion>"`,"File only verified conclusions another session could act on \u2014 never progress logs, opinions, or details specific to your own task. A handful per session at most."].join(`
|
|
48
|
+
`)}function PA(f,J=Kz(),Y={}){let z=[];if((Y.status??pZ)())z.push(wA(f,J));if((Y.notes??yB)())z.push(hA(f,J));return z.length>0?z.join(`
|
|
49
49
|
|
|
50
|
-
`):null}function
|
|
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
|
-
`)
|
|
65
|
-
`)){let
|
|
66
|
-
`)
|
|
67
|
-
`).
|
|
68
|
-
`).
|
|
69
|
-
`).filter((
|
|
70
|
-
`)
|
|
71
|
-
`)){let[
|
|
72
|
-
`)){let[q,B]=
|
|
73
|
-
|
|
74
|
-
|
|
50
|
+
`):null}function zq(f,J,Y,z={}){if(!Y)return f;if((J??"claude")!=="claude")return f;if(f.includes("--append-system-prompt")||f.includes("--append-system-prompt-file"))return f;let G=PA(Y,Kz(),z);if(!G)return f;return[...f,"--append-system-prompt",G]}function vA(f,J=Kz()){return[`You are running inside kobe (a local multi-session task manager) as this repository's DISPATCHER (task ${f}, the repo's main session).`,"kobe runs multiple worktree task sessions on this repo in parallel. When one of them resolves a non-obvious gotcha, it files a one-line field note; kobe forwards each note to you as a user message prefixed with [KOBE FIELD NOTE].","Your job is routing that knowledge, fully autonomously \u2014 never ask the user for permission:",` - See the fleet: \`${J} collect --repo .\` (status, running, change counts per task), or \`--task-ids id1,id2\` for specific tasks.`,` - Relay a note to a task that would benefit: \`${J} dispatch --task-id <id> --prompt "[dispatcher] FYI from <author task>: <note verbatim>"\`.`," - Relay to the in-flight tasks whose work plausibly touches the same area \u2014 and to nobody else. If no task benefits, do nothing."," - Never relay a note back to its author, never relay the same note to the same task twice, and keep relays verbatim with provenance \u2014 no summarizing, no embellishment.","Use ONLY the dispatch verb to message sessions \u2014 the `send` verb pastes via tmux and would spawn a DUPLICATE engine for web-hosted sessions. If dispatch fails, report the error in your own session and stop; do not fall back.","Take no action on merge conflicts between tasks \u2014 the board's conflict radar is display-only by design, and resolution timing belongs to the humans and the tasks themselves.","Never run git commands inside other tasks' worktrees."].join(`
|
|
51
|
+
`)}function Gq(f,J,Y,z=yB){if(!Y||!z())return f;if((J??"claude")!=="claude")return f;if(f.includes("--append-system-prompt")||f.includes("--append-system-prompt-file"))return f;return[...f,"--append-system-prompt",vA(Y)]}var bB,xA;var E1=k(()=>{lJ();MY();ZX();Yq();gf();K1();bB=Object.fromEntries(dY.map((f)=>[f,pf(f).displayName]));xA=new Set(["--session-id","--resume","-r","--continue","-c","--from-pr"])});function _z(f){return Uz.includes(f)?f:"auto"}var Uz,X7,pJ="editor.kind",kY="editor.customCommand",Xq="auto";var Zq=k(()=>{Uz=["auto","vim","nvim","nano","emacs","custom"],X7=["nvim","vim","emacs","nano"]});function Lz(f){return f==="taskpanel"?"taskpanel":"chattab"}var _J="settings.surface",Dz="chattab";function x1(f=process.env){return{...f,...SB}}var SB;var NY=k(()=>{SB={GIT_OPTIONAL_LOCKS:"0"}});async function oz(f,J,Y={}){if(!f)return{stdout:"",stderr:"worktreePath is required",status:-1};let z=(Y.execForPath??cJ)(f),G=Y.timeoutMs&&Y.timeoutMs>0?new AbortController:null,X=!1,q=G?setTimeout(()=>{X=!0,G.abort()},Y.timeoutMs):null,Q;try{Q=await z.run(["git",...J],{cwd:f,env:SB,signal:G?.signal})}catch(H){if(q)clearTimeout(q);return{stdout:"",stderr:H instanceof Error?H.message:String(H),status:-1}}if(q)clearTimeout(q);if(X&&Q.exitCode===-1&&!Q.stderr)return{stdout:Q.stdout,stderr:`git ${J.join(" ")} timed out after ${Y.timeoutMs}ms`,status:-1};return{stdout:Q.stdout,stderr:Q.stderr,status:Q.exitCode}}function mA(f,J){if(!f||!J||J.startsWith("/"))return null;let Y=J.split("/");if(Y.some((z)=>z===".."))return null;return`${f.replace(/\/+$/,"")}/${Y.filter(Boolean).join("/")}`}async function Z7(f,J,Y={}){let z=mA(f,J);if(!z)return null;let G=(Y.execForPath??cJ)(f);try{return await G.readFile(z)}catch{return null}}var qq=k(()=>{e1();NY()});import{statSync as cA}from"fs";async function jX(f,J){let Y=await oz(f,J,{timeoutMs:nA}),z=Y.status??-1;return{ok:z===0,stdout:Y.stdout,stderr:Y.stderr,code:z}}function iA(f){switch(f){case"M":return"modified";case"A":return"added";case"D":return"deleted";case"R":return"renamed";case"C":return"copied";case"T":return"type changed";case"U":return"unmerged";case"?":return"untracked";default:return"changed"}}function q7(f){let J=new Map;if(!f)return J;let Y=f.split(/(?=^diff --git )/m);for(let z of Y){if(!z.startsWith("diff --git"))continue;let G=null,X=z.match(/^\+\+\+ b\/(.*)$/m);if(X&&X[1]!=="/dev/null")G=X[1];else{let q=z.match(/^diff --git a\/.* b\/(.*)$/m);if(q)G=q[1]}if(!G)continue;J.set(lA(G),z.endsWith(`
|
|
52
|
+
`)?z:`${z}
|
|
53
|
+
`)}return J}function lA(f){if(!(f.startsWith('"')&&f.endsWith('"')))return f;return f.slice(1,-1).replace(/\\([\\"nt])/g,(Y,z)=>z==="n"?`
|
|
54
|
+
`:z==="t"?"\t":z)}async function aA(f,J,Y){let z=Array(f.length),G=Math.max(1,Math.min(J,f.length)),X=0;async function q(){while(X<f.length){let Q=X++;z[Q]=await Y(f[Q],Q)}}return await Promise.all(Array.from({length:G},()=>q())),z}async function $A(f,J){let Y=await jX(f,["diff","--no-color","--no-index","--","/dev/null",J]);if(Y.stdout.trim())return Y.stdout.endsWith(`
|
|
55
|
+
`)?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(!GZ(z))return Response.json({error:"worktreePath does not exist"},{status:400});if(!cJ(z).isRemote)try{if(!cA(z).isDirectory())return Response.json({error:"worktreePath is not a directory"},{status:400})}catch{return Response.json({error:"worktreePath does not exist"},{status:400})}let X=await jX(z,["rev-parse","--is-inside-work-tree"]);if(!X.ok||X.stdout.trim()!=="true")return Response.json({error:`not a git work tree: ${X.stderr.trim()||z}`},{status:500});let[q,Q,H]=await Promise.all([jX(z,["status","--porcelain=v1","-z","--untracked-files=all"]),jX(z,["diff","--no-color"]),jX(z,["diff","--no-color","--staged"])]);if(!q.ok)return Response.json({error:`git status failed: ${q.stderr.trim()}`},{status:500});let B=q7(Q.stdout),V=q7(H.stdout),j=q.stdout.split("\x00"),U=[],L=[];for(let R=0;R<j.length;R++){let S=j[R];if(!S)continue;let a=S[0]??" ",N=S[1]??" ",g=S.slice(3);if(!g)continue;if(a==="R"||a==="C"||N==="R"||N==="C")R++;let C=a==="?"&&N==="?",y=a!==" "&&a!=="?"?a:N,_=a!==" "&&a!=="?",z0="";if(C)L.push({fileIndex:U.length,path:g});else if(z0=V.get(g)??B.get(g)??"",V.has(g)&&B.has(g))z0=`${V.get(g)}${B.get(g)}`;U.push({path:g,status:C?"untracked":iA(y),staged:_,patch:z0})}if(L.length>0){let R=await aA(L,dA,(S)=>$A(z,S.path));for(let S=0;S<L.length;S++)U[L[S].fileIndex].patch=R[S]}U.sort((R,S)=>R.path.localeCompare(S.path));let O=[H.stdout,Q.stdout].filter(Boolean).join(`
|
|
57
|
+
`),M={files:U,raw:O};return Response.json(M)}var nA=15000,dA=8;var H7=k(()=>{e1();qq()});import{isAbsolute as rA}from"path";function j7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function _A(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9._-]+$/.test(f)&&!f.includes("..")}async function oA(f){let J=f.searchParams.get("worktreePath"),Y=f.searchParams.get("vendor")??"claude";if(!J||!rA(J))return Response.json({error:"worktreePath must be an absolute path"},{status:400});if(!j7(Y))return Response.json({error:"invalid vendor"},{status:400});try{let z=pf(Y).history,[G,X]=await Promise.all([z.listSessionIdsForWorktree(J),z.latestTranscriptMtimeForWorktree(J)]);return Response.json({sessions:G,latestMtime:X})}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}async function sA(f){let J=f.searchParams.get("vendor")??"claude",Y=f.searchParams.get("sessionId");if(!j7(J))return Response.json({error:"invalid vendor"},{status:400});if(!_A(Y))return Response.json({error:"invalid sessionId"},{status:400});try{let z=await pf(J).history.readHistory(Y);return Response.json({messages:z})}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}async function W7(f,J){if(J.pathname!==B7&&J.pathname!==pA)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return J.pathname===B7?oA(J):sA(J)}var B7="/api/history/sessions",pA="/api/history/messages";var V7=k(()=>{MY()});import{mkdir as tA,readFile as eA,writeFile as fg}from"fs/promises";import{join as K7}from"path";function U7(){return K7(ef(),"notes")}function D7(f){return typeof f==="string"&&f.length>0&&/^[A-Za-z0-9_-]+$/.test(f)}function L7(f){return K7(U7(),`${f}.md`)}async function Yg(f){let J=f.searchParams.get("taskId");if(!D7(J))return Response.json({error:"invalid taskId"},{status:400});try{let Y="";try{Y=await eA(L7(J),"utf8")}catch(z){if(z.code!=="ENOENT")throw z}return Response.json({markdown:Y})}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function zg(f){let J;try{J=await f.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(!D7(J.taskId))return Response.json({error:"invalid taskId"},{status:400});if(typeof J.markdown!=="string")return Response.json({error:"markdown must be a string"},{status:400});try{return await tA(U7(),{recursive:!0}),await fg(L7(J.taskId),J.markdown,"utf8"),Response.json({ok:!0})}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function M7(f,J){if(J.pathname!==Jg)return null;if(f.method==="GET")return Yg(J);if(f.method==="PUT")return zg(f);return Response.json({error:"method not allowed"},{status:405})}var Jg="/api/notes";var F7=k(()=>{lf()});var sz;var Qq=k(()=>{sz={$schema:"https://opencode.ai/theme.json",defs:{darkBg:"#141413",darkBgRaised:"#1A1917",darkBgInset:"#2B2A27",darkBgMenu:"#33312E",darkBorderSubtle:"#2B2A27",darkBorder:"#3A3835",darkBorderActive:"#5C5853",darkText:"#EAE7DF",darkTextMuted:"#A9A39A",darkTextSubtle:"#6B665F",darkPrimary:"#CC785C",darkSecondary:"#D4967E",darkAccent:"#CC785C",darkAccentHover:"#E0AB96",darkRed:"#D47563",darkOrange:"#D97757",darkYellow:"#E8C96B",darkGreen:"#9ACA86",darkBlue:"#61AAF2",darkViolet:"#9B87F5",darkTerracotta:"#BF4D43",lightBg:"#FAF9F5",lightBgRaised:"#F0EEE6",lightBgInset:"#EAE7DF",lightBgMenu:"#E2DED4",lightBorderSubtle:"#EAE7DF",lightBorder:"#D9D5CC",lightBorderActive:"#A9A39A",lightText:"#1A1917",lightTextMuted:"#6B665F",lightTextSubtle:"#8D877D",lightPrimary:"#C96442",lightSecondary:"#B85F3D",lightAccent:"#CC785C",lightAccentHover:"#B85F3D",lightRed:"#A84B3A",lightOrange:"#C96442",lightYellow:"#8A6220",lightGreen:"#2E7C4C",lightBlue:"#207FDE",lightViolet:"#7B5BB6",lightTerracotta:"#BF4D43"},theme:{primary:{dark:"darkPrimary",light:"lightPrimary"},secondary:{dark:"darkSecondary",light:"lightSecondary"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkYellow",light:"lightYellow"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkBlue",light:"lightBlue"},text:{dark:"darkText",light:"lightText"},textMuted:{dark:"darkTextMuted",light:"lightTextMuted"},background:{dark:"darkBg",light:"lightBg"},backgroundPanel:{dark:"darkBgRaised",light:"lightBgRaised"},backgroundElement:{dark:"darkBgInset",light:"lightBgInset"},backgroundMenu:{dark:"darkBgMenu",light:"lightBgMenu"},backgroundDialog:{dark:"darkBgRaised",light:"lightBgRaised"},border:{dark:"darkBorder",light:"lightBorder"},borderActive:{dark:"darkBorderActive",light:"lightBorderActive"},borderSubtle:{dark:"darkBorderSubtle",light:"lightBorderSubtle"},diffAdded:{dark:"darkGreen",light:"lightGreen"},diffRemoved:{dark:"darkRed",light:"lightRed"},diffContext:{dark:"darkTextMuted",light:"lightTextSubtle"},diffHunkHeader:{dark:"darkTextMuted",light:"lightTextSubtle"},diffHighlightAdded:{dark:"#B5E0A0",light:"#1F6638"},diffHighlightRemoved:{dark:"#E89180",light:"#8A3A2C"},diffAddedBg:{dark:"#1F2A1F",light:"#E5EEDF"},diffRemovedBg:{dark:"#2A1F1C",light:"#F5DAD3"},diffContextBg:{dark:"darkBgRaised",light:"lightBgRaised"},diffLineNumber:{dark:"darkTextSubtle",light:"lightTextSubtle"},diffAddedLineNumberBg:{dark:"#1A2419",light:"#D5E2CC"},diffRemovedLineNumberBg:{dark:"#241915",light:"#EBC8BE"},markdownText:{dark:"darkText",light:"lightText"},markdownHeading:{dark:"darkPrimary",light:"lightPrimary"},markdownLink:{dark:"darkAccent",light:"lightAccent"},markdownLinkText:{dark:"darkBlue",light:"lightBlue"},markdownCode:{dark:"darkSecondary",light:"lightSecondary"},markdownBlockQuote:{dark:"darkTextMuted",light:"lightTextMuted"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkPrimary",light:"lightPrimary"},markdownHorizontalRule:{dark:"darkTextMuted",light:"lightTextMuted"},markdownListItem:{dark:"darkAccent",light:"lightAccent"},markdownListEnumeration:{dark:"darkBlue",light:"lightBlue"},markdownImage:{dark:"darkAccent",light:"lightAccent"},markdownImageText:{dark:"darkBlue",light:"lightBlue"},markdownCodeBlock:{dark:"darkText",light:"lightText"},markdownQuote:{dark:"darkTextMuted",light:"lightTextMuted"},syntaxComment:{dark:"darkTextSubtle",light:"lightTextSubtle"},syntaxKeyword:{dark:"darkPrimary",light:"lightPrimary"},syntaxFunction:{dark:"darkBlue",light:"lightBlue"},syntaxVariable:{dark:"darkText",light:"lightText"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkViolet",light:"lightViolet"},syntaxOperator:{dark:"darkSecondary",light:"lightSecondary"},syntaxPunctuation:{dark:"darkText",light:"lightText"},selectedListItemText:{dark:"darkBg",light:"lightBg"}}}});var tz;var Hq=k(()=>{tz={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#0a0a0a",darkStep2:"#111111",darkStep3:"#181818",darkStep4:"#1f1f1f",darkStep5:"#2a2a2a",darkStep6:"#363636",darkStep7:"#444444",darkStep8:"#5a5a5a",darkStep9:"#7a7a7a",darkStep10:"#9a9a9a",darkStep11:"#909090",darkStep12:"#e8e8e8",darkAccent:"#7da5c8",darkAccentBright:"#9bc3e3",darkRed:"#e06c75",darkOrange:"#d6a668",darkGreen:"#7fd88f",darkCyan:"#7da5c8",darkYellow:"#d6a668",lightStep1:"#fafafa",lightStep2:"#f3f3f3",lightStep3:"#ececec",lightStep4:"#e2e2e2",lightStep5:"#d4d4d4",lightStep6:"#bdbdbd",lightStep7:"#9c9c9c",lightStep8:"#7c7c7c",lightStep9:"#5b5b5b",lightStep10:"#404040",lightStep11:"#6c6c6c",lightStep12:"#1a1a1a",lightAccent:"#3d6f9f",lightAccentBright:"#1a4f87",lightRed:"#c9343a",lightOrange:"#a06b1a",lightGreen:"#3d9a57",lightCyan:"#3d6f9f",lightYellow:"#a06b1a"},theme:{primary:{dark:"darkStep12",light:"lightStep12"},secondary:{dark:"darkAccentBright",light:"lightAccentBright"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},backgroundMenu:{dark:"darkStep4",light:"lightStep4"},border:{dark:"darkStep6",light:"lightStep6"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep4",light:"lightStep4"},diffAdded:{dark:"#7fd88f",light:"#3d9a57"},diffRemoved:{dark:"#e06c75",light:"#c9343a"},diffContext:{dark:"darkStep10",light:"lightStep10"},diffHunkHeader:{dark:"darkStep10",light:"lightStep10"},diffHighlightAdded:{dark:"#9be5ad",light:"#2d7a3f"},diffHighlightRemoved:{dark:"#f08490",light:"#a82530"},diffAddedBg:{dark:"#15241a",light:"#d8efdc"},diffRemovedBg:{dark:"#2a1518",light:"#f5dadc"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"darkStep9",light:"lightStep9"},diffAddedLineNumberBg:{dark:"#0f1c14",light:"#c5deca"},diffRemovedLineNumberBg:{dark:"#221012",light:"#e5c5c8"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkStep12",light:"lightStep12"},markdownLink:{dark:"darkAccent",light:"lightAccent"},markdownCode:{dark:"darkAccentBright",light:"lightAccentBright"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},markdownQuote:{dark:"darkStep11",light:"lightStep11"},selectedListItemText:{dark:"darkStep1",light:"lightStep1"}}}});var ez;var Bq=k(()=>{ez={$schema:"https://opencode.ai/theme.json",defs:{background:"#282a36",currentLine:"#44475a",selection:"#44475a",foreground:"#f8f8f2",comment:"#6272a4",cyan:"#8be9fd",green:"#50fa7b",orange:"#ffb86c",pink:"#ff79c6",purple:"#bd93f9",red:"#ff5555",yellow:"#f1fa8c"},theme:{primary:{dark:"purple",light:"purple"},secondary:{dark:"pink",light:"pink"},accent:{dark:"cyan",light:"cyan"},error:{dark:"red",light:"red"},warning:{dark:"yellow",light:"yellow"},success:{dark:"green",light:"green"},info:{dark:"orange",light:"orange"},text:{dark:"foreground",light:"#282a36"},textMuted:{dark:"comment",light:"#6272a4"},background:{dark:"#282a36",light:"#f8f8f2"},backgroundPanel:{dark:"#21222c",light:"#e8e8e2"},backgroundElement:{dark:"currentLine",light:"#d8d8d2"},border:{dark:"currentLine",light:"#c8c8c2"},borderActive:{dark:"purple",light:"purple"},borderSubtle:{dark:"#191a21",light:"#e0e0e0"},diffAdded:{dark:"green",light:"green"},diffRemoved:{dark:"red",light:"red"},diffContext:{dark:"comment",light:"#6272a4"},diffHunkHeader:{dark:"comment",light:"#6272a4"},diffHighlightAdded:{dark:"green",light:"green"},diffHighlightRemoved:{dark:"red",light:"red"},diffAddedBg:{dark:"#1a3a1a",light:"#e0ffe0"},diffRemovedBg:{dark:"#3a1a1a",light:"#ffe0e0"},diffContextBg:{dark:"#21222c",light:"#e8e8e2"},diffLineNumber:{dark:"#989aa4",light:"#686865"},diffAddedLineNumberBg:{dark:"#1a3a1a",light:"#e0ffe0"},diffRemovedLineNumberBg:{dark:"#3a1a1a",light:"#ffe0e0"},markdownText:{dark:"foreground",light:"#282a36"},markdownHeading:{dark:"purple",light:"purple"},markdownLink:{dark:"cyan",light:"cyan"},markdownLinkText:{dark:"pink",light:"pink"},markdownCode:{dark:"green",light:"green"},markdownBlockQuote:{dark:"comment",light:"#6272a4"},markdownEmph:{dark:"yellow",light:"yellow"},markdownStrong:{dark:"orange",light:"orange"},markdownHorizontalRule:{dark:"comment",light:"#6272a4"},markdownListItem:{dark:"purple",light:"purple"},markdownListEnumeration:{dark:"cyan",light:"cyan"},markdownImage:{dark:"cyan",light:"cyan"},markdownImageText:{dark:"pink",light:"pink"},markdownCodeBlock:{dark:"foreground",light:"#282a36"},syntaxComment:{dark:"comment",light:"#6272a4"},syntaxKeyword:{dark:"pink",light:"pink"},syntaxFunction:{dark:"green",light:"green"},syntaxVariable:{dark:"foreground",light:"#282a36"},syntaxString:{dark:"yellow",light:"yellow"},syntaxNumber:{dark:"purple",light:"purple"},syntaxType:{dark:"cyan",light:"cyan"},syntaxOperator:{dark:"pink",light:"pink"},syntaxPunctuation:{dark:"foreground",light:"#282a36"}}}});var fG;var jq=k(()=>{fG={$schema:"https://opencode.ai/theme.json",defs:{nord0:"#2E3440",nord1:"#3B4252",nord2:"#434C5E",nord3:"#4C566A",nord4:"#D8DEE9",nord5:"#E5E9F0",nord6:"#ECEFF4",nord7:"#8FBCBB",nord8:"#88C0D0",nord9:"#81A1C1",nord10:"#5E81AC",nord11:"#BF616A",nord12:"#D08770",nord13:"#EBCB8B",nord14:"#A3BE8C",nord15:"#B48EAD"},theme:{primary:{dark:"nord8",light:"nord10"},secondary:{dark:"nord9",light:"nord9"},accent:{dark:"nord7",light:"nord7"},error:{dark:"nord11",light:"nord11"},warning:{dark:"nord12",light:"nord12"},success:{dark:"nord14",light:"nord14"},info:{dark:"nord8",light:"nord10"},text:{dark:"nord6",light:"nord0"},textMuted:{dark:"#8B95A7",light:"nord1"},background:{dark:"nord0",light:"nord6"},backgroundPanel:{dark:"nord1",light:"nord5"},backgroundElement:{dark:"nord2",light:"nord4"},border:{dark:"nord2",light:"nord3"},borderActive:{dark:"nord3",light:"nord2"},borderSubtle:{dark:"nord2",light:"nord3"},diffAdded:{dark:"nord14",light:"nord14"},diffRemoved:{dark:"nord11",light:"nord11"},diffContext:{dark:"#8B95A7",light:"nord3"},diffHunkHeader:{dark:"#8B95A7",light:"nord3"},diffHighlightAdded:{dark:"nord14",light:"nord14"},diffHighlightRemoved:{dark:"nord11",light:"nord11"},diffAddedBg:{dark:"#3B4252",light:"#E5E9F0"},diffRemovedBg:{dark:"#3B4252",light:"#E5E9F0"},diffContextBg:{dark:"nord1",light:"nord5"},diffLineNumber:{dark:"#a9aeb6",light:"textMuted"},diffAddedLineNumberBg:{dark:"#3B4252",light:"#E5E9F0"},diffRemovedLineNumberBg:{dark:"#3B4252",light:"#E5E9F0"},markdownText:{dark:"nord4",light:"nord0"},markdownHeading:{dark:"nord8",light:"nord10"},markdownLink:{dark:"nord9",light:"nord9"},markdownLinkText:{dark:"nord7",light:"nord7"},markdownCode:{dark:"nord14",light:"nord14"},markdownBlockQuote:{dark:"#8B95A7",light:"nord3"},markdownEmph:{dark:"nord12",light:"nord12"},markdownStrong:{dark:"nord13",light:"nord13"},markdownHorizontalRule:{dark:"#8B95A7",light:"nord3"},markdownListItem:{dark:"nord8",light:"nord10"},markdownListEnumeration:{dark:"nord7",light:"nord7"},markdownImage:{dark:"nord9",light:"nord9"},markdownImageText:{dark:"nord7",light:"nord7"},markdownCodeBlock:{dark:"nord4",light:"nord0"},syntaxComment:{dark:"#8B95A7",light:"nord3"},syntaxKeyword:{dark:"nord9",light:"nord9"},syntaxFunction:{dark:"nord8",light:"nord8"},syntaxVariable:{dark:"nord7",light:"nord7"},syntaxString:{dark:"nord14",light:"nord14"},syntaxNumber:{dark:"nord15",light:"nord15"},syntaxType:{dark:"nord7",light:"nord7"},syntaxOperator:{dark:"nord9",light:"nord9"},syntaxPunctuation:{dark:"nord4",light:"nord0"}}}});var JG;var Wq=k(()=>{JG={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#161616",darkStep2:"#1f1f1f",darkStep3:"#282828",darkStep4:"#323232",darkStep5:"#3c3c3c",darkStep6:"#484848",darkStep7:"#545454",darkStep8:"#6a6a6a",darkStep9:"#fab283",darkStep10:"#ffc09f",darkStep11:"#808080",darkStep12:"#eeeeee",darkSecondary:"#5c9cf5",darkAccent:"#7da5c8",darkRed:"#e06c75",darkOrange:"#f5a742",darkGreen:"#7fd88f",darkCyan:"#56b6c2",darkYellow:"#e5c07b",lightStep1:"#ffffff",lightStep2:"#fafafa",lightStep3:"#f5f5f5",lightStep4:"#ebebeb",lightStep5:"#e1e1e1",lightStep6:"#d4d4d4",lightStep7:"#b8b8b8",lightStep8:"#a0a0a0",lightStep9:"#3b7dd8",lightStep10:"#2968c3",lightStep11:"#8a8a8a",lightStep12:"#1a1a1a",lightSecondary:"#7b5bb6",lightAccent:"#3d6f9f",lightRed:"#d1383d",lightOrange:"#d68c27",lightGreen:"#3d9a57",lightCyan:"#318795",lightYellow:"#b0851f"},theme:{primary:{dark:"darkStep9",light:"lightStep9"},secondary:{dark:"darkSecondary",light:"lightSecondary"},accent:{dark:"darkAccent",light:"lightAccent"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},border:{dark:"darkStep7",light:"lightStep7"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep6",light:"lightStep6"},diffAdded:{dark:"#4fd6be",light:"#1e725c"},diffRemoved:{dark:"#c53b53",light:"#c53b53"},diffContext:{dark:"#828bb8",light:"#7086b5"},diffHunkHeader:{dark:"#828bb8",light:"#7086b5"},diffHighlightAdded:{dark:"#b8db87",light:"#4db380"},diffHighlightRemoved:{dark:"#e26a75",light:"#f52a65"},diffAddedBg:{dark:"#20303b",light:"#d5e5d5"},diffRemovedBg:{dark:"#37222c",light:"#f7d8db"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"#8f8f8f",light:"#595959"},diffAddedLineNumberBg:{dark:"#1b2b34",light:"#c5d5c5"},diffRemovedLineNumberBg:{dark:"#2d1f26",light:"#e7c8cb"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkAccent",light:"lightAccent"},markdownLink:{dark:"darkStep9",light:"lightStep9"},markdownLinkText:{dark:"darkCyan",light:"lightCyan"},markdownCode:{dark:"darkGreen",light:"lightGreen"},markdownBlockQuote:{dark:"darkYellow",light:"lightYellow"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkOrange",light:"lightOrange"},markdownHorizontalRule:{dark:"darkStep11",light:"lightStep11"},markdownListItem:{dark:"darkStep9",light:"lightStep9"},markdownListEnumeration:{dark:"darkCyan",light:"lightCyan"},markdownImage:{dark:"darkStep9",light:"lightStep9"},markdownImageText:{dark:"darkCyan",light:"lightCyan"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},syntaxComment:{dark:"darkStep11",light:"lightStep11"},syntaxKeyword:{dark:"darkAccent",light:"lightAccent"},syntaxFunction:{dark:"darkStep9",light:"lightStep9"},syntaxVariable:{dark:"darkRed",light:"lightRed"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkYellow",light:"lightYellow"},syntaxOperator:{dark:"darkCyan",light:"lightCyan"},syntaxPunctuation:{dark:"darkStep12",light:"lightStep12"}}}});var YG;var Vq=k(()=>{YG={$schema:"https://opencode.ai/theme.json",defs:{darkBg0:"#111c18",darkBg1:"#1a2520",darkBg2:"#23372B",darkBg3:"#3d4a44",darkFg0:"#C1C497",darkFg1:"#9aa88a",darkGray:"#53685B",darkRed:"#FF5345",darkGreen:"#549e6a",darkYellow:"#459451",darkBlue:"#509475",darkMagenta:"#D2689C",darkCyan:"#2DD5B7",darkWhite:"#F6F5DD",darkRedBright:"#db9f9c",darkGreenBright:"#63b07a",darkYellowBright:"#E5C736",darkBlueBright:"#ACD4CF",darkMagentaBright:"#75bbb3",darkCyanBright:"#8CD3CB",lightBg0:"#F6F5DD",lightBg1:"#E8E7CC",lightBg2:"#D5D4B8",lightBg3:"#A8A78C",lightFg0:"#111c18",lightFg1:"#1a2520",lightGray:"#53685B",lightRed:"#c7392d",lightGreen:"#3d7a52",lightYellow:"#b5a020",lightBlue:"#3d7560",lightMagenta:"#a8527a",lightCyan:"#1faa90"},theme:{primary:{dark:"darkCyan",light:"lightCyan"},secondary:{dark:"darkMagenta",light:"lightMagenta"},accent:{dark:"darkGreen",light:"lightGreen"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkYellowBright",light:"lightYellow"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkCyan",light:"lightCyan"},text:{dark:"darkFg0",light:"lightFg0"},textMuted:{dark:"darkGray",light:"lightGray"},background:{dark:"darkBg0",light:"lightBg0"},backgroundPanel:{dark:"darkBg1",light:"lightBg1"},backgroundElement:{dark:"darkBg2",light:"lightBg2"},border:{dark:"darkBg3",light:"lightBg3"},borderActive:{dark:"darkCyan",light:"lightCyan"},borderSubtle:{dark:"darkBg2",light:"lightBg2"},diffAdded:{dark:"darkGreen",light:"lightGreen"},diffRemoved:{dark:"darkRed",light:"lightRed"},diffContext:{dark:"darkGray",light:"lightGray"},diffHunkHeader:{dark:"darkCyan",light:"lightCyan"},diffHighlightAdded:{dark:"darkGreenBright",light:"lightGreen"},diffHighlightRemoved:{dark:"darkRedBright",light:"lightRed"},diffAddedBg:{dark:"#15241c",light:"#e0eee5"},diffRemovedBg:{dark:"#241515",light:"#eee0e0"},diffContextBg:{dark:"darkBg1",light:"lightBg1"},diffLineNumber:{dark:"#828b87",light:"#5f5e4f"},diffAddedLineNumberBg:{dark:"#121f18",light:"#d5e5da"},diffRemovedLineNumberBg:{dark:"#1f1212",light:"#e5d5d5"},markdownText:{dark:"darkFg0",light:"lightFg0"},markdownHeading:{dark:"darkCyan",light:"lightCyan"},markdownLink:{dark:"darkCyanBright",light:"lightCyan"},markdownLinkText:{dark:"darkGreen",light:"lightGreen"},markdownCode:{dark:"darkGreenBright",light:"lightGreen"},markdownBlockQuote:{dark:"darkGray",light:"lightGray"},markdownEmph:{dark:"darkMagenta",light:"lightMagenta"},markdownStrong:{dark:"darkFg0",light:"lightFg0"},markdownHorizontalRule:{dark:"darkGray",light:"lightGray"},markdownListItem:{dark:"darkCyan",light:"lightCyan"},markdownListEnumeration:{dark:"darkCyanBright",light:"lightCyan"},markdownImage:{dark:"darkCyanBright",light:"lightCyan"},markdownImageText:{dark:"darkGreen",light:"lightGreen"},markdownCodeBlock:{dark:"darkFg0",light:"lightFg0"},syntaxComment:{dark:"darkGray",light:"lightGray"},syntaxKeyword:{dark:"darkCyan",light:"lightCyan"},syntaxFunction:{dark:"darkBlue",light:"lightBlue"},syntaxVariable:{dark:"darkFg0",light:"lightFg0"},syntaxString:{dark:"darkGreenBright",light:"lightGreen"},syntaxNumber:{dark:"darkMagenta",light:"lightMagenta"},syntaxType:{dark:"darkGreen",light:"lightGreen"},syntaxOperator:{dark:"darkYellow",light:"lightYellow"},syntaxPunctuation:{dark:"darkFg0",light:"lightFg0"}}}});var zG;var Kq=k(()=>{zG={$schema:"https://opencode.ai/theme.json",defs:{darkStep1:"#1a1b26",darkStep2:"#1e2030",darkStep3:"#222436",darkStep4:"#292e42",darkStep5:"#3b4261",darkStep6:"#545c7e",darkStep7:"#737aa2",darkStep8:"#9099b2",darkStep9:"#82aaff",darkStep10:"#89b4fa",darkStep11:"#828bb8",darkStep12:"#c8d3f5",darkRed:"#ff757f",darkOrange:"#ff966c",darkYellow:"#ffc777",darkGreen:"#c3e88d",darkCyan:"#86e1fc",darkPurple:"#c099ff",lightStep1:"#e1e2e7",lightStep2:"#d5d6db",lightStep3:"#c8c9ce",lightStep4:"#b9bac1",lightStep5:"#a8aecb",lightStep6:"#9699a8",lightStep7:"#737a8c",lightStep8:"#5a607d",lightStep9:"#2e7de9",lightStep10:"#1a6ce7",lightStep11:"#8990a3",lightStep12:"#3760bf",lightRed:"#f52a65",lightOrange:"#b15c00",lightYellow:"#8c6c3e",lightGreen:"#587539",lightCyan:"#007197",lightPurple:"#9854f1"},theme:{primary:{dark:"darkStep9",light:"lightStep9"},secondary:{dark:"darkPurple",light:"lightPurple"},accent:{dark:"darkOrange",light:"lightOrange"},error:{dark:"darkRed",light:"lightRed"},warning:{dark:"darkOrange",light:"lightOrange"},success:{dark:"darkGreen",light:"lightGreen"},info:{dark:"darkStep9",light:"lightStep9"},text:{dark:"darkStep12",light:"lightStep12"},textMuted:{dark:"darkStep11",light:"lightStep11"},background:{dark:"darkStep1",light:"lightStep1"},backgroundPanel:{dark:"darkStep2",light:"lightStep2"},backgroundElement:{dark:"darkStep3",light:"lightStep3"},border:{dark:"darkStep7",light:"lightStep7"},borderActive:{dark:"darkStep8",light:"lightStep8"},borderSubtle:{dark:"darkStep6",light:"lightStep6"},diffAdded:{dark:"#4fd6be",light:"#1e725c"},diffRemoved:{dark:"#c53b53",light:"#c53b53"},diffContext:{dark:"#828bb8",light:"#7086b5"},diffHunkHeader:{dark:"#828bb8",light:"#7086b5"},diffHighlightAdded:{dark:"#b8db87",light:"#4db380"},diffHighlightRemoved:{dark:"#e26a75",light:"#f52a65"},diffAddedBg:{dark:"#20303b",light:"#d5e5d5"},diffRemovedBg:{dark:"#37222c",light:"#f7d8db"},diffContextBg:{dark:"darkStep2",light:"lightStep2"},diffLineNumber:{dark:"#8f909a",light:"#59595b"},diffAddedLineNumberBg:{dark:"#1b2b34",light:"#c5d5c5"},diffRemovedLineNumberBg:{dark:"#2d1f26",light:"#e7c8cb"},markdownText:{dark:"darkStep12",light:"lightStep12"},markdownHeading:{dark:"darkPurple",light:"lightPurple"},markdownLink:{dark:"darkStep9",light:"lightStep9"},markdownLinkText:{dark:"darkCyan",light:"lightCyan"},markdownCode:{dark:"darkGreen",light:"lightGreen"},markdownBlockQuote:{dark:"darkYellow",light:"lightYellow"},markdownEmph:{dark:"darkYellow",light:"lightYellow"},markdownStrong:{dark:"darkOrange",light:"lightOrange"},markdownHorizontalRule:{dark:"darkStep11",light:"lightStep11"},markdownListItem:{dark:"darkStep9",light:"lightStep9"},markdownListEnumeration:{dark:"darkCyan",light:"lightCyan"},markdownImage:{dark:"darkStep9",light:"lightStep9"},markdownImageText:{dark:"darkCyan",light:"lightCyan"},markdownCodeBlock:{dark:"darkStep12",light:"lightStep12"},syntaxComment:{dark:"darkStep11",light:"lightStep11"},syntaxKeyword:{dark:"darkPurple",light:"lightPurple"},syntaxFunction:{dark:"darkStep9",light:"lightStep9"},syntaxVariable:{dark:"darkRed",light:"lightRed"},syntaxString:{dark:"darkGreen",light:"lightGreen"},syntaxNumber:{dark:"darkOrange",light:"lightOrange"},syntaxType:{dark:"darkYellow",light:"lightYellow"},syntaxOperator:{dark:"darkCyan",light:"lightCyan"},syntaxPunctuation:{dark:"darkStep12",light:"lightStep12"}}}});function TB(f,J,Y=[]){if(J===void 0)return null;if(typeof J!=="string")return TB(f,J.dark,Y);if(J==="transparent"||J==="none")return null;if(J.startsWith("#"))return J;if(Y.includes(J))return null;let z=f.defs?.[J]??f.theme[J];return TB(f,z,[...Y,J])}function IB(f){return Math.max(0,Math.min(255,Math.round(f)))}function WX(f,J,Y){let z=Number.parseInt(f.slice(1),16),G=Number.parseInt(J.slice(1),16),X=(Q,H)=>Q>>H&255;return`#${(IB(X(z,16)+(X(G,16)-X(z,16))*Y)<<16|IB(X(z,8)+(X(G,8)-X(z,8))*Y)<<8|IB(X(z,0)+(X(G,0)-X(z,0))*Y)).toString(16).padStart(6,"0")}`}function Wg(f){let J=(Q)=>TB(f,f.theme[Q]),Y=J("background"),z=J("text");if(!Y||!z)return null;let G=J("textMuted")??WX(z,Y,0.35),X=J("primary")??z,q=J("border")??WX(z,Y,0.8);return{bg:Y,surface:J("backgroundPanel")??Y,inset:J("backgroundElement")??Y,menu:J("backgroundMenu")??J("backgroundElement")??Y,line:q,"line-subtle":J("borderSubtle")??q,"line-active":J("borderActive")??WX(q,z,0.3),fg:z,muted:G,subtle:WX(G,Y,0.35),primary:X,"primary-hover":WX(X,z,0.35),"kobe-orange":X,"kobe-green":J("success")??z,"kobe-blue":J("info")??z,"kobe-red":J("error")??z,"kobe-yellow":J("warning")??z,"kobe-violet":J("secondary")??X}}function O7(f,J){if(J.pathname!==Kg)return null;if(f.method!=="GET")return Response.json({error:"method not allowed"},{status:405});return Response.json({themes:Vg})}var jg,Vg,Kg="/api/themes";var A7=k(()=>{Qq();Hq();Bq();jq();Wq();Vq();Kq();jg={claude:sz,conductor:tz,dracula:ez,nord:fG,opencode:JG,"osaka-jade":YG,tokyonight:zG};Vg=Object.fromEntries(Object.entries(jg).map(([f,J])=>[f,Wg(J)]).filter((f)=>f[1]!==null))});import{createHash as Ug,randomUUID as Dg}from"crypto";import{mkdir as Lg}from"fs/promises";import{join as uB,resolve as Mg}from"path";function Ag(f){return Ug("sha1").update(f).digest("hex").slice(0,16)}async function Cg(f){let J=Number.parseInt(f.headers.get("content-length")??"",10);if(Number.isFinite(J)&&J>g7)return Response.json({error:"asset too large"},{status:413});let Y;try{Y=await f.formData()}catch{return Response.json({error:"invalid form data"},{status:400})}let z=Y.get("repoRoot");if(typeof z!=="string"||z.length===0)return Response.json({error:"missing repoRoot"},{status:400});let G=Y.get("file");if(!(G instanceof File))return Response.json({error:"file must be a File"},{status:400});if(G.size>g7)return Response.json({error:"asset too large"},{status:413});let X=Fg[G.type];if(!X)return Response.json({error:`unsupported content-type: ${G.type||"unknown"}`},{status:415});try{let q=Ag(z),Q=uB(cQ(),q);await Lg(Q,{recursive:!0});let B=`${Dg()}.${X}`;return await Bun.write(uB(Q,B),G),Response.json({url:`${Uq}/${q}/${B}`})}catch(q){return Response.json({error:q instanceof Error?q.message:String(q)},{status:500})}}async function kg(f){let J=f.slice(Uq.length+1),Y=J.indexOf("/");if(Y<0)return Response.json({error:"not found"},{status:404});let z=J.slice(0,Y),G=J.slice(Y+1);if(!gg.test(z)||!Rg.test(G))return Response.json({error:"invalid asset path"},{status:400});let X=cQ(),q=Mg(X,z,G);if(q!==uB(X,z,G)||!q.startsWith(`${X}/`))return Response.json({error:"invalid asset path"},{status:400});let Q=G.slice(G.lastIndexOf(".")+1).toLowerCase(),H=Og[Q];if(!H)return Response.json({error:"invalid asset path"},{status:400});let B=Bun.file(q);if(!await B.exists())return Response.json({error:"not found"},{status:404});return new Response(B,{headers:{"content-type":H,"cache-control":"public, max-age=31536000, immutable","x-content-type-options":"nosniff"}})}async function R7(f,J){if(J.pathname===Uq){if(f.method==="POST")return Cg(f);return Response.json({error:"method not allowed"},{status:405})}if(J.pathname.startsWith(`${Uq}/`)){if(f.method==="GET")return kg(J.pathname);return Response.json({error:"method not allowed"},{status:405})}return null}var Uq="/api/issue-assets",g7=10485760,Fg,Og,gg,Rg;var C7=k(()=>{lf();Fg={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp"},Og={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp"};gg=/^[a-f0-9]{16}$/,Rg=/^[A-Za-z0-9_-]+\.[a-z0-9]+$/});function k7(f,J=500){return Response.json({error:f instanceof Error?f.message:String(f)},{status:J})}function N7(f){let J=f instanceof Error?f.message:String(f);if(/^no issue #\d+$/.test(J))return 404;if(J==="repoRoot is required"||J==="repoRoot does not exist"||J==="repoRoot is not a git repository"||J==="missing op"||J==="create requires a non-empty title"||J==="body must be a string"||J==="setStatus requires a numeric id"||J.startsWith("invalid status:")||J==="update requires a numeric id"||J==="title must be a non-empty string"||J==="link requires a numeric id"||J==="link requires a non-empty taskId"||J==="unlink requires a numeric id"||J==="delete requires a numeric id"||J.startsWith("unknown op type:"))return 400;return 500}async function Ng(f,J){let Y=J.searchParams.get("repoRoot");if(!Y)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await f.request("issue.list",{repoRoot:Y}))}catch(z){return k7(z,N7(z))}}async function yg(f,J){let Y;try{Y=await J.json()}catch{return Response.json({error:"invalid JSON body"},{status:400})}if(Y===null||typeof Y!=="object"||Array.isArray(Y))return Response.json({error:"body must be a JSON object"},{status:400});let z=Y;if(typeof z.repoRoot!=="string"||z.repoRoot.length===0)return Response.json({error:"missing repoRoot"},{status:400});try{return Response.json(await f.request("issue.mutate",{repoRoot:z.repoRoot,op:z.op}))}catch(G){return k7(G,N7(G))}}async function y7(f,J,Y){if(J.pathname!=="/api/issues")return null;if(f.method==="GET")return Ng(Y,J);if(f.method==="POST")return yg(Y,f);return Response.json({error:"method not allowed"},{status:405})}function b7(f){return bg.has(String(f??"").trim().toLowerCase())}function S7(f){try{if(!f)return null;let J=new URL(f);if(J.protocol!=="http:"&&J.protocol!=="https:")return null;return J.hostname}catch{return null}}function Sg(f){let J=S7(f);return J!==null&&b7(J)}function I7(f,J={}){if(!f)return!0;if(Sg(f))return!0;let Y=J.allowedHost?.trim();if(!Y)return!1;let z=S7(f);return z!==null&&z===Y}function T7(f){let J=String(f??"").trim();return J&&!b7(J)?J:void 0}var bg;var u7=k(()=>{bg=new Set(["localhost","127.0.0.1","::1","[::1]"])});var Ig,E7;var x7=k(()=>{Ig=["daemon.status","task.list","task.get","task.create","task.archive","task.rename","task.setBranch","task.setVendor","task.delete","task.pin","task.move","task.status","task.reorder","task.ensureMain","task.ensureWorktree","task.setActive","worktree.discoverAdoptable","worktree.adopt"],E7=new Set(Ig)});var EB={};jf(EB,{resolveRepoInit:()=>P7,resolveEngineLaunchInit:()=>oJ});import{existsSync as h7,readFileSync as Tg}from"fs";import{join as Dq}from"path";function Eg(f){return h7(Dq(f,w7))?`sh ${w7}`:void 0}function xg(f){let J=Dq(f,ug);if(!h7(J))return;try{let Y=Tg(J,"utf8");return Y.trim().length>0?Y:void 0}catch{return}}function P7(f,J){let Y=f?tQ(f):{},z=Eg(J)??Y.initScript,G=xg(J)??Y.initPrompt;return{initScript:z&&z.trim().length>0?z:void 0,initPrompt:G&&G.trim().length>0?G:void 0}}function wg(f,J){if(f.kind==="none")return;if(f.kind==="explicit")return{source:"explicit",text:f.prompt};let Y=J.initPrompt?.trim();return Y?{source:"repo-init",text:Y}:void 0}function oJ(f,J,Y={kind:"repo-init"}){let z=P7(f,J);return{initScript:z.initScript,firstMessage:wg(Y,z)}}var w7,ug;var GG=k(()=>{gf();w7=Dq(".kobe","init.sh"),ug=Dq(".kobe","init-prompt.md")});import{existsSync as v7,readFileSync as hg}from"fs";function m7(){Mz=null}function Pg(){let f=G9();if(v7(f))return{canonical:f,found:f};let J=f.replace(/\.yaml$/,".yml");if(v7(J))return{canonical:f,found:J};return{canonical:f,found:null}}function Lq(){if(Mz)return Mz;let{canonical:f,found:J}=Pg();if(!J)return Mz={path:f,exists:!1,doc:null,warnings:[]},Mz;let Y=[],z=null;try{let G=hg(J,"utf8");z=Bun.YAML.parse(G)}catch(G){let X=G instanceof Error?G.message:String(G);Y.push(`could not read/parse ${J}: ${X}`)}return Mz={path:f,exists:!0,doc:z,warnings:Y},Mz}var Mz=null;var xB=k(()=>{lf()});function XG(f,J){let Y=`alternating [${f}, ${J}] pairs`;return{layout:Y,validateCount:(z)=>z>=2&&z%2===0?null:`needs ${Y} (an even number of chords \u2014 got ${z})`}}function lg(f,J){let Y=f.trim().toLowerCase();if(!Y)return{error:"empty chord"};let z=Y.split("+"),G=z.pop()??"";if(G===""&&z.length>0){if(G="+",z[z.length-1]==="")z.pop()}if(!G)return{error:`"${f}": no key after the modifiers`};let X=new Set;for(let H of z){let B=cg[H];if(!B)return{error:`"${f}": unknown modifier "${H}" (use ctrl / cmd / alt / shift)`};X.add(B)}if(G=ng[G]??G,X.has("shift")&&G.length===1&&!J?.allowShiftCharacter)return{error:`"${f}": shift+<character> can never match \u2014 terminals deliver shift+letter as a plain character, not a modifier event`};let q=ig.filter((H)=>X.has(H)).join("+"),Q=q?`${q}+${G}`:G;if(G.length>1&&!dg.has(G))return{chord:Q,warning:`"${f}": unrecognized key name "${G}" \u2014 the chord may never fire`};return{chord:Q}}function Mq(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function ag(f){if(f==="darwin")return["darwin","macos","mac"];if(f==="win32")return["win32","windows"];return[f]}function $g(f){if(!Mq(f))return null;let J=f.bindings;if(Mq(J))return J;return f}function Fq(f,J,Y){let z=[];if(f===null||f===void 0)return{entries:[],warnings:z};if(!Mq(f))return{entries:[],warnings:["config root must be a YAML mapping (e.g. a top-level `bindings:` key)"]};let G=new Map,X=[];if(f.bindings!==void 0)if(Mq(f.bindings))X.push(f.bindings);else z.push("`bindings:` must be a mapping of id \u2192 chord(s)");for(let q of ag(J)){let Q=f[q];if(Q===void 0)continue;let H=$g(Q);if(H)X.push(H);else z.push(`\`${q}:\` must be a mapping (or contain a \`bindings:\` mapping)`)}for(let q of X)for(let[Q,H]of Object.entries(q)){if(H===null||H===!1||Array.isArray(H)&&H.length===0){G.set(Q,[]);continue}let B=typeof H==="string"?[H]:Array.isArray(H)?H:null;if(!B){z.push(`${Q}: expected a chord string, a list of chords, or null \u2014 got ${typeof H}`);continue}let V=[],j=!1;for(let U of B){if(typeof U!=="string"){z.push(`${Q}: chord entries must be strings`),j=!0;continue}let L=lg(U,Y?.chordOptsFor?.(Q));if("error"in L){z.push(`${Q}: ${L.error}`),j=!0;continue}if(L.warning)z.push(`${Q}: ${L.warning}`);if(!V.includes(L.chord))V.push(L.chord)}if(V.length===0&&j){z.push(`${Q}: no valid chords \u2014 keeping the default`);continue}G.set(Q,V)}return{entries:Array.from(G,([q,Q])=>({id:q,keys:Q})),warnings:z}}function rg(f,J){return f===J||f==="global"||J==="global"}function c7(f,J){let Y=[],z=[];for(let G of J){let X=f.find((j)=>j.id===G.id);if(!X){Y.push(`${G.id}: unknown binding id (press F1 in kobe for the full list)`);continue}let q=wB[G.id];if(q){Y.push(`${G.id}: not customizable \u2014 ${q}`);continue}if(X.keys.length===0){Y.push(`${G.id}: not customizable \u2014 the key is handled outside the keymap (doc-only row)`);continue}let Q=vg[G.id];if(Q&&G.keys.length>0){let j=Q.validateCount(G.keys.length);if(j){Y.push(`${G.id}: ${j} \u2014 keeping the default`);continue}}let H=G.keys.filter((j)=>{if(j.length===1&&mg.has(X.scope))return Y.push(`${G.id}: "${j}" dropped \u2014 a bare character on a ${X.scope}-scope binding would steal typed input (add a modifier)`),!1;return!0});if(H.length===0&&G.keys.length>0){Y.push(`${G.id}: no chords survived validation \u2014 keeping the default`);continue}if(Q&&H.length!==G.keys.length){Y.push(`${G.id}: a dropped chord would shift the slot layout (${Q.layout}) \u2014 keeping the default`);continue}let B=X.keys,V=X;if(V.keys=H,X.hint)if(H.length===0)V.hint=void 0;else X.hint.keys=H.join("/");z.push({id:G.id,keys:H,defaultKeys:B})}for(let G of z)for(let X of G.keys){let q=f.find((Q)=>Q.id===G.id);if(!q)continue;for(let Q of f){if(Q.id===G.id)continue;if(!Q.keys.includes(X))continue;if(!rg(q.scope,Q.scope))continue;Y.push(`${G.id}: "${X}" also fires ${Q.id} (${Q.scope} scope) \u2014 last registration wins; consider a different chord`)}}return{applied:z,warnings:Y}}var wB,vg,mg,cg,ng,dg,ig;var Oq=k(()=>{wB={"focus.numeric":"pane focus is positional (h/j/k/l \u2192 pane) and mirrors the tmux-layer ctrl+hjkl bindings \u2014 rebind tmux.focus instead","sidebar.goto":"gg vs Shift+G is discriminated via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't carry both halves","sidebar.pin":"fires on Shift+P via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't work","sidebar.localMerge":"fires on Shift+M via evt.shift; shift+<letter> chords are inexpressible, so a rebind can't work","chat.question.nav":"the question picker has no live registration site (display-only row) \u2014 rebinding would change Help without changing behavior","chat.question.pick-number":"digits map to options positionally and the question picker has no live registration site (display-only row)"};vg={"sidebar.nav":XG("down","up"),"files.nav":XG("down","up"),"sidebar.search.nav":XG("down","up"),"files.hierarchy":XG("collapse","expand"),"sidebar.view":XG("previous view","next view"),"files.tab":XG("previous tab","next tab")},mg=new Set(["global","workspace","terminal"]),cg={ctrl:"ctrl",control:"ctrl",ctl:"ctrl",cmd:"cmd",command:"cmd",meta:"cmd",super:"cmd",win:"cmd",alt:"alt",option:"alt",opt:"alt",shift:"shift"},ng={esc:"escape",spacebar:"space",pgup:"pageup",pgdn:"pagedown",pgdown:"pagedown"},dg=new Set(["up","down","left","right","pageup","pagedown","home","end","insert","delete","backspace","tab","space","escape","enter","return",...Array.from({length:12},(f,J)=>`f${J+1}`)]),ig=["ctrl","cmd","alt","shift"]});function ZG(f){return f in n7}function Az(f,J){let Y=f.split("+"),z=Y.pop()??"";if(z===""&&Y.length>0){if(z="+",Y[Y.length-1]==="")Y.pop()}let G=new Set(Y);if(G.has("cmd"))return{error:`"${f}": the Command key never reaches tmux \u2014 use ctrl/alt/shift`};let X;if(z.length===1)X=G.has("shift")?z.toUpperCase():z;else{let H=_g[z];if(!H)return{error:`"${f}": tmux can't bind the key "${z}"`};X=H}let q=/^f\d+$/.test(z);if(G.size===0&&!q&&!J?.allowBare)return{error:`"${f}": tmux session keys are no-prefix root bindings live in every pane \u2014 a bare key would shadow typing (add a modifier, or use an F-key)`};let Q="";if(G.has("ctrl"))Q+="C-";if(G.has("alt"))Q+="M-";if(G.has("shift"))Q+="S-";return{key:Q+X}}function i7(){let f={};for(let[Y,z]of Object.entries(Oz)){let G=Az(z,{allowBare:ZG(Y)});if("error"in G)throw Error(`default tmux chord for ${Y} failed to translate: ${G.error}`);f[Y]={chord:z,key:G.key}}let J=yY.map((Y)=>{let z=Az(Y);if("error"in z)throw Error(`default tmux focus chord ${Y} failed to translate`);return{chord:Y,key:z.key}});return{binds:f,focus:J,overridden:new Set,warnings:[]}}function hB(f){let J=i7(),Y=new Set;for(let z of f){if(!z.id.startsWith("tmux."))continue;if(z.id===SJ){if(z.keys.length===0){J.focus=[null,null,null,null],Y.add(SJ);continue}if(z.keys.length!==yY.length){J.warnings.push(`${SJ}: needs exactly 4 chords in order left/down/up/right (got ${z.keys.length}) \u2014 keeping the default`);continue}let Q=[],H=!0;for(let B of z.keys){let V=Az(B);if("error"in V){J.warnings.push(`${SJ}: ${V.error} \u2014 keeping the default`),H=!1;break}Q.push({chord:B,key:V.key})}if(!H)continue;J.focus=Q,Y.add(SJ);continue}if(!(z.id in Oz)){J.warnings.push(`${z.id}: unknown tmux binding id`);continue}let G=z.id;if(z.keys.length===0){J.binds[G]=null,Y.add(G);continue}if(z.keys.length>1)J.warnings.push(`${G}: tmux bindings take ONE chord \u2014 using "${z.keys[0]}", ignoring the rest`);let X=z.keys[0],q=Az(X,{allowBare:ZG(G)});if("error"in q){J.warnings.push(`${G}: ${q.error} \u2014 keeping the default`);continue}if(X!==Oz[G])Y.add(G);J.binds[G]={chord:X,key:q.key}}return J.overridden=Y,J}function PB(f){return f.startsWith("tmux.")?{allowShiftCharacter:!0}:{}}function l7(){Fz=null}function Aq(){if(Fz)return Fz;let f=Lq();if(!f.exists||f.doc===null)return Fz=i7(),Fz;let J=Fq(f.doc,process.platform,{chordOptsFor:PB}),Y=J.warnings.filter((G)=>G.startsWith("tmux.")),z=hB(J.entries);z.warnings=[...Y,...z.warnings];for(let G of z.warnings)console.warn(`[kobe/keybindings] ${G}`);return Fz=z,Fz}var pg,n7,d7,Oz,SJ="tmux.focus",yY,_g,Fz=null;var gq=k(()=>{xB();Oq();pg={"tmux.detach":"ctrl+q","tmux.tab.new":"ctrl+t","tmux.tab.chooseEngine":"ctrl+shift+t","tmux.tab.prev":"ctrl+[","tmux.tab.next":"ctrl+]","tmux.tab.close":"ctrl+w","tmux.tab.rename":"f2"},n7={"tmux.layout.workspaceSplit":"s","tmux.layout.workspaceClose":"x","tmux.layout.workspaceReset":"r","tmux.layout.tasksToggle":"a","tmux.layout.opsToggle":"o","tmux.layout.terminalToggle":"z","tmux.layout.zenToggle":"space"},d7=["F6","F7","F8","F9","F10","F11"],Oz={...pg,...n7};yY=["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],_g={up:"Up",down:"Down",left:"Left",right:"Right",pageup:"PgUp",pagedown:"PgDn",home:"Home",end:"End",insert:"IC",delete:"DC",backspace:"BSpace",tab:"Tab",space:"Space",escape:"Escape",enter:"Enter",return:"Enter",...Object.fromEntries(Array.from({length:12},(f,J)=>[`f${J+1}`,`F${J+1}`]))}});async function VX(f,J){let Y=null;for(let G=0;G<24;G++){let X=await $z(f);if(X){if(!J)return{pane:X,ready:!0};let q=(await rz(X)).trim();if(q.length>0&&q===Y)return{pane:X,ready:!0};Y=q}await a7(250)}return{pane:await $z(f)||await JB(f),ready:!1}}async function KX(f,J){let Y=`kobe-api-${f.replace(/[^A-Za-z0-9]/g,"")}`;await h0(["set-buffer","-b",Y,"--",J]),await h0(["paste-buffer","-p","-d","-b",Y,"-t",f]),await a7(og),await GX(f,"Enter")}async function $7(f,J){let{pane:Y}=await VX(f,!0);if(!Y)return;await KX(Y,J.text)}var a7=(f)=>new Promise((J)=>setTimeout(J,f)),og=150;var Rq=k(()=>{Tf()});function r7(f,J){if(f===null)return{kind:"create",reason:"no session with this name \u2014 build fresh"};let Y=f.worktree===J.cwd,z=!J.vendor||f.vendor===J.vendor;if(f.claudePaneAlive&&Y&&z)return{kind:"reuse",reason:"healthy: engine pane alive, worktree + vendor match"};if(Y&&!z&&J.hasEngineCommand)return{kind:"respawn-engine",reason:`vendor drift: session tagged ${f.vendor===""?"<untagged>":`"${f.vendor}"`}, task wants "${J.vendor}" \u2014 relaunch engine pane in place (KOB-232)`};if(Y&&z&&f.windowCount>1)return{kind:"reuse",reason:"active window's engine pane is gone but sibling chat tabs exist \u2014 reuse rather than drop them"};if(!Y)return{kind:"rebuild",reason:f.worktree===""?"legacy session with no @kobe_worktree tag \u2014 rebuild in the right place":`worktree drift: session tagged "${f.worktree}", task wants "${J.cwd}" \u2014 rebuild`};if(!z)return{kind:"rebuild",reason:"vendor drift but no engine command to respawn with \u2014 rebuild"};return{kind:"rebuild",reason:"single-window session whose engine pane was destroyed \u2014 rebuild"}}var p7;var _7=k(()=>{Qq();Hq();Bq();jq();Wq();Vq();Kq();p7={claude:sz,conductor:tz,nord:fG,opencode:JG,dracula:ez,tokyonight:zG,"osaka-jade":YG}});function sg(f){let J=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.exec(f);if(!J)return null;let Y=J[1];if(Y.length===3){let[z,G,X]=Y;return`#${z}${z}${G}${G}${X}${X}`.toLowerCase()}return`#${Y.slice(0,6)}`.toLowerCase()}function o7(f,J,Y="dark"){let z=f.defs??{};function G(q,Q){if(typeof q==="string"){if(q==="transparent"||q==="none")return null;if(q.startsWith("#"))return sg(q);if(Q.includes(q))return null;let B=z[q]??f.theme[q];if(B===void 0)return null;return G(B,[...Q,q])}if(!q||typeof q!=="object")return null;let H=q[Y];return typeof H==="string"?G(H,Q):null}let X=f.theme[J];if(X===void 0)return null;return G(X,[J])}function Cq(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function kq(f){if(!Cq(f))return{ok:!1,reason:"theme must be a JSON object at the top level"};let J=f;if(!("theme"in J))return{ok:!1,reason:"missing required key `theme`"};let Y=J.theme;if(!Cq(Y))return{ok:!1,reason:"`theme` must be an object map"};if("defs"in J&&J.defs!==void 0){if(!Cq(J.defs))return{ok:!1,reason:"`defs` must be an object map"};for(let[z,G]of Object.entries(J.defs))if(typeof G!=="string")return{ok:!1,reason:`defs.${z} must be a string (hex like "#abc" or a ref name)`}}for(let[z,G]of Object.entries(Y)){if(typeof G==="string")continue;if(!Cq(G))return{ok:!1,reason:`theme.${z} must be a string or a { dark, light } object (got ${G===null?"null":Array.isArray(G)?"array":typeof G})`};let X=G;if(typeof X.dark!=="string")return{ok:!1,reason:`theme.${z}.dark must be a string`};if(typeof X.light!=="string")return{ok:!1,reason:`theme.${z}.light must be a string`}}if("$schema"in J&&J.$schema!==void 0&&typeof J.$schema!=="string")return{ok:!1,reason:"`$schema` must be a string when present"};return{ok:!0,theme:J}}var vB=()=>{};import{readFileSync as tg,readdirSync as eg}from"fs";import{join as s7}from"path";function qG(){return s7(ef(),"themes")}function UX(){let f=qG(),J;try{J=eg(f)}catch{return[]}let Y=[];for(let z of J){if(!z.endsWith(".json"))continue;let G=s7(f,z),X;try{let H=tg(G,"utf8");X=JSON.parse(H)}catch(H){let B=H instanceof Error?H.message:String(H);console.warn(`[kobe] skipping user theme ${G}: invalid JSON \u2014 ${B}`);continue}let q=kq(X);if(!q.ok){console.warn(`[kobe] skipping user theme ${G}: ${q.reason}`);continue}let Q=z.slice(0,-5);Y.push({name:Q,theme:q.theme})}return Y}var Nq=k(()=>{lf();vB()});import{readFileSync as fR}from"fs";function YR(){try{let f=JSON.parse(fR(m1(),"utf8")),J=typeof f.activeTheme==="string"&&f.activeTheme?f.activeTheme:"claude",Y=typeof f.focusAccent==="string"&&JR.includes(f.focusAccent)?f.focusAccent:"primary";return{themeName:J,focusAccentSlot:Y,enabled:f.tmuxChromeTheme!=="off"&&f.tmuxBorderTheme!=="off"}}catch{return{themeName:"claude",focusAccentSlot:"primary",enabled:!0}}}function zR(f){return UX().find((Y)=>Y.name===f)?.theme??p7[f]??null}function VJ(f,...J){for(let Y of J){let z=o7(f,Y);if(z)return z}return null}function t7(f,J){let Y=VJ(f,"text"),z=VJ(f,"background"),G=VJ(f,"textMuted","text"),X=VJ(f,"backgroundPanel","background"),q=VJ(f,"backgroundElement","backgroundPanel","background"),Q=VJ(f,"backgroundMenu","backgroundElement","backgroundPanel","background"),H=VJ(f,"selectedListItemText","background"),B=VJ(f,J,"primary","borderActive","border","text");return{border:VJ(f,"border","text"),activeBorder:B,statusBg:X,statusFg:G,statusMutedFg:G,windowFg:G,currentWindowBg:q,currentWindowFg:B,activityFg:VJ(f,"info","primary","text"),bellFg:VJ(f,"warning","error","primary","text"),messageBg:Q,messageFg:Y,messageCommandFg:B,modeBg:B,modeFg:H??z}}function $1(f){let J=[];if(f.bg)J.push(`bg=${f.bg}`);if(f.fg)J.push(`fg=${f.fg}`);if(J.length===0)return null;if(f.attrs)J.push(...f.attrs);return J.join(",")}function f5(f){let J=$1({bg:f.statusBg,fg:f.statusFg}),Y=$1({bg:f.statusBg,fg:f.statusMutedFg}),z=$1({bg:f.statusBg,fg:f.windowFg});return[{key:"border",option:"pane-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:$1({fg:f.border})},{key:"active",option:"pane-active-border-style",showFlag:"-gwqv",setFlag:"-gw",unsetFlag:"-gwu",value:$1({fg:f.activeBorder})},{key:"status",option:"status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:J},{key:"status-left",option:"status-left-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Y},{key:"status-right",option:"status-right-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:Y},{key:"window",option:"window-status-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:z},{key:"current-window",option:"window-status-current-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.currentWindowBg,fg:f.currentWindowFg,attrs:["bold"]})},{key:"activity-window",option:"window-status-activity-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.statusBg,fg:f.activityFg})},{key:"bell-window",option:"window-status-bell-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.statusBg,fg:f.bellFg,attrs:["bold"]})},{key:"last-window",option:"window-status-last-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.statusBg,fg:f.statusFg})},{key:"message",option:"message-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.messageBg,fg:f.messageFg})},{key:"message-command",option:"message-command-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.messageBg,fg:f.messageCommandFg,attrs:["bold"]})},{key:"mode",option:"mode-style",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:$1({bg:f.modeBg,fg:f.modeFg})},{key:"display-panes",option:"display-panes-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:f.border},{key:"display-panes-active",option:"display-panes-active-colour",showFlag:"-gqv",setFlag:"-g",unsetFlag:"-gu",value:f.activeBorder}]}function GR(f){let J=new Set(f.marker.split(",").map((X)=>X.trim()).filter(Boolean)),Y=[],z=[];for(let X of f5(f.hexes))if(X.value){if((f.current[X.key]??"")!==X.value)Y.push(["set-option",X.setFlag,X.option,X.value]);z.push(X.key)}else if(J.has(X.key))Y.push(["set-option",X.unsetFlag,X.option]);let G=z.join(",");if(G!==f.marker)Y.push(G?["set-option","-g",mB,G]:["set-option","-gu",mB]);return Y}async function e7(f){let{code:J,stdout:Y}=await d0(f);return J===0?Y.trim():""}async function gz(){try{let f=YR(),J=f.enabled?zR(f.themeName):null,Y=J?t7(J,f.focusAccentSlot):t7({theme:{}},f.focusAccentSlot),z=f5(Y),[G,...X]=await Promise.all([e7(["show-options","-gqv",mB]),...z.map((H)=>e7(["show-options",H.showFlag,H.option]))]),q=Object.fromEntries(z.map((H,B)=>[H.key,X[B]??""])),Q=GR({marker:G,current:q,hexes:Y});if(Q.length>0)await Pf(Q)}catch{}}var mB="@kobe_border_theme",JR;var yq=k(()=>{lf();Tf();_7();Nq();JR=["primary","success","info"]});function J5(){return nf()[bq]!==!1}var bq="zen.keepTasks";var cB=k(()=>{pY()});var Sq={};jf(Sq,{recordGen:()=>bY,isLatestGen:()=>Z5,genAgeMs:()=>jR,coalesceLayoutWork:()=>WR,RESIZE_GUARD_MS:()=>BR,LAYOUT_COALESCE_MS:()=>G5});import{createHash as XR,randomUUID as ZR}from"crypto";import{mkdirSync as qR,readFileSync as Y5,renameSync as QR,writeFileSync as HR}from"fs";import{join as z5}from"path";function X5(){return z5(ef(),"layout-coord")}function nB(f,J){let Y=XR("sha1").update(f).digest("hex").slice(0,16);return z5(X5(),`${Y}.${J}`)}function bY(f,J){let Y=ZR();try{qR(X5(),{recursive:!0});let z=nB(f,J),G=`${z}.${Y}.tmp`;HR(G,`${Date.now()}
|
|
58
|
+
${Y}`),QR(G,z)}catch{}return Y}function Z5(f,J,Y){try{return Y5(nB(f,J),"utf8").split(`
|
|
59
|
+
`)[1]?.trim()===Y}catch{return!0}}function jR(f,J,Y=Date.now()){try{let z=Number.parseInt(Y5(nB(f,J),"utf8").split(`
|
|
60
|
+
`)[0]??"",10);return Number.isFinite(z)?Y-z:Number.POSITIVE_INFINITY}catch{return Number.POSITIVE_INFINITY}}async function WR(f,J,Y,z=G5){let G=bY(f,J);if(z>0)await new Promise((X)=>setTimeout(X,z));if(!Z5(f,J,G))return;await Y()}var G5=120,BR=400;var QG=k(()=>{lf()});function KR(f){let J=[];for(let Y of f.split(`
|
|
61
|
+
`)){let z=Y.trim();if(!z)continue;let[G,X,q,Q,H]=z.split("\t");if(!G||!X||!q)continue;let B=Number.parseInt(H?.trim()??"",10);J.push({windowId:G.trim(),paneId:X.trim(),role:q.trim(),version:Q?.trim()??"",...Number.isFinite(B)?{paneWidth:B}:{}})}return J}function q5(f,J){let Y=new Map;for(let G of f){let X=Y.get(G.windowId)??[];X.push(G),Y.set(G.windowId,X)}let z=[];for(let G of Y.values()){let X=G.find((B)=>B.role==="claude")?.paneId,q=G.find((B)=>B.role==="tasks"),Q=G.find((B)=>B.role==="ops");if(q&&(J.force||q.version!==J.currentVersion))z.push({role:"tasks",paneId:q.paneId});let H=J.force?!0:X&&(J.vendorChanged||Q?.version!==J.currentVersion);if(Q&&H)z.push({role:"ops",paneId:Q.paneId,claudePaneId:X??null})}return z}async function dB(f){let{code:J,stdout:Y}=await d0(["list-panes","-s","-t",`=${f}`,"-F",VR]);if(J!==0)return null;return KR(Y)}function Q5(f,J){let Y=Cf(),z=_f(),G=[];for(let X of f){let q=X.role==="tasks"?DY(Y,{initialTaskId:J.taskId}):nz({cwd:J.cwd,taskId:J.taskId,claudePaneId:X.claudePaneId,cliInvocation:Y,vendor:J.vendor});G.push(["respawn-pane","-k","-t",X.paneId,"-c",If(J.cwd),R1(z+q)],["set-option","-p","-t",X.paneId,"@kobe_role",X.role],["set-option","-p","-t",X.paneId,KJ,s0])}return G}async function H5(f,J,Y,z,G){let X=await dB(f);if(!X)return!1;let q=X.filter((B)=>B.role==="claude");if(q.length===0)return!1;let Q=If(J),H=[];for(let B of q){let V=pz(Y,G),j=R1(iz(g1(V.argv),z,J));H.push(["respawn-pane","-k","-c",Q,"-t",B.paneId,j]),H.push(V.sessionId?["set-window-option","-t",B.paneId,yJ,V.sessionId]:["set-window-option","-u","-t",B.paneId,yJ])}return await Pf(H),!0}async function B5(){let f=await OY([aJ,Gz,$J]),J=Number.parseInt(f[aJ]??"",10),Y=Number.isFinite(J)&&J>0?zz(J):Jz,z=UR({widthPct:rJ(Number.parseInt(f[Gz]??"",10)),heightPct:rJ(Number.parseInt(f[$J]??"",10))});return{tasksWidth:Y,rcArgs:z}}function UR(f){let J=[];if(f.widthPct!==null)J.push("-x",`${f.widthPct}%`);if(f.heightPct!==null)J.push("-y",`${f.heightPct}%`);return J}async function j5(){return(await B5()).rcArgs}async function iB(f,J={}){let{tasksWidth:Y,rcArgs:z}=await B5(),G=await dB(f);if(!G)return{rows:null,commands:[]};let X=[];for(let q of G)if(q.role==="tasks"&&(J.force||q.paneWidth!==Y))X.push(["resize-pane","-t",q.paneId,"-x",`${Y}`]);if(z.length>0){for(let q of G)if(q.role==="ops")X.push(["resize-pane","-t",q.paneId,...z])}return{rows:G,commands:X}}async function HG(f,J){bY(f,"resize");let{rows:Y,commands:z}=await iB(f);if(!Y)return;let G=[...z];if(J)G.push(...Q5(q5(Y,{currentVersion:s0,force:!1,vendorChanged:J.vendorChanged}),J));if(G.length>0)await Pf(G)}async function W5(f){if(!await Hf(f))return;await HG(f)}async function DX(f){let{code:J,stdout:Y}=await d0(["list-panes","-t",`=${f}`,"-F",`#{@kobe_role} #{pane_width} #{pane_height} #{window_width} #{window_height} #{window_zoomed_flag} #{${ZJ}} #{${A1}}`]);if(J!==0)return;let z=Y.split(`
|
|
62
|
+
`).map((B)=>B.split("\t")).filter((B)=>(B[0]?.trim()??"")!=="");if(z.length===0)return;if(z.some((B)=>B[5]?.trim()==="1"))return;if(z.some((B)=>(B[6]?.trim()??"")!==""))return;if(z.some((B)=>(B[7]?.trim()??"")!==""))return;let G=Number.parseInt(z[0][3]?.trim()??"",10),X=Number.parseInt(z[0][4]?.trim()??"",10),q=[],Q=z.find(([B])=>B?.trim()==="tasks");if(Q){let B=Number.parseInt(Q[1]?.trim()??"",10);if(Number.isFinite(B)&&B>0)q.push(["set-option","-s",aJ,`${zz(B)}`])}let H=z.find(([B])=>B?.trim()==="ops");if(H&&Number.isFinite(G)&&G>0&&Number.isFinite(X)&&X>0){let B=Number.parseInt(H[1]?.trim()??"",10),V=Number.parseInt(H[2]?.trim()??"",10),j=Number.isFinite(B)?rJ(100*B/G):null,U=Number.isFinite(V)?rJ(100*V/X):null;if(j!==null)q.push(["set-option","-s",Gz,`${j}`]);if(U!==null)q.push(["set-option","-s",$J,`${U}`])}if(q.length>0)await Pf(q)}function DR(f){let J=f.split(`
|
|
63
|
+
`).map((z)=>z.split("\t")).filter((z)=>(z[0]?.trim()??"")!=="");if(J.length===0)return!1;if(J.some((z)=>z[1]?.trim()==="1"))return!1;if(J.some((z)=>(z[2]?.trim()??"")!==""))return!1;if(J.some((z)=>(z[3]?.trim()??"")!==""))return!1;let Y=new Set(J.map((z)=>z[0]?.trim()));return Y.has("tasks")&&Y.has("ops")}async function V5(f){let{code:J,stdout:Y}=await d0(["list-panes","-t",`=${f}`,"-F",`#{@kobe_role} #{window_zoomed_flag} #{${ZJ}} #{${A1}}`]);if(J!==0||!DR(Y))return;await DX(f)}async function BG(f){let J=await C1(f,["@kobe_worktree","@kobe_task","@kobe_vendor"]),Y=J["@kobe_worktree"]||process.cwd(),z=J["@kobe_task"]||void 0,G=J["@kobe_vendor"]||void 0,X=await dB(f);if(!X)return;let q=Q5(q5(X,{currentVersion:s0,force:!0}),{cwd:Y,taskId:z,vendor:G});if(q.length>0)await Pf(q);await gz()}var KJ="@kobe_pane_version",VR;var LX=k(()=>{lJ();E1();e1();Tf();qJ();yq();U1();Qz();QG();VR=`#{window_id} #{pane_id} #{@kobe_role} #{${KJ}} #{pane_width}`});function MR(f){let J=[];for(let Y of f.split(`
|
|
64
|
+
`)){let z=Y.trim();if(!z)continue;let[G,X,q,Q,H,B,V]=z.split("\t");if(!G)continue;let j=Number.parseInt(Q??"",10),U=Number.parseInt(H??"",10),L=Number.parseInt(B??"",10),O=Number.parseInt(V??"",10);J.push({paneId:G.trim(),role:X?.trim()??"",active:q?.trim()==="1",paneWidth:Number.isFinite(j)?j:0,paneHeight:Number.isFinite(U)?U:0,windowWidth:Number.isFinite(L)?L:0,windowHeight:Number.isFinite(O)?O:0})}return J}function FR(f){let J=f.find((z)=>z.role===Yz);if(!J)return{kind:"missing-engine"};let Y=f.filter((z)=>z.role===_G);if(Y.length+1>=uH)return{kind:"maxed"};if(Y.length===0)return{kind:"split",targetPane:J.paneId,direction:"-h"};if(Y.length===1)return{kind:"split",targetPane:Y[0]?.paneId??J.paneId,direction:"-v"};return{kind:"split",targetPane:J.paneId,direction:"-v"}}function lB(f){return f.find((J)=>J.role===XJ)??f.find((J)=>J.role==="")}function OR(f){return 100-(rJ(f??Number.NaN)??tG)}function AR(f){let J=Number.parseInt(f??"",10);return Number.isFinite(J)&&J>0?J:void 0}async function w1(f,J){let Y=J?.trim()||`=${f}`,{code:z,stdout:G}=await d0(["list-panes","-t",Y,"-F",LR]);return z===0?MR(G):null}async function gR(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_active}\t#{window_id}"]);if(J!==0)return"";for(let z of Y.split(`
|
|
65
|
+
`)){let[G,X]=z.split("\t");if(G?.trim()==="1"&&X?.trim())return X.trim()}return""}async function sJ(f,J){let{code:Y,stdout:z}=await d0(["show-options","-wqv","-t",f,J]);return Y===0?z.trim():""}async function aB(f,J,Y){await h0(["set-window-option","-t",f,J,Y])}async function SY(f,J){await h0(["set-window-option","-u","-t",f,J])}async function $B(f){let{code:J,stdout:Y}=await d0(["display-message","-p","-t",f,"#{pane_id}"]);return J===0&&Y.trim()===f}async function Nf(f,J){await h0(["display-message","-t",f,J])}async function Iq(f){let J=await C1(f,["@kobe_worktree","@kobe_task","@kobe_vendor"]);return{cwd:J["@kobe_worktree"]||process.cwd(),taskId:J["@kobe_task"]||void 0,vendor:J["@kobe_vendor"]||void 0}}function RR(f){let J=Cf(),Y=_f();return R1(Y+nz({cwd:f.cwd,taskId:f.taskId,claudePaneId:f.enginePaneId,cliInvocation:J,vendor:f.vendor}))}async function CR(f,J){return J?.trim()||await gR(f)}async function kR(f,J){let Y=await w1(f,J);if(!Y)return;let z=FR(Y);if(z.kind==="missing-engine"){await Nf(J,"kobe: no engine pane in this window");return}if(z.kind==="maxed"){await Nf(J,`kobe: workspace split limit is ${uH} panes`);return}let{cwd:G}=await Iq(f),{code:X,stdout:q}=await d0(["split-window",z.direction,"-t",z.targetPane,"-l","50%","-c",If(G),"-P","-F","#{pane_id}",R1("true")]),Q=q.trim();if(X!==0||!Q)return;await Pf([["set-option","-p","-t",Q,"@kobe_role",_G],["select-pane","-t",Q]])}async function NR(f,J){let Y=await w1(f,J);if(!Y)return;let z=Y.filter((q)=>q.role===_G);if(z.length===0){await Nf(J,"kobe: no workspace split to close");return}let X=z.find((q)=>q.active)??z[z.length-1];if(!X)return;await h0(["kill-pane","-t",X.paneId])}async function yR(f,J){let Y=await w1(f,J);if(!Y)return;let z=Y.filter((G)=>G.role===_G);if(z.length===0){await Nf(J,"kobe: no workspace splits to reset");return}await Pf(z.map((G)=>["kill-pane","-t",G.paneId]))}async function K5(){let f=await OY([aJ]);return zz(AR(f[aJ])??Jz)}async function bR(f){let{cwd:J,taskId:Y}=await Iq(f),z=Cf(),G=_f();return{cwd:J,command:R1(G+DY(z,{initialTaskId:Y}))}}async function U5(f,J){let Y=await w1(f,J);if(!Y)return;let z=Y.find((M)=>M.role===GJ);if(z){await h0(["kill-pane","-t",z.paneId]);return}let G=lB(Y),X=Y.find((M)=>M.role===Yz);if(!X){await Nf(J,"kobe: cannot restore file pane in this layout");return}let{cwd:q,taskId:Q,vendor:H}=await Iq(f),B=RR({cwd:q,taskId:Q,vendor:H,enginePaneId:X.paneId}),V=G?["split-window","-v","-b","-t",G.paneId,"-l",`${await SR()}%`,"-c",If(q),"-P","-F","#{pane_id}",B]:["split-window","-h","-t",X.paneId,"-l",`${await rB()}%`,"-c",If(q),"-P","-F","#{pane_id}",B],{code:j,stdout:U}=await d0(V),L=U.trim();if(j!==0||!L)return;let O=[["set-option","-p","-t",L,"@kobe_role",GJ],["set-option","-p","-t",L,KJ,s0]];if(G?.role==="")O.push(["set-option","-p","-t",G.paneId,"@kobe_role",XJ]);await Pf(O)}async function SR(){let f=await OY([$J]);return rJ(Number.parseInt(f[$J]??"",10))??tG}async function rB(){let f=await OY([Gz]);return rJ(Number.parseInt(f[Gz]??"",10))??100-PZ}async function D5(){let f=await OY([$J]);return OR(Number.parseInt(f[$J]??"",10))}async function IR(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_index}"]);if(J!==0)return new Set;return new Set(Y.split(`
|
|
66
|
+
`).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)))}async function L5(f,J){let Y=await IR(f),z=oW(J);while(Y.has(z))z++;return z}async function M5(f){let J=sG(f);if(await Hf(J))return J;return await h0(["new-session","-d","-s",J,"-n","hidden-panes","-c",If(process.cwd()),"while :; do sleep 3600; done"]),J}async function pB(f){let J=sG(f);if(!await Hf(J))return;let{code:Y,stdout:z}=await d0(["list-panes","-s","-t",`=${J}`,"-F","#{@kobe_role}"]);if(Y!==0)return;if(!z.split(`
|
|
67
|
+
`).some((X)=>{let q=X.trim();return q===XJ||q===i1}))await h0(["kill-session","-t",`=${J}`])}async function TR(f,J){await F5(f,J,ZJ)}async function uR(f,J){await F5(f,J,A1)}async function F5(f,J,Y){let z=await sJ(J,Y);if(!z)return;if(await $B(z))await h0(["kill-pane","-t",z]);await SY(J,Y)}async function ER(f,J){await TR(f,J),await uR(f,J),await pB(f)}function O5(f){return f.find((J)=>J.role===Yz)??f[0]}async function _B(f,J,Y){let z=O5(Y);if(!z)return await Nf(J,"kobe: cannot restore Tasks pane in this layout"),!1;let G=await K5(),{cwd:X,command:q}=await bR(f),{code:Q,stdout:H}=await d0(["split-window","-h","-b","-t",z.paneId,"-l",`${G}`,"-c",If(X),"-P","-F","#{pane_id}",q]),B=H.trim();if(Q!==0||!B)return!1;return await Pf([["set-option","-p","-t",B,"@kobe_role",i1],["set-option","-p","-t",B,KJ,s0],["select-pane","-t",B]]),await SY(J,A1),await Nf(J,"kobe: Tasks pane restored"),!0}async function A5(f,J,Y){let z=await M5(f),G=await L5(z,J),{code:X,stdout:q}=await d0(["break-pane","-d","-s",Y.paneId,"-t",`${z}:${G}`,"-P","-F","#{pane_id}"]),Q=q.trim()||Y.paneId;if(X!==0||!Q){await Nf(J,"kobe: could not hide Tasks pane");return}await aB(J,A1,Q),await Nf(J,"kobe: Tasks pane hidden")}async function oB(f,J,Y){let z=await w1(f,J);if(!z)return;if(!await $B(Y)){await SY(J,A1);let q=z.find((Q)=>Q.role===i1);if(q){await h0(["select-pane","-t",q.paneId]);return}await _B(f,J,z);return}let G=O5(z);if(!G){await Nf(J,"kobe: cannot restore Tasks pane in this layout");return}if(await h0(["join-pane","-h","-b","-s",Y,"-t",G.paneId,"-l",`${await K5()}`])!==0){await Nf(J,"kobe: could not restore Tasks pane");return}await Pf([["set-option","-p","-t",Y,"@kobe_role",i1],["set-option","-p","-t",Y,KJ,s0],["select-pane","-t",Y]]),await SY(J,A1),await pB(f),await Nf(J,"kobe: Tasks pane restored")}async function xR(f,J){let Y=await sJ(J,A1);if(Y){await oB(f,J,Y);return}let z=await w1(f,J);if(!z)return;let G=z.find((X)=>X.role===i1);if(G){await A5(f,J,G);return}await _B(f,J,z)}async function wR(f,J){let Y=await sJ(J,A1);if(Y){await oB(f,J,Y);return}let z=await w1(f,J);if(!z)return;let G=z.find((X)=>X.role===i1);if(G){await h0(["select-pane","-t",G.paneId]);return}await _B(f,J,z)}async function g5(f,J,Y){if(Y.role==="")await h0(["set-option","-p","-t",Y.paneId,"@kobe_role",XJ]);let z=await M5(f),G=await L5(z,J),{code:X,stdout:q}=await d0(["break-pane","-d","-s",Y.paneId,"-t",`${z}:${G}`,"-P","-F","#{pane_id}"]),Q=q.trim()||Y.paneId;if(X!==0||!Q){await Nf(J,"kobe: could not hide terminal pane");return}await aB(J,ZJ,Q),await Nf(J,"kobe: Terminal pane hidden")}async function R5(f,J,Y){let z=Y.find((V)=>V.role===GJ),G=Y.find((V)=>V.role===Yz);if(!z&&!G)return await Nf(J,"kobe: cannot restore terminal pane in this layout"),!1;let{cwd:X}=await Iq(f),q=z?["split-window","-v","-t",z.paneId,"-l",`${await D5()}%`,"-c",If(X),"-P","-F","#{pane_id}"]:["split-window","-h","-t",G?.paneId??"","-l",`${await rB()}%`,"-c",If(X),"-P","-F","#{pane_id}"],{code:Q,stdout:H}=await d0(q),B=H.trim();if(Q!==0||!B)return!1;return await h0(["set-option","-p","-t",B,"@kobe_role",XJ]),await SY(J,ZJ),await Nf(J,"kobe: Terminal pane restored"),!0}async function C5(f,J,Y){let z=await w1(f,J);if(!z)return;if(!await $B(Y)){await SY(J,ZJ),await R5(f,J,z);return}let G=z.find((B)=>B.role===GJ),X=z.find((B)=>B.role===Yz);if(!G&&!X){await Nf(J,"kobe: cannot restore terminal pane in this layout");return}let q=G?["join-pane","-v","-s",Y,"-t",G.paneId,"-l",`${await D5()}%`]:["join-pane","-h","-s",Y,"-t",X?.paneId??"","-l",`${await rB()}%`];if(await h0(q)!==0){await Nf(J,"kobe: could not restore terminal pane");return}await h0(["set-option","-p","-t",Y,"@kobe_role",XJ]),await SY(J,ZJ),await pB(f),z=await w1(f,J);let H=z?.find((B)=>B.paneId===Y);if(H)await h0(["select-pane","-t",H.paneId]);await Nf(J,"kobe: Terminal pane restored")}async function hR(f,J){let Y=await sJ(J,ZJ);if(Y){await C5(f,J,Y);return}let z=await w1(f,J);if(!z)return;let G=lB(z);if(G){await g5(f,J,G);return}await R5(f,J,z)}async function PR(f){if((await Bz(f,oG)).length>0){await mR(f);return}await vR(f)}async function k5(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return[];return Y.split(`
|
|
68
|
+
`).map((z)=>z.trim()).filter((z)=>z.length>0)}async function N5(f,J){return!!(await w1(f,J))?.some((z)=>z.role===Yz)}async function vR(f){let J=await k5(f);for(let Y of J){if(!await N5(f,Y))continue;if(await sJ(Y,UY))continue;await b5(f,Y)}await FY(f,oG,"1"),await Nf(`=${f}`,"kobe: Zen mode on \u2014 all tabs")}async function mR(f){let J=await k5(f);for(let Y of J){let z=await sJ(Y,UY);if(z)await cR(f,Y,z)}await h0(["set-option","-u","-t",f,oG]),await Nf(`=${f}`,"kobe: Zen mode off \u2014 all tabs")}async function y5(f,J){if((await Bz(f,oG)).length===0)return;if(await sJ(J,UY))return;if(!await N5(f,J))return;await b5(f,J)}async function b5(f,J){let Y=await w1(f,J);if(!Y)return;let z=[],G=Y.find((q)=>q.role===GJ);if(G)await h0(["kill-pane","-t",G.paneId]),z.push(GJ);let X=lB(Y);if(X)await g5(f,J,X),z.push(XJ);if(!J5()){let q=Y.find((Q)=>Q.role===i1);if(q)await A5(f,J,q),z.push(i1)}if(z.length===0){await Nf(J,"kobe: already focused \u2014 nothing to hide");return}await aB(J,UY,z.join(",")),await Nf(J,"kobe: Zen mode on")}async function cR(f,J,Y){let z=new Set(Y.split(",").map((G)=>G.trim()));if(z.has(i1)){let G=await sJ(J,A1);if(G)await oB(f,J,G)}if(z.has(GJ)){let G=await w1(f,J);if(G&&!G.some((X)=>X.role===GJ))await U5(f,J)}if(z.has(XJ)){let G=await sJ(J,ZJ);if(G)await C5(f,J,G)}await SY(J,UY),await Nf(J,"kobe: Zen mode off")}async function nR(f){let{code:J,stdout:Y}=await d0(["list-windows","-t",`=${f}`,"-F","#{window_id}"]);if(J!==0)return 0;return Y.split(`
|
|
69
|
+
`).filter((z)=>z.trim().length>0).length}async function dR(f,J){if(await nR(f)<=1){await Nf(J,"Cannot close the only ChatTab");return}await ER(f,J),await h0(["kill-window","-t",J])}async function Tq(f,J,Y={}){if(!await Hf(f))return;let z=await CR(f,Y.windowId);if(!z)return;switch(J){case"workspace-split":await kR(f,z);return;case"workspace-close":await NR(f,z);return;case"workspace-reset":await yR(f,z);return;case"tasks-toggle":await xR(f,z);return;case"tasks-restore":await wR(f,z);return;case"ops-toggle":await U5(f,z);return;case"terminal-toggle":await hR(f,z);return;case"zen-toggle":await PR(f);return;case"chat-tab-close":await dR(f,z);return}}var LR="#{pane_id}\t#{@kobe_role}\t#{pane_active}\t#{pane_width}\t#{pane_height}\t#{window_width}\t#{window_height}";var uq=k(()=>{lJ();e1();cB();Tf();qJ();U1();Qz();LX()});function xq(f,J){return[["bind-key","-n",f,"if-shell","-F","#{?#{@kobe_surface},0,1}","previous-window"],["bind-key","-n",J,"if-shell","-F","#{?#{@kobe_surface},0,1}","next-window"]]}function wq(f,J="kill-window"){return["bind-key","-n",f,"if-shell","-F","#{>:#{session_windows},1}",J,"display-message 'Cannot close the only ChatTab'"]}function hq(f){return["bind-key","-n",f,"command-prompt","-I","#{window_name}","rename-window -- '%%'"]}function Pq(f){return[["bind-key","-n",f,"command-prompt","-p",Eq],["bind-key","T","command-prompt","-p",Eq]]}function sB(f){return f.startsWith("C-")&&f.length===3?`^${f.slice(2)}`:f}function vq(f){return`${[f.focusLeft?`${sB(f.focusLeft)} tasks`:null,f.detach?`${sB(f.detach)} detach`:null,f.newTab?`${sB(f.newTab)} tab`:null,f.layoutSplits?`prefix ${f.layoutSplits} splits`:null,f.layoutPanes?`prefix ${f.layoutPanes} panes`:null].filter((Y)=>Y!==null).join(" ")} `}async function eB(f,J){let Y=_f(),z=await aZ(),G=R1(J.opsCommand??Y+nz({cwd:J.cwd,taskId:J.taskId,claudePaneId:f,cliInvocation:J.inv,vendor:J.vendor})),{stdout:X}=await YX([["set-option","-p","-t",f,"@kobe_role","claude"],["set-window-option","-t",f,tB,"idle"],["split-window","-h","-b","-t",f,"-l",`${z}`,"-c",If(J.cwd),"-P","-F","tasks=#{pane_id}",R1(Y+DY(J.inv,{initialTaskId:J.taskId}))],["split-window","-h","-t",f,"-l",`${100-PZ}%`,"-c",If(J.cwd),"-P","-F","ops=#{pane_id}",G],["split-window","-v","-l",`${100-tG}%`,"-c",If(J.cwd),"-P","-F","shell=#{pane_id}"],["select-pane","-t",f]]),q=Object.fromEntries(X.split(`
|
|
70
|
+
`).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>Q.split("=",2)));if(await Pf([...q.tasks?[["set-option","-p","-t",q.tasks,"@kobe_role",i1]]:[],...q.tasks?[["set-option","-p","-t",q.tasks,KJ,s0]]:[],...q.ops?[["set-option","-p","-t",q.ops,"@kobe_role",GJ]]:[],...q.ops?[["set-option","-p","-t",q.ops,KJ,s0]]:[],...q.shell?[["set-option","-p","-t",q.shell,"@kobe_role",XJ]]:[]]),q.ops){let Q=await j5();if(Q.length>0)await h0(["resize-pane","-t",q.ops,...Q])}}async function S5(f,J){if(!await Hf(f))return;let Y=await C1(f,["@kobe_worktree","@kobe_task","@kobe_vendor",JX]),z=Y["@kobe_worktree"]||process.cwd(),G=Y["@kobe_task"]||void 0,X=Y[JX]||void 0,q=J??Y["@kobe_vendor"];if(J)await iR(f,G,J);let Q=N1(q),H=pz(Q,q),B=Cf(),j=(await d0(["new-window","-t",`=${f}`,"-c",If(z),"-P","-F","#{pane_id}",R1(iz(g1(H.argv),X,z))])).stdout.trim();if(!j)return;if(H.sessionId)await AY(j,yJ,H.sessionId);await eB(j,{cwd:z,taskId:G,inv:B,vendor:q});let{stdout:U}=await d0(["display-message","-p","-t",j,"#{window_id}"]),L=U.trim();if(L)await y5(f,L)}async function cq(f){if(!await Hf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${_f()}${z.map(Xf).join(" ")} settings`;await HJ(f,{cwd:If(Y),command:X,name:"settings",surface:!0})}async function nq(f){if(!await Hf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${_f()}${z.map(Xf).join(" ")} help-page`;await HJ(f,{cwd:If(Y),command:X,name:"help",surface:!0})}async function dq(f,J){if(!await Hf(f))return;let z=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),G=Cf(),X=_f(),q=J?` --repo ${Xf(J)}`:"",Q=`${X}${G.map(Xf).join(" ")} new-task${q}`;await HJ(f,{cwd:If(z),command:Q,name:"new task",surface:!0})}async function iq(f){if(!await Hf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${_f()}${fV({cliInvocation:z})}`;await HJ(f,{cwd:If(Y),command:X,name:"update",surface:!0})}async function I5(f){if(!await Hf(f))return;let Y=(await C1(f,["@kobe_worktree"]))["@kobe_worktree"]||process.cwd(),z=Cf(),X=`${_f()}${z.map(Xf).join(" ")} quick-task --session ${Xf(f)}`;await HJ(f,{cwd:If(Y),command:X,name:"quick task",surface:!0})}async function iR(f,J,Y){if(await FY(f,"@kobe_vendor",Y),!J)return;try{let{connectOrStartDaemon:z}=await Promise.resolve().then(() => (y1(),Jj)),G=await z();try{await G.request("task.setVendor",{taskId:J,vendor:Y})}finally{G.close()}}catch(z){console.error("[kobe tmux] failed to persist selected engine vendor:",z)}}var Eq,tB="@kobe_tab_state",MX="#{?#{==:#{@kobe_tab_state},running},\u25CF,#{?#{==:#{@kobe_tab_state},done},\u2713,#{?#{==:#{@kobe_tab_state},error},!,#{?#{==:#{@kobe_tab_state},unknown},?,\u25CB}}}} #I:#W",mq;var fj=k(()=>{lJ();E1();e1();Tf();qJ();K1();U1();Qz();uq();LX();Eq=`engine (${cf.join("/")}/\u2026)`;mq=MX});var r1={};jf(r1,{tmuxWindowSizeArgsForClient:()=>Gj,tmuxSessionName:()=>Lf,tmuxInitialSizeArgs:()=>u5,tmuxInitialClientSize:()=>zj,tmuxAvailable:()=>NJ,switchClientBeforeKill:()=>bJ,sessionExists:()=>Hf,selectTasksPane:()=>sR,runLayoutAction:()=>Tq,resyncWindowToClient:()=>$R,refreshKobeWorkspacePanes:()=>BG,quickCreate:()=>I5,prepareWindowForSwitch:()=>aq,prepareWindowForAttach:()=>lq,parseTmuxClientRows:()=>E5,parseObservedSession:()=>h5,openUpdateTab:()=>iq,openSettingsTab:()=>cq,openNewTaskTab:()=>dq,openHelpTab:()=>nq,newChatTab:()=>S5,kobeStatusRight:()=>vq,killSession:()=>l1,healSessionLayout:()=>W5,focusBindCommand:()=>w5,ensureSession:()=>TY,currentSessionName:()=>k1,clientsWithConflictingSize:()=>x5,chatTabSwitchBindings:()=>xq,chatTabRenameBinding:()=>hq,chatTabCloseBinding:()=>wq,chatTabChooseEngineBindings:()=>Pq,captureGlobalLayoutOnDrag:()=>V5,captureGlobalLayout:()=>DX,attachArgv:()=>az,PANE_VERSION_OPTION:()=>KJ,CHAT_TAB_STATUS_FORMAT:()=>MX,CHAT_TAB_STATUS_CURRENT_FORMAT:()=>mq,CHAT_TAB_STATE_OPTION:()=>tB,CHAT_TAB_ENGINE_PROMPT:()=>Eq});function u5(f=process.stdout,J=process.env){let Y=zj(f,J);return Y?["-x",`${Y.columns}`,"-y",`${Y.rows}`]:[]}function zj(f=process.stdout,J=process.env){let Y=IY(f.columns)??IY(J.COLUMNS),z=IY(f.rows)??IY(J.LINES);return Y&&z?{columns:Y,rows:z}:null}function IY(f){let J=typeof f==="number"?f:typeof f==="string"?Number.parseInt(f,10):Number.NaN;return Number.isInteger(J)&&J>0?J:void 0}function E5(f){let J=[];for(let Y of f.split(`
|
|
71
|
+
`)){let[z,G,X,q,Q]=Y.split("\t"),H=IY(X?.trim()),B=IY(q?.trim());if(!z?.trim()||!G?.trim()||!H||!B)continue;J.push({name:z.trim(),session:G.trim(),width:H,height:B,flags:Q?.trim()??""})}return J}function x5(f,J,Y,z={}){return f.filter((G)=>G.session===J).filter((G)=>G.name!==z.currentClientName).filter((G)=>G.width!==Y.columns||G.height!==Y.rows).map((G)=>G.name)}function Gj(f,J){let Y=Math.max(1,f.rows-(J.status?.trim()==="on"?1:0));return["-x",`${f.columns}`,"-y",`${Y}`]}async function Xj(f,J,Y={}){if(!J)return;let{code:z,stdout:G}=await d0(["list-clients","-t",`=${f}`,"-F",lR]);if(z!==0)return;let X=x5(E5(G),f,J,Y),q=[];if(Y.currentClientName)q.push(["refresh-client","-f","!ignore-size","-t",Y.currentClientName]);for(let Q of X)q.push(["refresh-client","-f","ignore-size","-t",Q]);if(q.length>0)await Pf(q)}async function lq(f){bY(f,"resize");let J=zj();await Xj(f,J);let Y=J?["-x",`${J.columns}`,"-y",`${J.rows}`]:[];if(Y.length>0)await h0(["resize-window","-t",`=${f}`,...Y]);await HG(f)}async function aR(){let{code:f,stdout:J}=await d0(["display-message","-p","#{client_name}\t#{client_width}\t#{client_height}\t#{status}"]);if(f!==0)return{sizeArgs:[],clientSize:null,clientName:void 0};let[Y,z,G,X]=J.trim().split("\t"),q=IY(z),Q=IY(G),H=q&&Q?{columns:q,rows:Q}:null;return{sizeArgs:H?Gj(H,{status:X}):[],clientSize:H,clientName:Y?.trim()||void 0}}async function aq(f){bY(f,"resize");let J=await aR();await Xj(f,J.clientSize,{currentClientName:J.clientName});let Y=J.sizeArgs;if(Y.length>0)await h0(["resize-window","-t",`=${f}`,...Y]);await HG(f)}async function $R(f,J){if(!J.size)return;bY(f,"resize"),await Xj(f,J.size,{currentClientName:J.clientName});let Y=Gj(J.size,{status:J.status}),{commands:z}=await iB(f,{force:!0});await Pf([["resize-window","-t",`=${f}`,...Y],...z])}function w5(f,J,Y){let z=`#{?window_zoomed_flag,1,#{?${rR[J]},,1}}`;if(Y)return["bind-key","-n",f,"if-shell","-F",z,`select-pane ${J}`,Y];return["bind-key","-n",f,"if-shell","-F",z,`select-pane ${J}`]}async function TY(f){let J=Yj.get(f.name);if(J)return J;let Y=oR(f);Yj.set(f.name,Y);try{return await Y}finally{Yj.delete(f.name)}}function h5(f){let J="",Y="",z=!1,G=new Set;for(let X of f.split(`
|
|
72
|
+
`)){let[q,Q,H,B,V]=X.split("\t");if(!q?.trim())continue;if(G.add(q.trim()),!J&&B?.trim())J=B.trim();if(!Y&&V?.trim())Y=V.trim();if(Q?.trim()==="1"&&H?.trim()==="claude")z=!0}return{worktree:J,vendor:Y,claudePaneAlive:z,windowCount:G.size}}async function _R(f){if(!await Hf(f))return null;let{code:J,stdout:Y}=await d0(["list-panes","-s","-t",`=${f}`,"-F",pR]);if(J!==0)return{worktree:"",vendor:"",claudePaneAlive:!1,windowCount:0};return h5(Y)}async function oR(f){let J=f.launchInit,Y=await _R(f.name),z=r7(Y,{cwd:f.cwd,vendor:f.vendor,hasEngineCommand:f.command.length>0}),G=w9(f.repo);if(z.kind==="reuse")return await HG(f.name,{cwd:f.cwd,taskId:f.taskId,vendor:f.vendor}),!0;if(z.kind==="respawn-engine"){if(await H5(f.name,f.cwd,f.command,G,f.vendor)){if(f.vendor)await FY(f.name,"@kobe_vendor",f.vendor);return await HG(f.name,{cwd:f.cwd,taskId:f.taskId,vendor:f.vendor,vendorChanged:!0}),!0}}if(z.kind==="rebuild"||z.kind==="respawn-engine")await l1(f.name);let X=Cf(),q=pz(f.command,f.vendor),Q=f.repo!==void 0&&f.cwd===f.repo,H=Q||G?void 0:f.taskId,B=Q&&!G?f.taskId:void 0,V=Gq(zq(q.argv,f.vendor,H),f.vendor,B),j=iz(g1(V),G,f.cwd),L=(await d0(["new-session","-d","-s",f.name,"-c",If(f.cwd),...u5(),"-P","-F","#{pane_id}",tW(j,{initScript:G?void 0:J?.initScript,markerPath:!G&&J?.initScript?X9(f.cwd):void 0})])).stdout.trim();if(!L)return console.error("[kobe tmux] new-session returned no pane id; session creation failed"),!1;if(q.sessionId)await AY(L,yJ,q.sessionId);await Pf([...f.taskId?[["set-option","-t",f.name,"@kobe_task",f.taskId]]:[],["set-option","-t",f.name,"@kobe_worktree",f.cwd],...f.vendor?[["set-option","-t",f.name,"@kobe_vendor",f.vendor]]:[],...G?[["set-option","-t",f.name,JX,G]]:[]]),await eB(L,{cwd:f.cwd,taskId:f.taskId,opsCommand:f.opsCommand,inv:X,vendor:f.vendor});let O=_f(),M=X.map(Xf).join(" "),R=`${O}${M} new-chattab --session '#{session_name}'`,S=`${R} --vendor '%%'`,a=`run-shell ${Xf(S)}`,N=`${O}${M} focus-tasks --session '#{session_name}' --window '#{window_id}'`,g=`run-shell ${Xf(N)}`,C=(H0)=>`${O}${M} layout --session '#{session_name}' --window '#{window_id}' --action ${H0}`,y=C("tasks-restore"),_=`run-shell ${Xf(y)}`,z0=C("chat-tab-close"),t=`run-shell ${Xf(z0)}`,Y0=`${O}${M} heal-layout --session '#{session_name}'`,T=`run-shell -b ${Xf(Y0)}`,Q0=`${O}${M} resync-window --session '#{session_name}' --client '#{client_name}' --cols '#{client_width}' --rows '#{client_height}' --status '#{status}'`,p=`run-shell -b ${Xf(Q0)}`,D0=`${O}${M} capture-layout --session '#{session_name}'`,g0=`run-shell -b ${Xf(D0)}`,$=JV({tmuxSocket:QJ}),E=Aq(),f0=d7.map((H0)=>["unbind-key","-n",H0]);if(E.overridden.has(SJ))for(let H0 of yY){let y0=Az(H0);if("key"in y0)f0.push(["unbind-key","-n",y0.key])}for(let H0 of E.overridden){if(H0===SJ)continue;let y0=Oz[H0],w0=ZG(H0),T0=Az(y0,{allowBare:w0});if("key"in T0)f0.push(w0?["unbind-key",T0.key]:["unbind-key","-n",T0.key])}let I=["-L","-D","-U","-R"],G0=E.focus.flatMap((H0,y0)=>{let w0=I[y0],T0=w0==="-L"?_:void 0;return H0&&w0?[w5(H0.key,w0,T0)]:[]}),x=E.binds,c=(H0,y0)=>{let w0=x[H0];return w0?[["bind-key",w0.key,"run-shell",C(y0)]]:[]},Z0=(...H0)=>{let y0=H0.map((w0)=>x[w0]?.chord).filter((w0)=>!!w0);return y0.length>0?y0.join("/"):null};await Pf([["set-option","-g","status","on"],["set-window-option","-g","aggressive-resize","on"],["set-option","-g","monitor-activity","on"],["set-option","-g","visual-activity","off"],["set-option","-g","window-status-format",MX],["set-option","-g","window-status-current-format",mq],["set-option","-g","status-right",vq({focusLeft:E.focus[0]?.key??null,detach:x["tmux.detach"]?.key??null,newTab:x["tmux.tab.new"]?.key??null,layoutSplits:Z0("tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"),layoutPanes:Z0("tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle","tmux.layout.zenToggle")})],["set-option","-g","mouse","on"],["set-hook","-g","window-resized",T],["set-hook","-g","client-resized",p],["set-hook","-g","window-layout-changed",g0],...f0,...x["tmux.detach"]?[["bind-key","-n",x["tmux.detach"].key,"if-shell","-F",`#{?#{${A1}},1,#{==:#{@kobe_role},tasks}}`,"detach-client",g]]:[],...G0,...x["tmux.tab.new"]?[["bind-key","-n",x["tmux.tab.new"].key,"run-shell",R]]:[],...x["tmux.tab.chooseEngine"]?Pq(x["tmux.tab.chooseEngine"].key).map((H0)=>[...H0,a]):[],...x["tmux.tab.prev"]&&x["tmux.tab.next"]?xq(x["tmux.tab.prev"].key,x["tmux.tab.next"].key):x["tmux.tab.prev"]?[["bind-key","-n",x["tmux.tab.prev"].key,"previous-window"]]:x["tmux.tab.next"]?[["bind-key","-n",x["tmux.tab.next"].key,"next-window"]]:[],...x["tmux.tab.close"]?[wq(x["tmux.tab.close"].key,t)]:[],...x["tmux.tab.rename"]?[hq(x["tmux.tab.rename"].key)]:[],...c("tmux.layout.workspaceSplit","workspace-split"),...c("tmux.layout.workspaceClose","workspace-close"),...c("tmux.layout.workspaceReset","workspace-reset"),...c("tmux.layout.tasksToggle","tasks-toggle"),...c("tmux.layout.opsToggle","ops-toggle"),...c("tmux.layout.terminalToggle","terminal-toggle"),...c("tmux.layout.zenToggle","zen-toggle"),["bind-key","f","run-shell",`${O}${M} quick-create --session '#{session_name}'`],["bind-key","u","display-popup","-E",$]]),await gz(),await h0(["select-pane","-t",L]);let V0=J?.firstMessage;if(V0)$7(f.name,V0).catch((H0)=>console.error("[kobe tmux] first message delivery failed:",H0));return!0}async function T5(f,J,Y){let z=Y?.trim()||`=${f}`,{code:G,stdout:X}=await d0(["list-panes","-t",z,"-F","#{pane_id}\t#{@kobe_role}"]);if(G!==0)return"";for(let q of X.split(`
|
|
73
|
+
`)){let[Q,H]=q.split("\t");if(Q?.trim()&&H?.trim()===J)return Q.trim()}return""}async function sR(f,J={}){if(!await Hf(f))return"";let Y=await T5(f,"tasks",J.windowId);if(!Y)await Tq(f,"tasks-restore",{windowId:J.windowId}),Y=await T5(f,"tasks",J.windowId);if(!Y)return"";return await h0(["select-pane","-t",Y]),Y}var lR="#{client_name}\t#{client_session}\t#{client_width}\t#{client_height}\t#{client_flags}",rR,Yj,pR="#{window_id}\t#{window_active}\t#{@kobe_role}\t#{@kobe_worktree}\t#{@kobe_vendor}";var J1=k(()=>{lJ();E1();lf();e1();Tf();gq();Rq();qJ();yq();fj();Qz();uq();QG();LX();Tf();fj();LX();uq();rR={"-L":"pane_at_left","-D":"pane_at_bottom","-U":"pane_at_top","-R":"pane_at_right"};Yj=new Map});async function tR(f,J){let{task:Y}=await f.request("task.get",{taskId:J});return Y}async function Zj(f,J){let Y=await tR(f,J);if(Y.worktreePath)return{task:Y,worktreePath:Y.worktreePath};let{worktreePath:z}=await f.request("task.ensureWorktree",{taskId:J});if(!z)throw Error(`task ${J} has no worktree`);return{task:Y,worktreePath:z}}async function P5(f,J){let{task:Y,worktreePath:z}=await Zj(f,J),G=Lf(J);if(!await Hf(G)){let X=oJ(Y.repo??"",z,{kind:"repo-init"});if(!await TY({name:G,cwd:z,command:N1(Y.vendor,Y.modelEffort),taskId:J,vendor:Y.vendor,launchInit:X}))throw Error(`failed to start tmux session for ${J}`)}return{session:G,worktreePath:z}}function eR(f){return hZ(f,{bareSafe:!0})}async function v5(f,J){let{task:Y,worktreePath:z}=await Zj(f,J),G=Y.kind==="main"?void 0:J,X=Y.kind==="main"?J:void 0,q=[...Gq(zq(N1(Y.vendor,Y.modelEffort),Y.vendor,G),Y.vendor,X)],Q=oJ(Y.repo??"",z,{kind:"none"}),H=eR(q),B=Q.initScript?.trim()?`${Q.initScript}
|
|
74
|
+
${H}`:H,V=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:z,command:[V,"-ilc",B]}}async function m5(f,J){let{worktreePath:Y}=await Zj(f,J),z=process.env.SHELL?.trim()||"/bin/zsh";return{cwd:Y,command:[z,"-il"]}}async function c5(f){let J=Lf(f);await bJ(J).catch(()=>{}),await l1(J).catch(()=>{})}var n5=k(()=>{E1();IH();GG();Tf();J1()});import{existsSync as f2}from"fs";import{join as d5,normalize as a5}from"path";function J2(f){let J=null,Y=null,z=new TextEncoder,G=new ReadableStream({start(X){J=f((Q,H)=>{try{X.enqueue(z.encode(`event: ${Q}
|
|
75
|
+
data: ${JSON.stringify(H)}
|
|
75
76
|
|
|
76
|
-
`))}catch{}}),
|
|
77
|
+
`))}catch{}}),Y=setInterval(()=>{try{X.enqueue(z.encode(`: ping
|
|
77
78
|
|
|
78
|
-
`))}catch{}},15000)},cancel(){if(
|
|
79
|
-
`).map((
|
|
80
|
-
`)){if(!
|
|
81
|
-
`,"utf8");async function Y0(){if(
|
|
82
|
-
`);while(
|
|
83
|
-
`)}}return
|
|
79
|
+
`))}catch{}},15000)},cancel(){if(Y)clearInterval(Y);J?.()}});return new Response(G,{headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform",connection:"keep-alive"}})}async function Y2(f,J,Y){try{let{name:z,payload:G}=await f.json();if(!z)return Response.json({error:"missing rpc name"},{status:400});if(!E7.has(z))return Response.json({error:`rpc ${z} is not exposed to the web UI`},{status:403});let X=await J.request(z,G),q=G?.taskId;if(typeof q==="string"){let Q=z==="task.archive"&&G.archived!==!1;if(z==="task.delete"||Q)Y(q)}return Response.json({result:X})}catch(z){let G=z instanceof Error&&z.name!=="Error"?z.name:void 0;return Response.json({error:z instanceof Error?z.message:String(z),...G?{name:G}:{}},{status:500})}}async function z2(){try{let J=(await iJ()).map((Y)=>({id:Y,label:Vz(Y),effortLevels:pf(Y).effortLevels}));return Response.json({engines:J.length>0?J:[{id:"claude",label:"Claude"}]})}catch(f){return Response.json({error:f instanceof Error?f.message:String(f)},{status:500})}}function G2(){return Response.json({api:Kz()})}function X2(){return Response.json({projects:c1()})}function uY(f,J=""){return typeof f==="string"?f:J}function Z2(f,J){return typeof f==="boolean"?f:J}function o5(f){let J=f.customEngineIds;if(!Array.isArray(J))return[];return J.filter((Y)=>typeof Y==="string"&&_5.test(Y)&&!Q1(Y))}function q2(f){return f.split(/[-_]+/).filter(Boolean).map((J)=>`${J.slice(0,1).toUpperCase()}${J.slice(1)}`).join(" ")}function Q2(f,J){return uY(f[WJ(J)]).trim()||Vz(J)}function H2(f,J){return uY(f[jJ(J)]).trim()||BX(J).join(" ")}function s5(){let f=nf(),J=o5(f),Y=[...dY,...J],z=uY(f.lastSelectedVendor,"claude"),G=uY(f.focusAccent,"primary");return Response.json({activeTheme:uY(f.activeTheme,"claude"),transparentBackground:Z2(f.transparentBackground,!1),focusAccent:p5.includes(G)?G:"primary",notificationsToast:f["notifications.toast.enabled"]!==!1,notificationsSound:f["notifications.sound.enabled"]!==!1,settingsSurface:Lz(f[_J]??Dz),editorKind:_z(f[pJ]??Xq),editorCustomCommand:uY(f[kY]),remoteProjects:f["experimental.remoteProjects"]===!0,autoStatus:f[jz]===!0,dispatcher:f[Wz]===!0,defaultEngine:z,engines:Y.map((X)=>({id:X,label:Q2(f,X),command:H2(f,X),isBuiltin:Q1(X),isCustom:!Q1(X),isDefault:X===z}))})}function FX(f,J,Y){if(typeof Y==="string")f[J]=Y.trim()}function jG(f,J,Y){if(typeof Y==="boolean")f[J]=Y}async function B2(f){try{let J=await f.json(),Y={};if(FX(Y,"activeTheme",J.activeTheme),jG(Y,"transparentBackground",J.transparentBackground),p5.includes(J.focusAccent))Y.focusAccent=J.focusAccent;if(jG(Y,"notifications.toast.enabled",J.notificationsToast),jG(Y,"notifications.sound.enabled",J.notificationsSound),J.settingsSurface==="chattab"||J.settingsSurface==="taskpanel")Y[_J]=J.settingsSurface;if(Uz.includes(J.editorKind))Y[pJ]=J.editorKind;FX(Y,kY,J.editorCustomCommand),jG(Y,"experimental.remoteProjects",J.remoteProjects),jG(Y,jz,J.autoStatus),jG(Y,Wz,J.dispatcher),FX(Y,"lastSelectedVendor",J.defaultEngine);let z=nf(),G=o5(z),X=new Set([...dY,...G]),q=Array.isArray(J.engineUpdates)?J.engineUpdates:[];for(let Q of q){if(!Q||typeof Q!=="object")continue;let H=Q;if(typeof H.id!=="string"||!X.has(H.id))continue;FX(Y,jJ(H.id),H.command),FX(Y,WJ(H.id),H.label)}if(J.addEngine&&typeof J.addEngine==="object"){let Q=J.addEngine,H=typeof Q.id==="string"?Q.id.trim().toLowerCase():"";if(!_5.test(H)||Q1(H)||X.has(H))return Response.json({error:"invalid or duplicate engine id"},{status:400});Y.customEngineIds=[...G,H],Y[jJ(H)]=uY(Q.command).trim();let B=uY(Q.label).trim();Y[WJ(H)]=B&&B!==H?B:q2(H)}if(typeof J.removeEngine==="string"){let Q=J.removeEngine;if(!Q1(Q)){if(Y.customEngineIds=G.filter((H)=>H!==Q),Y[jJ(Q)]=void 0,Y[WJ(Q)]=void 0,z.lastSelectedVendor===Q)Y.lastSelectedVendor="claude"}}if(Object.keys(Y).length>0)rY(Y);return s5()}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:400})}}async function j2(f,J){try{let{taskId:Y}=await f.json();if(!Y)return Response.json({error:"missing taskId"},{status:400});return Response.json(await P5(J,Y))}catch(Y){return Response.json({error:Y instanceof Error?Y.message:String(Y)},{status:500})}}async function i5(f,J,Y){try{let z=f.searchParams.get("taskId");if(!z)return Response.json({error:"missing taskId"},{status:400});return Response.json(await Y(J,z))}catch(z){return Response.json({error:z instanceof Error?z.message:String(z)},{status:500})}}function t5(){return Response.json({review:kf($q.review)??null,pr:kf($q.pr)??null})}async function W2(f){try{let J=await f.json();if(typeof J.review==="string")af($q.review,J.review);if(typeof J.pr==="string")af($q.pr,J.pr);return t5()}catch(J){return Response.json({error:J instanceof Error?J.message:String(J)},{status:400})}}async function V2(f,J){let z=a5(d5(J,f==="/"?"/index.html":f));if(!z.startsWith(J))return new Response("forbidden",{status:403});let G=Bun.file(f2(z)?z:d5(J,"index.html"));if(!await G.exists())return new Response("kobe web assets not built \u2014 run `bun --filter kobe-web build`",{status:503});return new Response(G)}function K2(f){let{link:J,sseSends:Y,staticDir:z}=f,G=f.tearDownSession??((X)=>void c5(X));return async function(q){let Q=new URL(q.url);if(Q.pathname===r5)return new Response($5);if(!I7(q.headers.get("origin"),{allowedHost:f.allowedHost}))return new Response("forbidden: cross-origin request rejected",{status:403});if(Q.pathname==="/events")return J2((O)=>{let M=f.onSseOpen?.()??(()=>{});return O("snapshot",J.snapshot()),Y.add(O),()=>{Y.delete(O),M()}});if(Q.pathname==="/api/rpc"&&q.method==="POST")return Y2(q,J,G);if(Q.pathname==="/api/session"&&q.method==="POST")return j2(q,J);if(Q.pathname==="/api/engine-spec"&&q.method==="GET")return i5(Q,J,v5);if(Q.pathname==="/api/terminal-spec"&&q.method==="GET")return i5(Q,J,m5);if(Q.pathname==="/api/engines"&&q.method==="GET")return z2();if(Q.pathname==="/api/cli-invocation"&&q.method==="GET")return G2();if(Q.pathname==="/api/projects"&&q.method==="GET")return X2();if(Q.pathname==="/api/settings"&&q.method==="GET")return s5();if(Q.pathname==="/api/settings"&&q.method==="PATCH")return B2(q);if(Q.pathname==="/api/quick-prompts"&&q.method==="GET")return t5();if(Q.pathname==="/api/quick-prompts"&&q.method==="PUT")return W2(q);let H=await M7(q,Q);if(H)return H;let B=await Q7(q,Q);if(B)return B;let V=await W7(q,Q);if(V)return V;let j=await y7(q,Q,J);if(j)return j;let U=await R7(q,Q);if(U)return U;let L=O7(q,Q);if(L)return L;if(z)return V2(Q.pathname,z);return new Response("not found",{status:404})}}function Rz(f,J){let Y=f.snapshot().find((z)=>z.channel===J);return Y?Y.payload:null}function qj(f){return f.length>1?f.replace(/\/+$/,""):f}function U2(f,J){let Y=qj(J),z=new Set([J]);for(let G of f){let X=qj(G.repo),q=qj(G.worktreePath);if(X===Y||q===Y){if(G.repo)z.add(G.repo);if(G.worktreePath)z.add(G.worktreePath)}}return[...z]}function e5(f){let J=QX();return{async request(Y,z){return await qX(J,Y,z,f.ctx(0))},snapshot(){let Y=f.orch.listTasks().map(zJ),z={},G=Rz(f.bus,"issue.snapshot");if(G)for(let Q of U2(Y,G.repoRoot))z[Q]={...G,repoRoot:Q};let X=Rz(f.bus,"task.jobs"),q=X?.phase==="running"?{[X.taskId]:X}:{};return{tasks:Y,activeTaskId:Rz(f.bus,"active-task")?.taskId??null,engineStates:f.activity.snapshotByTask(),update:Rz(f.bus,"update")?.info??null,jobs:q,worktreeChanges:Rz(f.bus,"worktree.changes")?.changes??{},issueSnapshots:z,deliver:Rz(f.bus,"session.deliver"),uiPrefs:Rz(f.bus,"ui-prefs"),connected:!0}}}}async function l5(f){try{let J=Bun.spawn(["lsof","-nP",`-iTCP:${f}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(J.stdout).text()).split(`
|
|
80
|
+
`).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function D2(f,J=r5){let Y;try{Y=(await(await fetch(`http://localhost:${f}${J}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(Y!==$5)throw Error(`port ${f} is in use by a non-kobe service; refusing to replace it`);let z=await l5(f);for(let X of z)try{process.kill(X,"SIGTERM")}catch{}let G=Date.now()+2000;while(Date.now()<G){if((await l5(f)).length===0)return;await new Promise((X)=>setTimeout(X,100))}}async function fK(f){if(f.takeover!==!1)await D2(f.port);let J=new Set,Y=f.onEvent((Q)=>{for(let H of J)H("channel",Q)}),z=f.hostname?.trim()||process.env.KOBE_WEB_HOST?.trim()||"127.0.0.1",G=T7(z),X=K2({link:f.link,sseSends:J,staticDir:f.staticDir?a5(f.staticDir):void 0,allowedHost:G,onSseOpen:f.onSseOpen}),q=Bun.serve({port:f.port,hostname:z,idleTimeout:0,fetch:X});return{port:q.port??f.port,hostname:z,close(){Y(),q.stop(!0)}}}var $5="kobe-web",r5="/__kobe_web",p5,_5,$q;var JK=k(()=>{fz();E1();MY();ZX();Yq();gf();pY();Zq();K1();H7();V7();F7();A7();_Z();sY();C7();u7();x7();n5();p5=["primary","success","info"],_5=/^[a-z][a-z0-9_-]{0,47}$/;$q={review:"boardPrompt.review",pr:"boardPrompt.pr"}});var YK={};jf(YK,{sameWorktreeChanges:()=>IJ,readWorktreeChanges:()=>M2,pickPushedChanges:()=>pq,parsePorcelain:()=>WG});import{spawnSync as L2}from"child_process";function IJ(f,J){return f.added===J.added&&f.deleted===J.deleted}function pq(f,J){if(!f)return null;return f.get(J)??rq}function M2(f){if(!f)return rq;try{let J=L2("git",["status","--porcelain=v1"],{cwd:f,encoding:"utf8",stdio:["ignore","pipe","pipe"],env:x1()});if(J.status!==0||!J.stdout)return rq;return WG(J.stdout)}catch{return rq}}function WG(f){let J=0,Y=0;for(let z of f.split(`
|
|
81
|
+
`)){if(!z||z.startsWith("##"))continue;let G=z.charAt(0),X=z.charAt(1);if(G==="D"||X==="D")Y+=1;else J+=1}return{added:J,deleted:Y}}var rq;var VG=k(()=>{NY();rq={added:0,deleted:0}});async function g2(f,J){let Y=await BJ("git",["status","--porcelain=v1"],{cwd:f,env:x1(),signal:J});if(Y.status!==0)throw Error("git status failed");return WG(Y.stdout)}function R2(f){let J=new Set;for(let Y of f){if(Y.archived)continue;if(!Y.worktreePath)continue;if(D1(Y.repo)||D1(Y.worktreePath))continue;J.add(Y.worktreePath)}return J}class zK{orch;bus;options;entries=new Map;stopped=!1;constructor(f,J,Y={}){this.orch=f;this.bus=J;this.options=Y}tick(){if(this.stopped)return;if(this.options.hasSubscribers&&!this.options.hasSubscribers())return;try{let f=R2(this.orch.listTasks()),J=!1;for(let Y of this.entries.keys()){if(f.has(Y))continue;if(this.entries.get(Y)?.value)J=!0;this.entries.delete(Y)}if(J)this.publish();for(let Y of f)this.maybeCollect(Y)}catch(f){uf("worktree-changes",f)}}stop(){this.stopped=!0}maybeCollect(f){let J=this.entries.get(f);if(!J)J={inFlight:!1,nextAllowedAt:0},this.entries.set(f,J);let Y=this.options.cadence??{timeoutMs:F2,slowRetryMs:O2,minIntervalMs:A2},z=this.options.run??g2;fq(J,Y,(G)=>z(f,G),(G)=>{if(this.stopped)return;if(this.entries.get(f)!==J)return;if(J.value&&IJ(J.value,G))return;J.value=G,this.publish()})}publish(){let f={};for(let[J,Y]of this.entries)if(Y.value)f[J]=Y.value;this.bus.publish("worktree.changes",{changes:f})}}function GK(f,J,Y=Qj,z){if(Y<=0)return()=>{};let G=new zK(f,J,{hasSubscribers:z});G.tick();let X=setInterval(()=>G.tick(),Y);return X.unref?.(),()=>{clearInterval(X),G.stop()}}var Qj=2000,F2=4000,O2=60000,A2=1500;var XK=k(()=>{NY();HX();gf();VG()});import{mkdir as ZK,readFile as C2,unlink as Hj,writeFile as k2}from"fs/promises";import{createServer as N2}from"net";import{dirname as qK}from"path";import{StringDecoder as y2}from"string_decoder";function S2(){let f=process.env.KOBE_DAEMON_IDLE_GRACE_MS;if(f===void 0)return QK;let J=Number(f);return Number.isFinite(J)&&J>=0?J:QK}async function BK(f,J={}){let Y=J.socketPath??CJ(J.homeDir),z=J.pidPath??nJ(J.homeDir),G=J.startedAt??new Date,X=new Set,q=new Set,Q=1,H=new gB({clients:function*(){yield*X,yield*q},idleGraceMs:S2(),onIdleStop:()=>void Y0().catch(($)=>uf("daemon-idle-shutdown",$))}),B=new ZB;B.onPublish(($)=>{HK(X,{type:"event",name:$.channel,payload:$.payload})});let V=new CH(B),j=new tZ(sZ(J.homeDir));await ZK(qK(Y),{recursive:!0}),await ZK(qK(z),{recursive:!0}),await Hj(Y).catch(()=>{});let U=N2(($)=>{let E={id:Q++,connectedAt:new Date,socket:$,buffer:"",subscribed:!1,holdsLifetime:!1,channels:null};X.add(E);let f0=new y2("utf8");$.on("data",(I)=>{E.buffer+=f0.write(I),g0(E)}),$.on("error",()=>{}),$.on("close",()=>{if(X.delete(E),E.subscribed)gY("conn",`client #${E.id} (${E.holdsLifetime?"gui":"pane"}) disconnected \u2014 ${X.size} client(s), ${H.guiCount()} gui left`);H.clientDisconnected(E.holdsLifetime)})}),L=f.subscribeTasks(($)=>{B.publish("task.snapshot",{tasks:$.map(zJ)})}),O=J.checkUpdate??wG,M=J.updatePollMs??b2,R=()=>{O().then(($)=>B.publish("update",{info:$})).catch(($)=>uf("update-poller",$))},S=null;if(M>0)R(),S=setInterval(R,M),S.unref?.();let a=J.autoTitlePollMs??XB,N=mV(f,a,()=>H.hasSubscribers()),g=z7(B,{statePath:NB(J.homeDir),debounceMs:J.uiPrefsDebounceMs??kB}),C=sV(B,{path:AB(J.homeDir),debounceMs:J.keybindingsDebounceMs??OB}),y=GK(f,B,J.worktreeChangesTickMs??Qj,()=>H.hasSubscribers()),_=f7(f,J.prStatusPollMs??Jq,()=>H.hasSubscribers()),z0=null,t={socketPath:Y,pidPath:z,startedAt:G,get webPort(){return z0?.port},clients:X,async close(){if(H.markStopping(),L(),z0?.close(),z0=null,S)clearInterval(S);N(),_(),g(),C(),y(),V.close(),HK(X,{type:"event",name:"daemon.stopping",payload:{}});for(let $ of Array.from(X))$.socket.destroy();await new Promise(($)=>U.close(()=>$())),await Hj(Y).catch(()=>{}),await Hj(z).catch(()=>{})}};await new Promise(($,E)=>{let f0=U;f0.once("error",E),U.listen(Y,()=>{f0.removeListener("error",E),$()})}),await k2(z,`${process.pid}
|
|
82
|
+
`,"utf8");async function Y0(){if(H.isStopping())return;H.markStopping(),await J.onStop?.(),setTimeout(()=>{t.close().catch(($)=>uf("daemon-shutdown",$))},0).unref()}let T=QX();function Q0($){return{orch:f,bus:B,activity:V,issues:j,daemon:{startedAt:G,socketPath:Y,webPort:z0?.port,pid:process.pid,guiCount:()=>H.guiCount(),stopSoon:Y0},clientId:$}}if(J.webPort!==void 0){let $=e5({orch:f,bus:B,activity:V,ctx:Q0});z0=await fK({port:J.webPort,hostname:J.webHost,staticDir:J.webStaticDir,link:$,onEvent:(E)=>B.onPublish(E),onSseOpen:()=>{let E={subscribed:!0,holdsLifetime:!0};return q.add(E),H.guiAttached(),gY("conn",`web client subscribed \u2014 ${X.size+q.size} client(s), ${H.guiCount()} gui`),()=>{q.delete(E),gY("conn",`web client disconnected \u2014 ${X.size+q.size} client(s), ${H.guiCount()} gui left`),H.clientDisconnected(!0)}}}),gY("web",`daemon web transport listening on http://${z0.hostname}:${z0.port}`)}async function p($,E){if($.name==="subscribe"){let f0=jB($.payload),I=E.subscribed;E.subscribed=!0;let G0=f0.role==="gui"?"gui":"pane";E.holdsLifetime=G0==="gui",E.channels=AW(f0.channels);let x=!I;if(E.holdsLifetime)H.guiAttached();gY("conn",`client #${E.id} subscribed as ${G0}${E.channels?` [${[...E.channels].join(",")}]`:""} \u2014 ${X.size} client(s), ${H.guiCount()} gui${x?" (collectors resume)":""}`);for(let c of B.snapshot()){if(E.channels&&!E.channels.has(c.channel))continue;OX(E,{type:"event",name:c.channel,payload:c.payload})}if(!E.channels||E.channels.has("engine-state"))for(let c of V.currentNonIdle())OX(E,{type:"event",name:"engine-state",payload:c});return{}}return qX(T,$.name,$.payload,Q0(E.id))}async function D0($,E){try{let f0=await p($,E);OX(E,{type:"response",id:$.id,name:$.name,payload:f0})}catch(f0){OX(E,{type:"response",id:$.id,name:$.name,error:BB(f0)})}}function g0($){let E=$.buffer.indexOf(`
|
|
83
|
+
`);while(E!==-1){let f0=$.buffer.slice(0,E);if($.buffer=$.buffer.slice(E+1),f0.trim().length>0)try{let I=JSON.parse(f0);if(I.type!=="request")throw Error("daemon only accepts request frames from clients");D0(I,$)}catch(I){OX($,{type:"response",id:"parse-error",error:{message:I instanceof Error?I.message:String(I)}})}E=$.buffer.indexOf(`
|
|
84
|
+
`)}}return t}async function KG(f){try{let J=await C2(f,"utf8"),Y=Number(J.trim());return Number.isFinite(Y)?Y:null}catch{return null}}function OX(f,J){f.socket.write(aG(J))}function HK(f,J){let Y=J.type==="event"&&J.name!=="daemon.stopping"?J.name:null,z=null;for(let G of f){if(!G.subscribed&&J.type==="event")continue;if(Y&&G.channels&&!G.channels.has(Y))continue;z??=aG(J),G.socket.write(z)}}var b2=21600000,QK=3000;var _q=k(()=>{U1();TW();cV();_Z();MB();tV();eV();mz();J7();sY();G7();JK();XK();_Z();MB()});import{unlink as jK}from"fs/promises";function I2(f){try{return process.kill(f,0),!0}catch(J){return J.code==="EPERM"}}async function UG(f,J){let Y=await KG(J),z=Y!==null&&Y!==process.pid?Y:null,G=z!==null&&I2(z),X=G?"graceful":"absent",q=new d1(f),Q=q.request("daemon.stop").catch(()=>{return}),H=new Promise((B)=>setTimeout(B,2000));if(await Promise.race([Q,H]),q.close(),G&&z!==null){let B=Date.now()+5000,V=!1;while(Date.now()<B){try{process.kill(z,0)}catch{break}if(!V&&Date.now()-(B-5000)>2000){try{process.kill(z,"SIGTERM")}catch{}X="sigterm",V=!0}await new Promise((j)=>setTimeout(j,50))}try{process.kill(z,0),process.kill(z,"SIGKILL"),X="sigkill",await new Promise((j)=>setTimeout(j,100))}catch{}}return await jK(f).catch(()=>{}),await jK(J).catch(()=>{}),{pid:Y,method:X}}var oq=k(()=>{$G();_q()});var Jj={};jf(Jj,{testDaemonResponds:()=>sq,ensureDaemonReachable:()=>DG,connectOrStartDaemon:()=>UJ,connectIfRunning:()=>p1});import{spawn as T2}from"child_process";import{closeSync as u2,existsSync as E2,mkdirSync as x2,openSync as w2}from"fs";import{dirname as WK,resolve as Bj}from"path";import{fileURLToPath as h2}from"url";function m2(f,J,Y,z){let G="ignore",X;try{x2(WK(z),{recursive:!0}),X=w2(z,"a"),G=["ignore",X,X]}catch{G="ignore"}if(T2(f,[...J],{detached:!0,stdio:G,env:Y}).unref(),X!==void 0)try{u2(X)}catch{}}async function DG(){let f=CJ();if(await sq(f))return f;await UG(f,nJ()).catch(()=>{});let[J,...Y]=c2(P2);m2(J,Y,process.env,RZ());let z=Date.now()+5000;while(Date.now()<z){if(await sq(f))return f;await new Promise((G)=>setTimeout(G,100))}throw Error(`kobe: daemon did not start (or stayed wedged) at ${f}`)}async function UJ(){let f=await DG(),J=new d1(f);return await J.connect(),J}async function p1(){let f=CJ();if(!await sq(f))return null;let J=new d1(f);return await J.connect(),J}async function sq(f,J=v2){let Y=new d1(f);try{await Y.connect()}catch{return Y.close(),!1}let z=Y.request("hello",{protocolVersion:n1}).then(()=>!0).catch(()=>!0),G,X=new Promise((Q)=>{G=setTimeout(()=>Q(!1),J)}),q=await Promise.race([z,X]);if(G)clearTimeout(G);return Y.close(),q}function c2(f){let J=h2(import.meta.url);if(J.startsWith("/$bunfs")||J.startsWith("B:\\~BUN"))return[process.execPath,...f];let Y=WK(J),z=[Bj(Y,"../cli/index.ts"),Bj(Y,"../../../kobe/src/cli/index.ts"),Bj(Y,"../cli/index.js")],G=z.find((X)=>E2(X));if(G)return[process.execPath,G,...f];throw Error(`kobe: could not locate kobe entry near ${Y}; checked ${z.join(", ")}`)}var P2,v2=3000;var y1=k(()=>{oq();mz();sY();$G();P2=["daemon","start"]});var DK={};jf(DK,{runExportSubcommand:()=>$2,renderExport:()=>UK});function n2(f){return{id:f.id,title:f.title,status:f.status,archived:String(f.archived),vendor:f.vendor??Sf,branch:f.branch,repo:f.repo,worktreePath:f.worktreePath}}function jj(f){process.stderr.write(`kobe export: ${f}
|
|
84
85
|
|
|
85
|
-
${
|
|
86
|
-
`),process.exit(2)}function
|
|
87
|
-
`)}function
|
|
88
|
-
`)}function
|
|
89
|
-
`);return}let
|
|
90
|
-
`);return}process.stdout.write(`${
|
|
91
|
-
`)}var
|
|
92
|
-
`),
|
|
86
|
+
${KK}
|
|
87
|
+
`),process.exit(2)}function d2(f){let J="json";for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="--json")J="json";else if(z==="--csv")J="csv";else if(z==="--format"){let G=f[++Y];if(G===void 0)jj("--format requires a value (json, csv, or table)");J=VK(G)}else if(z.startsWith("--format="))J=VK(z.slice(9));else jj(`unexpected argument "${z}"`)}return J}function VK(f){if(f==="json"||f==="csv"||f==="table")return f;jj(`unknown format "${f}" (expected json, csv, or table)`)}function i2(f){if(/[",\r\n]/.test(f))return`"${f.replace(/"/g,'""')}"`;return f}function l2(f){let J=[AX.join(",")];for(let Y of f)J.push(AX.map((z)=>i2(Y[z])).join(","));return J.join(`
|
|
88
|
+
`)}function a2(f){let J={};for(let G of AX)J[G]=Math.max(G.length,...f.map((X)=>X[G].length));let Y=(G)=>AX.map((X)=>G[X].padEnd(J[X])).join(" ").trimEnd(),z={};for(let G of AX)z[G]=G;return[Y(z),...f.map(Y)].join(`
|
|
89
|
+
`)}function UK(f,J){let Y=f.map(n2);if(J==="json")return JSON.stringify(Y,null,2);if(J==="csv")return l2(Y);return a2(Y)}async function $2(f){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(`${KK}
|
|
90
|
+
`);return}let J=d2(f),{TaskIndexStore:Y}=await Promise.resolve().then(() => (vG(),zH)),z=new Y;await z.load();let G=z.list();if(G.length===0&&J==="table"){process.stdout.write(`no tasks
|
|
91
|
+
`);return}process.stdout.write(`${UK(G,J)}
|
|
92
|
+
`)}var KK,AX;var LK=k(()=>{S1();KK=["Usage: kobe export [--json | --csv | --format <json|csv|table>]","","Print the task list (from ~/.kobe/tasks.json) to stdout. Read-only and","daemon-free \u2014 works with the kobe daemon down.","","Options:"," --json JSON array of tasks (default)"," --csv CSV with a header row"," --format <fmt> One of: json, csv, table"," -h, --help Print this help",""].join(`
|
|
93
|
+
`),AX=["id","title","status","archived","vendor","branch","repo","worktreePath"]});var OK={};jf(OK,{runRepoSubcommand:()=>o2});import{readFileSync as r2}from"fs";import{resolve as tq}from"path";function EY(f){process.stderr.write(`kobe repo: ${f}
|
|
93
94
|
|
|
94
|
-
${
|
|
95
|
-
`),process.exit(2)}function
|
|
96
|
-
`);return}let{getRepoInitOverride:
|
|
97
|
-
`)});import{spawnSync as
|
|
95
|
+
${FK}
|
|
96
|
+
`),process.exit(2)}function MK(f){try{return r2(tq(process.cwd(),f),"utf8")}catch(J){EY(`cannot read ${f}: ${J instanceof Error?J.message:String(J)}`)}}function p2(f){let J={};for(let Y=0;Y<f.length;Y++){let z=f[Y],G=()=>{let X=f[++Y];if(X===void 0)EY(`${z} requires a value`);return X};if(z==="--init-script")J.initScript=G();else if(z==="--init-script-file")J.initScript=MK(G());else if(z==="--init-prompt")J.initPrompt=G();else if(z==="--init-prompt-file")J.initPrompt=MK(G());else if(z.startsWith("-"))EY(`unknown flag "${z}"`);else if(J.path===void 0)J.path=z;else EY(`unexpected argument "${z}"`)}return J}function _2(f){let J,Y=!1,z=!1;for(let G of f)if(G==="--init-script")Y=!0;else if(G==="--init-prompt")z=!0;else if(G.startsWith("-"))EY(`unknown flag "${G}"`);else if(J===void 0)J=G;else EY(`unexpected argument "${G}"`);if(!Y&&!z)Y=!0,z=!0;return{path:J,clearScript:Y,clearPrompt:z}}async function o2(f){let[J,...Y]=f;if(J===void 0||J==="--help"||J==="-h"||J==="help"){process.stdout.write(`${FK}
|
|
97
|
+
`);return}let{getRepoInitOverride:z,setRepoInitOverride:G,resolveRepoRoot:X}=await Promise.resolve().then(() => (gf(),qY)),{existsSync:q}=await import("fs"),{join:Q}=await import("path");if(J==="show"){let[H]=Y.filter((L)=>!L.startsWith("-")),B=X(tq(process.cwd(),H??".")),V=z(B),j=q(Q(B,".kobe","init.sh")),U=q(Q(B,".kobe","init-prompt.md"));console.log(`repo: ${B}`),console.log(` .kobe/init.sh: ${j?"present (wins)":"absent"}`),console.log(` .kobe/init-prompt.md: ${U?"present (wins)":"absent"}`),console.log(` override initScript: ${V.initScript?LG(V.initScript):"(unset)"}`),console.log(` override initPrompt: ${V.initPrompt?LG(V.initPrompt):"(unset)"}`);return}if(J==="set"){let H=p2(Y);if(H.initScript===void 0&&H.initPrompt===void 0)EY("set needs at least one of --init-script(-file) / --init-prompt(-file)");let B=X(tq(process.cwd(),H.path??".")),V=G(B,{...H.initScript!==void 0?{initScript:H.initScript}:{},...H.initPrompt!==void 0?{initPrompt:H.initPrompt}:{}});console.log(`updated override for ${B}`),console.log(` initScript: ${V.initScript?LG(V.initScript):"(unset)"}`),console.log(` initPrompt: ${V.initPrompt?LG(V.initPrompt):"(unset)"}`);return}if(J==="unset"){let{path:H,clearScript:B,clearPrompt:V}=_2(Y),j=X(tq(process.cwd(),H??".")),U=G(j,{...B?{initScript:""}:{},...V?{initPrompt:""}:{}});console.log(`cleared override for ${j}`),console.log(` initScript: ${U.initScript?LG(U.initScript):"(unset)"}`),console.log(` initPrompt: ${U.initPrompt?LG(U.initPrompt):"(unset)"}`);return}EY(`unknown verb "${J}"`)}function LG(f){let J=f.replace(/\s+/g," ").trim();return J.length>60?`"${J.slice(0,57)}\u2026"`:`"${J}"`}var FK;var AK=k(()=>{FK=["Usage: kobe repo <show|set|unset> [path] [options]","","Manage a repo's per-user init override (state.json fallback for repos","that don't ship .kobe/init.sh / .kobe/init-prompt.md).","","Commands:"," show [path] Print the override + whether the repo ships .kobe/ files"," set [path] <options> Set the init script and/or first prompt"," unset [path] [--init-script] [--init-prompt] Clear one or both (default: both)","","Set options (later wins; *-file reads from disk):"," --init-script <text> Inline shell to run before the engine"," --init-script-file <path> Read the init script from a file"," --init-prompt <text> Inline first prompt for the engine"," --init-prompt-file <path> Read the first prompt from a file",""," path defaults to the current directory (resolved to its git toplevel).",""].join(`
|
|
98
|
+
`)});import{spawnSync as s2}from"child_process";function fC(f){let[J,Y]=f.split("/");if(!J||!Y)throw Error(`invalid GitHub repository slug: ${f}`);return{owner:J,name:Y}}function gK(f,J){let Y=f.trim();if(!Y)throw Error(`${J} is required`);return Y}function RK(f,J){let Y=J?.map((z)=>typeof z.message==="string"?z.message:null).filter((z)=>!!z);if(Y&&Y.length>0)return Y.join("; ");return f.trim()||"GitHub CLI returned an empty response"}function CK(f,J,Y){let z=["api","graphql","-f",`query=${f}`];for(let[H,B]of Object.entries(J))z.push("-f",`${H}=${B}`);let G=Y.spawn("gh",z,{encoding:"utf8"});if(G.error)throw Error(`failed to run gh: ${G.error.message}`);let X=typeof G.stdout==="string"?G.stdout:String(G.stdout??""),q=typeof G.stderr==="string"?G.stderr:String(G.stderr??""),Q;try{Q=JSON.parse(X)}catch{throw Error(`failed to parse gh response: ${RK(q,void 0)}`)}if((G.status??0)!==0||Q.errors?.length)throw Error(RK(q,Q.errors));if(!Q.data)throw Error("GitHub CLI response did not include data");return Q.data}function JC(f){return`${f}
|
|
98
99
|
|
|
99
100
|
---
|
|
100
|
-
Submitted from kobe ${
|
|
101
|
+
Submitted from kobe ${s0}.`}function MG(f,J={}){let Y=gK(f.title,"feedback title"),z=JC(gK(f.body,"feedback body")),G=(J.repoSlug??aY)();if(!G)throw Error("package repository is not a GitHub repository");let{owner:X,name:q}=fC(G),Q=f.categorySlug?.trim()||Wj,H={spawn:J.spawn??s2},V=CK(t2,{owner:X,name:q},H).repository,j=V?.id;if(!j)throw Error(`GitHub repository not found: ${G}`);let U=V.discussionCategories?.nodes?.find((M)=>M.slug===Q);if(!U)throw Error(`GitHub Discussion category not found: ${Q}`);let O=CK(e2,{repositoryId:j,categoryId:U.id,title:Y,body:z},H).createDiscussion?.discussion;if(!O?.url||typeof O.number!=="number")throw Error("GitHub did not return the created Discussion");return{number:O.number,url:O.url}}var Wj="feedback",t2=`
|
|
101
102
|
query($owner: String!, $name: String!) {
|
|
102
103
|
repository(owner: $owner, name: $name) {
|
|
103
104
|
id
|
|
@@ -110,7 +111,7 @@ query($owner: String!, $name: String!) {
|
|
|
110
111
|
}
|
|
111
112
|
}
|
|
112
113
|
}
|
|
113
|
-
`,
|
|
114
|
+
`,e2=`
|
|
114
115
|
mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!) {
|
|
115
116
|
createDiscussion(input: {
|
|
116
117
|
repositoryId: $repositoryId,
|
|
@@ -124,74 +125,74 @@ mutation($repositoryId: ID!, $categoryId: ID!, $title: String!, $body: String!)
|
|
|
124
125
|
}
|
|
125
126
|
}
|
|
126
127
|
}
|
|
127
|
-
`;var
|
|
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}"
|
|
128
|
+
`;var eq=k(()=>{U1()});async function kK(f={}){let J=f.mode==="require-running"?await p1():await UJ();if(!J)return null;return{client:J,close:()=>J.close()}}var NK=k(()=>{y1()});var PK={};jf(PK,{verbSchema:()=>Lj,verbHelp:()=>xK,validateAgainstSpec:()=>Uj,schemaIndex:()=>uK,runApiSubcommand:()=>NC,parseFlags:()=>Kj,parseAgentsSpec:()=>IK,invokeVerb:()=>kC,fullSchema:()=>EK,findVerb:()=>gX,deliverPrompt:()=>wK,defaultApiRuntime:()=>Mj,apiUsage:()=>fQ,VerbArgs:()=>Dj,VERB_GROUPS:()=>OG,VERBS:()=>AG,FANOUT_CAP:()=>FG,ApiError:()=>Mf,API_VERBS:()=>GC,API_SCHEMA_VERSION:()=>Vj});import{resolve as yK}from"path";function SK(f){for(let[J,Y]of Object.entries(OG))if(Y.includes(f))return J;return"other"}async function zC(f){let J=f.args.str("verb");if(J){let z=gX(J);if(!z)throw new Mf(`unknown verb: ${J}`,"BAD_VERB");return Lj(z)}let Y=f.args.str("group");if(Y)return ZC(Y);if(f.args.bool("all"))return EK();return uK()}function gX(f){let J=JQ[f]??f;return AG.find((Y)=>Y.name===J)}function Kj(f,J=new Set){let Y=new Map,z=!1,G=!1;for(let X=0;X<f.length;X++){let q=f[X];if(!q.startsWith("--")&&q!=="-h")throw new Mf(`unexpected positional arg: ${q}`,"BAD_FLAG");if(q==="-h"){G=!0;continue}let Q=q.indexOf("=");if(Q!==-1){let V=q.slice(2,Q),j=q.slice(Q+1);if(V==="pretty")z=j!=="false"&&j!=="0";else if(V==="help")G=j!=="false"&&j!=="0";else Y.set(V,j);continue}let H=q.slice(2);if(H==="pretty"){z=!0;continue}if(H==="help"){G=!0;continue}if(J.has(H)){Y.set(H,"true");continue}let B=f[X+1];if(B===void 0||B.startsWith("--"))throw new Mf(`flag --${H} requires a value`,"BAD_FLAG");Y.set(H,B),X+=1}return{flags:Y,pretty:z,help:G}}function Uj(f,J){let Y=new Set(f.flags.map((z)=>z.name));for(let z of J.keys())if(!Y.has(z))throw new Mf(`unknown flag --${z} for "${f.name}". Run \`kobe api ${f.name} --help\``,"BAD_FLAG");for(let z of f.flags){if(z.required&&!J.get(z.name))throw new Mf(`--${z.name} is required for "${f.name}"`,"MISSING_FLAG");if(z.type==="enum"&&z.values){let G=J.get(z.name);if(G!==void 0&&!z.values.includes(G))throw new Mf(`--${z.name} must be one of ${z.values.join(", ")}`,"BAD_FLAG")}if(z.type==="int"){let G=J.get(z.name);if(G!==void 0){let X=Number.parseInt(G,10);if(!Number.isInteger(X)||X<=0)throw new Mf(`--${z.name} must be a positive integer`,"BAD_FLAG")}}}}class Dj{verb;flags;constructor(f,J){this.verb=f;this.flags=J}spec(f){let J=this.verb.flags.find((Y)=>Y.name===f);if(!J)throw Error(`internal: --${f} is not declared on verb "${this.verb.name}"`);return J}str(f){this.spec(f);let J=this.flags.get(f);return J&&J.length>0?J:void 0}require(f){let J=this.str(f);if(J===void 0)throw new Mf(`--${f} is required`,"MISSING_FLAG");return J}enumOf(f){let J=this.spec(f),Y=this.str(f);if(Y===void 0)return;if(J.values&&!J.values.includes(Y))throw new Mf(`--${f} must be one of ${J.values.join(", ")}`,"BAD_FLAG");return Y}requireEnum(f){return this.require(f),this.enumOf(f)}vendor(){return this.enumOf("vendor")}bool(f){this.spec(f);let J=this.str(f);if(J===void 0)return;if(["true","1","yes"].includes(J))return!0;if(["false","0","no"].includes(J))return!1;throw new Mf(`--${f} must be a boolean (true/false)`,"BAD_FLAG")}int(f){this.spec(f);let J=this.str(f);if(J===void 0)return;let Y=Number.parseInt(J,10);if(!Number.isInteger(Y)||Y<=0)throw new Mf(`--${f} must be a positive integer`,"BAD_FLAG");return Y}path(f){let J=this.str(f);return J===void 0?void 0:yK(process.cwd(),J)}requirePath(f){return yK(process.cwd(),this.require(f))}}function IK(f){let J=[];for(let Y of f.split(",")){let z=Y.trim();if(!z)continue;let G=z.indexOf(":");if(G===-1)throw new Mf(`--agents entry "${z}" must be vendor:count`,"BAD_FLAG");let X=z.slice(0,G);if(!cf.includes(X))throw new Mf(`--agents vendor "${X}" must be one of ${cf.join(", ")}`,"BAD_FLAG");let q=Number.parseInt(z.slice(G+1),10);if(!Number.isInteger(q)||q<=0)throw new Mf(`--agents count for "${X}" must be a positive integer`,"BAD_FLAG");if(J.length+q>FG)throw new Mf(`--agents requests ${J.length+q} agents, exceeds the cap of ${FG}`,"BAD_FLAG");for(let Q=0;Q<q;Q++)J.push(X)}if(J.length===0)throw new Mf('--agents specified no agents (e.g. "claude:2,codex:1")',"BAD_FLAG");return J}function XC(f){return{name:f.name,type:f.type,required:f.required??!1,...f.values?{values:f.values}:{},...f.default!==void 0?{default:f.default}:{},...f.placeholder?{placeholder:f.placeholder}:{},description:f.description}}function Lj(f){return{name:f.name,group:SK(f.name),summary:f.summary,offline:f.offline??!1,flags:f.flags.map(XC)}}function uK(){return{apiVersion:Vj,kobeVersion:s0,hint:"Compact index. Drill into ONE verb: `kobe api schema --verb <name>` (or `kobe api <verb> --help`). One group: `--group <g>`. Whole spec: `--all`.",groups:OG,verbs:AG.map((f)=>({name:f.name,group:SK(f.name),summary:f.summary})),globalFlags:TK,aliases:JQ}}function ZC(f){let J=OG[f];if(!J)throw new Mf(`unknown group: ${f}. Groups: ${Object.keys(OG).join(", ")}`,"BAD_FLAG");return{group:f,verbs:J.map((Y)=>{let z=gX(Y);return{name:Y,summary:z?.summary??""}})}}function EK(){return{apiVersion:Vj,kobeVersion:s0,output:{success:"one JSON object on stdout, newline-terminated, exit 0",error:'{"error":{"message","code"}} on stderr, exit != 0',pretty:"--pretty indents stdout JSON"},globalFlags:TK,aliases:JQ,groups:OG,verbs:AG.map(Lj)}}function qC(f){return f.flags.map((J)=>{let Y=J.type==="enum"&&J.values?J.values.join("|"):J.placeholder??(J.type==="bool"?"":"X"),z=Y?`--${J.name} ${Y}`:`--${J.name}`;return J.required?z:`[${z}]`}).join(" ")}function xK(f){let J=[`kobe api ${f.name} ${qC(f)}`.trimEnd(),"",f.summary,""],Y=Object.entries(JQ).find(([,z])=>z===f.name)?.[0];if(Y)J.push(`Alias: ${Y}`,"");if(f.flags.length>0){J.push("Flags:");for(let z of f.flags){let G=z.required?" (required)":"",X=z.default!==void 0?` [default: ${z.default}]`:"",q=z.type==="enum"&&z.values?` {${z.values.join("|")}}`:"";J.push(` --${z.name}${q}${G}${X} ${z.description}`)}J.push("")}return J.push("Global: [--pretty] [--help]"),J.join(`
|
|
129
|
+
`)}function fQ(){return["usage: kobe api <verb> [flags] [--pretty] [--help]","","Explore the full surface (names, flags, types) with: kobe api schema","","verbs:",...AG.map((J)=>` ${J.name.padEnd(18)} ${J.summary}`),"","Output is one JSON object on stdout (exit 0); errors are JSON on stderr (exit != 0)."].join(`
|
|
130
|
+
`)}function QC(f,J){let Y=J?JSON.stringify(f,null,2):JSON.stringify(f);process.stdout.write(`${Y}
|
|
131
|
+
`)}function tJ(f,J,Y=1){process.stderr.write(`${JSON.stringify({error:{message:f,code:J}})}
|
|
132
|
+
`),process.exit(Y)}async function wK(f,J,Y,z=HC){let G=J.worktreePath;if(!G)G=(await f.request("task.ensureWorktree",{taskId:J.id})).worktreePath;if(!G)throw new Mf(`task ${J.id} has no worktree`,"NO_WORKTREE");let X=Lf(J.id),q=await z.sessionExists(X);if(!q){let B=await z.resolveEngineLaunchInit(J.repo??"",G,{kind:"none"});if(!await z.ensureSession({name:X,cwd:G,command:z.engineCommand(J.vendor),taskId:J.id,vendor:J.vendor,repo:J.repo,launchInit:B}))throw new Mf(`failed to start tmux session for ${J.id}`,"SESSION_FAILED")}let{pane:Q,ready:H}=await z.waitForEnginePane(X,!q);if(!Q)throw new Mf(`no engine pane in session ${X}`,"NO_ENGINE_PANE");return await z.pasteAndSubmit(Q,Y),{session:X,pane:Q,started:!q,engineReady:H}}async function BC(f){let J=null,Y=f.onChannel("active-task",(z)=>{J=z.taskId});try{await f.subscribe()}finally{Y()}return J}function h1(f){if(!f.client)throw new Mf("daemon required","BAD_DAEMON");return f.client}async function DJ(f,J,Y){return h1(f).request(J,Y)}async function jC(f){let J=f.args.str("title"),Y=f.args.str("body");if(J===void 0&&Y===void 0)throw new Mf("issue-update requires --title and/or --body","MISSING_FLAG");return DJ(f,"issue.mutate",{repoRoot:f.args.requirePath("repo"),op:{type:"update",id:f.args.int("id"),title:J,body:Y}})}async function WC(f){let J=h1(f),{args:Y,runtime:z}=f,X={repo:await z.resolveRepoRoot(Y.requirePath("repo"))},q=Y.str("title");if(q)X.title=q;let Q=Y.str("branch");if(Q)X.branch=Q;let H=Y.str("base-branch");if(H)X.baseRef=H;let B=Y.vendor()??await z.defaultVendor();if(B)X.vendor=B;let V=await J.request("task.create",X),j=V.taskId;await J.request("task.setActive",{taskId:j});let U=Y.enumOf("status");if(U)await J.request("task.status",{taskId:j,status:U});let L=Y.bool("pin");if(L!==void 0)await J.request("task.pin",{taskId:j,pinned:L});let O=V.task;if(U||L!==void 0)O=(await J.request("task.get",{taskId:j})).task;let M=Y.str("prompt");if(!M)return{taskId:j,task:O,started:!1};let R=await f.runtime.deliverPrompt(J,{id:j,worktreePath:O.worktreePath,vendor:O.vendor,repo:O.repo},M);return O=(await J.request("task.get",{taskId:j})).task,{taskId:j,task:O,started:R.started,engineReady:R.engineReady,session:R.session}}async function VC(f){let J=h1(f),Y=f.args.require("prompt"),z=f.args.str("task-id");if(!z){let q=await BC(J);if(!q)throw new Mf("no --task-id given and no active task \u2014 open a task first or pass --task-id","MISSING_TARGET");z=q}let G=await J.request("task.get",{taskId:z}),X=await f.runtime.deliverPrompt(J,{id:z,worktreePath:G.task.worktreePath,vendor:G.task.vendor,repo:G.task.repo},Y);return{ok:!0,taskId:z,session:X.session,started:X.started,engineReady:X.engineReady}}async function KC(f){let J=h1(f),Y=f.args.require("task-id"),z=f.args.require("prompt");return await J.request("session.deliver",{taskId:Y,text:z,source:"dispatcher"}),{ok:!0,taskId:Y,routed:"session.deliver"}}async function UC(f){let J=h1(f),Y=f.args.require("task-id"),z=f.args.require("text");return await J.request("note.file",{taskId:Y,text:z})}async function DC(f){let J=h1(f),Y=f.args.require("task-id"),z=await J.request("task.get",{taskId:Y}),G=await f.runtime.isTaskRunning(Y);return{task:z.task,running:G}}async function LC(f){return h1(f).request("task.list")}async function MC(f){let J=h1(f),z=f.args.bool("none")?null:f.args.require("task-id");return await J.request("task.setActive",{taskId:z}),{ok:!0,activeTaskId:z}}async function FC(f){let J=h1(f),Y=f.args.require("task-id"),z=f.args.bool("archived")??!0,G=await J.request("task.archive",{taskId:Y,archived:z});if(z)await f.runtime.tearDownSession(Y);return G}async function OC(f){let J=h1(f),Y=f.args.require("task-id"),z=f.args.bool("force")??!1,G=await J.request("task.delete",{taskId:Y,force:z});return await f.runtime.tearDownSession(Y),G}async function AC(f){let J=h1(f),{args:Y}=f,z={repo:Y.requirePath("repo"),worktreePath:Y.requirePath("worktree")},G=Y.str("branch");if(G)z.branch=G;let X=Y.vendor();if(X)z.vendor=X;let q=Y.str("title");if(q)z.title=q;return J.request("worktree.adopt",z)}async function gC(f){let J=h1(f),{args:Y,runtime:z}=f,G=await z.resolveRepoRoot(Y.requirePath("repo")),X=Y.require("prompt"),q=Y.str("title"),Q=Y.str("base-branch"),H=Y.str("agents"),B=await z.defaultVendor(),V=H?IK(H):Array(Y.int("count")??1).fill(Y.vendor()??B??"claude");if(V.length>FG)throw new Mf(`fan-out of ${V.length} exceeds the cap of ${FG} \u2014 spawn in batches`,"BAD_FLAG");let j=[];for(let U of V){let L={repo:G,vendor:U};if(q)L.title=q;if(Q)L.baseRef=Q;let O=await J.request("task.create",L),M=await f.runtime.deliverPrompt(J,{id:O.taskId,worktreePath:O.task.worktreePath,vendor:U,repo:O.task.repo},X);j.push({taskId:O.taskId,vendor:U,started:M.started,engineReady:M.engineReady,session:M.session})}return{count:j.length,tasks:j}}async function RC(f){let J=h1(f),{args:Y,runtime:z}=f,G=Y.str("task-ids"),X=Y.path("repo"),q;if(G)q=G.split(",").map((H)=>H.trim()).filter(Boolean);else if(X){let H=await z.resolveRepoRoot(X),{tasks:B}=await J.request("task.list");q=[];for(let V of B){if(V.archived)continue;if(await z.resolveRepoRoot(V.repo)===H)q.push(V.id)}}else throw new Mf("collect needs --task-ids id1,id2 or --repo PATH","MISSING_TARGET");let Q=[];for(let H of q){let{task:B}=await J.request("task.get",{taskId:H}),V=await z.isTaskRunning(H),j=B.worktreePath?await z.readWorktreeChanges(B.worktreePath):{added:0,deleted:0};Q.push({taskId:B.id,title:B.title,branch:B.branch,worktreePath:B.worktreePath,vendor:B.vendor,status:B.status,running:V,changes:j})}return{tasks:Q}}async function CC(f){return{ok:!0,discussion:MG({title:f.args.require("title"),body:f.args.require("body"),categorySlug:f.args.str("category")})}}function hK(f,J,Y,z){return{args:new Dj(f,J),client:Y,runtime:z}}async function kC(f,J,Y){let z=gX(f);if(!z)throw new Mf(`unknown verb: ${f}`,"BAD_VERB");let G=new Set(z.flags.filter((q)=>q.type==="bool").map((q)=>q.name)),X=Kj(J,G);return Uj(z,X.flags),z.handler(hK(z,X.flags,Y.client,Y.runtime??Mj))}async function NC(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(!J)tJ(fQ(),"MISSING_VERB",2);process.stdout.write(`${fQ()}
|
|
133
|
+
`);return}let z=gX(J);if(!z)tJ(`unknown verb: ${J}
|
|
134
|
+
${fQ()}`,"BAD_VERB",2);let G=new Set(z.flags.filter((Q)=>Q.type==="bool").map((Q)=>Q.name)),X;try{X=Kj(Y,G)}catch(Q){if(Q instanceof Mf)tJ(Q.message,Q.code,2);tJ(Q instanceof Error?Q.message:String(Q),"BAD_FLAG",2)}if(X.help){process.stdout.write(`${xK(z)}
|
|
135
|
+
`);return}try{Uj(z,X.flags)}catch(Q){if(Q instanceof Mf)tJ(Q.message,Q.code,2);tJ(Q instanceof Error?Q.message:String(Q),"BAD_FLAG",2)}let q=null;if(!z.offline)try{q=await kK()}catch(Q){tJ(`could not reach or start the kobe daemon: ${Q instanceof Error?Q.message:String(Q)}`,"BAD_DAEMON",2)}try{let Q=await z.handler(hK(z,X.flags,q?.client??null,Mj));QC(Q,X.pretty)}catch(Q){if(Q instanceof Mf)tJ(Q.message,Q.code,1);tJ(Q instanceof Error?Q.message:String(Q),"RPC_ERROR",1)}finally{q?.close()}}var Vj=2,FG=10,bK,YC,Mf,Vf,JQ,OG,AG,GC,TK,HC,Mj;var vK=k(()=>{E1();eq();Tf();Rq();K1();U1();NK();bK=["backlog","in_progress","in_review","done","canceled","error"],YC=["open","doing","hold","done"];Mf=class Mf extends Error{code;constructor(f,J){super(f);this.code=J}};Vf={repo:(f=!0)=>({name:"repo",type:"string",required:f,placeholder:"PATH",description:"Repo root (git toplevel). Relative paths resolve against $PWD."}),taskId:(f=!0)=>({name:"task-id",type:"string",required:f,placeholder:"ID",description:"Target task id (from `list` / `add`)."}),vendor:()=>({name:"vendor",type:"enum",values:cf,placeholder:"V",description:"Engine vendor for the task."}),title:()=>({name:"title",type:"string",placeholder:"T",description:"Human task title."}),prompt:(f,J)=>({name:"prompt",type:"string",required:f,placeholder:"TEXT",description:J})},JQ={"spawn-task":"add"},OG={discover:["schema"],read:["list","get-task","collect"],create:["add","fan-out"],drive:["send","dispatch","note","set-active"],edit:["rename","set-branch","set-vendor","set-status"],issues:["issue-list","issue-create","issue-set-status","issue-update"],lifecycle:["archive","pin","delete"],worktree:["ensure-worktree","adopt","discover-adoptable"],feedback:["feedback"]};AG=[{name:"schema",summary:"Explore the API. Default = a COMPACT index (groups + verb summaries, no flags). Drill in with --verb / --group; --all for the full spec.",flags:[{name:"verb",type:"string",placeholder:"NAME",description:"Full flag detail for ONE verb."},{name:"group",type:"string",placeholder:"G",description:"List the verbs in one group (compact)."},{name:"all",type:"bool",description:"The COMPLETE spec \u2014 every verb AND every flag (large; avoid by default)."}],offline:!0,handler:zC},{name:"list",summary:"List all tasks (incl. archived). Returns { tasks }.",flags:[],handler:LC},{name:"get-task",summary:"Read one task's metadata. `.running` = its tmux session is live.",flags:[Vf.taskId()],handler:DC},{name:"add",summary:"Create a task (shows in the sidebar immediately). With --prompt it also starts the engine and delivers it. Alias: spawn-task.",flags:[Vf.repo(),Vf.title(),{name:"branch",type:"string",placeholder:"B",description:"Explicit branch name (else auto kobe/<slug>-<id>)."},{name:"base-branch",type:"string",placeholder:"B",description:"Base ref the worktree branches from."},Vf.vendor(),{name:"status",type:"enum",values:bK,default:"backlog",description:"Initial lifecycle status."},{name:"pin",type:"bool",description:"Pin the task to the top of the sidebar."},Vf.prompt(!1,"Optional first message \u2014 when set, materializes the worktree, starts the engine, and pastes it.")],handler:WC},{name:"fan-out",summary:`Spawn N tasks of ONE prompt in a single call (parallel attempts). Capped at ${FG}.`,flags:[Vf.repo(),Vf.prompt(!0,"Shared prompt delivered to every spawned task."),{name:"count",type:"int",placeholder:"N",description:"Number of tasks of one vendor (with --vendor)."},{name:"agents",type:"string",placeholder:"claude:2,codex:1",description:"Per-vendor counts (alternative to --count)."},Vf.vendor(),Vf.title(),{name:"base-branch",type:"string",placeholder:"B",description:"Base ref for every worktree."}],handler:gC},{name:"send",summary:"Paste a follow-up prompt into a task's running engine (one full turn). Defaults to the active task.",flags:[Vf.taskId(!1),Vf.prompt(!0,"Text pasted + submitted into the engine pane.")],handler:VC},{name:"dispatch",summary:"Route text into a task's live session via the daemon's session.deliver channel \u2014 the front-end hosting the session pastes it. The dispatcher's messenger (docs/design/dispatcher.md); unlike `send`, it never spawns or touches tmux itself.",flags:[Vf.taskId(!0),Vf.prompt(!0,"Text delivered into the task's engine session.")],handler:KC},{name:"note",summary:"File a one-line field note \u2014 a resolved, repo-level gotcha worth sharing. kobe forwards it to the repo's dispatcher session (the main session), which relays it to the in-flight tasks that benefit (docs/design/dispatcher.md).",flags:[Vf.taskId(!0),{name:"text",type:"string",required:!0,placeholder:"TEXT",description:"One line: the verified conclusion another session could act on."}],handler:UC},{name:"feedback",summary:"Create a GitHub Discussion in the kobe repo's Feedback category through `gh`.",flags:[{name:"title",type:"string",required:!0,placeholder:"T",description:"Discussion title."},{name:"body",type:"string",required:!0,placeholder:"TEXT",description:"Discussion body."},{name:"category",type:"string",default:Wj,placeholder:"SLUG",description:"Discussion category slug."}],offline:!0,handler:CC},{name:"issue-list",summary:"List daemon-owned issues for a repo.",flags:[Vf.repo()],handler:(f)=>DJ(f,"issue.list",{repoRoot:f.args.requirePath("repo")})},{name:"issue-create",summary:"Create a daemon-owned issue for a repo.",flags:[Vf.repo(),{name:"title",type:"string",required:!0,placeholder:"T",description:"Issue title."},{name:"body",type:"string",placeholder:"TEXT",description:"Issue body."}],handler:(f)=>DJ(f,"issue.mutate",{repoRoot:f.args.requirePath("repo"),op:{type:"create",title:f.args.require("title"),body:f.args.str("body")}})},{name:"issue-set-status",summary:"Set a daemon-owned issue's status.",flags:[Vf.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"status",type:"enum",required:!0,values:YC,description:"New issue status."}],handler:(f)=>DJ(f,"issue.mutate",{repoRoot:f.args.requirePath("repo"),op:{type:"setStatus",id:f.args.int("id"),status:f.args.requireEnum("status")}})},{name:"issue-update",summary:"Update a daemon-owned issue's title and/or body.",flags:[Vf.repo(),{name:"id",type:"int",required:!0,placeholder:"N",description:"Issue id."},{name:"title",type:"string",placeholder:"T",description:"New title."},{name:"body",type:"string",placeholder:"TEXT",description:"New body."}],handler:jC},{name:"collect",summary:"Read-only comparison snapshot of several tasks (identity, branch, .running, uncommitted .changes).",flags:[{name:"task-ids",type:"csv",placeholder:"a,b,c",description:"Comma-separated task ids."},Vf.repo(!1)],handler:RC},{name:"rename",summary:"Set a task's title.",flags:[Vf.taskId(),{name:"title",type:"string",required:!0,placeholder:"T",description:"New title."}],handler:(f)=>DJ(f,"task.rename",{taskId:f.args.require("task-id"),title:f.args.require("title")})},{name:"set-branch",summary:"Rename a task's branch (git branch -m if materialized, else recorded).",flags:[Vf.taskId(),{name:"branch",type:"string",required:!0,placeholder:"B",description:"New branch name."}],handler:(f)=>DJ(f,"task.setBranch",{taskId:f.args.require("task-id"),branch:f.args.require("branch")})},{name:"set-vendor",summary:"Change a task's engine vendor (takes effect on next session rebuild).",flags:[Vf.taskId(),{...Vf.vendor(),required:!0}],handler:(f)=>DJ(f,"task.setVendor",{taskId:f.args.require("task-id"),vendor:f.args.requireEnum("vendor")})},{name:"set-status",summary:"Set a task's lifecycle status.",flags:[Vf.taskId(),{name:"status",type:"enum",required:!0,values:bK,description:"New status."}],handler:(f)=>DJ(f,"task.status",{taskId:f.args.require("task-id"),status:f.args.requireEnum("status")})},{name:"archive",summary:"Archive (or with --archived=false, unarchive) a task. Non-destructive: worktree/branch/history stay.",flags:[Vf.taskId(),{name:"archived",type:"bool",default:"true",description:"true to archive, false to unarchive."}],handler:FC},{name:"pin",summary:"Pin (or with --pinned=false, unpin) a task to the top of the sidebar.",flags:[Vf.taskId(),{name:"pinned",type:"bool",default:"true",description:"true to pin, false to unpin."}],handler:(f)=>DJ(f,"task.pin",{taskId:f.args.require("task-id"),pinned:f.args.bool("pinned")??!0})},{name:"set-active",summary:"Set the shared active task (the focus every Tasks pane highlights). Pass --none to clear.",flags:[Vf.taskId(!1),{name:"none",type:"bool",description:"Clear the active task instead of setting one."}],handler:MC},{name:"ensure-worktree",summary:"Materialize a task's git worktree on disk now (without starting an engine). Returns { worktreePath }.",flags:[Vf.taskId()],handler:(f)=>DJ(f,"task.ensureWorktree",{taskId:f.args.require("task-id")})},{name:"delete",summary:"Permanently remove a task (and its worktree). DESTRUCTIVE \u2014 prefer `archive`. Needs --force on a dirty worktree.",flags:[Vf.taskId(),{name:"force",type:"bool",description:"Delete even with uncommitted changes."}],handler:OC},{name:"discover-adoptable",summary:"List existing git worktrees in a repo not yet tracked as kobe tasks. Returns { worktrees }.",flags:[Vf.repo()],handler:(f)=>DJ(f,"worktree.discoverAdoptable",{repo:f.args.requirePath("repo")})},{name:"adopt",summary:"Import an existing git worktree as a kobe task. Returns { task }.",flags:[Vf.repo(),{name:"worktree",type:"string",required:!0,placeholder:"PATH",description:"Path of the worktree to adopt."},{name:"branch",type:"string",placeholder:"B",description:"Branch override (else the worktree's own)."},Vf.vendor(),Vf.title()],handler:AC}],GC=AG.map((f)=>f.name);TK=[{name:"pretty",type:"bool",description:"Pretty-print stdout JSON."},{name:"help",type:"bool",description:"Show usage for the verb and exit."}];HC={sessionExists:Hf,ensureSession:async(f)=>(await Promise.resolve().then(() => (J1(),r1))).ensureSession(f),waitForEnginePane:VX,pasteAndSubmit:KX,resolveEngineLaunchInit:async(f,J,Y)=>(await Promise.resolve().then(() => (GG(),EB))).resolveEngineLaunchInit(f,J,Y),engineCommand:N1};Mj={isTaskRunning:(f)=>Hf(Lf(f)),deliverPrompt:(f,J,Y)=>wK(f,J,Y),resolveRepoRoot:async(f)=>(await Promise.resolve().then(() => (gf(),qY))).resolveMainRepoRoot(f),defaultVendor:async()=>{let{getPersistedString:f}=await Promise.resolve().then(() => (gf(),qY)),J=f("lastSelectedVendor")?.trim();return J?J:void 0},readWorktreeChanges:async(f)=>(await Promise.resolve().then(() => (VG(),YK))).readWorktreeChanges(f),tearDownSession:async(f)=>{let J=Lf(f);await bJ(J).catch(()=>{}),await l1(J).catch(()=>{})}}});var dK={};jf(dK,{updatePlan:()=>mK,runUpdateSubcommand:()=>bC,parseUpdateArgs:()=>cK});import{spawnSync as yC}from"child_process";function mK(){return{command:"sh",args:["-c",hJ],display:hJ}}function cK(f){let J=!1;for(let Y=0;Y<f.length;Y+=1){let z=f[Y];if(z==="--help"||z==="-h"||z==="help")return{help:!0,dryRun:J};if(z==="--dry-run"){J=!0;continue}process.stderr.write(`kobe update: unknown argument "${z}"
|
|
135
136
|
|
|
136
|
-
`),
|
|
137
|
-
`))}async function
|
|
138
|
-
`),
|
|
139
|
-
`),
|
|
140
|
-
`),
|
|
141
|
-
`),process.exit(1)}function
|
|
137
|
+
`),nK(process.stderr),process.exit(2)}return{help:!1,dryRun:J}}function nK(f){f.write(["Usage: kobe update [--dry-run]","","Runs kobe's GitHub-hosted update script.","","Default command:",` ${hJ}`,"","Script URL:",` ${eX}`,"","Manual fallback:",` ${iQ()}`,"","Examples:"," kobe update"," kobe update --dry-run",""].join(`
|
|
138
|
+
`))}async function bC(f,J){let Y={spawn:J?.spawn??yC,stdout:J?.stdout??process.stdout,stderr:J?.stderr??process.stderr,exit:J?.exit??((q)=>process.exit(q))},z=cK(f);if(z.help){nK(Y.stdout);return}let G=mK();if(Y.stdout.write(`kobe ${s0} -> latest
|
|
139
|
+
`),Y.stdout.write(`running: ${G.display}
|
|
140
|
+
`),z.dryRun)return;let X=Y.spawn(G.command,G.args,{stdio:"inherit"});if(X.error)Y.stderr.write(`kobe update: failed to run ${G.command}: ${X.error.message}
|
|
141
|
+
`),Y.exit(1);Y.exit(X.status??1)}var iK=k(()=>{U1()});var rK={};jf(rK,{runThemeSubcommand:()=>cC});import{existsSync as aK,mkdirSync as SC,readFileSync as IC,readdirSync as TC,unlinkSync as uC,writeFileSync as EC}from"fs";import{basename as lK,join as Oj,resolve as xC}from"path";function eJ(f){process.stderr.write(`kobe theme: ${f}
|
|
142
|
+
`),process.exit(1)}function xY(f){process.stderr.write(`kobe theme: ${f}
|
|
142
143
|
|
|
143
|
-
`)
|
|
144
|
+
`),$K(),process.exit(2)}function wC(){let f=[];f.push("bundled:");for(let z of[...Fj].sort())f.push(` ${z} [built-in]`);let J=qG(),Y=[];try{Y=TC(J).filter((z)=>z.endsWith(".json")).sort()}catch{}if(f.push(""),f.push(`user (${J}):`),Y.length===0)f.push(" (none)");else for(let z of Y){let G=z.slice(0,-5),X=Oj(J,z),q=Fj.includes(G)?" (overrides built-in)":"";f.push(` ${G}${q} ${X}`)}process.stdout.write(`${f.join(`
|
|
144
145
|
`)}
|
|
145
|
-
`)}async function hC(
|
|
146
|
-
`,"utf8"),process.stdout.write(`installed theme "${
|
|
147
|
-
`)}function mC(
|
|
148
|
-
`)}function
|
|
149
|
-
`))}async function cC(
|
|
146
|
+
`)}async function hC(f){if(/^https?:\/\//i.test(f)){let X;try{X=await fetch(f)}catch(V){eJ(`failed to fetch ${f}: ${V instanceof Error?V.message:String(V)}`)}if(!X.ok)eJ(`failed to fetch ${f}: HTTP ${X.status} ${X.statusText}`);let q=await X.text(),Q=f.split(/[?#]/)[0]??f,H=lK(Q)||"theme.json",B=H.endsWith(".json")?H.slice(0,-5):H;return{text:q,defaultName:B}}let J=xC(process.cwd(),f),Y;try{Y=IC(J,"utf8")}catch(X){eJ(`failed to read ${J}: ${X instanceof Error?X.message:String(X)}`)}let z=lK(J),G=z.endsWith(".json")?z.slice(0,-5):z;return{text:Y,defaultName:G}}function PC(f){let J=null,Y,z=!1;for(let G=0;G<f.length;G+=1){let X=f[G];if(X==="--force"||X==="-f"){z=!0;continue}if(X==="--name"||X==="-n"){let q=f[G+1];if(q===void 0)xY("--name requires a value");Y=q,G+=1;continue}if(X.startsWith("--name=")){Y=X.slice(7);continue}if(X.startsWith("--"))xY(`unknown flag: ${X}`);if(J===null){J=X;continue}xY(`unexpected positional argument: ${X}`)}if(J===null)xY("missing <source> (URL or path to theme JSON)");return{source:J,opts:{name:Y,force:z}}}async function vC(f){let{source:J,opts:Y}=PC(f),{text:z,defaultName:G}=await hC(J),X;try{X=JSON.parse(z)}catch(V){eJ(`source is not valid JSON: ${V instanceof Error?V.message:String(V)}`)}let q=kq(X);if(!q.ok)eJ(`source is not a valid kobe theme: ${q.reason}`);let Q=Y.name??G;if(!Q||!/^[a-zA-Z0-9._-]+$/.test(Q))eJ(`invalid theme name "${Q}" (use letters, digits, '.', '_', '-')`);let H=qG();SC(H,{recursive:!0});let B=Oj(H,`${Q}.json`);if(aK(B)&&!Y.force)eJ(`${B} already exists (pass --force to overwrite)`);EC(B,`${JSON.stringify(q.theme,null,2)}
|
|
147
|
+
`,"utf8"),process.stdout.write(`installed theme "${Q}" -> ${B}
|
|
148
|
+
`)}function mC(f){let J=f[0];if(!J)xY("missing <name>");if(f.length>1)xY(`unexpected extra arguments after "${J}"`);if(Fj.includes(J))eJ(`"${J}" is a built-in theme and cannot be removed`);let Y=Oj(qG(),`${J}.json`);if(!aK(Y))eJ(`no user theme named "${J}" (looked for ${Y})`);uC(Y),process.stdout.write(`removed theme "${J}" (${Y})
|
|
149
|
+
`)}function $K(){process.stderr.write(["Usage: kobe theme <command> [args]","","Commands:"," list List bundled and user-installed themes"," add <source> [--name <name>] Install a theme from a URL or local path"," Pass --force to overwrite an existing user theme"," remove <name> Remove a user-installed theme","",`User themes live under: ${qG()}`,"Schema: https://raw.githubusercontent.com/sma1lboy/kobe/main/packages/kobe/src/tui/context/theme/theme.schema.json",""].join(`
|
|
150
|
+
`))}async function cC(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if($K(),!J)process.exit(2);return}if(J==="list"||J==="ls"){if(Y.length>0)xY(`"${J}" takes no arguments`);wC();return}if(J==="add"){await vC(Y);return}if(J==="remove"||J==="rm"){mC(Y);return}xY(`unknown action "${J}" (try "list", "add", or "remove")`)}var Fj;var pK=k(()=>{lf();Nq();vB();Fj=["claude","conductor","dracula","nord","opencode","osaka-jade","tokyonight"]});var tK={};jf(tK,{runFeedbackSubcommand:()=>dC,parseFeedbackArgs:()=>sK});import{readFileSync as _K}from"fs";function wY(f){process.stderr.write(`kobe feedback: ${f}
|
|
150
151
|
|
|
151
|
-
${
|
|
152
|
-
`),process.exit(2)}function
|
|
153
|
-
`);return}if(!
|
|
154
|
-
`)});import{homedir as iC}from"os";async function
|
|
155
|
-
`))}function lC(){let
|
|
152
|
+
${oK}
|
|
153
|
+
`),process.exit(2)}function nC(f){if(f==="-")return _K(0,"utf8");return _K(f,"utf8")}function sK(f){let J={help:!1};for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="--help"||z==="-h"||z==="help")return{...J,help:!0};if(z==="--title"){if(J.title=f[++Y],J.title===void 0)wY("--title requires a value");continue}if(z==="--body"){if(J.body=f[++Y],J.body===void 0)wY("--body requires a value");continue}if(z==="--body-file"){if(J.bodyFile=f[++Y],J.bodyFile===void 0)wY("--body-file requires a value");continue}if(z==="--category"){if(J.category=f[++Y],J.category===void 0)wY("--category requires a value");continue}wY(`unexpected argument "${z}"`)}return J}async function dC(f){let J=sK(f);if(J.help){process.stdout.write(`${oK}
|
|
154
|
+
`);return}if(!J.title)wY("--title is required");if(J.body&&J.bodyFile)wY("pass either --body or --body-file, not both");let Y=J.bodyFile?nC(J.bodyFile):J.body;if(!Y)wY("--body or --body-file is required");let z=MG({title:J.title,body:Y,categorySlug:J.category});console.log(`created Discussion #${z.number}: ${z.url}`)}var oK;var eK=k(()=>{eq();oK=["Usage: kobe feedback --title <text> (--body <text> | --body-file <path>) [--category <slug>]","","Create a GitHub Discussion in the kobe repository using the GitHub CLI.","","Requires:"," gh auth login","","Options:"," --title <text> Discussion title"," --body <text> Discussion body"," --body-file <path> Read the Discussion body from a file; use - for stdin"," --category <slug> Discussion category slug (default: feedback)"," -h, --help Print this help",""].join(`
|
|
155
|
+
`)});import{homedir as iC}from"os";async function fU(f={}){let J=f.homeDir??process.env.KOBE_HOME_DIR??iC(),Y=new xz({homeDir:J});await Y.load();let z=new ZZ,G=new OZ({store:Y,worktrees:z});return{homeDir:J,orchestrator:G,store:Y,worktrees:z,async close(){G.dispose()}}}var JU=k(()=>{lG();vG();qH()});var zU={};jf(zU,{runDaemonSubcommand:()=>aC});function YU(f){f.write(["Usage: kobe daemon <command>","","Commands:"," status Print the running daemon's status JSON (default)"," start Run the daemon in the foreground (this process becomes it)"," stop Ask the running daemon to shut down"," restart Stop the daemon (graceful \u2192 SIGTERM \u2192 SIGKILL) and respawn it",""].join(`
|
|
156
|
+
`))}function lC(){let f=process.env.KOBE_DAEMON_WEB_PORT?.trim();if(f==="0"||f==="off"||f==="false")return;let J=f?Number.parseInt(f,10):5174;return Number.isFinite(J)&&J>0?J:5174}async function aC(f){let[J="status"]=f,Y=CJ(),z=nJ();if(J==="--help"||J==="-h"||J==="help"){YU(process.stdout);return}if(J==="status"){let Q=new d1(Y);try{let H=await Q.request("daemon.status");console.log(JSON.stringify(H,null,2))}catch{let H=await KG(z);if(H)console.log(`kobe daemon: no daemon socket at ${Y} (stale pidfile pid=${H})`);else console.log(`kobe daemon: no daemon running at ${Y}`);process.exitCode=1}finally{Q.close()}return}if(J==="stop"){let Q=new d1(Y);try{await Q.request("daemon.stop"),console.log("kobe daemon: stop requested")}catch{console.log(`kobe daemon: no daemon running at ${Y}`)}finally{Q.close()}return}if(J==="restart"){await UG(Y,z),(await UJ()).close(),console.log(`kobe daemon: restarted, listening on ${Y}`);return}if(J!=="start")process.stderr.write(`kobe daemon: unknown command "${J}"
|
|
156
157
|
|
|
157
|
-
`),
|
|
158
|
+
`),YU(process.stderr),process.exit(2);vV();let G=await fU(),X=await BK(G.orchestrator,{socketPath:Y,pidPath:z,homeDir:G.homeDir,webPort:lC(),webHost:process.env.KOBE_WEB_HOST,webStaticDir:process.env.KOBE_DAEMON_WEB_STATIC_DIR,onStop:async()=>{await G.close()}});if(console.log(`kobe daemon: listening on ${X.socketPath}`),X.webPort)console.log(`kobe daemon: web transport listening on http://127.0.0.1:${X.webPort}`);let q=async()=>{await X.close(),await G.close(),process.exit(0)};process.once("SIGINT",()=>void q()),process.once("SIGTERM",()=>void q())}var GU=k(()=>{$G();y1();oq();mz();_q();JU()});import{existsSync as $C,readFileSync as rC}from"fs";import{homedir as pC}from"os";import{join as XU}from"path";function Rj(f={}){return["skills","add",_C,"--skill","kobe","--agent",f.agent??YQ]}function zQ(f={}){return`npx ${Rj(f).join(" ")}`}function Cj(f={}){let J=f.home??pC(),Y=f.cwd??process.cwd();return[XU(J,ZU),XU(Y,ZU)]}function oC(f){let J=f.match(/kobe-skill-version:\s*(\d+)/);return J?Number.parseInt(J[1],10):null}function CX(f){let J=Cj(f).find((G)=>$C(G));if(!J)return{installed:!1,installedVersion:null,currentVersion:Aj,stale:!1};let Y=null;try{Y=oC(rC(J,"utf8"))}catch{Y=null}let z=Y===null||Y<Aj;return{installed:!0,installedVersion:Y,currentVersion:Aj,stale:z}}function qU(){let f=CX();if(!f.installed){if(kf(gj)==="1")return;af(gj,"1"),process.stderr.write(`
|
|
158
159
|
kobe: the kobe agent skill isn't installed \u2014 install it so your coding agent can drive kobe via \`kobe api\`:
|
|
159
|
-
${
|
|
160
|
-
(wraps \`${
|
|
160
|
+
${RX}
|
|
161
|
+
(wraps \`${zQ()}\`; check anytime with \`kobe doctor\`)
|
|
161
162
|
|
|
162
|
-
`);return}if(
|
|
163
|
-
kobe: your kobe agent skill is out of date (${
|
|
164
|
-
${
|
|
163
|
+
`);return}if(f.stale){let J=`${gj}:v${f.currentVersion}`;if(kf(J)==="1")return;af(J,"1");let Y=f.installedVersion===null?"an older":`v${f.installedVersion}`;process.stderr.write(`
|
|
164
|
+
kobe: your kobe agent skill is out of date (${Y}; this kobe wants v${f.currentVersion}) \u2014 refresh it so \`kobe api\` guidance matches:
|
|
165
|
+
${RX}
|
|
165
166
|
|
|
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
|
|
167
|
+
`)}}var Aj=2,ZU=".claude/skills/kobe/SKILL.md",RX="kobe skill install",_C="Sma1lboy/kobe",YQ="claude-code",gj="skillHintSeen";var GQ=k(()=>{gf()});var XQ={};jf(XQ,{runResetSubcommand:()=>Hk,runReloadSubcommand:()=>Bk,runDoctorSubcommand:()=>qk});import{existsSync as sC,readFileSync as BU,statSync as tC}from"fs";import{unlink as eC}from"fs/promises";import{join as jU}from"path";import{createInterface as fk}from"readline";function Jk(f){try{return process.kill(f,0),!0}catch(J){return J.code==="EPERM"}}async function Yk(f){let J=new d1(f);try{return await J.request("daemon.status")}catch{return null}finally{J.close()}}function zk(f){let J=Math.floor(f/1000);if(J<60)return`${J}s`;let Y=Math.floor(J/60);if(Y<60)return`${Y}m ${J%60}s`;return`${Math.floor(Y/60)}h ${Y%60}m`}function Gk(f){if(f<1024)return`${f} B`;if(f<1048576)return`${(f/1024).toFixed(1)} KB`;return`${(f/1048576).toFixed(1)} MB`}function kj(f){try{let J=tC(f);return`present (${Gk(J.size)}, modified ${J.mtime.toISOString()})`}catch{return"absent"}}function WU(f){try{let J=JSON.parse(BU(f,"utf8"));return Array.isArray(J.tasks)?J.tasks.length:null}catch{return null}}function Xk(f,J){try{return BU(f,"utf8").split(`
|
|
168
|
+
`).filter((z)=>z.trim().length>0).slice(-J).join(`
|
|
169
|
+
`)}catch{return""}}async function Nj(f){let J=Bun.spawn(Hz(...f),{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),[Y,z]=await Promise.all([new Response(J.stdout).text().catch(()=>""),J.exited]);return{code:z,stdout:Y}}async function Zk(){if(!await NJ())return 0;let{code:f,stdout:J}=await Nj(["list-sessions","-F","#{session_name}"]);if(f!==0)return 0;return J.split(`
|
|
170
|
+
`).filter((Y)=>Y.trim().length>0).length}async function qk(f=[]){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(["Usage: kobe doctor","","Read-only diagnosis of the daemon / tmux / state. Takes no options.",""].join(`
|
|
171
|
+
`));return}let J=f.find((j)=>j.length>0);if(J!==void 0)process.stderr.write([`kobe doctor: unexpected argument "${J}"`,"","Usage: kobe doctor (read-only; takes no options)",""].join(`
|
|
172
|
+
`)),process.exit(2);let Y=CJ(),z=nJ(),G=RZ(),X=jU(ef(),"tasks.json"),q=m1(),Q=["kobe doctor",` home: ${OJ()}`,` socket: ${Y}`,""],H=await Yk(Y);if(H){let j=typeof H.daemonPid==="number"?H.daemonPid:"?",U=typeof H.uptimeMs==="number"?zk(H.uptimeMs):"?",L=typeof H.taskCount==="number"?H.taskCount:"?",O=typeof H.attachedClients==="number"?H.attachedClients:"?";Q.push(`daemon: \u2713 running (pid ${j}, up ${U}, ${L} task(s), ${O} client(s))`);let M=typeof H.kobeVersion==="string"?H.kobeVersion:void 0;if(M&&M!==s0)Q.push(` \u26A0 stale build: daemon is v${M}, you launched v${s0}`),Q.push(" \u2192 run `kobe daemon restart`, then `kobe reload` in any open kobe sessions");else if(M)Q.push(` build: v${M}`)}else{let j=await KG(z);if(j&&Jk(j))Q.push(`daemon: \u2717 WEDGED \u2014 process alive (pid ${j}) but not accepting connections`),Q.push(" \u2192 run `kobe reset` to kill it, then relaunch kobe");else if(j)Q.push(`daemon: \u2717 not running (stale pidfile \u2192 pid ${j} is gone)`),Q.push(" \u2192 harmless; relaunch kobe, or `kobe reset` to clear the stale pidfile");else Q.push("daemon: \u2717 not running (no pidfile)");if(sC(Y))Q.push(` orphan socket file present: ${Y}`);let U=Xk(G,8);if(U){Q.push(" last lines of daemon.log:");for(let L of U.split(`
|
|
173
|
+
`))Q.push(` \u2502 ${L}`)}}if(Q.push(""),await NJ())Q.push(`tmux: ${await Zk()} kobe session(s) on \`${QJ}\` socket`);else Q.push("tmux: \u2717 not found on PATH (task sessions need tmux)");Q.push("");let B=CX();if(!B.installed)Q.push("skill: \u2717 kobe agent skill not installed (optional \u2014 lets a coding agent drive `kobe api`)"),Q.push(` \u2192 ${RX}`);else if(B.stale){let j=B.installedVersion===null?"unstamped":`v${B.installedVersion}`;Q.push(`skill: \u26A0 kobe agent skill out of date (${j}; this kobe wants v${B.currentVersion})`),Q.push(` \u2192 ${RX}`)}else Q.push(`skill: \u2713 kobe agent skill installed (v${B.installedVersion})`);Q.push("");let V=WU(X);Q.push(`tasks.json: ${kj(X)}${V===null?"":` \u2014 ${V} task(s)`}`),Q.push(`state.json: ${kj(q)}`),Q.push(`daemon.log: ${kj(G)}`),console.log(Q.join(`
|
|
174
|
+
`))}async function Qk(f){let J=fk({input:process.stdin,output:process.stdout});try{let Y=await new Promise((z)=>J.question(f,z));return/^y(es)?$/i.test(Y.trim())}finally{J.close()}}async function QU(f,J){try{await eC(f),console.log(` removed ${J} (${f})`)}catch(Y){if(Y.code==="ENOENT")console.log(` ${J}: already absent`);else console.error(` failed to remove ${J} (${f}): ${Y instanceof Error?Y.message:String(Y)}`)}}function HU(f){f.write(["Usage: kobe reset [--hard] [--yes]","","Recover a wedged install: stop the daemon (graceful \u2192 SIGTERM \u2192 SIGKILL),","remove its socket + pidfile, and kill all kobe tmux sessions.","Never touches your git worktrees.","","Options:"," --hard Also wipe the task index + UI state"," -y, --yes Skip the interactive confirmation"," -h, --help Print this help",""].join(`
|
|
175
|
+
`))}async function Hk(f){if(f.includes("--help")||f.includes("-h")||f.includes("help")){HU(process.stdout);return}let J=new Set(["--hard","--yes","-y"]),Y=f.find((j)=>!J.has(j));if(Y!==void 0)process.stderr.write(`kobe reset: unknown argument "${Y}"
|
|
175
176
|
|
|
176
|
-
`),
|
|
177
|
-
re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await
|
|
177
|
+
`),HU(process.stderr),process.exit(2);let z=f.includes("--hard"),G=f.includes("--yes")||f.includes("-y"),X=CJ(),q=nJ(),Q=jU(ef(),"tasks.json"),H=m1();if(console.log("kobe reset will:"),console.log(" \u2022 stop the kobe daemon (graceful \u2192 SIGTERM \u2192 SIGKILL)"),console.log(` \u2022 remove its socket + pidfile (${X})`),console.log(` \u2022 kill all kobe tmux sessions on the \`${QJ}\` socket`),z){let j=WU(Q);console.log(` \u2022 DELETE the task index${j===null?"":` (${j} task(s))`} \u2014 ${Q}`),console.log(` \u2022 DELETE the UI state \u2014 ${H}`)}if(console.log(" \u2022 NOT touch your git worktrees under ~/.kobe/worktrees/ or legacy repo-local roots"),!z)console.log(" (your task list & worktrees are kept \u2014 add --hard to also wipe the task index + UI state)");if(!G){if(!process.stdin.isTTY){console.log(`
|
|
178
|
+
re-run with --yes to proceed (no interactive terminal for a y/N prompt)`);return}if(!await Qk(z?`
|
|
178
179
|
Stop daemon, kill sessions AND wipe task index? [y/N] `:`
|
|
179
|
-
Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:
|
|
180
|
-
kobe: reset complete. Relaunch kobe to start fresh.`)}async function
|
|
181
|
-
`));return}let
|
|
180
|
+
Stop daemon and kill kobe sessions? [y/N] `)){console.log("aborted \u2014 nothing changed");return}}console.log("");let{pid:B,method:V}=await UG(X,q);if(console.log(V==="absent"?" daemon: was not running (cleared any stale socket/pidfile)":` daemon: stopped via ${V}${B?` (pid ${B})`:""}`),await NJ()){let{code:j}=await Nj(["kill-server"]);console.log(j===0?` tmux: killed all sessions on \`${QJ}\``:` tmux: no sessions on \`${QJ}\``)}else console.log(" tmux: not installed \u2014 no sessions to kill");if(z)await QU(Q,"task index"),await QU(H,"UI state");console.log(`
|
|
181
|
+
kobe: reset complete. Relaunch kobe to start fresh.`)}async function Bk(f=[]){if(f.includes("--help")||f.includes("-h")||f.includes("help")){process.stdout.write(["Usage: kobe reload","","Restart kobe's Tasks + Ops panes in every live session, in place.","Picks up new kobe code without `kobe reset` \u2014 the engine (claude)","panes and your running turns are never touched. Takes no options.",""].join(`
|
|
182
|
+
`));return}let J=f.find((Q)=>Q.length>0);if(J!==void 0)process.stderr.write(`kobe reload: unexpected argument "${J}"
|
|
182
183
|
|
|
183
184
|
Usage: kobe reload (takes no options)
|
|
184
|
-
`),process.exit(2);if(!await
|
|
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
|
|
185
|
+
`),process.exit(2);if(!await NJ()){console.log("kobe reload: tmux is not installed \u2014 no panes to reload");return}let{code:Y,stdout:z}=await Nj(["list-sessions","-F","#{session_name}"]);if(Y!==0){console.log(`kobe reload: no kobe tmux sessions on the \`${QJ}\` socket`);return}let G=z.split(`
|
|
186
|
+
`).map((Q)=>Q.trim()).filter((Q)=>Q.length>0);if(G.length===0){console.log(`kobe reload: no kobe tmux sessions on the \`${QJ}\` socket`);return}let{refreshKobeWorkspacePanes:X}=await Promise.resolve().then(() => (J1(),r1)),q=0;for(let Q of G)try{await X(Q),q++}catch(H){console.error(` failed to reload session "${Q}": ${H instanceof Error?H.message:String(H)}`)}console.log(`kobe: reloaded Tasks/Ops panes in ${q}/${G.length} session(s) \u2014 engine panes untouched`)}var ZQ=k(()=>{$G();oq();mz();_q();lf();GQ();Tf();U1()});var FU={};jf(FU,{runWebSubcommand:()=>Mk});import{existsSync as UU}from"fs";import{homedir as jk}from"os";import{resolve as qQ}from"path";import{fileURLToPath as DU}from"url";function VU(){let f=process.env.KOBE_HOME_DIR?.trim();return f?`sandbox: ${f}`:`${jk()}/.kobe (production)`}function Vk(){let f=DU(import.meta.url),J=[qQ(f,"../../../../kobe-web/dist"),qQ(f,"../../web-ui")];for(let Y of J)if(UU(`${Y}/index.html`))return Y;return}function Kk(){let f=DU(import.meta.url),J=[qQ(f,"../../../../kobe-web/pty-server.mjs"),qQ(f,"../../web-ui/pty-server.mjs")];for(let Y of J)if(UU(Y))return Y;return}async function KU(f){try{let J=Bun.spawn(["lsof","-nP",`-iTCP:${f}`,"-sTCP:LISTEN","-t"],{stdout:"pipe",stderr:"ignore"});return(await new Response(J.stdout).text()).split(`
|
|
187
|
+
`).map((z)=>Number.parseInt(z.trim(),10)).filter((z)=>Number.isFinite(z)&&z!==process.pid)}catch{return[]}}async function Uk(f){let J;try{J=(await(await fetch(`http://localhost:${f}${MU}`,{signal:AbortSignal.timeout(800)})).text()).trim()}catch{return}if(J!==LU)throw Error(`PTY port ${f} is in use by a non-kobe service; refusing to replace it`);let Y=await KU(f);for(let G of Y)try{process.kill(G,"SIGTERM")}catch{}let z=Date.now()+2000;while(Date.now()<z){if((await KU(f)).length===0)return;await new Promise((G)=>setTimeout(G,100))}}async function Dk(f){let J=Kk();if(!J)return null;let Y=f.webPort+2;if(f.takeover)await Uk(Y);return Bun.spawn(["node",J],{stdin:"ignore",stdout:"inherit",stderr:"inherit",env:{...process.env,KOBE_DAEMON_WEB_PORT:String(f.webPort),KOBE_PTY_PORT:String(Y)}})}async function Lk(f,J){if(process.env.KOBE_DAEMON_WEB_PORT=String(f),J)process.env.KOBE_DAEMON_WEB_STATIC_DIR=J;await DG();let Y;try{Y=(await(await fetch(`http://127.0.0.1:${f}${MU}`,{signal:AbortSignal.timeout(1500)})).text()).trim()}catch(z){throw Error(`daemon web transport is not reachable on :${f}; run \`kobe daemon restart\` so the daemon picks up this build (${z instanceof Error?z.message:String(z)})`)}if(Y!==LU)throw Error(`unexpected daemon web health marker on :${f}: ${Y}`);if(J){if(!(await fetch(`http://127.0.0.1:${f}/`,{signal:AbortSignal.timeout(1500)})).ok)throw Error(`daemon web transport is up on :${f} but is not serving web assets; run \`kobe daemon restart\` so it picks up ${J}`)}}async function Mk(f){if(f.includes("--help")||f.includes("-h")){process.stdout.write(Wk);return}let J=5174,Y=f.indexOf("--port");if(Y!==-1){let z=Number.parseInt(f[Y+1]??"",10);if(!Number.isFinite(z))process.stderr.write(`kobe web: --port needs a number
|
|
188
|
+
`),process.exit(2);J=z}try{let z=f.includes("--routes-only")||f.includes("--bridge-only"),G=!f.includes("--no-takeover"),X=z?void 0:Vk();if(!z&&!X)throw Error("web assets are missing from this kobe build; run `bun run build` in packages/kobe, or `bun run dev` in packages/kobe-web from a source checkout");await Lk(J,X);let q=null,Q=!1,H=()=>{if(Q)return;Q=!0,q?.kill(),q=null};if(z)process.stdout.write(`kobe daemon web transport listening on http://localhost:${J} (routes only)
|
|
189
|
+
`),process.stdout.write(` home: ${VU()}
|
|
190
|
+
`);else if(q=await Dk({webPort:J,takeover:G}),process.stdout.write(`kobe web \u2192 http://localhost:${J}
|
|
191
|
+
`),process.stdout.write(` home: ${VU()}
|
|
192
|
+
`),!q)process.stderr.write(`kobe web: PTY server not found; terminal tabs will be unavailable
|
|
193
|
+
`);process.on("SIGINT",()=>{H(),process.exit(0)}),process.on("SIGTERM",()=>{H(),process.exit(0)}),q?.exited.then(()=>{if(!Q)process.stderr.write(`kobe web: PTY server exited
|
|
194
|
+
`),H(),process.exit(1)}),await new Promise(()=>{})}catch(z){process.stderr.write(`kobe web: ${z instanceof Error?z.message:String(z)}
|
|
195
|
+
`),process.exit(1)}}var LU="kobe-web",MU="/__kobe_web",Wk=`Usage: kobe web [options]
|
|
195
196
|
|
|
196
197
|
Launch the kobe web UI through daemon web transport on http://localhost:<port>.
|
|
197
198
|
|
|
@@ -200,45 +201,45 @@ Options:
|
|
|
200
201
|
--routes-only Routes only; Vite serves the SPA separately.
|
|
201
202
|
--no-takeover Reserved for compatibility; daemon owns the web port.
|
|
202
203
|
-h, --help Show this help.
|
|
203
|
-
`;var
|
|
204
|
-
`)}function
|
|
205
|
-
`),process.exit(2);
|
|
204
|
+
`;var OU=k(()=>{y1()});var gU={};jf(gU,{runSkillSubcommand:()=>Ok});function yj(){return["usage: kobe skill <verb>","","verbs:"," install [--agent NAME] Install the kobe agent skill (wraps `npx skills add`)"," status Show whether the skill is installed"," command [--agent NAME] Print the underlying npx command without running it","",`The skill teaches a coding agent how to drive \`kobe api\`. Default agent: ${YQ}.`].join(`
|
|
205
|
+
`)}function AU(f){let J=YQ;for(let Y=0;Y<f.length;Y++){let z=f[Y];if(z==="--agent"){let G=f[Y+1];if(!G||G.startsWith("--"))process.stderr.write(`kobe skill: --agent requires a value
|
|
206
|
+
`),process.exit(2);J=G,Y++}else if(z.startsWith("--agent="))J=z.slice(8);else process.stderr.write(`kobe skill: unknown flag "${z}"
|
|
206
207
|
|
|
207
|
-
${
|
|
208
|
-
`),process.exit(2)}return
|
|
209
|
-
`),!
|
|
208
|
+
${yj()}
|
|
209
|
+
`),process.exit(2)}return J}async function Ok(f){let[J,...Y]=f;if(!J||J==="--help"||J==="-h"||J==="help"){if(process.stdout.write(`${yj()}
|
|
210
|
+
`),!J)process.exitCode=2;return}if(!Fk.includes(J))process.stderr.write(`kobe skill: unknown verb "${J}"
|
|
210
211
|
|
|
211
|
-
${
|
|
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,`
|
|
212
|
+
${yj()}
|
|
213
|
+
`),process.exit(2);if(J==="status"){let Q=CX(),[H,B]=Cj(),V=!Q.installed?"\u2717 not installed":Q.stale?`\u26A0 out of date (installed ${Q.installedVersion===null?"unstamped":`v${Q.installedVersion}`}, this kobe wants v${Q.currentVersion})`:`\u2713 installed (v${Q.installedVersion})`;process.stdout.write([`kobe skill: ${V}`,` looked in: ${H}`,` ${B}`,Q.installed&&!Q.stale?"":" \u2192 run `kobe skill install` to install / refresh",""].join(`
|
|
214
|
+
`));return}if(J==="command"){process.stdout.write(`${zQ({agent:AU(Y)})}
|
|
215
|
+
`);return}let z=AU(Y),G=Rj({agent:z});process.stdout.write(`kobe skill: running \`npx ${G.join(" ")}\`
|
|
216
|
+
`);let q=await Bun.spawn(["npx",...G],{stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(q!==0)process.stderr.write(`
|
|
217
|
+
kobe skill install failed (npx exited ${q}). Is \`npx\` on PATH and are you online?
|
|
218
|
+
You can run it yourself: ${zQ({agent:z})}
|
|
219
|
+
`),process.exit(q||1);process.stdout.write(`kobe skill: installed.
|
|
220
|
+
`)}var Fk;var RU=k(()=>{GQ();Fk=["install","status","command"]});var Sj={};jf(Sj,{runHookSubcommand:()=>bk,readTextWithTimeout:()=>yU,parseWorktreeAddPath:()=>SU,ensureGlobalKobeHooks:()=>Tk});import{homedir as Ak}from"os";import{join as kU,resolve as NU}from"path";async function yU(f,J=gk){let Y;try{return await Promise.race([f(),new Promise((z)=>{Y=setTimeout(()=>z(""),J)})])}finally{if(Y!==void 0)clearTimeout(Y)}}async function bU(){try{let f=await yU(()=>Bun.stdin.text());if(!f.trim())return{};let J=JSON.parse(f);return J&&typeof J==="object"&&!Array.isArray(J)?J:{}}catch{return{}}}function Rk(f,J){for(let Y=0;Y<f.length;Y++){if(f[Y]===J)return f[Y+1];if(f[Y].startsWith(`${J}=`))return f[Y].slice(J.length+1)}return}function kk(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}function Nk(f){let J=[],Y=/"([^"]*)"|'([^']*)'|(\S+)/g,z;while((z=Y.exec(f))!==null)J.push(z[1]??z[2]??z[3]??"");return J}function SU(f){let J=Nk(f),Y=new Set(["-b","-B","--reason"]);for(let z=0;z+1<J.length;z++){if(J[z]!=="worktree"||J[z+1]!=="add")continue;let G=z+2;while(G<J.length){let X=J[G];if(X==="&&"||X==="||"||X===";"||X==="|"||X===">"||X===">>")break;if(X.startsWith("-")){G+=Y.has(X)?2:1;continue}return X}}return}async function yk(){let f=await bU(),J=kk(f.tool_input)?f.tool_input:{},Y=typeof J.command==="string"?J.command:"";if(!Y.includes("worktree"))return;let z=SU(Y);if(!z)return;let G=typeof f.cwd==="string"&&f.cwd?f.cwd:process.cwd(),X=NU(G,z),q=await p1();if(!q)return;try{await q.request("worktree.reconcile",{cwd:G,worktreePath:X})}finally{q.close()}}async function bk(f){let[J,...Y]=f;if(J==="setup"){await uk(Y);return}if(J===Ck){try{await yk()}catch{}return}try{if(!J||!kZ(J))return;let z=await bU(),G=Rk(Y,"--task-id"),X=typeof z.cwd==="string"&&z.cwd?z.cwd:process.cwd(),q;for(let H of IU())if(q=H.activityDetailFromPayload(J,z),q)break;let Q=await p1();if(!Q)return;try{await Q.request("engine.reportEvent",{...G?{taskId:G}:{cwd:X},kind:J,...q?{detail:q}:{}})}finally{Q.close()}}catch{}}function Sk(){return cf.map((f)=>$H(f)).filter((f)=>f.supportsWorktreeSync())}function IU(){return cf.map((f)=>$H(f)).filter((f)=>f.supportsHooks())}function bj(){return kU(Ak(),".claude","settings.json")}function Ik(f){if(!f||f==="off")return;if(f==="global")return bj();if(f.startsWith("repo:"))return kU(NU(f.slice(5)),".claude","settings.json");return f}async function Tk(){try{let f=bj();for(let J of IU())await J.installActivityHooks(f),await J.installWorktreeWatchHook(f);await TU()}catch{}}async function TU(){let f=Sk();if(f.length===0)return;let J=kf(CU),Y=new Set([bj()]),z=Ik(J);if(z)Y.add(z);for(let G of f)for(let X of Y)await G.removeWorktreeSyncHook(X);if(J!=="off")af(CU,"off")}async function uk(f){await TU(),process.stdout.write(["kobe hook setup is deprecated and now a no-op (cleanup only).","","The old external-worktree sync used a global WorktreeCreate hook, which is","a VCS provider hook \u2014 its presence broke `claude --worktree` / EnterWorktree","in every repo. Any hook kobe previously installed has been removed.","","Sync is now automatic: a `claude --worktree` (or any session) started in a","worktree under a repo kobe already tracks is adopted as a task on launch.","To adopt existing worktrees on demand, use the New Task dialog or `kobe adopt`.",""].join(`
|
|
221
|
+
`))}var gk=500,Ck="worktree-created",CU="externalWorktreeSync";var Ij=k(()=>{y1();rH();NZ();gf();K1()});function EU(f){var J;if(f>=55296&&f<=57343||f>1114111)return 65533;return(J=Ek.get(f))!==null&&J!==void 0?J:f}var Tj,Ek,uU;var xU=k(()=>{Ek=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),uU=(Tj=String.fromCodePoint)!==null&&Tj!==void 0?Tj:(f)=>{let J="";if(f>65535)f-=65536,J+=String.fromCharCode(f>>>10&1023|55296),f=56320|f&1023;return J+=String.fromCharCode(f),J}});function wU(f){let J=typeof atob==="function"?atob(f):typeof Buffer.from==="function"?Buffer.from(f,"base64").toString("binary"):new Buffer(f,"base64").toString("binary"),Y=J.length&-2,z=new Uint16Array(Y/2);for(let G=0,X=0;G<Y;G+=2){let q=J.charCodeAt(G),Q=J.charCodeAt(G+1);z[X++]=q|Q<<8}return z}var hU;var PU=k(()=>{hU=wU("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+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 B1;var vU=k(()=>{(function(f){f[f.VALUE_LENGTH=49152]="VALUE_LENGTH",f[f.FLAG13=8192]="FLAG13",f[f.BRANCH_LENGTH=8064]="BRANCH_LENGTH",f[f.JUMP_TABLE=127]="JUMP_TABLE"})(B1||(B1={}))});function uj(f){return f>=Ef.ZERO&&f<=Ef.NINE}function xk(f){return f>=Ef.UPPER_A&&f<=Ef.UPPER_F||f>=Ef.LOWER_A&&f<=Ef.LOWER_F}function wk(f){return f>=Ef.UPPER_A&&f<=Ef.UPPER_Z||f>=Ef.LOWER_A&&f<=Ef.LOWER_Z||uj(f)}function hk(f){return f===Ef.EQUALS||wk(f)}class Ej{constructor(f,J,Y){this.decodeTree=f,this.emitCodePoint=J,this.errors=Y,this.state=of.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=fY.Strict,this.runConsumed=0}startEntity(f){this.decodeMode=f,this.state=of.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(f,J){switch(this.state){case of.EntityStart:{if(f.charCodeAt(J)===Ef.NUM)return this.state=of.NumericStart,this.consumed+=1,this.stateNumericStart(f,J+1);return this.state=of.NamedEntity,this.stateNamedEntity(f,J)}case of.NumericStart:return this.stateNumericStart(f,J);case of.NumericDecimal:return this.stateNumericDecimal(f,J);case of.NumericHex:return this.stateNumericHex(f,J);case of.NamedEntity:return this.stateNamedEntity(f,J)}}stateNumericStart(f,J){if(J>=f.length)return-1;if((f.charCodeAt(J)|mU)===Ef.LOWER_X)return this.state=of.NumericHex,this.consumed+=1,this.stateNumericHex(f,J+1);return this.state=of.NumericDecimal,this.stateNumericDecimal(f,J)}stateNumericHex(f,J){while(J<f.length){let Y=f.charCodeAt(J);if(uj(Y)||xk(Y)){let z=Y<=Ef.NINE?Y-Ef.ZERO:(Y|mU)-Ef.LOWER_A+10;this.result=this.result*16+z,this.consumed++,J++}else return this.emitNumericEntity(Y,3)}return-1}stateNumericDecimal(f,J){while(J<f.length){let Y=f.charCodeAt(J);if(uj(Y))this.result=this.result*10+(Y-Ef.ZERO),this.consumed++,J++;else return this.emitNumericEntity(Y,2)}return-1}emitNumericEntity(f,J){var Y;if(this.consumed<=J)return(Y=this.errors)===null||Y===void 0||Y.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(f===Ef.SEMI)this.consumed+=1;else if(this.decodeMode===fY.Strict)return 0;if(this.emitCodePoint(EU(this.result),this.consumed),this.errors){if(f!==Ef.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(f,J){let{decodeTree:Y}=this,z=Y[this.treeIndex],G=(z&B1.VALUE_LENGTH)>>14;while(J<f.length){if(G===0&&(z&B1.FLAG13)!==0){let q=(z&B1.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let Q=z&B1.JUMP_TABLE;if(f.charCodeAt(J)!==Q)return this.result===0?0:this.emitNotTerminatedNamedEntity();J++,this.excess++,this.runConsumed++}while(this.runConsumed<q){if(J>=f.length)return-1;let Q=this.runConsumed-1,H=Y[this.treeIndex+1+(Q>>1)],B=Q%2===0?H&255:H>>8&255;if(f.charCodeAt(J)!==B)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();J++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(q>>1),z=Y[this.treeIndex],G=(z&B1.VALUE_LENGTH)>>14}if(J>=f.length)break;let X=f.charCodeAt(J);if(X===Ef.SEMI&&G!==0&&(z&B1.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.treeIndex=vk(Y,z,this.treeIndex+Math.max(1,G),X),this.treeIndex<0)return this.result===0||this.decodeMode===fY.Attribute&&(G===0||hk(X))?0:this.emitNotTerminatedNamedEntity();if(z=Y[this.treeIndex],G=(z&B1.VALUE_LENGTH)>>14,G!==0){if(X===Ef.SEMI)return this.emitNamedEntityData(this.treeIndex,G,this.consumed+this.excess);if(this.decodeMode!==fY.Strict&&(z&B1.FLAG13)===0)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}J++,this.excess++}return-1}emitNotTerminatedNamedEntity(){var f;let{result:J,decodeTree:Y}=this,z=(Y[J]&B1.VALUE_LENGTH)>>14;return this.emitNamedEntityData(J,z,this.consumed),(f=this.errors)===null||f===void 0||f.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(f,J,Y){let{decodeTree:z}=this;if(this.emitCodePoint(J===1?z[f]&~(B1.VALUE_LENGTH|B1.FLAG13):z[f+1],Y),J===3)this.emitCodePoint(z[f+2],Y);return Y}end(){var f;switch(this.state){case of.NamedEntity:return this.result!==0&&(this.decodeMode!==fY.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case of.NumericDecimal:return this.emitNumericEntity(0,2);case of.NumericHex:return this.emitNumericEntity(0,3);case of.NumericStart:return(f=this.errors)===null||f===void 0||f.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case of.EntityStart:return 0}}}function Pk(f){let J="",Y=new Ej(f,(z)=>J+=uU(z));return function(G,X){let q=0,Q=0;while((Q=G.indexOf("&",Q))>=0){J+=G.slice(q,Q),Y.startEntity(X);let B=Y.write(G,Q+1);if(B<0){q=Q+Y.end();break}q=Q+B,Q=B===0?q+1:q}let H=J+G.slice(q);return J="",H}}function vk(f,J,Y,z){let G=(J&B1.BRANCH_LENGTH)>>7,X=J&B1.JUMP_TABLE;if(G===0)return X!==0&&z===X?Y:-1;if(X){let B=z-X;return B<0||B>=G?-1:f[Y+B]-1}let q=G+1>>1,Q=0,H=G-1;while(Q<=H){let B=Q+H>>>1,V=B>>1,U=f[Y+V]>>(B&1)*8&255;if(U<z)Q=B+1;else if(U>z)H=B-1;else return f[Y+q+B]}return-1}function Cz(f,J=fY.Legacy){return mk(f,J)}var Ef,mU=32,of,fY,mk;var cU=k(()=>{xU();PU();vU();(function(f){f[f.NUM=35]="NUM",f[f.SEMI=59]="SEMI",f[f.EQUALS=61]="EQUALS",f[f.ZERO=48]="ZERO",f[f.NINE=57]="NINE",f[f.LOWER_A=97]="LOWER_A",f[f.LOWER_F=102]="LOWER_F",f[f.LOWER_X=120]="LOWER_X",f[f.LOWER_Z=122]="LOWER_Z",f[f.UPPER_A=65]="UPPER_A",f[f.UPPER_F=70]="UPPER_F",f[f.UPPER_Z=90]="UPPER_Z"})(Ef||(Ef={}));(function(f){f[f.EntityStart=0]="EntityStart",f[f.NumericStart=1]="NumericStart",f[f.NumericDecimal=2]="NumericDecimal",f[f.NumericHex=3]="NumericHex",f[f.NamedEntity=4]="NamedEntity"})(of||(of={}));(function(f){f[f.Legacy=0]="Legacy",f[f.Strict=1]="Strict",f[f.Attribute=2]="Attribute"})(fY||(fY={}));mk=Pk(hU)});var nU,dU;var lU=k(()=>{cU();(function(f){f[f.XML=0]="XML",f[f.HTML=1]="HTML"})(nU||(nU={}));(function(f){f[f.UTF8=0]="UTF8",f[f.ASCII=1]="ASCII",f[f.Extensive=2]="Extensive",f[f.Attribute=3]="Attribute",f[f.Text=4]="Text"})(dU||(dU={}))});import{CliRenderer as nk,createCliRenderer as dk,engine as ik}from"@opentui/core";import{createTestRenderer as Pm}from"@opentui/core/testing";import{ASCIIFontRenderable as lk,BoxRenderable as ak,CodeRenderable as $k,DiffRenderable as rk,InputRenderable as pk,LineNumberRenderable as _k,MarkdownRenderable as ok,ScrollBoxRenderable as sk,SelectRenderable as tk,TabSelectRenderable as ek,TextareaRenderable as fN,TextAttributes as xj,TextNodeRenderable as JN,TextRenderable as YN}from"@opentui/core";import{engine as cm,Timeline as nm}from"@opentui/core";import{BaseRenderable as oU,createTextAttributes as GN,InputRenderable as wj,InputRenderableEvents as kX,isTextNodeRenderable as vj,parseColor as aU,Renderable as XN,RootTextNodeRenderable as ZN,ScrollBoxRenderable as qN,SelectRenderable as $U,SelectRenderableEvents as hj,TabSelectRenderable as rU,TabSelectRenderableEvents as Pj,TextNodeRenderable as QN,TextRenderable as sU}from"@opentui/core";import{BaseRenderable as LN,isTextNodeRenderable as MN,TextNodeRenderable as FN,TextRenderable as ON,Yoga as _U}from"@opentui/core";import{BoxRenderable as sm,RootRenderable as tm}from"@opentui/core";import{TimeToFirstDrawRenderable as CN}from"@opentui/core";import{createSlotRegistry as Jc}from"@opentui/core";function BN({createElement:f,createTextNode:J,createSlotNode:Y,isTextNode:z,replaceText:G,insertNode:X,removeNode:q,setProperty:Q,getParentNode:H,getFirstChild:B,getNextSibling:V}){function j(N,g,C,y){if(C!==void 0&&!y)y=[];if(typeof g!=="function")return U(N,g,y,C);AJ((_)=>U(N,g(),_,C),y)}function U(N,g,C,y,_){while(typeof C==="function")C=C();if(g===C)return C;let z0=typeof g,t=y!==void 0;if(z0==="string"||z0==="number"){if(z0==="number")g=g.toString();if(t){let Y0=C[0];if(Y0&&z(Y0))G(Y0,g);else Y0=J(g);C=M(N,C,y,Y0)}else if(C!==""&&typeof C==="string")G(B(N),C=g);else M(N,C,y,J(g)),C=g}else if(g==null||z0==="boolean")C=M(N,C,y);else if(z0==="function")return AJ(()=>{let Y0=g();while(typeof Y0==="function")Y0=Y0();C=U(N,Y0,C,y)}),()=>C;else if(Array.isArray(g)){let Y0=[];if(L(Y0,g,_))return AJ(()=>C=U(N,Y0,C,y,!0)),()=>C;if(Y0.length===0){let T=M(N,C,y);if(t)return C=T}else if(Array.isArray(C))if(C.length===0)R(N,Y0,y);else O(N,C,Y0);else if(C==null||C==="")R(N,Y0);else O(N,t&&C||[B(N)],Y0);C=Y0}else{if(Array.isArray(C)){if(t)return C=M(N,C,y,g);M(N,C,null,g)}else if(C==null||C===""||!B(N))X(N,g);else S(N,g,B(N));C=g}return C}function L(N,g,C){let y=!1;for(let _=0,z0=g.length;_<z0;_++){let t=g[_],Y0;if(t==null||t===!0||t===!1);else if(Array.isArray(t))y=L(N,t)||y;else if((Y0=typeof t)==="string"||Y0==="number")N.push(J(t));else if(Y0==="function")if(C){while(typeof t==="function")t=t();y=L(N,Array.isArray(t)?t:[t])||y}else N.push(t),y=!0;else N.push(t)}return y}function O(N,g,C){let y=C.length,_=g.length,z0=y,t=0,Y0=0,T=V(g[_-1]),Q0=null;while(t<_||Y0<z0){if(g[t]===C[Y0]){t++,Y0++;continue}while(g[_-1]===C[z0-1])_--,z0--;if(_===t){let p=z0<y?Y0?V(C[Y0-1]):C[z0-Y0]:T;while(Y0<z0)X(N,C[Y0++],p)}else if(z0===Y0)while(t<_){if(!Q0||!Q0.has(g[t]))q(N,g[t]);t++}else if(g[t]===C[z0-1]&&C[Y0]===g[_-1]){let p=V(g[--_]);X(N,C[Y0++],V(g[t++])),X(N,C[--z0],p),g[_]=C[z0]}else{if(!Q0){Q0=new Map;let D0=Y0;while(D0<z0)Q0.set(C[D0],D0++)}let p=Q0.get(g[t]);if(p!=null)if(Y0<p&&p<z0){let D0=t,g0=1,$;while(++D0<_&&D0<z0){if(($=Q0.get(g[D0]))==null||$!==p+g0)break;g0++}if(g0>p-Y0){let E=g[t];while(Y0<p)X(N,C[Y0++],E)}else S(N,C[Y0++],g[t++])}else t++;else q(N,g[t++])}}}function M(N,g,C,y){if(C===void 0){let z0;while(z0=B(N))q(N,z0);return y&&X(N,y),y??""}let _=y||Y();if(g.length){let z0=!1;for(let t=g.length-1;t>=0;t--){let Y0=g[t];if(_!==Y0){let T=H(Y0)===N;if(!z0&&!t)T?S(N,_,Y0):X(N,_,C);else T&&q(N,Y0)}else z0=!0}}else X(N,_,C);return[_]}function R(N,g,C){for(let y=0,_=g.length;y<_;y++)X(N,g[y],C)}function S(N,g,C){X(N,g,C),q(N,C)}function a(N,g,C={},y){if(g||(g={}),!y)AJ(()=>C.children=U(N,g.children,C.children));return AJ(()=>g.ref&&g.ref(N)),AJ(()=>{for(let _ in g){if(_==="children"||_==="ref")continue;let z0=g[_];if(z0===C[_])continue;Q(N,_,z0,C[_]),C[_]=z0}}),C}return{render(N,g){let C;return _Y((y)=>{C=y,j(g,N())}),C},insert:j,spread(N,g,C){if(typeof g==="function")AJ((y)=>a(N,g(),y,C));else a(N,g,void 0,C)},createElement:f,createTextNode:J,insertNode:X,setProp(N,g,C,y){return Q(N,g,C,y),C},mergeProps:LZ,effect:AJ,memo:HN,createComponent:HW,use(N,g,C){return $f(()=>N(g,C))}}}function jN(f){let J=BN(f);return J.mergeProps=LZ,J}function ij(f){if(!QQ.has(f))QQ.set(f,0);let J=QQ.get(f)+1;return QQ.set(f,J),`${f}-${J}`}function WN(f,J,Y){if(sf("Inserting node:",rf(J),"into parent:",rf(f),"with anchor:",rf(Y),J instanceof gG),J instanceof NX)J.parent=f,J=J.getSlotChild(f);if(Y&&Y instanceof NX)Y=Y.getSlotChild(f);if(vj(J)){if(!(f instanceof sU)&&!vj(f))throw Error(`Orphan text error: "${J.toChunks().map((X)=>X.text).join("")}" must have a <text> as a parent: ${f.id} above ${J.id}`)}if(!(f instanceof oU))throw console.error("[INSERT]","Tried to mount a non base renderable"),Error("Tried to mount a non base renderable");if(!Y){f.add(J);return}let z=mj(f),G=z.findIndex((X)=>X.id===Y.id);if(G===-1)sf("[INSERT]","Could not find anchor",rf(f),rf(Y),"[children]",...z.map((X)=>X.id));f.add(J,G)}function VN(f,J){if(sf("Removing node:",rf(J),"from parent:",rf(f)),J instanceof NX)J.parent=null,J=J.getSlotChild(f);f.remove(J.id),process.nextTick(()=>{if(J instanceof oU&&!J.parent){J.destroyRecursively();return}})}function KN(f){sf("Creating text node:",f);let J=ij("text-node");if(typeof f==="number")f=f.toString();return gG.fromString(Cz(f),{id:J})}function UN(){let f=ij("slot-node");return sf("Creating slot node",f),new NX(f)}function pU(f){sf("Getting parent of node:",rf(f));let J=f.parent??void 0;if(J instanceof ZN)J=J.textParent??void 0;let Y=J?.parent?.parent?.parent;if(Y instanceof qN&&Y.content===J)J=Y;return J}function gN(f){Object.assign(G6,f)}function RN(){return G6}var dj,Y1=()=>{let f=u1(dj);if(!f)throw Error("No renderer found");return f},zN=(f)=>{let J=Y1();f1(()=>{J.on("resize",f)}),mf(()=>{J.off("resize",f)})},TJ=()=>{let f=Y1(),[J,Y]=r({width:f.width,height:f.height});return zN((G,X)=>{Y({width:G,height:X})}),J},HN=(f)=>U0(()=>f()),QQ,sf=(...f)=>{if(process.env.DEBUG)console.log("[Reconciler]",...f)},gG,rf=(f)=>{if(!f)return;return f.id},mj=(f)=>{let J;if(f instanceof sU)J=f.getTextChildren();else J=f.getChildren();return J},DN,u,I0,b,W,x0,D,K,pm,Z,tU,hY,lj,eU,f6,NX,yX,HQ,cj,nj,J6,Y6,z6,AN,G6,kN=(f,J)=>{let Y,z=!1,G=!1,X=!0,q=!1,Q=f.destroy.bind(f),H=()=>{if(G)return;if(!Y){z=!0;return}G=!0,Y()};f.once("destroy",H),f.destroy=()=>{if(X){q=!0;return}Q()};try{Y=DN(()=>b(dj.Provider,{get value(){return f},get children(){return b(J,{})}}),f.root)}finally{X=!1,f.destroy=Q}if(z)H();if(q)Q()},X6=async(f,J={})=>{let Y=J instanceof nk?J:await dk({...J,onDestroy:()=>{J.onDestroy?.()}});ik.attach(Y),kN(Y,f)};var h=k(()=>{Wf();lU();Wf();Wf();Wf();dj=gJ();QQ=new Map;gG=class gG extends QN{static fromString(f,J={}){let Y=new gG(J);return Y.add(f),Y}};({render:DN,effect:u,memo:I0,createComponent:b,createElement:W,createTextNode:x0,insertNode:D,insert:K,spread:pm,setProp:Z,mergeProps:tU,use:hY}=jN({createElement(f){sf("Creating element:",f);let J=ij(f),Y=u1(dj);if(!Y)throw Error("No renderer found");let z=RN();if(!z[f])throw Error(`[Reconciler] Unknown component type: ${f}`);let G=new z[f](Y,{id:J});return sf("Element created with id:",J),G},createTextNode:KN,createSlotNode:UN,replaceText(f,J){if(sf("Replacing text:",J,"in node:",rf(f)),!(f instanceof gG))return;f.replace(Cz(J),0)},setProperty(f,J,Y,z){if(J.startsWith("on:")){let G=J.slice(3);if(Y)f.on(G,Y);if(z)f.off(G,z);return}if(vj(f)){if(J==="href"){f.link={url:Y};return}if(J==="style"){f.attributes|=GN(Y),f.fg=Y.fg?aU(Y.fg):f.fg,f.bg=Y.bg?aU(Y.bg):f.bg;return}return}switch(J){case"id":sf("Id mapped",f.id,"=",Y),f[J]=Y;break;case"focused":if(!(f instanceof XN))return;if(Y)f.focus();else f.blur();break;case"onChange":let G=void 0;if(f instanceof $U)G=hj.SELECTION_CHANGED;else if(f instanceof rU)G=Pj.SELECTION_CHANGED;else if(f instanceof wj)G=kX.CHANGE;if(!G)break;if(Y)f.on(G,Y);if(z)f.off(G,z);break;case"onInput":if(f instanceof wj){if(Y)f.on(kX.INPUT,Y);if(z)f.off(kX.INPUT,z)}break;case"onSubmit":if(f instanceof wj){if(Y)f.on(kX.ENTER,Y);if(z)f.off(kX.ENTER,z)}else f[J]=Y;break;case"onSelect":if(f instanceof $U){if(Y)f.on(hj.ITEM_SELECTED,Y);if(z)f.off(hj.ITEM_SELECTED,z)}else if(f instanceof rU){if(Y)f.on(Pj.ITEM_SELECTED,Y);if(z)f.off(Pj.ITEM_SELECTED,z)}break;case"style":for(let X in Y){let q=Y[X];if(z!==void 0&&q===z[X])continue;f[X]=q}break;case"text":case"content":{let X=typeof Y==="string"?Y:Array.isArray(Y)?Y.join(""):`${Y}`;f[J]=Cz(X);break}default:f[J]=Y}},isTextNode(f){return f instanceof gG},insertNode:WN,removeNode:VN,getParentNode:pU,getFirstChild(f){sf("Getting first child of node:",rf(f));let J=mj(f)[0];if(!J){sf("No first child found for node:",rf(f));return}return sf("First child found:",rf(J),"for node:",rf(f)),J},getNextSibling(f){sf("Getting next sibling of node:",rf(f));let J=pU(f);if(!J){sf("No parent found for node:",rf(f));return}let Y=mj(J),z=Y.indexOf(f);if(z===-1||z===Y.length-1){sf("No next sibling found for node:",rf(f));return}let G=Y[z+1];if(!G){sf("Next sibling is null for node:",rf(f));return}return sf("Next sibling found:",rf(G),"for node:",rf(f)),G}}));lj=class lj extends LN{constructor(f){super({id:f})}add(f,J){throw Error("Can't add children on an Slot renderable")}getChildren(){return[]}remove(f){}insertBefore(f,J){throw Error("Can't add children on an Slot renderable")}getRenderable(f){return}getChildrenCount(){return 0}requestRender(){}findDescendantById(f){return}};eU=class eU extends FN{slotParent;destroyed=!1;constructor(f,J){super({id:f});this._visible=!1,this.slotParent=J}destroy(){if(this.destroyed)return;this.destroyed=!0,this.slotParent?.destroy(),super.destroy()}};f6=class f6 extends lj{yogaNode;slotParent;destroyed=!1;constructor(f,J){super(f);this._visible=!1,this.slotParent=J,this.yogaNode=_U.default.Node.create(),this.yogaNode.setDisplay(_U.Display.None)}getLayoutNode(){return this.yogaNode}updateFromLayout(){}updateLayout(){}onRemove(){}destroy(){if(this.destroyed)return;this.destroyed=!0,super.destroy(),this.slotParent?.destroy()}};NX=class NX extends lj{layoutNode;textNode;destroyed=!1;constructor(f){super(f);this._visible=!1}getSlotChild(f){if(MN(f)||f instanceof ON){if(!this.textNode)this.textNode=new eU(`slot-text-${this.id}`,this);return this.textNode}if(!this.layoutNode)this.layoutNode=new f6(`slot-layout-${this.id}`,this);return this.layoutNode}destroy(){if(this.destroyed)return;if(this.destroyed=!0,this.layoutNode)this.layoutNode.destroy();if(this.textNode)this.textNode.destroy()}};yX=class yX extends JN{_ctx;constructor(f,J){super(J);this._ctx=f}};HQ=class HQ extends yX{constructor(f,J){super(null,f);if(J==="b"||J==="strong")this.attributes=(this.attributes||0)|xj.BOLD;else if(J==="i"||J==="em")this.attributes=(this.attributes||0)|xj.ITALIC;else if(J==="u")this.attributes=(this.attributes||0)|xj.UNDERLINE}};cj=class cj extends HQ{constructor(f){super(f,"b")}};nj=class nj extends HQ{constructor(f){super(f,"i")}};J6=class J6 extends HQ{constructor(f){super(f,"u")}};Y6=class Y6 extends yX{constructor(f,J){super(null,J);this.add()}add(){return super.add(`
|
|
222
|
+
`)}};z6=class z6 extends yX{constructor(f,J){let Y={...J,link:{url:J.href}};super(null,Y)}};AN={box:ak,text:YN,input:pk,select:tk,textarea:fN,ascii_font:lk,tab_select:ek,scrollbox:sk,code:$k,diff:rk,line_number:_k,markdown:ok,span:yX,strong:cj,b:cj,em:nj,i:nj,u:J6,br:Y6,a:z6},G6={...AN};gN({time_to_first_draw:CN})});function NN(f){let J=f?.changes;if(!J||typeof J!=="object"||Array.isArray(J))return null;let Y=new Map;for(let[z,G]of Object.entries(J)){let X=G;if(typeof X?.added!=="number"||typeof X.deleted!=="number")return null;Y.set(z,{added:X.added,deleted:X.deleted})}return Y}function yN(f,J){if(f.size!==J.size)return!1;for(let[Y,z]of f){let G=J.get(Y);if(!G||!IJ(z,G))return!1}return!0}class j1{client;tasksAcc;setTasks;activeTaskAcc;setActiveTaskSig;updateAcc;setUpdateSig;daemonVersionAcc;setDaemonVersionSig;engineStateAcc;setEngineStateSig;taskJobsAcc;setTaskJobsSig;worktreeChangesAcc;setWorktreeChangesSig;uiPrefsAcc;setUiPrefsSig;keybindingsRevAcc;setKeybindingsRevSig;connectionStateAcc;setConnectionState;ensureReachable;role;channels;subscribesTasks;reconnecting=!1;constructor(f,J={}){this.client=f;let[Y,z]=r([]),[G,X]=r(null),[q,Q]=r(null),[H,B]=r(null),[V,j]=r(new Map),[U,L]=r(new Map),[O,M]=r(null),[R,S]=r(null),[a,N]=r(null),[g,C]=r("online");this.tasksAcc=Y,this.setTasks=(y)=>z(()=>y),this.activeTaskAcc=G,this.setActiveTaskSig=(y)=>X(()=>y),this.updateAcc=q,this.setUpdateSig=(y)=>Q(()=>y),this.daemonVersionAcc=H,this.setDaemonVersionSig=(y)=>B(()=>y),this.engineStateAcc=V,this.setEngineStateSig=(y)=>j(()=>y),this.taskJobsAcc=U,this.setTaskJobsSig=(y)=>L(()=>y),this.worktreeChangesAcc=O,this.setWorktreeChangesSig=(y)=>M(()=>y),this.uiPrefsAcc=R,this.setUiPrefsSig=(y)=>S(()=>y),this.keybindingsRevAcc=a,this.setKeybindingsRevSig=(y)=>N(()=>y),this.connectionStateAcc=g,this.setConnectionState=(y)=>C(()=>y),this.ensureReachable=J.ensureReachable??DG,this.role=J.role??"pane",this.channels=J.channels,this.subscribesTasks=!J.channels||J.channels.includes("task.snapshot"),this.client.on("*",(y)=>this.handleEvent(y.name,y.payload)),this.client.onLifecycle("close",()=>{if(this.setConnectionState("disconnected"),this.role==="pane")dJ("orch","daemon socket closed \u2014 starting non-spawning reconnect loop"),this.reconnectLoop()})}async reconnectLoop(){if(this.reconnecting)return;this.reconnecting=!0;let f=500,J=0;while(!this.client.isDisposed){if(await new Promise((Y)=>setTimeout(Y,f)),this.client.isDisposed)break;J++;try{await this.init(),dJ("orch",`reconnected and re-subscribed after ${J} attempt(s) \u2014 task list re-synced`),this.reconnecting=!1;return}catch(Y){if(J===1||J%10===0)WY("orch-reconnect",Y);f=Math.min(f*2,3000)}}this.reconnecting=!1}async init(){let f=await this.client.request("hello",{protocolVersion:n1,minProtocolVersion:jY}),J=typeof f.protocolVersion==="number"?f.protocolVersion:n1,Y=typeof f.minProtocolVersion==="number"?f.minProtocolVersion:J;if(!AZ({localVersion:n1,localMin:jY,remoteVersion:J,remoteMin:Y}))throw Error(`kobe daemon is protocol v${J} (min v${Y}); this client is v${n1} (min v${jY}). Restart the daemon (\`kobe daemon restart\`) or upgrade kobe.`);if(this.setDaemonVersionSig(typeof f.kobeVersion==="string"?f.kobeVersion:null),f.tasks&&this.subscribesTasks)this.setTasks(f.tasks.map(bX));if(await this.client.subscribe({role:this.role,channels:this.channels}),f.capabilities?.includes("worktree.changes")){if(this.worktreeChangesAcc()===null)this.setWorktreeChangesSig(new Map)}else this.setWorktreeChangesSig(null);this.setConnectionState("online"),dJ("orch",`subscribed as ${this.role} (${this.tasksAcc().length} tasks)`)}connectionStateSignal(){return this.connectionStateAcc}async manualReconnect(){this.client.forceDisconnect(),await this.ensureReachable(),await this.init()}dispose(){this.client.close()}tasksSignal(){return this.tasksAcc}activeTaskSignal(){return this.activeTaskAcc}updateSignal(){return this.updateAcc}daemonVersionSignal(){return this.daemonVersionAcc}daemonStaleSignal(){return()=>OW(this.daemonVersionAcc()??void 0,s0)}engineStateSignal(){return this.engineStateAcc}taskJobsSignal(){return this.taskJobsAcc}worktreeChangesSignal(){return this.worktreeChangesAcc}uiPrefsSignal(){return this.uiPrefsAcc}keybindingsRevSignal(){return this.keybindingsRevAcc}listTasks(){return this.tasksAcc()}getTask(f){return this.tasksAcc().find((J)=>J.id===f)}subscribeTasks(f){try{f(this.listTasks())}catch(Y){console.error("[kobe RemoteOrchestrator] task listener threw on subscribe:",Y)}let J=!0;return _Y((Y)=>{return zf(()=>{let z=this.tasksAcc();if(J){J=!1;return}try{f(z)}catch(G){console.error("[kobe RemoteOrchestrator] task listener threw:",G)}}),Y})}async createTask(f){let{modelEffort:J,...Y}=f,z=await this.client.request("task.create",{...Y,effort:J});return bX(z.task)}async ensureMainTask(f){let J=await this.client.request("task.ensureMain",{repo:f});return bX(J.task)}async ensureWorktree(f){return(await this.client.request("task.ensureWorktree",{taskId:String(f)})).worktreePath}async setTitle(f,J){await this.client.request("task.rename",{taskId:String(f),title:J})}async setBranch(f,J){await this.client.request("task.setBranch",{taskId:String(f),branch:J})}async setVendor(f,J){await this.client.request("task.setVendor",{taskId:String(f),vendor:J})}async setPinned(f,J){await this.client.request("task.pin",{taskId:String(f),pinned:J})}async moveTask(f,J){await this.client.request("task.move",{taskId:String(f),direction:J<0?"up":"down"})}async setArchived(f,J){await this.client.request("task.archive",{taskId:String(f),archived:J})}async setStatus(f,J){await this.client.request("task.status",{taskId:String(f),status:J})}async deleteTask(f,J){await this.client.request("task.delete",{taskId:String(f),force:J?.force})}async discoverAdoptableWorktrees(f){return(await this.client.request("worktree.discoverAdoptable",{repo:f})).worktrees}async adoptWorktree(f){let J=await this.client.request("worktree.adopt",f);return bX(J.task)}async setActiveTask(f){await this.client.request("task.setActive",{taskId:f===null?null:String(f)})}handleEvent(f,J){if(f==="task.snapshot"){let Y=J?.tasks;if(Array.isArray(Y))this.setTasks(Y.map(bX)),this.pruneEngineState(Y),this.pruneTaskJobs(Y);return}if(f==="active-task"){let Y=J?.taskId;this.setActiveTaskSig(typeof Y==="string"?Y:null);return}if(f==="update"){let Y=J?.info;this.setUpdateSig(Y??null);return}if(f==="engine-state"){let Y=J;if(typeof Y?.taskId!=="string"||typeof Y.state!=="string")return;let z=new Map(this.engineStateAcc());if(Y.state==="idle")z.delete(Y.taskId);else z.set(Y.taskId,{state:Y.state,detail:Y.detail,at:typeof Y.at==="number"?Y.at:0});this.setEngineStateSig(z);return}if(f==="task.jobs"){let Y=J;if(typeof Y?.taskId!=="string"||Y.kind!=="ensureWorktree")return;let z=this.taskJobsAcc();if(Y.phase==="running"){let G=new Map(z);G.set(Y.taskId,{kind:Y.kind}),this.setTaskJobsSig(G);return}if((Y.phase==="done"||Y.phase==="error")&&z.has(Y.taskId)){let G=new Map(z);G.delete(Y.taskId),this.setTaskJobsSig(G)}return}if(f==="worktree.changes"){let Y=NN(J);if(!Y)return;let z=this.worktreeChangesAcc();if(z&&yN(z,Y))return;this.setWorktreeChangesSig(Y);return}if(f==="ui-prefs"){let Y=J;if(typeof Y?.theme!=="string")return;this.setUiPrefsSig({theme:Y.theme,transparentBackground:Y.transparentBackground===!0,focusAccent:typeof Y.focusAccent==="string"?Y.focusAccent:null,locale:typeof Y.locale==="string"?Y.locale:"",sortMode:Y.sortMode==="recent"?"recent":"default",keysCollapsed:Y.keysCollapsed===!0,projectFilter:typeof Y.projectFilter==="string"&&Y.projectFilter.length>0?Y.projectFilter:null});return}if(f==="keybindings"){let Y=J;if(typeof Y?.rev!=="number")return;this.setKeybindingsRevSig(Y.rev);return}}pruneEngineState(f){let J=this.engineStateAcc();if(J.size===0)return;let Y=new Set(f.map((G)=>G.id)),z=null;for(let G of J.keys()){if(Y.has(G))continue;if(!z)z=new Map(J);z.delete(G)}if(z)this.setEngineStateSig(z)}pruneTaskJobs(f){let J=this.taskJobsAcc();if(J.size===0)return;let Y=new Set(f.map((G)=>G.id)),z=null;for(let G of J.keys()){if(Y.has(G))continue;if(!z)z=new Map(J);z.delete(G)}if(z)this.setTaskJobsSig(z)}}function bX(f){return{id:PG(f.id),title:f.title,repo:f.repo,branch:f.branch,worktreePath:f.worktreePath,kind:f.kind,status:f.status,archived:f.archived,pinned:f.pinned,vendor:f.vendor,prStatus:f.prStatus,modelEffort:f.modelEffort,createdAt:f.createdAt,updatedAt:f.updatedAt}}var PY=k(()=>{eY();y1();sY();Wf();VG();S1();U1()});function Q6(f){let J=f[JJ];if(!J){if(Object.defineProperty(f,JJ,{value:J=new Proxy(f,IN)}),!Array.isArray(f)){let Y=Object.keys(f),z=Object.getOwnPropertyDescriptors(f),G=Object.getPrototypeOf(f),X=G!==null&&f!==null&&typeof f==="object"&&!Array.isArray(f)&&G!==Object.prototype;if(X){let q=Object.getOwnPropertyDescriptors(G);Y.push(...Object.keys(q)),Object.assign(z,q)}for(let q=0,Q=Y.length;q<Q;q++){let H=Y[q];if(X&&H==="constructor")continue;if(z[H].get)Object.defineProperty(f,H,{configurable:!0,enumerable:z[H].enumerable,get:z[H].get.bind(J)})}}}return J}function BQ(f){let J;return f!=null&&typeof f==="object"&&(f[JJ]||!(J=Object.getPrototypeOf(f))||J===Object.prototype||Array.isArray(f))}function IX(f,J=new Set){let Y,z,G,X;if(Y=f!=null&&f[aj])return Y;if(!BQ(f)||J.has(f))return f;if(Array.isArray(f)){if(Object.isFrozen(f))f=f.slice(0);else J.add(f);for(let q=0,Q=f.length;q<Q;q++)if(G=f[q],(z=IX(G,J))!==G)f[q]=z}else{if(Object.isFrozen(f))f=Object.assign({},f);else J.add(f);let q=Object.keys(f),Q=Object.getOwnPropertyDescriptors(f);for(let H=0,B=q.length;H<B;H++){if(X=q[H],Q[X].get)continue;if(G=f[X],(z=IX(G,J))!==G)f[X]=z}}return f}function jQ(f,J){let Y=f[J];if(!Y)Object.defineProperty(f,J,{value:Y=Object.create(null)});return Y}function TX(f,J,Y){if(f[J])return f[J];let[z,G]=r(Y,{equals:!1,internal:!0});return z.$=G,f[J]=z}function bN(f,J){let Y=Reflect.getOwnPropertyDescriptor(f,J);if(!Y||Y.get||!Y.configurable||J===JJ||J===RG)return Y;return delete Y.value,delete Y.writable,Y.get=()=>f[JJ][J],Y}function H6(f){UZ()&&TX(jQ(f,RG),q6)()}function SN(f){return H6(f),Reflect.ownKeys(f)}function WQ(f,J,Y,z=!1){if(J==="__proto__"){console.warn('Refusing to set "__proto__" on a store.');return}if(!z&&f[J]===Y)return;let G=f[J],X=f.length;if(Z6.onStoreNodeUpdate&&Z6.onStoreNodeUpdate(f,J,Y,G),Y===void 0){if(delete f[J],f[JY]&&f[JY][J]&&G!==void 0)f[JY][J].$()}else if(f[J]=Y,f[JY]&&f[JY][J]&&G===void 0)f[JY][J].$();let q=jQ(f,RG),Q;if(Q=TX(q,J,G))Q.$(()=>Y);if(Array.isArray(f)&&f.length!==X){for(let H=f.length;H<X;H++)(Q=q[H])&&Q.$();(Q=TX(q,"length",X))&&Q.$(f.length)}(Q=q[q6])&&Q.$()}function B6(f,J){let Y=Object.keys(J);for(let z=0;z<Y.length;z+=1){let G=Y[z];if(j6(G))continue;WQ(f,G,J[G])}}function j6(f){return f==="__proto__"||f==="constructor"||f==="prototype"}function TN(f,J){if(typeof J==="function")J=J(f);if(J=IX(J),Array.isArray(J)){if(f===J)return;let Y=0,z=J.length;for(;Y<z;Y++){let G=J[Y];if(f[Y]!==G)WQ(f,Y,G)}WQ(f,"length",z)}else B6(f,J)}function SX(f,J,Y=[]){let z,G=f;if(J.length>1){z=J.shift();let q=typeof z,Q=Array.isArray(f);if(q==="string"&&(z==="__proto__"||J.length>1&&j6(z))){console.warn(`Refusing to traverse unsafe key "${z}" on a store.`);return}if(Array.isArray(z)){for(let H=0;H<z.length;H++)SX(f,[z[H]].concat(J),Y);return}else if(Q&&q==="function"){for(let H=0;H<f.length;H++)if(z(f[H],H))SX(f,[H].concat(J),Y);return}else if(Q&&q==="object"){let{from:H=0,to:B=f.length-1,by:V=1}=z;for(let j=H;j<=B;j+=V)SX(f,[j].concat(J),Y);return}else if(J.length>1){SX(f[z],J,[z].concat(Y));return}G=f[z],Y=[z].concat(Y)}let X=J[0];if(typeof X==="function"){if(X=X(G,Y),X===G)return}if(z===void 0&&X==null)return;if(X=IX(X),z===void 0||BQ(G)&&BQ(X)&&!Array.isArray(X))B6(G,X);else WQ(f,z,X)}function uJ(...[f,J]){let Y=IX(f||{}),z=Array.isArray(Y);if(typeof Y!=="object"&&typeof Y!=="function")throw Error(`Unexpected type ${typeof Y} received when initializing 'createStore'. Expected an object.`);let G=Q6(Y);BW.registerGraph({value:Y,name:J&&J.name});function X(...q){KZ(()=>{z&&q.length===1?TN(Y,q[0]):SX(Y,q)})}return[G,X]}var aj,RG,JY,q6,Z6,IN,Wc;var CG=k(()=>{Wf();aj=Symbol("store-raw"),RG=Symbol("store-node"),JY=Symbol("store-has"),q6=Symbol("store-self"),Z6={onStoreNodeUpdate:null};IN={get(f,J,Y){if(J===aj)return f;if(J===JJ)return Y;if(J===jZ)return H6(f),Y;let z=jQ(f,RG),G=z[J],X=G?G():f[J];if(J===RG||J===JY||J==="__proto__")return X;if(!G){let q=Object.getOwnPropertyDescriptor(f,J);if(UZ()&&(typeof X!=="function"||f.hasOwnProperty(J))&&!(q&&q.get))X=TX(z,J,X)()}return BQ(X)?Q6(X):X},has(f,J){if(J===aj||J===JJ||J===jZ||J===RG||J===JY||J==="__proto__")return!0;return UZ()&&TX(jQ(f,JY),J)(),J in f},set(){return console.warn("Cannot mutate a Store directly"),!0},deleteProperty(){return console.warn("Cannot mutate a Store directly"),!0},ownKeys:SN,getOwnPropertyDescriptor:bN};Wc=Symbol("store-root")});function VQ(f){let J=gJ();return{provider:(Y)=>{let z=f.init(Y);return b(X0,{get when(){return z.ready===void 0||z.ready===!0},get children(){return b(J.Provider,{value:z,get children(){return Y.children}})}})},use(){let Y=u1(J);if(!Y)throw Error(`${f.name} context must be used within a context provider`);return Y}}}var $j=k(()=>{h();h();Wf()});import{RGBA as kz}from"@opentui/core";function EN(){return Object.keys(z1.themes)}function uX(f){return Boolean(z1.themes[f])}function pj(f,J){if(!f)return!1;if(!J||typeof J!=="object"||!J.theme)return!1;return Nz("themes",{...z1.themes,[f]:J}),!0}function rj(f,J="dark"){let Y=f.defs??{};function z(H,B=[]){if(typeof H==="string"){if(H==="transparent"||H==="none")return kz.fromInts(0,0,0,0);if(H.startsWith("#"))return kz.fromHex(H);if(B.includes(H))return kz.fromInts(0,0,0);let V=Y[H]??f.theme[H];if(V===void 0)return kz.fromInts(0,0,0);return z(V,[...B,H])}return z(H[J],B)}let G={};for(let[H,B]of Object.entries(f.theme))G[H]=z(B);let X=G.text??kz.fromHex("#ffffff"),q=G.background??kz.fromHex("#000000");return{...{primary:G.primary??X,secondary:G.secondary??X,accent:G.accent??G.primary??X,error:G.error??X,warning:G.warning??X,success:G.success??X,info:G.info??X,text:X,textMuted:G.textMuted??X,background:q,backgroundPanel:G.backgroundPanel??q,backgroundElement:G.backgroundElement??q,backgroundMenu:G.backgroundMenu??G.backgroundElement??q,backgroundDialog:G.backgroundDialog??G.backgroundPanel??q,border:G.border??X,borderActive:G.borderActive??G.border??X,borderSubtle:G.borderSubtle??G.border??X,diffAdded:G.diffAdded??G.success??X,diffRemoved:G.diffRemoved??G.error??X,diffContext:G.diffContext??G.textMuted??X,diffHunkHeader:G.diffHunkHeader??G.textMuted??X,diffAddedBg:G.diffAddedBg??q,diffRemovedBg:G.diffRemovedBg??q,selectedListItemText:G.selectedListItemText??q},...G}}var uN,yz,z1,Nz,i0,W6;var xf=k(()=>{h();Wf();CG();$j();Qq();Hq();Bq();jq();Wq();Vq();Kq();uN={claude:sz,conductor:tz,nord:fG,opencode:JG,dracula:ez,tokyonight:zG,"osaka-jade":YG},yz=["primary","success","info"],[z1,Nz]=uJ({themes:{...uN},active:"claude",mode:"dark",transparentBackground:!1,focusAccent:"primary"});({use:i0,provider:W6}=VQ({name:"Theme",init:(f)=>{if(f.mode)Nz("mode",f.mode);if(f.theme&&uX(f.theme))Nz("active",f.theme);let J=Y1(),Y=U0(()=>{let G=z1.themes[z1.active];if(G)return rj(G,z1.mode);let X=z1.themes.claude??z1.themes.opencode??Object.values(z1.themes)[0];if(!X)return rj({theme:{background:"#000000",text:"#ffffff"}},z1.mode);return rj(X,z1.mode)}),z=U0(()=>{let G=Y(),X=G[z1.focusAccent]??G.primary,q={...G,focusAccent:X};if(!z1.transparentBackground)return q;let Q=kz.fromInts(0,0,0,0);return{...q,background:Q,backgroundPanel:Q}});return zf(()=>{J?.setBackgroundColor(z().background)}),{theme:new Proxy({},{get(G,X){let q=z();return q[X]??q.text}}),get selected(){return z1.active},get transparentBackground(){return z1.transparentBackground},get focusAccent(){return z1.focusAccent},mode(){return z1.mode},set(G){if(!uX(G))return!1;return Nz("active",G),!0},setMode(G){Nz("mode",G)},setTransparentBackground(G){Nz("transparentBackground",G)},setFocusAccent(G){Nz("focusAccent",G)},all(){return EN()},has(G){return uX(G)}}}}))});var V6,K6;var U6=k(()=>{V6={cancel:"Cancel",confirm:"Confirm",rename:{defaultTitle:"Rename task",defaultFieldLabel:"title",footerHint:"enter {submitLabel} \xB7 esc cancel",defaultSubmitLabel:"rename"}},K6={cancel:"\u53D6\u6D88",confirm:"\u786E\u8BA4",rename:{defaultTitle:"\u91CD\u547D\u540D\u4EFB\u52A1",defaultFieldLabel:"\u540D\u79F0",footerHint:"enter {submitLabel} \xB7 esc \u53D6\u6D88",defaultSubmitLabel:"\u91CD\u547D\u540D"}}});var D6,L6;var M6=k(()=>{D6={tabs:{all:"All",changes:"Changes"},actions:{zen:"zen",createPR:"create PR"},legend:{changes:"M modified \xB7 A added \xB7 D deleted \xB7 ? untracked"},empty:{noTask:"(no task \u2014 press n to create)",noFiles:"(empty worktree)",noChanges:"(no changes \u2014 clean worktree)"},error:{retryHint:"press r to retry",notGitRepo:"not a git repository",pathMissing:"worktree path is missing",permissionDenied:"permission denied",gitNotInstalled:"git is not installed",gitFailed:"git command failed"},footer:{openHint:"\u21B5 open"}},L6={tabs:{all:"\u5168\u90E8",changes:"\u6539\u52A8"},actions:{zen:"\u4E13\u6CE8\u6A21\u5F0F",createPR:"\u521B\u5EFA PR"},legend:{changes:"M \u5DF2\u4FEE\u6539 \xB7 A \u5DF2\u6DFB\u52A0 \xB7 D \u5DF2\u5220\u9664 \xB7 ? \u672A\u8DDF\u8E2A"},empty:{noTask:"\uFF08\u6682\u65E0\u4EFB\u52A1 \u2014 \u6309 n \u521B\u5EFA\uFF09",noFiles:"\uFF08worktree \u4E3A\u7A7A\uFF09",noChanges:"\uFF08\u65E0\u6539\u52A8 \u2014 worktree \u5E72\u51C0\uFF09"},error:{retryHint:"\u6309 r \u91CD\u8BD5",notGitRepo:"\u4E0D\u662F git \u4ED3\u5E93",pathMissing:"worktree \u8DEF\u5F84\u4E0D\u5B58\u5728",permissionDenied:"\u6743\u9650\u4E0D\u8DB3",gitNotInstalled:"\u672A\u5B89\u88C5 git",gitFailed:"git \u547D\u4EE4\u5931\u8D25"},footer:{openHint:"\u21B5 \u6253\u5F00"}}});var F6,O6;var A6=k(()=>{F6={title:"kobe \u2014 keybindings",esc:"esc"},O6={title:"kobe \u2014 \u5FEB\u6377\u952E",esc:"esc"}});var g6,R6;var C6=k(()=>{g6={category:{Global:"Global",Sidebar:"Sidebar",Workspace:"Workspace",Navigation:"Navigation","Tasks pane":"Tasks pane","Workspace (tmux)":"Workspace (tmux)",Files:"Files",Terminal:"Terminal",Dialog:"Dialog"},desc:{"help.open":"Show keybindings help","task.new":"New task","task.openEditor":"Open active task worktree in editor","settings.open":"Open settings","settings.open.sidebar":"Open settings","app.quit":"Quit (with confirm)","focus.sidebar":"Back to sidebar (tasks)","focus.numeric":"Jump to pane (h=sidebar, j=workspace, k=files, l=terminal)","chat.interrupt":"Interrupt current turn (esc while streaming)","sidebar.nav":"Move cursor up/down","sidebar.select":"Open the selected task","sidebar.goto":"Top / bottom of list (gg or shift-G)","sidebar.rename":"Rename task","sidebar.archive":"Toggle archive","sidebar.localMerge":"Local merge task into parent repo (Shift+M)","sidebar.pin":"Pin / unpin task at top (Shift+P)","sidebar.view":"Switch view (Working session \u2194 Archives)","sidebar.sort":"Switch task sort (default \u2194 recent)","sidebar.projectFilter":"Cycle task project filter","sidebar.delete":"Delete task (with confirm)","sidebar.search.enter":"Search tasks (fuzzy filter)","sidebar.search.nav":"Move highlight in search results","sidebar.search.submit":"Select search match and exit search","sidebar.search.cancel":"Cancel search (restore prior selection)","tasks.openWorktree":"Open selected task's worktree in your editor","tasks.renameBranch":"Rename the selected task's git branch","tasks.cycleEngine":"Cycle engine vendor (claude \u2194 codex \u2194 \u2026) \u2014 applies on reopen","tasks.update":"Open the update page (when a new version is available)","tasks.focusEngine":"Focus the engine pane of the current window","tasks.toggleKeys":"Collapse / expand the keys legend","tmux.quickTask":"Quick new task (tmux prefix, then f)","tmux.engineTab":"Open the engine in a new tab (tmux prefix, then t)","tmux.layout.workspaceSplit":"Add a temporary workspace split (tmux prefix, then s)","tmux.layout.workspaceClose":"Close the focused temporary workspace split (tmux prefix, then x)","tmux.layout.workspaceReset":"Close all temporary workspace splits (tmux prefix, then r)","tmux.layout.tasksToggle":"Hide / restore the Tasks pane (tmux prefix, then a)","tmux.layout.opsToggle":"Toggle the file/Ops pane (tmux prefix, then o)","tmux.layout.terminalToggle":"Hide / restore the terminal pane (tmux prefix, then z)","tmux.layout.zenToggle":"Zen mode \u2014 collapse to the engine pane (tmux prefix, then space)","chat.send":"Send message (composer)","chat.newline":"Newline in composer","chat.cycle-mode":"Cycle permission mode (composer)","chat.steer":"Steer (interrupt + send) \u2014 mid-stream only","chat.tab.new":"New chat tab","chat.fork.new":"Quick-fork: create child task seeded with current repo/branch/model","chat.session.resume":"Resume a prior session in this task's worktree","chat.tab.close":"Close chat tab","chat.tab.rename":"Rename active chat tab","chat.tab.cycle-next":"Next chat tab","chat.tab.cycle-prev":"Previous chat tab","chat.question.nav":"Move highlight in question picker","chat.question.toggle":"Toggle highlighted option in question picker","chat.question.submit":"Advance / submit question picker","chat.question.pick-number":"Pick option by number in question picker","files.nav":"Move cursor up/down","files.hierarchy":"Collapse / expand tree level","files.open":"Open file in nvim (diff vs HEAD when changed)","files.tab":"Switch tab (cycle All / Changes)","files.refresh":"Refresh","files.openExternal":"Open file in system default app (audio / video / pdf preview)","files.mention":"Inject @<path> mention into the engine pane","files.createPR":"Create PR from the current task","terminal.scroll-up":"Scroll scrollback up","terminal.scroll-down":"Scroll scrollback down","terminal.reset":"Reset terminal \u2014 kill the current shell and respawn","dialog.cancel":"Close the top dialog (esc)","dialog.newtask.tab.cycle":"Switch New Task tab (Existing / New Repo)"}},R6={category:{Global:"\u5168\u5C40",Sidebar:"\u4FA7\u8FB9\u680F",Workspace:"\u5DE5\u4F5C\u533A",Navigation:"\u5BFC\u822A","Tasks pane":"\u4EFB\u52A1\u9762\u677F","Workspace (tmux)":"\u5DE5\u4F5C\u533A\uFF08tmux\uFF09",Files:"\u6587\u4EF6",Terminal:"\u7EC8\u7AEF",Dialog:"\u5BF9\u8BDD\u6846"},desc:{"help.open":"\u663E\u793A\u5FEB\u6377\u952E\u5E2E\u52A9","task.new":"\u65B0\u5EFA\u4EFB\u52A1","task.openEditor":"\u5728\u7F16\u8F91\u5668\u4E2D\u6253\u5F00\u5F53\u524D\u4EFB\u52A1\u7684 worktree","settings.open":"\u6253\u5F00\u8BBE\u7F6E","settings.open.sidebar":"\u6253\u5F00\u8BBE\u7F6E","app.quit":"\u9000\u51FA\uFF08\u9700\u786E\u8BA4\uFF09","focus.sidebar":"\u8FD4\u56DE\u4FA7\u8FB9\u680F\uFF08\u4EFB\u52A1\u5217\u8868\uFF09","focus.numeric":"\u8DF3\u8F6C\u5230\u9762\u677F\uFF08h=\u4FA7\u8FB9\u680F\uFF0Cj=\u5DE5\u4F5C\u533A\uFF0Ck=\u6587\u4EF6\uFF0Cl=\u7EC8\u7AEF\uFF09","chat.interrupt":"\u4E2D\u65AD\u5F53\u524D\u8F6E\u6B21\uFF08\u6D41\u5F0F\u8F93\u51FA\u4E2D\u6309 esc\uFF09","sidebar.nav":"\u4E0A\u4E0B\u79FB\u52A8\u5149\u6807","sidebar.select":"\u6253\u5F00\u9009\u4E2D\u7684\u4EFB\u52A1","sidebar.goto":"\u8DF3\u5230\u5217\u8868\u9876\u90E8 / \u5E95\u90E8\uFF08gg \u6216 shift-G\uFF09","sidebar.rename":"\u91CD\u547D\u540D\u4EFB\u52A1","sidebar.archive":"\u5207\u6362\u5F52\u6863\u72B6\u6001","sidebar.localMerge":"\u5C06\u4EFB\u52A1\u672C\u5730\u5408\u5E76\u5230\u7236\u4ED3\u5E93\uFF08Shift+M\uFF09","sidebar.pin":"\u7F6E\u9876 / \u53D6\u6D88\u7F6E\u9876\u4EFB\u52A1\uFF08Shift+P\uFF09","sidebar.view":"\u5207\u6362\u89C6\u56FE\uFF08\u5DE5\u4F5C\u4F1A\u8BDD \u2194 \u5F52\u6863\uFF09","sidebar.sort":"\u5207\u6362\u4EFB\u52A1\u6392\u5E8F\u65B9\u5F0F\uFF08\u9ED8\u8BA4 \u2194 \u6700\u8FD1\uFF09","sidebar.projectFilter":"\u5FAA\u73AF\u5207\u6362\u4EFB\u52A1\u9879\u76EE\u7B5B\u9009","sidebar.delete":"\u5220\u9664\u4EFB\u52A1\uFF08\u9700\u786E\u8BA4\uFF09","sidebar.search.enter":"\u641C\u7D22\u4EFB\u52A1\uFF08\u6A21\u7CCA\u8FC7\u6EE4\uFF09","sidebar.search.nav":"\u5728\u641C\u7D22\u7ED3\u679C\u4E2D\u79FB\u52A8\u9AD8\u4EAE","sidebar.search.submit":"\u9009\u4E2D\u641C\u7D22\u5339\u914D\u9879\u5E76\u9000\u51FA\u641C\u7D22","sidebar.search.cancel":"\u53D6\u6D88\u641C\u7D22\uFF08\u6062\u590D\u4E4B\u524D\u7684\u9009\u4E2D\u9879\uFF09","tasks.openWorktree":"\u5728\u7F16\u8F91\u5668\u4E2D\u6253\u5F00\u9009\u4E2D\u4EFB\u52A1\u7684 worktree","tasks.renameBranch":"\u91CD\u547D\u540D\u9009\u4E2D\u4EFB\u52A1\u7684 git \u5206\u652F","tasks.cycleEngine":"\u5FAA\u73AF\u5207\u6362\u5F15\u64CE\u5382\u5546\uFF08claude \u2194 codex \u2194 \u2026\uFF09\u2014\u2014\u91CD\u65B0\u6253\u5F00\u540E\u751F\u6548","tasks.update":"\u6253\u5F00\u66F4\u65B0\u9875\u9762\uFF08\u6709\u65B0\u7248\u672C\u65F6\uFF09","tasks.focusEngine":"\u805A\u7126\u5F53\u524D\u7A97\u53E3\u7684\u5F15\u64CE\u9762\u677F","tasks.toggleKeys":"\u6298\u53E0 / \u5C55\u5F00\u5FEB\u6377\u952E\u8BF4\u660E","tmux.quickTask":"\u5FEB\u901F\u65B0\u5EFA\u4EFB\u52A1\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 f\uFF09","tmux.engineTab":"\u5728\u65B0\u6807\u7B7E\u9875\u4E2D\u6253\u5F00\u5F15\u64CE\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 t\uFF09","tmux.layout.workspaceSplit":"\u6DFB\u52A0\u4E34\u65F6\u5DE5\u4F5C\u533A\u5206\u5C4F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 s\uFF09","tmux.layout.workspaceClose":"\u5173\u95ED\u5F53\u524D\u805A\u7126\u7684\u4E34\u65F6\u5DE5\u4F5C\u533A\u5206\u5C4F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 x\uFF09","tmux.layout.workspaceReset":"\u5173\u95ED\u6240\u6709\u4E34\u65F6\u5DE5\u4F5C\u533A\u5206\u5C4F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 r\uFF09","tmux.layout.tasksToggle":"\u9690\u85CF / \u6062\u590D\u4EFB\u52A1\u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 a\uFF09","tmux.layout.opsToggle":"\u5207\u6362\u6587\u4EF6/Ops \u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 o\uFF09","tmux.layout.terminalToggle":"\u9690\u85CF / \u6062\u590D\u7EC8\u7AEF\u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 z\uFF09","tmux.layout.zenToggle":"\u4E13\u6CE8\u6A21\u5F0F\u2014\u2014\u6298\u53E0\u5230\u5F15\u64CE\u9762\u677F\uFF08tmux \u524D\u7F00\uFF0C\u7136\u540E\u6309 space\uFF09","chat.send":"\u53D1\u9001\u6D88\u606F\uFF08\u8F93\u5165\u6846\uFF09","chat.newline":"\u5728\u8F93\u5165\u6846\u4E2D\u6362\u884C","chat.cycle-mode":"\u5FAA\u73AF\u5207\u6362\u6743\u9650\u6A21\u5F0F\uFF08\u8F93\u5165\u6846\uFF09","chat.steer":"\u5F15\u5BFC\uFF08\u4E2D\u65AD\u5E76\u53D1\u9001\uFF09\u2014\u2014\u4EC5\u9650\u6D41\u5F0F\u8F93\u51FA\u4E2D","chat.tab.new":"\u65B0\u5EFA\u804A\u5929\u6807\u7B7E\u9875","chat.fork.new":"\u5FEB\u901F\u6D3E\u751F\uFF1A\u4EE5\u5F53\u524D\u4ED3\u5E93/\u5206\u652F/\u6A21\u578B\u521B\u5EFA\u5B50\u4EFB\u52A1","chat.session.resume":"\u5728\u6B64\u4EFB\u52A1\u7684 worktree \u4E2D\u6062\u590D\u4E4B\u524D\u7684\u4F1A\u8BDD","chat.tab.close":"\u5173\u95ED\u804A\u5929\u6807\u7B7E\u9875","chat.tab.rename":"\u91CD\u547D\u540D\u5F53\u524D\u804A\u5929\u6807\u7B7E\u9875","chat.tab.cycle-next":"\u4E0B\u4E00\u4E2A\u804A\u5929\u6807\u7B7E\u9875","chat.tab.cycle-prev":"\u4E0A\u4E00\u4E2A\u804A\u5929\u6807\u7B7E\u9875","chat.question.nav":"\u5728\u63D0\u95EE\u9009\u62E9\u5668\u4E2D\u79FB\u52A8\u9AD8\u4EAE","chat.question.toggle":"\u5728\u63D0\u95EE\u9009\u62E9\u5668\u4E2D\u5207\u6362\u9AD8\u4EAE\u9009\u9879","chat.question.submit":"\u63A8\u8FDB / \u63D0\u4EA4\u63D0\u95EE\u9009\u62E9\u5668","chat.question.pick-number":"\u5728\u63D0\u95EE\u9009\u62E9\u5668\u4E2D\u6309\u6570\u5B57\u9009\u62E9\u9009\u9879","files.nav":"\u4E0A\u4E0B\u79FB\u52A8\u5149\u6807","files.hierarchy":"\u6298\u53E0 / \u5C55\u5F00\u6811\u5C42\u7EA7","files.open":"\u5728 nvim \u4E2D\u6253\u5F00\u6587\u4EF6\uFF08\u6709\u53D8\u66F4\u65F6\u663E\u793A\u4E0E HEAD \u7684\u5DEE\u5F02\uFF09","files.tab":"\u5207\u6362\u6807\u7B7E\u9875\uFF08\u5FAA\u73AF \u5168\u90E8 / \u53D8\u66F4\uFF09","files.refresh":"\u5237\u65B0","files.openExternal":"\u5728\u7CFB\u7EDF\u9ED8\u8BA4\u5E94\u7528\u4E2D\u6253\u5F00\u6587\u4EF6\uFF08\u97F3\u9891 / \u89C6\u9891 / pdf \u9884\u89C8\uFF09","files.mention":"\u5C06 @<path> \u63D0\u53CA\u6CE8\u5165\u5F15\u64CE\u9762\u677F","files.createPR":"\u4ECE\u5F53\u524D\u4EFB\u52A1\u521B\u5EFA PR","terminal.scroll-up":"\u5411\u4E0A\u6EDA\u52A8\u56DE\u6EDA","terminal.scroll-down":"\u5411\u4E0B\u6EDA\u52A8\u56DE\u6EDA","terminal.reset":"\u91CD\u7F6E\u7EC8\u7AEF\u2014\u2014\u5173\u95ED\u5F53\u524D shell \u5E76\u91CD\u65B0\u542F\u52A8","dialog.cancel":"\u5173\u95ED\u9876\u5C42\u5BF9\u8BDD\u6846\uFF08esc\uFF09","dialog.newtask.tab.cycle":"\u5207\u6362\u65B0\u5EFA\u4EFB\u52A1\u6807\u7B7E\u9875\uFF08\u73B0\u6709\u4ED3\u5E93 / \u65B0\u4ED3\u5E93\uFF09"}}});var k6,N6;var y6=k(()=>{k6={title:"New task",tabs:{existing:"For Existing",clone:"For New Repo",adopt:"Adopt Worktree"},field:{engine:"engine",repo:"repo",fromBranch:"from branch",gitUrl:"git url",parentDir:"parent dir",folderName:"folder name",baseBranch:"base branch",adoptFilter:"filter (path glob)"},placeholder:{folderName:"auto from url",adoptFilter:"* \u2014 type e.g. feature-* to narrow"},hint:{engineCycle:"ctrl+e",remembered:"(remembered \u2014 next clone defaults to this dir)",currentDir:"(current dir)",noBranchesFound:"(no local branches found \u2014 typed text will be used as ref)",noMatchBranch:"(no match \u2014 typed text will be used as ref)",scanningWorktrees:"scanning worktrees\u2026",legend:"\u2191\u2193 pick \xB7 tab next field \xB7 \u2190\u2192 switch \xB7 enter done \xB7 esc cancel"},picker:{moreAbove:"\u2191 {count} more",moreBelow:"\u2193 {count} more"},adopt:{repoLine:"repo: {path}",repoNone:"(none)",noUnlinked:"no unlinked worktrees \u2014 every git worktree here is already a task",noMatch:"no worktrees match the filter",hintSelected:"{count} selected \xB7 enter toggles \xB7 ctrl+a all \xB7 Create imports",hintDefault:"enter toggles \xB7 ctrl+a all \xB7 Create imports the highlighted row"},clone:{progressFallback:"Cloning\u2026",progressInto:"Cloning into {target}\u2026"},button:{create:"[ Create ]",createFocused:"\u25B8 [ Create ]",cloning:"[ Cloning\u2026 ]"},error:{gitUrlRequired:"git URL is required",gitUrlInvalid:"does not look like a git URL: {url}",folderRequired:"folder name is required",folderHasSeparator:"folder name cannot contain path separators",parentRequired:"parent directory is required",parentNotFound:"parent directory does not exist: {path}",parentNotDir:"not a directory: {path}",targetExists:"target already exists: {path}",cloneFailed:"git clone failed: {error}",noAdoptable:"no adoptable worktrees to import"}},N6={title:"\u65B0\u5EFA\u4EFB\u52A1",tabs:{existing:"\u5DF2\u6709\u4ED3\u5E93",clone:"\u514B\u9686\u65B0\u4ED3\u5E93",adopt:"\u63A5\u7BA1 Worktree"},field:{engine:"\u5F15\u64CE",repo:"\u4ED3\u5E93",fromBranch:"\u57FA\u51C6\u5206\u652F",gitUrl:"git \u5730\u5740",parentDir:"\u7236\u76EE\u5F55",folderName:"\u6587\u4EF6\u5939\u540D",baseBranch:"\u57FA\u51C6\u5206\u652F",adoptFilter:"\u8FC7\u6EE4\uFF08\u8DEF\u5F84 glob\uFF09"},placeholder:{folderName:"\u81EA\u52A8\u4ECE\u5730\u5740\u63A8\u5BFC",adoptFilter:"* \u2014 \u8F93\u5165\u5982 feature-* \u6765\u7F29\u5C0F\u8303\u56F4"},hint:{engineCycle:"ctrl+e",remembered:"\uFF08\u5DF2\u8BB0\u4F4F \u2014 \u4E0B\u6B21\u514B\u9686\u9ED8\u8BA4\u4F7F\u7528\u6B64\u76EE\u5F55\uFF09",currentDir:"\uFF08\u5F53\u524D\u76EE\u5F55\uFF09",noBranchesFound:"\uFF08\u672A\u627E\u5230\u672C\u5730\u5206\u652F \u2014 \u5C06\u76F4\u63A5\u4F7F\u7528\u8F93\u5165\u6587\u672C\u4F5C\u4E3A ref\uFF09",noMatchBranch:"\uFF08\u65E0\u5339\u914D \u2014 \u5C06\u76F4\u63A5\u4F7F\u7528\u8F93\u5165\u6587\u672C\u4F5C\u4E3A ref\uFF09",scanningWorktrees:"\u6B63\u5728\u626B\u63CF worktree\u2026",legend:"\u2191\u2193 \u9009\u62E9 \xB7 tab \u4E0B\u4E00\u5B57\u6BB5 \xB7 \u2190\u2192 \u5207\u6362 \xB7 enter \u786E\u8BA4 \xB7 esc \u53D6\u6D88"},picker:{moreAbove:"\u2191 \u8FD8\u6709 {count} \u9879",moreBelow:"\u2193 \u8FD8\u6709 {count} \u9879"},adopt:{repoLine:"\u4ED3\u5E93\uFF1A{path}",repoNone:"\uFF08\u65E0\uFF09",noUnlinked:"\u6CA1\u6709\u672A\u5173\u8054\u7684 worktree \u2014 \u6B64\u4ED3\u5E93\u6240\u6709 git worktree \u5747\u5DF2\u662F\u4EFB\u52A1",noMatch:"\u6CA1\u6709 worktree \u5339\u914D\u6B64\u8FC7\u6EE4\u6761\u4EF6",hintSelected:"\u5DF2\u9009 {count} \u9879 \xB7 enter \u5207\u6362\u9009\u4E2D \xB7 ctrl+a \u5168\u9009 \xB7 \u521B\u5EFA \u5BFC\u5165",hintDefault:"enter \u5207\u6362\u9009\u4E2D \xB7 ctrl+a \u5168\u9009 \xB7 \u521B\u5EFA \u5C06\u5BFC\u5165\u9AD8\u4EAE\u884C"},clone:{progressFallback:"\u514B\u9686\u4E2D\u2026",progressInto:"\u6B63\u5728\u514B\u9686\u5230 {target}\u2026"},button:{create:"[ \u521B\u5EFA ]",createFocused:"\u25B8 [ \u521B\u5EFA ]",cloning:"[ \u514B\u9686\u4E2D\u2026 ]"},error:{gitUrlRequired:"git \u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A",gitUrlInvalid:"\u4E0D\u50CF\u662F\u6709\u6548\u7684 git \u5730\u5740\uFF1A{url}",folderRequired:"\u6587\u4EF6\u5939\u540D\u4E0D\u80FD\u4E3A\u7A7A",folderHasSeparator:"\u6587\u4EF6\u5939\u540D\u4E0D\u80FD\u5305\u542B\u8DEF\u5F84\u5206\u9694\u7B26",parentRequired:"\u7236\u76EE\u5F55\u4E0D\u80FD\u4E3A\u7A7A",parentNotFound:"\u7236\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A{path}",parentNotDir:"\u4E0D\u662F\u76EE\u5F55\uFF1A{path}",targetExists:"\u76EE\u6807\u8DEF\u5F84\u5DF2\u5B58\u5728\uFF1A{path}",cloneFailed:"git clone \u5931\u8D25\uFF1A{error}",noAdoptable:"\u6CA1\u6709\u53EF\u63A5\u7BA1\u7684 worktree"}}});var b6,S6;var I6=k(()=>{b6={badge:{newActivity:"\u25CF new"},preview:{diffVsHead:"diff vs HEAD",file:"file",closeHint:"\xB7 q to close",loading:"loading\u2026"}},S6={badge:{newActivity:"\u25CF \u65B0\u52A8\u6001"},preview:{diffVsHead:"\u4E0E HEAD \u5BF9\u6BD4",file:"\u6587\u4EF6",closeHint:"\xB7 q \u5173\u95ED",loading:"\u52A0\u8F7D\u4E2D\u2026"}}});var T6,u6;var E6=k(()=>{T6={title:"Quick task \xB7 {repoLabel}",esc:"esc",promptLabel:"prompt",promptPlaceholder:"what should this task do?",engineLabel:"engine",branchLabel:"branch",legend:"enter create \xB7 tab field \xB7 ctrl+e engine \xB7 esc cancel"},u6={title:"\u5FEB\u901F\u4EFB\u52A1 \xB7 {repoLabel}",esc:"esc",promptLabel:"\u63D0\u793A\u8BCD",promptPlaceholder:"\u8FD9\u4E2A\u4EFB\u52A1\u8981\u505A\u4EC0\u4E48\uFF1F",engineLabel:"\u5F15\u64CE",branchLabel:"\u5206\u652F",legend:"enter \u521B\u5EFA \xB7 tab \u5207\u6362\u5B57\u6BB5 \xB7 ctrl+e \u5207\u6362\u5F15\u64CE \xB7 esc \u53D6\u6D88"}});var x6,w6;var h6=k(()=>{x6={title:"Settings",esc:"esc",nav:{default:"j/k pick \xB7 h/l switch level \xB7 enter activate \xB7 esc close",feedback:"tab next field \xB7 enter send \xB7 esc close"},sections:{general:"General",engines:"Engines",accounts:"Accounts",keys:"Keybindings",feedback:"Feedback",dev:"Dev"},general:{theme:"Theme",themeHint:"l to enter list \xB7 j/k to highlight \xB7 enter to apply",language:"Language",languageHint:"Display language for kobe's UI. l to enter list \xB7 j/k to highlight \xB7 enter to apply.",transparent:"Transparent background",transparentHint:"Drops the renderer's bg fill so the host terminal shows through. `t` toggles.",on:"[x] on",off:"[ ] off",focusAccent:"Focus accent",focusAccentHint:"Color of focused pane title, \u258C marker, and split borders.",accentPrimary:"Primary (brand accent)",accentSuccess:"Success (legacy green)",accentInfo:"Info (cool blue)",notifications:"Notifications",notificationsHint:"Fired when a background chat tab finishes or pauses on an approval. Toast = bottom-right popup; Sound = terminal bell + chime. Tab-chip unread dot is always on.",toast:"Toast",sound:"Sound",zen:"Zen mode",zenHint:"The `zen` chip (above the file list) and `prefix`+space collapse the ChatTab to the engine pane \u2014 hiding the file and terminal panes. Keep this on to leave the Tasks rail visible so you can always get back out.",zenKeepTasks:"Keep Tasks pane in zen mode",surface:"Settings page",surfaceHint:"Where Settings and the other full dialogs (new task, rename) open. ChatTab = a dedicated full-window page alongside the engine tabs; Task panel = an overlay inside the left Tasks pane. enter to pick.",surfaceChattab:"ChatTab (separate page)",surfaceTaskpanel:"Task panel (in-pane overlay)",editor:"Editor",editorHint:"What `e` opens a file with in the file tree (enter stays the read-only preview). `auto` (default) follows $VISUAL / $EDITOR, else auto-detects nvim / vim / emacs / nano. enter on the row below cycles auto / vim / nvim / nano / emacs / custom; if the editor isn't installed it falls back to the preview.",editorRow:"editor: < {kind} > (enter to change)",editorCustom:"custom: {cmd}",editorCustomUnset:"(unset \u2014 enter to edit)"},engines:{title:"Launch command",hint:"The command each engine's task pane runs. Override a built-in when your binary isn't on PATH as `claude` / `codex` (e.g. it's `cl`) or to pass default flags, or add your own engine. \u25CF = default engine for new tasks (also set by Ctrl+Shift+T). enter edit command \xB7 r rename \xB7 x reset/remove \xB7 d set default.",defaultTag:" (default)",customTag:" (custom)",addEngine:"+ Add engine"},accounts:{title:"Accounts",hint:"Read-only view of locally-detected engine accounts. Login flows land here later.",checking:"Checking\u2026",notLoggedIn:"\u25CB Not logged in",loggedIn:"\u25CF Logged in: {email}",apiKeyConfigured:"\u25CF API key configured",chatgptLogin:"\u25CF ChatGPT login: {email}",tokenConfigured:"\u25CF Token configured ({source})",copilotDetected:"\u25CF Copilot login detected"},keybindings:{title:"Keybindings",hint:"Rebind chords by editing the YAML below, then restart kobe (or respawn the pane). Press F1 anywhere for the live keymap with every binding id.",configFile:"Config file",notCreated:" (not created yet)",example:"Example",overridesApplied:"Overrides applied",none:"none",warnings:"Warnings"},feedback:{title:"Feedback",hint:"Sends a GitHub Discussion to the kobe repo through `gh`. Requires `gh auth login`; category defaults to Feedback.",titleLabel:"title",titlePlaceholder:"Short summary",descriptionLabel:"description",descriptionPlaceholder:"What happened? (enter sends)",send:"[enter] Send to GitHub Discussions"},dev:{reset:"Reset UI state",resetHint:"Clears ~/.config/kobe/state.json and ~/.kobe/tasks.json, then quits kobe \u2014 relaunch to start fresh. Working session / Archive lists, pane sizes, theme, model picks all reset. Worktrees on disk and Claude Code session history are not touched.",resetButton:"[enter] Reset",restart:"Restart backend",restartHint:"Stops the kobe daemon and quits this kobe window so the next launch spawns a fresh daemon \u2014 picks up daemon / orchestrator / engine edits without a process kill. Other attached kobe windows will lose their connection too.",restartButton:"[enter] Restart",doctorHint:"Daemon wedged or unresponsive? From a shell, run `kobe doctor` to diagnose, or `kobe reset` to stop the daemon + kill sessions (keeps your tasks). Use `kobe reset --hard` only to also wipe the task index + UI state.",experimental:"Experimental",remoteHint:"Remote projects (SSH): register a project whose git worktrees + engine run on another host over SSH, driven from this local kobe. Unfinished \u2014 file/diff panes still degrade for remote. Enables `kobe add --remote`.",remoteOn:"[x] Remote projects (on)",remoteOff:"[ ] Remote projects (off)",autoStatusHint:"Auto status flow: a backlog task moves to in_progress when its engine starts a turn, and new claude sessions get a system-prompt note telling the agent to set in_review itself when the work is done. Never touches done/canceled.",autoStatusOn:"[x] Auto status flow (on)",autoStatusOff:"[ ] Auto status flow (off)",dispatcherHint:"Field-notes dispatcher: task sessions file one-line gotchas (`kobe api note`), the daemon forwards each to the repo's main session, and that session relays them to the in-flight tasks that benefit (`kobe api dispatch`). Web-hosted sessions receive the relays today.",dispatcherOn:"[x] Field-notes dispatcher (on)",dispatcherOff:"[ ] Field-notes dispatcher (off)"}},w6={title:"\u8BBE\u7F6E",esc:"esc",nav:{default:"j/k \u9009\u62E9 \xB7 h/l \u5207\u6362\u5C42\u7EA7 \xB7 enter \u786E\u8BA4 \xB7 esc \u5173\u95ED",feedback:"tab \u4E0B\u4E00\u9879 \xB7 enter \u53D1\u9001 \xB7 esc \u5173\u95ED"},sections:{general:"\u901A\u7528",engines:"\u5F15\u64CE",accounts:"\u8D26\u6237",keys:"\u5FEB\u6377\u952E",feedback:"\u53CD\u9988",dev:"\u5F00\u53D1"},general:{theme:"\u4E3B\u9898",themeHint:"l \u8FDB\u5165\u5217\u8868 \xB7 j/k \u9AD8\u4EAE \xB7 enter \u5E94\u7528",language:"\u8BED\u8A00",languageHint:"kobe \u754C\u9762\u7684\u663E\u793A\u8BED\u8A00\u3002l \u8FDB\u5165\u5217\u8868 \xB7 j/k \u9AD8\u4EAE \xB7 enter \u5E94\u7528\u3002",transparent:"\u900F\u660E\u80CC\u666F",transparentHint:"\u53BB\u6389\u6E32\u67D3\u5668\u7684\u80CC\u666F\u586B\u5145\uFF0C\u8BA9\u5BBF\u4E3B\u7EC8\u7AEF\u900F\u51FA\u6765\u3002\u6309 `t` \u5207\u6362\u3002",on:"[x] \u5F00",off:"[ ] \u5173",focusAccent:"\u805A\u7126\u5F3A\u8C03\u8272",focusAccentHint:"\u805A\u7126\u9762\u677F\u6807\u9898\u3001\u258C \u6807\u8BB0\u548C\u5206\u9694\u8FB9\u6846\u7684\u989C\u8272\u3002",accentPrimary:"\u4E3B\u8272\uFF08\u54C1\u724C\u5F3A\u8C03\u8272\uFF09",accentSuccess:"\u6210\u529F\u8272\uFF08\u4F20\u7EDF\u7EFF\uFF09",accentInfo:"\u4FE1\u606F\u8272\uFF08\u51B7\u84DD\uFF09",notifications:"\u901A\u77E5",notificationsHint:"\u540E\u53F0\u804A\u5929\u9875\u5B8C\u6210\u6216\u5728\u5BA1\u6279\u5904\u6682\u505C\u65F6\u89E6\u53D1\u3002Toast = \u53F3\u4E0B\u89D2\u5F39\u7A97\uFF1BSound = \u7EC8\u7AEF\u54CD\u94C3 + \u63D0\u793A\u97F3\u3002\u6807\u7B7E\u4E0A\u7684\u672A\u8BFB\u5706\u70B9\u59CB\u7EC8\u5F00\u542F\u3002",toast:"Toast \u5F39\u7A97",sound:"\u58F0\u97F3",zen:"\u7985\u6A21\u5F0F",zenHint:"`zen` \u6807\u8BB0\uFF08\u6587\u4EF6\u5217\u8868\u4E0A\u65B9\uFF09\u548C `prefix`+\u7A7A\u683C \u4F1A\u628A ChatTab \u6536\u8D77\u5230\u5F15\u64CE\u9762\u677F\u2014\u2014\u9690\u85CF\u6587\u4EF6\u4E0E\u7EC8\u7AEF\u9762\u677F\u3002\u4FDD\u6301\u5F00\u542F\u53EF\u8BA9 Tasks \u4FA7\u680F\u59CB\u7EC8\u53EF\u89C1\uFF0C\u65B9\u4FBF\u968F\u65F6\u9000\u51FA\u3002",zenKeepTasks:"\u7985\u6A21\u5F0F\u4E0B\u4FDD\u7559 Tasks \u9762\u677F",surface:"\u8BBE\u7F6E\u9875\u9762",surfaceHint:"\u8BBE\u7F6E\u53CA\u5176\u4ED6\u5B8C\u6574\u5BF9\u8BDD\u6846\uFF08\u65B0\u5EFA\u4EFB\u52A1\u3001\u91CD\u547D\u540D\uFF09\u7684\u6253\u5F00\u4F4D\u7F6E\u3002ChatTab = \u4E0E\u5F15\u64CE\u6807\u7B7E\u5E76\u5217\u7684\u72EC\u7ACB\u6574\u7A97\u9875\u9762\uFF1BTask panel = \u5DE6\u4FA7 Tasks \u9762\u677F\u5185\u7684\u6D6E\u5C42\u3002enter \u9009\u62E9\u3002",surfaceChattab:"ChatTab\uFF08\u72EC\u7ACB\u9875\u9762\uFF09",surfaceTaskpanel:"Task panel\uFF08\u9762\u677F\u5185\u6D6E\u5C42\uFF09",editor:"\u7F16\u8F91\u5668",editorHint:"\u6587\u4EF6\u6811\u91CC\u6309 `e` \u7528\u4EC0\u4E48\u6253\u5F00\u6587\u4EF6\uFF08enter \u4ECD\u662F\u53EA\u8BFB\u9884\u89C8\uFF09\u3002`auto`\uFF08\u9ED8\u8BA4\uFF09\u8DDF\u968F $VISUAL / $EDITOR\uFF0C\u5426\u5219\u81EA\u52A8\u63A2\u6D4B nvim / vim / emacs / nano\u3002\u5728\u4E0B\u65B9\u4E00\u884C\u6309 enter \u5728 auto / vim / nvim / nano / emacs / custom \u95F4\u5FAA\u73AF\uFF1B\u7F16\u8F91\u5668\u672A\u5B89\u88C5\u65F6\u56DE\u9000\u5230\u9884\u89C8\u3002",editorRow:"\u7F16\u8F91\u5668: < {kind} > (enter \u5207\u6362)",editorCustom:"\u81EA\u5B9A\u4E49: {cmd}",editorCustomUnset:"(\u672A\u8BBE\u7F6E \u2014 enter \u7F16\u8F91)"},engines:{title:"\u542F\u52A8\u547D\u4EE4",hint:"\u6BCF\u4E2A\u5F15\u64CE\u7684\u4EFB\u52A1\u9762\u677F\u8FD0\u884C\u7684\u547D\u4EE4\u3002\u5F53\u4E8C\u8FDB\u5236\u6587\u4EF6\u4E0D\u5728 PATH \u4E0A\u7684 `claude` / `codex` \u540D\u4E0B\uFF08\u6BD4\u5982\u53EB `cl`\uFF09\u3001\u8981\u4F20\u9ED8\u8BA4\u53C2\u6570\uFF0C\u6216\u8981\u6DFB\u52A0\u81EA\u5DF1\u7684\u5F15\u64CE\u65F6\uFF0C\u53EF\u8986\u76D6\u5185\u7F6E\u9879\u3002\u25CF = \u65B0\u4EFB\u52A1\u7684\u9ED8\u8BA4\u5F15\u64CE\uFF08\u4E5F\u53EF\u7528 Ctrl+Shift+T \u8BBE\u7F6E\uFF09\u3002enter \u7F16\u8F91\u547D\u4EE4 \xB7 r \u91CD\u547D\u540D \xB7 x \u91CD\u7F6E/\u79FB\u9664 \xB7 d \u8BBE\u4E3A\u9ED8\u8BA4\u3002",defaultTag:" (\u9ED8\u8BA4)",customTag:" (\u81EA\u5B9A\u4E49)",addEngine:"+ \u6DFB\u52A0\u5F15\u64CE"},accounts:{title:"\u8D26\u6237",hint:"\u672C\u5730\u63A2\u6D4B\u5230\u7684\u5F15\u64CE\u8D26\u6237\u7684\u53EA\u8BFB\u89C6\u56FE\u3002\u767B\u5F55\u6D41\u7A0B\u7A0D\u540E\u4F1A\u63A5\u5165\u8FD9\u91CC\u3002",checking:"\u68C0\u67E5\u4E2D\u2026",notLoggedIn:"\u25CB \u672A\u767B\u5F55",loggedIn:"\u25CF \u5DF2\u767B\u5F55: {email}",apiKeyConfigured:"\u25CF \u5DF2\u914D\u7F6E API key",chatgptLogin:"\u25CF ChatGPT \u767B\u5F55: {email}",tokenConfigured:"\u25CF \u5DF2\u914D\u7F6E Token ({source})",copilotDetected:"\u25CF \u68C0\u6D4B\u5230 Copilot \u767B\u5F55"},keybindings:{title:"\u5FEB\u6377\u952E",hint:"\u7F16\u8F91\u4E0B\u9762\u7684 YAML \u6765\u91CD\u7ED1\u5B9A\u6309\u952E\uFF0C\u7136\u540E\u91CD\u542F kobe\uFF08\u6216\u91CD\u5EFA\u9762\u677F\uFF09\u3002\u4EFB\u610F\u4F4D\u7F6E\u6309 F1 \u67E5\u770B\u5E26\u6BCF\u4E2A\u7ED1\u5B9A id \u7684\u5B9E\u65F6\u952E\u4F4D\u8868\u3002",configFile:"\u914D\u7F6E\u6587\u4EF6",notCreated:" (\u5C1A\u672A\u521B\u5EFA)",example:"\u793A\u4F8B",overridesApplied:"\u5DF2\u5E94\u7528\u7684\u8986\u76D6",none:"\u65E0",warnings:"\u8B66\u544A"},feedback:{title:"\u53CD\u9988",hint:"\u901A\u8FC7 `gh` \u5411 kobe \u4ED3\u5E93\u53D1\u4E00\u6761 GitHub Discussion\u3002\u9700\u8981 `gh auth login`\uFF1B\u5206\u7C7B\u9ED8\u8BA4\u4E3A Feedback\u3002",titleLabel:"\u6807\u9898",titlePlaceholder:"\u7B80\u77ED\u6982\u62EC",descriptionLabel:"\u63CF\u8FF0",descriptionPlaceholder:"\u53D1\u751F\u4E86\u4EC0\u4E48\uFF1F(enter \u53D1\u9001)",send:"[enter] \u53D1\u9001\u5230 GitHub Discussions"},dev:{reset:"\u91CD\u7F6E UI \u72B6\u6001",resetHint:"\u6E05\u7A7A ~/.config/kobe/state.json \u548C ~/.kobe/tasks.json\uFF0C\u7136\u540E\u9000\u51FA kobe\u2014\u2014\u91CD\u65B0\u542F\u52A8\u5373\u53EF\u4ECE\u5934\u5F00\u59CB\u3002\u5DE5\u4F5C\u4F1A\u8BDD / \u5F52\u6863\u5217\u8868\u3001\u9762\u677F\u5C3A\u5BF8\u3001\u4E3B\u9898\u3001\u6A21\u578B\u9009\u62E9\u90FD\u4F1A\u91CD\u7F6E\u3002\u78C1\u76D8\u4E0A\u7684 worktree \u548C Claude Code \u4F1A\u8BDD\u5386\u53F2\u4E0D\u53D7\u5F71\u54CD\u3002",resetButton:"[enter] \u91CD\u7F6E",restart:"\u91CD\u542F\u540E\u7AEF",restartHint:"\u505C\u6B62 kobe daemon \u5E76\u9000\u51FA\u5F53\u524D kobe \u7A97\u53E3\uFF0C\u4E0B\u6B21\u542F\u52A8\u4F1A\u62C9\u8D77\u4E00\u4E2A\u5168\u65B0\u7684 daemon\u2014\u2014\u65E0\u9700\u6740\u8FDB\u7A0B\u5373\u53EF\u5E94\u7528 daemon / orchestrator / engine \u7684\u6539\u52A8\u3002\u5176\u4ED6\u5DF2\u8FDE\u63A5\u7684 kobe \u7A97\u53E3\u4E5F\u4F1A\u65AD\u5F00\u8FDE\u63A5\u3002",restartButton:"[enter] \u91CD\u542F",doctorHint:"daemon \u5361\u4F4F\u6216\u65E0\u54CD\u5E94\uFF1F\u5728 shell \u91CC\u8FD0\u884C `kobe doctor` \u8BCA\u65AD\uFF0C\u6216 `kobe reset` \u505C\u6B62 daemon + \u6740\u6389\u4F1A\u8BDD\uFF08\u4FDD\u7559\u4F60\u7684\u4EFB\u52A1\uFF09\u3002\u53EA\u6709\u8981\u540C\u65F6\u6E05\u7A7A\u4EFB\u52A1\u7D22\u5F15 + UI \u72B6\u6001\u65F6\u624D\u7528 `kobe reset --hard`\u3002",experimental:"\u5B9E\u9A8C\u6027",remoteHint:"\u8FDC\u7A0B\u9879\u76EE\uFF08SSH\uFF09\uFF1A\u6CE8\u518C\u4E00\u4E2A git worktree + \u5F15\u64CE\u90FD\u901A\u8FC7 SSH \u8DD1\u5728\u53E6\u4E00\u53F0\u4E3B\u673A\u4E0A\u3001\u7531\u672C\u5730 kobe \u9A71\u52A8\u7684\u9879\u76EE\u3002\u5C1A\u672A\u5B8C\u6210\u2014\u2014\u6587\u4EF6/diff \u9762\u677F\u5BF9\u8FDC\u7A0B\u4ECD\u4F1A\u964D\u7EA7\u3002\u542F\u7528 `kobe add --remote`\u3002",remoteOn:"[x] \u8FDC\u7A0B\u9879\u76EE (\u5F00)",remoteOff:"[ ] \u8FDC\u7A0B\u9879\u76EE (\u5173)",autoStatusHint:"\u81EA\u52A8\u72B6\u6001\u6D41\u8F6C\uFF1Abacklog \u4EFB\u52A1\u5728\u5176\u5F15\u64CE\u5F00\u59CB\u4E00\u8F6E\u65F6\u79FB\u5230 in_progress\uFF0C\u65B0\u7684 claude \u4F1A\u8BDD\u4F1A\u62FF\u5230\u4E00\u6761\u7CFB\u7EDF\u63D0\u793A\uFF0C\u544A\u8BC9 agent \u5B8C\u6210\u540E\u81EA\u884C\u8BBE\u4E3A in_review\u3002\u7EDD\u4E0D\u89E6\u78B0 done/canceled\u3002",autoStatusOn:"[x] \u81EA\u52A8\u72B6\u6001\u6D41\u8F6C (\u5F00)",autoStatusOff:"[ ] \u81EA\u52A8\u72B6\u6001\u6D41\u8F6C (\u5173)",dispatcherHint:"\u73B0\u573A\u7B14\u8BB0\u8C03\u5EA6\u5668\uFF1A\u4EFB\u52A1\u4F1A\u8BDD\u63D0\u4EA4\u4E00\u884C\u7ECF\u9A8C\uFF08`kobe api note`\uFF09\uFF0Cdaemon \u5C06\u6BCF\u6761\u8F6C\u53D1\u7ED9\u4ED3\u5E93\u7684\u4E3B\u4F1A\u8BDD\uFF0C\u4E3B\u4F1A\u8BDD\u518D\u628A\u5B83\u4EEC\u8F6C\u8FBE\u7ED9\u80FD\u53D7\u76CA\u7684\u8FDB\u884C\u4E2D\u4EFB\u52A1\uFF08`kobe api dispatch`\uFF09\u3002\u76EE\u524D\u7531 Web \u6258\u7BA1\u7684\u4F1A\u8BDD\u4F1A\u6536\u5230\u8F6C\u8FBE\u3002",dispatcherOn:"[x] \u73B0\u573A\u7B14\u8BB0\u8C03\u5EA6\u5668 (\u5F00)",dispatcherOff:"[ ] \u73B0\u573A\u7B14\u8BB0\u8C03\u5EA6\u5668 (\u5173)"}}});var P6,v6;var m6=k(()=>{P6={view:{workspace:"Workspace",archives:"Archives"},header:{projects:"PROJECTS",tasks:"TASKS"},search:{placeholder:"fuzzy filter"},sort:"sort",project:{taskSingular:"task",taskPlural:"tasks"},moveChip:" move",empty:{noMatchSearch:"No matching tasks \u2014 esc to clear.",noActiveProject:"No active tasks for this project.",noArchivedProject:"No archived tasks for this project.",noActive:"No active tasks \u2014 press n or [+] to create one.",noArchived:"No archived tasks."},archiveHint:"a to unarchive",status:{done:"done",inReview:"in review",working:"working",backlog:"\u2014",canceled:"canceled",error:"error"},activity:{rateLimited:"rate limited",permissionNeeded:"needs permission",error:"error"},subtitle:{noTracking:"no activity tracking",materializing:"materializing"},hints:{headerFolded:"\u2500\u2500 keys ?\u25B8 \u2500\u2500",headerUnfolded:"\u2500\u2500 keys ?\u25BE \u2500\u2500",fullHelp:"full help",newTask:"new task",settings:"settings",open:"open",focusEngine:"focus engine",openWorktree:"open wt",delete:"delete",views:"views",project:"project",movePanes:"move panes",detach:"tasks\u2192detach",splits:"splits",panes:"panes",reorder:"reorder",done:"done"},toast:{noDaemonWorktree:"No daemon running \u2014 can't create the worktree",noDaemonOpen:"No daemon running \u2014 can't open this task",noEditor:"No editor found \u2014 set KOBE_OPEN_EDITOR (e.g. 'code', 'cursor', 'nvim')",openWorktreeFailed:"Couldn't open worktree with {label}",sessionStartFailed:"Couldn't start this task's session",moveTaskFailed:"Couldn't move task: {message}",alreadyLatest:"Already on the latest version (v{version})",worktreeErrorNotGit:"This project isn't a git repo yet \u2014 a task needs a git branch. Run `git init` (+ a first commit) in the project, then open the task. Non-git support is coming.",worktreeErrorGeneric:"Couldn't create the worktree: {message}"}},v6={view:{workspace:"\u5DE5\u4F5C\u533A",archives:"\u5F52\u6863"},header:{projects:"\u9879\u76EE",tasks:"\u4EFB\u52A1"},search:{placeholder:"\u6A21\u7CCA\u641C\u7D22"},sort:"\u6392\u5E8F",project:{taskSingular:"\u4E2A\u4EFB\u52A1",taskPlural:"\u4E2A\u4EFB\u52A1"},moveChip:" \u79FB\u52A8",empty:{noMatchSearch:"\u65E0\u5339\u914D\u4EFB\u52A1\u2014\u2014\u6309 esc \u6E05\u9664\u3002",noActiveProject:"\u8BE5\u9879\u76EE\u6682\u65E0\u6D3B\u8DC3\u4EFB\u52A1\u3002",noArchivedProject:"\u8BE5\u9879\u76EE\u6682\u65E0\u5F52\u6863\u4EFB\u52A1\u3002",noActive:"\u6682\u65E0\u6D3B\u8DC3\u4EFB\u52A1\u2014\u2014\u6309 n \u6216 [+] \u65B0\u5EFA\u3002",noArchived:"\u6682\u65E0\u5F52\u6863\u4EFB\u52A1\u3002"},archiveHint:"a \u53D6\u6D88\u5F52\u6863",status:{done:"\u5DF2\u5B8C\u6210",inReview:"\u5BA1\u6838\u4E2D",working:"\u8FDB\u884C\u4E2D",backlog:"\u2014",canceled:"\u5DF2\u53D6\u6D88",error:"\u9519\u8BEF"},activity:{rateLimited:"\u8BF7\u6C42\u53D7\u9650",permissionNeeded:"\u7B49\u5F85\u6388\u6743",error:"\u9519\u8BEF"},subtitle:{noTracking:"\u4E0D\u8DDF\u8E2A\u6D3B\u52A8",materializing:"\u6B63\u5728\u521B\u5EFA worktree"},hints:{headerFolded:"\u2500\u2500 \u5FEB\u6377\u952E ?\u25B8 \u2500\u2500",headerUnfolded:"\u2500\u2500 \u5FEB\u6377\u952E ?\u25BE \u2500\u2500",fullHelp:"\u5B8C\u6574\u5E2E\u52A9",newTask:"\u65B0\u5EFA\u4EFB\u52A1",settings:"\u8BBE\u7F6E",open:"\u6253\u5F00",focusEngine:"\u805A\u7126\u5F15\u64CE",openWorktree:"\u6253\u5F00 worktree",delete:"\u5220\u9664",views:"\u89C6\u56FE",project:"\u9879\u76EE",movePanes:"\u79FB\u52A8\u9762\u677F",detach:"\u4EFB\u52A1\u2192\u5206\u79BB",splits:"\u5206\u5272",panes:"\u9762\u677F",reorder:"\u91CD\u65B0\u6392\u5E8F",done:"\u5B8C\u6210"},toast:{noDaemonWorktree:"\u5B88\u62A4\u8FDB\u7A0B\u672A\u8FD0\u884C\u2014\u2014\u65E0\u6CD5\u521B\u5EFA worktree",noDaemonOpen:"\u5B88\u62A4\u8FDB\u7A0B\u672A\u8FD0\u884C\u2014\u2014\u65E0\u6CD5\u6253\u5F00\u6B64\u4EFB\u52A1",noEditor:"\u672A\u627E\u5230\u7F16\u8F91\u5668\u2014\u2014\u8BF7\u8BBE\u7F6E KOBE_OPEN_EDITOR\uFF08\u5982 'code'\u3001'cursor'\u3001'nvim'\uFF09",openWorktreeFailed:"\u65E0\u6CD5\u7528 {label} \u6253\u5F00 worktree",sessionStartFailed:"\u65E0\u6CD5\u542F\u52A8\u6B64\u4EFB\u52A1\u7684\u4F1A\u8BDD",moveTaskFailed:"\u65E0\u6CD5\u79FB\u52A8\u4EFB\u52A1\uFF1A{message}",alreadyLatest:"\u5DF2\u662F\u6700\u65B0\u7248\u672C\uFF08v{version}\uFF09",worktreeErrorNotGit:"\u8BE5\u9879\u76EE\u5C1A\u975E git \u4ED3\u5E93\u2014\u2014\u4EFB\u52A1\u9700\u8981 git \u5206\u652F\u3002\u8BF7\u5728\u9879\u76EE\u4E2D\u6267\u884C `git init`\uFF08+ \u9996\u6B21\u63D0\u4EA4\uFF09\u540E\u518D\u6253\u5F00\u4EFB\u52A1\u3002\u975E git \u9879\u76EE\u7684\u652F\u6301\u5373\u5C06\u63A8\u51FA\u3002",worktreeErrorGeneric:"\u65E0\u6CD5\u521B\u5EFA worktree\uFF1A{message}"}}});var c6,n6;var d6=k(()=>{c6={pageTitle:"KOBE UPDATE",current:"current",latest:"latest",releaseUrlUnavailable:"release URL unavailable",statusReleaseOpened:"Opened release page in your browser.",statusReleaseError:"Could not open release URL.",statusRunningUpdater:"Leaving the TUI page and running the updater in this tmux window...",loadingNotes:"Loading release notes...",notesUnavailable:"Release notes are unavailable. Use Open release to view the GitHub release page.",changesSectionHeader:"\u2500\u2500 changes from v{from} to v{to} \u2500\u2500",updateComplete:"kobe update complete. Relaunch kobe to use the new version.",updateFailed:"kobe update failed with exit code {code}.",pressAnyKey:"Press any key to close this update window.",actions:{updateNow:"Update now",openRelease:"Open release",close:"Close",closeDetail:"return to the previous tmux window"},skew:{title:"\u26A0 DAEMON OUT OF DATE",olderBuild:"an older build",hint:"daemon is {daemon} \u2014 you launched v{clientVersion}. Run `kobe daemon restart` then `kobe reload`"}},n6={pageTitle:"KOBE \u66F4\u65B0",current:"\u5F53\u524D",latest:"\u6700\u65B0",releaseUrlUnavailable:"\u53D1\u5E03\u94FE\u63A5\u4E0D\u53EF\u7528",statusReleaseOpened:"\u5DF2\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u53D1\u5E03\u8BF4\u660E\u9875\u9762\u3002",statusReleaseError:"\u65E0\u6CD5\u6253\u5F00\u53D1\u5E03\u94FE\u63A5\u3002",statusRunningUpdater:"\u6B63\u5728\u79BB\u5F00 TUI \u9875\u9762\uFF0C\u5E76\u5728\u6B64 tmux \u7A97\u53E3\u4E2D\u8FD0\u884C\u66F4\u65B0\u7A0B\u5E8F\u2026\u2026",loadingNotes:"\u6B63\u5728\u52A0\u8F7D\u53D1\u5E03\u8BF4\u660E\u2026\u2026",notesUnavailable:"\u53D1\u5E03\u8BF4\u660E\u4E0D\u53EF\u7528\u3002\u8BF7\u4F7F\u7528\u300C\u6253\u5F00\u53D1\u5E03\u9875\u300D\u67E5\u770B GitHub \u53D1\u5E03\u9875\u9762\u3002",changesSectionHeader:"\u2500\u2500 v{from} \u81F3 v{to} \u7684\u53D8\u66F4 \u2500\u2500",updateComplete:"kobe \u66F4\u65B0\u5B8C\u6210\u3002\u8BF7\u91CD\u65B0\u542F\u52A8 kobe \u4EE5\u4F7F\u7528\u65B0\u7248\u672C\u3002",updateFailed:"kobe \u66F4\u65B0\u5931\u8D25\uFF0C\u9000\u51FA\u7801\u4E3A {code}\u3002",pressAnyKey:"\u6309\u4EFB\u610F\u952E\u5173\u95ED\u6B64\u66F4\u65B0\u7A97\u53E3\u3002",actions:{updateNow:"\u7ACB\u5373\u66F4\u65B0",openRelease:"\u6253\u5F00\u53D1\u5E03\u9875",close:"\u5173\u95ED",closeDetail:"\u8FD4\u56DE\u4E0A\u4E00\u4E2A tmux \u7A97\u53E3"},skew:{title:"\u26A0 DAEMON \u7248\u672C\u4E0D\u4E00\u81F4",olderBuild:"\u65E7\u7248\u672C\u6784\u5EFA",hint:"daemon \u8FD0\u884C\u7684\u662F {daemon}\uFF0C\u800C\u4F60\u542F\u52A8\u7684\u662F v{clientVersion}\u3002\u8BF7\u8FD0\u884C `kobe daemon restart` \u518D\u8FD0\u884C `kobe reload`"}}});function EX(f){return typeof f==="string"&&bz.some((J)=>J.id===f)}var xN,wN,bz,kG,NG="en";var yG=k(()=>{U6();M6();A6();C6();y6();I6();E6();h6();m6();d6();xN={settings:x6,tasks:P6,files:D6,newTask:k6,ops:b6,update:c6,quickTask:T6,help:F6,common:V6,keys:g6},wN={settings:w6,tasks:v6,files:L6,newTask:N6,ops:S6,update:n6,quickTask:u6,help:O6,common:K6,keys:R6},bz=[{id:"en",label:"English"},{id:"zh",label:"\u4E2D\u6587"}],kG={en:xN,zh:wN}});function xX(f){if(kG[f])hN("lang",f)}function oj(){return _j.lang}function i6(f,J){let Y=f;for(let z of J.split("."))if(Y&&typeof Y==="object"&&z in Y)Y=Y[z];else return;return typeof Y==="string"?Y:void 0}function PN(f,J){if(!J)return f;return f.replace(/\{(\w+)\}/g,(Y,z)=>(z in J)?String(J[z]):Y)}function F(f,J){let Y=_j.lang,z=i6(kG[Y],f)??i6(kG.en,f)??f;return PN(z,J)}function sj(f,J){let Y=_j.lang,z=(G)=>{return G.keys[f]?.[J]};return z(kG[Y])??z(kG.en)??J}var _j,hN;var G1=k(()=>{CG();yG();yG();[_j,hN]=uJ({lang:NG})});function vN(f){let J=[],Y=f.name;if(Y)J.push(Y);if(Y==="return")J.push("enter");if(Y==="enter")J.push("return");let z=[];if(f.ctrl)z.push("ctrl");if(f.meta)z.push("cmd");if(f.option)z.push("alt");if(f.shift&&Y&&Y.length>1)z.push("shift");if(z.length===0)return J;let G=`${z.join("+")}+`;return J.map((X)=>G+X)}function tj(f,J){if(J.defaultPrevented)return!1;let Y=vN(J);for(let z=f.length-1;z>=0;z--){let G=f[z];if(!G)continue;let X=G.config();if(X.enabled===!1)continue;let q=X.bindings.find((Q)=>Y.includes(Q.key));if(q)return q.cmd(J,q.slot),J.preventDefault(),!0}return!1}function cN(){if(ej)return;let f=Y1();if(!f)throw Error("useBindings: no renderer in scope; call inside a component rendered by @opentui/solid.");ej=f.keyInput,l6=(J)=>{tj(KQ,J)},ej.on("keypress",l6)}function Uf(f){cN();let J=mN++,Y={config:f,id:J};zf(()=>{f()}),KQ.push(Y),mf(()=>{let z=KQ.findIndex((G)=>G.id===J);if(z>=0)KQ.splice(z,1)})}var mN=1,KQ,ej=null,l6=null;var b1=k(()=>{h();Wf();KQ=[]});import{RGBA as a6}from"@opentui/core";function iN(f){let J=TJ(),Y=i0(),{theme:z}=Y,G=Y1(),X=!1,q=()=>{if(f.size==="xlarge")return 140;if(f.size==="large")return 110;if(f.size==="small")return 50;return 80},Q=2,H=()=>Math.max(8,J().height-Q*2);return(()=>{var B=W("box"),V=W("box");return D(B,V),Z(B,"onMouseDown",()=>{X=!!G?.getSelection()}),Z(B,"onMouseUp",()=>{if(X){X=!1;return}f.onClose?.()}),Z(B,"alignItems","center"),Z(B,"justifyContent","center"),Z(B,"position","absolute"),Z(B,"zIndex",3000),Z(B,"left",0),Z(B,"top",0),Z(V,"onMouseUp",(j)=>{X=!1,j.stopPropagation()}),Z(V,"flexShrink",1),Z(V,"flexGrow",0),Z(V,"paddingTop",1),K(V,()=>f.children),u((j)=>{var U=J().width,L=J().height,O=Y.transparentBackground?dN:nN,M=q(),R=J().width-2,S=H(),a=z.backgroundDialog;return U!==j.e&&(j.e=Z(B,"width",U,j.e)),L!==j.t&&(j.t=Z(B,"height",L,j.t)),O!==j.a&&(j.a=Z(B,"backgroundColor",O,j.a)),M!==j.o&&(j.o=Z(V,"width",M,j.o)),R!==j.i&&(j.i=Z(V,"maxWidth",R,j.i)),S!==j.n&&(j.n=Z(V,"maxHeight",S,j.n)),a!==j.s&&(j.s=Z(V,"backgroundColor",a,j.s)),j},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),B})()}function lN(){let[f,J]=uJ({stack:[],size:"medium"}),Y=Y1(),z=null;function G(){setTimeout(()=>{if(!z)return;if(z.isDestroyed)return;function X(Q){for(let H of Q.getChildren()){if(H===z)return!0;if(X(H))return!0}return!1}let q=Y?.root;if(!q)return;if(!X(q))return;z.focus()},1)}return Uf(()=>({enabled:f.stack.length>0&&!Y?.getSelection()?.getSelectedText(),bindings:[{key:"escape",cmd:()=>{if(Y?.getSelection())Y.clearSelection();f.stack.at(-1)?.onClose?.(),J("stack",f.stack.slice(0,-1)),G()}},{key:"ctrl+c",cmd:()=>{if(Y?.getSelection())Y.clearSelection();f.stack.at(-1)?.onClose?.(),J("stack",f.stack.slice(0,-1)),G()}}]})),{clear(){for(let X of f.stack)X.onClose?.();KZ(()=>{J("size","medium"),J("stack",[])}),G()},replace(X,q){if(f.stack.length===0)z=Y?.currentFocusedRenderable??null,z?.blur();for(let Q of f.stack)Q.onClose?.();J("size","medium"),J("stack",[{element:X,onClose:q}])},push(X,q){if(f.stack.length===0)z=Y?.currentFocusedRenderable??null,z?.blur();J("stack",[...f.stack,{element:X,onClose:q}])},pop(){if(f.stack.at(-1)?.onClose?.(),J("stack",f.stack.slice(0,-1)),f.stack.length===0)G()},get stack(){return f.stack},get size(){return f.size},setSize(X){J("size",X)}}}function r6(f){let J=lN();return b($6.Provider,{value:J,get children(){return[I0(()=>f.children),(()=>{var Y=W("box");return Z(Y,"position","absolute"),Z(Y,"zIndex",3000),K(Y,b(X0,{get when(){return J.stack.length},get children(){return b(iN,{onClose:()=>J.clear(),get size(){return J.size},get children(){return J.stack.at(-1).element()}})}})),Y})()]}})}function vf(){let f=u1($6);if(!f)throw Error("useDialog must be used within a DialogProvider");return f}var nN,dN,$6;var P1=k(()=>{h();h();h();h();h();h();h();h();Wf();CG();xf();b1();nN=a6.fromInts(0,0,0,128),dN=a6.fromInts(0,0,0,64);$6=gJ()});import{spawnSync as f8}from"child_process";import*as _6 from"fs";function p6(f){return`This folder isn't a git repository yet, and a task needs a git branch to work in. To fix it, turn ${f} into a repo: git init && git add -A && git commit -m "init" \u2014 then create the task again. (Working in non-git folders is coming soon.)`}function o6(f){let J=f.trim();if(!J)return"repo path is required";let Y;try{Y=_6.statSync(J)}catch{return`path does not exist: ${J}`}if(!Y.isDirectory())return`not a directory: ${J}`;try{if(f8("git",["rev-parse","--git-dir"],{cwd:J,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]}).status!==0)return p6(J)}catch{return p6(J)}return null}function wX(f){if(!f)return null;try{let J=f8("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:f,encoding:"utf-8",timeout:2000,stdio:["ignore","pipe","ignore"]});if(J.status!==0)return null;let Y=J.stdout.trim();if(!Y||Y==="HEAD")return null;return Y}catch{return null}}function s6(f){if(!f)return[];try{let J=f8("git",["for-each-ref","--format=%(refname:short)","refs/heads/"],{cwd:f,encoding:"utf-8",timeout:2000});if(J.status!==0)return[];return J.stdout.split(`
|
|
223
|
+
`).map((Y)=>Y.trim()).filter(Boolean).sort((Y,z)=>{let G=(Q)=>Q==="main"?0:Q==="master"?1:Q==="develop"?2:3,X=G(Y),q=G(z);if(X!==q)return X-q;return Y.localeCompare(z)})}catch{return[]}}var LJ="main";var UQ=()=>{};import*as t6 from"fs";import*as DQ from"os";function W1(f){if(f==="~")return DQ.homedir();if(f.startsWith("~/"))return DQ.homedir()+f.slice(1);return f}function J8(f){if(!f)return{base:"",filter:""};let Y=W1(f==="~"?"~/":f);if(Y.endsWith("/"))return{base:Y,filter:""};let z=Y.lastIndexOf("/");if(z===-1)return{base:"",filter:Y};return{base:Y.slice(0,z+1),filter:Y.slice(z+1)}}function Y8(f){if(!f)return[];try{let J=t6.readdirSync(f,{withFileTypes:!0}),Y=[];for(let z of J)if(z.isDirectory())Y.push(z.name);return Y.sort((z,G)=>z.localeCompare(G))}catch{return[]}}function z8(f,J){let Y=J.toLowerCase(),G=Y.startsWith(".")?f:f.filter((X)=>!X.startsWith("."));if(!Y)return G;return G.filter((X)=>X.toLowerCase().startsWith(Y))}function hX(f,J,Y){let z=J+Y;if(f.startsWith("~")){let G=DQ.homedir();if(z===G)return"~";if(z.startsWith(`${G}/`))return`~${z.slice(G.length)}`}return z}var LQ=()=>{};import{spawn as aN}from"child_process";import*as Sz from"fs";import*as PX from"path";function e6(f){let J=f.trim().replace(/\/+$/,"");if(!J)return"";let Y=J.lastIndexOf("/"),z=J.lastIndexOf(":"),G=Math.max(Y,z);return(G>=0?J.slice(G+1):J).replace(/\.git$/i,"")}function f4(f){let J=f.trim();if(!J)return F("newTask.error.gitUrlRequired");let Y=J.includes("://"),z=J.includes("@")&&J.includes(":"),G=J.includes("/");if(!Y&&!z&&!G)return F("newTask.error.gitUrlInvalid",{url:J});return null}function J4(f,J){let Y=J.trim();if(!Y)return F("newTask.error.folderRequired");if(Y.includes("/")||Y.includes("\\"))return F("newTask.error.folderHasSeparator");let z=f.trim();if(!z)return F("newTask.error.parentRequired");let G=W1(z),X;try{X=Sz.statSync(G)}catch{return F("newTask.error.parentNotFound",{path:G})}if(!X.isDirectory())return F("newTask.error.parentNotDir",{path:G});let q=PX.join(G,Y);if(Sz.existsSync(q))return F("newTask.error.targetExists",{path:q});return null}function Y4(f,J){return PX.join(W1(f.trim()),J.trim())}function z4(f,J){let Y=J.trim();if(!Y)return J;let z=W1(f.trim());if(!z)return J;try{if(!Sz.statSync(z).isDirectory())return J}catch{return J}if(!Sz.existsSync(PX.join(z,Y)))return Y;for(let G=2;G<1000;G++){let X=`${Y}-${G}`;if(!Sz.existsSync(PX.join(z,X)))return X}return Y}function G4(f,J,Y){return new Promise((z)=>{let G="";try{let X=aN("git",["clone","--progress",f,J],{stdio:["ignore","ignore","pipe"]});X.stderr?.setEncoding("utf-8"),X.stderr?.on("data",(q)=>{if(G+=q,Y){let Q=q.split(/[\r\n]+/).filter((B)=>B.trim().length>0),H=Q[Q.length-1];if(H)Y(H)}}),X.on("error",(q)=>{z({ok:!1,error:q.message})}),X.on("close",(q)=>{if(q===0){z({ok:!0,path:J});return}let Q=G.split(/[\r\n]+/).filter((H)=>H.trim().length>0).pop()??`git clone exited with ${q}`;z({ok:!1,error:Q})})}catch(X){z({ok:!1,error:X instanceof Error?X.message:String(X)})}})}var X4=k(()=>{G1();LQ()});function MQ(f){if(f==="existing")return"clone";if(f==="clone")return"adopt";return"existing"}function Z4(f){if(f==="existing")return"adopt";if(f==="clone")return"existing";return"clone"}function q4(f,J){let Y=f.trim();if(J.includes(Y))return"saved";if(Y.startsWith("~"))return"browse";if(Y.includes("/"))return"browse";return"saved"}function X1(f){return f.replace(/[\r\n]+/g,"")}function G8(f,J="existing"){if(f==="confirm")return"tabs";if(f==="tabs")return"engine";if(f==="engine")return X8(J);if(J==="clone"){if(f==="cloneUrl")return"cloneParent";if(f==="cloneParent")return"cloneFolder";if(f==="cloneFolder")return"cloneBaseRef";if(f==="cloneBaseRef")return"confirm";return"cloneUrl"}if(J==="adopt")return f==="adoptFilter"?"confirm":"adoptFilter";if(f==="repo")return"baseRef";if(f==="baseRef")return"confirm";return"repo"}function X8(f){if(f==="clone")return"cloneUrl";if(f==="adopt")return"adoptFilter";return"repo"}function Q4(f,J){let Y=J.trim();if(!Y)return f;return f.filter((z)=>_X(Y,z.path))}function H4(f,J){let Y=new Set,z=[];for(let G of[f,...J]){let X=G.trim();if(!X||Y.has(X))continue;Y.add(X),z.push(X)}return z}function B4(f,J){let Y=J.trim().toLowerCase();if(!Y)return f;return f.filter((z)=>z.toLowerCase().includes(Y))}function j4(f,J){let Y=J.trim().toLowerCase();if(!Y)return f;return f.filter((z)=>z.toLowerCase().includes(Y))}function vX(f,J,Y=$N){let z=f.length;if(z<=Y)return{items:f,start:0,total:z};let G=Math.floor(Y/2),X=Math.max(0,J-G);if(X+Y>z)X=z-Y;return{items:f.slice(X,X+Y),start:X,total:z}}function EJ(f,J){if(J<=0)return 0;return Math.max(0,Math.min(J-1,f))}function W4(f,J,Y){let z=J[Y];if(z)return z;return f.trim()||LJ}var $N=8;var Z8=k(()=>{vQ();UQ()});import{TextAttributes as _1}from"@opentui/core";function V4(f){let J=vf(),{theme:Y}=i0(),[z,G]=r("existing"),X=()=>{let d=f.availableVendors;return d&&d.length>0?d:cf},q=(()=>{let d=X(),s=f.defaultVendor??"claude";return d.includes(s)?s:d[0]??"claude"})(),[Q,H]=r(q),[B,V]=r("tabs"),[j,U]=r(f.defaultRepo),[L,O]=r(wX(W1(f.defaultRepo.trim()))??LJ),[M,R]=r(!1),[S,a]=r(""),[N,g]=r(f.defaultCloneParent?.trim()?f.defaultCloneParent:"~/"),[C,y]=r(""),[_,z0]=r(!1),[t,Y0]=r(LJ),[T,Q0]=r(!1),[p,D0]=r(""),g0=U0(()=>H4(f.defaultRepo,f.savedRepos)),$=U0(()=>q4(j(),g0())),E=U0(()=>J8(j())),f0=U0(()=>Y8(E().base)),I=U0(()=>z8(f0(),E().filter)),G0=U0(()=>B4(g0(),j())),x=U0(()=>$()==="browse"?I():G0()),[c,Z0]=r(0),V0=U0(()=>vX(x(),c())),[H0,y0]=r(!1),w0=U0(()=>s6(W1(j().trim()))),T0=U0(()=>j4(w0(),L())),[r0,P]=r(0),M0=U0(()=>vX(T0(),r0())),J0=U0(()=>J8(N())),F0=U0(()=>Y8(J0().base)),a0=U0(()=>z8(F0(),J0().filter)),[p0,u0]=r(0),_0=U0(()=>vX(a0(),p0())),[n,q0]=r(!1),[b0,o0]=r(""),[l0,$0]=r(0),[t0,Rf]=r(new Set),[Af]=VZ(()=>z()==="adopt"?W1(j().trim()):null,async(d)=>f.discoverAdoptable?await f.discoverAdoptable(d):[]),o=U0(()=>Q4(Af()??[],b0())),e=U0(()=>vX(o().map((d)=>d.path),l0())),B0=U0(()=>{let d=e();return o().slice(d.start,d.start+d.items.length)});zf(()=>{o(),$0((d)=>EJ(d,o().length))});function C0(d){Rf((s)=>{let S0=new Set(s);if(S0.has(d))S0.delete(d);else S0.add(d);return S0})}function A(){let d=o()[l0()];if(d)C0(d.path)}zf(()=>{T0(),P(0)}),zf(()=>{let d=W1(j().trim());if(!d)return;if(M())return;let s=wX(d);if(s)O(s)}),zf(()=>{x(),Z0(0)}),zf(()=>{a0(),u0(0)}),zf(()=>{let d=S(),s=N();if(_())return;let S0=e6(d);y(z4(s,S0))});let[P0,K0]=r(null);zf(()=>{j(),S(),N(),C(),b0(),K0(null)});function E0(){let d=W1(j().trim());if(!d)return;let s=o6(d);if(s){K0(s),V("repo");return}let S0=L().trim()||LJ;f.onSubmit({repo:d,baseRef:S0,vendor:Q()}),J.clear()}async function W0(){if(T())return;let d=f4(S());if(d){K0(d),V("cloneUrl");return}let s=J4(N(),C());if(s){K0(s),V(C().trim()?"cloneParent":"cloneFolder");return}let S0=Y4(N(),C());Q0(!0),D0(F("newTask.clone.progressInto",{target:S0}));let N0=await G4(S().trim(),S0,(tf)=>{D0(tf)});if(Q0(!1),!N0.ok){K0(F("newTask.error.cloneFailed",{error:N0.error})),V("cloneUrl");return}let Z1=t().trim()||LJ,V1=W1(N().trim());f.onSubmit({repo:N0.path,baseRef:Z1,vendor:Q(),cloned:{parentDir:V1}}),J.clear()}function L0(){let d=o();if(d.length===0){K0(F("newTask.error.noAdoptable"));return}let s=t0(),S0=s.size>0?d.filter((N0)=>s.has(N0.path)):d.slice(l0(),l0()+1);if(S0.length===0)return;f.onSubmit({mode:"adopt",repo:W1(j().trim()),vendor:Q(),adopt:S0.map((N0)=>({worktreePath:N0.path,branch:N0.branch}))}),J.clear()}function R0(){if(z()==="clone"){W0();return}if(z()==="adopt"){L0();return}E0()}function Jf(d){if(T())return;if(d===z())return;G(d),V(X8(d)),K0(null)}function Yf(d){if(T())return;let s=d===1?MQ(z()):Z4(z());if(s===z())return;G(s),K0(null),V("tabs")}function n0(d){H((s)=>d===1?ZY(X(),s):mQ(X(),s))}function yf(){if(!j().trim()&&$()==="saved"){let s=x()[0];if(s){U(s),V("baseRef");return}}if($()==="browse"){let S0=I()[c()],N0=E();if(S0){U(hX(j(),N0.base,S0)),Z0(0),y0(!0),V("baseRef");return}V("baseRef");return}let d=x()[c()];if(d){U(d),V("baseRef");return}V("baseRef")}function k0(d){let S0=x()[d];if(!S0)return;if($()==="browse"){let N0=E();U(hX(j(),N0.base,S0)),Z0(d),y0(!0),V("baseRef");return}U(S0),Z0(d),V("baseRef")}function wf(){let s=a0()[p0()],S0=J0();if(s){g(hX(N(),S0.base,s)),u0(0),q0(!0),V("cloneFolder");return}V("cloneFolder")}function v(d){let S0=a0()[d];if(!S0)return;let N0=J0();g(hX(N(),N0.base,S0)),u0(d),q0(!0),V("cloneFolder")}let A0=()=>{let d=o();if(d.length===0)return;let s=d.every((S0)=>t0().has(S0.path));Rf(s?new Set:new Set(d.map((S0)=>S0.path)))};Uf(()=>({bindings:[{key:"tab",cmd:()=>V((d)=>G8(d,z()))},{key:"ctrl+]",cmd:()=>Jf(MQ(z()))},{key:"ctrl+[",cmd:()=>Jf(MQ(z()))},{key:"ctrl+e",cmd:()=>H((d)=>ZY(X(),d))},{key:"up",cmd:()=>{if(T())return;if(z()==="existing"&&B()==="repo"){let d=x();if(d.length===0)return;Z0(EJ(c()-1,d.length));return}if(z()==="existing"&&B()==="baseRef"){let d=T0();if(d.length===0)return;P(EJ(r0()-1,d.length));return}if(z()==="clone"&&B()==="cloneParent"){let d=a0();if(d.length===0)return;u0(EJ(p0()-1,d.length));return}if(z()==="adopt"){let d=o();if(d.length===0)return;$0(EJ(l0()-1,d.length))}}},{key:"down",cmd:()=>{if(T())return;if(z()==="existing"&&B()==="repo"){let d=x();if(d.length===0)return;Z0(EJ(c()+1,d.length));return}if(z()==="existing"&&B()==="baseRef"){let d=T0();if(d.length===0)return;P(EJ(r0()+1,d.length));return}if(z()==="clone"&&B()==="cloneParent"){let d=a0();if(d.length===0)return;u0(EJ(p0()+1,d.length));return}if(z()==="adopt"){let d=o();if(d.length===0)return;$0(EJ(l0()+1,d.length))}}},...B()==="tabs"||B()==="engine"?[{key:"left",cmd:()=>B()==="tabs"?Yf(-1):n0(-1)},{key:"right",cmd:()=>B()==="tabs"?Yf(1):n0(1)},{key:"return",cmd:()=>V((d)=>G8(d,z()))}]:[],...z()==="adopt"?[{key:"ctrl+a",cmd:A0}]:[]]})),Uf(()=>({enabled:B()==="confirm"&&!T(),bindings:[{key:"return",cmd:()=>R0()}]}));let Bf=(d)=>B()===d?Y.primary:Y.textMuted,Ff=(d)=>B()===d?_1.BOLD|_1.UNDERLINE:void 0,Qf=(d,s)=>d?s?_1.BOLD|_1.UNDERLINE:_1.BOLD:void 0;return(()=>{var d=W("box"),s=W("box"),S0=W("text"),N0=W("box"),Z1=W("box"),V1=W("text"),tf=W("box"),v1=W("box"),xJ=W("text"),M1=W("box"),wJ=W("text"),GY=W("text");return D(d,s),D(d,N0),D(d,M1),Z(d,"paddingLeft",2),Z(d,"paddingRight",2),Z(d,"gap",0),D(s,S0),Z(s,"flexDirection","row"),K(S0,()=>F("newTask.title")),D(N0,Z1),Z(N0,"gap",1),Z(N0,"paddingTop",1),Z(N0,"paddingBottom",1),K(N0,()=>{let m=()=>B()==="tabs",i=(l)=>l?Y.primary:Y.textMuted;return(()=>{var l=W("box"),w=W("text"),m0=W("text"),v0=W("text");return D(l,w),D(l,m0),D(l,v0),Z(l,"flexDirection","row"),Z(l,"gap",2),Z(w,"onMouseUp",()=>Jf("existing")),K(w,(()=>{var O0=I0(()=>z()==="existing");return()=>O0()?`\u25B8 ${F("newTask.tabs.existing")}`:` ${F("newTask.tabs.existing")}`})()),Z(m0,"onMouseUp",()=>Jf("clone")),K(m0,(()=>{var O0=I0(()=>z()==="clone");return()=>O0()?`\u25B8 ${F("newTask.tabs.clone")}`:` ${F("newTask.tabs.clone")}`})()),Z(v0,"onMouseUp",()=>Jf("adopt")),K(v0,(()=>{var O0=I0(()=>z()==="adopt");return()=>O0()?`\u25B8 ${F("newTask.tabs.adopt")}`:` ${F("newTask.tabs.adopt")}`})()),u((O0)=>{var c0=i(z()==="existing"),qf=Qf(z()==="existing",m()),Df=i(z()==="clone"),q1=Qf(z()==="clone",m()),s1=i(z()==="adopt"),XY=Qf(z()==="adopt",m());return c0!==O0.e&&(O0.e=Z(w,"fg",c0,O0.e)),qf!==O0.t&&(O0.t=Z(w,"attributes",qf,O0.t)),Df!==O0.a&&(O0.a=Z(m0,"fg",Df,O0.a)),q1!==O0.o&&(O0.o=Z(m0,"attributes",q1,O0.o)),s1!==O0.i&&(O0.i=Z(v0,"fg",s1,O0.i)),XY!==O0.n&&(O0.n=Z(v0,"attributes",XY,O0.n)),O0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),l})()},Z1),D(Z1,V1),D(Z1,tf),Z(Z1,"gap",0),K(V1,()=>F("newTask.field.engine")),D(tf,v1),D(tf,xJ),Z(tf,"flexDirection","row"),Z(tf,"gap",2),K(tf,b(Zf,{get each(){return X()},children:(m)=>{let i=()=>Q()===m;return(()=>{var l=W("text");return Z(l,"onMouseUp",()=>H(m)),K(l,()=>i()?"\u25B8 ":" ",null),K(l,m,null),u((w)=>{var m0=i()?Y.primary:Y.textMuted,v0=i()?_1.BOLD:void 0;return m0!==w.e&&(w.e=Z(l,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(l,"attributes",v0,w.t)),w},{e:void 0,t:void 0}),l})()}}),v1),Z(v1,"flexGrow",1),K(xJ,()=>F("newTask.hint.engineCycle")),K(N0,b(X0,{get when(){return z()==="existing"},get children(){return[(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.repo")),Z(l,"onInput",(w)=>{y0(!1),U(X1(w))}),Z(l,"onSubmit",()=>{if(!j().trim())return;yf()}),u((w)=>{var m0=Bf("repo"),v0=Ff("repo"),O0=j(),c0=f.defaultRepo,qf=B()==="repo";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"placeholder",c0,w.o)),qf!==w.i&&(w.i=Z(l,"focused",qf,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),b(X0,{get when(){return I0(()=>B()==="repo"&&x().length>0)()&&!H0()},get children(){var m=W("box");return Z(m,"gap",0),Z(m,"paddingLeft",2),K(m,b(X0,{get when(){return V0().start>0},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:V0().start})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),K(m,b(Zf,{get each(){return V0().items},children:(i,l)=>{let w=()=>V0().start+l(),m0=()=>w()===c(),v0=()=>$()==="saved"&&i===f.defaultRepo,O0=()=>$()==="saved"&&j().trim()===i,c0=()=>$()==="browse"?"/":"",qf=()=>v0()?` ${F("newTask.hint.currentDir")}`:"";return(()=>{var Df=W("text");return Z(Df,"wrapMode","none"),Z(Df,"onMouseUp",()=>k0(w())),K(Df,()=>m0()?"\u25B8 ":" ",null),K(Df,i,null),K(Df,c0,null),K(Df,qf,null),u((q1)=>{var s1=m0()?Y.primary:O0()?Y.accent:Y.textMuted,XY=m0()?_1.BOLD:void 0;return s1!==q1.e&&(q1.e=Z(Df,"fg",s1,q1.e)),XY!==q1.t&&(q1.t=Z(Df,"attributes",XY,q1.t)),q1},{e:void 0,t:void 0}),Df})()}}),null),K(m,b(X0,{get when(){return V0().start+V0().items.length<V0().total},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:V0().total-V0().start-V0().items.length})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),m}}),(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.fromBranch")),Z(l,"placeholder",LJ),Z(l,"onInput",(w)=>{R(!0),O(X1(w))}),Z(l,"onSubmit",()=>{O(W4(L(),T0(),r0())),R(!0),E0()}),u((w)=>{var m0=Bf("baseRef"),v0=Ff("baseRef"),O0=L(),c0=B()==="baseRef";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(X0,{get when(){return I0(()=>B()==="baseRef"&&T0().length===0)()&&P0()==null},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"gap",0),Z(m,"paddingLeft",2),Z(m,"paddingBottom",1),Z(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>w0().length===0);return()=>l()?F("newTask.hint.noBranchesFound"):F("newTask.hint.noMatchBranch")})()),u((l)=>Z(i,"fg",Y.textMuted,l)),m}}),b(X0,{get when(){return I0(()=>B()==="baseRef")()&&T0().length>0},get children(){var m=W("box");return Z(m,"gap",0),Z(m,"paddingLeft",2),Z(m,"paddingBottom",1),K(m,b(X0,{get when(){return M0().start>0},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:M0().start})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),K(m,b(Zf,{get each(){return M0().items},children:(i,l)=>{let w=()=>M0().start+l(),m0=()=>w()===r0(),v0=()=>L().trim()===i;return(()=>{var O0=W("text");return Z(O0,"wrapMode","none"),Z(O0,"onMouseUp",()=>{O(i),R(!0),P(w()),V("confirm")}),K(O0,()=>m0()?"\u25B8 ":" ",null),K(O0,i,null),u((c0)=>{var qf=m0()?Y.primary:v0()?Y.accent:Y.textMuted,Df=m0()?_1.BOLD:void 0;return qf!==c0.e&&(c0.e=Z(O0,"fg",qf,c0.e)),Df!==c0.t&&(c0.t=Z(O0,"attributes",Df,c0.t)),c0},{e:void 0,t:void 0}),O0})()}}),null),K(m,b(X0,{get when(){return M0().start+M0().items.length<M0().total},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:M0().total-M0().start-M0().items.length})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),m}})]}}),null),K(N0,b(X0,{get when(){return z()==="clone"},get children(){return[(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.gitUrl")),Z(l,"placeholder","https://github.com/user/repo.git"),Z(l,"onInput",(w)=>a(X1(w))),Z(l,"onSubmit",()=>{if(!S().trim())return;V("cloneParent")}),u((w)=>{var m0=Bf("cloneUrl"),v0=Ff("cloneUrl"),O0=S(),c0=B()==="cloneUrl";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.parentDir")),Z(l,"placeholder","~/"),Z(l,"onInput",(w)=>{q0(!1),g(X1(w))}),Z(l,"onSubmit",()=>wf()),u((w)=>{var m0=Bf("cloneParent"),v0=Ff("cloneParent"),O0=N(),c0=B()==="cloneParent";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(X0,{get when(){return B()==="cloneParent"},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,()=>F("newTask.hint.remembered")),u((l)=>Z(i,"fg",Y.textMuted,l)),m}}),b(X0,{get when(){return I0(()=>B()==="cloneParent"&&a0().length>0)()&&!n()},get children(){var m=W("box");return Z(m,"gap",0),Z(m,"paddingLeft",2),K(m,b(X0,{get when(){return _0().start>0},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreAbove",{count:_0().start})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),K(m,b(Zf,{get each(){return _0().items},children:(i,l)=>{let w=()=>_0().start+l(),m0=()=>w()===p0();return(()=>{var v0=W("text"),O0=x0("/");return D(v0,O0),Z(v0,"wrapMode","none"),Z(v0,"onMouseUp",()=>v(w())),K(v0,()=>m0()?"\u25B8 ":" ",O0),K(v0,i,O0),u((c0)=>{var qf=m0()?Y.primary:Y.textMuted,Df=m0()?_1.BOLD:void 0;return qf!==c0.e&&(c0.e=Z(v0,"fg",qf,c0.e)),Df!==c0.t&&(c0.t=Z(v0,"attributes",Df,c0.t)),c0},{e:void 0,t:void 0}),v0})()}}),null),K(m,b(X0,{get when(){return _0().start+_0().items.length<_0().total},get children(){var i=W("text");return Z(i,"wrapMode","none"),K(i,()=>F("newTask.picker.moreBelow",{count:_0().total-_0().start-_0().items.length})),u((l)=>Z(i,"fg",Y.textMuted,l)),i}}),null),m}}),(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.folderName")),Z(l,"onInput",(w)=>{z0(!0),y(X1(w))}),Z(l,"onSubmit",()=>V("cloneBaseRef")),u((w)=>{var m0=Bf("cloneFolder"),v0=Ff("cloneFolder"),O0=C(),c0=F("newTask.placeholder.folderName"),qf=B()==="cloneFolder";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"placeholder",c0,w.o)),qf!==w.i&&(w.i=Z(l,"focused",qf,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.baseBranch")),Z(l,"placeholder",LJ),Z(l,"onInput",(w)=>Y0(X1(w))),Z(l,"onSubmit",()=>void W0()),u((w)=>{var m0=Bf("cloneBaseRef"),v0=Ff("cloneBaseRef"),O0=t(),c0=B()==="cloneBaseRef";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"focused",c0,w.o)),w},{e:void 0,t:void 0,a:void 0,o:void 0}),m})(),b(X0,{get when(){return T()},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"gap",0),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,()=>p()||F("newTask.clone.progressFallback")),u((l)=>Z(i,"fg",Y.textMuted,l)),m}})]}}),null),K(N0,b(X0,{get when(){return z()==="adopt"},get children(){return[(()=>{var m=W("box"),i=W("text"),l=W("input");return D(m,i),D(m,l),Z(m,"gap",0),K(i,()=>F("newTask.field.adoptFilter")),Z(l,"onInput",(w)=>o0(X1(w))),Z(l,"onSubmit",()=>A()),u((w)=>{var m0=Bf("adoptFilter"),v0=Ff("adoptFilter"),O0=b0(),c0=F("newTask.placeholder.adoptFilter"),qf=B()==="adoptFilter";return m0!==w.e&&(w.e=Z(i,"fg",m0,w.e)),v0!==w.t&&(w.t=Z(i,"attributes",v0,w.t)),O0!==w.a&&(w.a=Z(l,"value",O0,w.a)),c0!==w.o&&(w.o=Z(l,"placeholder",c0,w.o)),qf!==w.i&&(w.i=Z(l,"focused",qf,w.i)),w},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),m})(),(()=>{var m=W("box"),i=W("text");return D(m,i),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,()=>F("newTask.adopt.repoLine",{path:W1(j().trim())||F("newTask.adopt.repoNone")})),u((l)=>Z(i,"fg",Y.textMuted,l)),m})(),b(X0,{get when(){return Af.loading},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,()=>F("newTask.hint.scanningWorktrees")),u((l)=>Z(i,"fg",Y.textMuted,l)),m}}),b(X0,{get when(){return I0(()=>!Af.loading)()&&o().length===0},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"paddingLeft",2),Z(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>(Af()??[]).length===0);return()=>l()?F("newTask.adopt.noUnlinked"):F("newTask.adopt.noMatch")})()),u((l)=>Z(i,"fg",Y.textMuted,l)),m}}),b(X0,{get when(){return o().length>0},get children(){var m=W("box"),i=W("text");return D(m,i),Z(m,"gap",0),Z(m,"paddingLeft",2),K(m,b(X0,{get when(){return e().start>0},get children(){var l=W("text");return Z(l,"wrapMode","none"),K(l,()=>F("newTask.picker.moreAbove",{count:e().start})),u((w)=>Z(l,"fg",Y.textMuted,w)),l}}),i),K(m,b(Zf,{get each(){return B0()},children:(l,w)=>{let m0=()=>e().start+w(),v0=()=>m0()===l0(),O0=()=>t0().has(l.path),c0=()=>[l.dirty?"dirty":"",l.kobeManaged?"":"external"].filter(Boolean).join(",");return(()=>{var qf=W("text");return Z(qf,"wrapMode","none"),Z(qf,"onMouseUp",()=>{$0(m0()),C0(l.path)}),K(qf,()=>v0()?"\u25B8 ":" ",null),K(qf,()=>O0()?"[x] ":"[ ] ",null),K(qf,()=>l.branch,null),K(qf,(()=>{var Df=I0(()=>!!c0());return()=>Df()?` (${c0()})`:""})(),null),u((Df)=>{var q1=v0()?Y.primary:O0()?Y.accent:Y.textMuted,s1=v0()?_1.BOLD:void 0;return q1!==Df.e&&(Df.e=Z(qf,"fg",q1,Df.e)),s1!==Df.t&&(Df.t=Z(qf,"attributes",s1,Df.t)),Df},{e:void 0,t:void 0}),qf})()}}),i),K(m,b(X0,{get when(){return e().start+e().items.length<e().total},get children(){var l=W("text");return Z(l,"wrapMode","none"),K(l,()=>F("newTask.picker.moreBelow",{count:e().total-e().start-e().items.length})),u((w)=>Z(l,"fg",Y.textMuted,w)),l}}),i),Z(i,"wrapMode","none"),K(i,(()=>{var l=I0(()=>t0().size>0);return()=>l()?F("newTask.adopt.hintSelected",{count:t0().size}):F("newTask.adopt.hintDefault")})()),u((l)=>Z(i,"fg",Y.textMuted,l)),m}})]}}),null),K(N0,b(X0,{get when(){return P0()},get children(){var m=W("text"),i=x0("\u203B ");return D(m,i),Z(m,"wrapMode","word"),K(m,P0,null),u((l)=>Z(m,"fg",Y.error,l)),m}}),null),D(M1,wJ),D(M1,GY),Z(M1,"flexDirection","row"),Z(M1,"justifyContent","space-between"),Z(M1,"alignItems","center"),Z(M1,"paddingTop",1),Z(M1,"paddingBottom",1),K(wJ,()=>F("newTask.hint.legend")),Z(GY,"onMouseUp",()=>R0()),K(GY,(()=>{var m=I0(()=>!!T());return()=>m()?F("newTask.button.cloning"):I0(()=>B()==="confirm")()?F("newTask.button.createFocused"):F("newTask.button.create")})()),u((m)=>{var i=_1.BOLD,l=Y.text,w=Bf("engine"),m0=Ff("engine"),v0=Y.textMuted,O0=Y.textMuted,c0=B()==="confirm"?Y.primary:Y.text,qf=B()==="confirm"?_1.BOLD:void 0;return i!==m.e&&(m.e=Z(S0,"attributes",i,m.e)),l!==m.t&&(m.t=Z(S0,"fg",l,m.t)),w!==m.a&&(m.a=Z(V1,"fg",w,m.a)),m0!==m.o&&(m.o=Z(V1,"attributes",m0,m.o)),v0!==m.i&&(m.i=Z(xJ,"fg",v0,m.i)),O0!==m.n&&(m.n=Z(wJ,"fg",O0,m.n)),c0!==m.s&&(m.s=Z(GY,"fg",c0,m.s)),qf!==m.h&&(m.h=Z(GY,"attributes",qf,m.h)),m},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),d})()}var K4=k(()=>{h();h();h();h();h();h();h();h();G1();K1();Wf();xf();UQ();b1();LQ();P1();X4();Z8()});function rN(f,J,Y,z){return new Promise((G)=>{f.replace(()=>b(V4,{defaultRepo:J,savedRepos:Y,get defaultCloneParent(){return z?.defaultCloneParent},get defaultVendor(){return z?.defaultVendor},get availableVendors(){return z?.availableVendors},get discoverAdoptable(){return z?.discoverAdoptable},onSubmit:(X)=>G(X),onCancel:()=>G(void 0)}),()=>G(void 0)),f.setSize("medium")})}var FQ;var bG=k(()=>{h();K4();Z8();FQ={show:rN}});function U4(f,J){return[{key:"tab",cmd:()=>J.cycleField(1)},{key:"shift+tab",cmd:()=>J.cycleField(-1)},{key:"ctrl+e",cmd:()=>J.stepEngine(1)},...f==="engine"?[{key:"left",cmd:()=>J.stepEngine(-1)},{key:"right",cmd:()=>J.stepEngine(1)},{key:"return",cmd:()=>J.commit()}]:[]]}import{TextAttributes as D4}from"@opentui/core";function pN(f){let J=vf(),{theme:Y}=i0(),[z,G]=r("prompt"),[X,q]=r(""),[Q,H]=r(f.defaultVendor),[B,V]=r(f.defaultBaseRef);function j(M){let R=OQ.indexOf(z());G(OQ[(R+M+OQ.length)%OQ.length]??"prompt")}function U(M){let R=f.engines;if(R.length===0)return;if(M>0){H((a)=>ZY(R,a));return}let S=Math.max(0,R.indexOf(Q()));H(R[(S-1+R.length)%R.length]??Q())}function L(){let M=X().trim();if(!M){G("prompt");return}f.onSubmit({prompt:M,vendor:Q(),baseRef:B().trim()||f.defaultBaseRef}),J.clear()}Uf(()=>({enabled:!0,bindings:U4(z(),{cycleField:j,stepEngine:U,commit:L})}));let O=(M)=>z()===M?Y.accent:Y.textMuted;return(()=>{var M=W("box"),R=W("box"),S=W("text"),a=W("text"),N=W("box"),g=W("text"),C=W("input"),y=W("box"),_=W("text"),z0=W("box"),t=W("text"),Y0=W("input"),T=W("box"),Q0=W("text");return D(M,R),D(M,N),D(M,y),D(M,z0),D(M,T),Z(M,"paddingLeft",2),Z(M,"paddingRight",2),Z(M,"gap",1),D(R,S),D(R,a),Z(R,"flexDirection","row"),Z(R,"justifyContent","space-between"),K(S,()=>F("quickTask.title",{repoLabel:f.repoLabel})),Z(a,"onMouseUp",()=>f.onCancel()),K(a,()=>F("quickTask.esc")),D(N,g),D(N,C),Z(N,"gap",0),K(g,()=>F("quickTask.promptLabel")),Z(C,"onInput",(p)=>q(X1(p))),Z(C,"onSubmit",()=>L()),D(y,_),Z(y,"flexDirection","row"),Z(y,"gap",2),K(_,()=>F("quickTask.engineLabel")),K(y,b(Zf,{get each(){return f.engines},children:(p)=>(()=>{var D0=W("text");return Z(D0,"onMouseUp",()=>{H(p),G("engine")}),K(D0,()=>f.engineLabel(p)),u((g0)=>{var $=Q()===p?Y.primary:Y.textMuted,E=Q()===p?D4.BOLD:void 0;return $!==g0.e&&(g0.e=Z(D0,"fg",$,g0.e)),E!==g0.t&&(g0.t=Z(D0,"attributes",E,g0.t)),g0},{e:void 0,t:void 0}),D0})()}),null),D(z0,t),D(z0,Y0),Z(z0,"gap",0),K(t,()=>F("quickTask.branchLabel")),Z(Y0,"onInput",(p)=>V(X1(p))),Z(Y0,"onSubmit",()=>L()),D(T,Q0),Z(T,"paddingBottom",1),K(Q0,()=>F("quickTask.legend")),u((p)=>{var D0=D4.BOLD,g0=Y.text,$=Y.textMuted,E=O("prompt"),f0=X(),I=F("quickTask.promptPlaceholder"),G0=z()==="prompt",x=O("engine"),c=O("branch"),Z0=B(),V0=f.defaultBaseRef,H0=z()==="branch",y0=Y.textMuted;return D0!==p.e&&(p.e=Z(S,"attributes",D0,p.e)),g0!==p.t&&(p.t=Z(S,"fg",g0,p.t)),$!==p.a&&(p.a=Z(a,"fg",$,p.a)),E!==p.o&&(p.o=Z(g,"fg",E,p.o)),f0!==p.i&&(p.i=Z(C,"value",f0,p.i)),I!==p.n&&(p.n=Z(C,"placeholder",I,p.n)),G0!==p.s&&(p.s=Z(C,"focused",G0,p.s)),x!==p.h&&(p.h=Z(_,"fg",x,p.h)),c!==p.r&&(p.r=Z(t,"fg",c,p.r)),Z0!==p.d&&(p.d=Z(Y0,"value",Z0,p.d)),V0!==p.l&&(p.l=Z(Y0,"placeholder",V0,p.l)),H0!==p.u&&(p.u=Z(Y0,"focused",H0,p.u)),y0!==p.c&&(p.c=Z(Q0,"fg",y0,p.c)),p},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0}),M})()}function _N(f,J){return new Promise((Y)=>{f.replace(()=>b(pN,tU(J,{onSubmit:(z)=>Y(z),onCancel:()=>Y(void 0)})),()=>Y(void 0)),f.setSize("medium")})}var OQ,L4;var M4=k(()=>{h();h();h();h();h();h();h();Wf();K1();xf();G1();b1();P1();bG();OQ=["prompt","engine","branch"];L4={show:_N}});async function F4(f={}){let J=f.logTag??"orch-connect",Y=f.connect??p1,z=null;try{let G=await Y();if(!G)return dJ(J,"no daemon running \u2014 caller degrades"),null;return z=new j1(G,{...f.orchestratorOptions,channels:f.channels}),await z.init(),z}catch(G){return WY(J,G),z?.dispose(),null}}var O4=k(()=>{eY();y1();PY()});function A4(f){let[J,Y]=r(f.initial??"sidebar"),[z,G]=r(0),X=Y1();function q(j){if(G((L)=>L+1),J()===j)return;let U=X?.currentFocusedRenderable;if(U&&!U.isDestroyed)try{U.blur()}catch{}Y(j)}function Q(j){let L=(AQ.indexOf(J())+j+AQ.length)%AQ.length;q(AQ[L])}let H=new Map;function B(j){let U=H.get(j);if(!U)U=()=>J()===j,H.set(j,U);return U}let V={focused:J,is:B,setFocused:q,cycle:Q,refocusTick:z};return b(oN.Provider,{value:V,get children(){return f.children}})}var AQ,oN;var g4=k(()=>{h();h();Wf();AQ=["sidebar","workspace","files","terminal"],oN=gJ(null)});function R4(){for(let f of vY){let J=sN.get(f.id);if(!J)continue;let Y=f;Y.keys=[...J.keys],Y.hint=J.hint?{...J.hint}:void 0}}function C4(){tN((f)=>f+1)}function Q8(f){return eN.get(f)}function fy(f){return Q8(f)?.keys??[]}function mY(f){let J=[];for(let Y in f){let z=f[Y];if(!z)continue;let G=fy(Y);if(G.length===0){console.warn(`[kobe/keybindings] bindByIds: id="${Y}" has no chords (or doesn't exist in KobeKeymap)`);continue}G.forEach((X,q)=>J.push({key:X,cmd:z,slot:q}))}return J}var vY,sN,q8,tN,eN;var SG=k(()=>{Wf();vY=[{id:"help.open",scope:"global",keys:["f1"],category:"Global",description:"Show keybindings help",hint:{keys:"F1",label:"help",pin:"right"}},{id:"task.new",scope:"sidebar",keys:["n"],category:"Sidebar",description:"New task",hint:{keys:"n",label:"new"}},{id:"task.openEditor",scope:"global",keys:["ctrl+o"],category:"Global",description:"Open active task worktree in editor"},{id:"settings.open",scope:"global",keys:["ctrl+,"],category:"Global",description:"Open settings"},{id:"settings.open.sidebar",scope:"sidebar",keys:["s"],category:"Sidebar",description:"Open settings",hint:{keys:"s",label:"settings",status:!1}},{id:"app.quit",scope:"sidebar",keys:["q"],category:"Sidebar",description:"Quit (with confirm)",hint:{keys:"q",label:"quit",status:!1}},{id:"focus.sidebar",scope:"workspace",keys:["ctrl+q"],category:"Workspace",description:"Back to sidebar (tasks)",hint:{keys:"ctrl+q",label:"tasks"}},{id:"focus.numeric",scope:"global",keys:["ctrl+h","ctrl+j","ctrl+k","ctrl+l"],category:"Navigation",description:"Jump to pane (h=sidebar, j=workspace, k=files, l=terminal)",hint:{keys:"ctrl+hjkl",label:"focus",pin:"right",status:!1}},{id:"chat.interrupt",scope:"workspace",keys:[],category:"Workspace",description:"Interrupt current turn (esc while streaming)"},{id:"sidebar.nav",scope:"sidebar",keys:["j","k","down","up"],category:"Sidebar",description:"Move cursor up/down",hint:{keys:"j/k",label:"nav"}},{id:"sidebar.select",scope:"sidebar",keys:["return"],category:"Sidebar",description:"Open the selected task",hint:{keys:"enter",label:"select"}},{id:"sidebar.goto",scope:"sidebar",keys:["g"],category:"Sidebar",description:"Top / bottom of list (gg or shift-G)"},{id:"sidebar.rename",scope:"sidebar",keys:["r"],category:"Sidebar",description:"Rename task",hint:{keys:"r",label:"rename",status:!1}},{id:"sidebar.archive",scope:"sidebar",keys:["a"],category:"Sidebar",description:"Toggle archive",hint:{keys:"a",label:"archive",status:!1}},{id:"sidebar.localMerge",scope:"sidebar",keys:["m"],category:"Sidebar",description:"Local merge task into parent repo (Shift+M)",hint:{keys:"M",label:"merge",status:!1}},{id:"sidebar.pin",scope:"sidebar",keys:["p"],category:"Sidebar",description:"Pin / unpin task at top (Shift+P)",hint:{keys:"P",label:"pin",status:!1}},{id:"sidebar.view",scope:"sidebar",keys:["[","]"],category:"Sidebar",description:"Switch view (Working session \u2194 Archives)",hint:{keys:"[/]",label:"view",status:!1}},{id:"sidebar.sort",scope:"sidebar",keys:["t"],category:"Sidebar",description:"Switch task sort (default \u2194 recent)",hint:{keys:"t",label:"sort",status:!1}},{id:"sidebar.projectFilter",scope:"sidebar",keys:["ctrl+p"],category:"Sidebar",description:"Cycle task project filter",hint:{keys:"ctrl+p",label:"project",status:!1}},{id:"sidebar.delete",scope:"sidebar",keys:["d"],category:"Sidebar",description:"Delete task (with confirm)",hint:{keys:"d",label:"delete",status:!1}},{id:"sidebar.search.enter",scope:"sidebar",keys:["/"],category:"Sidebar",description:"Search tasks (fuzzy filter)",hint:{keys:"/",label:"search"}},{id:"sidebar.search.nav",scope:"sidebar",keys:["down","up"],category:"Sidebar",description:"Move highlight in search results"},{id:"sidebar.search.submit",scope:"sidebar",keys:["return"],category:"Sidebar",description:"Select search match and exit search"},{id:"sidebar.search.cancel",scope:"sidebar",keys:["escape"],category:"Sidebar",description:"Cancel search (restore prior selection)"},{id:"tasks.openWorktree",scope:"sidebar",keys:["o"],category:"Tasks pane",description:"Open selected task's worktree in your editor",hint:{keys:"o",label:"open wt",status:!1}},{id:"tasks.renameBranch",scope:"sidebar",keys:["b"],category:"Tasks pane",description:"Rename the selected task's git branch",hint:{keys:"b",label:"branch",status:!1}},{id:"tasks.cycleEngine",scope:"sidebar",keys:["v"],category:"Tasks pane",description:"Cycle engine vendor (claude \u2194 codex \u2194 \u2026) \u2014 applies on reopen",hint:{keys:"v",label:"engine",status:!1}},{id:"tasks.update",scope:"sidebar",keys:["u"],category:"Tasks pane",description:"Open the update page (when a new version is available)",hint:{keys:"u",label:"update",status:!1}},{id:"tasks.focusEngine",scope:"sidebar",keys:["right"],category:"Tasks pane",description:"Focus the engine pane of the current window",hint:{keys:"\u2192",label:"engine",status:!1}},{id:"tasks.toggleKeys",scope:"sidebar",keys:["?"],category:"Tasks pane",description:"Collapse / expand the keys legend",hint:{keys:"?",label:"fold keys",status:!1}},{id:"tmux.quickTask",scope:"global",keys:[],category:"Workspace (tmux)",description:"Quick new task (tmux prefix, then f)",hint:{keys:"prefix f",label:"new task",status:!1}},{id:"tmux.engineTab",scope:"global",keys:[],category:"Workspace (tmux)",description:"Open the engine in a new tab (tmux prefix, then t)",hint:{keys:"prefix t",label:"engine tab",status:!1}},{id:"tmux.layout.workspaceSplit",scope:"global",keys:[],category:"Workspace (tmux)",description:"Add a temporary workspace split (tmux prefix, then s)",hint:{keys:"prefix s",label:"split",status:!1}},{id:"tmux.layout.workspaceClose",scope:"global",keys:[],category:"Workspace (tmux)",description:"Close the focused temporary workspace split (tmux prefix, then x)",hint:{keys:"prefix x",label:"close split",status:!1}},{id:"tmux.layout.workspaceReset",scope:"global",keys:[],category:"Workspace (tmux)",description:"Close all temporary workspace splits (tmux prefix, then r)",hint:{keys:"prefix r",label:"reset splits",status:!1}},{id:"tmux.layout.tasksToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Hide / restore the Tasks pane (tmux prefix, then a)",hint:{keys:"prefix a",label:"tasks pane",status:!1}},{id:"tmux.layout.opsToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Toggle the file/Ops pane (tmux prefix, then o)",hint:{keys:"prefix o",label:"file pane",status:!1}},{id:"tmux.layout.terminalToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Hide / restore the terminal pane (tmux prefix, then z)",hint:{keys:"prefix z",label:"terminal",status:!1}},{id:"tmux.layout.zenToggle",scope:"global",keys:[],category:"Workspace (tmux)",description:"Zen mode \u2014 collapse to the engine pane (tmux prefix, then space)",hint:{keys:"prefix space",label:"zen",status:!1}},{id:"chat.send",scope:"workspace",keys:[],category:"Workspace",description:"Send message (composer)",hint:{keys:"enter",label:"send"}},{id:"chat.newline",scope:"workspace",keys:[],category:"Workspace",description:"Newline in composer",hint:{keys:"shift+enter",label:"newline"}},{id:"chat.cycle-mode",scope:"workspace",keys:[],category:"Workspace",description:"Cycle permission mode (composer)",hint:{keys:"shift+tab",label:"mode"}},{id:"chat.steer",scope:"workspace",keys:[],category:"Workspace",description:"Steer (interrupt + send) \u2014 mid-stream only",hint:{keys:"ctrl+enter",label:"steer",status:!1}},{id:"chat.tab.new",scope:"workspace",keys:["ctrl+t"],category:"Workspace",description:"New chat tab",hint:{keys:"ctrl+t",label:"new tab"}},{id:"chat.fork.new",scope:"workspace",keys:["ctrl+f"],category:"Workspace",description:"Quick-fork: create child task seeded with current repo/branch/model",hint:{keys:"ctrl+f",label:"fork"}},{id:"chat.session.resume",scope:"workspace",keys:["ctrl+y"],category:"Workspace",description:"Resume a prior session in this task's worktree",hint:{keys:"ctrl+y",label:"resume",status:!1}},{id:"chat.tab.close",scope:"workspace",keys:["ctrl+w"],category:"Workspace",description:"Close chat tab",hint:{keys:"ctrl+w",label:"close tab",status:!1}},{id:"chat.tab.rename",scope:"workspace",keys:["f2"],category:"Workspace",description:"Rename active chat tab",hint:{keys:"f2",label:"rename tab",status:!1}},{id:"chat.tab.cycle-next",scope:"workspace",keys:["ctrl+]"],category:"Workspace",description:"Next chat tab",hint:{keys:"ctrl+]",label:"next tab",status:!1}},{id:"chat.tab.cycle-prev",scope:"workspace",keys:["ctrl+["],category:"Workspace",description:"Previous chat tab",hint:{keys:"ctrl+[",label:"prev tab",status:!1}},{id:"chat.question.nav",scope:"workspace",keys:["j","k","down","up"],category:"Workspace",description:"Move highlight in question picker",hint:{keys:"j/k",label:"pick",status:!1}},{id:"chat.question.toggle",scope:"workspace",keys:["space"],category:"Workspace",description:"Toggle highlighted option in question picker",hint:{keys:"space",label:"toggle",status:!1}},{id:"chat.question.submit",scope:"workspace",keys:["return"],category:"Workspace",description:"Advance / submit question picker",hint:{keys:"enter",label:"submit",status:!1}},{id:"chat.question.pick-number",scope:"workspace",keys:["1","2","3","4","5","6","7","8","9"],category:"Workspace",description:"Pick option by number in question picker",hint:{keys:"1-9",label:"pick",status:!1}},{id:"files.nav",scope:"files",keys:["j","k","down","up"],category:"Files",description:"Move cursor up/down",hint:{keys:"j/k",label:"nav"}},{id:"files.hierarchy",scope:"files",keys:["h","l","left","right"],category:"Files",description:"Collapse / expand tree level",hint:{keys:"h/l",label:"level"}},{id:"files.open",scope:"files",keys:["return"],category:"Files",description:"Open file in nvim (diff vs HEAD when changed)",hint:{keys:"enter",label:"open"}},{id:"files.tab",scope:"files",keys:["[","]"],category:"Files",description:"Switch tab (cycle All / Changes)",hint:{keys:"[/]",label:"tab",status:!1}},{id:"files.refresh",scope:"files",keys:["r"],category:"Files",description:"Refresh",hint:{keys:"r",label:"refresh",status:!1}},{id:"files.openExternal",scope:"files",keys:["o"],category:"Files",description:"Open file in system default app (audio / video / pdf preview)",hint:{keys:"o",label:"open external",status:!1}},{id:"files.mention",scope:"files",keys:["a"],category:"Files",description:"Inject @<path> mention into the engine pane",hint:{keys:"a",label:"@mention"}},{id:"files.createPR",scope:"files",keys:["p"],category:"Files",description:"Create PR from the current task",hint:{keys:"p",label:"create PR"}},{id:"terminal.scroll-up",scope:"terminal",keys:["ctrl+pageup"],category:"Terminal",description:"Scroll scrollback up",hint:{keys:"ctrl+pgup",label:"scroll",status:!1}},{id:"terminal.scroll-down",scope:"terminal",keys:["ctrl+pagedown"],category:"Terminal",description:"Scroll scrollback down"},{id:"terminal.reset",scope:"terminal",keys:["f5"],category:"Terminal",description:"Reset terminal \u2014 kill the current shell and respawn",hint:{keys:"f5",label:"reset"}},{id:"dialog.cancel",scope:"global",keys:[],category:"Dialog",description:"Close the top dialog (esc)"},{id:"dialog.newtask.tab.cycle",scope:"global",keys:[],category:"Dialog",description:"Switch New Task tab (Existing / New Repo)",hint:{keys:"ctrl+[/]",label:"tab"}}],sN=new Map(vY.map((f)=>[f.id,{keys:[...f.keys],hint:f.hint?{...f.hint}:void 0}]));[q8,tN]=r(0);eN=new Map(vY.map((f)=>[f.id,f]))});function gQ(){if(cY)return cY;let f=Lq();if(!f.exists)return cY={path:f.path,exists:!1,applied:[],warnings:[]},cY;let J=[...f.warnings],Y=Fq(f.doc,process.platform,{chordOptsFor:PB});J.push(...Y.warnings);let z=Y.entries.filter((Q)=>Q.id.startsWith("tmux.")),G=Y.entries.filter((Q)=>!Q.id.startsWith("tmux.")),X=c7(vY,G);J.push(...X.warnings);let q=[...X.applied];if(z.length>0){let Q=hB(z);J.push(...Q.warnings);for(let H of Q.overridden){if(H===SJ){q.push({id:H,keys:Q.focus.map((j)=>j?.chord??"").filter((j)=>j!==""),defaultKeys:yY});continue}let B=Q.binds[H];q.push({id:H,keys:B?[B.chord]:[],defaultKeys:[Oz[H]]});let V=vY.find((j)=>j.id===H);if(V?.hint)V.hint.keys=B?`${ZG(H)?"prefix ":""}${B.chord}`:"\u2014"}}for(let Q of J)console.warn(`[kobe/keybindings] ${Q}`);return cY={path:f.path,exists:!0,applied:q,warnings:J},cY}function k4(){return cY??gQ()}function N4(){cY=null,m7(),l7(),R4();let f=gQ();return C4(),f}var cY=null;var H8=k(()=>{xB();gq();Oq();SG()});var Jy=250,IG,y4;var mX=k(()=>{CG();pY();$j();({use:IG,provider:y4}=VQ({name:"KV",init:()=>{let[f,J]=uJ(nf()),Y=new Set,z=null;function G(Q){if(Y.size===0)return!0;try{let H={};for(let B of Y)H[B]=f[B];return rY(H),Y.clear(),!0}catch(H){return console.error(`[kobe] kv ${Q} failed:`,H),!1}}function X(){if(z)clearTimeout(z);z=setTimeout(()=>{z=null,G("write")},Jy)}let q={get ready(){return!0},get store(){return f},signal(Q,H){if(f[Q]===void 0)J(Q,H);return[()=>q.get(Q),(B)=>q.set(Q,B)]},get(Q,H){return f[Q]??H},set(Q,H){J(Q,H),Y.add(Q),X()},flush(){if(z)clearTimeout(z),z=null;return G("flush")},clear(){for(let Q of Object.keys(f))J(Q,void 0);if(z)clearTimeout(z),z=null;Y.clear();try{D9({})}catch(Q){console.error("[kobe] kv clear write failed:",Q)}}};return q}}))});var RQ="../pulse-n3cq1btw.wav";var b4=()=>{};import{existsSync as zy,mkdirSync as Gy}from"fs";import{tmpdir as Xy}from"os";import{basename as Zy,isAbsolute as qy,join as B8,resolve as Qy}from"path";function By(f,J,Y){if(f==="ffplay")return[f,"-autoexit","-nodisp","-af",`volume=${Y}`,J];if(f==="mpv")return[f,"--no-video","--audio-display=no","--volume",String(Math.round(Y*100)),J];if(f==="mpg123"||f==="mpg321")return[f,"-g",String(Math.round(Y*100)),J];if(f==="mplayer")return[f,"-vo","null","-volume",String(Math.round(Y*100)),J];if(f==="afplay"||f==="omxplayer"||f==="aplay"||f==="cmdmp3")return[f,J];if(f==="play")return[f,"-v",String(Y),J];if(f==="cvlc")return[f,`--gain=${Y}`,"--play-and-exit",J];return[f,"-c",`(New-Object Media.SoundPlayer '${J.replace(/'/g,"''")}').PlaySync()`]}function jy(){if(CQ!==void 0)return CQ;let J=(process.env.PATH??"").split(":").filter(Boolean);return CQ=Hy.find((Y)=>J.some((z)=>zy(B8(z,Y))))??null,CQ}async function Wy(){return T4??=(async()=>{Gy(I4,{recursive:!0});let f=B8(I4,Zy(S4)),J=Bun.file(f);if(await J.exists())return f;return await Bun.write(J,Bun.file(S4)),f})(),T4}function u4(f=0.4){let J=jy();if(!J)return;Wy().then((Y)=>{try{Bun.spawn(By(J,Y,f),{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).unref?.()}catch{}}).catch(()=>{return})}var S4,I4,Hy,CQ,T4;var E4=k(()=>{b4();S4=qy(RQ)?RQ:Qy(import.meta.dir,RQ),I4=B8(Xy(),"kobe-sfx"),Hy=["ffplay","mpv","mpg123","mpg321","mplayer","afplay","play","omxplayer","aplay","cmdmp3","cvlc","powershell.exe"]});function x4(f,J){return`${f}:${J}`}function h4(f){let J=IG(),[Y,z]=r([]),[G,X]=r(new Map),q=0;function Q(j){if(X((U)=>{let L=new Map(U),O=x4(j.taskId,j.tabId),M=U.get(O);if(M==="needs_input"||M==="error")return U;return L.set(O,j.kind),L}),J.get("notifications.sound.enabled",!0)!==!1){try{process.stdout.write("\x07")}catch{}u4()}if(J.get("notifications.toast.enabled",!0)!==!1){let U=++q,L={id:U,kind:j.kind,taskId:j.taskId,tabId:j.tabId,title:j.title};z((O)=>[...O,L]),setTimeout(()=>H(U),Vy)}}function H(j){z((U)=>U.filter((L)=>L.id!==j))}function B(j,U){X((L)=>{let O=x4(j,U);if(!L.has(O))return L;let M=new Map(L);return M.delete(O),M})}let V={toasts:Y,unread:G,notify:Q,dismiss:H,markRead:B};return b(w4.Provider,{value:V,get children(){return f.children}})}function kQ(){let f=u1(w4);if(!f)throw Error("useNotifications must be used within a NotificationsProvider");return f}var Vy=4500,w4;var NQ=k(()=>{h();Wf();E4();mX();w4=gJ()});function j8(f,J){if(typeof J.theme==="string"&&J.theme.length>0&&J.theme!==f.selectedTheme()){if(!f.hasTheme(J.theme))f.reloadUserThemes();if(f.hasTheme(J.theme))f.setTheme(J.theme)}if(typeof J.transparentBackground==="boolean"&&J.transparentBackground!==f.transparentBackground())f.setTransparentBackground(J.transparentBackground);if(J.focusAccent===null||typeof J.focusAccent==="string"){let Y=Uy(J.focusAccent);if(Y&&Y!==f.focusAccent())f.setFocusAccent(Y)}}function Uy(f){if(f===null)return"primary";return Ky.includes(f)?f:null}var Ky;var P4=k(()=>{Ky=["primary","success","info"]});import{readFileSync as Dy}from"fs";function v4(f){try{let J=JSON.parse(Dy(m1(),"utf8")),Y=typeof J.activeTheme==="string"&&uX(J.activeTheme)?J.activeTheme:f,z=J.transparentBackground===!0,G=typeof J.focusAccent==="string"&&yz.includes(J.focusAccent)?J.focusAccent:null,X=EX(J[yQ])?J[yQ]:NG;return{theme:Y,transparent:z,focusAccent:G,locale:X}}catch{return{theme:f,transparent:!1,focusAccent:null,locale:NG}}}var yQ="locale";var W8=k(()=>{lf();xf();yG()});function My(f){if(f)CZ(f);gQ();for(let{name:J,theme:Y}of UX())pj(J,Y)}function Fy(f){let J={backgroundColor:"transparent",externalOutputMode:"passthrough",exitOnCtrlC:!1,screenMode:"alternate-screen",useKittyKeyboard:{}};return f?{...J,onDestroy:f}:J}function Oy(f){let J=()=>f.children,Y=()=>f.notifications?b(h4,{get children(){return J()}}):J(),z=()=>b(r6,{get children(){return Y()}}),G=()=>f.focus?b(A4,{initial:"sidebar",get children(){return z()}}):z(),X=()=>f.kv?b(y4,{get children(){return G()}}):G();return b(W6,{mode:"dark",get theme(){return f.theme},get children(){return X()}})}function Ay(f){let J=i0(),Y={selectedTheme:()=>J.selected,hasTheme:(Q)=>J.has(Q),setTheme:(Q)=>J.set(Q),reloadUserThemes:()=>{for(let{name:Q,theme:H}of UX())pj(Q,H)},transparentBackground:()=>J.transparentBackground,setTransparentBackground:(Q)=>J.setTransparentBackground(Q),focusAccent:()=>J.focusAccent,setFocusAccent:(Q)=>J.setFocusAccent(Q)};j8(Y,{theme:f.boot.theme,transparentBackground:f.boot.transparent,focusAccent:f.boot.focusAccent}),xX(f.boot.locale);let[z,G]=r(null),X=!1;f1(()=>{(async()=>{let Q=await F4({logTag:"ui-prefs",channels:["ui-prefs","keybindings"]});if(!Q)return;if(X){Q.dispose();return}G(Q)})()}),zf(()=>{let Q=z()?.uiPrefsSignal()();if(!Q)return;if(j8(Y,Q),EX(Q.locale))xX(Q.locale)});let q=null;return zf(()=>{let Q=z()?.keybindingsRevSignal()();if(Q==null)return;if(q===null||Q===q){q=Q;return}q=Q,N4()}),mf(()=>{X=!0,z()?.dispose()}),null}async function L1(f){My(f.logContext);let J=v4(Ly),Y=await f.setup(J),z=f.providers?.kv??!0,G=f.providers?.focus??!0,X=f.providers?.notifications??!1;await X6(()=>b(Oy,{get theme(){return J.theme},kv:z,focus:G,notifications:X,get children(){return[b(Ay,{boot:J}),I0(()=>Y.root())]}}),Fy(Y.onDestroy))}var Ly="claude";var nY=k(()=>{h();h();h();eY();Wf();O4();g4();H8();mX();NQ();xf();Nq();G1();P1();P4();W8()});async function V8(f,J,Y,z,G={}){let X=Lf(J.id);if(await Hf(X))return!0;let q=J.worktreePath;if(!q)q=await f.ensureWorktree(J.id);if(!q)throw Error(`task ${J.id} has no worktree`);let{ensureSession:Q}=await Promise.resolve().then(() => (J1(),r1)),{resolveEngineLaunchInit:H}=await Promise.resolve().then(() => (GG(),EB)),B=H(Y,q,{kind:G.includeInitPrompt?"repo-init":"none"});if(!await Q({name:X,cwd:q,command:N1(z),taskId:J.id,vendor:z,repo:Y,launchInit:B}))throw Error(`failed to start tmux session for ${J.id}`);return!1}async function bQ(f,J,Y,z,G={}){await V8(f,J,Y,z,G),await f.setActiveTask(J.id).catch(()=>{});let{prepareWindowForSwitch:X}=await Promise.resolve().then(() => (J1(),r1));await X(Lf(J.id)),await h0(["switch-client","-t",`=${Lf(J.id)}`])}var K8=k(()=>{E1();Tf()});var m4={};jf(m4,{startNewTaskHost:()=>gy,NewTaskPage:()=>SQ});function SQ(f){let{theme:J}=i0(),Y=vf();f1(()=>{z()});async function z(){let G=c1(),X=f.defaultRepo||G[0]||process.cwd(),q=kf("lastSelectedVendor")??Sf,Q=await iJ(),H=f.orchestrator,B=await FQ.show(Y,X,G,{defaultVendor:q,availableVendors:Q,discoverAdoptable:H?(j)=>H.discoverAdoptableWorktrees(j):void 0});if(!B)process.exit(0);if(af("lastSelectedVendor",B.vendor),vJ(B.repo),!H)console.error("[kobe new-task] no daemon; cannot create task"),process.exit(1);let V;try{if(B.mode==="adopt")for(let j of B.adopt)V=await H.adoptWorktree({repo:B.repo,worktreePath:j.worktreePath,branch:j.branch,vendor:B.vendor});else V=await H.createTask({repo:B.repo,baseRef:B.baseRef,vendor:B.vendor})}catch(j){console.error("[kobe new-task] task.create/adopt failed:",j),process.exit(1)}if(V)try{await bQ(H,V,B.repo,B.vendor,{includeInitPrompt:B.mode!=="adopt"})}catch(j){console.error("[kobe new-task] auto-enter failed:",j)}process.exit(0)}return(()=>{var G=W("box");return Z(G,"flexDirection","column"),Z(G,"flexGrow",1),u((X)=>Z(G,"backgroundColor",J.background,X)),G})()}async function gy(f){await L1({setup:async()=>{let J=null;try{let Y=await UJ(),z=new j1(Y);await z.init(),J=z}catch(Y){console.error("[kobe new-task] daemon unavailable; cannot create task:",Y)}return{root:()=>b(SQ,{get defaultRepo(){return f.defaultRepo},orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var U8=k(()=>{h();h();h();h();y1();Wf();PY();fz();gf();S1();bG();xf();nY();K8();P1()});function IQ(f,J,Y,z,G={}){if(f.length===0)return J;let X=new Map;for(let H of f)X.set(Y(H),H);let q=f.length===J.length,Q=Array(J.length);for(let H=0;H<J.length;H++){let B=J[H],V=X.get(Y(B));if(V&&z(V,B)&&(!G.samePosition||f[H]===V)){if(Q[H]=V,q&&f[H]!==V)q=!1}else Q[H]=B,q=!1}return q?f:Q}function c4(f,J){if(!f)return!0;let Y=f.toLowerCase(),z=J.toLowerCase(),G=0;for(let X=0;X<z.length&&G<Y.length;X++)if(z.charCodeAt(X)===Y.charCodeAt(G))G++;return G===Y.length}function Ry(f,J){let Y=J==="archived";return f.filter((z)=>z.archived===Y)}function D8(f,J,Y,z="default",G){let X=Ry(f,J),q=Y?.trim()??"",Q=G?o1(G):null,H=q?X.filter((M)=>c4(q,`${M.title} ${MJ(M.repo)}`)):X,B=[],V=[],j=[],U=new Set;for(let M of H){if(M.kind==="main"){let R=o1(M.repo);if(U.has(R))continue;U.add(R),B.push(M);continue}if(Q&&o1(M.repo)!==Q)continue;if(M.pinned===!0)V.push(M);else j.push(M)}if(B.sort((M,R)=>MJ(M.repo).localeCompare(MJ(R.repo))),z==="recent")V.sort(n4),j.sort(n4);let L=[],O=0;for(let M of B)L.push({kind:"task",task:M,flatIndex:O}),O++;for(let M of V)L.push({kind:"task",task:M,flatIndex:O}),O++;for(let M of j)L.push({kind:"task",task:M,flatIndex:O}),O++;return L}function n4(f,J){let Y=d4(J)-d4(f);if(Y!==0)return Y;return String(J.id).localeCompare(String(f.id))}function d4(f){let J=Date.parse(f.updatedAt||f.createdAt);return Number.isFinite(J)?J:0}function MJ(f){let J=f.split("/").filter(Boolean);return J[J.length-1]??f}function o1(f){return f.trim().replace(/[\\/]+$/,"")||f}function Cy(f,J){let Y=MJ(f);if(!J.some((G)=>G!==f&&MJ(G)===Y))return Y;return f.replace(/[\\/]+$/,"").split(/[\\/]+/).slice(-2).join("/")}function i4(f,J){let Y=J==="archived",z=new Map;for(let X of f){let q=o1(X.repo),Q=z.get(q)??{repo:X.repo,count:0};if(X.kind==="main")Q.repo=X.repo;else if(X.archived===Y)Q.count+=1;z.set(q,Q)}let G=[...z.values()].map((X)=>X.repo);return[...z.values()].map((X)=>({repo:X.repo,label:Cy(X.repo,G),count:X.count})).sort((X,q)=>X.label.localeCompare(q.label))}function l4(f,J){if(f.length===0)return-1;if(!J)return f[0]?.flatIndex??-1;let Y=o1(J),z=f.find((X)=>X.task.kind!=="main"&&o1(X.task.repo)===Y);if(z)return z.flatIndex;return f.find((X)=>X.task.kind==="main"&&o1(X.task.repo)===Y)?.flatIndex??f[0]?.flatIndex??-1}function L8(f){return f.map((J)=>J.task.id)}function a4(f){let J=[],Y=[];for(let z of f)if(z.task.kind==="main")J.push(z);else Y.push(z);return{projectRows:J,taskRows:Y}}function ky(f,J){return f===J||f.id===J.id&&f.kind===J.kind&&f.title===J.title&&f.repo===J.repo&&f.branch===J.branch&&f.worktreePath===J.worktreePath&&f.status===J.status&&f.archived===J.archived&&f.pinned===J.pinned&&f.vendor===J.vendor}function $4(f,J){return IQ(f,J,(Y)=>Y.task.id,(Y,z)=>Y.flatIndex===z.flatIndex&&ky(Y.task,z.task),{samePosition:!0})}var TQ=()=>{};var r4={};jf(r4,{startQuickTaskHost:()=>Sy});async function Ny(f,J){let Y,z;if(J){let j=await C1(J,["@kobe_task","@kobe_worktree"]);Y=j["@kobe_task"]||void 0,z=j["@kobe_worktree"]||void 0}let G=(Y?f?.getTask(Y)?.repo:void 0)??c1()[0],X=G??z??process.cwd();if(!G)return{ctx:null,fallbackRepo:X};let q=await iJ(),Q=kf("lastSelectedVendor")??Sf,H=q.length===0||q.includes(Q)?Q:q[0]??Q,B=wX(W1(G))??LJ,V=q.length>0?q:[H];return{ctx:{repo:G,vendor:H,baseRef:B,engines:V},fallbackRepo:X}}async function yy(f,J,Y,z,G){let X=await V8(f,J,Y,z),q=Lf(J.id),{pane:Q}=await VX(q,!X);if(Q)await KX(Q,G)}function by(f){let{theme:J}=i0(),Y=vf();f1(()=>{z()});async function z(){let G=f.ctx,X=await L4.show(Y,{repoLabel:MJ(G.repo),engines:G.engines,defaultVendor:G.vendor,defaultBaseRef:G.baseRef,engineLabel:Vz});if(X===void 0)process.exit(0);af("lastSelectedVendor",X.vendor),vJ(G.repo);let q=f.orchestrator;if(!q)console.error("[kobe quick-task] no daemon; cannot create task"),process.exit(1);try{let Q=await q.createTask({repo:G.repo,baseRef:X.baseRef,vendor:X.vendor});await yy(q,Q,G.repo,X.vendor,X.prompt),await bQ(q,Q,G.repo,X.vendor)}catch(Q){console.error("[kobe quick-task] task.create/deliver failed:",Q),process.exit(1)}process.exit(0)}return(()=>{var G=W("box");return Z(G,"flexDirection","column"),Z(G,"flexGrow",1),u((X)=>Z(G,"backgroundColor",J.background,X)),G})()}async function Sy(f){await L1({setup:async()=>{let J=null;try{let G=await UJ(),X=new j1(G);await X.init(),J=X}catch(G){console.error("[kobe quick-task] daemon unavailable; cannot create task:",G)}let{ctx:Y,fallbackRepo:z}=await Ny(J,f.session);return{root:()=>Y?b(by,{ctx:Y,orchestrator:J}):b(SQ,{defaultRepo:z,orchestrator:J}),onDestroy:()=>{J?.dispose()}}}})}var p4=k(()=>{h();h();h();h();y1();Wf();PY();fz();E1();gf();Tf();Rq();S1();M4();xf();UQ();nY();LQ();K8();U8();TQ();P1()});function EQ(f){let J=f.trim().split(/\s+/).pop()??"",Y=/^([CM])-(.+)$/.exec(J);if(!Y)return null;let z=Y[1]==="C"?"\u2303":"\u2325",G=Y[2]??"";return`${z}${G.length===1?G.toUpperCase():G}`}function uQ(f,J){if(f.includes("/"))return f.split("/").map((G)=>uQ(G,J)).join("/");let Y=f.toLowerCase();if(Y==="tab")return"tab";let z=Ty[Y];if(z)return z;if(/^f\d{1,2}$/.test(Y))return Y.toUpperCase();if(!J)return f;if(/^[a-z]$/.test(Y))return f.toUpperCase();return f.replace(/[a-z]+/gi,(G)=>G.toUpperCase())}function TG(f,J="\u2303B"){let Y=f.trim();if(!Y)return Y;let z=/^prefix\s+(.+)$/i.exec(Y);if(z){let Q=z[1]??"";return`${J} ${Q.includes("+")?TG(Q,J):uQ(Q,!0)}`}let G=Y.split("+");if(G.length===1)return uQ(G[0]??"",!1);let X=G[G.length-1]??"";return`${G.slice(0,-1).map((Q)=>Iy[Q.toLowerCase().trim()]??Q).join("")} ${uQ(X,!0)}`}var Iy,Ty;var M8=k(()=>{Iy={ctrl:"\u2303",control:"\u2303",alt:"\u2325",opt:"\u2325",option:"\u2325",shift:"\u21E7",cmd:"\u2318",command:"\u2318",meta:"\u2318",super:"\u2318"},Ty={enter:"\u23CE",return:"\u23CE",esc:"\u238B",escape:"\u238B",space:"\u2423",up:"\u2191",down:"\u2193",left:"\u2190",right:"\u2192",backspace:"\u232B",delete:"\u2326",del:"\u2326",pgup:"\u21DE",pageup:"\u21DE",pgdn:"\u21DF",pagedown:"\u21DF",home:"\u2196",end:"\u2198"}});import{TextAttributes as _4}from"@opentui/core";function uy(f){let J=new Map,Y=[];for(let z of f){if(!J.has(z.category))J.set(z.category,[]),Y.push(z.category);J.get(z.category).push(z)}return Y.map((z)=>({category:z,rows:J.get(z)}))}function uG(f={}){let J=vf(),{theme:Y}=i0(),z=()=>uy(vY),G=()=>f.onClose?f.onClose():J.clear(),[X,q]=r("\u2303B");return f1(()=>{d0(["show-options","-g","prefix"]).then(({code:Q,stdout:H})=>{if(Q!==0)return;let B=EQ(H);if(B)q(B)})}),Uf(()=>({bindings:[{key:"?",cmd:G}]})),(()=>{var Q=W("box"),H=W("box"),B=W("text"),V=W("text"),j=W("scrollbox"),U=W("box");return D(Q,H),D(Q,j),Z(Q,"paddingLeft",2),Z(Q,"paddingRight",2),Z(Q,"gap",1),Z(Q,"flexShrink",1),D(H,B),D(H,V),Z(H,"flexDirection","row"),Z(H,"justifyContent","space-between"),Z(H,"flexShrink",0),K(B,()=>F("help.title")),Z(V,"onMouseUp",G),K(V,()=>F("help.esc")),D(j,U),Z(j,"flexShrink",1),Z(j,"flexGrow",1),Z(j,"stickyScroll",!1),Z(U,"paddingBottom",1),Z(U,"gap",1),Z(U,"paddingRight",1),K(U,b(Zf,{get each(){return z()},children:(L)=>(()=>{var O=W("box"),M=W("text");return D(O,M),Z(O,"gap",0),K(M,()=>sj("category",L.category)),K(O,b(Zf,{get each(){return L.rows},children:(R)=>{let S=R.hint?.keys??R.keys[0]??"\u2014",a=()=>S==="\u2014"?"\u2014":TG(S,X()),N=()=>(R.hint?R.keys:R.keys.slice(1)).map((g)=>TG(g,X()));return(()=>{var g=W("box"),C=W("box"),y=W("text"),_=W("box"),z0=W("text");return D(g,C),D(g,_),Z(g,"flexDirection","row"),Z(g,"gap",2),Z(g,"paddingLeft",1),D(C,y),Z(C,"width",14),K(y,a),D(_,z0),Z(_,"flexGrow",1),K(z0,()=>sj("desc",R.id)),K(g,(()=>{var t=I0(()=>N().length>0);return()=>t()?(()=>{var Y0=W("box"),T=W("text");return D(Y0,T),K(T,()=>`(${N().join(", ")})`),u((Q0)=>Z(T,"fg",Y.textMuted,Q0)),Y0})():null})(),null),u((t)=>{var{primary:Y0,text:T}=Y;return Y0!==t.e&&(t.e=Z(y,"fg",Y0,t.e)),T!==t.t&&(t.t=Z(z0,"fg",T,t.t)),t},{e:void 0,t:void 0}),g})()}}),null),u((R)=>{var S=Y.accent,a=_4.BOLD;return S!==R.e&&(R.e=Z(M,"fg",S,R.e)),a!==R.t&&(R.t=Z(M,"attributes",a,R.t)),R},{e:void 0,t:void 0}),O})()})),u((L)=>{var O=_4.BOLD,M=Y.text,R=Y.textMuted,S={trackOptions:{backgroundColor:Y.backgroundDialog,foregroundColor:Y.borderActive}};return O!==L.e&&(L.e=Z(B,"attributes",O,L.e)),M!==L.t&&(L.t=Z(B,"fg",M,L.t)),R!==L.a&&(L.a=Z(V,"fg",R,L.a)),S!==L.o&&(L.o=Z(j,"verticalScrollbarOptions",S,L.o)),L},{e:void 0,t:void 0,a:void 0,o:void 0}),Q})()}var F8=k(()=>{h();h();h();h();h();h();h();Wf();Tf();SG();xf();G1();M8();b1();P1();uG.show=(f)=>{f.replace(()=>b(uG,{}))}});import{TextAttributes as Ey}from"@opentui/core";function o4(f){let J=vf(),{theme:Y}=i0(),[z,G]=r(f.currentTitle);function X(){let q=z().trim();if(!q&&!f.allowEmpty)return;f.onSubmit(q),J.clear()}return(()=>{var q=W("box"),Q=W("box"),H=W("text"),B=W("text"),V=W("box"),j=W("text"),U=W("input"),L=W("box"),O=W("text");return D(q,Q),D(q,V),D(q,L),Z(q,"paddingLeft",2),Z(q,"paddingRight",2),Z(q,"gap",1),D(Q,H),D(Q,B),Z(Q,"flexDirection","row"),Z(Q,"justifyContent","space-between"),K(H,()=>f.dialogTitle??F("common.rename.defaultTitle")),D(B,x0("esc")),Z(B,"onMouseUp",()=>f.onCancel()),D(V,j),D(V,U),Z(V,"gap",0),K(j,()=>f.fieldLabel??F("common.rename.defaultFieldLabel")),Z(U,"focused",!0),Z(U,"onInput",(M)=>G(X1(M))),Z(U,"onSubmit",()=>X()),D(L,O),Z(L,"paddingBottom",1),K(O,()=>F("common.rename.footerHint",{submitLabel:f.submitLabel??F("common.rename.defaultSubmitLabel")})),u((M)=>{var R=Ey.BOLD,S=Y.text,a=Y.textMuted,N=Y.accent,g=z(),C=f.placeholder??f.currentTitle,y=Y.textMuted;return R!==M.e&&(M.e=Z(H,"attributes",R,M.e)),S!==M.t&&(M.t=Z(H,"fg",S,M.t)),a!==M.a&&(M.a=Z(B,"fg",a,M.a)),N!==M.o&&(M.o=Z(j,"fg",N,M.o)),g!==M.i&&(M.i=Z(U,"value",g,M.i)),C!==M.n&&(M.n=Z(U,"placeholder",C,M.n)),y!==M.s&&(M.s=Z(O,"fg",y,M.s)),M},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),q})()}var s4=k(()=>{h();h();h();h();h();h();h();G1();Wf();xf();P1();bG()});function xy(f,J,Y={}){return new Promise((z)=>{f.replace(()=>b(o4,{currentTitle:J,get dialogTitle(){return Y.dialogTitle},get fieldLabel(){return Y.fieldLabel},get submitLabel(){return Y.submitLabel},get placeholder(){return Y.placeholder},get allowEmpty(){return Y.allowEmpty},onSubmit:(G)=>z(G),onCancel:()=>z(void 0)}),()=>z(void 0))})}var YY;var O8=k(()=>{h();s4();YY={show:xy}});import{TextAttributes as wy}from"@opentui/core";function hy(f){if(!f)return f;return f.charAt(0).toUpperCase()+f.slice(1)}function zY(f){let J=vf(),{theme:Y}=i0(),[z,G]=uJ({active:f.initialActive??"confirm"});return Uf(()=>({bindings:[{key:"return",cmd:()=>{if(z.active==="confirm")f.onConfirm?.();if(z.active==="cancel")f.onCancel?.();J.clear()}},{key:"left",cmd:()=>G("active",z.active==="confirm"?"cancel":"confirm")},{key:"right",cmd:()=>G("active",z.active==="confirm"?"cancel":"confirm")}]})),(()=>{var X=W("box"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("box");return D(X,q),D(X,B),D(X,V),Z(X,"paddingLeft",2),Z(X,"paddingRight",2),Z(X,"paddingBottom",1),Z(X,"gap",0),D(q,Q),D(q,H),Z(q,"flexDirection","row"),Z(q,"justifyContent","space-between"),K(Q,()=>f.title),D(H,x0("esc")),Z(H,"onMouseUp",()=>J.clear()),K(B,()=>f.message),Z(V,"flexDirection","row"),Z(V,"justifyContent","flex-end"),Z(V,"paddingTop",1),K(V,b(Zf,{each:["cancel","confirm"],children:(j)=>(()=>{var U=W("box"),L=W("text");return D(U,L),Z(U,"paddingLeft",1),Z(U,"paddingRight",1),Z(U,"onMouseUp",()=>{if(j==="confirm")f.onConfirm?.();if(j==="cancel")f.onCancel?.();J.clear()}),K(L,()=>hy(j==="cancel"?f.label??F("common.cancel"):f.confirmLabel??F("common.confirm"))),u((O)=>{var M=j===z.active?Y.primary:void 0,R=j===z.active?Y.selectedListItemText:Y.textMuted;return M!==O.e&&(O.e=Z(U,"backgroundColor",M,O.e)),R!==O.t&&(O.t=Z(L,"fg",R,O.t)),O},{e:void 0,t:void 0}),U})()})),u((j)=>{var U=wy.BOLD,L=Y.text,O=Y.textMuted,M=Y.textMuted;return U!==j.e&&(j.e=Z(Q,"attributes",U,j.e)),L!==j.t&&(j.t=Z(Q,"fg",L,j.t)),O!==j.a&&(j.a=Z(H,"fg",O,j.a)),M!==j.o&&(j.o=Z(B,"fg",M,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),X})()}var A8=k(()=>{h();h();h();h();h();h();h();G1();Wf();CG();xf();b1();P1();zY.show=(f,J,Y,z,G,X)=>{return new Promise((q)=>{f.replace(()=>b(zY,{title:J,message:Y,onConfirm:()=>q(!0),onCancel:()=>q(!1),label:z,confirmLabel:G,get initialActive(){return X?.initialActive}}),()=>q(void 0)),f.setSize("small")})}});import{unlinkSync as Py}from"fs";import{join as vy}from"path";function t4(f){return f instanceof j1}function e4(f,J){try{f?.destroy()}catch(Y){console.error(`kobe: renderer.destroy() failed during ${J}:`,Y)}}async function g8(f,J,Y){if(await zY.show(f,"Reset UI state?","Wipes ~/.config/kobe/state.json and ~/.kobe/tasks.json, then quits kobe \u2014 relaunch for a fresh start with empty Working session / Archive lists. Worktrees on disk and Claude Code session history are NOT touched.","cancel")!==!0)return;J.clear();try{Py(vy(OJ(),".kobe","tasks.json"))}catch(G){if(G.code!=="ENOENT")console.error("kobe: failed to delete tasks.json during reset:",G)}e4(Y,"reset"),process.stderr.write(`kobe: UI state reset. Relaunch kobe to start fresh.
|
|
224
|
+
`),process.exit(0)}async function R8(f,J,Y){if(!(J instanceof j1))return;if(await zY.show(f,"Restart backend?","Quits this kobe window. Relaunch to (re)spawn the daemon. Any other attached windows keep their connection. In v0.6 the daemon's RPC surface shrank to task CRUD + subscribe, so a graceful daemon.stop RPC is no longer plumbed through the client \u2014 quit + relaunch is the path.","cancel")!==!0)return;e4(Y,"daemon restart"),process.stderr.write(`kobe: window closed. Relaunch kobe to start fresh.
|
|
225
|
+
`),process.exit(0)}var fD=k(()=>{PY();lf();A8()});function my(f){return`theme:${f}`}function C8(f){return`language:${f}`}function k8(f){return`accent:${f}`}function cy(f){return`engine:${f}`}function cX(f){return`surface:${f}`}function N8(f){return[...f.themeNames.map((J)=>({id:my(J),kind:"theme",name:J})),...bz.map((J)=>({id:C8(J.id),kind:"language",locale:J.id})),{id:"transparent",kind:"transparent"},...f.focusAccentSlots.map((J)=>({id:k8(J),kind:"focusAccent",slot:J})),{id:"toast",kind:"toast"},{id:"sound",kind:"sound"},{id:"zen-keep-tasks",kind:"zenKeepTasks"},{id:cX("chattab"),kind:"surface",surface:"chattab"},{id:cX("taskpanel"),kind:"surface",surface:"taskpanel"},{id:"editor-kind",kind:"editorKind"},{id:"editor-custom",kind:"editorCustom"}]}function ny(f){return[...f.map((J)=>({id:cy(J),kind:"engine",vendor:J})),{id:"add-engine",kind:"engineAdd"}]}function dy(){return[{id:"feedback-title",kind:"feedbackTitle"},{id:"feedback-body",kind:"feedbackBody"},{id:"feedback-send",kind:"feedbackSend"}]}function nX(f){return[{id:"dev-reset",kind:"devReset"},...f?[{id:"dev-restart",kind:"devRestartDaemon"}]:[],{id:"remote-projects",kind:"devRemoteProjects"},{id:"auto-status",kind:"devAutoStatus"},{id:"dispatcher",kind:"devDispatcher"}]}function JD(f,J){switch(f){case"general":return N8(J);case"engines":return ny(J.engineList);case"accounts":case"keys":return[];case"feedback":return dy();case"dev":return nX(J.hasDaemon)}}function dX(f,J){return f.findIndex((Y)=>Y.id===J)}function xQ(f,J){return f[J]}var Iz;var y8=k(()=>{yG();Iz=[{id:"general",label:"General"},{id:"engines",label:"Engines"},{id:"accounts",label:"Accounts"},{id:"keys",label:"Keybindings"},{id:"feedback",label:"Feedback"},{id:"dev",label:"Dev"}]});import{TextAttributes as ff}from"@opentui/core";function YD(f){let{theme:J}=i0();return(()=>{var Y=W("box");return Z(Y,"flexDirection","column"),Z(Y,"flexShrink",0),Z(Y,"width",14),Z(Y,"gap",1),K(Y,b(Zf,{each:Iz,children:(z,G)=>{let X=()=>G()===f.cursor(),q=()=>X()&&f.level()==="sidebar";return(()=>{var Q=W("box"),H=W("text");return D(Q,H),Z(Q,"paddingLeft",1),Z(Q,"paddingRight",1),Z(Q,"onMouseUp",()=>f.switchSection(z.id)),Z(H,"wrapMode","none"),K(H,()=>F(`settings.sections.${z.id}`)),u((B)=>{var V=q()?J.primary:void 0,j=q()?J.selectedListItemText:X()?J.accent:J.textMuted,U=X()?ff.BOLD:void 0;return V!==B.e&&(B.e=Z(Q,"backgroundColor",V,B.e)),j!==B.t&&(B.t=Z(H,"fg",j,B.t)),U!==B.a&&(B.a=Z(H,"attributes",U,B.a)),B},{e:void 0,t:void 0,a:void 0}),Q})()}})),Y})()}function zD(f){let J=i0(),{theme:Y}=J,z=()=>N8({themeNames:f.themeNames(),focusAccentSlots:yz}),G=(C)=>dX(z(),C),X=()=>G("transparent"),q=()=>G("toast"),Q=()=>G("sound"),H=()=>G("zen-keep-tasks"),B=()=>G(cX("chattab")),V=()=>G(cX("taskpanel")),j=()=>G("editor-kind"),U=()=>G("editor-custom"),L=()=>f.bodyRow()===X(),O=()=>f.bodyRow()===q(),M=()=>f.bodyRow()===Q(),R=()=>f.bodyRow()===H(),S=()=>f.bodyRow()===B(),a=()=>f.bodyRow()===V(),N=()=>f.bodyRow()===j(),g=()=>f.bodyRow()===U();return(()=>{var C=W("box"),y=W("text"),_=W("text"),z0=W("box"),t=W("box"),Y0=W("text"),T=W("text"),Q0=W("box"),p=W("text"),D0=W("text"),g0=W("box"),$=W("text"),E=W("box"),f0=W("text"),I=W("text"),G0=W("box"),x=W("text"),c=W("text"),Z0=W("box"),V0=W("text"),H0=x0(" "),y0=W("box"),w0=W("text"),T0=x0(" "),r0=W("box"),P=W("text"),M0=W("text"),J0=W("box"),F0=W("text"),a0=x0(" "),p0=W("box"),u0=W("text"),_0=W("text"),n=W("box"),q0=W("text"),b0=x0(" "),o0=W("box"),l0=W("text"),$0=x0(" "),t0=W("box"),Rf=W("text"),Af=W("text"),o=W("box"),e=W("text"),B0=W("box"),C0=W("text");return D(C,y),D(C,_),D(C,z0),D(C,t),D(C,Q0),D(C,E),D(C,G0),D(C,r0),D(C,p0),D(C,t0),Z(C,"flexDirection","column"),Z(C,"gap",1),K(y,()=>F("settings.general.theme")),K(_,()=>F("settings.general.themeHint")),Z(z0,"flexDirection","column"),Z(z0,"gap",0),K(z0,b(Zf,{get each(){return f.themeNames()},children:(A,P0)=>{let K0=()=>f.level()==="body"&&f.bodyRow()===P0(),E0=()=>A===J.selected;return(()=>{var W0=W("box"),L0=W("text");return D(W0,L0),Z(W0,"flexDirection","row"),Z(W0,"gap",1),Z(W0,"paddingLeft",1),Z(W0,"paddingRight",1),Z(W0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(P0()),f.setThemeCursor(P0()),f.selectTheme(A)}),Z(L0,"wrapMode","none"),K(L0,()=>E0()?"\u25CF ":" ",null),K(L0,A,null),u((R0)=>{var Jf=K0()?Y.primary:void 0,Yf=K0()?Y.selectedListItemText:E0()?Y.accent:Y.text,n0=K0()||E0()?ff.BOLD:void 0;return Jf!==R0.e&&(R0.e=Z(W0,"backgroundColor",Jf,R0.e)),Yf!==R0.t&&(R0.t=Z(L0,"fg",Yf,R0.t)),n0!==R0.a&&(R0.a=Z(L0,"attributes",n0,R0.a)),R0},{e:void 0,t:void 0,a:void 0}),W0})()}})),D(t,Y0),D(t,T),Z(t,"flexDirection","column"),Z(t,"gap",0),Z(t,"paddingTop",1),K(Y0,()=>F("settings.general.language")),Z(T,"wrapMode","word"),K(T,()=>F("settings.general.languageHint")),K(t,b(Zf,{each:bz,children:(A)=>{let P0=()=>G(C8(A.id)),K0=()=>f.level()==="body"&&f.bodyRow()===P0(),E0=()=>f.currentLocale()===A.id;return(()=>{var W0=W("box"),L0=W("text");return D(W0,L0),Z(W0,"flexDirection","row"),Z(W0,"gap",1),Z(W0,"paddingLeft",1),Z(W0,"paddingRight",1),Z(W0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(P0()),f.selectLanguage(A.id)}),Z(L0,"wrapMode","none"),K(L0,()=>E0()?"\u25CF ":" ",null),K(L0,()=>A.label,null),u((R0)=>{var Jf=K0()?Y.primary:void 0,Yf=K0()?Y.selectedListItemText:E0()?Y.accent:Y.text,n0=K0()||E0()?ff.BOLD:void 0;return Jf!==R0.e&&(R0.e=Z(W0,"backgroundColor",Jf,R0.e)),Yf!==R0.t&&(R0.t=Z(L0,"fg",Yf,R0.t)),n0!==R0.a&&(R0.a=Z(L0,"attributes",n0,R0.a)),R0},{e:void 0,t:void 0,a:void 0}),W0})()}}),null),D(Q0,p),D(Q0,D0),D(Q0,g0),Z(Q0,"flexDirection","column"),Z(Q0,"gap",0),Z(Q0,"paddingTop",1),K(p,()=>F("settings.general.transparent")),Z(D0,"wrapMode","word"),K(D0,()=>F("settings.general.transparentHint")),D(g0,$),Z(g0,"flexDirection","row"),Z(g0,"paddingLeft",1),Z(g0,"paddingRight",1),Z(g0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(X()),f.toggleTransparent()}),Z($,"wrapMode","none"),K($,(()=>{var A=I0(()=>!!J.transparentBackground);return()=>A()?F("settings.general.on"):F("settings.general.off")})()),D(E,f0),D(E,I),Z(E,"flexDirection","column"),Z(E,"gap",0),Z(E,"paddingTop",1),K(f0,()=>F("settings.general.focusAccent")),Z(I,"wrapMode","word"),K(I,()=>F("settings.general.focusAccentHint")),K(E,b(Zf,{each:yz,children:(A)=>{let P0=()=>G(k8(A)),K0=()=>f.level()==="body"&&f.bodyRow()===P0(),E0=()=>J.focusAccent===A;return(()=>{var W0=W("box"),L0=W("text");return D(W0,L0),Z(W0,"flexDirection","row"),Z(W0,"gap",1),Z(W0,"paddingLeft",1),Z(W0,"paddingRight",1),Z(W0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(P0()),f.selectFocusAccent(A)}),Z(L0,"wrapMode","none"),K(L0,()=>E0()?"\u25CF ":" ",null),K(L0,()=>F(`settings.general.accent${A.charAt(0).toUpperCase()}${A.slice(1)}`),null),u((R0)=>{var Jf=K0()?Y.primary:void 0,Yf=K0()?Y.selectedListItemText:E0()?Y.focusAccent:Y.text,n0=K0()||E0()?ff.BOLD:void 0;return Jf!==R0.e&&(R0.e=Z(W0,"backgroundColor",Jf,R0.e)),Yf!==R0.t&&(R0.t=Z(L0,"fg",Yf,R0.t)),n0!==R0.a&&(R0.a=Z(L0,"attributes",n0,R0.a)),R0},{e:void 0,t:void 0,a:void 0}),W0})()}}),null),D(G0,x),D(G0,c),D(G0,Z0),D(G0,y0),Z(G0,"flexDirection","column"),Z(G0,"gap",0),Z(G0,"paddingTop",1),K(x,()=>F("settings.general.notifications")),Z(c,"wrapMode","word"),K(c,()=>F("settings.general.notificationsHint")),D(Z0,V0),Z(Z0,"flexDirection","row"),Z(Z0,"gap",1),Z(Z0,"paddingLeft",1),Z(Z0,"paddingRight",1),Z(Z0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(q()),f.toggleToast()}),D(V0,H0),Z(V0,"wrapMode","none"),K(V0,()=>f.toastEnabled()?"[x]":"[ ]",H0),K(V0,()=>F("settings.general.toast"),null),D(y0,w0),Z(y0,"flexDirection","row"),Z(y0,"gap",1),Z(y0,"paddingLeft",1),Z(y0,"paddingRight",1),Z(y0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Q()),f.toggleSound()}),D(w0,T0),Z(w0,"wrapMode","none"),K(w0,()=>f.soundEnabled()?"[x]":"[ ]",T0),K(w0,()=>F("settings.general.sound"),null),D(r0,P),D(r0,M0),D(r0,J0),Z(r0,"flexDirection","column"),Z(r0,"gap",0),Z(r0,"paddingTop",1),K(P,()=>F("settings.general.zen")),Z(M0,"wrapMode","word"),K(M0,()=>F("settings.general.zenHint")),D(J0,F0),Z(J0,"flexDirection","row"),Z(J0,"gap",1),Z(J0,"paddingLeft",1),Z(J0,"paddingRight",1),Z(J0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(H()),f.toggleZenKeepsTasks()}),D(F0,a0),Z(F0,"wrapMode","none"),K(F0,()=>f.zenKeepsTasks()?"[x]":"[ ]",a0),K(F0,()=>F("settings.general.zenKeepTasks"),null),D(p0,u0),D(p0,_0),D(p0,n),D(p0,o0),Z(p0,"flexDirection","column"),Z(p0,"gap",0),Z(p0,"paddingTop",1),K(u0,()=>F("settings.general.surface")),Z(_0,"wrapMode","word"),K(_0,()=>F("settings.general.surfaceHint")),D(n,q0),Z(n,"flexDirection","row"),Z(n,"gap",1),Z(n,"paddingLeft",1),Z(n,"paddingRight",1),Z(n,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(B()),f.selectSurface("chattab")}),D(q0,b0),Z(q0,"wrapMode","none"),K(q0,()=>f.settingsSurface()==="chattab"?"[x]":"[ ]",b0),K(q0,()=>F("settings.general.surfaceChattab"),null),D(o0,l0),Z(o0,"flexDirection","row"),Z(o0,"gap",1),Z(o0,"paddingLeft",1),Z(o0,"paddingRight",1),Z(o0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(V()),f.selectSurface("taskpanel")}),D(l0,$0),Z(l0,"wrapMode","none"),K(l0,()=>f.settingsSurface()==="taskpanel"?"[x]":"[ ]",$0),K(l0,()=>F("settings.general.surfaceTaskpanel"),null),D(t0,Rf),D(t0,Af),D(t0,o),D(t0,B0),Z(t0,"flexDirection","column"),Z(t0,"gap",0),Z(t0,"paddingTop",1),K(Rf,()=>F("settings.general.editor")),Z(Af,"wrapMode","word"),K(Af,()=>F("settings.general.editorHint")),D(o,e),Z(o,"flexDirection","row"),Z(o,"gap",1),Z(o,"paddingLeft",1),Z(o,"paddingRight",1),Z(o,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(j()),f.cycleEditorKind()}),Z(e,"wrapMode","none"),K(e,()=>F("settings.general.editorRow",{kind:f.editorKind()})),D(B0,C0),Z(B0,"flexDirection","row"),Z(B0,"gap",1),Z(B0,"paddingLeft",1),Z(B0,"paddingRight",1),Z(B0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(U()),f.editEditorCustom()}),Z(C0,"wrapMode","none"),K(C0,()=>F("settings.general.editorCustom",{cmd:f.editorCustomCommand().trim()||F("settings.general.editorCustomUnset")})),u((A)=>{var P0=Y.text,K0=ff.BOLD,E0=Y.textMuted,W0=Y.text,L0=ff.BOLD,R0=Y.textMuted,Jf=Y.text,Yf=ff.BOLD,n0=Y.textMuted,yf=L()?Y.primary:void 0,k0=L()?Y.selectedListItemText:J.transparentBackground?Y.accent:Y.textMuted,wf=ff.BOLD,v=Y.text,A0=ff.BOLD,Bf=Y.textMuted,Ff=Y.text,Qf=ff.BOLD,d=Y.textMuted,s=O()?Y.primary:void 0,S0=O()?Y.selectedListItemText:f.toastEnabled()?Y.accent:Y.textMuted,N0=ff.BOLD,Z1=M()?Y.primary:void 0,V1=M()?Y.selectedListItemText:f.soundEnabled()?Y.accent:Y.textMuted,tf=ff.BOLD,v1=Y.text,xJ=ff.BOLD,M1=Y.textMuted,wJ=R()?Y.primary:void 0,GY=R()?Y.selectedListItemText:f.zenKeepsTasks()?Y.accent:Y.textMuted,m=ff.BOLD,i=Y.text,l=ff.BOLD,w=Y.textMuted,m0=S()?Y.primary:void 0,v0=S()?Y.selectedListItemText:f.settingsSurface()==="chattab"?Y.accent:Y.textMuted,O0=ff.BOLD,c0=a()?Y.primary:void 0,qf=a()?Y.selectedListItemText:f.settingsSurface()==="taskpanel"?Y.accent:Y.textMuted,Df=ff.BOLD,q1=Y.text,s1=ff.BOLD,XY=Y.textMuted,_8=N()?Y.primary:void 0,o8=N()?Y.selectedListItemText:Y.accent,s8=ff.BOLD,t8=g()?Y.primary:void 0,e8=g()?Y.selectedListItemText:f.editorKind()==="custom"?Y.text:Y.textMuted;return P0!==A.e&&(A.e=Z(y,"fg",P0,A.e)),K0!==A.t&&(A.t=Z(y,"attributes",K0,A.t)),E0!==A.a&&(A.a=Z(_,"fg",E0,A.a)),W0!==A.o&&(A.o=Z(Y0,"fg",W0,A.o)),L0!==A.i&&(A.i=Z(Y0,"attributes",L0,A.i)),R0!==A.n&&(A.n=Z(T,"fg",R0,A.n)),Jf!==A.s&&(A.s=Z(p,"fg",Jf,A.s)),Yf!==A.h&&(A.h=Z(p,"attributes",Yf,A.h)),n0!==A.r&&(A.r=Z(D0,"fg",n0,A.r)),yf!==A.d&&(A.d=Z(g0,"backgroundColor",yf,A.d)),k0!==A.l&&(A.l=Z($,"fg",k0,A.l)),wf!==A.u&&(A.u=Z($,"attributes",wf,A.u)),v!==A.c&&(A.c=Z(f0,"fg",v,A.c)),A0!==A.w&&(A.w=Z(f0,"attributes",A0,A.w)),Bf!==A.m&&(A.m=Z(I,"fg",Bf,A.m)),Ff!==A.f&&(A.f=Z(x,"fg",Ff,A.f)),Qf!==A.y&&(A.y=Z(x,"attributes",Qf,A.y)),d!==A.g&&(A.g=Z(c,"fg",d,A.g)),s!==A.p&&(A.p=Z(Z0,"backgroundColor",s,A.p)),S0!==A.b&&(A.b=Z(V0,"fg",S0,A.b)),N0!==A.T&&(A.T=Z(V0,"attributes",N0,A.T)),Z1!==A.A&&(A.A=Z(y0,"backgroundColor",Z1,A.A)),V1!==A.O&&(A.O=Z(w0,"fg",V1,A.O)),tf!==A.I&&(A.I=Z(w0,"attributes",tf,A.I)),v1!==A.S&&(A.S=Z(P,"fg",v1,A.S)),xJ!==A.W&&(A.W=Z(P,"attributes",xJ,A.W)),M1!==A.C&&(A.C=Z(M0,"fg",M1,A.C)),wJ!==A.B&&(A.B=Z(J0,"backgroundColor",wJ,A.B)),GY!==A.v&&(A.v=Z(F0,"fg",GY,A.v)),m!==A.k&&(A.k=Z(F0,"attributes",m,A.k)),i!==A.x&&(A.x=Z(u0,"fg",i,A.x)),l!==A.j&&(A.j=Z(u0,"attributes",l,A.j)),w!==A.q&&(A.q=Z(_0,"fg",w,A.q)),m0!==A.z&&(A.z=Z(n,"backgroundColor",m0,A.z)),v0!==A.P&&(A.P=Z(q0,"fg",v0,A.P)),O0!==A.H&&(A.H=Z(q0,"attributes",O0,A.H)),c0!==A.F&&(A.F=Z(o0,"backgroundColor",c0,A.F)),qf!==A.M&&(A.M=Z(l0,"fg",qf,A.M)),Df!==A.D&&(A.D=Z(l0,"attributes",Df,A.D)),q1!==A.R&&(A.R=Z(Rf,"fg",q1,A.R)),s1!==A.E&&(A.E=Z(Rf,"attributes",s1,A.E)),XY!==A.L&&(A.L=Z(Af,"fg",XY,A.L)),_8!==A.N&&(A.N=Z(o,"backgroundColor",_8,A.N)),o8!==A.G&&(A.G=Z(e,"fg",o8,A.G)),s8!==A.U&&(A.U=Z(e,"attributes",s8,A.U)),t8!==A.K&&(A.K=Z(B0,"backgroundColor",t8,A.K)),e8!==A.V&&(A.V=Z(C0,"fg",e8,A.V)),A},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0,y:void 0,g:void 0,p:void 0,b:void 0,T:void 0,A:void 0,O:void 0,I:void 0,S:void 0,W:void 0,C:void 0,B:void 0,v:void 0,k:void 0,x:void 0,j:void 0,q:void 0,z:void 0,P:void 0,H:void 0,F:void 0,M:void 0,D:void 0,R:void 0,E:void 0,L:void 0,N:void 0,G:void 0,U:void 0,K:void 0,V:void 0}),C})()}function GD(f){let{theme:J}=i0(),Y=()=>f.vendors.length;return(()=>{var z=W("box"),G=W("text"),X=W("text"),q=W("box"),Q=W("box"),H=W("text");return D(z,G),D(z,X),D(z,q),Z(z,"flexDirection","column"),Z(z,"gap",1),K(G,()=>F("settings.engines.title")),Z(X,"wrapMode","word"),K(X,()=>F("settings.engines.hint")),D(q,Q),Z(q,"flexDirection","column"),Z(q,"gap",0),K(q,b(Zf,{get each(){return f.vendors},children:(B,V)=>{let j=()=>f.level()==="body"&&f.bodyRow()===V();return(()=>{var U=W("box"),L=W("text"),O=W("text"),M=W("text");return D(U,L),D(U,O),D(U,M),Z(U,"flexDirection","row"),Z(U,"gap",1),Z(U,"paddingLeft",1),Z(U,"paddingRight",1),Z(U,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(V()),f.editEngine(B)}),Z(L,"wrapMode","none"),K(L,()=>f.isDefaultEngine(B)?"\u25CF":" "),Z(O,"wrapMode","none"),K(O,()=>f.displayName(B)),Z(M,"wrapMode","none"),K(M,()=>f.commandText(B),null),K(M,(()=>{var R=I0(()=>!!f.isDefault(B));return()=>R()?F("settings.engines.defaultTag"):I0(()=>!!f.isCustom(B))()?F("settings.engines.customTag"):""})(),null),u((R)=>{var S=j()?J.primary:void 0,a=j()?J.selectedListItemText:J.accent,N=ff.BOLD,g=j()?J.selectedListItemText:J.text,C=ff.BOLD,y=j()?J.selectedListItemText:f.isDefault(B)?J.textMuted:J.accent;return S!==R.e&&(R.e=Z(U,"backgroundColor",S,R.e)),a!==R.t&&(R.t=Z(L,"fg",a,R.t)),N!==R.a&&(R.a=Z(L,"attributes",N,R.a)),g!==R.o&&(R.o=Z(O,"fg",g,R.o)),C!==R.i&&(R.i=Z(O,"attributes",C,R.i)),y!==R.n&&(R.n=Z(M,"fg",y,R.n)),R},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),U})()}}),Q),D(Q,H),Z(Q,"flexDirection","row"),Z(Q,"paddingLeft",1),Z(Q,"paddingRight",1),Z(Q,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(Y()),f.onAddEngine()}),Z(H,"wrapMode","none"),K(H,()=>F("settings.engines.addEngine")),u((B)=>{var V=J.text,j=ff.BOLD,U=J.textMuted,L=f.level()==="body"&&f.bodyRow()===Y()?J.primary:void 0,O=f.level()==="body"&&f.bodyRow()===Y()?J.selectedListItemText:J.primary;return V!==B.e&&(B.e=Z(G,"fg",V,B.e)),j!==B.t&&(B.t=Z(G,"attributes",j,B.t)),U!==B.a&&(B.a=Z(X,"fg",U,B.a)),L!==B.o&&(B.o=Z(Q,"backgroundColor",L,B.o)),O!==B.i&&(B.i=Z(H,"fg",O,B.i)),B},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),z})()}function XD(f){let{theme:J}=i0(),Y=(z)=>z.binary.found?`Binary: ${z.binary.path}`:`Binary: ${z.binary.error}`;return(()=>{var z=W("box"),G=W("text"),X=W("text"),q=W("box"),Q=W("text"),H=W("box"),B=W("text"),V=W("box"),j=W("text");return D(z,G),D(z,X),D(z,q),D(z,H),D(z,V),Z(z,"flexDirection","column"),Z(z,"gap",1),K(G,()=>F("settings.accounts.title")),Z(X,"wrapMode","word"),K(X,()=>F("settings.accounts.hint")),D(q,Q),Z(q,"flexDirection","column"),Z(q,"gap",0),D(Q,x0("claude-code")),K(q,b(X0,{get when(){return f.claudeStatus()===null},get children(){var U=W("text");return K(U,()=>F("settings.accounts.checking")),u((L)=>Z(U,"fg",J.textMuted,L)),U}}),null),K(q,b(X0,{get when(){return f.claudeStatus()},children:(U)=>(()=>{var L=W("box"),O=W("text");return D(L,O),Z(L,"flexDirection","column"),Z(L,"gap",0),Z(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="oauth"){let R=[M.organization,M.billingType].filter((S)=>!!S).join(" \xB7 ");return(()=>{var S=W("text");return Z(S,"wrapMode","word"),K(S,()=>F("settings.accounts.loggedIn",{email:M.email}),null),K(S,R?` (${R})`:"",null),u((a)=>Z(S,"fg",J.success,a)),S})()}return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.notLoggedIn")),u((S)=>Z(R,"fg",J.textMuted,S)),R})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var R=W("text");return Z(R,"wrapMode","word"),K(R,()=>`! ${M()}`),u((S)=>Z(R,"fg",J.warning,S)),R})()}),null),u((M)=>Z(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),D(H,B),Z(H,"flexDirection","column"),Z(H,"gap",0),D(B,x0("codex")),K(H,b(X0,{get when(){return f.codexStatus()===null},get children(){var U=W("text");return K(U,()=>F("settings.accounts.checking")),u((L)=>Z(U,"fg",J.textMuted,L)),U}}),null),K(H,b(X0,{get when(){return f.codexStatus()},children:(U)=>(()=>{var L=W("box"),O=W("text");return D(L,O),Z(L,"flexDirection","column"),Z(L,"gap",0),Z(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="chatgpt")return(()=>{var R=W("text");return Z(R,"wrapMode","word"),K(R,()=>F("settings.accounts.chatgptLogin",{email:M.email}),null),K(R,(()=>{var S=I0(()=>!!M.plan);return()=>S()?` (${M.plan})`:""})(),null),u((S)=>Z(R,"fg",J.success,S)),R})();if(M.kind==="apikey")return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.apiKeyConfigured")),u((S)=>Z(R,"fg",J.success,S)),R})();return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.notLoggedIn")),u((S)=>Z(R,"fg",J.textMuted,S)),R})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var R=W("text");return Z(R,"wrapMode","word"),K(R,()=>`! ${M()}`),u((S)=>Z(R,"fg",J.warning,S)),R})()}),null),u((M)=>Z(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),D(V,j),Z(V,"flexDirection","column"),Z(V,"gap",0),D(j,x0("copilot")),K(V,b(X0,{get when(){return f.copilotStatus()===null},get children(){var U=W("text");return K(U,()=>F("settings.accounts.checking")),u((L)=>Z(U,"fg",J.textMuted,L)),U}}),null),K(V,b(X0,{get when(){return f.copilotStatus()},children:(U)=>(()=>{var L=W("box"),O=W("text");return D(L,O),Z(L,"flexDirection","column"),Z(L,"gap",0),Z(O,"wrapMode","word"),K(O,()=>Y(U())),K(L,()=>{let M=U().account;if(M.kind==="token")return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.tokenConfigured",{source:M.source})),u((S)=>Z(R,"fg",J.success,S)),R})();if(M.kind==="oauth")return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.copilotDetected")),u((S)=>Z(R,"fg",J.success,S)),R})();return(()=>{var R=W("text");return K(R,()=>F("settings.accounts.notLoggedIn")),u((S)=>Z(R,"fg",J.textMuted,S)),R})()},null),K(L,b(X0,{get when(){return U().accountError},children:(M)=>(()=>{var R=W("text");return Z(R,"wrapMode","word"),K(R,()=>`! ${M()}`),u((S)=>Z(R,"fg",J.warning,S)),R})()}),null),u((M)=>Z(O,"fg",U().binary.found?J.textMuted:J.warning,M)),L})()}),null),u((U)=>{var L=J.text,O=ff.BOLD,M=J.textMuted,R=J.text,S=ff.BOLD,a=J.text,N=ff.BOLD,g=J.text,C=ff.BOLD;return L!==U.e&&(U.e=Z(G,"fg",L,U.e)),O!==U.t&&(U.t=Z(G,"attributes",O,U.t)),M!==U.a&&(U.a=Z(X,"fg",M,U.a)),R!==U.o&&(U.o=Z(Q,"fg",R,U.o)),S!==U.i&&(U.i=Z(Q,"attributes",S,U.i)),a!==U.n&&(U.n=Z(B,"fg",a,U.n)),N!==U.s&&(U.s=Z(B,"attributes",N,U.s)),g!==U.h&&(U.h=Z(j,"fg",g,U.h)),C!==U.r&&(U.r=Z(j,"attributes",C,U.r)),U},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),z})()}function ZD(f){let{theme:J}=i0(),Y=()=>f.level()==="body",z=()=>Y()&&f.bodyRow()===0,G=()=>Y()&&f.bodyRow()===1,X=()=>Y()&&f.bodyRow()===2,q=(H)=>H?J.primary:J.textMuted,Q=(H)=>H?ff.BOLD|ff.UNDERLINE:void 0;return(()=>{var H=W("box"),B=W("text"),V=W("text"),j=W("box"),U=W("box"),L=W("text"),O=W("input"),M=W("box"),R=W("text"),S=W("input"),a=W("box"),N=W("text");return D(H,B),D(H,V),D(H,j),Z(H,"flexDirection","column"),Z(H,"gap",1),K(B,()=>F("settings.feedback.title")),Z(V,"wrapMode","word"),K(V,()=>F("settings.feedback.hint")),D(j,U),D(j,M),D(j,a),Z(j,"flexDirection","column"),Z(j,"gap",1),D(U,L),D(U,O),Z(U,"gap",0),K(L,()=>F("settings.feedback.titleLabel")),Z(O,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(0)}),Z(O,"onInput",(g)=>f.setTitle(X1(g))),Z(O,"onSubmit",()=>f.onTitleSubmit()),D(M,R),D(M,S),Z(M,"gap",0),K(R,()=>F("settings.feedback.descriptionLabel")),Z(S,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(1)}),Z(S,"onInput",(g)=>f.setBody(X1(g))),Z(S,"onSubmit",()=>f.onBodySubmit()),D(a,N),Z(a,"flexDirection","row"),Z(a,"paddingLeft",1),Z(a,"paddingRight",1),Z(a,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(2),f.submit()}),K(N,()=>F("settings.feedback.send")),K(H,b(X0,{get when(){return f.status()},get children(){var g=W("text");return Z(g,"wrapMode","word"),K(g,()=>f.status()),u((C)=>Z(g,"fg",f.status().startsWith("error:")?J.warning:J.success,C)),g}}),null),u((g)=>{var C=J.text,y=ff.BOLD,_=J.textMuted,z0=q(z()),t=Q(z()),Y0=f.title(),T=F("settings.feedback.titlePlaceholder"),Q0=z(),p=q(G()),D0=Q(G()),g0=f.body(),$=F("settings.feedback.descriptionPlaceholder"),E=G(),f0=X()?J.primary:J.backgroundElement,I=X()?J.selectedListItemText:J.accent,G0=ff.BOLD;return C!==g.e&&(g.e=Z(B,"fg",C,g.e)),y!==g.t&&(g.t=Z(B,"attributes",y,g.t)),_!==g.a&&(g.a=Z(V,"fg",_,g.a)),z0!==g.o&&(g.o=Z(L,"fg",z0,g.o)),t!==g.i&&(g.i=Z(L,"attributes",t,g.i)),Y0!==g.n&&(g.n=Z(O,"value",Y0,g.n)),T!==g.s&&(g.s=Z(O,"placeholder",T,g.s)),Q0!==g.h&&(g.h=Z(O,"focused",Q0,g.h)),p!==g.r&&(g.r=Z(R,"fg",p,g.r)),D0!==g.d&&(g.d=Z(R,"attributes",D0,g.d)),g0!==g.l&&(g.l=Z(S,"value",g0,g.l)),$!==g.u&&(g.u=Z(S,"placeholder",$,g.u)),E!==g.c&&(g.c=Z(S,"focused",E,g.c)),f0!==g.w&&(g.w=Z(a,"backgroundColor",f0,g.w)),I!==g.m&&(g.m=Z(N,"fg",I,g.m)),G0!==g.f&&(g.f=Z(N,"attributes",G0,g.f)),g},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0}),H})()}function qD(f){let{theme:J}=i0(),Y=()=>f.level()==="body"&&f.bodyRow()===0,z=()=>f.level()==="body"&&f.bodyRow()===1,G=()=>dX(nX(f.hasDaemon),"remote-projects"),X=()=>f.level()==="body"&&f.bodyRow()===G(),q=()=>dX(nX(f.hasDaemon),"auto-status"),Q=()=>f.level()==="body"&&f.bodyRow()===q(),H=()=>dX(nX(f.hasDaemon),"dispatcher"),B=()=>f.level()==="body"&&f.bodyRow()===H();return(()=>{var V=W("box"),j=W("text"),U=W("text"),L=W("box"),O=W("text"),M=W("text"),R=W("box"),S=W("text"),a=W("text"),N=W("box"),g=W("text"),C=W("text"),y=W("box"),_=W("text"),z0=W("text"),t=W("box"),Y0=W("text");return D(V,j),D(V,U),D(V,L),D(V,M),D(V,R),Z(V,"flexDirection","column"),Z(V,"gap",1),K(j,()=>F("settings.dev.reset")),Z(U,"wrapMode","word"),K(U,()=>F("settings.dev.resetHint")),D(L,O),Z(L,"flexDirection","row"),Z(L,"paddingLeft",1),Z(L,"paddingRight",1),Z(L,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(0),f.confirmReset()}),K(O,()=>F("settings.dev.resetButton")),K(V,b(X0,{get when(){return f.hasDaemon},get children(){var T=W("box"),Q0=W("text"),p=W("text"),D0=W("box"),g0=W("text");return D(T,Q0),D(T,p),D(T,D0),Z(T,"flexDirection","column"),Z(T,"gap",0),Z(T,"paddingTop",1),K(Q0,()=>F("settings.dev.restart")),Z(p,"wrapMode","word"),K(p,()=>F("settings.dev.restartHint")),D(D0,g0),Z(D0,"flexDirection","row"),Z(D0,"paddingLeft",1),Z(D0,"paddingRight",1),Z(D0,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(1),f.confirmRestartDaemon()}),K(g0,()=>F("settings.dev.restartButton")),u(($)=>{var E=J.text,f0=ff.BOLD,I=J.textMuted,G0=z()?J.primary:J.backgroundElement,x=z()?J.selectedListItemText:J.accent,c=ff.BOLD;return E!==$.e&&($.e=Z(Q0,"fg",E,$.e)),f0!==$.t&&($.t=Z(Q0,"attributes",f0,$.t)),I!==$.a&&($.a=Z(p,"fg",I,$.a)),G0!==$.o&&($.o=Z(D0,"backgroundColor",G0,$.o)),x!==$.i&&($.i=Z(g0,"fg",x,$.i)),c!==$.n&&($.n=Z(g0,"attributes",c,$.n)),$},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),T}}),M),Z(M,"wrapMode","word"),K(M,()=>F("settings.dev.doctorHint")),D(R,S),D(R,a),D(R,N),D(R,C),D(R,y),D(R,z0),D(R,t),Z(R,"flexDirection","column"),Z(R,"gap",0),Z(R,"paddingTop",1),K(S,()=>F("settings.dev.experimental")),Z(a,"wrapMode","word"),K(a,()=>F("settings.dev.remoteHint")),D(N,g),Z(N,"flexDirection","row"),Z(N,"paddingLeft",1),Z(N,"paddingRight",1),Z(N,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(G()),f.toggleRemoteProjects()}),K(g,(()=>{var T=I0(()=>!!f.remoteProjectsEnabled());return()=>T()?F("settings.dev.remoteOn"):F("settings.dev.remoteOff")})()),Z(C,"wrapMode","word"),K(C,()=>F("settings.dev.autoStatusHint")),D(y,_),Z(y,"flexDirection","row"),Z(y,"paddingLeft",1),Z(y,"paddingRight",1),Z(y,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(q()),f.toggleAutoStatus()}),K(_,(()=>{var T=I0(()=>!!f.autoStatusEnabled());return()=>T()?F("settings.dev.autoStatusOn"):F("settings.dev.autoStatusOff")})()),Z(z0,"wrapMode","word"),K(z0,()=>F("settings.dev.dispatcherHint")),D(t,Y0),Z(t,"flexDirection","row"),Z(t,"paddingLeft",1),Z(t,"paddingRight",1),Z(t,"onMouseUp",()=>{f.setLevel("body"),f.setBodyRow(H()),f.toggleDispatcher()}),K(Y0,(()=>{var T=I0(()=>!!f.dispatcherEnabled());return()=>T()?F("settings.dev.dispatcherOn"):F("settings.dev.dispatcherOff")})()),u((T)=>{var Q0=J.text,p=ff.BOLD,D0=J.textMuted,g0=Y()?J.primary:J.backgroundElement,$=Y()?J.selectedListItemText:J.warning,E=ff.BOLD,f0=J.textMuted,I=J.text,G0=ff.BOLD,x=J.textMuted,c=X()?J.primary:J.backgroundElement,Z0=X()?J.selectedListItemText:J.text,V0=f.remoteProjectsEnabled()?ff.BOLD:void 0,H0=J.textMuted,y0=Q()?J.primary:J.backgroundElement,w0=Q()?J.selectedListItemText:J.text,T0=f.autoStatusEnabled()?ff.BOLD:void 0,r0=J.textMuted,P=B()?J.primary:J.backgroundElement,M0=B()?J.selectedListItemText:J.text,J0=f.dispatcherEnabled()?ff.BOLD:void 0;return Q0!==T.e&&(T.e=Z(j,"fg",Q0,T.e)),p!==T.t&&(T.t=Z(j,"attributes",p,T.t)),D0!==T.a&&(T.a=Z(U,"fg",D0,T.a)),g0!==T.o&&(T.o=Z(L,"backgroundColor",g0,T.o)),$!==T.i&&(T.i=Z(O,"fg",$,T.i)),E!==T.n&&(T.n=Z(O,"attributes",E,T.n)),f0!==T.s&&(T.s=Z(M,"fg",f0,T.s)),I!==T.h&&(T.h=Z(S,"fg",I,T.h)),G0!==T.r&&(T.r=Z(S,"attributes",G0,T.r)),x!==T.d&&(T.d=Z(a,"fg",x,T.d)),c!==T.l&&(T.l=Z(N,"backgroundColor",c,T.l)),Z0!==T.u&&(T.u=Z(g,"fg",Z0,T.u)),V0!==T.c&&(T.c=Z(g,"attributes",V0,T.c)),H0!==T.w&&(T.w=Z(C,"fg",H0,T.w)),y0!==T.m&&(T.m=Z(y,"backgroundColor",y0,T.m)),w0!==T.f&&(T.f=Z(_,"fg",w0,T.f)),T0!==T.y&&(T.y=Z(_,"attributes",T0,T.y)),r0!==T.g&&(T.g=Z(z0,"fg",r0,T.g)),P!==T.p&&(T.p=Z(t,"backgroundColor",P,T.p)),M0!==T.b&&(T.b=Z(Y0,"fg",M0,T.b)),J0!==T.T&&(T.T=Z(Y0,"attributes",J0,T.T)),T},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0,y:void 0,g:void 0,p:void 0,b:void 0,T:void 0}),V})()}function QD(){let{theme:f}=i0(),J=k4(),Y=Object.keys(wB).sort();return(()=>{var z=W("box"),G=W("text"),X=W("text"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("text");return D(z,G),D(z,X),D(z,q),D(z,B),D(z,V),Z(z,"flexDirection","column"),Z(z,"gap",1),K(G,()=>F("settings.keybindings.title")),Z(X,"wrapMode","word"),K(X,()=>F("settings.keybindings.hint")),D(q,Q),D(q,H),Z(q,"flexDirection","column"),Z(q,"gap",0),K(Q,()=>F("settings.keybindings.configFile")),Z(H,"wrapMode","word"),K(H,()=>J.path,null),K(H,(()=>{var j=I0(()=>!!J.exists);return()=>j()?"":F("settings.keybindings.notCreated")})(),null),K(z,b(X0,{get when(){return!J.exists},get children(){var j=W("box"),U=W("text"),L=W("text"),O=W("text"),M=W("text"),R=W("text"),S=W("text"),a=W("text"),N=W("text"),g=W("text"),C=W("text");return D(j,U),D(j,L),D(j,O),D(j,M),D(j,R),D(j,S),D(j,a),D(j,N),D(j,g),D(j,C),Z(j,"flexDirection","column"),Z(j,"gap",0),K(U,()=>F("settings.keybindings.example")),D(L,x0("bindings:")),D(O,x0(" chat.fork.new: ctrl+g # string = one chord")),D(M,x0(" sidebar.select: [enter] # list = several chords")),D(R,x0(" files.createPR: null # null = unbind")),D(S,x0(" tmux.tab.new: ctrl+y # tmux session key (see below)")),D(a,x0(" tmux.layout.workspaceSplit: g # prefix g")),D(N,x0("darwin: # platform overlay (also: linux)")),D(g,x0(" bindings:")),D(C,x0(" palette.open: [cmd+p, ctrl+p]")),u((y)=>{var _=f.text,z0=ff.BOLD,t=f.textMuted,Y0=f.textMuted,T=f.textMuted,Q0=f.textMuted,p=f.textMuted,D0=f.textMuted,g0=f.textMuted,$=f.textMuted,E=f.textMuted;return _!==y.e&&(y.e=Z(U,"fg",_,y.e)),z0!==y.t&&(y.t=Z(U,"attributes",z0,y.t)),t!==y.a&&(y.a=Z(L,"fg",t,y.a)),Y0!==y.o&&(y.o=Z(O,"fg",Y0,y.o)),T!==y.i&&(y.i=Z(M,"fg",T,y.i)),Q0!==y.n&&(y.n=Z(R,"fg",Q0,y.n)),p!==y.s&&(y.s=Z(S,"fg",p,y.s)),D0!==y.h&&(y.h=Z(a,"fg",D0,y.h)),g0!==y.r&&(y.r=Z(N,"fg",g0,y.r)),$!==y.d&&(y.d=Z(g,"fg",$,y.d)),E!==y.l&&(y.l=Z(C,"fg",E,y.l)),y},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0}),j}}),B),K(z,b(X0,{get when(){return J.exists},get children(){var j=W("box"),U=W("text");return D(j,U),Z(j,"flexDirection","column"),Z(j,"gap",0),K(U,()=>F("settings.keybindings.overridesApplied")),K(j,b(X0,{get when(){return J.applied.length===0},get children(){var L=W("text");return K(L,()=>F("settings.keybindings.none")),u((O)=>Z(L,"fg",f.textMuted,O)),L}}),null),K(j,b(Zf,{get each(){return J.applied},children:(L)=>(()=>{var O=W("text");return Z(O,"wrapMode","word"),K(O,()=>`${L.id} \u2192 ${L.keys.length>0?L.keys.join(" / "):"(unbound)"} (default: ${L.defaultKeys.join(" / ")})`),u((M)=>Z(O,"fg",f.text,M)),O})()}),null),u((L)=>{var O=f.text,M=ff.BOLD;return O!==L.e&&(L.e=Z(U,"fg",O,L.e)),M!==L.t&&(L.t=Z(U,"attributes",M,L.t)),L},{e:void 0,t:void 0}),j}}),B),K(z,b(X0,{get when(){return J.warnings.length>0},get children(){var j=W("box"),U=W("text");return D(j,U),Z(j,"flexDirection","column"),Z(j,"gap",0),K(U,()=>F("settings.keybindings.warnings")),K(j,b(Zf,{get each(){return J.warnings},children:(L)=>(()=>{var O=W("text");return Z(O,"wrapMode","word"),K(O,`! ${L}`),u((M)=>Z(O,"fg",f.warning,M)),O})()}),null),u((L)=>{var O=f.warning,M=ff.BOLD;return O!==L.e&&(L.e=Z(U,"fg",O,L.e)),M!==L.t&&(L.t=Z(U,"attributes",M,L.t)),L},{e:void 0,t:void 0}),j}}),B),D(B,x0("tmux session keys use the same file: tmux.tab.new (ctrl+t), tmux.tab.prev/next (ctrl+[/]), tmux.tab.close (ctrl+w), tmux.tab.rename (f2), tmux.tab.chooseEngine (ctrl+shift+t), tmux.detach (ctrl+q), tmux.focus (4 chords, left/down/up/right), and prefix layout keys: workspaceSplit (s), workspaceClose (x), workspaceReset (r), tasksToggle (a), opsToggle (o), terminalToggle (z). They apply when a session is (re)built.")),Z(B,"wrapMode","word"),Z(V,"wrapMode","word"),K(V,()=>`Fixed (not rebindable): ${Y.join(", ")}.`),u((j)=>{var U=f.text,L=ff.BOLD,O=f.textMuted,M=f.text,R=ff.BOLD,S=f.textMuted,a=f.textMuted,N=f.textMuted;return U!==j.e&&(j.e=Z(G,"fg",U,j.e)),L!==j.t&&(j.t=Z(G,"attributes",L,j.t)),O!==j.a&&(j.a=Z(X,"fg",O,j.a)),M!==j.o&&(j.o=Z(Q,"fg",M,j.o)),R!==j.i&&(j.i=Z(Q,"attributes",R,j.i)),S!==j.n&&(j.n=Z(H,"fg",S,j.n)),a!==j.s&&(j.s=Z(B,"fg",a,j.s)),N!==j.h&&(j.h=Z(V,"fg",N,j.h)),j},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),z})()}var HD=k(()=>{h();h();h();h();h();h();h();h();Wf();H8();xf();G1();yG();Oq();bG();y8()});import{TextAttributes as iy}from"@opentui/core";function ly(f){return f.split(/[-_]+/).filter((J)=>J.length>0).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function Tz(f){let J=vf(),Y=i0(),z=Y1(),{theme:G}=Y,[X,q]=r("sidebar"),[Q,H]=r("general"),[B,V]=r(0),[j,U]=r(0),[L,O]=r(""),[M,R]=r(""),[S,a]=r(""),N=U0(()=>Y.all().slice().sort()),[,g]=r(Math.max(0,N().findIndex((v)=>v===Y.selected))),C=t4(f.orchestrator),[y,_]=r(null),[z0,t]=r(null),[Y0,T]=r(null),Q0=!1;zf(()=>{if(Q()!=="accounts"||Q0)return;Q0=!0,uZ().then(_),EZ().then(t),xZ().then(T)});function p(){return JD(Q(),{themeNames:N(),focusAccentSlots:yz,engineList:u0(),hasDaemon:C})}function D0(){return p().length}function g0(){return Lz(f.kv.get(_J,Dz))}function $(v){if(Y.selected===v)return;if(!Y.set(v))return;f.kv.set("activeTheme",v),f.onVisualPrefsChange?.()}function E(){return oj()}function f0(v){if(oj()===v)return;xX(v),f.kv.set(yQ,v),f.onVisualPrefsChange?.()}function I(v){if(Y.transparentBackground===v)return;Y.setTransparentBackground(v),f.kv.set("transparentBackground",v),f.onVisualPrefsChange?.()}function G0(){I(!Y.transparentBackground)}function x(v){if(Y.focusAccent===v)return;Y.setFocusAccent(v),f.kv.set("focusAccent",v),f.onVisualPrefsChange?.()}function c(v){f.kv.set(_J,v)}function Z0(){return f.kv.get("notifications.toast.enabled",!0)!==!1}function V0(){return f.kv.get("notifications.sound.enabled",!0)!==!1}function H0(){f.kv.set("notifications.toast.enabled",!Z0())}function y0(){f.kv.set("notifications.sound.enabled",!V0())}function w0(){return f.kv.get(bq,!0)!==!1}function T0(){f.kv.set(bq,!w0())}function r0(){return f.kv.get("experimental.remoteProjects",!1)===!0}function P(){f.kv.set("experimental.remoteProjects",!r0())}function M0(){return f.kv.get(jz,!1)===!0}function J0(){f.kv.set(jz,!M0())}function F0(){return f.kv.get(Wz,!1)===!0}function a0(){f.kv.set(Wz,!F0())}function p0(){let v=f.kv.get("customEngineIds",[]);return Array.isArray(v)?v.filter((A0)=>typeof A0==="string"&&A0.trim().length>0):[]}function u0(){return[...cf,...p0()]}function _0(v){let A0=f.kv.get(jJ(v),"");return typeof A0==="string"?A0.trim():""}function n(v){return _0(v)||BX(v).join(" ")}function q0(v){return Q1(v)&&_0(v).length===0&&!o0(v)}function b0(v){let A0=f.kv.get(WJ(v),"");return typeof A0==="string"?A0.trim():""}function o0(v){return b0(v).length>0}function l0(v){return b0(v)||bB[v]||v}let[$0,t0]=r(kf("lastSelectedVendor")??Sf);function Rf(v){return $0()===v}function Af(v){af("lastSelectedVendor",v),f.kv.set("lastSelectedVendor",v),t0(v)}async function o(v){let A0=await YY.show(J,n(v),{dialogTitle:`${l0(v)} launch command`,fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(A0===void 0)return;f.kv.set(jJ(v),A0.trim())}async function e(v){let A0=await YY.show(J,l0(v),{dialogTitle:`${l0(v)} display name (blank = default)`,fieldLabel:"name",submitLabel:"save",allowEmpty:!0});if(A0===void 0)return;f.kv.set(WJ(v),A0.trim())}function B0(v){if(f.kv.set(jJ(v),""),f.kv.set(WJ(v),""),!Q1(v))f.kv.set("customEngineIds",p0().filter((A0)=>A0!==v)),U((A0)=>Math.max(0,Math.min(A0,u0().length)))}async function C0(){let v=await YY.show(J,"",{dialogTitle:"Add engine",fieldLabel:"id",submitLabel:"next",placeholder:"lowercase slug, e.g. aider"});if(v===void 0)return;let A0=v.trim().toLowerCase();if(!A0||Q1(A0)||p0().includes(A0))return;let Bf=await YY.show(J,"",{dialogTitle:`Add engine \xB7 ${A0}`,fieldLabel:"command",submitLabel:"next",placeholder:"e.g. aider --model sonnet"});if(Bf===void 0)return;let Ff=await YY.show(J,A0,{dialogTitle:`Add engine \xB7 ${A0}`,fieldLabel:"name",submitLabel:"add",allowEmpty:!0});if(f.kv.set("customEngineIds",[...p0(),A0]),Bf.trim())f.kv.set(jJ(A0),Bf.trim());let Qf=Ff?.trim()??"";f.kv.set(WJ(A0),Qf&&Qf!==A0?Qf:ly(A0))}function A(){if(Q()!=="engines"||X()!=="body")return null;let v=xQ(p(),j());return v?.kind==="engine"?v.vendor:null}function P0(){return _z(f.kv.get(pJ,Xq))}function K0(){let v=Uz.indexOf(P0()),A0=Uz[(v+1)%Uz.length];if(A0)f.kv.set(pJ,A0)}function E0(){let v=f.kv.get(kY,"");return typeof v==="string"?v:""}async function W0(){let v=await YY.show(J,E0(),{dialogTitle:"Custom editor command (use {file} for the path)",fieldLabel:"command",submitLabel:"save",allowEmpty:!0});if(v===void 0)return;let A0=v.trim();if(f.kv.set(kY,A0),A0)f.kv.set(pJ,"custom")}async function L0(){a("submitting...");try{let v=MG({title:L(),body:M()});a(`sent: ${v.url}`),O(""),R(""),U(0)}catch(v){a(`error: ${v instanceof Error?v.message:String(v)}`)}}let R0=()=>Q()==="feedback"&&X()==="body";function Jf(v){let A0=j()+v;if(A0<0||A0>2){q("sidebar");return}U(A0)}function Yf(){if(X()!=="sidebar"||D0()===0)return;if(q("body"),U(0),Q()==="general")g(0)}function n0(v){if(X()==="sidebar"){let Ff=(B()+v+Iz.length)%Iz.length;V(Ff);let Qf=Iz[Ff];if(Qf)H(Qf.id),U(0);return}let A0=D0();if(A0===0)return;let Bf=(j()+v+A0)%A0;if(U(Bf),xQ(p(),Bf)?.kind==="theme")g(Bf)}function yf(v){H(v),V(Iz.findIndex((A0)=>A0.id===v)),U(0),q("sidebar")}let k0={theme:(v)=>$(v.name),language:(v)=>f0(v.locale),transparent:()=>G0(),focusAccent:(v)=>x(v.slot),toast:()=>H0(),sound:()=>y0(),zenKeepTasks:()=>T0(),surface:(v)=>c(v.surface),editorKind:()=>K0(),editorCustom:()=>void W0(),engine:(v)=>void o(v.vendor),engineAdd:()=>void C0(),feedbackTitle:()=>U(0),feedbackBody:()=>U(1),feedbackSend:()=>void L0(),devReset:()=>void g8(J,f.kv,z),devRestartDaemon:()=>void R8(J,f.orchestrator,z),devRemoteProjects:()=>P(),devAutoStatus:()=>J0(),devDispatcher:()=>a0()};function wf(){let v=xQ(p(),j());if(!v)return;k0[v.kind](v)}return Uf(()=>({enabled:(!f.standalone||J.stack.length===0)&&!R0(),bindings:[{key:"down",cmd:()=>n0(1)},{key:"up",cmd:()=>n0(-1)},{key:"j",cmd:()=>n0(1)},{key:"k",cmd:()=>n0(-1)},{key:"tab",cmd:()=>n0(1)},{key:"right",cmd:Yf},{key:"l",cmd:Yf},{key:"left",cmd:()=>q("sidebar")},{key:"h",cmd:()=>q("sidebar")},{key:"return",cmd:()=>{if(X()==="sidebar"){Yf();return}wf()}},{key:"t",cmd:G0},{key:"r",cmd:()=>{let v=A();if(v)e(v)}},{key:"x",cmd:()=>{let v=A();if(v)B0(v)}},{key:"d",cmd:()=>{let v=A();if(v)Af(v)}}]})),Uf(()=>({enabled:R0(),bindings:[{key:"tab",cmd:()=>Jf(1)},{key:"shift+tab",cmd:()=>Jf(-1)}]})),Uf(()=>({enabled:R0()&&j()===2,bindings:[{key:"return",cmd:()=>void L0()}]})),(()=>{var v=W("box"),A0=W("box"),Bf=W("text"),Ff=W("text"),Qf=W("box"),d=W("box"),s=W("box"),S0=W("text");return D(v,A0),D(v,Qf),D(v,s),Z(v,"paddingLeft",2),Z(v,"paddingRight",2),Z(v,"paddingBottom",1),Z(v,"gap",1),D(A0,Bf),D(A0,Ff),Z(A0,"flexDirection","row"),Z(A0,"justifyContent","space-between"),K(Bf,()=>F("settings.title")),Z(Ff,"onMouseUp",()=>f.onClose()),K(Ff,()=>F("settings.esc")),D(Qf,d),Z(Qf,"flexDirection","row"),Z(Qf,"gap",2),K(Qf,b(YD,{level:X,cursor:B,switchSection:yf}),d),Z(d,"flexGrow",1),Z(d,"flexShrink",1),Z(d,"flexDirection","column"),Z(d,"gap",1),K(d,b(X0,{get when(){return Q()==="general"},get children(){return b(zD,{level:X,bodyRow:j,setLevel:q,setBodyRow:U,themeNames:N,setThemeCursor:g,selectTheme:$,currentLocale:E,selectLanguage:f0,toggleTransparent:G0,selectFocusAccent:x,toastEnabled:Z0,soundEnabled:V0,toggleToast:H0,toggleSound:y0,zenKeepsTasks:w0,toggleZenKeepsTasks:T0,settingsSurface:g0,selectSurface:c,editorKind:P0,cycleEditorKind:K0,editorCustomCommand:E0,editEditorCustom:()=>void W0()})}}),null),K(d,b(X0,{get when(){return Q()==="engines"},get children(){return b(GD,{level:X,bodyRow:j,setLevel:q,setBodyRow:U,get vendors(){return u0()},isCustom:(N0)=>!Q1(N0),displayName:l0,commandText:n,isDefault:q0,isDefaultEngine:Rf,editEngine:(N0)=>void o(N0),renameEngine:(N0)=>void e(N0),resetEngine:B0,onAddEngine:()=>void C0()})}}),null),K(d,b(X0,{get when(){return Q()==="accounts"},get children(){return b(XD,{claudeStatus:y,codexStatus:z0,copilotStatus:Y0})}}),null),K(d,b(X0,{get when(){return Q()==="keys"},get children(){return b(QD,{})}}),null),K(d,b(X0,{get when(){return Q()==="feedback"},get children(){return b(ZD,{level:X,bodyRow:j,setLevel:q,setBodyRow:U,title:L,setTitle:(N0)=>{O(N0),a("")},body:M,setBody:(N0)=>{R(N0),a("")},status:S,onTitleSubmit:()=>U(1),onBodySubmit:()=>void L0(),submit:()=>void L0()})}}),null),K(d,b(X0,{get when(){return Q()==="dev"},get children(){return b(qD,{level:X,bodyRow:j,setLevel:q,setBodyRow:U,hasDaemon:C,confirmReset:()=>void g8(J,f.kv,z),confirmRestartDaemon:()=>void R8(J,f.orchestrator,z),remoteProjectsEnabled:r0,toggleRemoteProjects:P,autoStatusEnabled:M0,toggleAutoStatus:J0,dispatcherEnabled:F0,toggleDispatcher:a0})}}),null),D(s,S0),Z(s,"paddingTop",0),K(S0,(()=>{var N0=I0(()=>!!R0());return()=>N0()?F("settings.nav.feedback"):F("settings.nav.default")})()),u((N0)=>{var Z1=iy.BOLD,V1=G.text,tf=G.textMuted,v1=G.textMuted;return Z1!==N0.e&&(N0.e=Z(Bf,"attributes",Z1,N0.e)),V1!==N0.t&&(N0.t=Z(Bf,"fg",V1,N0.t)),tf!==N0.a&&(N0.a=Z(Ff,"fg",tf,N0.a)),v1!==N0.o&&(N0.o=Z(S0,"fg",v1,N0.o)),N0},{e:void 0,t:void 0,a:void 0,o:void 0}),v})()}var b8=k(()=>{h();h();h();h();h();h();h();h();Wf();fz();E1();eq();ZX();Yq();gf();cB();S1();K1();xf();G1();Zq();b1();W8();P1();O8();fD();y8();HD();Tz.show=(f,J,Y)=>{let z=!1;return new Promise((G)=>{f.replace(()=>b(Tz,{kv:J,orchestrator:Y,onVisualPrefsChange:()=>{z=!0},onClose:()=>G({visualPrefsChanged:z})}),()=>G({visualPrefsChanged:z}))})}});import{TextAttributes as ay}from"@opentui/core";function jD(){let{theme:f}=i0(),J=TJ(),Y=kQ(),z=()=>Y.toasts().slice(-BD),G=()=>Math.max(0,J().width-$y-ry),X=()=>Math.max(0,J().height-py-BD-1);return b(X0,{get when(){return Y.toasts().length>0},get children(){var q=W("box");return Z(q,"position","absolute"),Z(q,"zIndex",2500),Z(q,"width",40),Z(q,"flexDirection","column"),Z(q,"gap",0),K(q,b(Zf,{get each(){return z()},children:(Q)=>{let H=()=>Q.kind==="needs_input"?f.warning:Q.kind==="error"?f.error:f.success,B=()=>f.selectedListItemText,V=()=>Q.kind==="needs_input"?"?":Q.kind==="error"?"\u2715":"\u2713";return(()=>{var j=W("box"),U=W("text"),L=W("text");return D(j,U),D(j,L),Z(j,"flexDirection","row"),Z(j,"gap",1),Z(j,"paddingLeft",1),Z(j,"paddingRight",1),Z(j,"onMouseUp",()=>Y.dismiss(Q.id)),Z(U,"wrapMode","none"),K(U,V),Z(L,"wrapMode","none"),K(L,()=>Q.title),u((O)=>{var M=H(),R=B(),S=ay.BOLD,a=B();return M!==O.e&&(O.e=Z(j,"backgroundColor",M,O.e)),R!==O.t&&(O.t=Z(U,"fg",R,O.t)),S!==O.a&&(O.a=Z(U,"attributes",S,O.a)),a!==O.o&&(O.o=Z(L,"fg",a,O.o)),O},{e:void 0,t:void 0,a:void 0,o:void 0}),j})()}})),u((Q)=>{var H=G(),B=X();return H!==Q.e&&(Q.e=Z(q,"left",H,Q.e)),B!==Q.t&&(Q.t=Z(q,"top",B,Q.t)),Q},{e:void 0,t:void 0}),q}})}var BD=4,$y=40,ry=2,py=2;var WD=k(()=>{h();h();h();h();h();h();h();Wf();NQ();xf()});import{TextAttributes as _y}from"@opentui/core";function oy(f,J){let Y=f?`v${f}`:F("update.skew.olderBuild");return F("update.skew.hint",{daemon:Y,clientVersion:J})}function VD(f){let{theme:J}=i0(),Y=()=>Math.max(4,f.width()-2);return b(X0,{get when(){return f.stale()},get children(){var z=W("box"),G=W("text"),X=W("box"),q=W("text"),Q=W("box"),H=W("text");return D(z,G),D(z,X),D(z,Q),Z(z,"flexDirection","column"),Z(z,"flexShrink",0),Z(z,"paddingLeft",1),Z(z,"paddingRight",1),Z(z,"paddingBottom",1),Z(G,"wrapMode","none"),K(G,()=>"\u2594".repeat(Y())),D(X,q),Z(X,"flexDirection","row"),Z(X,"gap",1),Z(q,"wrapMode","none"),K(q,()=>F("update.skew.title")),D(Q,H),Z(Q,"flexDirection","row"),Z(Q,"gap",1),Z(H,"wrapMode","word"),K(H,()=>oy(f.daemonVersion(),f.clientVersion)),u((B)=>{var{warning:V,warning:j}=J,U=_y.BOLD,L=J.text;return V!==B.e&&(B.e=Z(G,"fg",V,B.e)),j!==B.t&&(B.t=Z(q,"fg",j,B.t)),U!==B.a&&(B.a=Z(q,"attributes",U,B.a)),L!==B.o&&(B.o=Z(H,"fg",L,B.o)),B},{e:void 0,t:void 0,a:void 0,o:void 0}),z}})}var KD=k(()=>{h();h();h();h();h();h();Wf();xf();G1()});function UD(f,J){return f.find((Y)=>Y.id!==J&&!Y.archived)}async function sy(f){let J=f.tasks.find((X)=>X.id===f.taskId);if(!J)return null;let Y=!J.archived;try{await f.orch.setArchived(f.taskId,Y)}catch(X){return f.logger.error(`${f.logPrefix} archive failed:`,X),null}if(!Y)return{archived:Y};let z=Lf(f.taskId),G=UD(f.tasks,f.taskId);if(await bJ(z,G?Lf(G.id):void 0).catch((X)=>{f.logger.error(`${f.logPrefix} switch-client failed:`,X)}),f.updateActiveTask)await f.orch.setActiveTask(G?.id??null).catch(()=>{});return await l1(z).catch((X)=>{f.logger.error(`${f.logPrefix} kill tmux session failed:`,X)}),{archived:Y,nextTask:G}}async function ty(f){let J=UD(f.tasks,f.taskId),Y=Lf(f.taskId);if(f.switchBeforeKill)await bJ(Y,J?Lf(J.id):void 0).catch((z)=>{f.logger.error(`${f.logPrefix} switch-client failed:`,z)});if(f.updateActiveTask)await f.orch?.setActiveTask(J?.id??null).catch(()=>{});return await l1(Y).catch((z)=>{f.logger.error(`${f.logPrefix} kill tmux session failed:`,z)}),{nextTask:J}}async function DD(f,J){if(!f.orch)return;let Y=f.tasks().find((G)=>G.id===J);if(!Y)return;if(!Y.archived){if(!await f.confirm({title:`Archive "${Y.title}"?`,body:"Moves it to Archives and stops its running session. The worktree, branch, and chat history stay \u2014 unarchive to bring it back.",cancelLabel:"cancel",confirmLabel:"archive"}))return}if(!await sy({orch:f.orch,tasks:f.tasks(),taskId:J,logger:f.logger,logPrefix:f.logPrefix,updateActiveTask:f.updateActiveTask}))return;await f.reload?.()}async function LD(f,J){if(!f.orch)return;let Y=f.tasks().find((q)=>q.id===J);if(!Y)return;if(!await f.confirm({title:`Delete "${Y.title}"?`,body:"Removes the task entry and its worktree. The tmux session (if any) is killed.",cancelLabel:"cancel",confirmLabel:"delete"}))return;let G=!1;try{await f.orch.deleteTask(J),G=!0}catch(q){if((q instanceof Error?q.message:String(q)).includes(DH)){if(await f.confirm({title:`"${Y.title}" has uncommitted changes`,body:"Its worktree has uncommitted or untracked work that will be permanently deleted. Force delete anyway?",cancelLabel:"cancel",confirmLabel:"force delete"}))try{await f.orch.deleteTask(J,{force:!0}),G=!0}catch(B){f.logger.error(`${f.logPrefix} force delete failed:`,B),f.notifyError?.(`Couldn't delete: ${B instanceof Error?B.message:String(B)}`)}}else f.logger.error(`${f.logPrefix} delete failed:`,q),f.notifyError?.(`Couldn't delete: ${q instanceof Error?q.message:String(q)}`)}if(!G)return;let{nextTask:X}=await ty({orch:f.orch,tasks:f.tasks(),taskId:J,logger:f.logger,logPrefix:f.logPrefix,switchBeforeKill:f.switchBeforeKill,updateActiveTask:f.updateActiveTask});await f.reload?.(),f.onTaskDeleted?.(J,X)}async function MD(f,J){let Y=f.tasks().find((G)=>G.id===J);if(!Y)return;let z=await f.promptText(Y.title);if(!z||!f.orch)return;try{await f.orch.setTitle(J,z)}catch(G){f.logger.error(`${f.logPrefix} task.rename failed:`,G),f.notifyError?.(`Couldn't rename task: ${G instanceof Error?G.message:String(G)}`);return}await f.reload?.()}async function FD(f,J){let Y=f.tasks().find((G)=>G.id===J);if(!Y||Y.kind==="main")return;let z=await f.promptText(Y.branch,{dialogTitle:"Rename branch",fieldLabel:"branch"});if(!z||!f.orch)return;try{await f.orch.setBranch(J,z)}catch(G){f.logger.error(`${f.logPrefix} task.setBranch failed:`,G),f.notifyError?.(`Couldn't rename branch: ${G instanceof Error?G.message:String(G)}`);return}await f.reload?.()}async function OD(f,J){let Y=f.tasks().find((X)=>X.id===J);if(!Y||!f.orch)return;let z=await iJ(),G=ZY(z,Y.vendor??Sf);try{await f.orch.setVendor(J,G)}catch(X){f.logger.error(`${f.logPrefix} task.setVendor failed:`,X),f.notifyError?.(`Couldn't switch engine: ${X instanceof Error?X.message:String(X)}`);return}f.notifyInfo?.(`Engine \u2192 ${Vz(G)} (applies on reopen)`),await f.reload?.()}async function AD(f){let J=c1(),Y=f.cursorRepo()??J[0]??process.cwd();if(f.openCreateSurface&&await f.openCreateSurface(Y))return;let z=f.lastVendor()??Sf,G=await iJ();if(G.length===0)f.notifyInfo?.("No engine CLI detected \u2014 install claude or codex, or add one in Settings \u2192 Engines");let X=f.orch,q=await f.promptNewTask(Y,J,{defaultVendor:z,availableVendors:G,discoverAdoptable:X?(H)=>X.discoverAdoptableWorktrees(H):void 0});if(!q)return;if(f.rememberVendor(q.vendor),vJ(q.repo),f.onRepoSaved?.(),!X){f.logger.error(`${f.logPrefix} no daemon; cannot create task`);return}f.notifyInfo?.("Creating task\u2026");let Q;try{if(q.mode==="adopt")for(let H of q.adopt)Q=(await X.adoptWorktree({repo:q.repo,worktreePath:H.worktreePath,branch:H.branch,vendor:q.vendor})).id;else Q=(await X.createTask({repo:q.repo,baseRef:q.baseRef,vendor:q.vendor})).id}catch(H){f.logger.error(`${f.logPrefix} task.create/adopt failed:`,H),f.notifyError?.(`Couldn't create task: ${H instanceof Error?H.message:String(H)}`);return}if(await f.reload?.(),Q)f.selectTask?.(Q),await f.enterTask?.(Q)}var gD=k(()=>{fz();E1();FH();gf();S1();K1();J1()});import{spawn as ey}from"child_process";import{existsSync as fb}from"fs";import{basename as Jb,delimiter as Yb,isAbsolute as zb,join as Gb}from"path";function S8(f,J,Y){if(zb(f))return Y(f);let z=J.PATH??"";for(let G of z.split(Yb)){if(!G)continue;if(Y(Gb(G,f)))return!0}return!1}function qb(f){let J=Jb(f);if(J==="code")return"VS Code";if(J==="cursor")return"Cursor";if(J==="windsurf")return"Windsurf";if(J==="zed")return"Zed";return J||f}function RD(f={}){let J=f.env??process.env,Y=f.platform??process.platform,z=f.exists??fb,G=J.KOBE_OPEN_EDITOR?.trim();if(G)return{id:"env",label:qb(G),command:G,args:[]};for(let X of Xb)if(S8(X.command,J,z))return{id:X.id,label:X.label,command:X.command,args:[]};if(Y==="darwin"&&S8("open",J,z)){for(let X of Zb)if(X.paths.some((q)=>z(q)))return{id:X.id,label:X.label,command:"open",args:["-a",X.appName]};return{id:"mac-open",label:"Finder",command:"open",args:[]}}if(Y==="linux"&&S8("xdg-open",J,z))return{id:"xdg-open",label:"Open",command:"xdg-open",args:[]};return null}function Qb(f,J){return[J.command,[...J.args,f]]}function CD(f,J,Y={}){if(!f)return!1;let z=Y.spawn??ey,[G,X]=Qb(f,J);try{let q=z(G,X,{detached:!0,stdio:"ignore"});if(q.pid===void 0)return!1;return q.unref(),!0}catch{return!1}}var Xb,Zb;var kD=k(()=>{Xb=[{id:"code",label:"VS Code",command:"code"},{id:"cursor",label:"Cursor",command:"cursor"},{id:"windsurf",label:"Windsurf",command:"windsurf"},{id:"zed",label:"Zed",command:"zed"}],Zb=[{id:"vscode.app",label:"VS Code",appName:"Visual Studio Code",paths:["/Applications/Visual Studio Code.app"]},{id:"cursor.app",label:"Cursor",appName:"Cursor",paths:["/Applications/Cursor.app","/System/Applications/Cursor.app"]},{id:"windsurf.app",label:"Windsurf",appName:"Windsurf",paths:["/Applications/Windsurf.app"]},{id:"zed.app",label:"Zed",appName:"Zed",paths:["/Applications/Zed.app"]}]});function wQ(f){let J=new Map;function Y(z){let G=J.get(z);if(!G){let[X,q]=r(f.initial,f.equals?{equals:f.equals}:void 0);G={read:X,write:(Q)=>q(()=>Q),inFlight:!1,nextAllowedAt:0},J.set(z,G)}return G}return{read(z){if(!z)return f.initial;return Y(z).read()},poll(z){if(!z)return;let G=Y(z);fq(G,f,(X)=>f.run(z,X),(X)=>G.write(X))},reset(){J.clear()}}}var iX=k(()=>{Wf();HX();HX()});import{stat as Hb}from"fs/promises";import{join as Bb}from"path";async function Kb(f){try{let J=await Hb(Bb(f,".git","HEAD"));return`${J.mtimeMs}:${J.size}`}catch{return null}}async function Ub(f,J,Y=BJ){let z=await Kb(f);if(z!==null){let Q=ND.get(f);if(Q&&Q.fingerprint===z)return Q.value}let G="",X=await Y("git",["symbolic-ref","--short","HEAD"],{cwd:f,env:x1(),signal:J}),q=X.status===0?X.stdout.trim():"";if(q&&q!=="HEAD")G=q;else if((await Y("git",["rev-parse","--verify","HEAD"],{cwd:f,env:x1(),signal:J})).status===0)G="(detached)";if(z!==null)ND.set(f,{fingerprint:z,value:G});return G}function bD(f){return yD.read(f)}function SD(f){yD.poll(f)}var jb=2000,Wb=30000,Vb=1500,ND,yD;var ID=k(()=>{NY();iX();ND=new Map;yD=wQ({initial:"",timeoutMs:jb,slowRetryMs:Wb,minIntervalMs:Vb,run:(f,J)=>Ub(f,J)})});function I8(f){let J=f.scheduleTimeout??((H,B)=>{let V=setTimeout(H,B);return()=>clearTimeout(V)}),Y=!1,z=null,G=()=>{Y=!0,z?.(),z=J(()=>{Y=!1,z=null},700)},X=()=>{Y=!1,z?.(),z=null},q=(H)=>{let B=f.getFlatIds();if(B.length===0)return;let V=f.getCursor(),j=V<0?0:V,U=Math.min(B.length-1,Math.max(0,j+H));f.setCursor(U)},Q=(H)=>{let B=f.getFlatIds();if(B.length===0)return;f.setCursor(Math.min(B.length-1,Math.max(0,H)))};return{moveDown(){X(),q(1)},moveUp(){X(),q(-1)},selectCurrent(){X();let H=f.getFlatIds(),B=f.getCursor();if(B<0||B>=H.length)return;let V=H[B];if(V!==void 0)f.onSelect(V)},pressG(){if(Y)X(),Q(0);else G()},pressShiftG(){X(),Q(f.getFlatIds().length-1)},isChordArmed(){return Y},disarmChord(){X()}}}function TD(f){let J=I8({getCursor:()=>f.cursorIndex(),setCursor:(X)=>f.setCursorIndex(X),getFlatIds:()=>f.flatTaskIds(),onSelect:(X)=>f.onSelect(X)}),Y=()=>{let X=f.flatTaskIds(),q=f.cursorIndex();if(q<0||q>=X.length)return;return X[q]},z=()=>f.searchMode?.()??!1,G=()=>f.moveMode?.()??!1;Uf(()=>({enabled:f.focused()&&!z(),bindings:mY({"sidebar.nav":(X,q)=>{let Q=(q??0)%2===0;if(G()){let H=Y();if(H===void 0)return;f.onMoveRequest?.(H,Q?1:-1);return}if(Q)J.moveDown();else J.moveUp()},"sidebar.select":()=>{if(G()){f.onMoveModeExit?.();return}J.selectCurrent()},"sidebar.goto":(X)=>{if(G())return;if(X.shift)J.pressShiftG();else J.pressG()},"sidebar.delete":()=>{if(G())return;let X=Y();if(X!==void 0)f.onDeleteRequest?.(X)},"sidebar.archive":()=>{if(G())return;let X=Y();if(X!==void 0)f.onArchiveRequest?.(X)},"sidebar.localMerge":(X)=>{if(!X.shift)return;let q=Y();if(q!==void 0)f.onLocalMergeRequest?.(q)},"sidebar.rename":()=>{if(G())return;let X=Y();if(X!==void 0)f.onRenameRequest?.(X)},"sidebar.pin":(X)=>{if(G())return;if(!X.shift)return;let q=Y();if(q!==void 0)f.onPinRequest?.(q)},"sidebar.search.enter":()=>{if(G())return;f.onSearchEnter?.()},"sidebar.sort":()=>{if(G())return;f.onSortModeToggle?.()},"sidebar.projectFilter":()=>{if(G())return;f.onProjectFilterToggle?.()}})})),Uf(()=>({enabled:f.focused()&&G(),bindings:[{key:"escape",cmd:()=>f.onMoveModeExit?.()}]})),Uf(()=>({enabled:f.focused(),bindings:mY({"sidebar.view":(X,q)=>{f.onViewSwitch?.((q??0)%2===0?-1:1)}})})),Uf(()=>({enabled:f.focused()&&z(),bindings:mY({"sidebar.search.nav":(X,q)=>{if((q??0)%2===0)J.moveDown();else J.moveUp()},"sidebar.search.submit":()=>{J.selectCurrent(),f.onSearchExit?.(!0)},"sidebar.search.cancel":()=>f.onSearchExit?.(!1)})}))}var uD=k(()=>{SG();b1()});function T8(f,J){if(J<=0)return"";if(f.length<=J)return f;return`${f.slice(0,Math.max(0,J-1))}\u2026`}function u8(f,J){return` ${T8(f,Math.max(0,J))}`}function Lb(f){switch(f){case"done":return F("tasks.status.done");case"in_review":return F("tasks.status.inReview");case"in_progress":return F("tasks.status.working");case"backlog":return F("tasks.status.backlog");case"canceled":return F("tasks.status.canceled");case"error":return F("tasks.status.error")}}function Mb(f){switch(f){case"rate_limited":return{text:F("tasks.activity.rateLimited"),tone:"warning"};case"permission_needed":return{text:F("tasks.activity.permissionNeeded"),tone:"warning"};case"error":return{text:F("tasks.activity.error"),tone:"error"};default:return null}}function wD(f){switch(f.prStatus?.checkState){case"passing":return{glyph:"\u2713",tone:"success"};case"failing":return{glyph:"\u2717",tone:"error"};case"pending":return{glyph:"\u2022",tone:"warning"};default:return null}}function Fb(){return F("tasks.subtitle.noTracking")}function Ob(){return F("tasks.subtitle.materializing")}function Ab(f){if(f.kind==="main")return!1;return f.vendor!==void 0&&!Q1(f.vendor)}function E8(f){let{task:J}=f,Y=J.kind==="main",z=Y?f.mainBranch??"":J.branch,G=Db[J.status],X=f.activity?.state,q=X!==void 0,Q=gb(X),H=Mb(X),B=Ab(J)&&!q,V=f.job!==void 0,j=V||!B&&(X==="running"||f.live||!q&&!Y&&J.status==="in_progress"),U=EG[f.spinnerFrame]??EG[0],L=V?"primary":B?"textMuted":H?.tone??(j?"primary":Q?.tone??G.tone),O=B?Fb():Lb(J.status),M=V?f.truncateBranch(Ob(),f.subtitleBudget):H?f.truncateBranch(H.text,f.subtitleBudget):z.length>0?f.truncateBranch(z,f.subtitleBudget):f.truncateBranch(O,f.subtitleBudget),R=B?ED:Q?.glyph??G.glyph,S=B?ED:Q?.glyph??"\u2605";return{isMain:Y,titleText:Y?MJ(J.repo):J.title,subtitleText:M,loading:j,stateGlyph:j?U:R,projectGlyph:j?U:S,tone:L}}function x8(f,J){if(!f.loading)return f;let Y=EG[J()%EG.length]??"\u280B";if(Y===f.stateGlyph&&Y===f.projectGlyph)return f;return{...f,stateGlyph:Y,projectGlyph:Y}}function gb(f){switch(f){case"rate_limited":return{glyph:"\u25F7",tone:"warning"};case"permission_needed":return{glyph:"?",tone:"warning"};case"error":return{glyph:"\u2715",tone:"error"};case"turn_complete":return{glyph:"\u2713",tone:"primary"};default:return null}}var Db,EG,xD=100,ED="\xB7";var hD=k(()=>{G1();K1();TQ();Db={done:{glyph:"\u2713",tone:"success"},in_review:{glyph:"\u25D0",tone:"warning"},in_progress:{glyph:"",tone:"primary"},backlog:{glyph:"\u25CB",tone:"textMuted"},canceled:{glyph:"\u2298",tone:"textMuted"},error:{glyph:"\u2715",tone:"error"}};EG=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function w8(f){return PD.read(f)}function h8(f){PD.poll(f)}var Rb=4000,Cb=60000,kb=1500,Nb,PD;var vD=k(()=>{NY();iX();VG();iX();Nb={added:0,deleted:0},PD=wQ({initial:Nb,equals:IJ,timeoutMs:Rb,slowRetryMs:Cb,minIntervalMs:kb,run:async(f,J)=>{let Y=await BJ("git",["status","--porcelain=v1"],{cwd:f,env:x1(),signal:J});if(Y.status!==0)throw Error("git status failed");return WG(Y.stdout)}})});import{TextAttributes as bf}from"@opentui/core";function yb(f){switch(f){case"active":return F("tasks.view.workspace");case"archived":return F("tasks.view.archives")}}function cD(f,J=Sb){if(f.length<=J)return f;return`${f.slice(0,Math.max(0,J-1))}\u2026`}function Ib(f){let J=0;for(let Y of f)J+=(Y.codePointAt(0)??0)>=4352?2:1;return J}function Tb(f,J){if(J<=0||f.length<=J)return f;return`\u2026${f.slice(f.length-Math.max(0,J-1))}`}function nD(f){let{theme:J}=i0(),Y=()=>f.focused?f.focused():!0,[z,G]=r("active"),[X,q]=r(!1),[Q,H]=r(""),[B,V]=r(null),j=()=>f.projectFilter?.()??B(),U=(n)=>{if(f.onProjectFilterChange)f.onProjectFilterChange(n);else V(n)};function L(){H(""),q(!0),f.onSearchActiveChange?.(!0)}function O(n){q(!1),H(""),f.onSearchActiveChange?.(!1)}zf(()=>{if(!X())return;let n=Y1();if(!n)return;let q0=(b0)=>{if(b0.defaultPrevented)return;if(!Y())return;if(b0.ctrl||b0.meta||b0.option)return;if(b0.name==="backspace"){H(($0)=>$0.slice(0,-1));return}let o0=b0.sequence;if(!o0||o0.length!==1)return;let l0=o0.charCodeAt(0);if(l0<32||l0===127)return;H(($0)=>$0+o0)};n.keyInput.on("keypress",q0),mf(()=>n.keyInput.off("keypress",q0))});let[M,R]=r(0),S=setInterval(()=>R((n)=>n+1),bb);mf(()=>clearInterval(S));let[a,N]=r(0),g=setInterval(()=>N((n)=>(n+1)%EG.length),xD);mf(()=>clearInterval(g));let C=()=>f.sortMode?.()??"default",y=U0(()=>i4(f.tasks(),z())),_=U0(()=>{let n=j();if(!n)return null;let q0=o1(n);return y().find((b0)=>o1(b0.repo)===q0)??null}),z0=U0(()=>_()?.repo??null),t=U0(()=>_()?.label??"all"),Y0=U0(()=>{let n=_();return n?n.count:y().reduce((q0,b0)=>q0+b0.count,0)}),T=U0(()=>{let n=Y0();return`${n} ${n===1?F("tasks.project.taskSingular"):F("tasks.project.taskPlural")}`}),Q0=U0((n)=>$4(n,D8(f.tasks(),z(),X()?Q():"",C(),z0())),[]),p=U0(()=>L8(Q0())),D0=U0(()=>a4(Q0())),g0=U0(()=>D0().projectRows),$=U0(()=>D0().taskRows),E=U0(()=>{let n=new Map;for(let q0 of Q0())n.set(q0.flatIndex,q0);return n}),f0=U0(()=>L8(D8(f.tasks(),z(),"",C(),z0())).length),I=U0(()=>$().length>0);zf(()=>{let n=j(),q0=y();if(n!==null&&q0.length>0&&(q0.length<=1||_()===null))U(null)});function G0(){let n=y();if(n.length<=1){U(null);return}let q0=z0(),b0=q0?o1(q0):null,o0=b0===null?-1:n.findIndex(($0)=>o1($0.repo)===b0),l0=n[o0+1];U(l0?.repo??null)}let x=()=>f.width?f.width():mD,c=U0(()=>Math.max(6,x()-9)),Z0=U0(()=>Math.max(6,x()-16)),V0=TJ(),H0=U0(()=>{let n=Math.max(2,Math.min(10,Math.floor(V0().height*0.25))),q0=Math.max(2,g0().length*2);return Math.min(n,q0)}),[y0,w0]=r(null),[T0,r0]=r(-1),P,M0,J0,F0=new Map;zf(()=>{let n=f.width?f.width():mD,q0=J0;if(!q0)return;q0.width=n,q0.flexShrink=1,q0.minHeight=0}),zf(O1([T0,Q0],([n])=>{let q0=E().get(n);if(!q0)return;let b0=q0.task.kind==="main"?P:M0;if(!b0)return;if(b0.viewport.height<=0)return;let o0=F0.get(n);if(!o0)return;b0.scrollChildIntoView(o0.id)})),zf(O1(()=>[f.selectedId(),p()],([n,q0])=>{let b0=$f(T0);if(n===null){if(b0===-1&&q0.length>0)r0(0);else if(b0>=q0.length)r0(Math.max(0,q0.length-1));else if(q0.length===0)r0(-1);return}let o0=q0.indexOf(n);if(o0>=0){if(o0!==b0)r0(o0)}else if(q0.length===0)r0(-1);else if(b0<0||b0>=q0.length)r0(q0.length-1)})),zf(O1(z,()=>{let n=p();r0(n.length>0?0:-1)},{defer:!0})),zf(O1(z0,(n)=>r0(l4(Q0(),n)),{defer:!0})),zf(O1([X,Q],()=>{if(!X())return;let n=p();r0(n.length>0?0:-1)}));function a0(n){let q0=z(),b0=lX.findIndex(($0)=>$0.view===q0);if(b0<0)return;let o0=(b0+n+lX.length)%lX.length,l0=lX[o0];if(l0)G(l0.view)}TD({focused:Y,cursorIndex:T0,setCursorIndex:r0,flatTaskIds:p,onSelect:(n)=>{f.onSelect(n),f.onActivate?.(n)},onDeleteRequest:(n)=>f.onDeleteRequest?.(n),onArchiveRequest:(n)=>f.onArchiveRequest?.(n),onLocalMergeRequest:(n)=>f.onLocalMergeRequest?.(n),moveMode:f.moveMode,onMoveRequest:(n,q0)=>f.onMoveRequest?.(n,q0),onMoveModeExit:()=>f.onMoveModeExit?.(),onRenameRequest:(n)=>f.onRenameRequest?.(n),onPinRequest:(n)=>f.onPinRequest?.(n),onViewSwitch:(n)=>a0(n),onSortModeToggle:()=>f.onSortModeToggle?.(),onProjectFilterToggle:()=>G0(),searchMode:X,onSearchEnter:()=>L(),onSearchExit:(n)=>O(n)});let p0=(n)=>(()=>{var q0=W("box"),b0=W("box"),o0=W("text"),l0=W("text");return D(q0,b0),Z(q0,"flexDirection","column"),Z(q0,"flexShrink",0),K(q0,b(X0,{get when(){return n.topPad},get children(){var $0=W("box"),t0=W("text");return D($0,t0),Z($0,"flexShrink",0),D(t0,x0(" ")),Z(t0,"wrapMode","none"),$0}}),b0),D(b0,o0),D(b0,l0),Z(b0,"flexDirection","row"),Z(b0,"flexShrink",0),Z(b0,"gap",1),Z(b0,"paddingLeft",1),Z(b0,"paddingRight",1),Z(o0,"wrapMode","none"),K(o0,()=>n.label),Z(l0,"wrapMode","none"),K(l0,()=>"\u2500".repeat(Math.max(2,x()-10-n.label.length-(n.suffix?.length??0)))),K(b0,b(X0,{get when(){return n.suffix},get children(){var $0=W("text");return Z($0,"wrapMode","none"),K($0,()=>n.suffix),u((t0)=>{var Rf=J.info,Af=bf.BOLD;return Rf!==t0.e&&(t0.e=Z($0,"fg",Rf,t0.e)),Af!==t0.t&&(t0.t=Z($0,"attributes",Af,t0.t)),t0},{e:void 0,t:void 0}),$0}}),null),u(($0)=>{var t0=J.textMuted,Rf=bf.BOLD,Af=J.border;return t0!==$0.e&&($0.e=Z(o0,"fg",t0,$0.e)),Rf!==$0.t&&($0.t=Z(o0,"attributes",Rf,$0.t)),Af!==$0.a&&($0.a=Z(l0,"fg",Af,$0.a)),$0},{e:void 0,t:void 0,a:void 0}),q0})(),u0=(n)=>{switch(n){case"success":return J.success;case"warning":return J.warning;case"primary":return J.primary;case"error":return J.error;default:return J.textMuted}},_0=(n)=>{let q0=n.row.task,b0=n.row.flatIndex,o0=()=>b0===T0(),l0=()=>q0.id===f.selectedId(),$0=U0(()=>{let A=f.chatRunState?.();if(!A)return!1;let P0=`${q0.id}:`;for(let[K0,E0]of A)if(E0==="running"&&K0.startsWith(P0))return!0;return!1}),t0=U0(()=>{let A=pq(f.worktreeChanges?.(),q0.worktreePath);if(A)return A;if(M(),!q0.archived)h8(q0.worktreePath);return w8(q0.worktreePath)},void 0,{equals:IJ}),Rf=U0(()=>{return M(),SD(q0.repo),bD(q0.repo)}),Af=U0(()=>E8({task:q0,activity:f.engineState?.().get(q0.id),job:f.taskJobs?.().get(q0.id),live:$0(),spinnerFrame:0,subtitleBudget:Z0(),truncateBranch:cD,mainBranch:Rf()})),o=U0(()=>x8(Af(),a)),e=()=>!o().loading?J.primary:u0(o().tone),B0=()=>o0()?J.focusAccent:l0()?J.primary:void 0,C0=()=>o0()||l0()?"\u258C":" ";return(()=>{var A=W("box"),P0=W("box"),K0=W("box"),E0=W("text"),W0=W("box"),L0=W("text"),R0=W("text"),Jf=W("box"),Yf=W("text"),n0=W("box"),yf=W("text");return D(A,P0),Z(A,"flexDirection","column"),Z(A,"gap",0),Z(A,"paddingBottom",0),D(P0,K0),D(P0,Jf),hY((k0)=>{F0.set(b0,k0),mf(()=>{if(F0.get(b0)===k0)F0.delete(b0)})},P0),Z(P0,"flexDirection","column"),Z(P0,"gap",0),Z(P0,"onMouseUp",()=>{if(f.onSelect(q0.id),f.activateOnClick)f.onActivate?.(q0.id)}),Z(P0,"onMouseOver",(k0)=>w0({task:q0,x:k0.x,y:k0.y})),Z(P0,"onMouseOut",()=>w0((k0)=>k0?.task.id===q0.id?null:k0)),D(K0,E0),D(K0,W0),Z(K0,"flexDirection","row"),Z(K0,"gap",0),Z(E0,"wrapMode","none"),K(E0,C0),D(W0,L0),D(W0,R0),Z(W0,"flexDirection","row"),Z(W0,"flexGrow",1),Z(W0,"paddingRight",1),Z(W0,"gap",0),Z(L0,"wrapMode","none"),K(L0,()=>o().projectGlyph),Z(R0,"wrapMode","none"),Z(R0,"flexGrow",1),K(R0,()=>u8(o().titleText,c())),D(Jf,Yf),D(Jf,n0),Z(Jf,"flexDirection","row"),Z(Jf,"gap",0),Z(Yf,"wrapMode","none"),K(Yf,C0),D(n0,yf),Z(n0,"flexDirection","row"),Z(n0,"flexGrow",1),Z(n0,"paddingLeft",2),Z(n0,"paddingRight",1),Z(n0,"gap",1),Z(yf,"wrapMode","none"),Z(yf,"flexGrow",1),K(yf,()=>o().subtitleText),K(n0,b(X0,{get when(){return t0().added>0},get children(){var k0=W("text"),wf=x0("+");return D(k0,wf),Z(k0,"wrapMode","none"),K(k0,()=>t0().added,null),u((v)=>Z(k0,"fg",J.success,v)),k0}}),null),K(n0,b(X0,{get when(){return t0().deleted>0},get children(){var k0=W("text"),wf=x0("\u2212");return D(k0,wf),Z(k0,"wrapMode","none"),K(k0,()=>t0().deleted,null),u((v)=>Z(k0,"fg",J.error,v)),k0}}),null),u((k0)=>{var wf=o0()?J.backgroundElement:void 0,v=B0(),A0=e(),Bf=bf.BOLD,Ff=J.text,Qf=bf.BOLD,d=B0(),s=J.textMuted,S0=bf.DIM;return wf!==k0.e&&(k0.e=Z(P0,"backgroundColor",wf,k0.e)),v!==k0.t&&(k0.t=Z(E0,"fg",v,k0.t)),A0!==k0.a&&(k0.a=Z(L0,"fg",A0,k0.a)),Bf!==k0.o&&(k0.o=Z(L0,"attributes",Bf,k0.o)),Ff!==k0.i&&(k0.i=Z(R0,"fg",Ff,k0.i)),Qf!==k0.n&&(k0.n=Z(R0,"attributes",Qf,k0.n)),d!==k0.s&&(k0.s=Z(Yf,"fg",d,k0.s)),s!==k0.h&&(k0.h=Z(yf,"fg",s,k0.h)),S0!==k0.r&&(k0.r=Z(yf,"attributes",S0,k0.r)),k0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),A})()};return(()=>{var n=W("box"),q0=W("box"),b0=W("box"),o0=W("text"),l0=W("box"),$0=W("box"),t0=W("text"),Rf=W("scrollbox"),Af=W("box");return D(n,q0),D(n,l0),D(n,Rf),hY((o)=>{J0=o},n),Z(n,"flexGrow",1),Z(n,"minHeight",0),Z(n,"flexDirection","column"),Z(n,"paddingTop",1),Z(n,"paddingBottom",1),Z(n,"paddingLeft",0),Z(n,"paddingRight",0),D(q0,b0),Z(q0,"flexDirection","row"),Z(q0,"justifyContent","space-between"),Z(q0,"gap",1),Z(q0,"paddingBottom",1),Z(q0,"paddingLeft",1),Z(q0,"paddingRight",1),D(b0,o0),Z(b0,"flexDirection","row"),Z(b0,"gap",1),D(o0,x0("KOBE")),Z(o0,"wrapMode","none"),K(b0,b(X0,{get when(){return f.headerStatus?.()},children:(o)=>(()=>{var e=W("text");return Z(e,"wrapMode","none"),Z(e,"onMouseUp",()=>f.onHeaderStatusClick?.()),K(e,()=>o().label),u((B0)=>{var C0=o().emphasize?J.warning:J.textMuted,A=o().emphasize?bf.BOLD:bf.DIM;return C0!==B0.e&&(B0.e=Z(e,"fg",C0,B0.e)),A!==B0.t&&(B0.t=Z(e,"attributes",A,B0.t)),B0},{e:void 0,t:void 0}),e})()}),null),K(q0,b(X0,{get when(){return f.onAddTask},get children(){var o=W("text");return D(o,x0("[+]")),Z(o,"wrapMode","none"),Z(o,"onMouseUp",()=>f.onAddTask?.()),u((e)=>{var B0=J.primary,C0=bf.BOLD;return B0!==e.e&&(e.e=Z(o,"fg",B0,e.e)),C0!==e.t&&(e.t=Z(o,"attributes",C0,e.t)),e},{e:void 0,t:void 0}),o}}),null),K(n,b(X0,{get when(){return X()},get children(){var o=W("box"),e=W("text"),B0=W("text"),C0=W("text");return D(o,e),D(o,B0),D(o,C0),Z(o,"flexDirection","row"),Z(o,"gap",0),Z(o,"paddingBottom",1),Z(o,"paddingLeft",1),D(e,x0("/")),Z(e,"wrapMode","none"),Z(B0,"wrapMode","none"),K(B0,Q),D(C0,x0("\u2588")),Z(C0,"wrapMode","none"),K(o,b(X0,{get when(){return Q().length===0},get children(){var A=W("text"),P0=x0(" ");return D(A,P0),Z(A,"wrapMode","none"),K(A,()=>F("tasks.search.placeholder"),null),u((K0)=>Z(A,"fg",J.textMuted,K0)),A}}),null),K(o,b(X0,{get when(){return Q().length>0},get children(){var A=W("text"),P0=x0(" "),K0=x0("/");return D(A,P0),D(A,K0),Z(A,"wrapMode","none"),K(A,()=>p().length,K0),K(A,f0,null),u((E0)=>Z(A,"fg",J.textMuted,E0)),A}}),null),u((A)=>{var{info:P0,text:K0,info:E0}=J,W0=bf.BLINK;return P0!==A.e&&(A.e=Z(e,"fg",P0,A.e)),K0!==A.t&&(A.t=Z(B0,"fg",K0,A.t)),E0!==A.a&&(A.a=Z(C0,"fg",E0,A.a)),W0!==A.o&&(A.o=Z(C0,"attributes",W0,A.o)),A},{e:void 0,t:void 0,a:void 0,o:void 0}),o}}),l0),D(l0,$0),Z(l0,"flexDirection","row"),Z(l0,"justifyContent","space-between"),Z(l0,"gap",1),Z(l0,"paddingBottom",1),Z(l0,"paddingLeft",1),Z(l0,"paddingRight",1),D($0,t0),Z($0,"flexDirection","row"),Z($0,"gap",2),K($0,b(Zf,{each:lX,children:(o)=>{let e=()=>z()===o.view;return(()=>{var B0=W("text");return Z(B0,"wrapMode","none"),Z(B0,"onMouseUp",()=>G(o.view)),K(B0,()=>yb(o.view)),u((C0)=>{var A=e()?J.primary:J.textMuted,P0=e()?bf.BOLD:void 0;return A!==C0.e&&(C0.e=Z(B0,"fg",A,C0.e)),P0!==C0.t&&(C0.t=Z(B0,"attributes",P0,C0.t)),C0},{e:void 0,t:void 0}),B0})()}}),t0),D(t0,x0("[/]")),Z(t0,"wrapMode","none"),K(l0,b(X0,{get when(){return f.sortMode},get children(){var o=W("text");return Z(o,"wrapMode","none"),Z(o,"onMouseUp",()=>f.onSortModeToggle?.()),K(o,()=>F("tasks.sort")),u((e)=>{var B0=J.textMuted,C0=bf.DIM;return B0!==e.e&&(e.e=Z(o,"fg",B0,e.e)),C0!==e.t&&(e.t=Z(o,"attributes",C0,e.t)),e},{e:void 0,t:void 0}),o}}),null),K(n,b(X0,{get when(){return g0().length>0},get children(){var o=W("box"),e=W("box"),B0=W("text"),C0=W("text"),A=W("scrollbox"),P0=W("box");return D(o,e),D(o,A),Z(o,"flexDirection","column"),Z(o,"flexShrink",0),D(e,B0),D(e,C0),Z(e,"flexDirection","row"),Z(e,"flexShrink",0),Z(e,"gap",1),Z(e,"paddingLeft",1),Z(e,"paddingRight",1),Z(e,"onMouseUp",()=>G0()),Z(B0,"wrapMode","none"),K(B0,()=>F("tasks.header.projects")),K(e,b(X0,{get when(){return y().length>1},get children(){var K0=W("text");return Z(K0,"wrapMode","none"),K(K0,t),u((E0)=>{var W0=z0()?J.primary:J.textMuted,L0=z0()?bf.BOLD:void 0;return W0!==E0.e&&(E0.e=Z(K0,"fg",W0,E0.e)),L0!==E0.t&&(E0.t=Z(K0,"attributes",L0,E0.t)),E0},{e:void 0,t:void 0}),K0}}),C0),Z(C0,"wrapMode","none"),K(C0,()=>"\u2500".repeat(Math.max(2,x()-10-F("tasks.header.projects").length-(y().length>1?t().length+1:0)-(y().length>1?T().length+1:0)))),K(e,b(X0,{get when(){return y().length>1},get children(){var K0=W("text");return Z(K0,"wrapMode","none"),K(K0,T),u((E0)=>{var W0=J.textMuted,L0=bf.DIM;return W0!==E0.e&&(E0.e=Z(K0,"fg",W0,E0.e)),L0!==E0.t&&(E0.t=Z(K0,"attributes",L0,E0.t)),E0},{e:void 0,t:void 0}),K0}}),null),D(A,P0),hY((K0)=>{P=K0},A),Z(A,"flexShrink",0),Z(A,"flexGrow",0),Z(A,"minHeight",0),Z(A,"stickyScroll",!1),Z(A,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),Z(P0,"flexShrink",0),Z(P0,"gap",0),Z(P0,"paddingRight",1),K(P0,b(Zf,{get each(){return g0()},children:(K0)=>b(_0,{row:K0})})),u((K0)=>{var E0=J.textMuted,W0=bf.BOLD,L0=J.border,R0=H0();return E0!==K0.e&&(K0.e=Z(B0,"fg",E0,K0.e)),W0!==K0.t&&(K0.t=Z(B0,"attributes",W0,K0.t)),L0!==K0.a&&(K0.a=Z(C0,"fg",L0,K0.a)),R0!==K0.o&&(K0.o=Z(A,"maxHeight",R0,K0.o)),K0},{e:void 0,t:void 0,a:void 0,o:void 0}),o}}),Rf),K(n,b(p0,{get label(){return F("tasks.header.tasks")},get suffix(){return I0(()=>C()==="default")()?void 0:C()},get topPad(){return g0().length>0}}),Rf),D(Rf,Af),hY((o)=>{M0=o},Rf),Z(Rf,"flexGrow",1),Z(Rf,"minHeight",0),Z(Rf,"stickyScroll",!1),Z(Rf,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),Z(Af,"flexShrink",0),Z(Af,"gap",0),Z(Af,"paddingRight",1),K(Af,b(Zf,{get each(){return $()},children:(o)=>{let{task:e,flatIndex:B0}=o,C0=()=>B0===T0(),A=()=>e.id===f.selectedId(),P0=U0(()=>{let Yf=f.chatRunState?.();if(!Yf)return!1;let n0=`${e.id}:`;for(let[yf,k0]of Yf)if(k0==="running"&&yf.startsWith(n0))return!0;return!1}),K0=U0(()=>{let Yf=pq(f.worktreeChanges?.(),e.worktreePath);if(Yf)return Yf;if(M(),!e.archived)h8(e.worktreePath);return w8(e.worktreePath)},void 0,{equals:IJ}),E0=U0(()=>E8({task:e,activity:f.engineState?.().get(e.id),job:f.taskJobs?.().get(e.id),live:P0(),spinnerFrame:0,subtitleBudget:Z0(),truncateBranch:cD,mainBranch:""})),W0=U0(()=>x8(E0(),a)),L0=()=>u0(W0().tone),R0=()=>C0()?J.focusAccent:A()?J.primary:void 0,Jf=()=>C0()||A()?"\u258C":" ";return(()=>{var Yf=W("box"),n0=W("box"),yf=W("box"),k0=W("text"),wf=W("box"),v=W("text"),A0=W("text"),Bf=W("box"),Ff=W("text"),Qf=W("box"),d=W("text");return D(Yf,n0),Z(Yf,"flexDirection","column"),Z(Yf,"gap",0),Z(Yf,"paddingBottom",1),D(n0,yf),D(n0,Bf),hY((s)=>{F0.set(B0,s),mf(()=>{if(F0.get(B0)===s)F0.delete(B0)})},n0),Z(n0,"flexDirection","column"),Z(n0,"gap",0),Z(n0,"onMouseUp",()=>{if(f.onSelect(e.id),f.activateOnClick)f.onActivate?.(e.id)}),Z(n0,"onMouseOver",(s)=>w0({task:e,x:s.x,y:s.y})),Z(n0,"onMouseOut",()=>w0((s)=>s?.task.id===e.id?null:s)),D(yf,k0),D(yf,wf),Z(yf,"flexDirection","row"),Z(yf,"gap",0),Z(k0,"wrapMode","none"),K(k0,Jf),D(wf,v),D(wf,A0),Z(wf,"flexDirection","row"),Z(wf,"flexGrow",1),Z(wf,"paddingRight",1),Z(wf,"gap",0),Z(v,"wrapMode","none"),K(v,()=>W0().stateGlyph),Z(A0,"wrapMode","none"),Z(A0,"flexGrow",1),K(A0,()=>u8(W0().titleText,c())),K(wf,b(X0,{get when(){return I0(()=>!!f.moveMode?.())()&&C0()},get children(){var s=W("text");return Z(s,"wrapMode","none"),K(s,()=>F("tasks.moveChip")),u((S0)=>Z(s,"fg",J.warning,S0)),s}}),null),D(Bf,Ff),D(Bf,Qf),Z(Bf,"flexDirection","row"),Z(Bf,"gap",0),Z(Ff,"wrapMode","none"),K(Ff,Jf),D(Qf,d),Z(Qf,"flexDirection","row"),Z(Qf,"flexGrow",1),Z(Qf,"paddingLeft",2),Z(Qf,"paddingRight",1),Z(Qf,"gap",1),Z(d,"wrapMode","none"),Z(d,"flexGrow",1),K(d,()=>W0().subtitleText),K(Qf,b(X0,{get when(){return e.pinned===!0},get children(){var s=W("text");return D(s,x0("\u25B4")),Z(s,"wrapMode","none"),u((S0)=>Z(s,"fg",J.warning,S0)),s}}),null),K(Qf,b(X0,{get when(){return wD(e)},children:(s)=>(()=>{var S0=W("text");return Z(S0,"wrapMode","none"),K(S0,()=>s().glyph),u((N0)=>Z(S0,"fg",u0(s().tone),N0)),S0})()}),null),K(Qf,b(X0,{get when(){return K0().added>0},get children(){var s=W("text"),S0=x0("+");return D(s,S0),Z(s,"wrapMode","none"),K(s,()=>K0().added,null),u((N0)=>Z(s,"fg",J.success,N0)),s}}),null),K(Qf,b(X0,{get when(){return K0().deleted>0},get children(){var s=W("text"),S0=x0("\u2212");return D(s,S0),Z(s,"wrapMode","none"),K(s,()=>K0().deleted,null),u((N0)=>Z(s,"fg",J.error,N0)),s}}),null),u((s)=>{var S0=C0()?J.backgroundElement:void 0,N0=R0(),Z1=L0(),V1=bf.BOLD,tf=J.text,v1=A()||C0()?bf.BOLD:void 0,xJ=R0(),M1=J.textMuted,wJ=bf.DIM;return S0!==s.e&&(s.e=Z(n0,"backgroundColor",S0,s.e)),N0!==s.t&&(s.t=Z(k0,"fg",N0,s.t)),Z1!==s.a&&(s.a=Z(v,"fg",Z1,s.a)),V1!==s.o&&(s.o=Z(v,"attributes",V1,s.o)),tf!==s.i&&(s.i=Z(A0,"fg",tf,s.i)),v1!==s.n&&(s.n=Z(A0,"attributes",v1,s.n)),xJ!==s.s&&(s.s=Z(Ff,"fg",xJ,s.s)),M1!==s.h&&(s.h=Z(d,"fg",M1,s.h)),wJ!==s.r&&(s.r=Z(d,"attributes",wJ,s.r)),s},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0}),Yf})()}}),null),K(Af,b(X0,{get when(){return p().length===0},get children(){var o=W("box"),e=W("text");return D(o,e),Z(o,"paddingTop",1),Z(o,"paddingLeft",1),K(e,(()=>{var B0=I0(()=>!!(X()&&Q().trim().length>0));return()=>B0()?F("tasks.empty.noMatchSearch"):I0(()=>!!z0())()?I0(()=>z()==="active")()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject"):I0(()=>z()==="active")()?F("tasks.empty.noActive"):F("tasks.empty.noArchived")})()),u((B0)=>Z(e,"fg",J.textMuted,B0)),o}}),null),K(Af,b(X0,{get when(){return I0(()=>!!(z0()&&p().length>0&&!I()))()&&!(X()&&Q().trim().length>0)},get children(){var o=W("box"),e=W("text");return D(o,e),Z(o,"paddingTop",1),Z(o,"paddingLeft",1),Z(e,"wrapMode","none"),K(e,(()=>{var B0=I0(()=>z()==="active");return()=>B0()?F("tasks.empty.noActiveProject"):F("tasks.empty.noArchivedProject")})()),u((B0)=>{var C0=J.textMuted,A=bf.DIM;return C0!==B0.e&&(B0.e=Z(e,"fg",C0,B0.e)),A!==B0.t&&(B0.t=Z(e,"attributes",A,B0.t)),B0},{e:void 0,t:void 0}),o}}),null),K(Af,b(X0,{get when(){return I0(()=>z()==="archived")()&&p().length>0},get children(){var o=W("box"),e=W("text");return D(o,e),Z(o,"paddingTop",1),Z(o,"paddingLeft",1),Z(e,"wrapMode","none"),K(e,()=>F("tasks.archiveHint")),u((B0)=>{var C0=J.textMuted,A=bf.DIM;return C0!==B0.e&&(B0.e=Z(e,"fg",C0,B0.e)),A!==B0.t&&(B0.t=Z(e,"attributes",A,B0.t)),B0},{e:void 0,t:void 0}),o}}),null),K(n,b(X0,{get when(){return f.zenActive?.()},get children(){var o=W("box"),e=W("text");return D(o,e),Z(o,"flexShrink",0),Z(o,"paddingLeft",1),Z(o,"paddingRight",1),Z(o,"paddingTop",1),D(e,x0("\u262F ZEN")),Z(e,"wrapMode","none"),u((B0)=>{var C0=J.accent,A=bf.BOLD;return C0!==B0.e&&(B0.e=Z(e,"fg",C0,B0.e)),A!==B0.t&&(B0.t=Z(e,"attributes",A,B0.t)),B0},{e:void 0,t:void 0}),o}}),null),K(n,b(X0,{get when(){return y0()},children:(o)=>{let e=U0(()=>{let W0=o().task,L0=[];if(L0.push({text:W0.kind==="main"?MJ(W0.repo):W0.title,bold:!0}),W0.branch.length>0)L0.push({text:`\u2387 ${W0.branch}`});if(W0.worktreePath.length>0)L0.push({text:W0.worktreePath,dim:!0});return L0}),B0=72,C0=U0(()=>Math.min(68,Math.max(...e().map((W0)=>Ib(W0.text))))),A=U0(()=>C0()+4),P0=U0(()=>e().length+2),K0=U0(()=>Math.max(0,Math.min(o().x+2,V0().width-A()-1))),E0=U0(()=>Math.max(0,Math.min(o().y+1,V0().height-P0()-1)));return(()=>{var W0=W("box");return Z(W0,"position","absolute"),Z(W0,"zIndex",2600),Z(W0,"flexDirection","column"),Z(W0,"border",!0),Z(W0,"paddingLeft",1),Z(W0,"paddingRight",1),K(W0,b(Zf,{get each(){return e()},children:(L0)=>(()=>{var R0=W("text");return Z(R0,"wrapMode","none"),K(R0,(()=>{var Jf=I0(()=>!!L0.dim);return()=>Jf()?Tb(L0.text,C0()):T8(L0.text,C0())})()),u((Jf)=>{var Yf=L0.dim?J.textMuted:J.text,n0=L0.bold?bf.BOLD:L0.dim?bf.DIM:void 0;return Yf!==Jf.e&&(Jf.e=Z(R0,"fg",Yf,Jf.e)),n0!==Jf.t&&(Jf.t=Z(R0,"attributes",n0,Jf.t)),Jf},{e:void 0,t:void 0}),R0})()})),u((L0)=>{var R0=K0(),Jf=E0(),Yf=A(),n0=J.focusAccent,yf=J.backgroundElement;return R0!==L0.e&&(L0.e=Z(W0,"left",R0,L0.e)),Jf!==L0.t&&(L0.t=Z(W0,"top",Jf,L0.t)),Yf!==L0.a&&(L0.a=Z(W0,"width",Yf,L0.a)),n0!==L0.o&&(L0.o=Z(W0,"borderColor",n0,L0.o)),yf!==L0.i&&(L0.i=Z(W0,"backgroundColor",yf,L0.i)),L0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),W0})()}}),null),u((o)=>{var e=Y()?J.focusAccent:J.textMuted,B0=bf.BOLD,C0=J.textMuted,A=bf.DIM;return e!==o.e&&(o.e=Z(o0,"fg",e,o.e)),B0!==o.t&&(o.t=Z(o0,"attributes",B0,o.t)),C0!==o.a&&(o.a=Z(t0,"fg",C0,o.a)),A!==o.o&&(o.o=Z(t0,"attributes",A,o.o)),o},{e:void 0,t:void 0,a:void 0,o:void 0}),n})()}var mD=32,lX,bb=2000,Sb=16;var dD=k(()=>{h();h();h();h();h();h();h();h();h();G1();h();Wf();xf();xf();ID();TQ();uD();hD();VG();vD();lX=[{view:"active"},{view:"archived"}]});var rD={};jf(rD,{startTasksPane:()=>hb,legendRowCap:()=>$D,legendCap:()=>aD});import{existsSync as iD}from"fs";import{stat as ub}from"fs/promises";import{TextAttributes as hQ}from"@opentui/core";function P8(f){return!!f&&GZ(f)}function lD(f){let J=f instanceof Error?f.message:String(f);if(/not a git repository/i.test(J))return F("tasks.toast.worktreeErrorNotGit");return F("tasks.toast.worktreeErrorGeneric",{message:J})}function xb(f){let{theme:J}=i0(),Y=vf(),z=IG(),G=kQ(),[X,q]=r(f.tasks().some((P)=>P.id===f.initialTaskId)?f.initialTaskId:f.tasks()[0]?.id??null);function Q(P){G.notify({kind:"error",taskId:X()??"",tabId:"",title:P})}function H(P){G.notify({kind:"done",taskId:X()??"",tabId:"",title:P})}let[B,V]=r(!1),[j,U]=r(z.get("activeSortMode")==="recent"?"recent":"default"),L=z.get("tasksPane.projectFilter"),[O,M]=r(typeof L==="string"&&L.length>0?L:null),R=(P)=>{M(P),z.set("tasksPane.projectFilter",P)},[S,a]=r(null),[N,g]=r(!1);{let P=process.env.TMUX_PANE;if(P){let M0=()=>{d0(["show-options","-wqv","-t",P,UY]).then(({code:F0,stdout:a0})=>{g(F0===0&&a0.trim().length>0)})};M0();let J0=setInterval(M0,1000);mf(()=>clearInterval(J0))}}let C=TJ(),y=!f.initialTaskId;zf(()=>{let P=f.orch?.activeTaskSignal()();if(!P)return;if(!y){if(P!==f.initialTaskId)return;y=!0}q(P)}),zf(O1(()=>f.orch?.uiPrefsSignal()(),(P)=>{if(P&&P.sortMode!==$f(j))U(P.sortMode);if(P&&P.projectFilter!==$f(O))M(P.projectFilter)})),zf(()=>{let P=f.orch?.updateSignal()();if(P)a(P)});let _={orch:f.orch,tasks:()=>f.tasks(),confirm:async(P)=>await zY.show(Y,P.title,P.body,P.cancelLabel,P.confirmLabel)===!0,promptText:(P,M0)=>YY.show(Y,P,M0),logger:console,logPrefix:"[kobe tasks]",notifyError:Q,notifyInfo:H,reload:()=>f.reload(),switchBeforeKill:!0,updateActiveTask:!0,onTaskDeleted:(P,M0)=>{if(X()!==P)return;let J0=f.tasks();q(M0?.id??(J0.find((F0)=>!F0.archived)??J0[0])?.id??null)},promptNewTask:(P,M0,J0)=>FQ.show(Y,P,M0,J0),cursorRepo:()=>{let P=f.tasks();return(P.find((M0)=>M0.id===X())??P[0])?.repo},lastVendor:()=>kf("lastSelectedVendor"),rememberVendor:(P)=>af("lastSelectedVendor",P),openCreateSurface:async(P)=>{if(Lz(z.get(_J,Dz))!=="chattab")return!1;let J0=await k1();if(!J0)return!1;return await dq(J0,P),!0},selectTask:(P)=>q(P),enterTask:(P)=>H0(P)};async function z0(){await AD(_)}async function t(){if(Lz(z.get(_J,Dz))==="chattab"){let J0=await k1();if(J0){await cq(J0);return}}if(!(await Tz.show(Y,z,f.orch??void 0)).visualPrefsChanged)return;if(!z.flush())return;try{let J0=await k1();if(J0)await BG(J0)}catch(J0){console.error("[kobe tasks] failed to refresh workspace panes:",J0)}}async function Y0(){let P=await k1();if(P){await nq(P);return}uG.show(Y)}async function T(){if(!S()?.hasUpdate){H(F("tasks.toast.alreadyLatest",{version:s0}));return}let M0=await k1();if(!M0)return;await iq(M0)}async function Q0(P){await DD(_,P)}async function p(P){await LD(_,P)}async function D0(P){await MD(_,P)}async function g0(P){await FD(_,P)}async function $(P){await OD(_,P)}async function E(P){let J0=f.tasks().find((a0)=>a0.id===P)?.worktreePath;if(!J0||!iD(J0)){if(!f.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),Q(F("tasks.toast.noDaemonWorktree"));return}try{J0=await f.orch.ensureWorktree(P)}catch(a0){console.error("[kobe tasks] task.ensureWorktree failed:",a0),Q(lD(a0));return}await f.reload()}if(!J0||!iD(J0))return;let F0=RD();if(!F0){console.error("[kobe tasks] no editor/opener found; set KOBE_OPEN_EDITOR"),Q(F("tasks.toast.noEditor"));return}if(!CD(J0,F0))console.error(`[kobe tasks] failed to open worktree with ${F0.label}`),Q(F("tasks.toast.openWorktreeFailed",{label:F0.label}))}async function f0(){if(!process.env.TMUX_PANE)return;let P=await k1();if(!P)return;let M0=await $z(P);if(!M0)return;await h0(["select-pane","-t",M0])}async function I(P,M0){let J0=f.tasks().find((F0)=>F0.id===P);if(!J0||J0.kind==="main"||!f.orch)return;try{await f.orch.moveTask(P,M0)}catch(F0){console.error("[kobe tasks] task.move failed:",F0),Q(F("tasks.toast.moveTaskFailed",{message:F0 instanceof Error?F0.message:String(F0)}));return}q(P),await f.reload()}let[G0,x]=r(z.get("tasksPane.keysCollapsed",!1)===!0),c=(P)=>{x(P),z.set("tasksPane.keysCollapsed",P)};zf(O1(()=>f.orch?.uiPrefsSignal()(),(P)=>{if(P&&P.keysCollapsed!==$f(G0))x(P.keysCollapsed)}));let[Z0,V0]=r(!1);Uf(()=>({enabled:Y.stack.length===0&&!Z0(),bindings:mY({"help.open":()=>void Y0(),"task.new":()=>void z0(),"settings.open.sidebar":()=>void t(),"tasks.update":()=>void T(),"tasks.openWorktree":()=>{let P=X();if(P)E(P)},"tasks.renameBranch":()=>{let P=X();if(P)g0(P)},"tasks.cycleEngine":()=>{let P=X();if(P)$(P)},"tasks.toggleKeys":()=>c(!G0()),"tasks.focusEngine":()=>void f0().catch((P)=>console.error("[kobe tasks] focus engine pane failed:",P))})}));async function H0(P){let M0=Lf(P),J0=f.tasks().find((n)=>n.id===P),F0=await k1();if(F0&&F0!==M0)await DX(F0);if(await Hf(M0)){let n=await Bz(M0,"@kobe_worktree")||J0?.worktreePath||"";if(P8(n)){let q0=J0?.repo?oJ(J0.repo,n,{kind:"repo-init"}):void 0;await TY({name:M0,cwd:n,command:N1(J0?.vendor),taskId:P,vendor:J0?.vendor,repo:J0?.repo,launchInit:q0})}await aq(M0),await h0(["switch-client","-t",`=${M0}`]),f.orch?.setActiveTask(P).catch(()=>{});return}let p0=J0?.worktreePath;if(!P8(p0)){if(!f.orch){console.error("[kobe tasks] no daemon; cannot materialise worktree"),Q(F("tasks.toast.noDaemonOpen"));return}try{p0=await f.orch.ensureWorktree(P)}catch(n){console.error("[kobe tasks] task.ensureWorktree failed:",n),Q(lD(n));return}await f.reload()}if(!P8(p0))return;let u0=J0?.repo?oJ(J0.repo,p0,{kind:"repo-init"}):void 0;if(!await TY({name:M0,cwd:p0,command:N1(J0?.vendor),taskId:P,vendor:J0?.vendor,repo:J0?.repo,launchInit:u0})){console.error(`[kobe tasks] failed to start session ${M0}`),Q(F("tasks.toast.sessionStartFailed"));return}await aq(M0),await h0(["switch-client","-t",`=${M0}`]),f.orch?.setActiveTask(P).catch(()=>{})}let y0=U0(()=>{let P=S();if(P?.hasUpdate)return{label:`v${P.latest} \u2191`,emphasize:!0};return{label:`v${s0}`,emphasize:!1}}),w0=()=>f.orch?.daemonStaleSignal()()??!1,T0=()=>f.orch?.daemonVersionSignal()()??null,r0=U0(()=>f.tasks().find((P)=>P.id===X())?.kind==="main");return(()=>{var P=W("box"),M0=W("box");return D(P,M0),Z(P,"flexDirection","column"),Z(P,"flexGrow",1),K(P,b(VD,{stale:w0,daemonVersion:T0,clientVersion:s0,width:()=>C().width}),M0),Z(M0,"flexGrow",1),Z(M0,"flexShrink",1),K(M0,b(nD,{get tasks(){return f.tasks},selectedId:X,onSelect:q,onActivate:(J0)=>void H0(J0),activateOnClick:!0,headerStatus:y0,onHeaderStatusClick:()=>void T(),onAddTask:()=>void z0(),zenActive:N,width:()=>C().width,get engineState(){return I0(()=>!!f.orch)()?f.orch.engineStateSignal():void 0},get taskJobs(){return I0(()=>!!f.orch)()?f.orch.taskJobsSignal():void 0},get worktreeChanges(){return f.orch?()=>{let J0=f.orch;if(!J0||J0.connectionStateSignal()()!=="online")return null;return J0.worktreeChangesSignal()()}:void 0},onRenameRequest:(J0)=>void D0(J0),onDeleteRequest:(J0)=>void p(J0),onArchiveRequest:(J0)=>void Q0(J0),onLocalMergeRequest:(J0)=>{let F0=f.tasks().find((a0)=>a0.id===J0);if(!F0||F0.kind==="main")return;q(J0),V((a0)=>!a0)},moveMode:B,onMoveRequest:(J0,F0)=>void I(J0,F0),onMoveModeExit:()=>V(!1),sortMode:j,projectFilter:O,onProjectFilterChange:R,onSortModeToggle:()=>{let J0=j()==="default"?"recent":"default";U(J0),z.set("activeSortMode",J0)},focused:()=>Y.stack.length===0,onSearchActiveChange:V0})),K(P,b(wb,{moveMode:B,selectedIsMain:r0,collapsed:G0,onToggleCollapsed:()=>c(!G0())}),null),u((J0)=>Z(P,"backgroundColor",J.background,J0)),P})()}function aD(f){let J=Q8(f);if(!J)return null;let Y=J.hint?.keys??J.keys[0];return Y&&Y.length>0?Y:null}function $D(f){let J=f.map(aD).filter((Y)=>Y!==null);return J.length>0?J.join("/"):null}function wb(f){let{theme:J}=i0(),[Y,z]=r("Prefix");f1(()=>{d0(["show-options","-g","prefix"]).then(({code:U,stdout:L})=>{if(U!==0)return;let O=EQ(L);if(O)z(O)})});let G=()=>{q8();let U=Aq(),L=U.binds,O=[],M=U.focus.filter((S)=>S!==null).map((S)=>S.chord);if(M.length===4&&M.every((S,a)=>S===yY[a]))O.push({k:"ctrl+hjkl",label:F("tasks.hints.movePanes")});else if(M.length>0)O.push({k:M[0],label:F("tasks.hints.movePanes")});let R=(S,a)=>{let N=a.map((g)=>L[g]?.chord).filter((g)=>!!g);if(N.length>0)O.push({k:`prefix ${N.join("/")}`,label:S})};if(L["tmux.detach"])O.push({k:L["tmux.detach"].chord,label:F("tasks.hints.detach")});return R(F("tasks.hints.splits"),["tmux.layout.workspaceSplit","tmux.layout.workspaceClose","tmux.layout.workspaceReset"]),R(F("tasks.hints.panes"),["tmux.layout.tasksToggle","tmux.layout.opsToggle","tmux.layout.terminalToggle"]),O},X=()=>{q8();let U=[{ids:["help.open"],label:F("tasks.hints.fullHelp")},{ids:["task.new"],label:F("tasks.hints.newTask")},{ids:["settings.open.sidebar"],label:F("tasks.hints.settings")},{ids:["sidebar.select"],label:F("tasks.hints.open")},{ids:["tasks.focusEngine"],label:F("tasks.hints.focusEngine")},{ids:["tasks.openWorktree"],label:F("tasks.hints.openWorktree")},{ids:["sidebar.delete"],label:F("tasks.hints.delete")},{ids:["sidebar.view"],label:F("tasks.hints.views")},{ids:["sidebar.projectFilter"],label:F("tasks.hints.project")}],L=[];for(let O of U){let M=$D(O.ids);if(M===null)continue;L.push({k:M,label:O.label,dimWhenMain:O.dimWhenMain})}return L.push(...G()),L},q=()=>[{k:"j/k",label:F("tasks.hints.reorder")},{k:"enter/esc",label:F("tasks.hints.done")}],Q=()=>f.moveMode?.()?q():X(),H=18,B=()=>Math.min(H,Math.max(...Q().map((U)=>U.label.length))),V=(U)=>U.length<=B()?U:`${U.slice(0,Math.max(0,B()-1))}\u2026`,j=()=>(f.collapsed?.()??!1)&&!(f.moveMode?.()??!1);return(()=>{var U=W("box"),L=W("text");return D(U,L),Z(U,"flexShrink",0),Z(U,"flexDirection","column"),Z(U,"paddingLeft",1),Z(U,"paddingRight",1),Z(U,"paddingTop",1),Z(U,"paddingBottom",1),Z(U,"gap",0),Z(L,"wrapMode","none"),Z(L,"onMouseUp",()=>f.onToggleCollapsed?.()),K(L,(()=>{var O=I0(()=>!!j());return()=>O()?F("tasks.hints.headerFolded"):F("tasks.hints.headerUnfolded")})()),K(U,b(X0,{get when(){return!j()},get children(){return b(Zf,{get each(){return Q()},children:(O)=>{let M=()=>O.dimWhenMain===!0&&(f.selectedIsMain?.()??!1);return(()=>{var R=W("box"),S=W("box"),a=W("text"),N=x0("["),g=x0("]"),C=W("box"),y=W("text");return D(R,S),D(R,C),Z(R,"flexDirection","row"),Z(R,"gap",1),Z(R,"justifyContent","space-between"),D(S,a),Z(S,"width",10),Z(S,"flexShrink",0),D(a,N),D(a,g),Z(a,"wrapMode","none"),K(a,()=>TG(O.k,Y()),g),D(C,y),Z(C,"flexShrink",0),Z(y,"wrapMode","none"),K(y,()=>V(O.label)),u((_)=>{var z0=M()?J.textMuted:J.accent,t=M()?hQ.DIM:hQ.BOLD,Y0=B(),T=J.textMuted,Q0=M()?hQ.DIM:void 0;return z0!==_.e&&(_.e=Z(a,"fg",z0,_.e)),t!==_.t&&(_.t=Z(a,"attributes",t,_.t)),Y0!==_.a&&(_.a=Z(C,"width",Y0,_.a)),T!==_.o&&(_.o=Z(y,"fg",T,_.o)),Q0!==_.i&&(_.i=Z(y,"attributes",Q0,_.i)),_},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),R})()}})}}),null),u((O)=>{var M=J.textMuted,R=hQ.DIM;return M!==O.e&&(O.e=Z(L,"fg",M,O.e)),R!==O.t&&(O.t=Z(L,"attributes",R,O.t)),O},{e:void 0,t:void 0}),U})()}async function hb(f={}){await L1({logContext:"tasks",providers:{notifications:!0},setup:()=>Pb(f)})}async function Pb(f){let J=new xz({homeDir:OJ()});await J.load();let[Y,z]=r(J.list()),G=null;try{let B=await p1();if(B){let V=new j1(B);await V.init(),G=V}else dJ("tasks-boot","no daemon running \u2014 polling tasks.json (a gui owns daemon lifecycle)")}catch(B){WY("tasks-boot",B),dJ("tasks-boot","daemon subscribe failed \u2014 polling tasks.json")}let X=()=>G&&G.connectionStateSignal()()==="online"?G.tasksSignal()():Y(),q=async()=>{await J.load(),z(J.list())},Q="",H=setInterval(()=>{if(G&&G.connectionStateSignal()()==="online")return;(async()=>{let B="missing";try{let V=await ub(J.filePath);B=`${V.mtimeMs}:${V.size}`}catch{}if(B===Q)return;Q=B,await q()})().catch(()=>{})},Eb);return{root:()=>[b(xb,{tasks:X,get initialTaskId(){return f.initialTaskId},orch:G,reload:q}),b(jD,{})],onDestroy:()=>{if(H)clearInterval(H);G?.dispose()}}}var Eb=1500;var pD=k(()=>{h();h();h();h();h();h();h();h();Tf();qJ();G1();h();eY();y1();Wf();PY();E1();lf();e1();vG();GG();gf();gq();U1();F8();bG();O8();b8();WD();KD();SG();mX();NQ();xf();M8();nY();b1();gD();kD();dD();J1();P1();A8()});var _D={};jf(_D,{startSettingsHost:()=>mb});function vb(f){let J=IG(),Y=vf(),{theme:z}=i0(),G=!1,X=!1;async function q(){if(X)return;X=!0;try{if(J.flush()&&G){let H=await k1();if(H)await BG(H)}}catch(Q){console.error("[kobe settings] failed to refresh workspace panes:",Q)}finally{process.exit(0)}}return Uf(()=>({enabled:Y.stack.length===0,bindings:[{key:"escape",cmd:q},{key:"q",cmd:q},{key:"ctrl+c",cmd:q}]})),(()=>{var Q=W("scrollbox");return Z(Q,"flexGrow",1),Z(Q,"paddingTop",1),Z(Q,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),K(Q,b(Tz,{kv:J,get orchestrator(){return f.orchestrator??void 0},standalone:!0,onVisualPrefsChange:()=>{G=!0},onClose:q})),u((H)=>Z(Q,"backgroundColor",z.background,H)),Q})()}async function mb(){await L1({setup:async()=>{let f=null;try{let J=await p1();if(J){let Y=new j1(J);await Y.init(),f=Y}else console.error("[kobe settings] no daemon running; Restart backend disabled")}catch(J){console.error("[kobe settings] daemon unavailable; Restart backend disabled:",J)}return{root:()=>b(vb,{orchestrator:f}),onDestroy:()=>{f?.dispose()}}}})}var oD=k(()=>{h();h();h();h();h();h();y1();PY();b8();mX();xf();nY();b1();J1();P1()});var sD={};jf(sD,{startHelpHost:()=>nb});function cb(){let f=vf(),{theme:J}=i0();function Y(){process.exit(0)}return Uf(()=>({enabled:f.stack.length===0,bindings:[{key:"escape",cmd:Y},{key:"q",cmd:Y},{key:"f1",cmd:Y},{key:"ctrl+c",cmd:Y}]})),(()=>{var z=W("box");return Z(z,"flexGrow",1),Z(z,"paddingTop",1),K(z,b(uG,{onClose:Y})),u((G)=>Z(z,"backgroundColor",J.background,G)),z})()}async function nb(){await L1({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(cb,{})})})}var tD=k(()=>{h();h();h();h();h();F8();xf();nY();b1();P1()});var eD={};jf(eD,{startUpdateHost:()=>pb});import{spawn as db,spawnSync as ib}from"child_process";import{TextAttributes as xG}from"@opentui/core";function lb(f){if(!f)return!1;let J=process.platform,[Y,z]=J==="darwin"?["open",[f]]:J==="win32"?["cmd",["/c","start","",f]]:["xdg-open",[f]];try{return db(Y,z,{stdio:"ignore",detached:!0}).unref(),!0}catch{return!1}}function ab(f){return f.replace(/\r\n/g,`
|
|
225
226
|
`).split(`
|
|
226
|
-
`).map((
|
|
227
|
-
kobe ${
|
|
228
|
-
`),process.stdout.write(`running: ${
|
|
227
|
+
`).map((J)=>J.trim()).filter(Boolean)}function $b(){if(!process.stdin.isTTY)return Promise.resolve();return new Promise((f)=>{let J=process.stdin,Y=()=>{J.off("data",Y),J.setRawMode?.(!1),J.pause(),f()};J.setRawMode?.(!0),J.resume(),J.once("data",Y)})}function rb(){let{theme:f}=i0(),J=Y1(),[Y,z]=r(null),[G,X]=r([]),[q,Q]=r(!0),[H,B]=r("update"),[V,j]=r(null),U=U0(()=>Y()?.latest??s0),L=U0(()=>G()[0]?.url??aQ(U())),O=U0(()=>[{id:"update",key:"U",label:F("update.actions.updateNow"),detail:hJ},{id:"release",key:"R",label:F("update.actions.openRelease"),detail:L()??F("update.releaseUrlUnavailable")},{id:"close",key:"Q",label:F("update.actions.close"),detail:F("update.actions.closeDetail")}]);f1(()=>{M()});async function M(){let N=await wG({force:!0});z(N);let g=N?.latest??s0,C=await lQ({current:s0,latest:g});X(C),Q(!1)}function R(N){let g=O().map((_)=>_.id),y=(g.indexOf(H())+N+g.length)%g.length;B(g[y]??"update")}function S(N=H()){if(N==="close")process.exit(0);if(N==="release"){j(lb(L())?F("update.statusReleaseOpened"):F("update.statusReleaseError"));return}a()}async function a(){j(F("update.statusRunningUpdater")),await new Promise((C)=>setTimeout(C,30)),J?.destroy(),process.stdout.write(`
|
|
228
|
+
kobe ${s0} -> latest
|
|
229
|
+
`),process.stdout.write(`running: ${hJ}
|
|
229
230
|
|
|
230
|
-
`);let
|
|
231
|
-
kobe update: failed to start updater: ${
|
|
232
|
-
`);process.stdout.write(
|
|
233
|
-
|
|
231
|
+
`);let N=ib("sh",["-c",hJ],{stdio:"inherit"}),g=N.status??(N.error?1:0);if(N.error)process.stderr.write(`
|
|
232
|
+
kobe update: failed to start updater: ${N.error.message}
|
|
233
|
+
`);process.stdout.write(g===0?`
|
|
234
|
+
${F("update.updateComplete")}
|
|
234
235
|
`:`
|
|
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((
|
|
236
|
+
${F("update.updateFailed",{code:String(g)})}
|
|
237
|
+
`),process.stdout.write(F("update.pressAnyKey")),await $b(),process.exit(g)}return Uf(()=>({bindings:[{key:"up",cmd:()=>R(-1)},{key:"down",cmd:()=>R(1)},{key:"k",cmd:()=>R(-1)},{key:"j",cmd:()=>R(1)},{key:"return",cmd:()=>S()},{key:"u",cmd:()=>S("update")},{key:"r",cmd:()=>S("release")},{key:"q",cmd:()=>S("close")},{key:"escape",cmd:()=>S("close")},{key:"ctrl+c",cmd:()=>S("close")}]})),(()=>{var N=W("box"),g=W("box"),C=W("text"),y=W("text"),_=W("box"),z0=W("text"),t=W("text"),Y0=x0("v"),T=W("text"),Q0=W("text"),p=x0("v"),D0=W("box"),g0=W("box"),$=W("text"),E=W("scrollbox"),f0=W("box");return D(N,g),D(N,_),D(N,D0),D(N,g0),D(N,E),Z(N,"flexDirection","column"),Z(N,"flexGrow",1),Z(N,"paddingTop",1),Z(N,"paddingLeft",2),Z(N,"paddingRight",2),D(g,C),D(g,y),Z(g,"flexDirection","row"),Z(g,"justifyContent","space-between"),Z(g,"flexShrink",0),Z(C,"wrapMode","none"),K(C,()=>F("update.pageTitle")),D(y,x0("q / esc")),Z(y,"wrapMode","none"),Z(y,"onMouseUp",()=>S("close")),D(_,z0),D(_,t),D(_,T),D(_,Q0),Z(_,"flexDirection","row"),Z(_,"gap",2),Z(_,"flexShrink",0),Z(_,"paddingTop",1),Z(z0,"wrapMode","none"),K(z0,()=>F("update.current")),D(t,Y0),Z(t,"wrapMode","none"),K(t,s0,null),Z(T,"wrapMode","none"),K(T,()=>F("update.latest")),D(Q0,p),Z(Q0,"wrapMode","none"),K(Q0,U,null),Z(D0,"flexDirection","column"),Z(D0,"flexShrink",0),Z(D0,"paddingTop",1),Z(D0,"gap",0),K(D0,b(Zf,{get each(){return O()},children:(I)=>(()=>{var G0=W("box"),x=W("box"),c=W("text"),Z0=x0("["),V0=x0("]"),H0=W("box"),y0=W("text"),w0=W("text");return D(G0,x),D(G0,H0),D(G0,w0),Z(G0,"flexDirection","row"),Z(G0,"gap",1),Z(G0,"paddingLeft",1),Z(G0,"paddingRight",1),Z(G0,"onMouseUp",()=>S(I.id)),D(x,c),Z(x,"width",4),Z(x,"flexShrink",0),D(c,Z0),D(c,V0),Z(c,"wrapMode","none"),K(c,()=>I.key,V0),D(H0,y0),Z(H0,"width",14),Z(H0,"flexShrink",0),Z(y0,"wrapMode","none"),K(y0,()=>I.label),Z(w0,"wrapMode","word"),K(w0,()=>I.detail),u((T0)=>{var r0=H()===I.id?f.primary:void 0,P=H()===I.id?f.selectedListItemText:f.accent,M0=xG.BOLD,J0=H()===I.id?f.selectedListItemText:f.text,F0=H()===I.id?f.selectedListItemText:f.textMuted;return r0!==T0.e&&(T0.e=Z(G0,"backgroundColor",r0,T0.e)),P!==T0.t&&(T0.t=Z(c,"fg",P,T0.t)),M0!==T0.a&&(T0.a=Z(c,"attributes",M0,T0.a)),J0!==T0.o&&(T0.o=Z(y0,"fg",J0,T0.o)),F0!==T0.i&&(T0.i=Z(w0,"fg",F0,T0.i)),T0},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),G0})()})),K(N,b(X0,{get when(){return V()},get children(){var I=W("text");return Z(I,"wrapMode","word"),K(I,V),u((G0)=>Z(I,"fg",f.info,G0)),I}}),g0),D(g0,$),Z(g0,"flexShrink",0),Z(g0,"paddingTop",1),Z($,"wrapMode","none"),K($,()=>F("update.changesSectionHeader",{from:s0,to:U()})),D(E,f0),Z(E,"flexGrow",1),Z(E,"flexShrink",1),Z(E,"stickyScroll",!1),Z(f0,"flexDirection","column"),Z(f0,"paddingRight",1),Z(f0,"paddingBottom",1),Z(f0,"gap",0),K(f0,b(X0,{get when(){return q()},get children(){var I=W("text");return K(I,()=>F("update.loadingNotes")),u((G0)=>Z(I,"fg",f.textMuted,G0)),I}}),null),K(f0,b(X0,{get when(){return I0(()=>!q())()&&G().length===0},get children(){var I=W("text");return Z(I,"wrapMode","word"),K(I,()=>F("update.notesUnavailable")),u((G0)=>Z(I,"fg",f.textMuted,G0)),I}}),null),K(f0,b(Zf,{get each(){return G()},children:(I)=>(()=>{var G0=W("box"),x=W("text"),c=x0("v");return D(G0,x),Z(G0,"flexDirection","column"),Z(G0,"paddingBottom",1),Z(G0,"gap",0),D(x,c),Z(x,"wrapMode","none"),K(x,()=>I.version,null),K(G0,b(Zf,{get each(){return ab(I.body)},children:(Z0)=>(()=>{var V0=W("text");return Z(V0,"wrapMode","word"),K(V0,Z0),u((H0)=>Z(V0,"fg",f.textMuted,H0)),V0})()}),null),u((Z0)=>{var V0=f.text,H0=xG.BOLD;return V0!==Z0.e&&(Z0.e=Z(x,"fg",V0,Z0.e)),H0!==Z0.t&&(Z0.t=Z(x,"attributes",H0,Z0.t)),Z0},{e:void 0,t:void 0}),G0})()}),null),u((I)=>{var{background:G0,text:x}=f,c=xG.BOLD,Z0=f.textMuted,V0=f.textMuted,H0=f.text,y0=xG.BOLD,w0=f.textMuted,T0=Y()?.hasUpdate?f.warning:f.success,r0=xG.BOLD,P=f.textMuted,M0=xG.DIM,J0={trackOptions:{backgroundColor:f.background,foregroundColor:f.borderActive}};return G0!==I.e&&(I.e=Z(N,"backgroundColor",G0,I.e)),x!==I.t&&(I.t=Z(C,"fg",x,I.t)),c!==I.a&&(I.a=Z(C,"attributes",c,I.a)),Z0!==I.o&&(I.o=Z(y,"fg",Z0,I.o)),V0!==I.i&&(I.i=Z(z0,"fg",V0,I.i)),H0!==I.n&&(I.n=Z(t,"fg",H0,I.n)),y0!==I.s&&(I.s=Z(t,"attributes",y0,I.s)),w0!==I.h&&(I.h=Z(T,"fg",w0,I.h)),T0!==I.r&&(I.r=Z(Q0,"fg",T0,I.r)),r0!==I.d&&(I.d=Z(Q0,"attributes",r0,I.d)),P!==I.l&&(I.l=Z($,"fg",P,I.l)),M0!==I.u&&(I.u=Z($,"attributes",M0,I.u)),J0!==I.c&&(I.c=Z(E,"verticalScrollbarOptions",J0,I.c)),I},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0}),N})()}async function pb(){await L1({setup:()=>({root:()=>b(rb,{})})})}var fL=k(()=>{h();h();h();h();h();h();h();h();h();Wf();U1();xf();G1();nY();b1()});async function JL(f,J){if(!J)return 0;return pf(f).history.latestTranscriptMtimeForWorktree(J)}var YL=k(()=>{MY()});function _b(f){return f.trim().split(/\s+/)[0]??""}function GL(f,J,Y,z){let G=Xf(Y);if(f==="vim")return{bin:"vim",command:`vim ${G}`};if(f==="nvim")return{bin:"nvim",command:`nvim ${G}`};if(f==="nano")return{bin:"nano",command:`nano ${G}`};if(f==="emacs")return{bin:"emacs",command:`emacs ${G}`};let X=(J.trim()||(z??"").trim()).trim();if(!X)return null;let q=_b(X);if(!q)return null;let Q=X.includes(zL)?X.split(zL).join(G):`${X} ${G}`;return{bin:q,command:Q}}function ob(f,J,Y){let z=Xf(J);return["f=$(mktemp 2>/dev/null)",`if [ -n "$f" ] && git show ${Xf(`HEAD:./${Y}`)} > "$f" 2>/dev/null; then`,` ${f} -d "$f" ${z} -c 'setlocal nomodifiable' -c 'wincmd l'; r=$?`,"else",` ${f} ${z}; r=$?`,"fi",'rm -f "$f" 2>/dev/null; exit $r'].join(`
|
|
238
|
+
`)}function sb(f,J){let Y=f.endsWith("/")?f:`${f}/`;return J.startsWith(Y)?J.slice(Y.length):null}async function tb(f){let J=_z(kf(pJ)),Y=kf(kY)??"",z=(process.env.VISUAL??process.env.EDITOR??"").trim();if(J!=="auto")return GL(J,Y,f,z);if(z)return GL("custom","",f,z);let G=Xf(f);for(let X of X7)if(await XL(X))return{bin:X,command:`${X} ${G}`};return null}async function XL(f){try{return await Bun.spawn(["sh","-c",`command -v ${Xf(f)} >/dev/null 2>&1`],{stdin:"ignore",stdout:"ignore",stderr:"ignore"}).exited===0}catch{return!1}}async function eb(f,J){try{return await Bun.spawn(["git","diff","--quiet","HEAD","--",J],{cwd:f,stdin:"ignore",stdout:"ignore",stderr:"ignore",env:x1()}).exited===1}catch{return!1}}async function ZL(f,J,Y){let z=await tb(Y);if(!z)return!1;if(!await XL(z.bin))return!1;let G=await fS(z,J,Y);return await HJ(f,{cwd:J,command:G,name:JS(Y)}),!0}async function fS(f,J,Y){let{bin:z,command:G}=f;if(z!=="nvim"&&z!=="vim")return G;if(G!==`${z} ${Xf(Y)}`)return G;let X=sb(J,Y);if(!X)return G;if(!await eb(J,X))return G;return ob(z,Y,X)}function JS(f){let J=f.slice(f.lastIndexOf("/")+1).trim();return J.length>0?J:"edit"}var zL="{file}";var qL=k(()=>{NY();gf();Zq();Tf();qJ()});async function v8(f,J){if(!J)throw Error("git(): cwd is required");let Y=await oz(J,f),z=Y.status??-1;if(z!==0){let G=(Y.stderr??"").trim(),X=(Y.stdout??"").trim();throw Error(`git ${f.join(" ")} (cwd=${J}) exited with code ${z}: ${G||X||"(no output)"}`)}return Y.stdout??""}async function m8(f){let Y=(await v8(["ls-files","--cached","--others","--exclude-standard","--full-name"],f)).split(`
|
|
239
|
+
`).map((G)=>G.replace(/\r$/,"")),z=new Set;for(let G of Y)if(G.length>0)z.add(G);return Array.from(z).sort()}async function c8(f){let J=await v8(["status","--porcelain","--untracked-files=all"],f),Y=BL(J),z=null;try{let G=await v8(["diff","--no-color","--numstat","HEAD"],f);z=new Map(YS(G).map((X)=>[X.path,{added:X.added,deleted:X.deleted}]))}catch{z=new Map}return Y.map((G)=>{let X=z?.get(G.path);if(X)return{...G,added:X.added,deleted:X.deleted};return G})}function YS(f){let J=f.split(`
|
|
240
|
+
`).map((z)=>z.replace(/\r$/,"")),Y=[];for(let z of J){if(z.length===0)continue;let G=z.indexOf("\t");if(G<0)continue;let X=z.indexOf("\t",G+1);if(X<0)continue;let q=z.slice(0,G),Q=z.slice(G+1,X),H=z.slice(X+1),B=H.indexOf(" -> ");if(B>=0)H=H.slice(B+4);let V=q==="-"?null:Number.parseInt(q,10),j=Q==="-"?null:Number.parseInt(Q,10);if(H.length===0)continue;Y.push({path:H,added:Number.isNaN(V)?null:V,deleted:Number.isNaN(j)?null:j})}return Y}function QL(f){let J={name:"",path:"",isDir:!0,children:[]};for(let Y of f){if(!Y)continue;let z=Y.split("/").filter((X)=>X.length>0);if(z.length===0)continue;let G=J;for(let X=0;X<z.length;X++){let q=z[X],H=X!==z.length-1,B=G.children.find((V)=>V.name===q&&V.isDir===H);if(!B)B={name:q,path:z.slice(0,X+1).join("/"),isDir:H,children:[]},G.children.push(B);G=B}}return HL(J),J}function HL(f){f.children.sort((J,Y)=>{if(J.isDir!==Y.isDir)return J.isDir?-1:1;return J.name.localeCompare(Y.name)});for(let J of f.children)HL(J)}function BL(f){let J=f.split(`
|
|
241
|
+
`).map((z)=>z.replace(/\r$/,"")),Y=[];for(let z of J){if(z.length<4)continue;let G=z[0],X=z[1],q=z[2];if(G===void 0||X===void 0||q!==" ")continue;let Q=z.slice(3),H;if(G==="?"&&X==="?")H="?";else{let B=X!==" "?X:G;if(B==="M"||B==="A"||B==="D"||B==="R"||B==="C"||B==="U")H=B;else continue}if(H==="R"){let B=Q.indexOf(" -> ");if(B>=0)Q=Q.slice(B+4)}if(Q.length===0)continue;if(Q.endsWith("/"))continue;Y.push({path:Q,status:H})}return Y}var n8=k(()=>{qq()});function d8(f){Uf(()=>({enabled:f.focused(),bindings:mY({"files.nav":(J,Y)=>{if((Y??0)%2===0)f.moveDown();else f.moveUp()},"files.hierarchy":(J,Y)=>{if((Y??0)%2===0)f.collapseOrParent();else f.expandOrDescend()},"files.tab":(J,Y)=>{let z=f.currentTab(),G=aX.indexOf(z);if(G<0)return;let X=(Y??0)%2===0?-1:1,q=aX[(G+X+aX.length)%aX.length];if(q)f.setTab(q)},"files.open":()=>f.openCurrent(),"files.mention":()=>f.mentionCurrent?.(),"files.createPR":()=>f.createPR?.(),"files.openExternal":()=>f.openExternal(),"files.refresh":()=>f.refresh()})}))}var aX;var i8=k(()=>{SG();b1();aX=["all","changes"]});import{spawn as jL}from"child_process";import{existsSync as zS}from"fs";import{platform as GS}from"os";function WL(f){if(!f)return;let J=GS();if(J==="linux"){if(zS("/proc/sys/fs/binfmt_misc/WSLInterop")||process.env.WSL_DISTRO_NAME){$X("wslview",[f],()=>{let Y=jL("wslpath",["-w",f],{stdio:["ignore","pipe","ignore"]}),z="";Y.stdout?.on("data",(G)=>{z+=G.toString()}),Y.on("close",(G)=>{if(G===0)$X("explorer.exe",[z.trim()])})});return}$X("xdg-open",[f]);return}if(J==="darwin"){$X("open",[f]);return}if(J==="win32"){$X("cmd.exe",["/c","start","",f]);return}}function $X(f,J,Y){try{let z=jL(f,J,{stdio:"ignore",detached:!0});z.on("error",()=>Y?.()),z.unref()}catch{Y?.()}}var VL=()=>{};function l8(f,J,Y,z){for(let G of f.children)if(G.isDir){let X=J.has(G.path);if(z.push({kind:"dir",path:G.path,name:G.name,depth:Y,expanded:X,hasChildren:G.children.length>0}),X)l8(G,J,Y+1,z)}else z.push({kind:"file",path:G.path,name:G.name,depth:Y})}function KL(f,J){if(J<=0)return f;let Y=[...f];if(Y.length<=J)return f;return`\u2026${Y.slice(Y.length-Math.max(0,J-1)).join("")}`}function UL(f){return f.map((J)=>({kind:"status",path:J.path,status:J.status,added:J.added,deleted:J.deleted}))}function XS(f){return`${f.kind}\x00${f.path}`}function ZS(f,J){if(f.kind!==J.kind||f.path!==J.path)return!1;switch(f.kind){case"file":{let Y=J;return f.name===Y.name&&f.depth===Y.depth}case"dir":{let Y=J;return f.name===Y.name&&f.depth===Y.depth&&f.expanded===Y.expanded&&f.hasChildren===Y.hasChildren}case"status":{let Y=J;return f.status===Y.status&&f.added===Y.added&&f.deleted===Y.deleted}}}function DL(f,J){return IQ(f,J,XS,ZS)}function LL(f,J){if(f===J)return!0;if(f==null||J==null)return!1;if(f.length!==J.length)return!1;for(let Y=0;Y<f.length;Y++)if(f[Y]!==J[Y])return!1;return!0}function ML(f,J){if(f===J)return!0;if(f==null||J==null)return!1;if(f.length!==J.length)return!1;for(let Y=0;Y<f.length;Y++){let z=f[Y],G=J[Y];if(z.path!==G.path||z.status!==G.status||z.added!==G.added||z.deleted!==G.deleted)return!1}return!0}var FL=()=>{};import{watch as qS}from"fs";import{TextAttributes as rX}from"@opentui/core";function QS(f){switch(f){case"M":return"warning";case"A":return"success";case"D":return"error";case"?":return"textMuted";case"R":case"C":case"U":return"info"}}function BS(f){let J=f.toLowerCase();if(J.includes("not a git repository"))return F("files.error.notGitRepo");if(J.includes("does not exist")||J.includes("enoent"))return F("files.error.pathMissing");if(J.includes("permission denied")||J.includes("eacces"))return F("files.error.permissionDenied");if(J.includes("git: not found")||J.includes("command not found"))return F("files.error.gitNotInstalled");let Y=f.indexOf(": ");if(Y>=0&&f.startsWith("git "))return f.slice(Y+2).trim()||F("files.error.gitFailed");return f.trim()||F("files.error.gitFailed")}function jS(f){switch(f){case"all":return F("files.tabs.all");case"changes":return F("files.tabs.changes")}}function a8(f){let{theme:J}=i0(),Y=TJ(),z=()=>f.focused?f.focused():!0,[G,X]=r("all"),[q,Q]=r(0),[H,B]=r(0),[V,j]=r(null,{equals:LL}),[U,L]=r(null,{equals:ML}),[O,M]=r(null),[R,S]=r(new Set),a=0;async function N(E,f0){let I=++a;if(f0==null){j(null),L(null),M(null);return}M(null);try{if(E==="all"){let G0=await m8(f0);if(I!==a||f.worktreePath()!==f0)return;j(G0)}else if(E==="changes"){let G0=await c8(f0);if(I!==a||f.worktreePath()!==f0)return;L(G0)}}catch(G0){let x=G0 instanceof Error?G0.message:String(G0);if(I===a&&f.worktreePath()===f0)M(x)}}zf(O1(f.worktreePath,async(E)=>{j(null),L(null),M(null),Q(0),S(new Set),await N(G(),E)})),zf(O1(f.worktreePath,(E)=>{if(E==null)return;if(process.env.KOBE_FILETREE_WATCH!=="1")return;let f0=null,I=null;try{I=qS(E,{recursive:!0},(G0,x)=>{if(x==null)return;let c=x.toString();if(c===".git"||c.startsWith(".git/")||c.startsWith(".git\\"))return;if(c.startsWith("node_modules/")||c.startsWith("node_modules\\"))return;if(f0!=null)clearTimeout(f0);f0=setTimeout(()=>{f0=null,B((Z0)=>Z0+1)},500)}),I.on("error",()=>{})}catch{}mf(()=>{if(f0!=null)clearTimeout(f0);if(I!=null)I.close()})})),zf(O1([G,H],async([E,f0])=>{let I=f.worktreePath();if(I==null)return;Q(0);let x=H()>0;if(E==="all"){if(V()==null||x)await N("all",I)}else if(E==="changes"){if(U()==null||x)await N("changes",I)}}));let g=U0(()=>{let E=V();if(E==null)return null;return QL(E)}),C=U0((E)=>{let f0=[];if(G()==="all"){let I=g();if(I!=null)l8(I,R(),0,f0)}else if(G()==="changes"){let I=U();if(I!=null)f0.push(...UL(I))}return DL(E??[],f0)},[]),y=U0(()=>{let E=0,f0=0;for(let I of C()){if(I.kind!=="status")continue;if(I.added!=null)E=Math.max(E,String(I.added).length+1);if(I.deleted!=null)f0=Math.max(f0,String(I.deleted).length+1)}return{added:E,deleted:f0}}),_=U0(()=>{let E=y(),f0=(E.added>0?E.added+1:0)+(E.deleted>0?E.deleted+1:0);return Math.max(8,Y().width-6-f0)});function z0(){let E=C();if(E.length===0)return;Q(Math.min(q()+1,E.length-1))}function t(){if(C().length===0)return;Q(Math.max(q()-1,0))}function Y0(){let E=C(),f0=q(),I=E[f0];if(!I)return;if(I.kind!=="dir")return;if(!I.expanded&&I.hasChildren)S((G0)=>{let x=new Set(G0);return x.add(I.path),x});else if(I.expanded){if(f0+1<E.length)Q(f0+1)}}function T(){if(G()!=="all")return;let E=C(),f0=q(),I=E[f0];if(!I)return;if(I.kind==="dir"&&I.expanded){S((x)=>{let c=new Set(x);return c.delete(I.path),c});return}if(I.kind!=="dir"&&I.kind!=="file")return;let G0=I.depth-1;if(G0<0)return;for(let x=f0-1;x>=0;x--){let c=E[x];if(!c)continue;if(c.kind==="dir"&&c.depth===G0){Q(x);return}}}function Q0(){let E=C(),f0=q();if(f0<0||f0>=E.length)return;let I=E[f0];if(!I)return;if(I.kind==="dir"){S((G0)=>{let x=new Set(G0);if(x.has(I.path))x.delete(I.path);else x.add(I.path);return x});return}f.onOpenFile(I.path)}function p(){let E=C(),f0=q();if(f0<0||f0>=E.length)return;let I=E[f0];if(!I||I.kind==="dir")return;f.onMention?.(I.path)}function D0(){B((E)=>E+1),f.onRefresh?.()}function g0(){let E=C(),f0=q();if(f0<0||f0>=E.length)return;let I=E[f0];if(!I||I.kind==="dir")return;let G0=f.worktreePath();if(!G0)return;let x=`${G0}/${I.path}`;WL(x)}d8({focused:z,moveDown:z0,moveUp:t,setTab:(E)=>X(E),currentTab:G,openCurrent:Q0,mentionCurrent:p,createPR:f.onCreatePR,openExternal:g0,refresh:D0,expandOrDescend:Y0,collapseOrParent:T});let $;return zf(O1([q,C],([E,f0])=>{if(!$)return;if(f0.length===0)return;let I=$.scrollTop,G0=$.viewport.height;if(G0<=0)return;if(E<I)$.scrollTo({x:0,y:E});else if(E>=I+G0)$.scrollTo({x:0,y:E-G0+1})})),(()=>{var E=W("box"),f0=W("box"),I=W("box"),G0=W("scrollbox");return D(E,f0),D(E,G0),Z(E,"flexDirection","column"),Z(E,"flexGrow",1),Z(E,"paddingTop",1),Z(E,"paddingBottom",1),Z(E,"paddingLeft",0),Z(E,"paddingRight",0),K(E,b(X0,{get when(){return f.onZenToggle||f.onCreatePR},get children(){var x=W("box");return Z(x,"flexDirection","row"),Z(x,"justifyContent","flex-end"),Z(x,"gap",2),Z(x,"paddingBottom",1),Z(x,"flexShrink",0),K(x,b(X0,{get when(){return f.onZenToggle},get children(){var c=W("box"),Z0=W("text"),V0=W("text");return D(c,Z0),D(c,V0),Z(c,"flexDirection","row"),Z(c,"gap",1),Z(c,"onMouseUp",()=>f.onZenToggle?.()),D(Z0,x0("\u262F")),Z(Z0,"wrapMode","none"),Z(V0,"wrapMode","none"),K(V0,()=>F("files.actions.zen")),u((H0)=>{var y0=J.accent,w0=rX.BOLD,T0=J.text;return y0!==H0.e&&(H0.e=Z(Z0,"fg",y0,H0.e)),w0!==H0.t&&(H0.t=Z(Z0,"attributes",w0,H0.t)),T0!==H0.a&&(H0.a=Z(V0,"fg",T0,H0.a)),H0},{e:void 0,t:void 0,a:void 0}),c}}),null),K(x,b(X0,{get when(){return f.onCreatePR},get children(){var c=W("box"),Z0=W("text"),V0=W("text");return D(c,Z0),D(c,V0),Z(c,"flexDirection","row"),Z(c,"gap",1),Z(c,"onMouseUp",()=>f.onCreatePR?.()),D(Z0,x0("[P]")),Z(Z0,"wrapMode","none"),Z(V0,"wrapMode","none"),K(V0,()=>F("files.actions.createPR")),u((H0)=>{var y0=J.accent,w0=rX.BOLD,T0=J.text;return y0!==H0.e&&(H0.e=Z(Z0,"fg",y0,H0.e)),w0!==H0.t&&(H0.t=Z(Z0,"attributes",w0,H0.t)),T0!==H0.a&&(H0.a=Z(V0,"fg",T0,H0.a)),H0},{e:void 0,t:void 0,a:void 0}),c}}),null),x}}),f0),D(f0,I),Z(f0,"flexDirection","row"),Z(f0,"justifyContent","space-between"),Z(f0,"paddingBottom",0),Z(f0,"flexShrink",0),Z(I,"flexDirection","row"),Z(I,"gap",2),K(I,b(Zf,{each:HS,children:(x)=>{let c=()=>G()===x;return(()=>{var Z0=W("text");return Z(Z0,"wrapMode","none"),Z(Z0,"onMouseUp",()=>X(x)),K(Z0,()=>jS(x)),u((V0)=>{var H0=c()?J.primary:J.textMuted,y0=c()?rX.BOLD:void 0;return H0!==V0.e&&(V0.e=Z(Z0,"fg",H0,V0.e)),y0!==V0.t&&(V0.t=Z(Z0,"attributes",y0,V0.t)),V0},{e:void 0,t:void 0}),Z0})()}})),K(f0,b(X0,{get when(){return f.cornerBadge?.()},children:(x)=>(()=>{var c=W("text");return Z(c,"wrapMode","none"),K(c,()=>x().text),u((Z0)=>{var V0=x().active?J.accent:J.textMuted,H0=x().active?rX.BOLD:void 0;return V0!==Z0.e&&(Z0.e=Z(c,"fg",V0,Z0.e)),H0!==Z0.t&&(Z0.t=Z(c,"attributes",H0,Z0.t)),Z0},{e:void 0,t:void 0}),c})()}),null),K(E,b(X0,{get when(){return G()==="changes"},get children(){var x=W("box"),c=W("text");return D(x,c),Z(x,"flexDirection","column"),Z(x,"paddingBottom",1),Z(x,"flexShrink",0),Z(x,"gap",0),Z(c,"wrapMode","none"),K(c,()=>F("files.legend.changes")),u((Z0)=>Z(c,"fg",J.textMuted,Z0)),x}}),G0),K(E,b(X0,{get when(){return G()!=="changes"},get children(){var x=W("box");return Z(x,"flexDirection","row"),Z(x,"paddingBottom",1),Z(x,"flexShrink",0),x}}),G0),hY((x)=>{$=x},G0),Z(G0,"flexGrow",1),Z(G0,"verticalScrollbarOptions",{trackOptions:{foregroundColor:"transparent"}}),K(G0,b(X0,{get when(){return f.worktreePath()==null},get children(){var x=W("box"),c=W("text");return D(x,c),Z(x,"paddingTop",1),Z(x,"paddingLeft",1),K(c,()=>F("files.empty.noTask")),u((Z0)=>Z(c,"fg",J.textMuted,Z0)),x}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null)()&&O()!=null},get children(){var x=W("box"),c=W("text"),Z0=W("text");return D(x,c),D(x,Z0),Z(x,"paddingTop",1),Z(x,"paddingLeft",1),Z(x,"flexDirection","column"),Z(x,"gap",0),Z(c,"wrapMode","word"),K(c,()=>BS(O()??"")),Z(Z0,"wrapMode","word"),K(Z0,()=>F("files.error.retryHint")),u((V0)=>{var{error:H0,textMuted:y0}=J;return H0!==V0.e&&(V0.e=Z(c,"fg",H0,V0.e)),y0!==V0.t&&(V0.t=Z(Z0,"fg",y0,V0.t)),V0},{e:void 0,t:void 0}),x}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null&&O()==null&&C().length===0)()&&(G()==="all"&&V()!=null||G()==="changes"&&U()!=null)},get children(){var x=W("box"),c=W("text");return D(x,c),Z(x,"paddingTop",1),Z(x,"paddingLeft",1),K(c,(()=>{var Z0=I0(()=>G()==="all");return()=>Z0()?F("files.empty.noFiles"):F("files.empty.noChanges")})()),u((Z0)=>Z(c,"fg",J.textMuted,Z0)),x}}),null),K(G0,b(X0,{get when(){return I0(()=>f.worktreePath()!=null&&O()==null)()&&C().length>0},get children(){var x=W("box");return Z(x,"flexShrink",0),Z(x,"gap",0),Z(x,"paddingRight",1),K(x,b(Zf,{get each(){return C()},children:(c,Z0)=>{let V0=()=>Z0()===q(),H0=(()=>{var J0=W("text");return Z(J0,"wrapMode","none"),K(J0,()=>V0()?"\u258C":" "),u((F0)=>Z(J0,"fg",V0()?J.focusAccent:void 0,F0)),J0})(),y0=()=>V0()?J.backgroundElement:void 0;if(c.kind==="dir"){let J0=" ".repeat(c.depth),F0=c.expanded?"\u25BE":"\u25B8";return(()=>{var a0=W("box"),p0=W("box"),u0=W("text");return D(a0,p0),Z(a0,"flexDirection","row"),Z(a0,"gap",0),Z(a0,"onMouseUp",()=>{Q(Z0()),S((_0)=>{let n=new Set(_0);if(n.has(c.path))n.delete(c.path);else n.add(c.path);return n})}),K(a0,H0,p0),D(p0,u0),Z(p0,"flexGrow",1),Z(p0,"paddingRight",1),Z(u0,"wrapMode","none"),K(u0,()=>`${J0}${F0} ${c.name}/`),u((_0)=>{var n=y0(),q0=J.textMuted,b0=rX.BOLD;return n!==_0.e&&(_0.e=Z(a0,"backgroundColor",n,_0.e)),q0!==_0.t&&(_0.t=Z(u0,"fg",q0,_0.t)),b0!==_0.a&&(_0.a=Z(u0,"attributes",b0,_0.a)),_0},{e:void 0,t:void 0,a:void 0}),a0})()}if(c.kind==="file"){let J0=" ".repeat(c.depth);return(()=>{var F0=W("box"),a0=W("box"),p0=W("text");return D(F0,a0),Z(F0,"flexDirection","row"),Z(F0,"gap",0),Z(F0,"onMouseUp",()=>{Q(Z0()),f.onOpenFile(c.path)}),K(F0,H0,a0),D(a0,p0),Z(a0,"flexGrow",1),Z(a0,"paddingRight",1),Z(p0,"wrapMode","none"),K(p0,()=>`${J0} ${c.name}`),u((u0)=>{var _0=y0(),n=J.text;return _0!==u0.e&&(u0.e=Z(F0,"backgroundColor",_0,u0.e)),n!==u0.t&&(u0.t=Z(p0,"fg",n,u0.t)),u0},{e:void 0,t:void 0}),F0})()}let w0=QS(c.status),T0=()=>{switch(w0){case"success":return J.success;case"warning":return J.warning;case"error":return J.error;case"info":return J.info;default:return J.textMuted}},r0=y(),P=c.added==null?" ".repeat(r0.added):`+${c.added}`.padStart(r0.added),M0=c.deleted==null?" ".repeat(r0.deleted):`-${c.deleted}`.padStart(r0.deleted);return(()=>{var J0=W("box"),F0=W("box"),a0=W("text"),p0=W("text");return D(J0,F0),Z(J0,"flexDirection","row"),Z(J0,"gap",0),Z(J0,"onMouseUp",()=>{Q(Z0()),f.onOpenFile(c.path)}),K(J0,H0,F0),D(F0,a0),D(F0,p0),Z(F0,"flexDirection","row"),Z(F0,"flexGrow",1),Z(F0,"gap",1),Z(F0,"paddingRight",1),Z(a0,"wrapMode","none"),K(a0,()=>c.status),Z(p0,"wrapMode","none"),Z(p0,"flexGrow",1),K(p0,()=>KL(c.path,_())),K(F0,b(X0,{get when(){return r0.added>0},get children(){var u0=W("text");return Z(u0,"wrapMode","none"),K(u0,P),u((_0)=>Z(u0,"fg",J.success,_0)),u0}}),null),K(F0,b(X0,{get when(){return r0.deleted>0},get children(){var u0=W("text");return Z(u0,"wrapMode","none"),K(u0,M0),u((_0)=>Z(u0,"fg",J.error,_0)),u0}}),null),u((u0)=>{var _0=y0(),n=T0(),q0=J.text;return _0!==u0.e&&(u0.e=Z(J0,"backgroundColor",_0,u0.e)),n!==u0.t&&(u0.t=Z(a0,"fg",n,u0.t)),q0!==u0.a&&(u0.a=Z(p0,"fg",q0,u0.a)),u0},{e:void 0,t:void 0,a:void 0}),J0})()}})),x}}),null),K(E,b(X0,{get when(){return f.worktreePath()!=null},get children(){var x=W("box"),c=W("text");return D(x,c),Z(x,"flexDirection","row"),Z(x,"paddingTop",1),Z(x,"flexShrink",0),Z(c,"wrapMode","none"),K(c,()=>F("files.footer.openHint")),u((Z0)=>Z(c,"fg",J.textMuted,Z0)),x}}),null),E})()}var HS;var OL=k(()=>{h();h();h();h();h();h();h();h();h();G1();h();Wf();xf();n8();i8();VL();FL();HS=["all","changes"]});var AL=k(()=>{OL();n8();i8()});import{promises as WS}from"fs";import VS from"path";async function PQ(f,J){let Y=new AbortController,z=setTimeout(()=>Y.abort(),KS);try{let G=await BJ("git",J,{cwd:f,env:x1(),signal:Y.signal});if(Y.signal.aborted)return null;if(G.status!==0)return null;return G.stdout.trim()}finally{clearTimeout(z)}}async function US(f){return await PQ(f,["rev-parse","--abbrev-ref","HEAD"])||"HEAD"}async function DS(f){let J=await PQ(f,["symbolic-ref","refs/remotes/origin/HEAD","--short"]);if(!J)return"main";return J.startsWith("origin/")?J.slice(7):J}async function LS(f){let J=await PQ(f,["rev-parse","--abbrev-ref","@{u}"]);return J!==null&&J.length>0}async function MS(f){let J=await PQ(f,["status","--porcelain"]);if(!J)return 0;return J.split(`
|
|
242
|
+
`).filter((Y)=>Y.length>0).length}async function FS(f){let[J,Y,z,G]=await Promise.all([US(f),DS(f),LS(f),MS(f)]);return{branch:J,targetBranch:Y,hasUpstream:z,dirtyCount:G}}function OS(f){if(f<=0)return"There are no uncommitted changes.";if(f===1)return"There is 1 uncommitted change.";return`There are ${f} uncommitted changes.`}function AS(f){return f?"The current branch tracks an upstream.":"There is no upstream branch yet."}function gS(f,J){let Y={branch:J.branch,targetBranch:J.targetBranch,dirtyCountSentence:OS(J.dirtyCount),upstreamSentence:AS(J.hasUpstream)};return f.replace(/\{\{([a-zA-Z][a-zA-Z0-9_]*)\}\}/g,(z,G)=>Object.hasOwn(Y,G)?Y[G]:z)}async function RS(f){let J=VS.join(f,".kobe","pr-instructions.md");try{let Y=await WS.readFile(J,"utf8");return Y.length>0?Y:gL}catch{return gL}}async function RL(f){let[J,Y]=await Promise.all([RS(f),FS(f)]);return gS(J,Y)}var KS=5000,gL=`The user likes the current state of the code.
|
|
242
243
|
|
|
243
244
|
{{dirtyCountSentence}}
|
|
244
245
|
The current branch is {{branch}}.
|
|
@@ -255,21 +256,21 @@ Follow these steps to create a PR:
|
|
|
255
256
|
- Push to origin.
|
|
256
257
|
- Use \`gh pr create --base {{targetBranch}}\` to create a PR onto the target branch. Keep the title under 80 characters. Keep the description under five sentences. Describe not just changes made in this session but ALL changes since the branch diverged from the target.
|
|
257
258
|
|
|
258
|
-
If any of these steps fail, ask the user for help.`;var
|
|
259
|
-
`)}var
|
|
259
|
+
If any of these steps fail, ask the user for help.`;var CL=k(()=>{NY();iX()});var $8={};jf($8,{startOpsPreview:()=>mS,startOpsHost:()=>ES,nextActivityPollDelay:()=>yL});import{createHash as CS}from"crypto";import{SyntaxStyle as kS}from"@opentui/core";function yL(f,J){if(J<yS)return NL;return Math.min(f*2,NS)}function TS(f){let{theme:J}=i0(),[Y,z]=r(0),[G,X]=r(0),q=!1;f1(()=>{let M=!1,R,S=NL,a=0,N=0;async function g(){try{let C=await JL(f.vendor,f.worktree);if(M)return;if(!q)q=!0,z(C),N=C;if(C>N)N=C,a=0;else a++;X(C)}catch{a++}finally{if(!M)S=yL(S,a),R=setTimeout(()=>void g(),S)}}g(),mf(()=>{if(M=!0,R)clearTimeout(R)})});let Q=()=>q&&G()>Y(),H=()=>Q()?{text:F("ops.badge.newActivity"),active:!0}:null;function B(){z(G())}f1(()=>{if(!f.targetPane)return;let M=RV(f.vendor),R=!1,S=null,a="",N=!1,g=0,C=null;async function y(Y0){if(Y0===C)return;C=Y0,await AY(f.targetPane,IS,Y0)}async function _(){try{a=kL(await rz(f.targetPane,80)),S=(await M.latestCompletion(f.worktree))?.id??null,await y(M.supportsCompletionMarkers()?"idle":"unknown")}catch{}}async function z0(){try{let Y0=kL(await rz(f.targetPane,80));if(R)return;if(Y0!==a)a=Y0,N=!0,g=0,await y(M.supportsCompletionMarkers()?"running":"unknown");else if(N)g++;if(!M.supportsCompletionMarkers()||!N||g<SS)return;let T=await M.latestCompletion(f.worktree);if(R||!T||T.id===S)return;S=T.id,N=!1,g=0,await y("done")}catch{}}_();let t=setInterval(()=>void z0(),bS);mf(()=>{R=!0,clearInterval(t)})});function V(M){if(!f.taskId)return;HJ(Lf(f.taskId),{cwd:f.worktree,command:eW({worktree:f.worktree,relPath:M,cliInvocation:Cf()}),name:uS(M)})}function j(M){if(!f.taskId){V(M);return}let R=`${f.worktree}/${M}`;ZL(Lf(f.taskId),f.worktree,R).then((S)=>{if(!S)V(M)})}function U(M){if(!f.targetPane)return;$Z(f.targetPane,`@${M} `)}async function L(){if(!f.targetPane)return;let M=await RL(f.worktree);await $Z(f.targetPane,M),await GX(f.targetPane,"Enter")}function O(){if(!f.taskId)return;let M=Lf(f.taskId),R=Cf(),S=`${_f()}${g1(R)} layout --session ${Xf(M)} --action zen-toggle`;h0(["run-shell","-b",S])}return(()=>{var M=W("box");return Z(M,"flexDirection","column"),Z(M,"flexGrow",1),K(M,b(a8,{worktreePath:()=>f.worktree,focused:()=>!0,onOpenFile:j,onMention:U,onCreatePR:()=>void L(),get onZenToggle(){return f.taskId?O:void 0},cornerBadge:H,onRefresh:B})),u((R)=>Z(M,"backgroundColor",J.background,R)),M})()}function uS(f){let J=f.lastIndexOf("/");return J>=0?f.slice(J+1):f}function kL(f){return CS("sha1").update(f).digest("hex")}async function ES(f){await L1({logContext:"ops",providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(TS,f)})})}function xS(f){switch(f.slice(f.lastIndexOf(".")+1).toLowerCase()){case"ts":case"tsx":case"mts":case"cts":return"typescript";case"js":case"jsx":case"mjs":case"cjs":return"javascript";case"md":case"markdown":return"markdown";default:return}}async function wS(f,J){let Y=await oz(f,["diff","HEAD","--",J]);return Y.status===0?Y.stdout:""}async function hS(f,J){return await Z7(f,J)??""}function PS(f){let J={fg:f.primary},Y={fg:f.success},z={fg:f.info},G={fg:f.warning},X={fg:f.accent},q={fg:f.textMuted,italic:!0},Q={fg:f.textMuted},H={fg:f.text};return kS.fromStyles({keyword:J,"keyword.function":J,"keyword.return":J,"keyword.import":J,"keyword.exception":J,"keyword.conditional":J,"keyword.repeat":J,"keyword.operator":J,"keyword.modifier":J,"keyword.type":J,string:Y,"string.escape":Y,"string.regexp":Y,"string.special":Y,"character.special":Y,comment:q,"comment.documentation":q,function:z,"function.call":z,"function.method":z,"function.builtin":z,constructor:z,type:G,"type.builtin":G,constant:X,"constant.builtin":X,boolean:X,number:X,operator:Q,"punctuation.bracket":Q,"punctuation.delimiter":Q,"punctuation.special":Q,variable:H,"variable.member":H,"variable.parameter":H,"variable.builtin":X,property:H,attribute:G,label:H,module:H})}function vS(f){let{theme:J}=i0(),Y=PS(J),z=xS(f.relPath),[G]=VZ(()=>f.relPath,async(X)=>{let q=await wS(f.worktree,X);if(q.trim().length>0)return{kind:"diff",text:q};return{kind:"code",text:await hS(f.worktree,X)}});return Uf(()=>({bindings:[{key:"q",cmd:()=>process.exit(0)},{key:"escape",cmd:()=>process.exit(0)},{key:"ctrl+c",cmd:()=>process.exit(0)}]})),(()=>{var X=W("box"),q=W("box"),Q=W("text"),H=W("text"),B=W("text"),V=W("box");return D(X,q),D(X,V),Z(X,"flexDirection","column"),Z(X,"flexGrow",1),D(q,Q),D(q,H),D(q,B),Z(q,"flexDirection","row"),Z(q,"gap",1),Z(q,"paddingLeft",1),Z(q,"paddingRight",1),K(Q,()=>f.relPath),K(H,(()=>{var j=I0(()=>G()?.kind==="diff");return()=>j()?F("ops.preview.diffVsHead"):F("ops.preview.file")})()),K(B,()=>F("ops.preview.closeHint")),Z(V,"flexGrow",1),K(V,b(X0,{get when(){return G()},get fallback(){return(()=>{var j=W("text");return K(j,()=>F("ops.preview.loading")),u((U)=>Z(j,"fg",J.textMuted,U)),j})()},children:(j)=>b(X0,{get when(){return j().kind==="diff"},get fallback(){return(()=>{var U=W("code");return Z(U,"filetype",z),Z(U,"syntaxStyle",Y),u((L)=>Z(U,"content",j().text,L)),U})()},get children(){var U=W("diff");return Z(U,"view","unified"),Z(U,"filetype",z),Z(U,"syntaxStyle",Y),Z(U,"showLineNumbers",!0),u((L)=>Z(U,"diff",j().text,L)),U}})})),u((j)=>{var{background:U,accent:L,textMuted:O,textMuted:M}=J;return U!==j.e&&(j.e=Z(X,"backgroundColor",U,j.e)),L!==j.t&&(j.t=Z(Q,"fg",L,j.t)),O!==j.a&&(j.a=Z(H,"fg",O,j.a)),M!==j.o&&(j.o=Z(B,"fg",M,j.o)),j},{e:void 0,t:void 0,a:void 0,o:void 0}),X})()}async function mS(f){await L1({providers:{kv:!1,focus:!1},setup:()=>({root:()=>b(vS,f)})})}var NL=2500,NS=20000,yS=3,bS=1500,SS=2,IS="@kobe_tab_state";var r8=k(()=>{h();h();h();h();h();h();h();lJ();oH();YL();Tf();qL();qJ();qq();Wf();xf();G1();nY();b1();AL();Qz();CL()});var TL={};jf(TL,{startDirectTmux:()=>nS,chooseInitialTask:()=>IL});import{resolve as bL}from"path";function IL(f,J={}){let Y=(q)=>q?f.find((Q)=>Q.id===q):void 0,z=Y(J.activeTaskId);if(z)return z;let G=Y(J.persistedTaskId);if(G)return G;if(J.cwdRepo){let q=f.find((Q)=>Q.kind==="main"&&Q.repo===J.cwdRepo);if(q)return q}let X=f.filter((q)=>!q.archived);return X.find((q)=>q.pinned)??X[0]??f[0]}async function SL(f){if(f.length===0)return null;try{return await Bun.spawn(f,{stdin:"inherit",stdout:"inherit",stderr:"inherit",env:process.env}).exited}catch{return null}}async function cS(f){sQ();let J=[...c1()];if(J.length===0)J=[vJ(bL(process.cwd())).path];for(let Y of J)try{await f.ensureMainTask(Y)}catch(z){console.error(`[kobe] ensureMainTask failed for ${Y}:`,z)}return J[0]??bL(process.cwd())}async function nS(){if(CZ("gui"),Promise.resolve().then(() => (Ij(),Sj)).then((Y)=>Y.ensureGlobalKobeHooks()),!await NJ()){console.error("kobe: tmux not found on PATH \u2014 install tmux to use kobe 0.6 direct mode"),process.exitCode=1;return}let f=await UJ(),J=new j1(f,{role:"gui"});try{process.env.KOBE_DAEMON_SOCKET_PATH=f.socketPath,await J.init();let Y=await cS(J),z=IL(J.listTasks(),{activeTaskId:J.activeTaskSignal()(),persistedTaskId:kf("lastSelectedTaskId"),cwdRepo:Y});if(!z){let V=await rZ();if(await gz(),await lq(V),await SL(az(V))===null)console.error("kobe: failed to attach to the kobe-home session"),process.exitCode=1;return}let G=z.worktreePath||await J.ensureWorktree(z.id),X=Lf(z.id);await J.setActiveTask(z.id).catch(()=>{}),af("lastSelectedTaskId",z.id);let q=oJ(z.repo,G,{kind:"repo-init"});if(!await TY({name:X,cwd:G,command:N1(z.vendor),taskId:z.id,vendor:z.vendor,repo:z.repo,launchInit:q})){console.error(`kobe: tmux session ${X} failed to start (check the daemon log)`),process.exitCode=1;return}await gz(),await lq(X);let H=await SL(az(X));if(H===null){console.error(`kobe: failed to attach to tmux session ${X}`),process.exitCode=1;return}if(H!==0&&!await Hf(X)){console.error(`kobe: tmux session ${X} ended unexpectedly (attach exited ${H})`),process.exitCode=H;return}let B=J.getTask(z.id);if(B&&B.title===RJ&&B.worktreePath)try{let V=await dz(B.worktreePath,B.vendor);if(V)await J.setTitle(B.id,V)}catch(V){console.error("[kobe] auto-title failed:",V)}}finally{J.dispose()}}var uL=k(()=>{eY();y1();PY();E1();lZ();lG();GG();gf();Tf();yq();J1()});var EL={};jf(EL,{startTui:()=>dS});async function dS(){qU();let{startDirectTmux:f}=await Promise.resolve().then(() => (uL(),TL));await f()}var xL=k(()=>{GQ()});vQ();K1();import{resolve as PL}from"path";U1();function Q9(){return[`kobe ${s0}`,"","Usage: kobe [command] [options]","","Run with no command to launch the TUI.","","Commands:"," web [options] Launch the browser dashboard"," add [path] Save a repo path for the new-task picker"," adopt [glob] Import existing git worktrees as tasks"," export [--csv|--json] Print the task list (json/csv/table; daemon-free)"," repo <verb> Per-repo init script + first prompt (show|set|unset)"," api <verb> Scriptable RPC surface for agents (see `kobe api --help`)"," daemon <verb> Manage the daemon (start|stop|status|restart)"," theme <verb> Manage user themes (list|add|remove)"," skill <verb> Install the kobe agent skill (install|status|command)"," feedback Send feedback to GitHub Discussions"," update [target] Self-update kobe"," doctor Diagnose daemon / tmux / state (read-only)"," reset [--hard] Recover a wedged install"," reload Restart Tasks/Ops panes in place (engine untouched)"," kill-sessions Tear down kobe's tmux server (dev reset)","","Options:"," -v, --version Print version"," -h, --help Print this help"].join(`
|
|
260
|
+
`)}var wL=`Usage: kobe add [path]
|
|
260
261
|
kobe add --remote --host <host> --user <user> --path <basePath> [--port N] [--key <path> | --password]
|
|
261
262
|
|
|
262
263
|
Save a repo for the new-task picker. With --remote, register an SSH-backed
|
|
263
264
|
project whose worktrees + engine run on <host> under <basePath>.
|
|
264
|
-
`;async function
|
|
265
|
+
`;async function iS(f){let J=f[0];if(J==="--help"||J==="-h"||J==="help"){process.stdout.write(wL);return}if(J==="--remote"){let{runAddRemote:X}=await Promise.resolve().then(() => (k9(),C9));await X(f.slice(1));return}if(J?.startsWith("-"))process.stderr.write(`kobe add: unknown flag "${J}"
|
|
265
266
|
|
|
266
|
-
${
|
|
267
|
-
`);function
|
|
267
|
+
${wL}`),process.exit(2);let Y=PL(process.cwd(),J&&J.length>0?J:"."),{addSavedRepo:z}=await Promise.resolve().then(() => (gf(),qY)),G=z(Y);if(G.added)console.log(`added ${G.path} (${G.total} saved repo${G.total===1?"":"s"} total)`);else console.log(`already saved: ${G.path}`);await lS(G.path)}async function lS(f){let J=await vL(),Y;try{Y=await J.discoverAdoptableWorktrees(f)}catch(z){console.error(`(skipped worktree scan: ${z instanceof Error?z.message:String(z)})`);return}if(Y.length===0)return;console.log(`scanning ${f}: ${Y.length} unlinked worktree(s) \u2192 importing`),await mL(J,f,Y,iY(void 0))}async function vL(){let{TaskIndexStore:f}=await Promise.resolve().then(() => (vG(),zH)),{GitWorktreeManager:J}=await Promise.resolve().then(() => (qH(),p9)),{Orchestrator:Y}=await Promise.resolve().then(() => (lG(),FW)),z=new f;return await z.load(),new Y({store:z,worktrees:new J})}async function mL(f,J,Y,z){let{connectIfRunning:G}=await Promise.resolve().then(() => (y1(),Jj)),X=await G();try{for(let q of Y){let Q=X?(await X.request("worktree.adopt",{repo:J,worktreePath:q.path,branch:q.branch,vendor:z})).task:await f.adoptWorktree({repo:J,worktreePath:q.path,branch:q.branch,vendor:z});console.log(` adopted ${q.branch} \u2192 task ${Q.id} (${Q.title})`)}}finally{X?.close()}}var cL=["Usage: kobe adopt [glob] [--repo <path>] [--vendor <v>] [--yes]","","Import existing git worktrees in a repo as kobe tasks.","No glob \u2192 dry-run listing. With a glob \u2192 list matches; --yes adopts them.","","Options:"," --repo <path> Repo to scan (default: current directory)"," --vendor <v> Engine vendor for adopted tasks"," -y, --yes Actually adopt the matched worktrees"," -h, --help Print this help",""].join(`
|
|
268
|
+
`);function p8(f){process.stderr.write(`kobe adopt: ${f}
|
|
268
269
|
|
|
269
|
-
${
|
|
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
|
|
270
|
+
${cL}
|
|
271
|
+
`),process.exit(2)}async function aS(f){let J,Y,z,G=!1;for(let U=0;U<f.length;U++){let L=f[U];if(L==="--help"||L==="-h"||L==="help"){process.stdout.write(`${cL}
|
|
272
|
+
`);return}if(L==="--repo"){if(Y=f[++U],Y===void 0)p8("--repo requires a value")}else if(L==="--vendor"){if(z=f[++U],z===void 0)p8("--vendor requires a value")}else if(L==="--yes"||L==="-y")G=!0;else if(L&&!L.startsWith("-")&&J===void 0)J=L;else p8(`unexpected argument "${L}"`)}let{resolveRepoRoot:X}=await Promise.resolve().then(() => (gf(),qY)),q=X(PL(process.cwd(),Y&&Y.length>0?Y:".")),Q=iY(z),H=await vL(),B=await H.discoverAdoptableWorktrees(q);if(B.length===0){console.log(`no adoptable worktrees for ${q} \u2014 every git worktree here is already a task`);return}let V=(U)=>!J||_X(J,U.path);console.log(`adoptable worktrees in ${q}:`);for(let U of B){let L=J?V(U)?"*":" ":"-",O=[U.dirty?"dirty":"",U.kobeManaged?"":"external"].filter(Boolean).join(",");console.log(` ${L} ${U.branch} ${U.path}${O?` (${O})`:""}`)}if(!J){console.log(`
|
|
273
|
+
pass a path glob to adopt, e.g. kobe adopt '${q}/*' --yes`);return}let j=B.filter(V);if(j.length===0){console.log(`
|
|
274
|
+
no worktrees match glob ${JSON.stringify(J)}`);return}if(!G){console.log(`
|
|
275
|
+
${j.length} worktree(s) match \u2014 re-run with --yes to adopt them`);return}await mL(H,q,j,Q),console.log(`done \u2014 adopted ${j.length} worktree(s)`)}function hL(f){f.write(`${Q9()}
|
|
276
|
+
`)}function FJ(f){let J={};for(let Y=0;Y<f.length;Y++){let z=f[Y],G=f[Y+1];if(G===void 0)continue;if(z==="--task-id")J.taskId=G,Y++;else if(z==="--worktree")J.worktree=G,Y++;else if(z==="--target-pane")J.targetPane=G,Y++;else if(z==="--vendor")J.vendor=G,Y++;else if(z==="--preview")J.preview=G,Y++;else if(z==="--session")J.session=G,Y++;else if(z==="--repo")J.repo=G,Y++;else if(z==="--initial-task-id")J.initialTaskId=G,Y++;else if(z==="--action")J.action=G,Y++;else if(z==="--window")J.windowId=G,Y++;else if(z==="--cols")J.cols=G,Y++;else if(z==="--rows")J.rows=G,Y++;else if(z==="--status")J.status=G,Y++;else if(z==="--client")J.client=G,Y++}return J}async function $S(){let[,,...f]=process.argv,[J,...Y]=f;if(J==="--version"||J==="-v"||J==="version"){let{CURRENT_VERSION:G}=await Promise.resolve().then(() => (U1(),q9));console.log(`kobe ${G}`);return}if(J==="--help"||J==="-h"||J==="help"){hL(process.stdout);return}if(J==="add"){await iS(Y);return}if(J==="adopt"){await aS(Y);return}if(J==="export"){let{runExportSubcommand:G}=await Promise.resolve().then(() => (LK(),DK));await G(Y);return}if(J==="repo"){let{runRepoSubcommand:G}=await Promise.resolve().then(() => (AK(),OK));await G(Y);return}if(J==="api"){let{runApiSubcommand:G}=await Promise.resolve().then(() => (vK(),PK));await G(Y);return}if(J==="update"){let{runUpdateSubcommand:G}=await Promise.resolve().then(() => (iK(),dK));await G(Y);return}if(J==="theme"){let{runThemeSubcommand:G}=await Promise.resolve().then(() => (pK(),rK));await G(Y);return}if(J==="feedback"){let{runFeedbackSubcommand:G}=await Promise.resolve().then(() => (eK(),tK));await G(Y);return}if(J==="daemon"){let{runDaemonSubcommand:G}=await Promise.resolve().then(() => (GU(),zU));await G(Y);return}if(J==="doctor"){let{runDoctorSubcommand:G}=await Promise.resolve().then(() => (ZQ(),XQ));await G(Y);return}if(J==="web"){let{runWebSubcommand:G}=await Promise.resolve().then(() => (OU(),FU));await G(Y);return}if(J==="reset"){let{runResetSubcommand:G}=await Promise.resolve().then(() => (ZQ(),XQ));await G(Y);return}if(J==="reload"){let{runReloadSubcommand:G}=await Promise.resolve().then(() => (ZQ(),XQ));await G(Y);return}if(J==="skill"){let{runSkillSubcommand:G}=await Promise.resolve().then(() => (RU(),gU));await G(Y);return}if(J==="hook"){let{runHookSubcommand:G}=await Promise.resolve().then(() => (Ij(),Sj));await G(Y);return}if(J==="new-chattab"){let G=FJ(Y),X=G.session;if(!X)console.error("kobe new-chattab: --session <name> is required"),process.exit(2);let{windowIsSurface:q}=await Promise.resolve().then(() => (Tf(),XX));if(await q(X))return;let Q;if(G.vendor!==void 0){let B=G.vendor.trim(),{getCustomEngineIds:V}=await Promise.resolve().then(() => (gf(),qY)),{isBuiltinVendor:j}=await Promise.resolve().then(() => (K1(),f9));if(!(j(B)||V().includes(B))){let O=[...cf,...V()].join(", "),M=`kobe: unknown engine '${B}' (known: ${O})`,{runTmux:R}=await Promise.resolve().then(() => (Tf(),XX));await R(["display-message","-t",X,M]),console.error(M),process.exit(2)}Q=B;let{setPersistedString:L}=await Promise.resolve().then(() => (gf(),qY));L("lastSelectedVendor",Q)}let{newChatTab:H}=await Promise.resolve().then(() => (J1(),r1));await H(X,Q);return}if(J==="kill-sessions"){let{runTmux:G,KOBE_TMUX_SOCKET:X}=await Promise.resolve().then(() => (Tf(),XX)),q=await G(["kill-server"]);console.log(q===0?`kobe: killed all tmux sessions on the \`${X}\` socket`:`kobe: no tmux sessions to kill on the \`${X}\` socket`);return}if(J==="quick-create"){let X=FJ(Y).session;if(!X)console.error("kobe quick-create: --session <name> is required"),process.exit(2);let{quickCreate:q}=await Promise.resolve().then(() => (J1(),r1));await q(X);return}if(J==="focus-tasks"){let G=FJ(Y),X=G.session;if(!X)console.error("kobe focus-tasks: --session <name> is required"),process.exit(2);let{windowIsSurface:q}=await Promise.resolve().then(() => (Tf(),XX));if(G.windowId&&await q(G.windowId))return;let{selectTasksPane:Q}=await Promise.resolve().then(() => (J1(),r1));await Q(X,{windowId:G.windowId});return}if(J==="heal-layout"){let X=FJ(Y).session;if(!X)console.error("kobe heal-layout: --session <name> is required"),process.exit(2);let{healSessionLayout:q}=await Promise.resolve().then(() => (J1(),r1)),{coalesceLayoutWork:Q}=await Promise.resolve().then(() => (QG(),Sq));await Q(X,"heal",()=>q(X));return}if(J==="resync-window"){let G=FJ(Y),X=G.session;if(!X)console.error("kobe resync-window: --session <name> is required"),process.exit(2);let q=Number.parseInt(G.cols??"",10),Q=Number.parseInt(G.rows??"",10),H=Number.isInteger(q)&&q>0&&Number.isInteger(Q)&&Q>0?{columns:q,rows:Q}:null,{resyncWindowToClient:B}=await Promise.resolve().then(() => (J1(),r1)),{coalesceLayoutWork:V}=await Promise.resolve().then(() => (QG(),Sq));await V(X,"resync",()=>B(X,{size:H,status:G.status,clientName:G.client}));return}if(J==="capture-layout"){let X=FJ(Y).session;if(!X)console.error("kobe capture-layout: --session <name> is required"),process.exit(2);let{captureGlobalLayoutOnDrag:q}=await Promise.resolve().then(() => (J1(),r1)),{coalesceLayoutWork:Q,genAgeMs:H,RESIZE_GUARD_MS:B}=await Promise.resolve().then(() => (QG(),Sq));await Q(X,"capture",async()=>{if(H(X,"resize")<B)return;await q(X)});return}if(J==="layout"){let G=FJ(Y),X=G.session;if(!X)console.error("kobe layout: --session <name> is required"),process.exit(2);let q=G.action;if(!q||!new Set(["workspace-split","workspace-close","workspace-reset","tasks-toggle","tasks-restore","ops-toggle","terminal-toggle","zen-toggle","chat-tab-close"]).has(q))console.error("kobe layout: --action must be one of workspace-split, workspace-close, workspace-reset, tasks-toggle, tasks-restore, ops-toggle, terminal-toggle, zen-toggle, chat-tab-close"),process.exit(2);let{runLayoutAction:H}=await Promise.resolve().then(() => (J1(),r1));await H(X,q,{windowId:G.windowId});return}if(J==="quick-task"){let G=FJ(Y),{startQuickTaskHost:X}=await Promise.resolve().then(() => (p4(),r4));await X({session:G.session});return}if(J==="tasks"){let G=FJ(Y),{startTasksPane:X}=await Promise.resolve().then(() => (pD(),rD));await X({initialTaskId:G.initialTaskId});return}if(J==="settings"){let{startSettingsHost:G}=await Promise.resolve().then(() => (oD(),_D));await G();return}if(J==="help-page"){let{startHelpHost:G}=await Promise.resolve().then(() => (tD(),sD));await G();return}if(J==="new-task"){let G=FJ(Y),{startNewTaskHost:X}=await Promise.resolve().then(() => (U8(),m4));await X({defaultRepo:G.repo});return}if(J==="update-page"){let{startUpdateHost:G}=await Promise.resolve().then(() => (fL(),eD));await G();return}if(J==="ops"){let G=FJ(Y);if(!G.worktree)console.error("kobe ops: --worktree <path> is required"),process.exit(2);if(G.preview){let{startOpsPreview:q}=await Promise.resolve().then(() => (r8(),$8));await q({worktree:G.worktree,relPath:G.preview});return}let{startOpsHost:X}=await Promise.resolve().then(() => (r8(),$8));await X({taskId:G.taskId??"",worktree:G.worktree,targetPane:G.targetPane??null,vendor:iY(G.vendor)});return}if(J!==void 0)console.error(`kobe: unknown command '${J}'`),hL(process.stderr),process.exit(2);let{startTui:z}=await Promise.resolve().then(() => (xL(),EL));await z()}$S().catch((f)=>{console.error("kobe failed to start:",f),process.exit(1)});
|